Merge vk-gl-cts/vulkan-cts-1.2.5 into vk-gl-cts/vulkan-cts-1.2.6

Change-Id: I96cce7d1a37d9ab836f098aecf1f5895a9e0185d
diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 0000000..95a2004
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1,7 @@
+# Set the default behavior, in case people don't have core.autocrlf set.
+* text=auto
+
+# Explicitly declare text files you want to always be normalized
+# and converted to native line endings on checkout.
+*.txt text diff=text
+
diff --git a/AndroidGen.mk b/AndroidGen.mk
index f00dc29..e2cd996 100644
--- a/AndroidGen.mk
+++ b/AndroidGen.mk
@@ -118,6 +118,7 @@
 	external/vulkancts/modules/vulkan/descriptor_indexing/vktDescriptorSetsIndexingTestsUtils.cpp \
 	external/vulkancts/modules/vulkan/device_group/vktDeviceGroupRendering.cpp \
 	external/vulkancts/modules/vulkan/draw/vktBasicDrawTests.cpp \
+	external/vulkancts/modules/vulkan/draw/vktDrawAhbTests.cpp \
 	external/vulkancts/modules/vulkan/draw/vktDrawBaseClass.cpp \
 	external/vulkancts/modules/vulkan/draw/vktDrawBufferObjectUtil.cpp \
 	external/vulkancts/modules/vulkan/draw/vktDrawConcurrentTests.cpp \
@@ -131,6 +132,7 @@
 	external/vulkancts/modules/vulkan/draw/vktDrawIndirectTest.cpp \
 	external/vulkancts/modules/vulkan/draw/vktDrawInstancedTests.cpp \
 	external/vulkancts/modules/vulkan/draw/vktDrawInvertedDepthRangesTests.cpp \
+	external/vulkancts/modules/vulkan/draw/vktDrawMultipleClearsWithinRenderPass.cpp \
 	external/vulkancts/modules/vulkan/draw/vktDrawMultipleInterpolationTests.cpp \
 	external/vulkancts/modules/vulkan/draw/vktDrawNegativeViewportHeightTests.cpp \
 	external/vulkancts/modules/vulkan/draw/vktDrawOutputLocationTests.cpp \
@@ -142,8 +144,10 @@
 	external/vulkancts/modules/vulkan/draw/vktDrawTests.cpp \
 	external/vulkancts/modules/vulkan/dynamic_state/vktDynamicStateBaseClass.cpp \
 	external/vulkancts/modules/vulkan/dynamic_state/vktDynamicStateCBTests.cpp \
+	external/vulkancts/modules/vulkan/dynamic_state/vktDynamicStateComputeTests.cpp \
 	external/vulkancts/modules/vulkan/dynamic_state/vktDynamicStateDSTests.cpp \
 	external/vulkancts/modules/vulkan/dynamic_state/vktDynamicStateGeneralTests.cpp \
+	external/vulkancts/modules/vulkan/dynamic_state/vktDynamicStateInheritanceTests.cpp \
 	external/vulkancts/modules/vulkan/dynamic_state/vktDynamicStateRSTests.cpp \
 	external/vulkancts/modules/vulkan/dynamic_state/vktDynamicStateTests.cpp \
 	external/vulkancts/modules/vulkan/dynamic_state/vktDynamicStateVPTests.cpp \
@@ -155,6 +159,7 @@
 	external/vulkancts/modules/vulkan/fragment_shader_interlock/vktFragmentShaderInterlockBasic.cpp \
 	external/vulkancts/modules/vulkan/fragment_shader_interlock/vktFragmentShaderInterlockTests.cpp \
 	external/vulkancts/modules/vulkan/fragment_shading_rate/vktFragmentShadingRateBasic.cpp \
+	external/vulkancts/modules/vulkan/fragment_shading_rate/vktFragmentShadingRatePixelConsistency.cpp \
 	external/vulkancts/modules/vulkan/fragment_shading_rate/vktFragmentShadingRateTests.cpp \
 	external/vulkancts/modules/vulkan/geometry/vktGeometryBasicClass.cpp \
 	external/vulkancts/modules/vulkan/geometry/vktGeometryBasicGeometryShaderTests.cpp \
@@ -173,6 +178,7 @@
 	external/vulkancts/modules/vulkan/image/vktImageLoadStoreUtil.cpp \
 	external/vulkancts/modules/vulkan/image/vktImageMisalignedCubeTests.cpp \
 	external/vulkancts/modules/vulkan/image/vktImageMismatchedFormatsTests.cpp \
+	external/vulkancts/modules/vulkan/image/vktImageMismatchedWriteOpTests.cpp \
 	external/vulkancts/modules/vulkan/image/vktImageMultisampleLoadStoreTests.cpp \
 	external/vulkancts/modules/vulkan/image/vktImageMutableTests.cpp \
 	external/vulkancts/modules/vulkan/image/vktImageQualifiersTests.cpp \
@@ -199,10 +205,13 @@
 	external/vulkancts/modules/vulkan/multiview/vktMultiViewRenderUtil.cpp \
 	external/vulkancts/modules/vulkan/multiview/vktMultiViewTests.cpp \
 	external/vulkancts/modules/vulkan/pch.cpp \
+	external/vulkancts/modules/vulkan/pipeline/vktPipelineBindPointTests.cpp \
 	external/vulkancts/modules/vulkan/pipeline/vktPipelineBlendOperationAdvancedTests.cpp \
 	external/vulkancts/modules/vulkan/pipeline/vktPipelineBlendTests.cpp \
 	external/vulkancts/modules/vulkan/pipeline/vktPipelineCacheTests.cpp \
 	external/vulkancts/modules/vulkan/pipeline/vktPipelineClearUtil.cpp \
+	external/vulkancts/modules/vulkan/pipeline/vktPipelineColorWriteEnableTests.cpp \
+	external/vulkancts/modules/vulkan/pipeline/vktPipelineCreationCacheControlTests.cpp \
 	external/vulkancts/modules/vulkan/pipeline/vktPipelineCreationFeedbackTests.cpp \
 	external/vulkancts/modules/vulkan/pipeline/vktPipelineDepthRangeUnrestrictedTests.cpp \
 	external/vulkancts/modules/vulkan/pipeline/vktPipelineDepthTests.cpp \
@@ -217,9 +226,11 @@
 	external/vulkancts/modules/vulkan/pipeline/vktPipelineImageUtil.cpp \
 	external/vulkancts/modules/vulkan/pipeline/vktPipelineImageViewTests.cpp \
 	external/vulkancts/modules/vulkan/pipeline/vktPipelineInputAssemblyTests.cpp \
+	external/vulkancts/modules/vulkan/pipeline/vktPipelineLogicOpTests.cpp \
 	external/vulkancts/modules/vulkan/pipeline/vktPipelineMakeUtil.cpp \
 	external/vulkancts/modules/vulkan/pipeline/vktPipelineMatchedAttachmentsTests.cpp \
 	external/vulkancts/modules/vulkan/pipeline/vktPipelineMaxVaryingsTests.cpp \
+	external/vulkancts/modules/vulkan/pipeline/vktPipelineMiscTests.cpp \
 	external/vulkancts/modules/vulkan/pipeline/vktPipelineMultisampleBase.cpp \
 	external/vulkancts/modules/vulkan/pipeline/vktPipelineMultisampleBaseResolve.cpp \
 	external/vulkancts/modules/vulkan/pipeline/vktPipelineMultisampleBaseResolveAndPerSampleFetch.cpp \
@@ -231,6 +242,7 @@
 	external/vulkancts/modules/vulkan/pipeline/vktPipelineMultisampleShaderFragmentMaskTests.cpp \
 	external/vulkancts/modules/vulkan/pipeline/vktPipelineMultisampleTests.cpp \
 	external/vulkancts/modules/vulkan/pipeline/vktPipelineMultisampleTestsUtil.cpp \
+	external/vulkancts/modules/vulkan/pipeline/vktPipelineNoPositionTests.cpp \
 	external/vulkancts/modules/vulkan/pipeline/vktPipelinePushConstantTests.cpp \
 	external/vulkancts/modules/vulkan/pipeline/vktPipelinePushDescriptorTests.cpp \
 	external/vulkancts/modules/vulkan/pipeline/vktPipelineReferenceRenderer.cpp \
@@ -244,7 +256,6 @@
 	external/vulkancts/modules/vulkan/pipeline/vktPipelineTests.cpp \
 	external/vulkancts/modules/vulkan/pipeline/vktPipelineTimestampTests.cpp \
 	external/vulkancts/modules/vulkan/pipeline/vktPipelineVertexInputTests.cpp \
-	external/vulkancts/modules/vulkan/pipeline/vktPipelineVertexOnlyTests.cpp \
 	external/vulkancts/modules/vulkan/pipeline/vktPipelineVertexUtil.cpp \
 	external/vulkancts/modules/vulkan/postmortem/vktPostmortemShaderTimeoutTests.cpp \
 	external/vulkancts/modules/vulkan/postmortem/vktPostmortemTests.cpp \
@@ -277,13 +288,18 @@
 	external/vulkancts/modules/vulkan/rasterization/vktRasterizationFragShaderSideEffectsTests.cpp \
 	external/vulkancts/modules/vulkan/rasterization/vktRasterizationTests.cpp \
 	external/vulkancts/modules/vulkan/ray_query/vktRayQueryAccelerationStructuresTests.cpp \
+	external/vulkancts/modules/vulkan/ray_query/vktRayQueryBarycentricCoordinatesTests.cpp \
 	external/vulkancts/modules/vulkan/ray_query/vktRayQueryBuiltinTests.cpp \
 	external/vulkancts/modules/vulkan/ray_query/vktRayQueryCullRayFlagsTests.cpp \
+	external/vulkancts/modules/vulkan/ray_query/vktRayQueryDirectionTests.cpp \
+	external/vulkancts/modules/vulkan/ray_query/vktRayQueryMiscTests.cpp \
+	external/vulkancts/modules/vulkan/ray_query/vktRayQueryProceduralGeometryTests.cpp \
 	external/vulkancts/modules/vulkan/ray_query/vktRayQueryTests.cpp \
 	external/vulkancts/modules/vulkan/ray_query/vktRayQueryTraversalControlTests.cpp \
 	external/vulkancts/modules/vulkan/ray_query/vktRayQueryWatertightnessTests.cpp \
 	external/vulkancts/modules/vulkan/ray_tracing/vktRayTracingAccelerationStructuresTests.cpp \
 	external/vulkancts/modules/vulkan/ray_tracing/vktRayTracingBarrierTests.cpp \
+	external/vulkancts/modules/vulkan/ray_tracing/vktRayTracingBarycentricCoordinatesTests.cpp \
 	external/vulkancts/modules/vulkan/ray_tracing/vktRayTracingBuildIndirectTests.cpp \
 	external/vulkancts/modules/vulkan/ray_tracing/vktRayTracingBuildLargeTests.cpp \
 	external/vulkancts/modules/vulkan/ray_tracing/vktRayTracingBuildTests.cpp \
@@ -291,10 +307,13 @@
 	external/vulkancts/modules/vulkan/ray_tracing/vktRayTracingCallableShadersTests.cpp \
 	external/vulkancts/modules/vulkan/ray_tracing/vktRayTracingCaptureReplayTests.cpp \
 	external/vulkancts/modules/vulkan/ray_tracing/vktRayTracingComplexControlFlowTests.cpp \
+	external/vulkancts/modules/vulkan/ray_tracing/vktRayTracingDataSpillTests.cpp \
+	external/vulkancts/modules/vulkan/ray_tracing/vktRayTracingDirectionTests.cpp \
 	external/vulkancts/modules/vulkan/ray_tracing/vktRayTracingMemGuaranteeTests.cpp \
 	external/vulkancts/modules/vulkan/ray_tracing/vktRayTracingMiscTests.cpp \
 	external/vulkancts/modules/vulkan/ray_tracing/vktRayTracingNullASTests.cpp \
 	external/vulkancts/modules/vulkan/ray_tracing/vktRayTracingPipelineLibraryTests.cpp \
+	external/vulkancts/modules/vulkan/ray_tracing/vktRayTracingProceduralGeometryTests.cpp \
 	external/vulkancts/modules/vulkan/ray_tracing/vktRayTracingShaderBindingTableTests.cpp \
 	external/vulkancts/modules/vulkan/ray_tracing/vktRayTracingTests.cpp \
 	external/vulkancts/modules/vulkan/ray_tracing/vktRayTracingTraceRaysTests.cpp \
@@ -379,6 +398,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 \
@@ -681,7 +701,6 @@
 	framework/opengl/wrapper/glwWrapper.cpp \
 	framework/platform/android/tcuAndroidAssets.cpp \
 	framework/platform/android/tcuAndroidExecService.cpp \
-	framework/platform/android/tcuAndroidInternals.cpp \
 	framework/platform/android/tcuAndroidJNI.cpp \
 	framework/platform/android/tcuAndroidMain.cpp \
 	framework/platform/android/tcuAndroidNativeActivity.cpp \
@@ -818,6 +837,7 @@
 	modules/gles2/functional/es2fLifetimeTests.cpp \
 	modules/gles2/functional/es2fLightAmountTest.cpp \
 	modules/gles2/functional/es2fMultisampleTests.cpp \
+	modules/gles2/functional/es2fMultisampledRenderToTextureTests.cpp \
 	modules/gles2/functional/es2fNegativeBufferApiTests.cpp \
 	modules/gles2/functional/es2fNegativeFragmentApiTests.cpp \
 	modules/gles2/functional/es2fNegativeShaderApiTests.cpp \
@@ -1136,6 +1156,7 @@
 	modules/gles31/tes31TestCase.cpp \
 	modules/gles31/tes31TestPackage.cpp \
 	modules/gles31/tes31TestPackageEntry.cpp \
+	modules/gles31/tgl45TestPackage.cpp \
 	modules/glshared/glsAttributeLocationTests.cpp \
 	modules/glshared/glsBufferTestUtil.cpp \
 	modules/glshared/glsBuiltinPrecisionTests.cpp \
diff --git a/CMakeLists.txt b/CMakeLists.txt
index ecb1da9..83c050c 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,7 +1,7 @@
 # dEQP cmake file
 
 # Module FindGit requires cmake >= 2.8.2
-cmake_minimum_required(VERSION 3.0)
+cmake_minimum_required(VERSION 3.10.2)
 
 find_package(Git)
 find_package(PythonInterp 3)
@@ -66,6 +66,13 @@
 	# \note ZLIB_LIBRARY and ZLIB_INCLUDE_PATH are promoted from external/zlib/CMakeLists.txt
 endif ()
 
+if (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/external/renderdoc/src/renderdoc_app.h")
+	message(STATUS "Renderdoc header found, integration enabled")
+	set(DEQP_HAVE_RENDERDOC_HEADER 1)
+else ()
+	message(STATUS "Renderdoc header not found, integration will not work")
+endif ()
+
 include_directories(${ZLIB_INCLUDE_PATH})
 
 # libpng
diff --git a/android/cts/master/egl-master.txt b/android/cts/master/egl-master.txt
index 27a04bd..6a02c46 100644
--- a/android/cts/master/egl-master.txt
+++ b/android/cts/master/egl-master.txt
@@ -3653,26 +3653,6 @@
 dEQP-EGL.functional.robustness.create_context.query_robust_access
 dEQP-EGL.functional.robustness.create_context.no_reset_notification
 dEQP-EGL.functional.robustness.create_context.lose_context_on_reset
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.reset_status.vertex
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.reset_status.fragment
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.reset_status.vertex_and_fragment
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.reset_status.compute
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.sync_status.vertex
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.sync_status.fragment
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.sync_status.vertex_and_fragment
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.sync_status.compute
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.query_status.vertex
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.query_status.fragment
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.query_status.vertex_and_fragment
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.query_status.compute
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.shared_context_status.vertex
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.shared_context_status.fragment
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.shared_context_status.vertex_and_fragment
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.shared_context_status.compute
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.recover_from_reset.vertex
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.recover_from_reset.fragment
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.recover_from_reset.vertex_and_fragment
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.recover_from_reset.compute
 dEQP-EGL.functional.robustness.reset_context.shaders.out_of_bounds.reset_status.reads.uniform_block.vertex
 dEQP-EGL.functional.robustness.reset_context.shaders.out_of_bounds.reset_status.reads.uniform_block.fragment
 dEQP-EGL.functional.robustness.reset_context.shaders.out_of_bounds.reset_status.reads.uniform_block.vertex_and_fragment
@@ -3726,11 +3706,9 @@
 dEQP-EGL.functional.wide_color.pbuffer_1010102_colorspace_p3_passthrough
 dEQP-EGL.functional.wide_color.window_8888_colorspace_default
 dEQP-EGL.functional.wide_color.window_8888_colorspace_srgb
-dEQP-EGL.functional.wide_color.window_8888_colorspace_p3
 dEQP-EGL.functional.wide_color.window_8888_colorspace_p3_passthrough
 dEQP-EGL.functional.wide_color.pbuffer_8888_colorspace_default
 dEQP-EGL.functional.wide_color.pbuffer_8888_colorspace_srgb
-dEQP-EGL.functional.wide_color.pbuffer_8888_colorspace_p3
 dEQP-EGL.functional.wide_color.pbuffer_8888_colorspace_p3_passthrough
 dEQP-EGL.functional.wide_color.window_888_colorspace_default
 dEQP-EGL.functional.wide_color.window_888_colorspace_srgb
diff --git a/android/cts/master/gles2-master-2020-03-01.txt b/android/cts/master/gles2-master-2020-03-01.txt
index 3b10c21..854618e 100644
--- a/android/cts/master/gles2-master-2020-03-01.txt
+++ b/android/cts/master/gles2-master-2020-03-01.txt
@@ -124,6 +124,7 @@
 dEQP-GLES2.functional.light_amount.12omni
 dEQP-GLES2.functional.light_amount.14omni
 dEQP-GLES2.functional.light_amount.16omni
+dEQP-GLES2.functional.multisampled_render_to_texture.readpixels
 dEQP-GLES2.functional.shaders.preprocessor.basic.correct_phases_vertex
 dEQP-GLES2.functional.shaders.preprocessor.basic.correct_phases_fragment
 dEQP-GLES2.functional.shaders.preprocessor.basic.invalid_identifier_vertex
diff --git a/android/cts/master/gles2-master-2021-03-01.txt b/android/cts/master/gles2-master-2021-03-01.txt
index 3afd288..8b1c1a1 100644
--- a/android/cts/master/gles2-master-2021-03-01.txt
+++ b/android/cts/master/gles2-master-2021-03-01.txt
@@ -30,4 +30,3 @@
 dEQP-GLES2.functional.shaders.indexing.tmp_array.vec4_const_write_static_loop_read_fragment
 dEQP-GLES2.functional.shaders.indexing.tmp_array.vec4_const_write_dynamic_loop_read_vertex
 dEQP-GLES2.functional.shaders.indexing.tmp_array.vec4_const_write_dynamic_loop_read_fragment
-dEQP-GLES2.functional.shaders.constant_expressions.invalid.precision_specifier
diff --git a/android/cts/master/gles2-master.txt b/android/cts/master/gles2-master.txt
index b5ac710..a9475c9 100644
--- a/android/cts/master/gles2-master.txt
+++ b/android/cts/master/gles2-master.txt
@@ -124,6 +124,7 @@
 dEQP-GLES2.functional.light_amount.12omni
 dEQP-GLES2.functional.light_amount.14omni
 dEQP-GLES2.functional.light_amount.16omni
+dEQP-GLES2.functional.multisampled_render_to_texture.readpixels
 dEQP-GLES2.functional.shaders.preprocessor.basic.correct_phases_vertex
 dEQP-GLES2.functional.shaders.preprocessor.basic.correct_phases_fragment
 dEQP-GLES2.functional.shaders.preprocessor.basic.invalid_identifier_vertex
@@ -7201,7 +7202,6 @@
 dEQP-GLES2.functional.shaders.constant_expressions.builtin_functions.geometric.normalize_vec3_fragment
 dEQP-GLES2.functional.shaders.constant_expressions.builtin_functions.geometric.normalize_vec4_vertex
 dEQP-GLES2.functional.shaders.constant_expressions.builtin_functions.geometric.normalize_vec4_fragment
-dEQP-GLES2.functional.shaders.constant_expressions.invalid.precision_specifier
 dEQP-GLES2.functional.shaders.random.basic_expression.vertex.0
 dEQP-GLES2.functional.shaders.random.basic_expression.vertex.1
 dEQP-GLES2.functional.shaders.random.basic_expression.vertex.2
diff --git a/android/cts/master/gles3-incremental-deqp.txt b/android/cts/master/gles3-incremental-deqp.txt
new file mode 100644
index 0000000..afffe44
--- /dev/null
+++ b/android/cts/master/gles3-incremental-deqp.txt
@@ -0,0 +1,73 @@
+dEQP-GLES3.info.vendor
+dEQP-GLES3.info.renderer
+dEQP-GLES3.info.version
+dEQP-GLES3.info.shading_language_version
+dEQP-GLES3.info.extensions
+dEQP-GLES3.info.render_target
+dEQP-GLES3.functional.prerequisite.state_reset
+dEQP-GLES3.functional.prerequisite.clear_color
+dEQP-GLES3.functional.prerequisite.read_pixels
+dEQP-GLES3.functional.implementation_limits.max_element_index
+dEQP-GLES3.functional.implementation_limits.subpixel_bits
+dEQP-GLES3.functional.color_clear.single_rgb
+dEQP-GLES3.functional.color_clear.single_rgba
+dEQP-GLES3.functional.color_clear.multiple_rgb
+dEQP-GLES3.functional.color_clear.multiple_rgba
+dEQP-GLES3.functional.shaders.swizzles.vector_swizzles.mediump_ivec3_b_fragment
+dEQP-GLES3.functional.shaders.swizzles.vector_swizzles.mediump_ivec3_rb_vertex
+dEQP-GLES3.functional.shaders.swizzles.vector_swizzles.mediump_ivec3_rb_fragment
+dEQP-GLES3.functional.shaders.swizzles.vector_swizzles.mediump_ivec3_bb_vertex
+dEQP-GLES3.functional.shaders.indexing.matrix_subscript.mat4x2_dynamic_write_static_read_fragment
+dEQP-GLES3.functional.shaders.indexing.matrix_subscript.mat4x2_dynamic_write_dynamic_read_vertex
+dEQP-GLES3.functional.shaders.indexing.matrix_subscript.mat4x2_dynamic_write_dynamic_read_fragment
+dEQP-GLES3.functional.shaders.operator.angle_and_trigonometry.tanh.highp_vec2_fragment
+dEQP-GLES3.functional.shaders.operator.angle_and_trigonometry.tanh.mediump_vec3_vertex
+dEQP-GLES3.functional.shaders.operator.angle_and_trigonometry.tanh.mediump_vec3_fragment
+dEQP-GLES3.functional.texture.format.compressed.etc1_2d_pot
+dEQP-GLES3.functional.texture.format.compressed.etc1_2d_npot
+dEQP-GLES3.functional.texture.format.compressed.etc1_cube_pot
+dEQP-GLES3.functional.texture.format.compressed.etc1_cube_npot
+dEQP-GLES3.functional.texture.format.compressed.eac_r11_2d_pot
+dEQP-GLES3.functional.texture.format.compressed.eac_r11_cube_pot
+dEQP-GLES3.functional.texture.format.compressed.eac_r11_2d_npot
+dEQP-GLES3.functional.texture.format.compressed.eac_r11_cube_npot
+dEQP-GLES3.functional.texture.format.compressed.eac_signed_r11_2d_pot
+dEQP-GLES3.functional.texture.format.compressed.eac_signed_r11_cube_pot
+dEQP-GLES3.functional.texture.format.compressed.eac_signed_r11_2d_npot
+dEQP-GLES3.functional.texture.format.compressed.eac_signed_r11_cube_npot
+dEQP-GLES3.functional.texture.format.compressed.eac_rg11_2d_pot
+dEQP-GLES3.functional.texture.format.compressed.eac_rg11_cube_pot
+dEQP-GLES3.functional.texture.format.compressed.eac_rg11_2d_npot
+dEQP-GLES3.functional.texture.format.compressed.eac_rg11_cube_npot
+dEQP-GLES3.functional.texture.format.compressed.eac_signed_rg11_2d_pot
+dEQP-GLES3.functional.texture.format.compressed.eac_signed_rg11_cube_pot
+dEQP-GLES3.functional.texture.format.compressed.eac_signed_rg11_2d_npot
+dEQP-GLES3.functional.texture.format.compressed.eac_signed_rg11_cube_npot
+dEQP-GLES3.functional.texture.format.compressed.etc2_rgb8_2d_pot
+dEQP-GLES3.functional.texture.format.compressed.etc2_rgb8_cube_pot
+dEQP-GLES3.functional.texture.format.compressed.etc2_rgb8_2d_npot
+dEQP-GLES3.functional.texture.format.compressed.etc2_rgb8_cube_npot
+dEQP-GLES3.functional.texture.format.compressed.etc2_srgb8_2d_pot
+dEQP-GLES3.functional.texture.format.compressed.etc2_srgb8_cube_pot
+dEQP-GLES3.functional.texture.format.compressed.etc2_srgb8_2d_npot
+dEQP-GLES3.functional.texture.format.compressed.etc2_srgb8_cube_npot
+dEQP-GLES3.functional.texture.format.compressed.etc2_rgb8_punchthrough_alpha1_2d_pot
+dEQP-GLES3.functional.texture.format.compressed.etc2_rgb8_punchthrough_alpha1_cube_pot
+dEQP-GLES3.functional.texture.format.compressed.etc2_rgb8_punchthrough_alpha1_2d_npot
+dEQP-GLES3.functional.texture.format.compressed.etc2_rgb8_punchthrough_alpha1_cube_npot
+dEQP-GLES3.functional.texture.format.compressed.etc2_srgb8_punchthrough_alpha1_2d_pot
+dEQP-GLES3.functional.texture.format.compressed.etc2_srgb8_punchthrough_alpha1_cube_pot
+dEQP-GLES3.functional.texture.format.compressed.etc2_srgb8_punchthrough_alpha1_2d_npot
+dEQP-GLES3.functional.texture.format.compressed.etc2_srgb8_punchthrough_alpha1_cube_npot
+dEQP-GLES3.functional.texture.format.compressed.etc2_eac_rgba8_2d_pot
+dEQP-GLES3.functional.texture.format.compressed.etc2_eac_rgba8_cube_pot
+dEQP-GLES3.functional.texture.format.compressed.etc2_eac_rgba8_2d_npot
+dEQP-GLES3.functional.texture.format.compressed.etc2_eac_rgba8_cube_npot
+dEQP-GLES3.functional.texture.format.compressed.etc2_eac_srgb8_alpha8_2d_pot
+dEQP-GLES3.functional.texture.format.compressed.etc2_eac_srgb8_alpha8_cube_pot
+dEQP-GLES3.functional.texture.format.compressed.etc2_eac_srgb8_alpha8_2d_npot
+dEQP-GLES3.functional.texture.format.compressed.etc2_eac_srgb8_alpha8_cube_npot
+dEQP-GLES3.functional.rasterization.fbo.rbo_multisample_max.primitives.triangles
+dEQP-GLES3.functional.rasterization.fbo.rbo_multisample_max.primitives.lines
+dEQP-GLES3.functional.rasterization.fbo.rbo_multisample_max.primitives.lines_wide
+dEQP-GLES3.functional.rasterization.fbo.rbo_multisample_max.primitives.points
diff --git a/android/cts/master/gles3-master-2020-03-01.txt b/android/cts/master/gles3-master-2020-03-01.txt
index f2a730a..ab66dc8 100644
--- a/android/cts/master/gles3-master-2020-03-01.txt
+++ b/android/cts/master/gles3-master-2020-03-01.txt
@@ -39642,384 +39642,6 @@
 dEQP-GLES3.functional.transform_feedback.array.interleaved.triangles.lowp_uvec4
 dEQP-GLES3.functional.transform_feedback.array.interleaved.triangles.mediump_uvec4
 dEQP-GLES3.functional.transform_feedback.array.interleaved.triangles.highp_uvec4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.lowp_float
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.mediump_float
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.highp_float
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.lowp_vec2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.mediump_vec2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.highp_vec2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.lowp_vec3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.mediump_vec3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.highp_vec3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.lowp_vec4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.mediump_vec4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.highp_vec4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.lowp_mat2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.mediump_mat2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.highp_mat2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.lowp_mat2x3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.mediump_mat2x3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.highp_mat2x3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.lowp_mat2x4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.mediump_mat2x4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.highp_mat2x4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.lowp_mat3x2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.mediump_mat3x2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.highp_mat3x2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.lowp_mat3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.mediump_mat3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.highp_mat3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.lowp_mat3x4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.mediump_mat3x4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.highp_mat3x4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.lowp_mat4x2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.mediump_mat4x2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.highp_mat4x2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.lowp_mat4x3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.mediump_mat4x3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.highp_mat4x3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.lowp_mat4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.mediump_mat4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.highp_mat4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.lowp_int
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.mediump_int
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.highp_int
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.lowp_ivec2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.mediump_ivec2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.highp_ivec2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.lowp_ivec3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.mediump_ivec3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.highp_ivec3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.lowp_ivec4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.mediump_ivec4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.highp_ivec4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.lowp_uint
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.mediump_uint
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.highp_uint
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.lowp_uvec2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.mediump_uvec2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.highp_uvec2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.lowp_uvec3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.mediump_uvec3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.highp_uvec3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.lowp_uvec4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.mediump_uvec4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.highp_uvec4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.lowp_float
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.mediump_float
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.highp_float
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.lowp_vec2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.mediump_vec2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.highp_vec2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.lowp_vec3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.mediump_vec3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.highp_vec3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.lowp_vec4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.mediump_vec4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.highp_vec4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.lowp_mat2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.mediump_mat2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.highp_mat2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.lowp_mat2x3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.mediump_mat2x3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.highp_mat2x3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.lowp_mat2x4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.mediump_mat2x4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.highp_mat2x4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.lowp_mat3x2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.mediump_mat3x2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.highp_mat3x2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.lowp_mat3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.mediump_mat3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.highp_mat3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.lowp_mat3x4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.mediump_mat3x4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.highp_mat3x4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.lowp_mat4x2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.mediump_mat4x2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.highp_mat4x2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.lowp_mat4x3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.mediump_mat4x3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.highp_mat4x3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.lowp_mat4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.mediump_mat4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.highp_mat4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.lowp_int
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.mediump_int
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.highp_int
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.lowp_ivec2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.mediump_ivec2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.highp_ivec2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.lowp_ivec3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.mediump_ivec3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.highp_ivec3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.lowp_ivec4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.mediump_ivec4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.highp_ivec4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.lowp_uint
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.mediump_uint
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.highp_uint
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.lowp_uvec2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.mediump_uvec2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.highp_uvec2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.lowp_uvec3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.mediump_uvec3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.highp_uvec3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.lowp_uvec4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.mediump_uvec4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.highp_uvec4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.lowp_float
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.mediump_float
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.highp_float
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.lowp_vec2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.mediump_vec2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.highp_vec2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.lowp_vec3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.mediump_vec3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.highp_vec3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.lowp_vec4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.mediump_vec4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.highp_vec4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.lowp_mat2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.mediump_mat2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.highp_mat2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.lowp_mat2x3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.mediump_mat2x3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.highp_mat2x3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.lowp_mat2x4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.mediump_mat2x4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.highp_mat2x4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.lowp_mat3x2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.mediump_mat3x2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.highp_mat3x2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.lowp_mat3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.mediump_mat3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.highp_mat3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.lowp_mat3x4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.mediump_mat3x4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.highp_mat3x4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.lowp_mat4x2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.mediump_mat4x2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.highp_mat4x2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.lowp_mat4x3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.mediump_mat4x3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.highp_mat4x3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.lowp_mat4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.mediump_mat4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.highp_mat4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.lowp_int
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.mediump_int
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.highp_int
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.lowp_ivec2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.mediump_ivec2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.highp_ivec2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.lowp_ivec3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.mediump_ivec3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.highp_ivec3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.lowp_ivec4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.mediump_ivec4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.highp_ivec4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.lowp_uint
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.mediump_uint
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.highp_uint
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.lowp_uvec2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.mediump_uvec2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.highp_uvec2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.lowp_uvec3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.mediump_uvec3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.highp_uvec3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.lowp_uvec4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.mediump_uvec4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.highp_uvec4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.lowp_float
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.mediump_float
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.highp_float
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.lowp_vec2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.mediump_vec2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.highp_vec2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.lowp_vec3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.mediump_vec3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.highp_vec3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.lowp_vec4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.mediump_vec4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.highp_vec4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.lowp_mat2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.mediump_mat2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.highp_mat2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.lowp_mat2x3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.mediump_mat2x3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.highp_mat2x3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.lowp_mat2x4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.mediump_mat2x4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.highp_mat2x4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.lowp_mat3x2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.mediump_mat3x2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.highp_mat3x2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.lowp_mat3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.mediump_mat3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.highp_mat3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.lowp_mat3x4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.mediump_mat3x4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.highp_mat3x4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.lowp_mat4x2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.mediump_mat4x2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.highp_mat4x2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.lowp_mat4x3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.mediump_mat4x3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.highp_mat4x3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.lowp_mat4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.mediump_mat4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.highp_mat4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.lowp_int
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.mediump_int
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.highp_int
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.lowp_ivec2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.mediump_ivec2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.highp_ivec2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.lowp_ivec3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.mediump_ivec3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.highp_ivec3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.lowp_ivec4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.mediump_ivec4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.highp_ivec4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.lowp_uint
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.mediump_uint
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.highp_uint
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.lowp_uvec2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.mediump_uvec2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.highp_uvec2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.lowp_uvec3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.mediump_uvec3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.highp_uvec3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.lowp_uvec4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.mediump_uvec4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.highp_uvec4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.lowp_float
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.mediump_float
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.highp_float
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.lowp_vec2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.mediump_vec2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.highp_vec2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.lowp_vec3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.mediump_vec3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.highp_vec3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.lowp_vec4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.mediump_vec4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.highp_vec4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.lowp_mat2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.mediump_mat2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.highp_mat2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.lowp_mat2x3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.mediump_mat2x3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.highp_mat2x3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.lowp_mat2x4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.mediump_mat2x4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.highp_mat2x4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.lowp_mat3x2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.mediump_mat3x2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.highp_mat3x2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.lowp_mat3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.mediump_mat3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.highp_mat3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.lowp_mat3x4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.mediump_mat3x4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.highp_mat3x4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.lowp_mat4x2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.mediump_mat4x2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.highp_mat4x2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.lowp_mat4x3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.mediump_mat4x3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.highp_mat4x3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.lowp_mat4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.mediump_mat4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.highp_mat4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.lowp_int
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.mediump_int
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.highp_int
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.lowp_ivec2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.mediump_ivec2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.highp_ivec2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.lowp_ivec3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.mediump_ivec3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.highp_ivec3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.lowp_ivec4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.mediump_ivec4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.highp_ivec4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.lowp_uint
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.mediump_uint
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.highp_uint
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.lowp_uvec2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.mediump_uvec2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.highp_uvec2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.lowp_uvec3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.mediump_uvec3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.highp_uvec3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.lowp_uvec4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.mediump_uvec4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.highp_uvec4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.lowp_float
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.mediump_float
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.highp_float
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.lowp_vec2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.mediump_vec2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.highp_vec2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.lowp_vec3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.mediump_vec3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.highp_vec3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.lowp_vec4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.mediump_vec4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.highp_vec4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.lowp_mat2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.mediump_mat2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.highp_mat2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.lowp_mat2x3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.mediump_mat2x3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.highp_mat2x3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.lowp_mat2x4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.mediump_mat2x4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.highp_mat2x4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.lowp_mat3x2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.mediump_mat3x2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.highp_mat3x2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.lowp_mat3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.mediump_mat3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.highp_mat3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.lowp_mat3x4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.mediump_mat3x4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.highp_mat3x4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.lowp_mat4x2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.mediump_mat4x2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.highp_mat4x2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.lowp_mat4x3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.mediump_mat4x3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.highp_mat4x3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.lowp_mat4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.mediump_mat4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.highp_mat4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.lowp_int
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.mediump_int
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.highp_int
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.lowp_ivec2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.mediump_ivec2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.highp_ivec2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.lowp_ivec3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.mediump_ivec3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.highp_ivec3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.lowp_ivec4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.mediump_ivec4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.highp_ivec4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.lowp_uint
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.mediump_uint
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.highp_uint
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.lowp_uvec2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.mediump_uvec2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.highp_uvec2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.lowp_uvec3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.mediump_uvec3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.highp_uvec3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.lowp_uvec4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.mediump_uvec4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.highp_uvec4
 dEQP-GLES3.functional.transform_feedback.interpolation.smooth.lowp_vec4_points_separate
 dEQP-GLES3.functional.transform_feedback.interpolation.smooth.lowp_vec4_points_interleaved
 dEQP-GLES3.functional.transform_feedback.interpolation.smooth.lowp_vec4_lines_separate
@@ -40074,61 +39696,6 @@
 dEQP-GLES3.functional.transform_feedback.interpolation.centroid.highp_vec4_lines_interleaved
 dEQP-GLES3.functional.transform_feedback.interpolation.centroid.highp_vec4_triangles_separate
 dEQP-GLES3.functional.transform_feedback.interpolation.centroid.highp_vec4_triangles_interleaved
-dEQP-GLES3.functional.transform_feedback.random.separate.points.1
-dEQP-GLES3.functional.transform_feedback.random.separate.points.2
-dEQP-GLES3.functional.transform_feedback.random.separate.points.3
-dEQP-GLES3.functional.transform_feedback.random.separate.points.4
-dEQP-GLES3.functional.transform_feedback.random.separate.points.5
-dEQP-GLES3.functional.transform_feedback.random.separate.points.6
-dEQP-GLES3.functional.transform_feedback.random.separate.points.7
-dEQP-GLES3.functional.transform_feedback.random.separate.points.8
-dEQP-GLES3.functional.transform_feedback.random.separate.points.9
-dEQP-GLES3.functional.transform_feedback.random.separate.points.10
-dEQP-GLES3.functional.transform_feedback.random.separate.lines.1
-dEQP-GLES3.functional.transform_feedback.random.separate.lines.2
-dEQP-GLES3.functional.transform_feedback.random.separate.lines.3
-dEQP-GLES3.functional.transform_feedback.random.separate.lines.4
-dEQP-GLES3.functional.transform_feedback.random.separate.lines.5
-dEQP-GLES3.functional.transform_feedback.random.separate.lines.6
-dEQP-GLES3.functional.transform_feedback.random.separate.lines.7
-dEQP-GLES3.functional.transform_feedback.random.separate.lines.8
-dEQP-GLES3.functional.transform_feedback.random.separate.lines.9
-dEQP-GLES3.functional.transform_feedback.random.separate.lines.10
-dEQP-GLES3.functional.transform_feedback.random.separate.triangles.2
-dEQP-GLES3.functional.transform_feedback.random.separate.triangles.3
-dEQP-GLES3.functional.transform_feedback.random.separate.triangles.4
-dEQP-GLES3.functional.transform_feedback.random.separate.triangles.5
-dEQP-GLES3.functional.transform_feedback.random.separate.triangles.6
-dEQP-GLES3.functional.transform_feedback.random.separate.triangles.7
-dEQP-GLES3.functional.transform_feedback.random.separate.triangles.8
-dEQP-GLES3.functional.transform_feedback.random.separate.triangles.9
-dEQP-GLES3.functional.transform_feedback.random.separate.triangles.10
-dEQP-GLES3.functional.transform_feedback.random.interleaved.points.1
-dEQP-GLES3.functional.transform_feedback.random.interleaved.points.2
-dEQP-GLES3.functional.transform_feedback.random.interleaved.points.3
-dEQP-GLES3.functional.transform_feedback.random.interleaved.points.4
-dEQP-GLES3.functional.transform_feedback.random.interleaved.points.5
-dEQP-GLES3.functional.transform_feedback.random.interleaved.points.6
-dEQP-GLES3.functional.transform_feedback.random.interleaved.points.7
-dEQP-GLES3.functional.transform_feedback.random.interleaved.points.8
-dEQP-GLES3.functional.transform_feedback.random.interleaved.points.9
-dEQP-GLES3.functional.transform_feedback.random.interleaved.points.10
-dEQP-GLES3.functional.transform_feedback.random.interleaved.lines.1
-dEQP-GLES3.functional.transform_feedback.random.interleaved.lines.2
-dEQP-GLES3.functional.transform_feedback.random.interleaved.lines.4
-dEQP-GLES3.functional.transform_feedback.random.interleaved.lines.5
-dEQP-GLES3.functional.transform_feedback.random.interleaved.lines.6
-dEQP-GLES3.functional.transform_feedback.random.interleaved.lines.7
-dEQP-GLES3.functional.transform_feedback.random.interleaved.lines.8
-dEQP-GLES3.functional.transform_feedback.random.interleaved.lines.9
-dEQP-GLES3.functional.transform_feedback.random.interleaved.lines.10
-dEQP-GLES3.functional.transform_feedback.random.interleaved.triangles.1
-dEQP-GLES3.functional.transform_feedback.random.interleaved.triangles.2
-dEQP-GLES3.functional.transform_feedback.random.interleaved.triangles.3
-dEQP-GLES3.functional.transform_feedback.random.interleaved.triangles.4
-dEQP-GLES3.functional.transform_feedback.random.interleaved.triangles.5
-dEQP-GLES3.functional.transform_feedback.random.interleaved.triangles.6
-dEQP-GLES3.functional.transform_feedback.random.interleaved.triangles.9
 dEQP-GLES3.functional.fence_sync.wait_sync_smalldraw
 dEQP-GLES3.functional.fence_sync.wait_sync_largedraw
 dEQP-GLES3.functional.fence_sync.client_wait_sync_smalldraw
diff --git a/android/cts/master/gles3-master-2021-03-01.txt b/android/cts/master/gles3-master-2021-03-01.txt
index 4b7b366..3926403 100644
--- a/android/cts/master/gles3-master-2021-03-01.txt
+++ b/android/cts/master/gles3-master-2021-03-01.txt
@@ -1,3 +1,195 @@
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_row_major_matrixarray_row_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_row_major_matrixarray_row_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_row_major_matrixarray_row_major_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_row_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_row_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_row_major_matrixarray_row_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_row_major_matrixarray_column_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_row_major_matrixarray_column_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_row_major_matrixarray_column_major_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_row_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_row_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_row_major_matrixarray_column_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_column_major_matrixarray_row_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_column_major_matrixarray_row_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_column_major_matrixarray_row_major_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_column_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_column_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_column_major_matrixarray_row_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_column_major_matrixarray_column_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_column_major_matrixarray_column_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_column_major_matrixarray_column_major_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_column_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_column_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_column_major_matrixarray_column_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_row_major_matrixarray_row_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_row_major_matrixarray_row_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_row_major_matrixarray_row_major_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_row_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_row_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_row_major_matrixarray_row_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_row_major_matrixarray_column_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_row_major_matrixarray_column_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_row_major_matrixarray_column_major_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_row_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_row_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_row_major_matrixarray_column_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_column_major_matrixarray_row_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_column_major_matrixarray_row_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_column_major_matrixarray_row_major_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_column_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_column_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_column_major_matrixarray_row_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_column_major_matrixarray_column_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_column_major_matrixarray_column_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_column_major_matrixarray_column_major_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_column_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_column_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_column_major_matrixarray_column_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_row_major_matrix_row_major_matrixarray_row_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_row_major_matrix_row_major_matrixarray_row_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_row_major_matrix_row_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_row_major_matrix_row_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_row_major_matrix_row_major_matrixarray_column_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_row_major_matrix_row_major_matrixarray_column_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_row_major_matrix_row_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_row_major_matrix_row_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_row_major_matrix_column_major_matrixarray_row_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_row_major_matrix_column_major_matrixarray_row_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_row_major_matrix_column_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_row_major_matrix_column_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_row_major_matrix_column_major_matrixarray_column_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_row_major_matrix_column_major_matrixarray_column_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_row_major_matrix_column_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_row_major_matrix_column_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_column_major_matrix_row_major_matrixarray_row_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_column_major_matrix_row_major_matrixarray_row_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_column_major_matrix_row_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_column_major_matrix_row_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_column_major_matrix_row_major_matrixarray_column_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_column_major_matrix_row_major_matrixarray_column_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_column_major_matrix_row_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_column_major_matrix_row_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_column_major_matrix_column_major_matrixarray_row_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_column_major_matrix_column_major_matrixarray_row_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_column_major_matrix_column_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_column_major_matrix_column_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_column_major_matrix_column_major_matrixarray_column_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_column_major_matrix_column_major_matrixarray_column_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_column_major_matrix_column_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_column_major_matrix_column_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_row_major_matrixarray_row_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_row_major_matrixarray_row_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_row_major_matrixarray_row_major_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_row_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_row_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_row_major_matrixarray_row_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_row_major_matrixarray_column_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_row_major_matrixarray_column_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_row_major_matrixarray_column_major_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_row_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_row_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_row_major_matrixarray_column_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_column_major_matrixarray_row_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_column_major_matrixarray_row_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_column_major_matrixarray_row_major_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_column_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_column_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_column_major_matrixarray_row_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_column_major_matrixarray_column_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_column_major_matrixarray_column_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_column_major_matrixarray_column_major_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_column_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_column_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_column_major_matrixarray_column_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_row_major_matrixarray_row_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_row_major_matrixarray_row_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_row_major_matrixarray_row_major_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_row_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_row_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_row_major_matrixarray_row_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_row_major_matrixarray_column_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_row_major_matrixarray_column_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_row_major_matrixarray_column_major_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_row_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_row_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_row_major_matrixarray_column_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_column_major_matrixarray_row_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_column_major_matrixarray_row_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_column_major_matrixarray_row_major_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_column_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_column_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_column_major_matrixarray_row_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_column_major_matrixarray_column_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_column_major_matrixarray_column_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_column_major_matrixarray_column_major_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_column_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_column_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_column_major_matrixarray_column_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_row_major_matrix_row_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_row_major_matrix_row_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_row_major_matrix_row_major_matrixarray_row_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_row_major_matrix_row_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_row_major_matrix_row_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_row_major_matrix_row_major_matrixarray_column_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_row_major_matrix_column_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_row_major_matrix_column_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_row_major_matrix_column_major_matrixarray_row_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_row_major_matrix_column_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_row_major_matrix_column_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_row_major_matrix_column_major_matrixarray_column_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_column_major_matrix_row_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_column_major_matrix_row_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_column_major_matrix_row_major_matrixarray_row_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_column_major_matrix_row_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_column_major_matrix_row_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_column_major_matrix_row_major_matrixarray_column_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_column_major_matrix_column_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_column_major_matrix_column_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_column_major_matrix_column_major_matrixarray_row_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_column_major_matrix_column_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_column_major_matrix_column_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_column_major_matrix_column_major_matrixarray_column_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.packed_block_row_major_matrix_row_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.packed_block_row_major_matrix_row_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.packed_block_row_major_matrix_row_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.packed_block_row_major_matrix_row_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.packed_block_row_major_matrix_column_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.packed_block_row_major_matrix_column_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.packed_block_row_major_matrix_column_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.packed_block_row_major_matrix_column_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.packed_block_column_major_matrix_row_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.packed_block_column_major_matrix_row_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.packed_block_column_major_matrix_row_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.packed_block_column_major_matrix_row_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.packed_block_column_major_matrix_column_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.packed_block_column_major_matrix_column_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.packed_block_column_major_matrix_column_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.packed_block_column_major_matrix_column_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_row_major_matrix_row_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_row_major_matrix_row_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_row_major_matrix_row_major_matrixarray_row_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_row_major_matrix_row_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_row_major_matrix_row_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_row_major_matrix_row_major_matrixarray_column_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_row_major_matrix_column_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_row_major_matrix_column_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_row_major_matrix_column_major_matrixarray_row_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_row_major_matrix_column_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_row_major_matrix_column_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_row_major_matrix_column_major_matrixarray_column_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_column_major_matrix_row_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_column_major_matrix_row_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_column_major_matrix_row_major_matrixarray_row_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_column_major_matrix_row_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_column_major_matrix_row_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_column_major_matrix_row_major_matrixarray_column_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_column_major_matrix_column_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_column_major_matrix_column_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_column_major_matrix_column_major_matrixarray_row_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_column_major_matrix_column_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_column_major_matrix_column_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_column_major_matrix_column_major_matrixarray_column_major_instance_array_both
 dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.points.1
 dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.points.2
 dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.points.3
@@ -58,7 +250,3 @@
 dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.triangles.8
 dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.triangles.9
 dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.triangles.10
-dEQP-GLES3.functional.flush_finish.wait
-dEQP-GLES3.functional.flush_finish.flush
-dEQP-GLES3.functional.flush_finish.finish
-dEQP-GLES3.functional.flush_finish.finish_wait
diff --git a/android/cts/master/gles3-master.txt b/android/cts/master/gles3-master.txt
index 0820dbe..8dd066f 100644
--- a/android/cts/master/gles3-master.txt
+++ b/android/cts/master/gles3-master.txt
@@ -33837,6 +33837,198 @@
 dEQP-GLES3.functional.ubo.single_nested_struct.single_buffer.std140_instance_array_vertex
 dEQP-GLES3.functional.ubo.single_nested_struct.single_buffer.std140_instance_array_fragment
 dEQP-GLES3.functional.ubo.single_nested_struct.single_buffer.std140_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_row_major_matrixarray_row_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_row_major_matrixarray_row_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_row_major_matrixarray_row_major_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_row_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_row_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_row_major_matrixarray_row_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_row_major_matrixarray_column_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_row_major_matrixarray_column_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_row_major_matrixarray_column_major_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_row_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_row_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_row_major_matrixarray_column_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_column_major_matrixarray_row_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_column_major_matrixarray_row_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_column_major_matrixarray_row_major_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_column_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_column_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_column_major_matrixarray_row_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_column_major_matrixarray_column_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_column_major_matrixarray_column_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_column_major_matrixarray_column_major_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_column_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_column_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_column_major_matrixarray_column_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_row_major_matrixarray_row_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_row_major_matrixarray_row_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_row_major_matrixarray_row_major_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_row_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_row_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_row_major_matrixarray_row_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_row_major_matrixarray_column_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_row_major_matrixarray_column_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_row_major_matrixarray_column_major_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_row_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_row_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_row_major_matrixarray_column_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_column_major_matrixarray_row_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_column_major_matrixarray_row_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_column_major_matrixarray_row_major_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_column_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_column_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_column_major_matrixarray_row_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_column_major_matrixarray_column_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_column_major_matrixarray_column_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_column_major_matrixarray_column_major_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_column_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_column_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_column_major_matrixarray_column_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_row_major_matrix_row_major_matrixarray_row_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_row_major_matrix_row_major_matrixarray_row_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_row_major_matrix_row_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_row_major_matrix_row_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_row_major_matrix_row_major_matrixarray_column_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_row_major_matrix_row_major_matrixarray_column_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_row_major_matrix_row_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_row_major_matrix_row_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_row_major_matrix_column_major_matrixarray_row_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_row_major_matrix_column_major_matrixarray_row_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_row_major_matrix_column_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_row_major_matrix_column_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_row_major_matrix_column_major_matrixarray_column_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_row_major_matrix_column_major_matrixarray_column_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_row_major_matrix_column_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_row_major_matrix_column_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_column_major_matrix_row_major_matrixarray_row_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_column_major_matrix_row_major_matrixarray_row_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_column_major_matrix_row_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_column_major_matrix_row_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_column_major_matrix_row_major_matrixarray_column_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_column_major_matrix_row_major_matrixarray_column_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_column_major_matrix_row_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_column_major_matrix_row_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_column_major_matrix_column_major_matrixarray_row_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_column_major_matrix_column_major_matrixarray_row_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_column_major_matrix_column_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_column_major_matrix_column_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_column_major_matrix_column_major_matrixarray_column_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_column_major_matrix_column_major_matrixarray_column_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_column_major_matrix_column_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_column_major_matrix_column_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_row_major_matrixarray_row_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_row_major_matrixarray_row_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_row_major_matrixarray_row_major_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_row_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_row_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_row_major_matrixarray_row_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_row_major_matrixarray_column_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_row_major_matrixarray_column_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_row_major_matrixarray_column_major_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_row_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_row_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_row_major_matrixarray_column_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_column_major_matrixarray_row_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_column_major_matrixarray_row_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_column_major_matrixarray_row_major_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_column_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_column_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_column_major_matrixarray_row_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_column_major_matrixarray_column_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_column_major_matrixarray_column_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_column_major_matrixarray_column_major_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_column_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_column_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_column_major_matrixarray_column_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_row_major_matrixarray_row_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_row_major_matrixarray_row_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_row_major_matrixarray_row_major_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_row_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_row_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_row_major_matrixarray_row_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_row_major_matrixarray_column_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_row_major_matrixarray_column_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_row_major_matrixarray_column_major_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_row_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_row_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_row_major_matrixarray_column_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_column_major_matrixarray_row_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_column_major_matrixarray_row_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_column_major_matrixarray_row_major_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_column_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_column_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_column_major_matrixarray_row_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_column_major_matrixarray_column_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_column_major_matrixarray_column_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_column_major_matrixarray_column_major_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_column_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_column_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_column_major_matrixarray_column_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_row_major_matrix_row_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_row_major_matrix_row_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_row_major_matrix_row_major_matrixarray_row_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_row_major_matrix_row_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_row_major_matrix_row_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_row_major_matrix_row_major_matrixarray_column_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_row_major_matrix_column_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_row_major_matrix_column_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_row_major_matrix_column_major_matrixarray_row_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_row_major_matrix_column_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_row_major_matrix_column_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_row_major_matrix_column_major_matrixarray_column_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_column_major_matrix_row_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_column_major_matrix_row_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_column_major_matrix_row_major_matrixarray_row_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_column_major_matrix_row_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_column_major_matrix_row_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_column_major_matrix_row_major_matrixarray_column_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_column_major_matrix_column_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_column_major_matrix_column_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_column_major_matrix_column_major_matrixarray_row_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_column_major_matrix_column_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_column_major_matrix_column_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_column_major_matrix_column_major_matrixarray_column_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.packed_block_row_major_matrix_row_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.packed_block_row_major_matrix_row_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.packed_block_row_major_matrix_row_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.packed_block_row_major_matrix_row_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.packed_block_row_major_matrix_column_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.packed_block_row_major_matrix_column_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.packed_block_row_major_matrix_column_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.packed_block_row_major_matrix_column_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.packed_block_column_major_matrix_row_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.packed_block_column_major_matrix_row_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.packed_block_column_major_matrix_row_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.packed_block_column_major_matrix_row_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.packed_block_column_major_matrix_column_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.packed_block_column_major_matrix_column_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.packed_block_column_major_matrix_column_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.packed_block_column_major_matrix_column_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_row_major_matrix_row_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_row_major_matrix_row_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_row_major_matrix_row_major_matrixarray_row_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_row_major_matrix_row_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_row_major_matrix_row_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_row_major_matrix_row_major_matrixarray_column_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_row_major_matrix_column_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_row_major_matrix_column_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_row_major_matrix_column_major_matrixarray_row_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_row_major_matrix_column_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_row_major_matrix_column_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_row_major_matrix_column_major_matrixarray_column_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_column_major_matrix_row_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_column_major_matrix_row_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_column_major_matrix_row_major_matrixarray_row_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_column_major_matrix_row_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_column_major_matrix_row_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_column_major_matrix_row_major_matrixarray_column_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_column_major_matrix_column_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_column_major_matrix_column_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_column_major_matrix_column_major_matrixarray_row_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_column_major_matrix_column_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_column_major_matrix_column_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_column_major_matrix_column_major_matrixarray_column_major_instance_array_both
 dEQP-GLES3.functional.ubo.single_nested_struct_array.per_block_buffer.shared_vertex
 dEQP-GLES3.functional.ubo.single_nested_struct_array.per_block_buffer.shared_fragment
 dEQP-GLES3.functional.ubo.single_nested_struct_array.per_block_buffer.shared_both
@@ -39642,384 +39834,6 @@
 dEQP-GLES3.functional.transform_feedback.array.interleaved.triangles.lowp_uvec4
 dEQP-GLES3.functional.transform_feedback.array.interleaved.triangles.mediump_uvec4
 dEQP-GLES3.functional.transform_feedback.array.interleaved.triangles.highp_uvec4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.lowp_float
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.mediump_float
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.highp_float
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.lowp_vec2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.mediump_vec2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.highp_vec2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.lowp_vec3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.mediump_vec3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.highp_vec3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.lowp_vec4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.mediump_vec4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.highp_vec4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.lowp_mat2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.mediump_mat2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.highp_mat2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.lowp_mat2x3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.mediump_mat2x3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.highp_mat2x3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.lowp_mat2x4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.mediump_mat2x4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.highp_mat2x4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.lowp_mat3x2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.mediump_mat3x2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.highp_mat3x2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.lowp_mat3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.mediump_mat3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.highp_mat3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.lowp_mat3x4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.mediump_mat3x4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.highp_mat3x4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.lowp_mat4x2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.mediump_mat4x2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.highp_mat4x2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.lowp_mat4x3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.mediump_mat4x3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.highp_mat4x3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.lowp_mat4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.mediump_mat4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.highp_mat4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.lowp_int
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.mediump_int
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.highp_int
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.lowp_ivec2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.mediump_ivec2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.highp_ivec2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.lowp_ivec3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.mediump_ivec3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.highp_ivec3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.lowp_ivec4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.mediump_ivec4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.highp_ivec4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.lowp_uint
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.mediump_uint
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.highp_uint
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.lowp_uvec2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.mediump_uvec2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.highp_uvec2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.lowp_uvec3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.mediump_uvec3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.highp_uvec3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.lowp_uvec4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.mediump_uvec4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.highp_uvec4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.lowp_float
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.mediump_float
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.highp_float
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.lowp_vec2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.mediump_vec2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.highp_vec2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.lowp_vec3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.mediump_vec3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.highp_vec3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.lowp_vec4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.mediump_vec4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.highp_vec4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.lowp_mat2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.mediump_mat2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.highp_mat2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.lowp_mat2x3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.mediump_mat2x3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.highp_mat2x3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.lowp_mat2x4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.mediump_mat2x4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.highp_mat2x4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.lowp_mat3x2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.mediump_mat3x2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.highp_mat3x2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.lowp_mat3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.mediump_mat3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.highp_mat3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.lowp_mat3x4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.mediump_mat3x4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.highp_mat3x4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.lowp_mat4x2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.mediump_mat4x2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.highp_mat4x2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.lowp_mat4x3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.mediump_mat4x3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.highp_mat4x3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.lowp_mat4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.mediump_mat4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.highp_mat4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.lowp_int
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.mediump_int
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.highp_int
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.lowp_ivec2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.mediump_ivec2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.highp_ivec2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.lowp_ivec3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.mediump_ivec3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.highp_ivec3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.lowp_ivec4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.mediump_ivec4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.highp_ivec4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.lowp_uint
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.mediump_uint
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.highp_uint
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.lowp_uvec2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.mediump_uvec2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.highp_uvec2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.lowp_uvec3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.mediump_uvec3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.highp_uvec3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.lowp_uvec4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.mediump_uvec4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.highp_uvec4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.lowp_float
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.mediump_float
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.highp_float
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.lowp_vec2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.mediump_vec2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.highp_vec2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.lowp_vec3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.mediump_vec3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.highp_vec3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.lowp_vec4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.mediump_vec4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.highp_vec4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.lowp_mat2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.mediump_mat2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.highp_mat2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.lowp_mat2x3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.mediump_mat2x3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.highp_mat2x3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.lowp_mat2x4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.mediump_mat2x4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.highp_mat2x4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.lowp_mat3x2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.mediump_mat3x2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.highp_mat3x2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.lowp_mat3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.mediump_mat3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.highp_mat3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.lowp_mat3x4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.mediump_mat3x4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.highp_mat3x4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.lowp_mat4x2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.mediump_mat4x2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.highp_mat4x2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.lowp_mat4x3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.mediump_mat4x3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.highp_mat4x3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.lowp_mat4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.mediump_mat4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.highp_mat4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.lowp_int
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.mediump_int
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.highp_int
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.lowp_ivec2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.mediump_ivec2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.highp_ivec2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.lowp_ivec3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.mediump_ivec3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.highp_ivec3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.lowp_ivec4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.mediump_ivec4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.highp_ivec4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.lowp_uint
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.mediump_uint
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.highp_uint
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.lowp_uvec2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.mediump_uvec2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.highp_uvec2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.lowp_uvec3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.mediump_uvec3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.highp_uvec3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.lowp_uvec4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.mediump_uvec4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.highp_uvec4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.lowp_float
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.mediump_float
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.highp_float
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.lowp_vec2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.mediump_vec2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.highp_vec2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.lowp_vec3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.mediump_vec3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.highp_vec3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.lowp_vec4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.mediump_vec4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.highp_vec4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.lowp_mat2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.mediump_mat2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.highp_mat2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.lowp_mat2x3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.mediump_mat2x3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.highp_mat2x3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.lowp_mat2x4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.mediump_mat2x4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.highp_mat2x4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.lowp_mat3x2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.mediump_mat3x2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.highp_mat3x2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.lowp_mat3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.mediump_mat3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.highp_mat3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.lowp_mat3x4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.mediump_mat3x4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.highp_mat3x4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.lowp_mat4x2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.mediump_mat4x2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.highp_mat4x2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.lowp_mat4x3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.mediump_mat4x3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.highp_mat4x3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.lowp_mat4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.mediump_mat4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.highp_mat4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.lowp_int
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.mediump_int
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.highp_int
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.lowp_ivec2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.mediump_ivec2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.highp_ivec2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.lowp_ivec3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.mediump_ivec3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.highp_ivec3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.lowp_ivec4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.mediump_ivec4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.highp_ivec4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.lowp_uint
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.mediump_uint
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.highp_uint
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.lowp_uvec2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.mediump_uvec2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.highp_uvec2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.lowp_uvec3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.mediump_uvec3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.highp_uvec3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.lowp_uvec4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.mediump_uvec4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.highp_uvec4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.lowp_float
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.mediump_float
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.highp_float
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.lowp_vec2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.mediump_vec2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.highp_vec2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.lowp_vec3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.mediump_vec3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.highp_vec3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.lowp_vec4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.mediump_vec4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.highp_vec4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.lowp_mat2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.mediump_mat2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.highp_mat2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.lowp_mat2x3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.mediump_mat2x3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.highp_mat2x3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.lowp_mat2x4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.mediump_mat2x4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.highp_mat2x4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.lowp_mat3x2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.mediump_mat3x2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.highp_mat3x2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.lowp_mat3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.mediump_mat3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.highp_mat3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.lowp_mat3x4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.mediump_mat3x4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.highp_mat3x4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.lowp_mat4x2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.mediump_mat4x2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.highp_mat4x2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.lowp_mat4x3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.mediump_mat4x3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.highp_mat4x3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.lowp_mat4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.mediump_mat4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.highp_mat4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.lowp_int
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.mediump_int
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.highp_int
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.lowp_ivec2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.mediump_ivec2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.highp_ivec2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.lowp_ivec3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.mediump_ivec3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.highp_ivec3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.lowp_ivec4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.mediump_ivec4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.highp_ivec4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.lowp_uint
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.mediump_uint
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.highp_uint
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.lowp_uvec2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.mediump_uvec2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.highp_uvec2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.lowp_uvec3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.mediump_uvec3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.highp_uvec3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.lowp_uvec4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.mediump_uvec4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.highp_uvec4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.lowp_float
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.mediump_float
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.highp_float
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.lowp_vec2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.mediump_vec2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.highp_vec2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.lowp_vec3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.mediump_vec3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.highp_vec3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.lowp_vec4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.mediump_vec4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.highp_vec4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.lowp_mat2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.mediump_mat2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.highp_mat2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.lowp_mat2x3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.mediump_mat2x3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.highp_mat2x3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.lowp_mat2x4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.mediump_mat2x4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.highp_mat2x4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.lowp_mat3x2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.mediump_mat3x2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.highp_mat3x2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.lowp_mat3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.mediump_mat3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.highp_mat3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.lowp_mat3x4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.mediump_mat3x4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.highp_mat3x4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.lowp_mat4x2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.mediump_mat4x2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.highp_mat4x2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.lowp_mat4x3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.mediump_mat4x3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.highp_mat4x3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.lowp_mat4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.mediump_mat4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.highp_mat4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.lowp_int
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.mediump_int
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.highp_int
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.lowp_ivec2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.mediump_ivec2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.highp_ivec2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.lowp_ivec3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.mediump_ivec3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.highp_ivec3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.lowp_ivec4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.mediump_ivec4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.highp_ivec4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.lowp_uint
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.mediump_uint
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.highp_uint
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.lowp_uvec2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.mediump_uvec2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.highp_uvec2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.lowp_uvec3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.mediump_uvec3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.highp_uvec3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.lowp_uvec4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.mediump_uvec4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.highp_uvec4
 dEQP-GLES3.functional.transform_feedback.interpolation.smooth.lowp_vec4_points_separate
 dEQP-GLES3.functional.transform_feedback.interpolation.smooth.lowp_vec4_points_interleaved
 dEQP-GLES3.functional.transform_feedback.interpolation.smooth.lowp_vec4_lines_separate
@@ -40074,61 +39888,6 @@
 dEQP-GLES3.functional.transform_feedback.interpolation.centroid.highp_vec4_lines_interleaved
 dEQP-GLES3.functional.transform_feedback.interpolation.centroid.highp_vec4_triangles_separate
 dEQP-GLES3.functional.transform_feedback.interpolation.centroid.highp_vec4_triangles_interleaved
-dEQP-GLES3.functional.transform_feedback.random.separate.points.1
-dEQP-GLES3.functional.transform_feedback.random.separate.points.2
-dEQP-GLES3.functional.transform_feedback.random.separate.points.3
-dEQP-GLES3.functional.transform_feedback.random.separate.points.4
-dEQP-GLES3.functional.transform_feedback.random.separate.points.5
-dEQP-GLES3.functional.transform_feedback.random.separate.points.6
-dEQP-GLES3.functional.transform_feedback.random.separate.points.7
-dEQP-GLES3.functional.transform_feedback.random.separate.points.8
-dEQP-GLES3.functional.transform_feedback.random.separate.points.9
-dEQP-GLES3.functional.transform_feedback.random.separate.points.10
-dEQP-GLES3.functional.transform_feedback.random.separate.lines.1
-dEQP-GLES3.functional.transform_feedback.random.separate.lines.2
-dEQP-GLES3.functional.transform_feedback.random.separate.lines.3
-dEQP-GLES3.functional.transform_feedback.random.separate.lines.4
-dEQP-GLES3.functional.transform_feedback.random.separate.lines.5
-dEQP-GLES3.functional.transform_feedback.random.separate.lines.6
-dEQP-GLES3.functional.transform_feedback.random.separate.lines.7
-dEQP-GLES3.functional.transform_feedback.random.separate.lines.8
-dEQP-GLES3.functional.transform_feedback.random.separate.lines.9
-dEQP-GLES3.functional.transform_feedback.random.separate.lines.10
-dEQP-GLES3.functional.transform_feedback.random.separate.triangles.2
-dEQP-GLES3.functional.transform_feedback.random.separate.triangles.3
-dEQP-GLES3.functional.transform_feedback.random.separate.triangles.4
-dEQP-GLES3.functional.transform_feedback.random.separate.triangles.5
-dEQP-GLES3.functional.transform_feedback.random.separate.triangles.6
-dEQP-GLES3.functional.transform_feedback.random.separate.triangles.7
-dEQP-GLES3.functional.transform_feedback.random.separate.triangles.8
-dEQP-GLES3.functional.transform_feedback.random.separate.triangles.9
-dEQP-GLES3.functional.transform_feedback.random.separate.triangles.10
-dEQP-GLES3.functional.transform_feedback.random.interleaved.points.1
-dEQP-GLES3.functional.transform_feedback.random.interleaved.points.2
-dEQP-GLES3.functional.transform_feedback.random.interleaved.points.3
-dEQP-GLES3.functional.transform_feedback.random.interleaved.points.4
-dEQP-GLES3.functional.transform_feedback.random.interleaved.points.5
-dEQP-GLES3.functional.transform_feedback.random.interleaved.points.6
-dEQP-GLES3.functional.transform_feedback.random.interleaved.points.7
-dEQP-GLES3.functional.transform_feedback.random.interleaved.points.8
-dEQP-GLES3.functional.transform_feedback.random.interleaved.points.9
-dEQP-GLES3.functional.transform_feedback.random.interleaved.points.10
-dEQP-GLES3.functional.transform_feedback.random.interleaved.lines.1
-dEQP-GLES3.functional.transform_feedback.random.interleaved.lines.2
-dEQP-GLES3.functional.transform_feedback.random.interleaved.lines.4
-dEQP-GLES3.functional.transform_feedback.random.interleaved.lines.5
-dEQP-GLES3.functional.transform_feedback.random.interleaved.lines.6
-dEQP-GLES3.functional.transform_feedback.random.interleaved.lines.7
-dEQP-GLES3.functional.transform_feedback.random.interleaved.lines.8
-dEQP-GLES3.functional.transform_feedback.random.interleaved.lines.9
-dEQP-GLES3.functional.transform_feedback.random.interleaved.lines.10
-dEQP-GLES3.functional.transform_feedback.random.interleaved.triangles.1
-dEQP-GLES3.functional.transform_feedback.random.interleaved.triangles.2
-dEQP-GLES3.functional.transform_feedback.random.interleaved.triangles.3
-dEQP-GLES3.functional.transform_feedback.random.interleaved.triangles.4
-dEQP-GLES3.functional.transform_feedback.random.interleaved.triangles.5
-dEQP-GLES3.functional.transform_feedback.random.interleaved.triangles.6
-dEQP-GLES3.functional.transform_feedback.random.interleaved.triangles.9
 dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.points.1
 dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.points.2
 dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.points.3
@@ -42570,10 +42329,6 @@
 dEQP-GLES3.functional.draw.random.208
 dEQP-GLES3.functional.draw.random.209
 dEQP-GLES3.functional.draw.random.210
-dEQP-GLES3.functional.flush_finish.wait
-dEQP-GLES3.functional.flush_finish.flush
-dEQP-GLES3.functional.flush_finish.finish
-dEQP-GLES3.functional.flush_finish.finish_wait
 dEQP-GLES3.functional.default_vertex_attrib.float.vertex_attrib_1f
 dEQP-GLES3.functional.default_vertex_attrib.float.vertex_attrib_2f
 dEQP-GLES3.functional.default_vertex_attrib.float.vertex_attrib_3f
diff --git a/android/cts/master/gles31-master-2020-03-01.txt b/android/cts/master/gles31-master-2020-03-01.txt
index 339e535..806974a 100644
--- a/android/cts/master/gles31-master-2020-03-01.txt
+++ b/android/cts/master/gles31-master-2020-03-01.txt
@@ -22912,107 +22912,86 @@
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.vertex_fragment.default_block_basic_type
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.vertex_fragment.default_block_struct_member
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.vertex_fragment.default_block_array
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.vertex_fragment.default_block_array_element
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.vertex_tess_fragment.builtin_gl_position
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.vertex_tess_fragment.default_block_basic_type
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.vertex_tess_fragment.default_block_struct_member
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.vertex_tess_fragment.default_block_array
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.vertex_tess_fragment.default_block_array_element
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.vertex_geo_fragment.builtin_gl_position
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.vertex_geo_fragment.default_block_basic_type
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.vertex_geo_fragment.default_block_struct_member
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.vertex_geo_fragment.default_block_array
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.vertex_geo_fragment.default_block_array_element
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.vertex_tess_geo_fragment.builtin_gl_position
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.vertex_tess_geo_fragment.default_block_basic_type
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.vertex_tess_geo_fragment.default_block_struct_member
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.vertex_tess_geo_fragment.default_block_array
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.vertex_tess_geo_fragment.default_block_array_element
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.separable_vertex.builtin_gl_position
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.separable_vertex.default_block_basic_type
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.separable_vertex.default_block_struct_member
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.separable_vertex.default_block_array
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.separable_vertex.default_block_array_element
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.separable_tess_eval.builtin_gl_position
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.separable_tess_eval.default_block_basic_type
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.separable_tess_eval.default_block_struct_member
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.separable_tess_eval.default_block_array
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.separable_tess_eval.default_block_array_element
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.separable_geometry.builtin_gl_position
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.separable_geometry.default_block_basic_type
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.separable_geometry.default_block_struct_member
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.separable_geometry.default_block_array
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.separable_geometry.default_block_array_element
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.vertex_fragment.builtin_gl_position
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.vertex_fragment.default_block_basic_type
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.vertex_fragment.default_block_struct_member
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.vertex_fragment.default_block_array
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.vertex_fragment.default_block_array_element
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.vertex_tess_fragment.builtin_gl_position
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.vertex_tess_fragment.default_block_basic_type
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.vertex_tess_fragment.default_block_struct_member
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.vertex_tess_fragment.default_block_array
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.vertex_tess_fragment.default_block_array_element
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.vertex_geo_fragment.builtin_gl_position
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.vertex_geo_fragment.default_block_basic_type
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.vertex_geo_fragment.default_block_struct_member
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.vertex_geo_fragment.default_block_array
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.vertex_geo_fragment.default_block_array_element
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.vertex_tess_geo_fragment.builtin_gl_position
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.vertex_tess_geo_fragment.default_block_basic_type
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.vertex_tess_geo_fragment.default_block_struct_member
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.vertex_tess_geo_fragment.default_block_array
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.vertex_tess_geo_fragment.default_block_array_element
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.separable_vertex.builtin_gl_position
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.separable_vertex.default_block_basic_type
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.separable_vertex.default_block_struct_member
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.separable_vertex.default_block_array
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.separable_vertex.default_block_array_element
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.separable_tess_eval.builtin_gl_position
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.separable_tess_eval.default_block_basic_type
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.separable_tess_eval.default_block_struct_member
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.separable_tess_eval.default_block_array
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.separable_tess_eval.default_block_array_element
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.separable_geometry.builtin_gl_position
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.separable_geometry.default_block_basic_type
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.separable_geometry.default_block_struct_member
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.separable_geometry.default_block_array
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.separable_geometry.default_block_array_element
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.vertex_fragment.builtin_gl_position
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.vertex_fragment.default_block_basic_type
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.vertex_fragment.default_block_struct_member
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.vertex_fragment.default_block_array
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.vertex_fragment.default_block_array_element
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.vertex_tess_fragment.builtin_gl_position
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.vertex_tess_fragment.default_block_basic_type
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.vertex_tess_fragment.default_block_struct_member
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.vertex_tess_fragment.default_block_array
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.vertex_tess_fragment.default_block_array_element
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.vertex_geo_fragment.builtin_gl_position
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.vertex_geo_fragment.default_block_basic_type
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.vertex_geo_fragment.default_block_struct_member
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.vertex_geo_fragment.default_block_array
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.vertex_geo_fragment.default_block_array_element
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.vertex_tess_geo_fragment.builtin_gl_position
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.vertex_tess_geo_fragment.default_block_basic_type
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.vertex_tess_geo_fragment.default_block_struct_member
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.vertex_tess_geo_fragment.default_block_array
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.vertex_tess_geo_fragment.default_block_array_element
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.separable_vertex.builtin_gl_position
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.separable_vertex.default_block_basic_type
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.separable_vertex.default_block_struct_member
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.separable_vertex.default_block_array
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.separable_vertex.default_block_array_element
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.separable_tess_eval.builtin_gl_position
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.separable_tess_eval.default_block_basic_type
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.separable_tess_eval.default_block_struct_member
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.separable_tess_eval.default_block_array
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.separable_tess_eval.default_block_array_element
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.separable_geometry.builtin_gl_position
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.separable_geometry.default_block_basic_type
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.separable_geometry.default_block_struct_member
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.separable_geometry.default_block_array
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.separable_geometry.default_block_array_element
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.builtin.gl_position
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.basic_type.float
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.basic_type.int
@@ -23035,27 +23014,6 @@
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.basic_type.mat4x2
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.basic_type.mat4x3
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.basic_type.mat4
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.array.float
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.array.int
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.array.uint
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.array.vec2
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.array.vec3
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.array.vec4
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.array.ivec2
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.array.ivec3
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.array.ivec4
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.array.uvec2
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.array.uvec3
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.array.uvec4
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.array.mat2
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.array.mat2x3
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.array.mat2x4
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.array.mat3x2
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.array.mat3
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.array.mat3x4
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.array.mat4x2
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.array.mat4x3
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.array.mat4
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.whole_array.float
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.whole_array.int
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.whole_array.uint
@@ -23106,13 +23064,6 @@
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_tess_fragment.basic_type.ivec3
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_tess_fragment.basic_type.uvec2
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_tess_fragment.basic_type.mat3x4
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_tess_fragment.array.float
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_tess_fragment.array.int
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_tess_fragment.array.uint
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_tess_fragment.array.vec3
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_tess_fragment.array.ivec3
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_tess_fragment.array.uvec2
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_tess_fragment.array.mat3x4
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_tess_fragment.whole_array.float
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_tess_fragment.whole_array.int
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_tess_fragment.whole_array.uint
@@ -23135,13 +23086,6 @@
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_geo_fragment.basic_type.ivec3
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_geo_fragment.basic_type.uvec2
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_geo_fragment.basic_type.mat3x4
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_geo_fragment.array.float
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_geo_fragment.array.int
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_geo_fragment.array.uint
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_geo_fragment.array.vec3
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_geo_fragment.array.ivec3
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_geo_fragment.array.uvec2
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_geo_fragment.array.mat3x4
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_geo_fragment.whole_array.float
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_geo_fragment.whole_array.int
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_geo_fragment.whole_array.uint
@@ -23164,13 +23108,6 @@
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_tess_geo_fragment.basic_type.ivec3
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_tess_geo_fragment.basic_type.uvec2
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_tess_geo_fragment.basic_type.mat3x4
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_tess_geo_fragment.array.float
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_tess_geo_fragment.array.int
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_tess_geo_fragment.array.uint
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_tess_geo_fragment.array.vec3
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_tess_geo_fragment.array.ivec3
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_tess_geo_fragment.array.uvec2
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_tess_geo_fragment.array.mat3x4
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_tess_geo_fragment.whole_array.float
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_tess_geo_fragment.whole_array.int
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_tess_geo_fragment.whole_array.uint
@@ -23207,27 +23144,6 @@
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.basic_type.mat4x2
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.basic_type.mat4x3
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.basic_type.mat4
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.array.float
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.array.int
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.array.uint
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.array.vec2
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.array.vec3
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.array.vec4
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.array.ivec2
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.array.ivec3
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.array.ivec4
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.array.uvec2
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.array.uvec3
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.array.uvec4
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.array.mat2
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.array.mat2x3
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.array.mat2x4
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.array.mat3x2
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.array.mat3
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.array.mat3x4
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.array.mat4x2
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.array.mat4x3
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.array.mat4
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.whole_array.float
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.whole_array.int
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.whole_array.uint
@@ -23278,13 +23194,6 @@
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_tess_eval.basic_type.ivec3
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_tess_eval.basic_type.uvec2
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_tess_eval.basic_type.mat3x4
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_tess_eval.array.float
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_tess_eval.array.int
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_tess_eval.array.uint
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_tess_eval.array.vec3
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_tess_eval.array.ivec3
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_tess_eval.array.uvec2
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_tess_eval.array.mat3x4
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_tess_eval.whole_array.float
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_tess_eval.whole_array.int
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_tess_eval.whole_array.uint
@@ -23307,13 +23216,6 @@
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_geometry.basic_type.ivec3
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_geometry.basic_type.uvec2
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_geometry.basic_type.mat3x4
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_geometry.array.float
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_geometry.array.int
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_geometry.array.uint
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_geometry.array.vec3
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_geometry.array.ivec3
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_geometry.array.uvec2
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_geometry.array.mat3x4
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_geometry.whole_array.float
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_geometry.whole_array.int
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_geometry.whole_array.uint
diff --git a/android/cts/master/gles31-master-2021-03-01.txt b/android/cts/master/gles31-master-2021-03-01.txt
index aee8c2b..c8cf364 100644
--- a/android/cts/master/gles31-master-2021-03-01.txt
+++ b/android/cts/master/gles31-master-2021-03-01.txt
@@ -1,5 +1,3 @@
-dEQP-GLES31.functional.ssbo.layout.random.all_shared_buffer.48
-dEQP-GLES31.functional.separate_shader.random.38
 dEQP-GLES31.functional.fbo.color.tex2d.r16
 dEQP-GLES31.functional.fbo.color.tex2d.rg16
 dEQP-GLES31.functional.fbo.color.tex2d.rgba16
diff --git a/android/cts/master/gles31-master.txt b/android/cts/master/gles31-master.txt
index 414235b..27f5304 100644
--- a/android/cts/master/gles31-master.txt
+++ b/android/cts/master/gles31-master.txt
@@ -10290,7 +10290,6 @@
 dEQP-GLES31.functional.ssbo.layout.random.all_shared_buffer.45
 dEQP-GLES31.functional.ssbo.layout.random.all_shared_buffer.46
 dEQP-GLES31.functional.ssbo.layout.random.all_shared_buffer.47
-dEQP-GLES31.functional.ssbo.layout.random.all_shared_buffer.48
 dEQP-GLES31.functional.ssbo.layout.random.all_shared_buffer.49
 dEQP-GLES31.functional.ssbo.atomic.add.lowp_uint
 dEQP-GLES31.functional.ssbo.atomic.add.lowp_int
@@ -17689,7 +17688,6 @@
 dEQP-GLES31.functional.separate_shader.random.35
 dEQP-GLES31.functional.separate_shader.random.36
 dEQP-GLES31.functional.separate_shader.random.37
-dEQP-GLES31.functional.separate_shader.random.38
 dEQP-GLES31.functional.separate_shader.random.39
 dEQP-GLES31.functional.separate_shader.random.40
 dEQP-GLES31.functional.separate_shader.random.41
@@ -22917,107 +22915,86 @@
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.vertex_fragment.default_block_basic_type
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.vertex_fragment.default_block_struct_member
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.vertex_fragment.default_block_array
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.vertex_fragment.default_block_array_element
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.vertex_tess_fragment.builtin_gl_position
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.vertex_tess_fragment.default_block_basic_type
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.vertex_tess_fragment.default_block_struct_member
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.vertex_tess_fragment.default_block_array
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.vertex_tess_fragment.default_block_array_element
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.vertex_geo_fragment.builtin_gl_position
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.vertex_geo_fragment.default_block_basic_type
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.vertex_geo_fragment.default_block_struct_member
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.vertex_geo_fragment.default_block_array
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.vertex_geo_fragment.default_block_array_element
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.vertex_tess_geo_fragment.builtin_gl_position
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.vertex_tess_geo_fragment.default_block_basic_type
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.vertex_tess_geo_fragment.default_block_struct_member
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.vertex_tess_geo_fragment.default_block_array
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.vertex_tess_geo_fragment.default_block_array_element
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.separable_vertex.builtin_gl_position
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.separable_vertex.default_block_basic_type
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.separable_vertex.default_block_struct_member
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.separable_vertex.default_block_array
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.separable_vertex.default_block_array_element
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.separable_tess_eval.builtin_gl_position
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.separable_tess_eval.default_block_basic_type
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.separable_tess_eval.default_block_struct_member
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.separable_tess_eval.default_block_array
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.separable_tess_eval.default_block_array_element
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.separable_geometry.builtin_gl_position
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.separable_geometry.default_block_basic_type
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.separable_geometry.default_block_struct_member
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.separable_geometry.default_block_array
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.separable_geometry.default_block_array_element
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.vertex_fragment.builtin_gl_position
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.vertex_fragment.default_block_basic_type
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.vertex_fragment.default_block_struct_member
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.vertex_fragment.default_block_array
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.vertex_fragment.default_block_array_element
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.vertex_tess_fragment.builtin_gl_position
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.vertex_tess_fragment.default_block_basic_type
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.vertex_tess_fragment.default_block_struct_member
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.vertex_tess_fragment.default_block_array
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.vertex_tess_fragment.default_block_array_element
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.vertex_geo_fragment.builtin_gl_position
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.vertex_geo_fragment.default_block_basic_type
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.vertex_geo_fragment.default_block_struct_member
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.vertex_geo_fragment.default_block_array
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.vertex_geo_fragment.default_block_array_element
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.vertex_tess_geo_fragment.builtin_gl_position
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.vertex_tess_geo_fragment.default_block_basic_type
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.vertex_tess_geo_fragment.default_block_struct_member
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.vertex_tess_geo_fragment.default_block_array
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.vertex_tess_geo_fragment.default_block_array_element
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.separable_vertex.builtin_gl_position
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.separable_vertex.default_block_basic_type
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.separable_vertex.default_block_struct_member
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.separable_vertex.default_block_array
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.separable_vertex.default_block_array_element
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.separable_tess_eval.builtin_gl_position
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.separable_tess_eval.default_block_basic_type
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.separable_tess_eval.default_block_struct_member
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.separable_tess_eval.default_block_array
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.separable_tess_eval.default_block_array_element
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.separable_geometry.builtin_gl_position
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.separable_geometry.default_block_basic_type
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.separable_geometry.default_block_struct_member
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.separable_geometry.default_block_array
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.separable_geometry.default_block_array_element
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.vertex_fragment.builtin_gl_position
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.vertex_fragment.default_block_basic_type
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.vertex_fragment.default_block_struct_member
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.vertex_fragment.default_block_array
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.vertex_fragment.default_block_array_element
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.vertex_tess_fragment.builtin_gl_position
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.vertex_tess_fragment.default_block_basic_type
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.vertex_tess_fragment.default_block_struct_member
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.vertex_tess_fragment.default_block_array
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.vertex_tess_fragment.default_block_array_element
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.vertex_geo_fragment.builtin_gl_position
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.vertex_geo_fragment.default_block_basic_type
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.vertex_geo_fragment.default_block_struct_member
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.vertex_geo_fragment.default_block_array
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.vertex_geo_fragment.default_block_array_element
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.vertex_tess_geo_fragment.builtin_gl_position
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.vertex_tess_geo_fragment.default_block_basic_type
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.vertex_tess_geo_fragment.default_block_struct_member
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.vertex_tess_geo_fragment.default_block_array
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.vertex_tess_geo_fragment.default_block_array_element
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.separable_vertex.builtin_gl_position
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.separable_vertex.default_block_basic_type
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.separable_vertex.default_block_struct_member
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.separable_vertex.default_block_array
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.separable_vertex.default_block_array_element
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.separable_tess_eval.builtin_gl_position
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.separable_tess_eval.default_block_basic_type
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.separable_tess_eval.default_block_struct_member
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.separable_tess_eval.default_block_array
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.separable_tess_eval.default_block_array_element
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.separable_geometry.builtin_gl_position
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.separable_geometry.default_block_basic_type
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.separable_geometry.default_block_struct_member
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.separable_geometry.default_block_array
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.separable_geometry.default_block_array_element
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.builtin.gl_position
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.basic_type.float
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.basic_type.int
@@ -23040,27 +23017,6 @@
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.basic_type.mat4x2
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.basic_type.mat4x3
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.basic_type.mat4
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.array.float
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.array.int
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.array.uint
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.array.vec2
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.array.vec3
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.array.vec4
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.array.ivec2
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.array.ivec3
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.array.ivec4
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.array.uvec2
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.array.uvec3
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.array.uvec4
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.array.mat2
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.array.mat2x3
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.array.mat2x4
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.array.mat3x2
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.array.mat3
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.array.mat3x4
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.array.mat4x2
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.array.mat4x3
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.array.mat4
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.whole_array.float
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.whole_array.int
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.whole_array.uint
@@ -23111,13 +23067,6 @@
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_tess_fragment.basic_type.ivec3
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_tess_fragment.basic_type.uvec2
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_tess_fragment.basic_type.mat3x4
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_tess_fragment.array.float
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_tess_fragment.array.int
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_tess_fragment.array.uint
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_tess_fragment.array.vec3
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_tess_fragment.array.ivec3
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_tess_fragment.array.uvec2
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_tess_fragment.array.mat3x4
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_tess_fragment.whole_array.float
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_tess_fragment.whole_array.int
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_tess_fragment.whole_array.uint
@@ -23140,13 +23089,6 @@
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_geo_fragment.basic_type.ivec3
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_geo_fragment.basic_type.uvec2
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_geo_fragment.basic_type.mat3x4
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_geo_fragment.array.float
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_geo_fragment.array.int
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_geo_fragment.array.uint
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_geo_fragment.array.vec3
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_geo_fragment.array.ivec3
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_geo_fragment.array.uvec2
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_geo_fragment.array.mat3x4
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_geo_fragment.whole_array.float
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_geo_fragment.whole_array.int
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_geo_fragment.whole_array.uint
@@ -23169,13 +23111,6 @@
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_tess_geo_fragment.basic_type.ivec3
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_tess_geo_fragment.basic_type.uvec2
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_tess_geo_fragment.basic_type.mat3x4
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_tess_geo_fragment.array.float
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_tess_geo_fragment.array.int
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_tess_geo_fragment.array.uint
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_tess_geo_fragment.array.vec3
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_tess_geo_fragment.array.ivec3
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_tess_geo_fragment.array.uvec2
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_tess_geo_fragment.array.mat3x4
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_tess_geo_fragment.whole_array.float
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_tess_geo_fragment.whole_array.int
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_tess_geo_fragment.whole_array.uint
@@ -23212,27 +23147,6 @@
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.basic_type.mat4x2
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.basic_type.mat4x3
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.basic_type.mat4
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.array.float
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.array.int
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.array.uint
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.array.vec2
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.array.vec3
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.array.vec4
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.array.ivec2
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.array.ivec3
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.array.ivec4
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.array.uvec2
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.array.uvec3
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.array.uvec4
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.array.mat2
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.array.mat2x3
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.array.mat2x4
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.array.mat3x2
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.array.mat3
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.array.mat3x4
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.array.mat4x2
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.array.mat4x3
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.array.mat4
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.whole_array.float
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.whole_array.int
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.whole_array.uint
@@ -23283,13 +23197,6 @@
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_tess_eval.basic_type.ivec3
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_tess_eval.basic_type.uvec2
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_tess_eval.basic_type.mat3x4
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_tess_eval.array.float
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_tess_eval.array.int
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_tess_eval.array.uint
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_tess_eval.array.vec3
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_tess_eval.array.ivec3
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_tess_eval.array.uvec2
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_tess_eval.array.mat3x4
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_tess_eval.whole_array.float
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_tess_eval.whole_array.int
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_tess_eval.whole_array.uint
@@ -23312,13 +23219,6 @@
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_geometry.basic_type.ivec3
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_geometry.basic_type.uvec2
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_geometry.basic_type.mat3x4
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_geometry.array.float
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_geometry.array.int
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_geometry.array.uint
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_geometry.array.vec3
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_geometry.array.ivec3
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_geometry.array.uvec2
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_geometry.array.mat3x4
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_geometry.whole_array.float
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_geometry.whole_array.int
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_geometry.whole_array.uint
diff --git a/android/cts/master/mustpass.xml b/android/cts/master/mustpass.xml
index 37d7f64..c5b27b1 100644
--- a/android/cts/master/mustpass.xml
+++ b/android/cts/master/mustpass.xml
@@ -37,6 +37,7 @@
 		<Configuration caseListFile="gles3-rotate-reverse-landscape.txt" commandLine="--deqp-gl-config-name=rgba8888d24s8ms0 --deqp-screen-rotation=270 --deqp-surface-type=window --deqp-watchdog=enable" name="rotate-reverse-landscape"/>
 		<Configuration caseListFile="gles3-multisample.txt" commandLine="--deqp-gl-config-name=rgba8888d24s8ms4 --deqp-screen-rotation=unspecified --deqp-surface-type=window --deqp-watchdog=enable" name="multisample"/>
 		<Configuration caseListFile="gles3-565-no-depth-no-stencil.txt" commandLine="--deqp-gl-config-name=rgb565d0s0ms0 --deqp-screen-rotation=unspecified --deqp-surface-type=window --deqp-watchdog=enable" name="565-no-depth-no-stencil"/>
+		<Configuration caseListFile="gles3-incremental-deqp.txt" commandLine="--deqp-watchdog=enable" name="incremental-deqp"/>
 	</TestPackage>
 	<TestPackage name="dEQP-GLES31">
 		<Configuration caseListFile="gles31-master.txt" commandLine="--deqp-gl-config-name=rgba8888d24s8ms0 --deqp-screen-rotation=unspecified --deqp-surface-type=window --deqp-watchdog=enable" name="master"/>
@@ -54,5 +55,6 @@
 		<Configuration caseListFile="vk-master-2019-03-01.txt" commandLine="--deqp-watchdog=enable" name="master-2019-03-01"/>
 		<Configuration caseListFile="vk-master-2020-03-01.txt" commandLine="--deqp-watchdog=enable" name="master-2020-03-01"/>
 		<Configuration caseListFile="vk-master-2021-03-01.txt" commandLine="--deqp-watchdog=enable" name="master-2021-03-01"/>
+		<Configuration caseListFile="vk-incremental-deqp.txt" commandLine="--deqp-watchdog=enable" name="incremental-deqp"/>
 	</TestPackage>
 </Mustpass>
diff --git a/android/cts/master/src/egl-test-issues.txt b/android/cts/master/src/egl-test-issues.txt
index 7ce0644..d8671ae 100644
--- a/android/cts/master/src/egl-test-issues.txt
+++ b/android/cts/master/src/egl-test-issues.txt
@@ -27,3 +27,9 @@
 # Bug: 30909609
 dEQP-EGL.functional.image.modify.tex_rgba4_renderbuffer_clear_color
 dEQP-EGL.functional.image.modify.renderbuffer_rgba4_renderbuffer_clear_color
+
+# Issue 1384: sRGB encoding of EGL_GL_COLORSPACE_DISPLAY_P3_EXT. P has
+# conflicting implementations due to test being broken in early P CTS.
+# Can be removed in Q.
+dEQP-EGL.functional.wide_color.pbuffer_8888_colorspace_p3
+dEQP-EGL.functional.wide_color.window_8888_colorspace_p3
diff --git a/android/cts/master/src/gles2-master-2020-03-01.txt b/android/cts/master/src/gles2-master-2020-03-01.txt
index 3b10c21..854618e 100644
--- a/android/cts/master/src/gles2-master-2020-03-01.txt
+++ b/android/cts/master/src/gles2-master-2020-03-01.txt
@@ -124,6 +124,7 @@
 dEQP-GLES2.functional.light_amount.12omni
 dEQP-GLES2.functional.light_amount.14omni
 dEQP-GLES2.functional.light_amount.16omni
+dEQP-GLES2.functional.multisampled_render_to_texture.readpixels
 dEQP-GLES2.functional.shaders.preprocessor.basic.correct_phases_vertex
 dEQP-GLES2.functional.shaders.preprocessor.basic.correct_phases_fragment
 dEQP-GLES2.functional.shaders.preprocessor.basic.invalid_identifier_vertex
diff --git a/android/cts/master/src/gles2-test-issues.txt b/android/cts/master/src/gles2-test-issues.txt
index 8c9ea65..709979a 100644
--- a/android/cts/master/src/gles2-test-issues.txt
+++ b/android/cts/master/src/gles2-test-issues.txt
@@ -65,3 +65,6 @@
 dEQP-GLES2.functional.texture.wrap.mirror_clamp_nearest_pot_rgba8888
 dEQP-GLES2.functional.texture.wrap.mirror_repeat_nearest_pot_rgba8888
 dEQP-GLES2.functional.texture.wrap.mirror_mirror_nearest_pot_rgba8888
+
+# Negative ES2 tests
+dEQP-GLES2.functional.shaders.constant_expressions.invalid.precision_specifier
diff --git a/android/cts/master/src/gles3-incremental-deqp.txt b/android/cts/master/src/gles3-incremental-deqp.txt
new file mode 100644
index 0000000..061730c
--- /dev/null
+++ b/android/cts/master/src/gles3-incremental-deqp.txt
@@ -0,0 +1,74 @@
+# subset of gles3 tests
+dEQP-GLES3.info.vendor
+dEQP-GLES3.info.renderer
+dEQP-GLES3.info.version
+dEQP-GLES3.info.shading_language_version
+dEQP-GLES3.info.extensions
+dEQP-GLES3.info.render_target
+dEQP-GLES3.functional.prerequisite.state_reset
+dEQP-GLES3.functional.prerequisite.clear_color
+dEQP-GLES3.functional.prerequisite.read_pixels
+dEQP-GLES3.functional.implementation_limits.max_element_index
+dEQP-GLES3.functional.implementation_limits.subpixel_bits
+dEQP-GLES3.functional.color_clear.single_rgb
+dEQP-GLES3.functional.color_clear.single_rgba
+dEQP-GLES3.functional.color_clear.multiple_rgb
+dEQP-GLES3.functional.color_clear.multiple_rgba
+dEQP-GLES3.functional.texture.format.compressed.etc1_2d_pot
+dEQP-GLES3.functional.texture.format.compressed.etc1_2d_npot
+dEQP-GLES3.functional.texture.format.compressed.etc1_cube_pot
+dEQP-GLES3.functional.texture.format.compressed.etc1_cube_npot
+dEQP-GLES3.functional.texture.format.compressed.eac_r11_2d_pot
+dEQP-GLES3.functional.texture.format.compressed.eac_r11_cube_pot
+dEQP-GLES3.functional.texture.format.compressed.eac_r11_2d_npot
+dEQP-GLES3.functional.texture.format.compressed.eac_r11_cube_npot
+dEQP-GLES3.functional.texture.format.compressed.eac_signed_r11_2d_pot
+dEQP-GLES3.functional.texture.format.compressed.eac_signed_r11_cube_pot
+dEQP-GLES3.functional.texture.format.compressed.eac_signed_r11_2d_npot
+dEQP-GLES3.functional.texture.format.compressed.eac_signed_r11_cube_npot
+dEQP-GLES3.functional.texture.format.compressed.eac_rg11_2d_pot
+dEQP-GLES3.functional.texture.format.compressed.eac_rg11_cube_pot
+dEQP-GLES3.functional.texture.format.compressed.eac_rg11_2d_npot
+dEQP-GLES3.functional.texture.format.compressed.eac_rg11_cube_npot
+dEQP-GLES3.functional.texture.format.compressed.eac_signed_rg11_2d_pot
+dEQP-GLES3.functional.texture.format.compressed.eac_signed_rg11_cube_pot
+dEQP-GLES3.functional.texture.format.compressed.eac_signed_rg11_2d_npot
+dEQP-GLES3.functional.texture.format.compressed.eac_signed_rg11_cube_npot
+dEQP-GLES3.functional.texture.format.compressed.etc2_rgb8_2d_pot
+dEQP-GLES3.functional.texture.format.compressed.etc2_rgb8_cube_pot
+dEQP-GLES3.functional.texture.format.compressed.etc2_rgb8_2d_npot
+dEQP-GLES3.functional.texture.format.compressed.etc2_rgb8_cube_npot
+dEQP-GLES3.functional.texture.format.compressed.etc2_srgb8_2d_pot
+dEQP-GLES3.functional.texture.format.compressed.etc2_srgb8_cube_pot
+dEQP-GLES3.functional.texture.format.compressed.etc2_srgb8_2d_npot
+dEQP-GLES3.functional.texture.format.compressed.etc2_srgb8_cube_npot
+dEQP-GLES3.functional.texture.format.compressed.etc2_rgb8_punchthrough_alpha1_2d_pot
+dEQP-GLES3.functional.texture.format.compressed.etc2_rgb8_punchthrough_alpha1_cube_pot
+dEQP-GLES3.functional.texture.format.compressed.etc2_rgb8_punchthrough_alpha1_2d_npot
+dEQP-GLES3.functional.texture.format.compressed.etc2_rgb8_punchthrough_alpha1_cube_npot
+dEQP-GLES3.functional.texture.format.compressed.etc2_srgb8_punchthrough_alpha1_2d_pot
+dEQP-GLES3.functional.texture.format.compressed.etc2_srgb8_punchthrough_alpha1_cube_pot
+dEQP-GLES3.functional.texture.format.compressed.etc2_srgb8_punchthrough_alpha1_2d_npot
+dEQP-GLES3.functional.texture.format.compressed.etc2_srgb8_punchthrough_alpha1_cube_npot
+dEQP-GLES3.functional.texture.format.compressed.etc2_eac_rgba8_2d_pot
+dEQP-GLES3.functional.texture.format.compressed.etc2_eac_rgba8_cube_pot
+dEQP-GLES3.functional.texture.format.compressed.etc2_eac_rgba8_2d_npot
+dEQP-GLES3.functional.texture.format.compressed.etc2_eac_rgba8_cube_npot
+dEQP-GLES3.functional.texture.format.compressed.etc2_eac_srgb8_alpha8_2d_pot
+dEQP-GLES3.functional.texture.format.compressed.etc2_eac_srgb8_alpha8_cube_pot
+dEQP-GLES3.functional.texture.format.compressed.etc2_eac_srgb8_alpha8_2d_npot
+dEQP-GLES3.functional.texture.format.compressed.etc2_eac_srgb8_alpha8_cube_npot
+dEQP-GLES3.functional.shaders.swizzles.vector_swizzles.mediump_ivec3_b_fragment
+dEQP-GLES3.functional.shaders.swizzles.vector_swizzles.mediump_ivec3_rb_vertex
+dEQP-GLES3.functional.shaders.swizzles.vector_swizzles.mediump_ivec3_rb_fragment
+dEQP-GLES3.functional.shaders.swizzles.vector_swizzles.mediump_ivec3_bb_vertex
+dEQP-GLES3.functional.shaders.indexing.matrix_subscript.mat4x2_dynamic_write_static_read_fragment
+dEQP-GLES3.functional.shaders.indexing.matrix_subscript.mat4x2_dynamic_write_dynamic_read_vertex
+dEQP-GLES3.functional.shaders.indexing.matrix_subscript.mat4x2_dynamic_write_dynamic_read_fragment
+dEQP-GLES3.functional.shaders.operator.angle_and_trigonometry.tanh.highp_vec2_fragment
+dEQP-GLES3.functional.shaders.operator.angle_and_trigonometry.tanh.mediump_vec3_vertex
+dEQP-GLES3.functional.shaders.operator.angle_and_trigonometry.tanh.mediump_vec3_fragment
+dEQP-GLES3.functional.rasterization.fbo.rbo_multisample_max.primitives.triangles
+dEQP-GLES3.functional.rasterization.fbo.rbo_multisample_max.primitives.lines
+dEQP-GLES3.functional.rasterization.fbo.rbo_multisample_max.primitives.lines_wide
+dEQP-GLES3.functional.rasterization.fbo.rbo_multisample_max.primitives.points
diff --git a/android/cts/master/src/gles3-master-2020-03-01.txt b/android/cts/master/src/gles3-master-2020-03-01.txt
index f2a730a..ab66dc8 100644
--- a/android/cts/master/src/gles3-master-2020-03-01.txt
+++ b/android/cts/master/src/gles3-master-2020-03-01.txt
@@ -39642,384 +39642,6 @@
 dEQP-GLES3.functional.transform_feedback.array.interleaved.triangles.lowp_uvec4
 dEQP-GLES3.functional.transform_feedback.array.interleaved.triangles.mediump_uvec4
 dEQP-GLES3.functional.transform_feedback.array.interleaved.triangles.highp_uvec4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.lowp_float
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.mediump_float
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.highp_float
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.lowp_vec2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.mediump_vec2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.highp_vec2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.lowp_vec3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.mediump_vec3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.highp_vec3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.lowp_vec4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.mediump_vec4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.highp_vec4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.lowp_mat2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.mediump_mat2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.highp_mat2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.lowp_mat2x3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.mediump_mat2x3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.highp_mat2x3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.lowp_mat2x4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.mediump_mat2x4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.highp_mat2x4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.lowp_mat3x2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.mediump_mat3x2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.highp_mat3x2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.lowp_mat3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.mediump_mat3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.highp_mat3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.lowp_mat3x4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.mediump_mat3x4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.highp_mat3x4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.lowp_mat4x2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.mediump_mat4x2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.highp_mat4x2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.lowp_mat4x3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.mediump_mat4x3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.highp_mat4x3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.lowp_mat4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.mediump_mat4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.highp_mat4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.lowp_int
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.mediump_int
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.highp_int
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.lowp_ivec2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.mediump_ivec2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.highp_ivec2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.lowp_ivec3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.mediump_ivec3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.highp_ivec3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.lowp_ivec4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.mediump_ivec4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.highp_ivec4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.lowp_uint
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.mediump_uint
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.highp_uint
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.lowp_uvec2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.mediump_uvec2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.highp_uvec2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.lowp_uvec3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.mediump_uvec3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.highp_uvec3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.lowp_uvec4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.mediump_uvec4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.points.highp_uvec4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.lowp_float
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.mediump_float
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.highp_float
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.lowp_vec2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.mediump_vec2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.highp_vec2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.lowp_vec3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.mediump_vec3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.highp_vec3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.lowp_vec4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.mediump_vec4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.highp_vec4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.lowp_mat2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.mediump_mat2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.highp_mat2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.lowp_mat2x3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.mediump_mat2x3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.highp_mat2x3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.lowp_mat2x4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.mediump_mat2x4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.highp_mat2x4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.lowp_mat3x2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.mediump_mat3x2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.highp_mat3x2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.lowp_mat3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.mediump_mat3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.highp_mat3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.lowp_mat3x4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.mediump_mat3x4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.highp_mat3x4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.lowp_mat4x2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.mediump_mat4x2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.highp_mat4x2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.lowp_mat4x3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.mediump_mat4x3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.highp_mat4x3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.lowp_mat4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.mediump_mat4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.highp_mat4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.lowp_int
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.mediump_int
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.highp_int
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.lowp_ivec2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.mediump_ivec2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.highp_ivec2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.lowp_ivec3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.mediump_ivec3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.highp_ivec3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.lowp_ivec4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.mediump_ivec4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.highp_ivec4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.lowp_uint
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.mediump_uint
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.highp_uint
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.lowp_uvec2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.mediump_uvec2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.highp_uvec2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.lowp_uvec3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.mediump_uvec3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.highp_uvec3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.lowp_uvec4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.mediump_uvec4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.lines.highp_uvec4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.lowp_float
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.mediump_float
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.highp_float
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.lowp_vec2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.mediump_vec2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.highp_vec2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.lowp_vec3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.mediump_vec3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.highp_vec3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.lowp_vec4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.mediump_vec4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.highp_vec4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.lowp_mat2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.mediump_mat2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.highp_mat2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.lowp_mat2x3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.mediump_mat2x3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.highp_mat2x3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.lowp_mat2x4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.mediump_mat2x4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.highp_mat2x4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.lowp_mat3x2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.mediump_mat3x2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.highp_mat3x2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.lowp_mat3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.mediump_mat3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.highp_mat3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.lowp_mat3x4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.mediump_mat3x4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.highp_mat3x4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.lowp_mat4x2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.mediump_mat4x2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.highp_mat4x2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.lowp_mat4x3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.mediump_mat4x3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.highp_mat4x3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.lowp_mat4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.mediump_mat4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.highp_mat4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.lowp_int
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.mediump_int
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.highp_int
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.lowp_ivec2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.mediump_ivec2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.highp_ivec2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.lowp_ivec3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.mediump_ivec3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.highp_ivec3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.lowp_ivec4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.mediump_ivec4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.highp_ivec4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.lowp_uint
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.mediump_uint
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.highp_uint
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.lowp_uvec2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.mediump_uvec2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.highp_uvec2
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.lowp_uvec3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.mediump_uvec3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.highp_uvec3
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.lowp_uvec4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.mediump_uvec4
-dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.highp_uvec4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.lowp_float
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.mediump_float
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.highp_float
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.lowp_vec2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.mediump_vec2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.highp_vec2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.lowp_vec3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.mediump_vec3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.highp_vec3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.lowp_vec4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.mediump_vec4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.highp_vec4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.lowp_mat2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.mediump_mat2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.highp_mat2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.lowp_mat2x3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.mediump_mat2x3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.highp_mat2x3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.lowp_mat2x4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.mediump_mat2x4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.highp_mat2x4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.lowp_mat3x2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.mediump_mat3x2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.highp_mat3x2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.lowp_mat3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.mediump_mat3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.highp_mat3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.lowp_mat3x4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.mediump_mat3x4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.highp_mat3x4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.lowp_mat4x2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.mediump_mat4x2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.highp_mat4x2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.lowp_mat4x3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.mediump_mat4x3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.highp_mat4x3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.lowp_mat4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.mediump_mat4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.highp_mat4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.lowp_int
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.mediump_int
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.highp_int
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.lowp_ivec2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.mediump_ivec2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.highp_ivec2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.lowp_ivec3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.mediump_ivec3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.highp_ivec3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.lowp_ivec4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.mediump_ivec4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.highp_ivec4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.lowp_uint
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.mediump_uint
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.highp_uint
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.lowp_uvec2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.mediump_uvec2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.highp_uvec2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.lowp_uvec3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.mediump_uvec3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.highp_uvec3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.lowp_uvec4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.mediump_uvec4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.points.highp_uvec4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.lowp_float
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.mediump_float
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.highp_float
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.lowp_vec2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.mediump_vec2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.highp_vec2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.lowp_vec3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.mediump_vec3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.highp_vec3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.lowp_vec4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.mediump_vec4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.highp_vec4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.lowp_mat2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.mediump_mat2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.highp_mat2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.lowp_mat2x3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.mediump_mat2x3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.highp_mat2x3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.lowp_mat2x4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.mediump_mat2x4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.highp_mat2x4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.lowp_mat3x2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.mediump_mat3x2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.highp_mat3x2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.lowp_mat3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.mediump_mat3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.highp_mat3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.lowp_mat3x4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.mediump_mat3x4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.highp_mat3x4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.lowp_mat4x2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.mediump_mat4x2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.highp_mat4x2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.lowp_mat4x3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.mediump_mat4x3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.highp_mat4x3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.lowp_mat4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.mediump_mat4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.highp_mat4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.lowp_int
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.mediump_int
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.highp_int
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.lowp_ivec2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.mediump_ivec2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.highp_ivec2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.lowp_ivec3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.mediump_ivec3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.highp_ivec3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.lowp_ivec4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.mediump_ivec4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.highp_ivec4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.lowp_uint
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.mediump_uint
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.highp_uint
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.lowp_uvec2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.mediump_uvec2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.highp_uvec2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.lowp_uvec3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.mediump_uvec3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.highp_uvec3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.lowp_uvec4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.mediump_uvec4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.lines.highp_uvec4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.lowp_float
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.mediump_float
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.highp_float
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.lowp_vec2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.mediump_vec2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.highp_vec2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.lowp_vec3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.mediump_vec3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.highp_vec3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.lowp_vec4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.mediump_vec4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.highp_vec4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.lowp_mat2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.mediump_mat2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.highp_mat2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.lowp_mat2x3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.mediump_mat2x3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.highp_mat2x3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.lowp_mat2x4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.mediump_mat2x4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.highp_mat2x4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.lowp_mat3x2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.mediump_mat3x2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.highp_mat3x2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.lowp_mat3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.mediump_mat3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.highp_mat3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.lowp_mat3x4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.mediump_mat3x4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.highp_mat3x4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.lowp_mat4x2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.mediump_mat4x2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.highp_mat4x2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.lowp_mat4x3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.mediump_mat4x3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.highp_mat4x3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.lowp_mat4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.mediump_mat4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.highp_mat4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.lowp_int
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.mediump_int
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.highp_int
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.lowp_ivec2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.mediump_ivec2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.highp_ivec2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.lowp_ivec3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.mediump_ivec3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.highp_ivec3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.lowp_ivec4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.mediump_ivec4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.highp_ivec4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.lowp_uint
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.mediump_uint
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.highp_uint
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.lowp_uvec2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.mediump_uvec2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.highp_uvec2
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.lowp_uvec3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.mediump_uvec3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.highp_uvec3
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.lowp_uvec4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.mediump_uvec4
-dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.highp_uvec4
 dEQP-GLES3.functional.transform_feedback.interpolation.smooth.lowp_vec4_points_separate
 dEQP-GLES3.functional.transform_feedback.interpolation.smooth.lowp_vec4_points_interleaved
 dEQP-GLES3.functional.transform_feedback.interpolation.smooth.lowp_vec4_lines_separate
@@ -40074,61 +39696,6 @@
 dEQP-GLES3.functional.transform_feedback.interpolation.centroid.highp_vec4_lines_interleaved
 dEQP-GLES3.functional.transform_feedback.interpolation.centroid.highp_vec4_triangles_separate
 dEQP-GLES3.functional.transform_feedback.interpolation.centroid.highp_vec4_triangles_interleaved
-dEQP-GLES3.functional.transform_feedback.random.separate.points.1
-dEQP-GLES3.functional.transform_feedback.random.separate.points.2
-dEQP-GLES3.functional.transform_feedback.random.separate.points.3
-dEQP-GLES3.functional.transform_feedback.random.separate.points.4
-dEQP-GLES3.functional.transform_feedback.random.separate.points.5
-dEQP-GLES3.functional.transform_feedback.random.separate.points.6
-dEQP-GLES3.functional.transform_feedback.random.separate.points.7
-dEQP-GLES3.functional.transform_feedback.random.separate.points.8
-dEQP-GLES3.functional.transform_feedback.random.separate.points.9
-dEQP-GLES3.functional.transform_feedback.random.separate.points.10
-dEQP-GLES3.functional.transform_feedback.random.separate.lines.1
-dEQP-GLES3.functional.transform_feedback.random.separate.lines.2
-dEQP-GLES3.functional.transform_feedback.random.separate.lines.3
-dEQP-GLES3.functional.transform_feedback.random.separate.lines.4
-dEQP-GLES3.functional.transform_feedback.random.separate.lines.5
-dEQP-GLES3.functional.transform_feedback.random.separate.lines.6
-dEQP-GLES3.functional.transform_feedback.random.separate.lines.7
-dEQP-GLES3.functional.transform_feedback.random.separate.lines.8
-dEQP-GLES3.functional.transform_feedback.random.separate.lines.9
-dEQP-GLES3.functional.transform_feedback.random.separate.lines.10
-dEQP-GLES3.functional.transform_feedback.random.separate.triangles.2
-dEQP-GLES3.functional.transform_feedback.random.separate.triangles.3
-dEQP-GLES3.functional.transform_feedback.random.separate.triangles.4
-dEQP-GLES3.functional.transform_feedback.random.separate.triangles.5
-dEQP-GLES3.functional.transform_feedback.random.separate.triangles.6
-dEQP-GLES3.functional.transform_feedback.random.separate.triangles.7
-dEQP-GLES3.functional.transform_feedback.random.separate.triangles.8
-dEQP-GLES3.functional.transform_feedback.random.separate.triangles.9
-dEQP-GLES3.functional.transform_feedback.random.separate.triangles.10
-dEQP-GLES3.functional.transform_feedback.random.interleaved.points.1
-dEQP-GLES3.functional.transform_feedback.random.interleaved.points.2
-dEQP-GLES3.functional.transform_feedback.random.interleaved.points.3
-dEQP-GLES3.functional.transform_feedback.random.interleaved.points.4
-dEQP-GLES3.functional.transform_feedback.random.interleaved.points.5
-dEQP-GLES3.functional.transform_feedback.random.interleaved.points.6
-dEQP-GLES3.functional.transform_feedback.random.interleaved.points.7
-dEQP-GLES3.functional.transform_feedback.random.interleaved.points.8
-dEQP-GLES3.functional.transform_feedback.random.interleaved.points.9
-dEQP-GLES3.functional.transform_feedback.random.interleaved.points.10
-dEQP-GLES3.functional.transform_feedback.random.interleaved.lines.1
-dEQP-GLES3.functional.transform_feedback.random.interleaved.lines.2
-dEQP-GLES3.functional.transform_feedback.random.interleaved.lines.4
-dEQP-GLES3.functional.transform_feedback.random.interleaved.lines.5
-dEQP-GLES3.functional.transform_feedback.random.interleaved.lines.6
-dEQP-GLES3.functional.transform_feedback.random.interleaved.lines.7
-dEQP-GLES3.functional.transform_feedback.random.interleaved.lines.8
-dEQP-GLES3.functional.transform_feedback.random.interleaved.lines.9
-dEQP-GLES3.functional.transform_feedback.random.interleaved.lines.10
-dEQP-GLES3.functional.transform_feedback.random.interleaved.triangles.1
-dEQP-GLES3.functional.transform_feedback.random.interleaved.triangles.2
-dEQP-GLES3.functional.transform_feedback.random.interleaved.triangles.3
-dEQP-GLES3.functional.transform_feedback.random.interleaved.triangles.4
-dEQP-GLES3.functional.transform_feedback.random.interleaved.triangles.5
-dEQP-GLES3.functional.transform_feedback.random.interleaved.triangles.6
-dEQP-GLES3.functional.transform_feedback.random.interleaved.triangles.9
 dEQP-GLES3.functional.fence_sync.wait_sync_smalldraw
 dEQP-GLES3.functional.fence_sync.wait_sync_largedraw
 dEQP-GLES3.functional.fence_sync.client_wait_sync_smalldraw
diff --git a/android/cts/master/src/gles3-spec-issues.txt b/android/cts/master/src/gles3-spec-issues.txt
index 2b7cf96..525eef9 100644
--- a/android/cts/master/src/gles3-spec-issues.txt
+++ b/android/cts/master/src/gles3-spec-issues.txt
@@ -510,9 +510,6 @@
 # Khronos bugs 11207, 12408, internal bug 20699693
 dEQP-GLES3.functional.shaders.arrays.invalid.empty_declaration_without_var_name_*
 
-# Khronos bug 13916, internal bug 20558284
-dEQP-GLES3.functional.flush_finish.flush_wait
-
 # Khronos bug 14284, internal bug 22461511
 dEQP-GLES3.functional.shaders.linkage.uniform.block.layout_qualifier_mismatch_3
 
diff --git a/android/cts/master/src/gles3-test-issues.txt b/android/cts/master/src/gles3-test-issues.txt
index 6f58d73..d691640 100644
--- a/android/cts/master/src/gles3-test-issues.txt
+++ b/android/cts/master/src/gles3-test-issues.txt
@@ -149,3 +149,7 @@
 
 # Bug 26651667
 dEQP-GLES3.functional.draw.draw_elements_instanced.indices.buffer.index_byte
+
+# Khronos bug 13916, internal bugs 20558284, 143459817
+dEQP-GLES3.functional.flush_finish.*
+
diff --git a/android/cts/master/src/gles3-waivers.txt b/android/cts/master/src/gles3-waivers.txt
new file mode 100644
index 0000000..248c76a
--- /dev/null
+++ b/android/cts/master/src/gles3-waivers.txt
@@ -0,0 +1,13 @@
+
+# Unlike Khronos waivers, Android waivers simply REMOVE the tests for all
+# vendors.
+
+# Vendor: Samsung* and Google*
+# Description: ANGLE is unable to capture individual array elements in transform
+# feedback using VK_EXT_transform_feedback revision 1.
+# https://gerrit.khronos.org/c/vk-gl-cts/+/6190
+# https://gerrit.khronos.org/c/vk-gl-cts/+/8460
+# https://gitlab.khronos.org/Tracker/vk-gl-cts/-/issues/2237
+# https://gitlab.khronos.org/Tracker/vk-gl-cts/-/issues/3255
+dEQP-GLES3.functional.transform_feedback.array_element.*
+dEQP-GLES3.functional.transform_feedback.random.*
diff --git a/android/cts/master/src/gles31-driver-issues.txt b/android/cts/master/src/gles31-driver-issues.txt
index e69de29..634df11 100644
--- a/android/cts/master/src/gles31-driver-issues.txt
+++ b/android/cts/master/src/gles31-driver-issues.txt
@@ -0,0 +1,2 @@
+# b/130880466
+dEQP-GLES31.functional.separate_shader.random.38
diff --git a/android/cts/master/src/gles31-master-2020-03-01.txt b/android/cts/master/src/gles31-master-2020-03-01.txt
index 339e535..806974a 100644
--- a/android/cts/master/src/gles31-master-2020-03-01.txt
+++ b/android/cts/master/src/gles31-master-2020-03-01.txt
@@ -22912,107 +22912,86 @@
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.vertex_fragment.default_block_basic_type
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.vertex_fragment.default_block_struct_member
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.vertex_fragment.default_block_array
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.vertex_fragment.default_block_array_element
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.vertex_tess_fragment.builtin_gl_position
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.vertex_tess_fragment.default_block_basic_type
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.vertex_tess_fragment.default_block_struct_member
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.vertex_tess_fragment.default_block_array
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.vertex_tess_fragment.default_block_array_element
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.vertex_geo_fragment.builtin_gl_position
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.vertex_geo_fragment.default_block_basic_type
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.vertex_geo_fragment.default_block_struct_member
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.vertex_geo_fragment.default_block_array
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.vertex_geo_fragment.default_block_array_element
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.vertex_tess_geo_fragment.builtin_gl_position
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.vertex_tess_geo_fragment.default_block_basic_type
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.vertex_tess_geo_fragment.default_block_struct_member
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.vertex_tess_geo_fragment.default_block_array
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.vertex_tess_geo_fragment.default_block_array_element
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.separable_vertex.builtin_gl_position
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.separable_vertex.default_block_basic_type
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.separable_vertex.default_block_struct_member
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.separable_vertex.default_block_array
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.separable_vertex.default_block_array_element
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.separable_tess_eval.builtin_gl_position
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.separable_tess_eval.default_block_basic_type
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.separable_tess_eval.default_block_struct_member
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.separable_tess_eval.default_block_array
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.separable_tess_eval.default_block_array_element
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.separable_geometry.builtin_gl_position
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.separable_geometry.default_block_basic_type
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.separable_geometry.default_block_struct_member
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.separable_geometry.default_block_array
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.separable_geometry.default_block_array_element
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.vertex_fragment.builtin_gl_position
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.vertex_fragment.default_block_basic_type
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.vertex_fragment.default_block_struct_member
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.vertex_fragment.default_block_array
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.vertex_fragment.default_block_array_element
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.vertex_tess_fragment.builtin_gl_position
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.vertex_tess_fragment.default_block_basic_type
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.vertex_tess_fragment.default_block_struct_member
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.vertex_tess_fragment.default_block_array
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.vertex_tess_fragment.default_block_array_element
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.vertex_geo_fragment.builtin_gl_position
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.vertex_geo_fragment.default_block_basic_type
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.vertex_geo_fragment.default_block_struct_member
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.vertex_geo_fragment.default_block_array
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.vertex_geo_fragment.default_block_array_element
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.vertex_tess_geo_fragment.builtin_gl_position
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.vertex_tess_geo_fragment.default_block_basic_type
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.vertex_tess_geo_fragment.default_block_struct_member
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.vertex_tess_geo_fragment.default_block_array
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.vertex_tess_geo_fragment.default_block_array_element
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.separable_vertex.builtin_gl_position
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.separable_vertex.default_block_basic_type
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.separable_vertex.default_block_struct_member
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.separable_vertex.default_block_array
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.separable_vertex.default_block_array_element
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.separable_tess_eval.builtin_gl_position
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.separable_tess_eval.default_block_basic_type
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.separable_tess_eval.default_block_struct_member
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.separable_tess_eval.default_block_array
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.separable_tess_eval.default_block_array_element
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.separable_geometry.builtin_gl_position
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.separable_geometry.default_block_basic_type
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.separable_geometry.default_block_struct_member
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.separable_geometry.default_block_array
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.separable_geometry.default_block_array_element
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.vertex_fragment.builtin_gl_position
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.vertex_fragment.default_block_basic_type
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.vertex_fragment.default_block_struct_member
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.vertex_fragment.default_block_array
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.vertex_fragment.default_block_array_element
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.vertex_tess_fragment.builtin_gl_position
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.vertex_tess_fragment.default_block_basic_type
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.vertex_tess_fragment.default_block_struct_member
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.vertex_tess_fragment.default_block_array
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.vertex_tess_fragment.default_block_array_element
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.vertex_geo_fragment.builtin_gl_position
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.vertex_geo_fragment.default_block_basic_type
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.vertex_geo_fragment.default_block_struct_member
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.vertex_geo_fragment.default_block_array
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.vertex_geo_fragment.default_block_array_element
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.vertex_tess_geo_fragment.builtin_gl_position
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.vertex_tess_geo_fragment.default_block_basic_type
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.vertex_tess_geo_fragment.default_block_struct_member
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.vertex_tess_geo_fragment.default_block_array
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.vertex_tess_geo_fragment.default_block_array_element
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.separable_vertex.builtin_gl_position
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.separable_vertex.default_block_basic_type
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.separable_vertex.default_block_struct_member
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.separable_vertex.default_block_array
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.separable_vertex.default_block_array_element
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.separable_tess_eval.builtin_gl_position
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.separable_tess_eval.default_block_basic_type
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.separable_tess_eval.default_block_struct_member
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.separable_tess_eval.default_block_array
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.separable_tess_eval.default_block_array_element
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.separable_geometry.builtin_gl_position
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.separable_geometry.default_block_basic_type
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.separable_geometry.default_block_struct_member
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.separable_geometry.default_block_array
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.separable_geometry.default_block_array_element
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.builtin.gl_position
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.basic_type.float
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.basic_type.int
@@ -23035,27 +23014,6 @@
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.basic_type.mat4x2
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.basic_type.mat4x3
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.basic_type.mat4
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.array.float
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.array.int
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.array.uint
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.array.vec2
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.array.vec3
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.array.vec4
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.array.ivec2
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.array.ivec3
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.array.ivec4
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.array.uvec2
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.array.uvec3
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.array.uvec4
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.array.mat2
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.array.mat2x3
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.array.mat2x4
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.array.mat3x2
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.array.mat3
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.array.mat3x4
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.array.mat4x2
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.array.mat4x3
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.array.mat4
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.whole_array.float
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.whole_array.int
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.whole_array.uint
@@ -23106,13 +23064,6 @@
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_tess_fragment.basic_type.ivec3
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_tess_fragment.basic_type.uvec2
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_tess_fragment.basic_type.mat3x4
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_tess_fragment.array.float
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_tess_fragment.array.int
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_tess_fragment.array.uint
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_tess_fragment.array.vec3
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_tess_fragment.array.ivec3
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_tess_fragment.array.uvec2
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_tess_fragment.array.mat3x4
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_tess_fragment.whole_array.float
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_tess_fragment.whole_array.int
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_tess_fragment.whole_array.uint
@@ -23135,13 +23086,6 @@
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_geo_fragment.basic_type.ivec3
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_geo_fragment.basic_type.uvec2
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_geo_fragment.basic_type.mat3x4
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_geo_fragment.array.float
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_geo_fragment.array.int
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_geo_fragment.array.uint
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_geo_fragment.array.vec3
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_geo_fragment.array.ivec3
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_geo_fragment.array.uvec2
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_geo_fragment.array.mat3x4
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_geo_fragment.whole_array.float
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_geo_fragment.whole_array.int
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_geo_fragment.whole_array.uint
@@ -23164,13 +23108,6 @@
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_tess_geo_fragment.basic_type.ivec3
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_tess_geo_fragment.basic_type.uvec2
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_tess_geo_fragment.basic_type.mat3x4
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_tess_geo_fragment.array.float
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_tess_geo_fragment.array.int
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_tess_geo_fragment.array.uint
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_tess_geo_fragment.array.vec3
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_tess_geo_fragment.array.ivec3
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_tess_geo_fragment.array.uvec2
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_tess_geo_fragment.array.mat3x4
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_tess_geo_fragment.whole_array.float
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_tess_geo_fragment.whole_array.int
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_tess_geo_fragment.whole_array.uint
@@ -23207,27 +23144,6 @@
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.basic_type.mat4x2
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.basic_type.mat4x3
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.basic_type.mat4
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.array.float
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.array.int
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.array.uint
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.array.vec2
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.array.vec3
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.array.vec4
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.array.ivec2
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.array.ivec3
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.array.ivec4
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.array.uvec2
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.array.uvec3
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.array.uvec4
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.array.mat2
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.array.mat2x3
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.array.mat2x4
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.array.mat3x2
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.array.mat3
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.array.mat3x4
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.array.mat4x2
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.array.mat4x3
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.array.mat4
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.whole_array.float
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.whole_array.int
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.whole_array.uint
@@ -23278,13 +23194,6 @@
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_tess_eval.basic_type.ivec3
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_tess_eval.basic_type.uvec2
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_tess_eval.basic_type.mat3x4
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_tess_eval.array.float
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_tess_eval.array.int
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_tess_eval.array.uint
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_tess_eval.array.vec3
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_tess_eval.array.ivec3
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_tess_eval.array.uvec2
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_tess_eval.array.mat3x4
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_tess_eval.whole_array.float
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_tess_eval.whole_array.int
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_tess_eval.whole_array.uint
@@ -23307,13 +23216,6 @@
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_geometry.basic_type.ivec3
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_geometry.basic_type.uvec2
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_geometry.basic_type.mat3x4
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_geometry.array.float
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_geometry.array.int
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_geometry.array.uint
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_geometry.array.vec3
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_geometry.array.ivec3
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_geometry.array.uvec2
-dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_geometry.array.mat3x4
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_geometry.whole_array.float
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_geometry.whole_array.int
 dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_geometry.whole_array.uint
diff --git a/android/cts/master/src/gles31-temp-excluded.txt b/android/cts/master/src/gles31-temp-excluded.txt
index 2974117..bf72f10 100644
--- a/android/cts/master/src/gles31-temp-excluded.txt
+++ b/android/cts/master/src/gles31-temp-excluded.txt
@@ -1 +1,2 @@
 # Tests to be temporarily skipped for Android CI, but still enforced in CTS.
+
diff --git a/android/cts/master/src/gles31-test-issues.txt b/android/cts/master/src/gles31-test-issues.txt
index f0181d4..d818b8c 100644
--- a/android/cts/master/src/gles31-test-issues.txt
+++ b/android/cts/master/src/gles31-test-issues.txt
@@ -36,3 +36,6 @@
 
 # Bug 28813504
 dEQP-GLES31.functional.ubo.random.all_per_block_buffers.41
+
+# Bug 122608943 shader generated is ridiculously large.
+dEQP-GLES31.functional.ssbo.layout.random.all_shared_buffer.48
diff --git a/android/cts/master/src/gles31-waivers.txt b/android/cts/master/src/gles31-waivers.txt
new file mode 100644
index 0000000..69a655c
--- /dev/null
+++ b/android/cts/master/src/gles31-waivers.txt
@@ -0,0 +1,13 @@
+
+# Unlike Khronos waivers, Android waivers simply REMOVE the tests for all
+# vendors.
+
+# Vendor: Samsung* and Google*
+# Description: ANGLE is unable to capture individual array elements in transform
+# feedback using VK_EXT_transform_feedback revision 1.
+# https://gerrit.khronos.org/c/vk-gl-cts/+/6190
+# https://gerrit.khronos.org/c/vk-gl-cts/+/8460
+# https://gitlab.khronos.org/Tracker/vk-gl-cts/-/issues/2237
+# https://gitlab.khronos.org/Tracker/vk-gl-cts/-/issues/3255
+dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.*_array_element
+dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.*.array.*
diff --git a/android/cts/master/src/vk-incremental-deqp.txt b/android/cts/master/src/vk-incremental-deqp.txt
new file mode 100644
index 0000000..fd0f838
--- /dev/null
+++ b/android/cts/master/src/vk-incremental-deqp.txt
@@ -0,0 +1,354 @@
+# subset of vulkan tests
+dEQP-VK.info.build
+dEQP-VK.info.device
+dEQP-VK.info.platform
+dEQP-VK.info.memory_limits
+dEQP-VK.info.physical_devices
+dEQP-VK.info.physical_device_groups
+dEQP-VK.info.instance_layers
+dEQP-VK.info.instance_extensions
+dEQP-VK.info.device_features
+dEQP-VK.info.device_properties
+dEQP-VK.info.device_queue_family_properties
+dEQP-VK.info.device_memory_properties
+dEQP-VK.info.device_layers
+dEQP-VK.info.device_extensions
+dEQP-VK.info.device_no_khx_extensions
+dEQP-VK.info.device_memory_budget
+dEQP-VK.info.device_mandatory_features
+dEQP-VK.info.device_group_peer_memory_features
+dEQP-VK.api.version_check.version
+dEQP-VK.api.version_check.entry_points
+dEQP-VK.api.driver_properties.driver_id_match
+dEQP-VK.api.driver_properties.name_is_not_empty
+dEQP-VK.api.driver_properties.name_zero_terminated
+dEQP-VK.api.driver_properties.info_zero_terminated
+dEQP-VK.api.smoke.create_sampler
+dEQP-VK.api.smoke.create_shader
+dEQP-VK.api.smoke.triangle
+dEQP-VK.api.smoke.triangle_ext_structs
+dEQP-VK.api.smoke.asm_triangle
+dEQP-VK.api.smoke.asm_triangle_no_opname
+dEQP-VK.api.smoke.unused_resolve_attachment
+dEQP-VK.texture.compressed.etc2_r8g8b8_unorm_block_2d_pot
+dEQP-VK.texture.compressed.eac_r11_unorm_block_2d_pot
+dEQP-VK.texture.compressed.eac_r11g11_unorm_block_2d_pot
+dEQP-VK.texture.compressed.astc_4x4_unorm_block_2d_pot
+dEQP-VK.texture.compressed.astc_5x4_unorm_block_2d_pot
+dEQP-VK.texture.compressed.astc_12x12_unorm_block_2d_pot
+dEQP-VK.texture.compressed.astc_12x12_unorm_block_2d_pot_sparse
+dEQP-VK.texture.compressed.astc_12x12_srgb_block_2d_pot
+dEQP-VK.texture.compressed.astc_12x12_srgb_block_2d_pot_sparse
+dEQP-VK.texture.compressed.bc1_rgb_unorm_block_2d_pot
+dEQP-VK.texture.compressed.bc1_rgb_unorm_block_2d_pot_sparse
+dEQP-VK.texture.compressed.bc1_rgba_srgb_block_2d_pot_sparse
+dEQP-VK.texture.compressed.bc2_unorm_block_2d_pot
+dEQP-VK.texture.compressed.bc2_unorm_block_2d_pot_sparse
+dEQP-VK.texture.compressed.bc2_srgb_block_2d_pot_sparse
+dEQP-VK.texture.compressed.bc3_unorm_block_2d_pot
+dEQP-VK.texture.compressed.bc3_srgb_block_2d_pot_sparse
+dEQP-VK.texture.compressed.bc4_unorm_block_2d_pot
+dEQP-VK.texture.compressed.bc4_unorm_block_2d_pot_sparse
+dEQP-VK.texture.compressed.bc4_snorm_block_2d_pot_sparse
+dEQP-VK.texture.compressed.bc5_unorm_block_2d_pot
+dEQP-VK.texture.compressed.bc5_snorm_block_2d_pot
+dEQP-VK.texture.compressed.bc5_snorm_block_2d_pot_sparse
+dEQP-VK.texture.compressed.bc6h_ufloat_block_2d_pot
+dEQP-VK.texture.compressed.bc6h_sfloat_block_2d_pot_sparse
+dEQP-VK.texture.compressed.bc7_unorm_block_2d_pot
+dEQP-VK.texture.compressed.bc7_unorm_block_2d_pot_sparse
+dEQP-VK.texture.compressed.etc2_r8g8b8_unorm_block_2d_npot
+dEQP-VK.texture.compressed.etc2_r8g8b8_unorm_block_2d_npot_sparse
+dEQP-VK.texture.compressed.etc2_r8g8b8_srgb_block_2d_npot
+dEQP-VK.texture.compressed.etc2_r8g8b8_srgb_block_2d_npot_sparse
+dEQP-VK.texture.compressed.etc2_r8g8b8a1_unorm_block_2d_npot
+dEQP-VK.texture.compressed.etc2_r8g8b8a1_unorm_block_2d_npot_sparse
+dEQP-VK.texture.compressed.eac_r11_unorm_block_2d_npot
+dEQP-VK.texture.compressed.eac_r11_unorm_block_2d_npot_sparse
+dEQP-VK.texture.compressed.eac_r11g11_unorm_block_2d_npot
+dEQP-VK.texture.compressed.eac_r11g11_snorm_block_2d_npot_sparse
+dEQP-VK.texture.compressed.astc_4x4_unorm_block_2d_npot
+dEQP-VK.texture.compressed.astc_4x4_unorm_block_2d_npot_sparse
+dEQP-VK.texture.compressed.astc_12x12_unorm_block_2d_npot
+dEQP-VK.texture.compressed.astc_12x12_unorm_block_2d_npot_sparse
+dEQP-VK.texture.compressed.astc_12x12_srgb_block_2d_npot
+dEQP-VK.texture.compressed.astc_12x12_srgb_block_2d_npot_sparse
+dEQP-VK.texture.compressed.bc1_rgb_unorm_block_2d_npot
+dEQP-VK.texture.compressed.bc1_rgb_unorm_block_2d_npot_sparse
+dEQP-VK.texture.compressed.bc1_rgba_srgb_block_2d_npot_sparse
+dEQP-VK.texture.compressed.bc2_unorm_block_2d_npot
+dEQP-VK.texture.compressed.bc2_unorm_block_2d_npot_sparse
+dEQP-VK.texture.compressed.bc3_unorm_block_2d_npot
+dEQP-VK.texture.compressed.bc3_unorm_block_2d_npot_sparse
+dEQP-VK.texture.compressed.bc3_srgb_block_2d_npot
+dEQP-VK.texture.compressed.bc3_srgb_block_2d_npot_sparse
+dEQP-VK.texture.compressed.bc4_unorm_block_2d_npot
+dEQP-VK.texture.compressed.bc5_unorm_block_2d_npot
+dEQP-VK.texture.compressed.bc5_unorm_block_2d_npot_sparse
+dEQP-VK.texture.compressed.bc5_snorm_block_2d_npot
+dEQP-VK.texture.compressed.bc6h_ufloat_block_2d_npot_sparse
+dEQP-VK.texture.compressed.bc7_unorm_block_2d_npot
+dEQP-VK.texture.compressed.bc7_unorm_block_2d_npot_sparse
+dEQP-VK.api.info.format_properties.r4g4_unorm_pack8
+dEQP-VK.api.info.format_properties.r4g4b4a4_unorm_pack16
+dEQP-VK.api.info.format_properties.b4g4r4a4_unorm_pack16
+dEQP-VK.api.info.format_properties.r5g6b5_unorm_pack16
+dEQP-VK.api.info.format_properties.g16b16g16r16_422_unorm
+dEQP-VK.api.info.format_properties.b16g16r16g16_422_unorm
+dEQP-VK.api.info.format_properties.g16_b16_r16_3plane_420_unorm
+dEQP-VK.api.info.image_format_properties.3d.linear.r64_sfloat
+dEQP-VK.api.info.image_format_properties.3d.linear.r64g64_uint
+dEQP-VK.api.info.image_format_properties.3d.linear.r64g64_sint
+dEQP-VK.api.info.image_format_properties.3d.linear.r64g64_sfloat
+dEQP-VK.api.info.image_format_properties.3d.linear.r64g64b64_uint
+dEQP-VK.api.info.image_format_properties.3d.linear.r64g64b64_sint
+dEQP-VK.api.info.image_format_properties.3d.linear.r64g64b64_sfloat
+dEQP-VK.api.info.image_format_properties.3d.linear.r64g64b64a64_uint
+dEQP-VK.api.info.image_format_properties.3d.linear.r64g64b64a64_sint
+dEQP-VK.api.info.image_format_properties.3d.linear.r64g64b64a64_sfloat
+dEQP-VK.api.info.image_format_properties.3d.linear.b10g11r11_ufloat_pack32
+dEQP-VK.api.info.image_format_properties.3d.linear.e5b9g9r9_ufloat_pack32
+dEQP-VK.api.info.image_format_properties.3d.linear.d16_unorm
+dEQP-VK.api.info.image_format_properties.3d.linear.x8_d24_unorm_pack32
+dEQP-VK.api.info.image_format_properties.3d.linear.d32_sfloat
+dEQP-VK.api.info.image_format_properties.3d.linear.s8_uint
+dEQP-VK.api.info.image_format_properties.3d.linear.d16_unorm_s8_uint
+dEQP-VK.api.info.image_format_properties.3d.linear.d24_unorm_s8_uint
+dEQP-VK.api.info.image_format_properties.3d.linear.d32_sfloat_s8_uint
+dEQP-VK.api.info.image_format_properties.3d.linear.bc1_rgb_unorm_block
+dEQP-VK.api.info.image_format_properties.3d.linear.bc1_rgb_srgb_block
+dEQP-VK.api.info.image_format_properties.3d.linear.bc1_rgba_unorm_block
+dEQP-VK.api.info.image_format_properties.3d.linear.bc1_rgba_srgb_block
+dEQP-VK.api.info.image_format_properties.3d.linear.bc2_unorm_block
+dEQP-VK.api.info.image_format_properties.3d.linear.bc2_srgb_block
+dEQP-VK.api.info.image_format_properties.3d.linear.bc3_unorm_block
+dEQP-VK.api.info.image_format_properties.3d.linear.bc3_srgb_block
+dEQP-VK.api.info.image_format_properties.3d.linear.bc4_unorm_block
+dEQP-VK.api.info.image_format_properties.3d.linear.bc4_snorm_block
+dEQP-VK.api.info.image_format_properties.3d.linear.bc5_unorm_block
+dEQP-VK.api.info.image_format_properties.3d.linear.bc5_snorm_block
+dEQP-VK.api.info.image_format_properties.3d.linear.bc6h_ufloat_block
+dEQP-VK.api.info.image_format_properties.3d.linear.bc6h_sfloat_block
+dEQP-VK.api.info.image_format_properties.3d.linear.bc7_unorm_block
+dEQP-VK.api.info.image_format_properties.3d.linear.bc7_srgb_block
+dEQP-VK.api.info.image_format_properties.3d.linear.etc2_r8g8b8_unorm_block
+dEQP-VK.api.info.image_format_properties.3d.linear.etc2_r8g8b8_srgb_block
+dEQP-VK.api.info.image_format_properties.3d.linear.etc2_r8g8b8a1_unorm_block
+dEQP-VK.api.info.image_format_properties.3d.linear.etc2_r8g8b8a1_srgb_block
+dEQP-VK.api.info.image_format_properties.3d.linear.etc2_r8g8b8a8_unorm_block
+dEQP-VK.api.info.image_format_properties.3d.linear.etc2_r8g8b8a8_srgb_block
+dEQP-VK.api.info.image_format_properties.3d.linear.eac_r11_unorm_block
+dEQP-VK.api.info.image_format_properties.3d.linear.eac_r11_snorm_block
+dEQP-VK.api.info.image_format_properties.3d.linear.eac_r11g11_unorm_block
+dEQP-VK.api.info.image_format_properties.3d.linear.eac_r11g11_snorm_block
+dEQP-VK.api.info.image_format_properties.3d.linear.astc_4x4_unorm_block
+dEQP-VK.api.info.image_format_properties.3d.linear.astc_4x4_srgb_block
+dEQP-VK.api.info.image_format_properties.3d.linear.astc_5x4_unorm_block
+dEQP-VK.api.info.image_format_properties.3d.linear.astc_5x4_srgb_block
+dEQP-VK.api.info.image_format_properties.3d.linear.astc_5x5_unorm_block
+dEQP-VK.api.info.image_format_properties.3d.linear.astc_5x5_srgb_block
+dEQP-VK.api.info.image_format_properties.3d.linear.astc_6x5_unorm_block
+dEQP-VK.api.info.image_format_properties.3d.linear.astc_6x5_srgb_block
+dEQP-VK.api.info.image_format_properties.3d.linear.astc_6x6_unorm_block
+dEQP-VK.api.info.image_format_properties.3d.linear.astc_6x6_srgb_block
+dEQP-VK.api.info.image_format_properties.3d.linear.astc_8x5_unorm_block
+dEQP-VK.api.info.image_format_properties.3d.linear.astc_8x5_srgb_block
+dEQP-VK.api.info.image_format_properties.3d.linear.astc_8x6_unorm_block
+dEQP-VK.api.info.image_format_properties.3d.linear.astc_8x6_srgb_block
+dEQP-VK.api.info.image_format_properties.3d.linear.astc_8x8_unorm_block
+dEQP-VK.api.info.image_format_properties.3d.linear.astc_8x8_srgb_block
+dEQP-VK.api.info.image_format_properties.3d.linear.astc_10x5_unorm_block
+dEQP-VK.api.info.image_format_properties.3d.linear.astc_10x5_srgb_block
+dEQP-VK.api.info.image_format_properties.3d.linear.astc_10x6_unorm_block
+dEQP-VK.api.info.image_format_properties.3d.linear.astc_10x6_srgb_block
+dEQP-VK.api.info.image_format_properties.3d.linear.astc_10x8_unorm_block
+dEQP-VK.api.info.image_format_properties.3d.linear.astc_10x8_srgb_block
+dEQP-VK.api.info.image_format_properties.3d.linear.astc_10x10_unorm_block
+dEQP-VK.api.info.image_format_properties.3d.linear.astc_10x10_srgb_block
+dEQP-VK.api.info.image_format_properties.3d.linear.astc_12x10_unorm_block
+dEQP-VK.api.info.image_format_properties.3d.linear.astc_12x10_srgb_block
+dEQP-VK.api.info.image_format_properties.3d.linear.astc_12x12_unorm_block
+dEQP-VK.api.info.image_format_properties.3d.linear.astc_12x12_srgb_block
+dEQP-VK.api.info.get_physical_device_properties2.features
+dEQP-VK.api.info.get_physical_device_properties2.properties
+dEQP-VK.api.info.get_physical_device_properties2.format_properties
+dEQP-VK.api.info.get_physical_device_properties2.queue_family_properties
+dEQP-VK.api.info.get_physical_device_properties2.memory_properties
+dEQP-VK.api.info.vulkan1p2.features
+dEQP-VK.api.info.vulkan1p2.properties
+dEQP-VK.api.info.vulkan1p2.feature_extensions_consistency
+dEQP-VK.api.info.vulkan1p2.property_extensions_consistency
+dEQP-VK.api.info.vulkan1p2.feature_bits_influence
+dEQP-VK.api.info.vulkan1p2_limits_validation.general
+dEQP-VK.api.info.vulkan1p2_limits_validation.khr_push_descriptor
+dEQP-VK.api.info.vulkan1p2_limits_validation.khr_multiview
+dEQP-VK.api.info.vulkan1p2_limits_validation.ext_discard_rectangles
+dEQP-VK.api.info.vulkan1p2_limits_validation.ext_sample_locations
+dEQP-VK.api.info.vulkan1p2_limits_validation.ext_external_memory_host
+dEQP-VK.api.info.vulkan1p2_limits_validation.ext_blend_operation_advanced
+dEQP-VK.api.info.vulkan1p2_limits_validation.khr_maintenance_3
+dEQP-VK.api.info.vulkan1p2_limits_validation.ext_conservative_rasterization
+dEQP-VK.api.info.vulkan1p2_limits_validation.ext_descriptor_indexing
+dEQP-VK.api.info.vulkan1p2_limits_validation.ext_inline_uniform_block
+dEQP-VK.api.info.vulkan1p2_limits_validation.ext_vertex_attribute_divisor
+dEQP-VK.api.info.vulkan1p2_limits_validation.nv_mesh_shader
+dEQP-VK.api.info.vulkan1p2_limits_validation.ext_transform_feedback
+dEQP-VK.api.info.vulkan1p2_limits_validation.fragment_density_map
+dEQP-VK.api.info.vulkan1p2_limits_validation.nv_ray_tracing
+dEQP-VK.api.info.vulkan1p2_limits_validation.timeline_semaphore
+dEQP-VK.api.info.vulkan1p2_limits_validation.ext_line_rasterization
+dEQP-VK.api.info.image_format_properties2.1d.optimal.r4g4_unorm_pack8
+dEQP-VK.api.info.image_format_properties2.1d.optimal.r4g4b4a4_unorm_pack16
+dEQP-VK.api.info.image_format_properties2.1d.optimal.b4g4r4a4_unorm_pack16
+dEQP-VK.api.info.image_format_properties2.1d.optimal.r5g6b5_unorm_pack16
+dEQP-VK.api.info.image_format_properties2.1d.linear.astc_5x5_unorm_block
+dEQP-VK.api.info.image_format_properties2.1d.linear.astc_5x5_srgb_block
+dEQP-VK.api.info.image_format_properties2.1d.linear.astc_6x5_unorm_block
+dEQP-VK.api.info.image_format_properties2.1d.linear.astc_6x5_srgb_block
+dEQP-VK.api.info.image_format_properties2.1d.linear.astc_6x6_unorm_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.r64g64b64a64_uint
+dEQP-VK.api.info.image_format_properties2.2d.optimal.r64g64b64a64_sint
+dEQP-VK.api.info.image_format_properties2.2d.optimal.r64g64b64a64_sfloat
+dEQP-VK.api.info.image_format_properties2.2d.optimal.b10g11r11_ufloat_pack32
+dEQP-VK.api.info.image_format_properties2.2d.optimal.e5b9g9r9_ufloat_pack32
+dEQP-VK.api.info.image_format_properties2.2d.optimal.d16_unorm
+dEQP-VK.api.info.image_format_properties2.2d.optimal.x8_d24_unorm_pack32
+dEQP-VK.api.info.image_format_properties2.2d.optimal.d32_sfloat
+dEQP-VK.api.info.image_format_properties2.2d.optimal.s8_uint
+dEQP-VK.api.info.image_format_properties2.2d.optimal.d16_unorm_s8_uint
+dEQP-VK.api.info.image_format_properties2.2d.optimal.d24_unorm_s8_uint
+dEQP-VK.api.info.image_format_properties2.2d.optimal.d32_sfloat_s8_uint
+dEQP-VK.api.info.image_format_properties2.2d.optimal.bc1_rgb_unorm_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.bc1_rgb_srgb_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.bc1_rgba_unorm_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.bc1_rgba_srgb_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.bc2_unorm_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.bc2_srgb_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.bc3_unorm_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.bc3_srgb_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.bc4_unorm_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.bc4_snorm_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.bc5_unorm_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.bc5_snorm_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.bc6h_ufloat_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.bc6h_sfloat_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.bc7_unorm_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.bc7_srgb_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.etc2_r8g8b8_unorm_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.etc2_r8g8b8_srgb_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.etc2_r8g8b8a1_unorm_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.etc2_r8g8b8a1_srgb_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.etc2_r8g8b8a8_unorm_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.etc2_r8g8b8a8_srgb_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.eac_r11_unorm_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.eac_r11_snorm_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.eac_r11g11_unorm_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.eac_r11g11_snorm_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.astc_4x4_unorm_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.astc_4x4_srgb_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.astc_5x4_unorm_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.astc_5x4_srgb_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.astc_5x5_unorm_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.astc_5x5_srgb_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.astc_6x5_unorm_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.astc_6x5_srgb_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.astc_6x6_unorm_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.astc_6x6_srgb_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.astc_8x5_unorm_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.astc_8x5_srgb_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.astc_8x6_unorm_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.astc_8x6_srgb_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.astc_8x8_unorm_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.astc_8x8_srgb_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.astc_10x5_unorm_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.astc_10x5_srgb_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.astc_10x6_unorm_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.astc_10x6_srgb_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.astc_10x8_unorm_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.astc_10x8_srgb_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.astc_10x10_unorm_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.astc_10x10_srgb_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.astc_12x10_unorm_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.astc_12x10_srgb_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.astc_12x12_unorm_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.astc_12x12_srgb_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.g8b8g8r8_422_unorm
+dEQP-VK.api.info.image_format_properties2.2d.optimal.b8g8r8g8_422_unorm
+dEQP-VK.api.info.image_format_properties2.2d.optimal.g8_b8_r8_3plane_420_unorm
+dEQP-VK.api.info.image_format_properties2.2d.optimal.g8_b8r8_2plane_420_unorm
+dEQP-VK.api.info.image_format_properties2.2d.optimal.g8_b8_r8_3plane_422_unorm
+dEQP-VK.api.info.image_format_properties2.2d.optimal.g8_b8r8_2plane_422_unorm
+dEQP-VK.api.info.image_format_properties2.2d.optimal.g8_b8_r8_3plane_444_unorm
+dEQP-VK.api.info.image_format_properties2.2d.optimal.r10x6_unorm_pack16
+dEQP-VK.api.info.image_format_properties2.2d.optimal.r10x6g10x6_unorm_2pack16
+dEQP-VK.api.info.image_format_properties2.2d.optimal.r10x6g10x6b10x6a10x6_unorm_4pack16
+dEQP-VK.api.info.image_format_properties2.2d.optimal.g10x6b10x6g10x6r10x6_422_unorm_4pack16
+dEQP-VK.api.info.image_format_properties2.2d.optimal.b10x6g10x6r10x6g10x6_422_unorm_4pack16
+dEQP-VK.api.info.image_format_properties2.2d.optimal.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16
+dEQP-VK.api.info.image_format_properties2.2d.optimal.g10x6_b10x6r10x6_2plane_420_unorm_3pack16
+dEQP-VK.api.info.image_format_properties2.2d.optimal.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16
+dEQP-VK.api.info.image_format_properties2.2d.optimal.g10x6_b10x6r10x6_2plane_422_unorm_3pack16
+dEQP-VK.api.info.image_format_properties2.2d.optimal.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16
+dEQP-VK.api.info.image_format_properties2.2d.optimal.r12x4_unorm_pack16
+dEQP-VK.api.info.image_format_properties2.2d.optimal.r12x4g12x4_unorm_2pack16
+dEQP-VK.api.info.image_format_properties2.2d.optimal.r12x4g12x4b12x4a12x4_unorm_4pack16
+dEQP-VK.api.info.image_format_properties2.2d.optimal.g12x4b12x4g12x4r12x4_422_unorm_4pack16
+dEQP-VK.api.info.image_format_properties2.2d.optimal.b12x4g12x4r12x4g12x4_422_unorm_4pack16
+dEQP-VK.api.info.image_format_properties2.2d.optimal.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16
+dEQP-VK.api.info.image_format_properties2.2d.optimal.g12x4_b12x4r12x4_2plane_420_unorm_3pack16
+dEQP-VK.api.info.image_format_properties2.2d.optimal.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16
+dEQP-VK.api.info.image_format_properties2.2d.optimal.g12x4_b12x4r12x4_2plane_422_unorm_3pack16
+dEQP-VK.api.info.image_format_properties2.2d.optimal.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16
+dEQP-VK.api.info.image_format_properties2.2d.optimal.g16b16g16r16_422_unorm
+dEQP-VK.api.info.image_format_properties2.2d.optimal.b16g16r16g16_422_unorm
+dEQP-VK.api.info.image_format_properties2.2d.optimal.g16_b16_r16_3plane_420_unorm
+dEQP-VK.api.info.image_format_properties2.2d.optimal.g16_b16r16_2plane_420_unorm
+dEQP-VK.api.info.image_format_properties2.2d.optimal.g16_b16_r16_3plane_422_unorm
+dEQP-VK.api.info.image_format_properties2.2d.optimal.g16_b16r16_2plane_422_unorm
+dEQP-VK.api.info.image_format_properties2.2d.optimal.g16_b16_r16_3plane_444_unorm
+dEQP-VK.api.info.image_format_properties2.2d.linear.r4g4_unorm_pack8
+dEQP-VK.api.info.image_format_properties2.2d.linear.r4g4b4a4_unorm_pack16
+dEQP-VK.api.info.image_format_properties2.2d.linear.b4g4r4a4_unorm_pack16
+dEQP-VK.pipeline.cache.graphics_tests.vertex_stage_fragment_stage
+dEQP-VK.pipeline.cache.graphics_tests.vertex_stage_geometry_stage_fragment_stage
+dEQP-VK.pipeline.cache.graphics_tests.vertex_stage_tessellation_control_stage_tessellation_evaluation_stage_fragment_stage
+dEQP-VK.pipeline.cache.pipeline_from_get_data.vertex_stage_fragment_stage
+dEQP-VK.pipeline.cache.pipeline_from_get_data.vertex_stage_geometry_stage_fragment_stage
+dEQP-VK.pipeline.cache.pipeline_from_get_data.vertex_stage_tessellation_control_stage_tessellation_evaluation_stage_fragment_stage
+dEQP-VK.pipeline.cache.pipeline_from_incomplete_get_data.vertex_stage_fragment_stage
+dEQP-VK.pipeline.cache.pipeline_from_incomplete_get_data.vertex_stage_geometry_stage_fragment_stage
+dEQP-VK.pipeline.cache.pipeline_from_incomplete_get_data.vertex_stage_tessellation_control_stage_tessellation_evaluation_stage_fragment_stage
+dEQP-VK.pipeline.cache.compute_tests.compute_stage
+dEQP-VK.pipeline.cache.merge.vertex_stage_fragment_stage.src_empty_dst_empty
+dEQP-VK.pipeline.cache.merge.vertex_stage_fragment_stage.src_empty_empty_dst_empty
+dEQP-VK.query_pool.statistics_query.compute_shader_invocations.32bits_primary
+dEQP-VK.query_pool.statistics_query.compute_shader_invocations.32bits_secondary
+dEQP-VK.query_pool.statistics_query.compute_shader_invocations.32bits_secondary_inherited
+dEQP-VK.query_pool.statistics_query.compute_shader_invocations.64bits_primary
+dEQP-VK.query_pool.statistics_query.compute_shader_invocations.64bits_secondary
+dEQP-VK.query_pool.statistics_query.compute_shader_invocations.64bits_secondary_inherited
+dEQP-VK.memory.pipeline_barrier.host_read_host_write.8192
+dEQP-VK.memory.pipeline_barrier.host_read_host_write.65536
+dEQP-VK.memory.pipeline_barrier.host_read_host_write.1048576
+dEQP-VK.memory.pipeline_barrier.host_write_transfer_src.1024
+dEQP-VK.api.descriptor_set.descriptor_set_layout_lifetime.graphics
+dEQP-VK.api.descriptor_set.descriptor_set_layout_lifetime.compute
+dEQP-VK.api.descriptor_set.descriptor_set_layout.empty_set.normal
+dEQP-VK.api.descriptor_set.descriptor_set_layout.empty_set.push_descriptor
+dEQP-VK.api.pipeline.renderpass.destroy_pipeline_renderpass
+dEQP-VK.api.pipeline.renderpass.framebuffer_compatible_renderpass
+dEQP-VK.api.pipeline.pipeline_layout.lifetime.graphics
+dEQP-VK.api.pipeline.pipeline_layout.lifetime.compute
+dEQP-VK.api.invariance.random
+dEQP-VK.pipeline.stencil.format.s8_uint.states.fail_keep.pass_keep.dfail_keep.comp_never
+dEQP-VK.pipeline.stencil.format.s8_uint.states.fail_keep.pass_keep.dfail_keep.comp_less
+dEQP-VK.pipeline.stencil.format.s8_uint.states.fail_keep.pass_keep.dfail_keep.comp_equal
+dEQP-VK.spirv_assembly.type.vec4.u16.bitwise_and_vert
+dEQP-VK.spirv_assembly.type.vec4.u16.bitwise_and_tessc
+dEQP-VK.spirv_assembly.type.vec4.u16.bitwise_and_tesse
+dEQP-VK.spirv_assembly.type.vec4.u16.bitwise_and_geom
+dEQP-VK.spirv_assembly.type.vec4.u16.bitwise_and_frag
+dEQP-VK.spirv_assembly.type.vec4.u16.bitwise_and_comp
+dEQP-VK.glsl.derivate.dfdx.texture.basic.float_mediump
+dEQP-VK.glsl.derivate.dfdx.texture.basic.float_highp
+dEQP-VK.glsl.derivate.dfdx.texture.basic.vec2_mediump
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 64af791..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
@@ -220652,7 +220651,6 @@
 dEQP-VK.binding_model.descriptorset_random.sets4.runtimesize.ubolimitlow.sbolimitlow.sampledimglow.lowimgnotex.noiub.nouab.vert.noia.0
 dEQP-VK.binding_model.descriptorset_random.sets4.runtimesize.ubolimitlow.sbolimitlow.sampledimglow.lowimgnotex.noiub.uab.comp.noia.0
 dEQP-VK.binding_model.descriptorset_random.sets4.runtimesize.ubolimitlow.sbolimitlow.sampledimglow.lowimgnotex.noiub.uab.frag.noia.0
-dEQP-VK.binding_model.descriptorset_random.sets4.runtimesize.ubolimitlow.sbolimitlow.sampledimglow.lowimgnotex.noiub.uab.vert.noia.0
 dEQP-VK.binding_model.descriptorset_random.sets4.runtimesize.ubolimitlow.sbolimitlow.sampledimglow.lowimgnotex.iublimitlow.nouab.comp.noia.0
 dEQP-VK.binding_model.descriptorset_random.sets4.runtimesize.ubolimitlow.sbolimitlow.sampledimglow.lowimgnotex.iublimitlow.nouab.frag.noia.0
 dEQP-VK.binding_model.descriptorset_random.sets4.runtimesize.ubolimitlow.sbolimitlow.sampledimglow.lowimgnotex.iublimitlow.nouab.vert.noia.0
@@ -302651,8 +302649,6 @@
 dEQP-VK.draw.zero_viewport_height.front_cw_cull_back
 dEQP-VK.draw.zero_viewport_height.front_cw_cull_both
 dEQP-VK.draw.inverted_depth_ranges.depthclamp_deltazero
-dEQP-VK.draw.inverted_depth_ranges.depthclamp_deltasmall
-dEQP-VK.draw.inverted_depth_ranges.depthclamp_deltaone
 dEQP-VK.draw.inverted_depth_ranges.depthclamp_depth_range_unrestricted
 dEQP-VK.draw.inverted_depth_ranges.nodepthclamp_deltasmall
 dEQP-VK.draw.inverted_depth_ranges.nodepthclamp_deltaone
@@ -314869,230 +314865,230 @@
 dEQP-VK.image.image_size.buffer.readonly_writeonly_12
 dEQP-VK.image.image_size.buffer.readonly_writeonly_1
 dEQP-VK.image.image_size.buffer.readonly_writeonly_7
-dEQP-VK.image.atomic_operations.add.1d.r32ui_end_result
-dEQP-VK.image.atomic_operations.add.1d.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.add.1d.r32i_end_result
-dEQP-VK.image.atomic_operations.add.1d.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.add.1d_array.r32ui_end_result
-dEQP-VK.image.atomic_operations.add.1d_array.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.add.1d_array.r32i_end_result
-dEQP-VK.image.atomic_operations.add.1d_array.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.add.2d.r32ui_end_result
-dEQP-VK.image.atomic_operations.add.2d.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.add.2d.r32i_end_result
-dEQP-VK.image.atomic_operations.add.2d.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.add.2d_array.r32ui_end_result
-dEQP-VK.image.atomic_operations.add.2d_array.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.add.2d_array.r32i_end_result
-dEQP-VK.image.atomic_operations.add.2d_array.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.add.3d.r32ui_end_result
-dEQP-VK.image.atomic_operations.add.3d.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.add.3d.r32i_end_result
-dEQP-VK.image.atomic_operations.add.3d.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.add.cube.r32ui_end_result
-dEQP-VK.image.atomic_operations.add.cube.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.add.cube.r32i_end_result
-dEQP-VK.image.atomic_operations.add.cube.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.add.cube_array.r32ui_end_result
-dEQP-VK.image.atomic_operations.add.cube_array.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.add.cube_array.r32i_end_result
-dEQP-VK.image.atomic_operations.add.cube_array.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.min.1d.r32ui_end_result
-dEQP-VK.image.atomic_operations.min.1d.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.min.1d.r32i_end_result
-dEQP-VK.image.atomic_operations.min.1d.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.min.1d_array.r32ui_end_result
-dEQP-VK.image.atomic_operations.min.1d_array.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.min.1d_array.r32i_end_result
-dEQP-VK.image.atomic_operations.min.1d_array.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.min.2d.r32ui_end_result
-dEQP-VK.image.atomic_operations.min.2d.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.min.2d.r32i_end_result
-dEQP-VK.image.atomic_operations.min.2d.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.min.2d_array.r32ui_end_result
-dEQP-VK.image.atomic_operations.min.2d_array.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.min.2d_array.r32i_end_result
-dEQP-VK.image.atomic_operations.min.2d_array.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.min.3d.r32ui_end_result
-dEQP-VK.image.atomic_operations.min.3d.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.min.3d.r32i_end_result
-dEQP-VK.image.atomic_operations.min.3d.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.min.cube.r32ui_end_result
-dEQP-VK.image.atomic_operations.min.cube.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.min.cube.r32i_end_result
-dEQP-VK.image.atomic_operations.min.cube.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.min.cube_array.r32ui_end_result
-dEQP-VK.image.atomic_operations.min.cube_array.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.min.cube_array.r32i_end_result
-dEQP-VK.image.atomic_operations.min.cube_array.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.max.1d.r32ui_end_result
-dEQP-VK.image.atomic_operations.max.1d.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.max.1d.r32i_end_result
-dEQP-VK.image.atomic_operations.max.1d.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.max.1d_array.r32ui_end_result
-dEQP-VK.image.atomic_operations.max.1d_array.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.max.1d_array.r32i_end_result
-dEQP-VK.image.atomic_operations.max.1d_array.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.max.2d.r32ui_end_result
-dEQP-VK.image.atomic_operations.max.2d.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.max.2d.r32i_end_result
-dEQP-VK.image.atomic_operations.max.2d.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.max.2d_array.r32ui_end_result
-dEQP-VK.image.atomic_operations.max.2d_array.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.max.2d_array.r32i_end_result
-dEQP-VK.image.atomic_operations.max.2d_array.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.max.3d.r32ui_end_result
-dEQP-VK.image.atomic_operations.max.3d.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.max.3d.r32i_end_result
-dEQP-VK.image.atomic_operations.max.3d.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.max.cube.r32ui_end_result
-dEQP-VK.image.atomic_operations.max.cube.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.max.cube.r32i_end_result
-dEQP-VK.image.atomic_operations.max.cube.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.max.cube_array.r32ui_end_result
-dEQP-VK.image.atomic_operations.max.cube_array.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.max.cube_array.r32i_end_result
-dEQP-VK.image.atomic_operations.max.cube_array.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.and.1d.r32ui_end_result
-dEQP-VK.image.atomic_operations.and.1d.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.and.1d.r32i_end_result
-dEQP-VK.image.atomic_operations.and.1d.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.and.1d_array.r32ui_end_result
-dEQP-VK.image.atomic_operations.and.1d_array.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.and.1d_array.r32i_end_result
-dEQP-VK.image.atomic_operations.and.1d_array.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.and.2d.r32ui_end_result
-dEQP-VK.image.atomic_operations.and.2d.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.and.2d.r32i_end_result
-dEQP-VK.image.atomic_operations.and.2d.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.and.2d_array.r32ui_end_result
-dEQP-VK.image.atomic_operations.and.2d_array.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.and.2d_array.r32i_end_result
-dEQP-VK.image.atomic_operations.and.2d_array.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.and.3d.r32ui_end_result
-dEQP-VK.image.atomic_operations.and.3d.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.and.3d.r32i_end_result
-dEQP-VK.image.atomic_operations.and.3d.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.and.cube.r32ui_end_result
-dEQP-VK.image.atomic_operations.and.cube.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.and.cube.r32i_end_result
-dEQP-VK.image.atomic_operations.and.cube.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.and.cube_array.r32ui_end_result
-dEQP-VK.image.atomic_operations.and.cube_array.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.and.cube_array.r32i_end_result
-dEQP-VK.image.atomic_operations.and.cube_array.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.or.1d.r32ui_end_result
-dEQP-VK.image.atomic_operations.or.1d.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.or.1d.r32i_end_result
-dEQP-VK.image.atomic_operations.or.1d.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.or.1d_array.r32ui_end_result
-dEQP-VK.image.atomic_operations.or.1d_array.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.or.1d_array.r32i_end_result
-dEQP-VK.image.atomic_operations.or.1d_array.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.or.2d.r32ui_end_result
-dEQP-VK.image.atomic_operations.or.2d.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.or.2d.r32i_end_result
-dEQP-VK.image.atomic_operations.or.2d.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.or.2d_array.r32ui_end_result
-dEQP-VK.image.atomic_operations.or.2d_array.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.or.2d_array.r32i_end_result
-dEQP-VK.image.atomic_operations.or.2d_array.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.or.3d.r32ui_end_result
-dEQP-VK.image.atomic_operations.or.3d.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.or.3d.r32i_end_result
-dEQP-VK.image.atomic_operations.or.3d.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.or.cube.r32ui_end_result
-dEQP-VK.image.atomic_operations.or.cube.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.or.cube.r32i_end_result
-dEQP-VK.image.atomic_operations.or.cube.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.or.cube_array.r32ui_end_result
-dEQP-VK.image.atomic_operations.or.cube_array.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.or.cube_array.r32i_end_result
-dEQP-VK.image.atomic_operations.or.cube_array.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.xor.1d.r32ui_end_result
-dEQP-VK.image.atomic_operations.xor.1d.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.xor.1d.r32i_end_result
-dEQP-VK.image.atomic_operations.xor.1d.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.xor.1d_array.r32ui_end_result
-dEQP-VK.image.atomic_operations.xor.1d_array.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.xor.1d_array.r32i_end_result
-dEQP-VK.image.atomic_operations.xor.1d_array.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.xor.2d.r32ui_end_result
-dEQP-VK.image.atomic_operations.xor.2d.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.xor.2d.r32i_end_result
-dEQP-VK.image.atomic_operations.xor.2d.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.xor.2d_array.r32ui_end_result
-dEQP-VK.image.atomic_operations.xor.2d_array.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.xor.2d_array.r32i_end_result
-dEQP-VK.image.atomic_operations.xor.2d_array.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.xor.3d.r32ui_end_result
-dEQP-VK.image.atomic_operations.xor.3d.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.xor.3d.r32i_end_result
-dEQP-VK.image.atomic_operations.xor.3d.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.xor.cube.r32ui_end_result
-dEQP-VK.image.atomic_operations.xor.cube.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.xor.cube.r32i_end_result
-dEQP-VK.image.atomic_operations.xor.cube.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.xor.cube_array.r32ui_end_result
-dEQP-VK.image.atomic_operations.xor.cube_array.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.xor.cube_array.r32i_end_result
-dEQP-VK.image.atomic_operations.xor.cube_array.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.exchange.1d.r32ui_end_result
-dEQP-VK.image.atomic_operations.exchange.1d.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.exchange.1d.r32i_end_result
-dEQP-VK.image.atomic_operations.exchange.1d.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.exchange.1d_array.r32ui_end_result
-dEQP-VK.image.atomic_operations.exchange.1d_array.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.exchange.1d_array.r32i_end_result
-dEQP-VK.image.atomic_operations.exchange.1d_array.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.exchange.2d.r32ui_end_result
-dEQP-VK.image.atomic_operations.exchange.2d.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.exchange.2d.r32i_end_result
-dEQP-VK.image.atomic_operations.exchange.2d.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.exchange.2d_array.r32ui_end_result
-dEQP-VK.image.atomic_operations.exchange.2d_array.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.exchange.2d_array.r32i_end_result
-dEQP-VK.image.atomic_operations.exchange.2d_array.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.exchange.3d.r32ui_end_result
-dEQP-VK.image.atomic_operations.exchange.3d.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.exchange.3d.r32i_end_result
-dEQP-VK.image.atomic_operations.exchange.3d.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.exchange.cube.r32ui_end_result
-dEQP-VK.image.atomic_operations.exchange.cube.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.exchange.cube.r32i_end_result
-dEQP-VK.image.atomic_operations.exchange.cube.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.exchange.cube_array.r32ui_end_result
-dEQP-VK.image.atomic_operations.exchange.cube_array.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.exchange.cube_array.r32i_end_result
-dEQP-VK.image.atomic_operations.exchange.cube_array.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.compare_exchange.1d.r32ui_end_result
-dEQP-VK.image.atomic_operations.compare_exchange.1d.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.compare_exchange.1d.r32i_end_result
-dEQP-VK.image.atomic_operations.compare_exchange.1d.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.compare_exchange.1d_array.r32ui_end_result
-dEQP-VK.image.atomic_operations.compare_exchange.1d_array.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.compare_exchange.1d_array.r32i_end_result
-dEQP-VK.image.atomic_operations.compare_exchange.1d_array.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.compare_exchange.2d.r32ui_end_result
-dEQP-VK.image.atomic_operations.compare_exchange.2d.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.compare_exchange.2d.r32i_end_result
-dEQP-VK.image.atomic_operations.compare_exchange.2d.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.compare_exchange.2d_array.r32ui_end_result
-dEQP-VK.image.atomic_operations.compare_exchange.2d_array.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.compare_exchange.2d_array.r32i_end_result
-dEQP-VK.image.atomic_operations.compare_exchange.2d_array.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.compare_exchange.3d.r32ui_end_result
-dEQP-VK.image.atomic_operations.compare_exchange.3d.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.compare_exchange.3d.r32i_end_result
-dEQP-VK.image.atomic_operations.compare_exchange.3d.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.compare_exchange.cube.r32ui_end_result
-dEQP-VK.image.atomic_operations.compare_exchange.cube.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.compare_exchange.cube.r32i_end_result
-dEQP-VK.image.atomic_operations.compare_exchange.cube.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.compare_exchange.cube_array.r32ui_end_result
-dEQP-VK.image.atomic_operations.compare_exchange.cube_array.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.compare_exchange.cube_array.r32i_end_result
-dEQP-VK.image.atomic_operations.compare_exchange.cube_array.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.add.1d.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.add.1d.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.add.1d.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.add.1d.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.add.1d_array.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.add.1d_array.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.add.1d_array.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.add.1d_array.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.add.2d.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.add.2d.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.add.2d.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.add.2d.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.add.2d_array.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.add.2d_array.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.add.2d_array.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.add.2d_array.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.add.3d.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.add.3d.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.add.3d.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.add.3d.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.add.cube.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.add.cube.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.add.cube.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.add.cube.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.add.cube_array.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.add.cube_array.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.add.cube_array.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.add.cube_array.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.min.1d.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.min.1d.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.min.1d.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.min.1d.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.min.1d_array.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.min.1d_array.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.min.1d_array.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.min.1d_array.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.min.2d.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.min.2d.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.min.2d.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.min.2d.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.min.2d_array.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.min.2d_array.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.min.2d_array.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.min.2d_array.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.min.3d.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.min.3d.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.min.3d.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.min.3d.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.min.cube.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.min.cube.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.min.cube.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.min.cube.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.min.cube_array.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.min.cube_array.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.min.cube_array.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.min.cube_array.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.max.1d.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.max.1d.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.max.1d.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.max.1d.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.max.1d_array.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.max.1d_array.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.max.1d_array.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.max.1d_array.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.max.2d.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.max.2d.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.max.2d.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.max.2d.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.max.2d_array.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.max.2d_array.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.max.2d_array.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.max.2d_array.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.max.3d.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.max.3d.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.max.3d.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.max.3d.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.max.cube.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.max.cube.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.max.cube.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.max.cube.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.max.cube_array.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.max.cube_array.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.max.cube_array.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.max.cube_array.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.and.1d.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.and.1d.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.and.1d.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.and.1d.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.and.1d_array.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.and.1d_array.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.and.1d_array.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.and.1d_array.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.and.2d.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.and.2d.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.and.2d.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.and.2d.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.and.2d_array.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.and.2d_array.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.and.2d_array.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.and.2d_array.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.and.3d.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.and.3d.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.and.3d.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.and.3d.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.and.cube.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.and.cube.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.and.cube.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.and.cube.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.and.cube_array.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.and.cube_array.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.and.cube_array.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.and.cube_array.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.or.1d.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.or.1d.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.or.1d.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.or.1d.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.or.1d_array.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.or.1d_array.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.or.1d_array.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.or.1d_array.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.or.2d.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.or.2d.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.or.2d.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.or.2d.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.or.2d_array.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.or.2d_array.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.or.2d_array.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.or.2d_array.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.or.3d.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.or.3d.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.or.3d.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.or.3d.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.or.cube.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.or.cube.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.or.cube.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.or.cube.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.or.cube_array.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.or.cube_array.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.or.cube_array.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.or.cube_array.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.xor.1d.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.xor.1d.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.xor.1d.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.xor.1d.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.xor.1d_array.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.xor.1d_array.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.xor.1d_array.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.xor.1d_array.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.xor.2d.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.xor.2d.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.xor.2d.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.xor.2d.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.xor.2d_array.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.xor.2d_array.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.xor.2d_array.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.xor.2d_array.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.xor.3d.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.xor.3d.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.xor.3d.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.xor.3d.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.xor.cube.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.xor.cube.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.xor.cube.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.xor.cube.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.xor.cube_array.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.xor.cube_array.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.xor.cube_array.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.xor.cube_array.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.1d.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.exchange.1d.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.1d.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.exchange.1d.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.1d_array.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.exchange.1d_array.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.1d_array.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.exchange.1d_array.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.2d.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.exchange.2d.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.2d.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.exchange.2d.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.2d_array.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.exchange.2d_array.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.2d_array.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.exchange.2d_array.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.3d.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.exchange.3d.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.3d.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.exchange.3d.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.cube.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.exchange.cube.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.cube.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.exchange.cube.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.cube_array.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.exchange.cube_array.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.cube_array.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.exchange.cube_array.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.1d.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.1d.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.1d.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.1d.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.1d_array.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.1d_array.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.1d_array.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.1d_array.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.2d.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.2d.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.2d.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.2d.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.2d_array.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.2d_array.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.2d_array.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.2d_array.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.3d.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.3d.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.3d.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.3d.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.cube.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.cube.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.cube.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.cube.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.cube_array.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.cube_array.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.cube_array.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.cube_array.notransfer.normal_read.normal_img.r32i_intermediate_values
 dEQP-VK.image.texel_view_compatible.compute.basic.1d_image.image_load.bc1_rgb_unorm_block.r16g16b16a16_unorm
 dEQP-VK.image.texel_view_compatible.compute.basic.1d_image.image_load.bc1_rgb_unorm_block.r16g16b16a16_snorm
 dEQP-VK.image.texel_view_compatible.compute.basic.1d_image.image_load.bc1_rgb_unorm_block.r16g16b16a16_uscaled
@@ -396054,12 +396050,12 @@
 dEQP-VK.conditional_rendering.draw.condition_secondary_buffer_expect_noop_inverted.draw_indexed_indirect
 dEQP-VK.conditional_rendering.draw.condition_secondary_buffer_expect_noop_inverted.draw_indirect_count
 dEQP-VK.conditional_rendering.draw.condition_secondary_buffer_expect_noop_inverted.draw_indexed_indirect_count
-dEQP-VK.conditional_rendering.draw.no_condition_secondary_buffer_expect_execution.draw
-dEQP-VK.conditional_rendering.draw.no_condition_secondary_buffer_expect_execution.draw_indexed
-dEQP-VK.conditional_rendering.draw.no_condition_secondary_buffer_expect_execution.draw_indirect
-dEQP-VK.conditional_rendering.draw.no_condition_secondary_buffer_expect_execution.draw_indexed_indirect
-dEQP-VK.conditional_rendering.draw.no_condition_secondary_buffer_expect_execution.draw_indirect_count
-dEQP-VK.conditional_rendering.draw.no_condition_secondary_buffer_expect_execution.draw_indexed_indirect_count
+dEQP-VK.conditional_rendering.draw.no_condition_secondary_buffer_inherited_expect_execution.draw
+dEQP-VK.conditional_rendering.draw.no_condition_secondary_buffer_inherited_expect_execution.draw_indexed
+dEQP-VK.conditional_rendering.draw.no_condition_secondary_buffer_inherited_expect_execution.draw_indirect
+dEQP-VK.conditional_rendering.draw.no_condition_secondary_buffer_inherited_expect_execution.draw_indexed_indirect
+dEQP-VK.conditional_rendering.draw.no_condition_secondary_buffer_inherited_expect_execution.draw_indirect_count
+dEQP-VK.conditional_rendering.draw.no_condition_secondary_buffer_inherited_expect_execution.draw_indexed_indirect_count
 dEQP-VK.conditional_rendering.dispatch.condition_expect_execution.dispatch
 dEQP-VK.conditional_rendering.dispatch.condition_expect_execution.dispatch_indirect
 dEQP-VK.conditional_rendering.dispatch.condition_expect_execution.dispatch_base
@@ -396084,9 +396080,9 @@
 dEQP-VK.conditional_rendering.dispatch.condition_secondary_buffer_expect_noop_inverted.dispatch
 dEQP-VK.conditional_rendering.dispatch.condition_secondary_buffer_expect_noop_inverted.dispatch_indirect
 dEQP-VK.conditional_rendering.dispatch.condition_secondary_buffer_expect_noop_inverted.dispatch_base
-dEQP-VK.conditional_rendering.dispatch.no_condition_secondary_buffer_expect_execution.dispatch
-dEQP-VK.conditional_rendering.dispatch.no_condition_secondary_buffer_expect_execution.dispatch_indirect
-dEQP-VK.conditional_rendering.dispatch.no_condition_secondary_buffer_expect_execution.dispatch_base
+dEQP-VK.conditional_rendering.dispatch.no_condition_secondary_buffer_inherited_expect_execution.dispatch
+dEQP-VK.conditional_rendering.dispatch.no_condition_secondary_buffer_inherited_expect_execution.dispatch_indirect
+dEQP-VK.conditional_rendering.dispatch.no_condition_secondary_buffer_inherited_expect_execution.dispatch_base
 dEQP-VK.conditional_rendering.clear_attachments.condition_expect_execution.clear_attachments
 dEQP-VK.conditional_rendering.clear_attachments.condition_expect_noop.clear_attachments
 dEQP-VK.conditional_rendering.clear_attachments.condition_expect_execution_inverted.clear_attachments
@@ -396095,7 +396091,7 @@
 dEQP-VK.conditional_rendering.clear_attachments.condition_secondary_buffer_expect_noop.clear_attachments
 dEQP-VK.conditional_rendering.clear_attachments.condition_secondary_buffer_expect_execution_inverted.clear_attachments
 dEQP-VK.conditional_rendering.clear_attachments.condition_secondary_buffer_expect_noop_inverted.clear_attachments
-dEQP-VK.conditional_rendering.clear_attachments.no_condition_secondary_buffer_expect_execution.clear_attachments
+dEQP-VK.conditional_rendering.clear_attachments.no_condition_secondary_buffer_inherited_expect_execution.clear_attachments
 dEQP-VK.conditional_rendering.draw_clear.clear.color.no_discard_no_invert_full_no_offset
 dEQP-VK.conditional_rendering.draw_clear.clear.color.discard_no_invert_full_no_offset
 dEQP-VK.conditional_rendering.draw_clear.clear.color.no_discard_invert_full_no_offset
diff --git a/android/cts/master/src/vk-master-2020-03-01.txt b/android/cts/master/src/vk-master-2020-03-01.txt
index 4b8566f..85fc215 100644
--- a/android/cts/master/src/vk-master-2020-03-01.txt
+++ b/android/cts/master/src/vk-master-2020-03-01.txt
@@ -77898,7 +77898,7 @@
 dEQP-VK.pipeline.executable_properties.compute.compute_stage_statistics
 dEQP-VK.pipeline.executable_properties.compute.compute_stage_internal_representations
 dEQP-VK.pipeline.executable_properties.compute.compute_stage_statistics_internal_representations
-dEQP-VK.pipeline.vertex_only.position_to_ssbo
+dEQP-VK.pipeline.misc.position_to_ssbo
 dEQP-VK.pipeline.max_varyings.test_vertex_io_between_vertex_fragment
 dEQP-VK.pipeline.max_varyings.test_fragment_io_between_vertex_fragment
 dEQP-VK.pipeline.max_varyings.test_tess_eval_io_between_tess_eval_fragment
@@ -81217,7 +81217,6 @@
 dEQP-VK.binding_model.descriptorset_random.sets4.dynindexed.ubolimitlow.sbolimithigh.sampledimglow.lowimgnotex.iublimitlow.nouab.rgen.noia.0
 dEQP-VK.binding_model.descriptorset_random.sets4.dynindexed.ubolimitlow.sbolimithigh.sampledimglow.lowimgsingletex.noiub.uab.comp.noia.0
 dEQP-VK.binding_model.descriptorset_random.sets4.dynindexed.ubolimitlow.sbolimithigh.sampledimglow.lowimgsingletex.noiub.uab.frag.noia.0
-dEQP-VK.binding_model.descriptorset_random.sets4.dynindexed.ubolimitlow.sbolimithigh.nosampledimg.lowimgsingletex.noiub.uab.frag.ialimitlow.0
 dEQP-VK.binding_model.descriptorset_random.sets4.dynindexed.ubolimitlow.sbolimithigh.nosampledimg.lowimgsingletex.noiub.nouab.frag.ialimitlow.0
 dEQP-VK.binding_model.descriptorset_random.sets4.dynindexed.ubolimitlow.sbolimithigh.sampledimglow.lowimgsingletex.noiub.uab.vert.noia.0
 dEQP-VK.binding_model.descriptorset_random.sets4.dynindexed.ubolimitlow.sbolimithigh.sampledimglow.outimgtexlow.noiub.uab.rgen.noia.0
@@ -81351,11 +81350,9 @@
 dEQP-VK.binding_model.descriptorset_random.sets4.runtimesize.ubolimitlow.sbolimitlow.nosampledimg.outimgtexlow.noiub.nouab.frag.ialimitlow.1
 dEQP-VK.binding_model.descriptorset_random.sets4.runtimesize.ubolimitlow.sbolimitlow.nosampledimg.outimgtexlow.noiub.nouab.frag.ialimitlow.2
 dEQP-VK.binding_model.descriptorset_random.sets4.runtimesize.ubolimitlow.sbolimitlow.nosampledimg.outimgtexlow.noiub.nouab.frag.ialimitlow.3
-dEQP-VK.binding_model.descriptorset_random.sets4.runtimesize.ubolimitlow.sbolimitlow.nosampledimg.outimgtexlow.noiub.nouab.frag.ialimitlow.4
 dEQP-VK.binding_model.descriptorset_random.sets4.runtimesize.ubolimitlow.sbolimitlow.nosampledimg.outimgtexlow.noiub.nouab.frag.ialimitlow.5
 dEQP-VK.binding_model.descriptorset_random.sets4.runtimesize.ubolimitlow.sbolimitlow.nosampledimg.outimgtexlow.noiub.nouab.frag.ialimitlow.6
 dEQP-VK.binding_model.descriptorset_random.sets4.runtimesize.ubolimitlow.sbolimitlow.nosampledimg.outimgtexlow.noiub.nouab.frag.ialimitlow.7
-dEQP-VK.binding_model.descriptorset_random.sets4.runtimesize.ubolimitlow.sbolimitlow.nosampledimg.outimgtexlow.noiub.nouab.frag.ialimitlow.8
 dEQP-VK.binding_model.descriptorset_random.sets4.runtimesize.ubolimitlow.sbolimitlow.nosampledimg.outimgtexlow.noiub.nouab.frag.ialimitlow.9
 dEQP-VK.binding_model.descriptorset_random.sets4.runtimesize.ubolimitlow.sbolimitlow.nosampledimg.outimgtexlow.iublimithigh.nouab.frag.ialimithigh.0
 dEQP-VK.binding_model.descriptorset_random.sets4.runtimesize.ubolimitlow.sbolimitlow.sampledimglow.lowimgnotex.iublimithigh.nouab.rgen.noia.0
@@ -81441,10 +81438,8 @@
 dEQP-VK.binding_model.descriptorset_random.sets4.runtimesize.ubolimitlow.sbolimitlow.nosampledimg.outimgtexlow.iublimitlow.nouab.frag.ialimithigh.0
 dEQP-VK.binding_model.descriptorset_random.sets4.runtimesize.ubolimitlow.sbolimitlow.sampledimglow.lowimgnotex.iublimitlow.nouab.rgen.noia.0
 dEQP-VK.binding_model.descriptorset_random.sets4.runtimesize.ubolimitlow.sbolimitlow.sampledimglow.storageimghigh.noiub.uab.comp.noia.0
-dEQP-VK.binding_model.descriptorset_random.sets4.runtimesize.ubolimitlow.sbolimitlow.sampledimglow.storageimghigh.noiub.uab.frag.noia.0
 dEQP-VK.binding_model.descriptorset_random.sets4.runtimesize.ubolimitlow.sbolimitlow.nosampledimg.storageimghigh.noiub.uab.frag.ialimitlow.0
 dEQP-VK.binding_model.descriptorset_random.sets4.runtimesize.ubolimitlow.sbolimitlow.nosampledimg.lowimgnotex.noiub.uab.frag.ialimithigh.0
-dEQP-VK.binding_model.descriptorset_random.sets4.runtimesize.ubolimitlow.sbolimitlow.sampledimglow.storageimghigh.noiub.uab.vert.noia.0
 dEQP-VK.binding_model.descriptorset_random.sets4.runtimesize.ubolimitlow.sbolimitlow.sampledimglow.outimgtexlow.noiub.uab.rgen.noia.0
 dEQP-VK.binding_model.descriptorset_random.sets4.runtimesize.ubolimitlow.sbolimitlow.nosampledimg.storageimghigh.iublimithigh.nouab.frag.ialimitlow.0
 dEQP-VK.binding_model.descriptorset_random.sets4.runtimesize.ubolimitlow.sbolimitlow.nosampledimg.lowimgnotex.iublimithigh.nouab.frag.ialimithigh.0
@@ -81455,7 +81450,6 @@
 dEQP-VK.binding_model.descriptorset_random.sets4.runtimesize.ubolimitlow.sbolimitlow.nosampledimg.lowimgnotex.iublimitlow.uab.frag.ialimithigh.0
 dEQP-VK.binding_model.descriptorset_random.sets4.runtimesize.ubolimitlow.sbolimitlow.sampledimglow.storageimghigh.iublimitlow.uab.vert.noia.0
 dEQP-VK.binding_model.descriptorset_random.sets4.runtimesize.ubolimitlow.sbolimitlow.sampledimglow.outimgtexlow.iublimitlow.uab.rgen.noia.0
-dEQP-VK.binding_model.descriptorset_random.sets4.runtimesize.ubolimitlow.sbolimitlow.nosampledimg.storageimghigh.noiub.nouab.frag.ialimitlow.0
 dEQP-VK.binding_model.descriptorset_random.sets4.runtimesize.ubolimitlow.sbolimitlow.nosampledimg.lowimgnotex.noiub.nouab.frag.ialimithigh.0
 dEQP-VK.binding_model.descriptorset_random.sets4.runtimesize.ubolimitlow.sbolimitlow.sampledimglow.outimgtexlow.noiub.nouab.rgen.noia.0
 dEQP-VK.binding_model.descriptorset_random.sets4.runtimesize.ubolimitlow.sbolimitlow.sampledimglow.storageimghigh.iublimithigh.uab.comp.noia.0
diff --git a/android/cts/master/src/vk-temp-excluded.txt b/android/cts/master/src/vk-temp-excluded.txt
index 2974117..bf72f10 100644
--- a/android/cts/master/src/vk-temp-excluded.txt
+++ b/android/cts/master/src/vk-temp-excluded.txt
@@ -1 +1,2 @@
 # Tests to be temporarily skipped for Android CI, but still enforced in CTS.
+
diff --git a/android/cts/master/src/vk-test-issues.txt b/android/cts/master/src/vk-test-issues.txt
index e5f64e7..6ea8c91 100644
--- a/android/cts/master/src/vk-test-issues.txt
+++ b/android/cts/master/src/vk-test-issues.txt
@@ -10,3 +10,6 @@
 
 # b/135200048: Compile time is unreasonable on low-end parts, revisit for R
 dEQP-VK.ssbo.layout.random.scalar.75
+
+# b/156595708: Randomly generated shader is unusually large compared to the others.
+dEQP-VK.ssbo.phys.layout.random.16bit.scalar.13
diff --git a/android/cts/master/src/vk-waivers.txt b/android/cts/master/src/vk-waivers.txt
index 8dbf1d4..aa76df6 100644
--- a/android/cts/master/src/vk-waivers.txt
+++ b/android/cts/master/src/vk-waivers.txt
@@ -66,3 +66,48 @@
 # accesses at device scope.
 #
 dEQP-VK.memory_model.*core11*.device.*
+
+#
+# VK-GL-CTS CL: 6171
+# VK-GL-CTS issue: 229
+# VK-GL-CTS issue: 2418
+# VK-GL-CTS issue: 2189
+#
+# IMG Rogue SNORM Waiver.
+#
+dEQP-VK.pipeline.sampler.exact_sampling.b8g8r8_snorm.solid_color.normalized_coords.centered
+dEQP-VK.pipeline.sampler.exact_sampling.b8g8r8_snorm.solid_color.normalized_coords.edge_left
+dEQP-VK.pipeline.sampler.exact_sampling.b8g8r8_snorm.solid_color.normalized_coords.edge_right
+dEQP-VK.pipeline.sampler.exact_sampling.b8g8r8_snorm.solid_color.unnormalized_coords.centered
+dEQP-VK.pipeline.sampler.exact_sampling.b8g8r8_snorm.solid_color.unnormalized_coords.edge_left
+dEQP-VK.pipeline.sampler.exact_sampling.b8g8r8_snorm.solid_color.unnormalized_coords.edge_right
+dEQP-VK.pipeline.sampler.exact_sampling.r8g8b8a8_snorm.solid_color.normalized_coords.centered
+dEQP-VK.pipeline.sampler.exact_sampling.r8g8b8a8_snorm.solid_color.normalized_coords.edge_left
+dEQP-VK.pipeline.sampler.exact_sampling.r8g8b8a8_snorm.solid_color.normalized_coords.edge_right
+dEQP-VK.pipeline.sampler.exact_sampling.r8g8b8a8_snorm.solid_color.unnormalized_coords.centered
+dEQP-VK.pipeline.sampler.exact_sampling.r8g8b8a8_snorm.solid_color.unnormalized_coords.edge_left
+dEQP-VK.pipeline.sampler.exact_sampling.r8g8b8a8_snorm.solid_color.unnormalized_coords.edge_right
+dEQP-VK.pipeline.sampler.exact_sampling.r8_snorm.solid_color.normalized_coords.centered
+dEQP-VK.pipeline.sampler.exact_sampling.r8_snorm.solid_color.normalized_coords.edge_left
+dEQP-VK.pipeline.sampler.exact_sampling.r8_snorm.solid_color.normalized_coords.edge_right
+dEQP-VK.pipeline.sampler.exact_sampling.r8_snorm.solid_color.unnormalized_coords.centered
+dEQP-VK.pipeline.sampler.exact_sampling.r8_snorm.solid_color.unnormalized_coords.edge_left
+dEQP-VK.pipeline.sampler.exact_sampling.r8_snorm.solid_color.unnormalized_coords.edge_right
+dEQP-VK.pipeline.sampler.exact_sampling.r8g8_snorm.solid_color.normalized_coords.centered
+dEQP-VK.pipeline.sampler.exact_sampling.r8g8_snorm.solid_color.normalized_coords.edge_left
+dEQP-VK.pipeline.sampler.exact_sampling.r8g8_snorm.solid_color.normalized_coords.edge_right
+dEQP-VK.pipeline.sampler.exact_sampling.r8g8_snorm.solid_color.unnormalized_coords.centered
+dEQP-VK.pipeline.sampler.exact_sampling.r8g8_snorm.solid_color.unnormalized_coords.edge_left
+dEQP-VK.pipeline.sampler.exact_sampling.r8g8_snorm.solid_color.unnormalized_coords.edge_right
+dEQP-VK.pipeline.sampler.exact_sampling.r16_snorm.solid_color.normalized_coords.centered
+dEQP-VK.pipeline.sampler.exact_sampling.r16_snorm.solid_color.normalized_coords.edge_left
+dEQP-VK.pipeline.sampler.exact_sampling.r16_snorm.solid_color.normalized_coords.edge_right
+dEQP-VK.pipeline.sampler.exact_sampling.r16_snorm.solid_color.unnormalized_coords.centered
+dEQP-VK.pipeline.sampler.exact_sampling.r16_snorm.solid_color.unnormalized_coords.edge_left
+dEQP-VK.pipeline.sampler.exact_sampling.r16_snorm.solid_color.unnormalized_coords.edge_right
+
+#
+# VK-GL-CTS CL: 7061
+# VK-GL-CTS issue: 2804
+#
+dEQP-VK.rasterization.depth_bias.d32_sfloat
diff --git a/android/cts/master/vk-incremental-deqp.txt b/android/cts/master/vk-incremental-deqp.txt
new file mode 100644
index 0000000..ce0b335
--- /dev/null
+++ b/android/cts/master/vk-incremental-deqp.txt
@@ -0,0 +1,353 @@
+dEQP-VK.info.build
+dEQP-VK.info.device
+dEQP-VK.info.platform
+dEQP-VK.info.memory_limits
+dEQP-VK.info.physical_devices
+dEQP-VK.info.physical_device_groups
+dEQP-VK.info.instance_layers
+dEQP-VK.info.instance_extensions
+dEQP-VK.info.device_features
+dEQP-VK.info.device_properties
+dEQP-VK.info.device_queue_family_properties
+dEQP-VK.info.device_memory_properties
+dEQP-VK.info.device_layers
+dEQP-VK.info.device_extensions
+dEQP-VK.info.device_no_khx_extensions
+dEQP-VK.info.device_memory_budget
+dEQP-VK.info.device_mandatory_features
+dEQP-VK.info.device_group_peer_memory_features
+dEQP-VK.api.version_check.version
+dEQP-VK.api.version_check.entry_points
+dEQP-VK.api.driver_properties.driver_id_match
+dEQP-VK.api.driver_properties.name_is_not_empty
+dEQP-VK.api.driver_properties.name_zero_terminated
+dEQP-VK.api.driver_properties.info_zero_terminated
+dEQP-VK.api.smoke.create_sampler
+dEQP-VK.api.smoke.create_shader
+dEQP-VK.api.smoke.triangle
+dEQP-VK.api.smoke.triangle_ext_structs
+dEQP-VK.api.smoke.asm_triangle
+dEQP-VK.api.smoke.asm_triangle_no_opname
+dEQP-VK.api.smoke.unused_resolve_attachment
+dEQP-VK.api.info.format_properties.r4g4_unorm_pack8
+dEQP-VK.api.info.format_properties.r4g4b4a4_unorm_pack16
+dEQP-VK.api.info.format_properties.b4g4r4a4_unorm_pack16
+dEQP-VK.api.info.format_properties.r5g6b5_unorm_pack16
+dEQP-VK.api.info.format_properties.g16b16g16r16_422_unorm
+dEQP-VK.api.info.format_properties.b16g16r16g16_422_unorm
+dEQP-VK.api.info.format_properties.g16_b16_r16_3plane_420_unorm
+dEQP-VK.api.info.image_format_properties.3d.linear.r64_sfloat
+dEQP-VK.api.info.image_format_properties.3d.linear.r64g64_uint
+dEQP-VK.api.info.image_format_properties.3d.linear.r64g64_sint
+dEQP-VK.api.info.image_format_properties.3d.linear.r64g64_sfloat
+dEQP-VK.api.info.image_format_properties.3d.linear.r64g64b64_uint
+dEQP-VK.api.info.image_format_properties.3d.linear.r64g64b64_sint
+dEQP-VK.api.info.image_format_properties.3d.linear.r64g64b64_sfloat
+dEQP-VK.api.info.image_format_properties.3d.linear.r64g64b64a64_uint
+dEQP-VK.api.info.image_format_properties.3d.linear.r64g64b64a64_sint
+dEQP-VK.api.info.image_format_properties.3d.linear.r64g64b64a64_sfloat
+dEQP-VK.api.info.image_format_properties.3d.linear.b10g11r11_ufloat_pack32
+dEQP-VK.api.info.image_format_properties.3d.linear.e5b9g9r9_ufloat_pack32
+dEQP-VK.api.info.image_format_properties.3d.linear.d16_unorm
+dEQP-VK.api.info.image_format_properties.3d.linear.x8_d24_unorm_pack32
+dEQP-VK.api.info.image_format_properties.3d.linear.d32_sfloat
+dEQP-VK.api.info.image_format_properties.3d.linear.s8_uint
+dEQP-VK.api.info.image_format_properties.3d.linear.d16_unorm_s8_uint
+dEQP-VK.api.info.image_format_properties.3d.linear.d24_unorm_s8_uint
+dEQP-VK.api.info.image_format_properties.3d.linear.d32_sfloat_s8_uint
+dEQP-VK.api.info.image_format_properties.3d.linear.bc1_rgb_unorm_block
+dEQP-VK.api.info.image_format_properties.3d.linear.bc1_rgb_srgb_block
+dEQP-VK.api.info.image_format_properties.3d.linear.bc1_rgba_unorm_block
+dEQP-VK.api.info.image_format_properties.3d.linear.bc1_rgba_srgb_block
+dEQP-VK.api.info.image_format_properties.3d.linear.bc2_unorm_block
+dEQP-VK.api.info.image_format_properties.3d.linear.bc2_srgb_block
+dEQP-VK.api.info.image_format_properties.3d.linear.bc3_unorm_block
+dEQP-VK.api.info.image_format_properties.3d.linear.bc3_srgb_block
+dEQP-VK.api.info.image_format_properties.3d.linear.bc4_unorm_block
+dEQP-VK.api.info.image_format_properties.3d.linear.bc4_snorm_block
+dEQP-VK.api.info.image_format_properties.3d.linear.bc5_unorm_block
+dEQP-VK.api.info.image_format_properties.3d.linear.bc5_snorm_block
+dEQP-VK.api.info.image_format_properties.3d.linear.bc6h_ufloat_block
+dEQP-VK.api.info.image_format_properties.3d.linear.bc6h_sfloat_block
+dEQP-VK.api.info.image_format_properties.3d.linear.bc7_unorm_block
+dEQP-VK.api.info.image_format_properties.3d.linear.bc7_srgb_block
+dEQP-VK.api.info.image_format_properties.3d.linear.etc2_r8g8b8_unorm_block
+dEQP-VK.api.info.image_format_properties.3d.linear.etc2_r8g8b8_srgb_block
+dEQP-VK.api.info.image_format_properties.3d.linear.etc2_r8g8b8a1_unorm_block
+dEQP-VK.api.info.image_format_properties.3d.linear.etc2_r8g8b8a1_srgb_block
+dEQP-VK.api.info.image_format_properties.3d.linear.etc2_r8g8b8a8_unorm_block
+dEQP-VK.api.info.image_format_properties.3d.linear.etc2_r8g8b8a8_srgb_block
+dEQP-VK.api.info.image_format_properties.3d.linear.eac_r11_unorm_block
+dEQP-VK.api.info.image_format_properties.3d.linear.eac_r11_snorm_block
+dEQP-VK.api.info.image_format_properties.3d.linear.eac_r11g11_unorm_block
+dEQP-VK.api.info.image_format_properties.3d.linear.eac_r11g11_snorm_block
+dEQP-VK.api.info.image_format_properties.3d.linear.astc_4x4_unorm_block
+dEQP-VK.api.info.image_format_properties.3d.linear.astc_4x4_srgb_block
+dEQP-VK.api.info.image_format_properties.3d.linear.astc_5x4_unorm_block
+dEQP-VK.api.info.image_format_properties.3d.linear.astc_5x4_srgb_block
+dEQP-VK.api.info.image_format_properties.3d.linear.astc_5x5_unorm_block
+dEQP-VK.api.info.image_format_properties.3d.linear.astc_5x5_srgb_block
+dEQP-VK.api.info.image_format_properties.3d.linear.astc_6x5_unorm_block
+dEQP-VK.api.info.image_format_properties.3d.linear.astc_6x5_srgb_block
+dEQP-VK.api.info.image_format_properties.3d.linear.astc_6x6_unorm_block
+dEQP-VK.api.info.image_format_properties.3d.linear.astc_6x6_srgb_block
+dEQP-VK.api.info.image_format_properties.3d.linear.astc_8x5_unorm_block
+dEQP-VK.api.info.image_format_properties.3d.linear.astc_8x5_srgb_block
+dEQP-VK.api.info.image_format_properties.3d.linear.astc_8x6_unorm_block
+dEQP-VK.api.info.image_format_properties.3d.linear.astc_8x6_srgb_block
+dEQP-VK.api.info.image_format_properties.3d.linear.astc_8x8_unorm_block
+dEQP-VK.api.info.image_format_properties.3d.linear.astc_8x8_srgb_block
+dEQP-VK.api.info.image_format_properties.3d.linear.astc_10x5_unorm_block
+dEQP-VK.api.info.image_format_properties.3d.linear.astc_10x5_srgb_block
+dEQP-VK.api.info.image_format_properties.3d.linear.astc_10x6_unorm_block
+dEQP-VK.api.info.image_format_properties.3d.linear.astc_10x6_srgb_block
+dEQP-VK.api.info.image_format_properties.3d.linear.astc_10x8_unorm_block
+dEQP-VK.api.info.image_format_properties.3d.linear.astc_10x8_srgb_block
+dEQP-VK.api.info.image_format_properties.3d.linear.astc_10x10_unorm_block
+dEQP-VK.api.info.image_format_properties.3d.linear.astc_10x10_srgb_block
+dEQP-VK.api.info.image_format_properties.3d.linear.astc_12x10_unorm_block
+dEQP-VK.api.info.image_format_properties.3d.linear.astc_12x10_srgb_block
+dEQP-VK.api.info.image_format_properties.3d.linear.astc_12x12_unorm_block
+dEQP-VK.api.info.image_format_properties.3d.linear.astc_12x12_srgb_block
+dEQP-VK.api.info.get_physical_device_properties2.features
+dEQP-VK.api.info.get_physical_device_properties2.properties
+dEQP-VK.api.info.get_physical_device_properties2.format_properties
+dEQP-VK.api.info.get_physical_device_properties2.queue_family_properties
+dEQP-VK.api.info.get_physical_device_properties2.memory_properties
+dEQP-VK.api.info.vulkan1p2.features
+dEQP-VK.api.info.vulkan1p2.properties
+dEQP-VK.api.info.vulkan1p2.feature_extensions_consistency
+dEQP-VK.api.info.vulkan1p2.property_extensions_consistency
+dEQP-VK.api.info.vulkan1p2.feature_bits_influence
+dEQP-VK.api.info.vulkan1p2_limits_validation.general
+dEQP-VK.api.info.vulkan1p2_limits_validation.khr_push_descriptor
+dEQP-VK.api.info.vulkan1p2_limits_validation.khr_multiview
+dEQP-VK.api.info.vulkan1p2_limits_validation.ext_discard_rectangles
+dEQP-VK.api.info.vulkan1p2_limits_validation.ext_sample_locations
+dEQP-VK.api.info.vulkan1p2_limits_validation.ext_external_memory_host
+dEQP-VK.api.info.vulkan1p2_limits_validation.ext_blend_operation_advanced
+dEQP-VK.api.info.vulkan1p2_limits_validation.khr_maintenance_3
+dEQP-VK.api.info.vulkan1p2_limits_validation.ext_conservative_rasterization
+dEQP-VK.api.info.vulkan1p2_limits_validation.ext_descriptor_indexing
+dEQP-VK.api.info.vulkan1p2_limits_validation.ext_inline_uniform_block
+dEQP-VK.api.info.vulkan1p2_limits_validation.ext_vertex_attribute_divisor
+dEQP-VK.api.info.vulkan1p2_limits_validation.nv_mesh_shader
+dEQP-VK.api.info.vulkan1p2_limits_validation.ext_transform_feedback
+dEQP-VK.api.info.vulkan1p2_limits_validation.fragment_density_map
+dEQP-VK.api.info.vulkan1p2_limits_validation.nv_ray_tracing
+dEQP-VK.api.info.vulkan1p2_limits_validation.timeline_semaphore
+dEQP-VK.api.info.vulkan1p2_limits_validation.ext_line_rasterization
+dEQP-VK.api.info.image_format_properties2.1d.optimal.r4g4_unorm_pack8
+dEQP-VK.api.info.image_format_properties2.1d.optimal.r4g4b4a4_unorm_pack16
+dEQP-VK.api.info.image_format_properties2.1d.optimal.b4g4r4a4_unorm_pack16
+dEQP-VK.api.info.image_format_properties2.1d.optimal.r5g6b5_unorm_pack16
+dEQP-VK.api.info.image_format_properties2.1d.linear.astc_5x5_unorm_block
+dEQP-VK.api.info.image_format_properties2.1d.linear.astc_5x5_srgb_block
+dEQP-VK.api.info.image_format_properties2.1d.linear.astc_6x5_unorm_block
+dEQP-VK.api.info.image_format_properties2.1d.linear.astc_6x5_srgb_block
+dEQP-VK.api.info.image_format_properties2.1d.linear.astc_6x6_unorm_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.r64g64b64a64_uint
+dEQP-VK.api.info.image_format_properties2.2d.optimal.r64g64b64a64_sint
+dEQP-VK.api.info.image_format_properties2.2d.optimal.r64g64b64a64_sfloat
+dEQP-VK.api.info.image_format_properties2.2d.optimal.b10g11r11_ufloat_pack32
+dEQP-VK.api.info.image_format_properties2.2d.optimal.e5b9g9r9_ufloat_pack32
+dEQP-VK.api.info.image_format_properties2.2d.optimal.d16_unorm
+dEQP-VK.api.info.image_format_properties2.2d.optimal.x8_d24_unorm_pack32
+dEQP-VK.api.info.image_format_properties2.2d.optimal.d32_sfloat
+dEQP-VK.api.info.image_format_properties2.2d.optimal.s8_uint
+dEQP-VK.api.info.image_format_properties2.2d.optimal.d16_unorm_s8_uint
+dEQP-VK.api.info.image_format_properties2.2d.optimal.d24_unorm_s8_uint
+dEQP-VK.api.info.image_format_properties2.2d.optimal.d32_sfloat_s8_uint
+dEQP-VK.api.info.image_format_properties2.2d.optimal.bc1_rgb_unorm_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.bc1_rgb_srgb_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.bc1_rgba_unorm_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.bc1_rgba_srgb_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.bc2_unorm_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.bc2_srgb_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.bc3_unorm_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.bc3_srgb_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.bc4_unorm_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.bc4_snorm_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.bc5_unorm_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.bc5_snorm_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.bc6h_ufloat_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.bc6h_sfloat_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.bc7_unorm_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.bc7_srgb_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.etc2_r8g8b8_unorm_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.etc2_r8g8b8_srgb_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.etc2_r8g8b8a1_unorm_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.etc2_r8g8b8a1_srgb_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.etc2_r8g8b8a8_unorm_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.etc2_r8g8b8a8_srgb_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.eac_r11_unorm_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.eac_r11_snorm_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.eac_r11g11_unorm_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.eac_r11g11_snorm_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.astc_4x4_unorm_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.astc_4x4_srgb_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.astc_5x4_unorm_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.astc_5x4_srgb_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.astc_5x5_unorm_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.astc_5x5_srgb_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.astc_6x5_unorm_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.astc_6x5_srgb_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.astc_6x6_unorm_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.astc_6x6_srgb_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.astc_8x5_unorm_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.astc_8x5_srgb_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.astc_8x6_unorm_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.astc_8x6_srgb_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.astc_8x8_unorm_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.astc_8x8_srgb_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.astc_10x5_unorm_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.astc_10x5_srgb_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.astc_10x6_unorm_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.astc_10x6_srgb_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.astc_10x8_unorm_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.astc_10x8_srgb_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.astc_10x10_unorm_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.astc_10x10_srgb_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.astc_12x10_unorm_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.astc_12x10_srgb_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.astc_12x12_unorm_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.astc_12x12_srgb_block
+dEQP-VK.api.info.image_format_properties2.2d.optimal.g8b8g8r8_422_unorm
+dEQP-VK.api.info.image_format_properties2.2d.optimal.b8g8r8g8_422_unorm
+dEQP-VK.api.info.image_format_properties2.2d.optimal.g8_b8_r8_3plane_420_unorm
+dEQP-VK.api.info.image_format_properties2.2d.optimal.g8_b8r8_2plane_420_unorm
+dEQP-VK.api.info.image_format_properties2.2d.optimal.g8_b8_r8_3plane_422_unorm
+dEQP-VK.api.info.image_format_properties2.2d.optimal.g8_b8r8_2plane_422_unorm
+dEQP-VK.api.info.image_format_properties2.2d.optimal.g8_b8_r8_3plane_444_unorm
+dEQP-VK.api.info.image_format_properties2.2d.optimal.r10x6_unorm_pack16
+dEQP-VK.api.info.image_format_properties2.2d.optimal.r10x6g10x6_unorm_2pack16
+dEQP-VK.api.info.image_format_properties2.2d.optimal.r10x6g10x6b10x6a10x6_unorm_4pack16
+dEQP-VK.api.info.image_format_properties2.2d.optimal.g10x6b10x6g10x6r10x6_422_unorm_4pack16
+dEQP-VK.api.info.image_format_properties2.2d.optimal.b10x6g10x6r10x6g10x6_422_unorm_4pack16
+dEQP-VK.api.info.image_format_properties2.2d.optimal.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16
+dEQP-VK.api.info.image_format_properties2.2d.optimal.g10x6_b10x6r10x6_2plane_420_unorm_3pack16
+dEQP-VK.api.info.image_format_properties2.2d.optimal.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16
+dEQP-VK.api.info.image_format_properties2.2d.optimal.g10x6_b10x6r10x6_2plane_422_unorm_3pack16
+dEQP-VK.api.info.image_format_properties2.2d.optimal.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16
+dEQP-VK.api.info.image_format_properties2.2d.optimal.r12x4_unorm_pack16
+dEQP-VK.api.info.image_format_properties2.2d.optimal.r12x4g12x4_unorm_2pack16
+dEQP-VK.api.info.image_format_properties2.2d.optimal.r12x4g12x4b12x4a12x4_unorm_4pack16
+dEQP-VK.api.info.image_format_properties2.2d.optimal.g12x4b12x4g12x4r12x4_422_unorm_4pack16
+dEQP-VK.api.info.image_format_properties2.2d.optimal.b12x4g12x4r12x4g12x4_422_unorm_4pack16
+dEQP-VK.api.info.image_format_properties2.2d.optimal.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16
+dEQP-VK.api.info.image_format_properties2.2d.optimal.g12x4_b12x4r12x4_2plane_420_unorm_3pack16
+dEQP-VK.api.info.image_format_properties2.2d.optimal.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16
+dEQP-VK.api.info.image_format_properties2.2d.optimal.g12x4_b12x4r12x4_2plane_422_unorm_3pack16
+dEQP-VK.api.info.image_format_properties2.2d.optimal.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16
+dEQP-VK.api.info.image_format_properties2.2d.optimal.g16b16g16r16_422_unorm
+dEQP-VK.api.info.image_format_properties2.2d.optimal.b16g16r16g16_422_unorm
+dEQP-VK.api.info.image_format_properties2.2d.optimal.g16_b16_r16_3plane_420_unorm
+dEQP-VK.api.info.image_format_properties2.2d.optimal.g16_b16r16_2plane_420_unorm
+dEQP-VK.api.info.image_format_properties2.2d.optimal.g16_b16_r16_3plane_422_unorm
+dEQP-VK.api.info.image_format_properties2.2d.optimal.g16_b16r16_2plane_422_unorm
+dEQP-VK.api.info.image_format_properties2.2d.optimal.g16_b16_r16_3plane_444_unorm
+dEQP-VK.api.info.image_format_properties2.2d.linear.r4g4_unorm_pack8
+dEQP-VK.api.info.image_format_properties2.2d.linear.r4g4b4a4_unorm_pack16
+dEQP-VK.api.info.image_format_properties2.2d.linear.b4g4r4a4_unorm_pack16
+dEQP-VK.api.descriptor_set.descriptor_set_layout_lifetime.graphics
+dEQP-VK.api.descriptor_set.descriptor_set_layout_lifetime.compute
+dEQP-VK.api.descriptor_set.descriptor_set_layout.empty_set.normal
+dEQP-VK.api.descriptor_set.descriptor_set_layout.empty_set.push_descriptor
+dEQP-VK.api.pipeline.renderpass.destroy_pipeline_renderpass
+dEQP-VK.api.pipeline.renderpass.framebuffer_compatible_renderpass
+dEQP-VK.api.pipeline.pipeline_layout.lifetime.graphics
+dEQP-VK.api.pipeline.pipeline_layout.lifetime.compute
+dEQP-VK.api.invariance.random
+dEQP-VK.memory.pipeline_barrier.host_read_host_write.8192
+dEQP-VK.memory.pipeline_barrier.host_read_host_write.65536
+dEQP-VK.memory.pipeline_barrier.host_read_host_write.1048576
+dEQP-VK.memory.pipeline_barrier.host_write_transfer_src.1024
+dEQP-VK.pipeline.stencil.format.s8_uint.states.fail_keep.pass_keep.dfail_keep.comp_never
+dEQP-VK.pipeline.stencil.format.s8_uint.states.fail_keep.pass_keep.dfail_keep.comp_less
+dEQP-VK.pipeline.stencil.format.s8_uint.states.fail_keep.pass_keep.dfail_keep.comp_equal
+dEQP-VK.pipeline.cache.graphics_tests.vertex_stage_fragment_stage
+dEQP-VK.pipeline.cache.graphics_tests.vertex_stage_geometry_stage_fragment_stage
+dEQP-VK.pipeline.cache.graphics_tests.vertex_stage_tessellation_control_stage_tessellation_evaluation_stage_fragment_stage
+dEQP-VK.pipeline.cache.pipeline_from_get_data.vertex_stage_fragment_stage
+dEQP-VK.pipeline.cache.pipeline_from_get_data.vertex_stage_geometry_stage_fragment_stage
+dEQP-VK.pipeline.cache.pipeline_from_get_data.vertex_stage_tessellation_control_stage_tessellation_evaluation_stage_fragment_stage
+dEQP-VK.pipeline.cache.pipeline_from_incomplete_get_data.vertex_stage_fragment_stage
+dEQP-VK.pipeline.cache.pipeline_from_incomplete_get_data.vertex_stage_geometry_stage_fragment_stage
+dEQP-VK.pipeline.cache.pipeline_from_incomplete_get_data.vertex_stage_tessellation_control_stage_tessellation_evaluation_stage_fragment_stage
+dEQP-VK.pipeline.cache.compute_tests.compute_stage
+dEQP-VK.pipeline.cache.merge.vertex_stage_fragment_stage.src_empty_dst_empty
+dEQP-VK.pipeline.cache.merge.vertex_stage_fragment_stage.src_empty_empty_dst_empty
+dEQP-VK.spirv_assembly.type.vec4.u16.bitwise_and_vert
+dEQP-VK.spirv_assembly.type.vec4.u16.bitwise_and_tessc
+dEQP-VK.spirv_assembly.type.vec4.u16.bitwise_and_tesse
+dEQP-VK.spirv_assembly.type.vec4.u16.bitwise_and_geom
+dEQP-VK.spirv_assembly.type.vec4.u16.bitwise_and_frag
+dEQP-VK.spirv_assembly.type.vec4.u16.bitwise_and_comp
+dEQP-VK.glsl.derivate.dfdx.texture.basic.float_mediump
+dEQP-VK.glsl.derivate.dfdx.texture.basic.float_highp
+dEQP-VK.glsl.derivate.dfdx.texture.basic.vec2_mediump
+dEQP-VK.query_pool.statistics_query.compute_shader_invocations.32bits_primary
+dEQP-VK.query_pool.statistics_query.compute_shader_invocations.32bits_secondary
+dEQP-VK.query_pool.statistics_query.compute_shader_invocations.32bits_secondary_inherited
+dEQP-VK.query_pool.statistics_query.compute_shader_invocations.64bits_primary
+dEQP-VK.query_pool.statistics_query.compute_shader_invocations.64bits_secondary
+dEQP-VK.query_pool.statistics_query.compute_shader_invocations.64bits_secondary_inherited
+dEQP-VK.texture.compressed.etc2_r8g8b8_unorm_block_2d_pot
+dEQP-VK.texture.compressed.eac_r11_unorm_block_2d_pot
+dEQP-VK.texture.compressed.eac_r11g11_unorm_block_2d_pot
+dEQP-VK.texture.compressed.astc_4x4_unorm_block_2d_pot
+dEQP-VK.texture.compressed.astc_5x4_unorm_block_2d_pot
+dEQP-VK.texture.compressed.astc_12x12_unorm_block_2d_pot
+dEQP-VK.texture.compressed.astc_12x12_unorm_block_2d_pot_sparse
+dEQP-VK.texture.compressed.astc_12x12_srgb_block_2d_pot
+dEQP-VK.texture.compressed.astc_12x12_srgb_block_2d_pot_sparse
+dEQP-VK.texture.compressed.bc1_rgb_unorm_block_2d_pot
+dEQP-VK.texture.compressed.bc1_rgb_unorm_block_2d_pot_sparse
+dEQP-VK.texture.compressed.bc1_rgba_srgb_block_2d_pot_sparse
+dEQP-VK.texture.compressed.bc2_unorm_block_2d_pot
+dEQP-VK.texture.compressed.bc2_unorm_block_2d_pot_sparse
+dEQP-VK.texture.compressed.bc2_srgb_block_2d_pot_sparse
+dEQP-VK.texture.compressed.bc3_unorm_block_2d_pot
+dEQP-VK.texture.compressed.bc3_srgb_block_2d_pot_sparse
+dEQP-VK.texture.compressed.bc4_unorm_block_2d_pot
+dEQP-VK.texture.compressed.bc4_unorm_block_2d_pot_sparse
+dEQP-VK.texture.compressed.bc4_snorm_block_2d_pot_sparse
+dEQP-VK.texture.compressed.bc5_unorm_block_2d_pot
+dEQP-VK.texture.compressed.bc5_snorm_block_2d_pot
+dEQP-VK.texture.compressed.bc5_snorm_block_2d_pot_sparse
+dEQP-VK.texture.compressed.bc6h_ufloat_block_2d_pot
+dEQP-VK.texture.compressed.bc6h_sfloat_block_2d_pot_sparse
+dEQP-VK.texture.compressed.bc7_unorm_block_2d_pot
+dEQP-VK.texture.compressed.bc7_unorm_block_2d_pot_sparse
+dEQP-VK.texture.compressed.etc2_r8g8b8_unorm_block_2d_npot
+dEQP-VK.texture.compressed.etc2_r8g8b8_unorm_block_2d_npot_sparse
+dEQP-VK.texture.compressed.etc2_r8g8b8_srgb_block_2d_npot
+dEQP-VK.texture.compressed.etc2_r8g8b8_srgb_block_2d_npot_sparse
+dEQP-VK.texture.compressed.etc2_r8g8b8a1_unorm_block_2d_npot
+dEQP-VK.texture.compressed.etc2_r8g8b8a1_unorm_block_2d_npot_sparse
+dEQP-VK.texture.compressed.eac_r11_unorm_block_2d_npot
+dEQP-VK.texture.compressed.eac_r11_unorm_block_2d_npot_sparse
+dEQP-VK.texture.compressed.eac_r11g11_unorm_block_2d_npot
+dEQP-VK.texture.compressed.eac_r11g11_snorm_block_2d_npot_sparse
+dEQP-VK.texture.compressed.astc_4x4_unorm_block_2d_npot
+dEQP-VK.texture.compressed.astc_4x4_unorm_block_2d_npot_sparse
+dEQP-VK.texture.compressed.astc_12x12_unorm_block_2d_npot
+dEQP-VK.texture.compressed.astc_12x12_unorm_block_2d_npot_sparse
+dEQP-VK.texture.compressed.astc_12x12_srgb_block_2d_npot
+dEQP-VK.texture.compressed.astc_12x12_srgb_block_2d_npot_sparse
+dEQP-VK.texture.compressed.bc1_rgb_unorm_block_2d_npot
+dEQP-VK.texture.compressed.bc1_rgb_unorm_block_2d_npot_sparse
+dEQP-VK.texture.compressed.bc1_rgba_srgb_block_2d_npot_sparse
+dEQP-VK.texture.compressed.bc2_unorm_block_2d_npot
+dEQP-VK.texture.compressed.bc2_unorm_block_2d_npot_sparse
+dEQP-VK.texture.compressed.bc3_unorm_block_2d_npot
+dEQP-VK.texture.compressed.bc3_unorm_block_2d_npot_sparse
+dEQP-VK.texture.compressed.bc3_srgb_block_2d_npot
+dEQP-VK.texture.compressed.bc3_srgb_block_2d_npot_sparse
+dEQP-VK.texture.compressed.bc4_unorm_block_2d_npot
+dEQP-VK.texture.compressed.bc5_unorm_block_2d_npot
+dEQP-VK.texture.compressed.bc5_unorm_block_2d_npot_sparse
+dEQP-VK.texture.compressed.bc5_snorm_block_2d_npot
+dEQP-VK.texture.compressed.bc6h_ufloat_block_2d_npot_sparse
+dEQP-VK.texture.compressed.bc7_unorm_block_2d_npot
+dEQP-VK.texture.compressed.bc7_unorm_block_2d_npot_sparse
diff --git a/android/cts/master/vk-master-2019-03-01.txt b/android/cts/master/vk-master-2019-03-01.txt
index 44b4807..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
@@ -220646,7 +220645,6 @@
 dEQP-VK.binding_model.descriptorset_random.sets4.runtimesize.ubolimitlow.sbolimitlow.sampledimglow.lowimgnotex.noiub.nouab.vert.noia.9
 dEQP-VK.binding_model.descriptorset_random.sets4.runtimesize.ubolimitlow.sbolimitlow.sampledimglow.lowimgnotex.noiub.uab.comp.noia.0
 dEQP-VK.binding_model.descriptorset_random.sets4.runtimesize.ubolimitlow.sbolimitlow.sampledimglow.lowimgnotex.noiub.uab.frag.noia.0
-dEQP-VK.binding_model.descriptorset_random.sets4.runtimesize.ubolimitlow.sbolimitlow.sampledimglow.lowimgnotex.noiub.uab.vert.noia.0
 dEQP-VK.binding_model.descriptorset_random.sets4.runtimesize.ubolimitlow.sbolimitlow.sampledimglow.lowimgnotex.iublimitlow.nouab.comp.noia.0
 dEQP-VK.binding_model.descriptorset_random.sets4.runtimesize.ubolimitlow.sbolimitlow.sampledimglow.lowimgnotex.iublimitlow.nouab.frag.noia.0
 dEQP-VK.binding_model.descriptorset_random.sets4.runtimesize.ubolimitlow.sbolimitlow.sampledimglow.lowimgnotex.iublimitlow.nouab.vert.noia.0
@@ -302651,8 +302649,6 @@
 dEQP-VK.draw.zero_viewport_height.front_cw_cull_back
 dEQP-VK.draw.zero_viewport_height.front_cw_cull_both
 dEQP-VK.draw.inverted_depth_ranges.depthclamp_deltazero
-dEQP-VK.draw.inverted_depth_ranges.depthclamp_deltasmall
-dEQP-VK.draw.inverted_depth_ranges.depthclamp_deltaone
 dEQP-VK.draw.inverted_depth_ranges.depthclamp_depth_range_unrestricted
 dEQP-VK.draw.inverted_depth_ranges.nodepthclamp_deltasmall
 dEQP-VK.draw.inverted_depth_ranges.nodepthclamp_deltaone
@@ -314869,230 +314865,230 @@
 dEQP-VK.image.image_size.buffer.readonly_writeonly_12
 dEQP-VK.image.image_size.buffer.readonly_writeonly_1
 dEQP-VK.image.image_size.buffer.readonly_writeonly_7
-dEQP-VK.image.atomic_operations.add.1d.r32ui_end_result
-dEQP-VK.image.atomic_operations.add.1d.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.add.1d.r32i_end_result
-dEQP-VK.image.atomic_operations.add.1d.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.add.1d_array.r32ui_end_result
-dEQP-VK.image.atomic_operations.add.1d_array.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.add.1d_array.r32i_end_result
-dEQP-VK.image.atomic_operations.add.1d_array.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.add.2d.r32ui_end_result
-dEQP-VK.image.atomic_operations.add.2d.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.add.2d.r32i_end_result
-dEQP-VK.image.atomic_operations.add.2d.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.add.2d_array.r32ui_end_result
-dEQP-VK.image.atomic_operations.add.2d_array.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.add.2d_array.r32i_end_result
-dEQP-VK.image.atomic_operations.add.2d_array.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.add.3d.r32ui_end_result
-dEQP-VK.image.atomic_operations.add.3d.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.add.3d.r32i_end_result
-dEQP-VK.image.atomic_operations.add.3d.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.add.cube.r32ui_end_result
-dEQP-VK.image.atomic_operations.add.cube.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.add.cube.r32i_end_result
-dEQP-VK.image.atomic_operations.add.cube.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.add.cube_array.r32ui_end_result
-dEQP-VK.image.atomic_operations.add.cube_array.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.add.cube_array.r32i_end_result
-dEQP-VK.image.atomic_operations.add.cube_array.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.min.1d.r32ui_end_result
-dEQP-VK.image.atomic_operations.min.1d.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.min.1d.r32i_end_result
-dEQP-VK.image.atomic_operations.min.1d.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.min.1d_array.r32ui_end_result
-dEQP-VK.image.atomic_operations.min.1d_array.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.min.1d_array.r32i_end_result
-dEQP-VK.image.atomic_operations.min.1d_array.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.min.2d.r32ui_end_result
-dEQP-VK.image.atomic_operations.min.2d.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.min.2d.r32i_end_result
-dEQP-VK.image.atomic_operations.min.2d.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.min.2d_array.r32ui_end_result
-dEQP-VK.image.atomic_operations.min.2d_array.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.min.2d_array.r32i_end_result
-dEQP-VK.image.atomic_operations.min.2d_array.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.min.3d.r32ui_end_result
-dEQP-VK.image.atomic_operations.min.3d.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.min.3d.r32i_end_result
-dEQP-VK.image.atomic_operations.min.3d.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.min.cube.r32ui_end_result
-dEQP-VK.image.atomic_operations.min.cube.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.min.cube.r32i_end_result
-dEQP-VK.image.atomic_operations.min.cube.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.min.cube_array.r32ui_end_result
-dEQP-VK.image.atomic_operations.min.cube_array.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.min.cube_array.r32i_end_result
-dEQP-VK.image.atomic_operations.min.cube_array.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.max.1d.r32ui_end_result
-dEQP-VK.image.atomic_operations.max.1d.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.max.1d.r32i_end_result
-dEQP-VK.image.atomic_operations.max.1d.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.max.1d_array.r32ui_end_result
-dEQP-VK.image.atomic_operations.max.1d_array.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.max.1d_array.r32i_end_result
-dEQP-VK.image.atomic_operations.max.1d_array.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.max.2d.r32ui_end_result
-dEQP-VK.image.atomic_operations.max.2d.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.max.2d.r32i_end_result
-dEQP-VK.image.atomic_operations.max.2d.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.max.2d_array.r32ui_end_result
-dEQP-VK.image.atomic_operations.max.2d_array.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.max.2d_array.r32i_end_result
-dEQP-VK.image.atomic_operations.max.2d_array.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.max.3d.r32ui_end_result
-dEQP-VK.image.atomic_operations.max.3d.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.max.3d.r32i_end_result
-dEQP-VK.image.atomic_operations.max.3d.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.max.cube.r32ui_end_result
-dEQP-VK.image.atomic_operations.max.cube.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.max.cube.r32i_end_result
-dEQP-VK.image.atomic_operations.max.cube.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.max.cube_array.r32ui_end_result
-dEQP-VK.image.atomic_operations.max.cube_array.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.max.cube_array.r32i_end_result
-dEQP-VK.image.atomic_operations.max.cube_array.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.and.1d.r32ui_end_result
-dEQP-VK.image.atomic_operations.and.1d.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.and.1d.r32i_end_result
-dEQP-VK.image.atomic_operations.and.1d.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.and.1d_array.r32ui_end_result
-dEQP-VK.image.atomic_operations.and.1d_array.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.and.1d_array.r32i_end_result
-dEQP-VK.image.atomic_operations.and.1d_array.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.and.2d.r32ui_end_result
-dEQP-VK.image.atomic_operations.and.2d.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.and.2d.r32i_end_result
-dEQP-VK.image.atomic_operations.and.2d.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.and.2d_array.r32ui_end_result
-dEQP-VK.image.atomic_operations.and.2d_array.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.and.2d_array.r32i_end_result
-dEQP-VK.image.atomic_operations.and.2d_array.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.and.3d.r32ui_end_result
-dEQP-VK.image.atomic_operations.and.3d.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.and.3d.r32i_end_result
-dEQP-VK.image.atomic_operations.and.3d.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.and.cube.r32ui_end_result
-dEQP-VK.image.atomic_operations.and.cube.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.and.cube.r32i_end_result
-dEQP-VK.image.atomic_operations.and.cube.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.and.cube_array.r32ui_end_result
-dEQP-VK.image.atomic_operations.and.cube_array.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.and.cube_array.r32i_end_result
-dEQP-VK.image.atomic_operations.and.cube_array.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.or.1d.r32ui_end_result
-dEQP-VK.image.atomic_operations.or.1d.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.or.1d.r32i_end_result
-dEQP-VK.image.atomic_operations.or.1d.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.or.1d_array.r32ui_end_result
-dEQP-VK.image.atomic_operations.or.1d_array.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.or.1d_array.r32i_end_result
-dEQP-VK.image.atomic_operations.or.1d_array.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.or.2d.r32ui_end_result
-dEQP-VK.image.atomic_operations.or.2d.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.or.2d.r32i_end_result
-dEQP-VK.image.atomic_operations.or.2d.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.or.2d_array.r32ui_end_result
-dEQP-VK.image.atomic_operations.or.2d_array.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.or.2d_array.r32i_end_result
-dEQP-VK.image.atomic_operations.or.2d_array.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.or.3d.r32ui_end_result
-dEQP-VK.image.atomic_operations.or.3d.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.or.3d.r32i_end_result
-dEQP-VK.image.atomic_operations.or.3d.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.or.cube.r32ui_end_result
-dEQP-VK.image.atomic_operations.or.cube.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.or.cube.r32i_end_result
-dEQP-VK.image.atomic_operations.or.cube.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.or.cube_array.r32ui_end_result
-dEQP-VK.image.atomic_operations.or.cube_array.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.or.cube_array.r32i_end_result
-dEQP-VK.image.atomic_operations.or.cube_array.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.xor.1d.r32ui_end_result
-dEQP-VK.image.atomic_operations.xor.1d.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.xor.1d.r32i_end_result
-dEQP-VK.image.atomic_operations.xor.1d.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.xor.1d_array.r32ui_end_result
-dEQP-VK.image.atomic_operations.xor.1d_array.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.xor.1d_array.r32i_end_result
-dEQP-VK.image.atomic_operations.xor.1d_array.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.xor.2d.r32ui_end_result
-dEQP-VK.image.atomic_operations.xor.2d.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.xor.2d.r32i_end_result
-dEQP-VK.image.atomic_operations.xor.2d.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.xor.2d_array.r32ui_end_result
-dEQP-VK.image.atomic_operations.xor.2d_array.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.xor.2d_array.r32i_end_result
-dEQP-VK.image.atomic_operations.xor.2d_array.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.xor.3d.r32ui_end_result
-dEQP-VK.image.atomic_operations.xor.3d.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.xor.3d.r32i_end_result
-dEQP-VK.image.atomic_operations.xor.3d.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.xor.cube.r32ui_end_result
-dEQP-VK.image.atomic_operations.xor.cube.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.xor.cube.r32i_end_result
-dEQP-VK.image.atomic_operations.xor.cube.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.xor.cube_array.r32ui_end_result
-dEQP-VK.image.atomic_operations.xor.cube_array.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.xor.cube_array.r32i_end_result
-dEQP-VK.image.atomic_operations.xor.cube_array.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.exchange.1d.r32ui_end_result
-dEQP-VK.image.atomic_operations.exchange.1d.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.exchange.1d.r32i_end_result
-dEQP-VK.image.atomic_operations.exchange.1d.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.exchange.1d_array.r32ui_end_result
-dEQP-VK.image.atomic_operations.exchange.1d_array.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.exchange.1d_array.r32i_end_result
-dEQP-VK.image.atomic_operations.exchange.1d_array.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.exchange.2d.r32ui_end_result
-dEQP-VK.image.atomic_operations.exchange.2d.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.exchange.2d.r32i_end_result
-dEQP-VK.image.atomic_operations.exchange.2d.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.exchange.2d_array.r32ui_end_result
-dEQP-VK.image.atomic_operations.exchange.2d_array.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.exchange.2d_array.r32i_end_result
-dEQP-VK.image.atomic_operations.exchange.2d_array.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.exchange.3d.r32ui_end_result
-dEQP-VK.image.atomic_operations.exchange.3d.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.exchange.3d.r32i_end_result
-dEQP-VK.image.atomic_operations.exchange.3d.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.exchange.cube.r32ui_end_result
-dEQP-VK.image.atomic_operations.exchange.cube.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.exchange.cube.r32i_end_result
-dEQP-VK.image.atomic_operations.exchange.cube.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.exchange.cube_array.r32ui_end_result
-dEQP-VK.image.atomic_operations.exchange.cube_array.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.exchange.cube_array.r32i_end_result
-dEQP-VK.image.atomic_operations.exchange.cube_array.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.compare_exchange.1d.r32ui_end_result
-dEQP-VK.image.atomic_operations.compare_exchange.1d.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.compare_exchange.1d.r32i_end_result
-dEQP-VK.image.atomic_operations.compare_exchange.1d.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.compare_exchange.1d_array.r32ui_end_result
-dEQP-VK.image.atomic_operations.compare_exchange.1d_array.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.compare_exchange.1d_array.r32i_end_result
-dEQP-VK.image.atomic_operations.compare_exchange.1d_array.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.compare_exchange.2d.r32ui_end_result
-dEQP-VK.image.atomic_operations.compare_exchange.2d.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.compare_exchange.2d.r32i_end_result
-dEQP-VK.image.atomic_operations.compare_exchange.2d.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.compare_exchange.2d_array.r32ui_end_result
-dEQP-VK.image.atomic_operations.compare_exchange.2d_array.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.compare_exchange.2d_array.r32i_end_result
-dEQP-VK.image.atomic_operations.compare_exchange.2d_array.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.compare_exchange.3d.r32ui_end_result
-dEQP-VK.image.atomic_operations.compare_exchange.3d.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.compare_exchange.3d.r32i_end_result
-dEQP-VK.image.atomic_operations.compare_exchange.3d.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.compare_exchange.cube.r32ui_end_result
-dEQP-VK.image.atomic_operations.compare_exchange.cube.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.compare_exchange.cube.r32i_end_result
-dEQP-VK.image.atomic_operations.compare_exchange.cube.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.compare_exchange.cube_array.r32ui_end_result
-dEQP-VK.image.atomic_operations.compare_exchange.cube_array.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.compare_exchange.cube_array.r32i_end_result
-dEQP-VK.image.atomic_operations.compare_exchange.cube_array.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.add.1d.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.add.1d.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.add.1d.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.add.1d.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.add.1d_array.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.add.1d_array.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.add.1d_array.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.add.1d_array.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.add.2d.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.add.2d.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.add.2d.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.add.2d.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.add.2d_array.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.add.2d_array.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.add.2d_array.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.add.2d_array.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.add.3d.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.add.3d.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.add.3d.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.add.3d.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.add.cube.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.add.cube.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.add.cube.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.add.cube.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.add.cube_array.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.add.cube_array.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.add.cube_array.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.add.cube_array.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.min.1d.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.min.1d.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.min.1d.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.min.1d.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.min.1d_array.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.min.1d_array.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.min.1d_array.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.min.1d_array.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.min.2d.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.min.2d.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.min.2d.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.min.2d.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.min.2d_array.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.min.2d_array.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.min.2d_array.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.min.2d_array.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.min.3d.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.min.3d.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.min.3d.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.min.3d.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.min.cube.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.min.cube.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.min.cube.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.min.cube.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.min.cube_array.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.min.cube_array.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.min.cube_array.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.min.cube_array.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.max.1d.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.max.1d.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.max.1d.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.max.1d.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.max.1d_array.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.max.1d_array.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.max.1d_array.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.max.1d_array.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.max.2d.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.max.2d.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.max.2d.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.max.2d.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.max.2d_array.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.max.2d_array.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.max.2d_array.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.max.2d_array.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.max.3d.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.max.3d.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.max.3d.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.max.3d.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.max.cube.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.max.cube.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.max.cube.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.max.cube.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.max.cube_array.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.max.cube_array.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.max.cube_array.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.max.cube_array.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.and.1d.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.and.1d.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.and.1d.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.and.1d.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.and.1d_array.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.and.1d_array.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.and.1d_array.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.and.1d_array.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.and.2d.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.and.2d.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.and.2d.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.and.2d.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.and.2d_array.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.and.2d_array.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.and.2d_array.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.and.2d_array.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.and.3d.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.and.3d.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.and.3d.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.and.3d.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.and.cube.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.and.cube.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.and.cube.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.and.cube.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.and.cube_array.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.and.cube_array.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.and.cube_array.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.and.cube_array.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.or.1d.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.or.1d.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.or.1d.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.or.1d.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.or.1d_array.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.or.1d_array.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.or.1d_array.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.or.1d_array.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.or.2d.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.or.2d.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.or.2d.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.or.2d.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.or.2d_array.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.or.2d_array.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.or.2d_array.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.or.2d_array.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.or.3d.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.or.3d.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.or.3d.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.or.3d.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.or.cube.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.or.cube.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.or.cube.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.or.cube.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.or.cube_array.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.or.cube_array.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.or.cube_array.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.or.cube_array.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.xor.1d.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.xor.1d.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.xor.1d.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.xor.1d.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.xor.1d_array.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.xor.1d_array.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.xor.1d_array.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.xor.1d_array.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.xor.2d.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.xor.2d.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.xor.2d.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.xor.2d.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.xor.2d_array.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.xor.2d_array.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.xor.2d_array.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.xor.2d_array.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.xor.3d.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.xor.3d.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.xor.3d.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.xor.3d.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.xor.cube.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.xor.cube.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.xor.cube.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.xor.cube.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.xor.cube_array.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.xor.cube_array.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.xor.cube_array.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.xor.cube_array.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.1d.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.exchange.1d.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.1d.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.exchange.1d.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.1d_array.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.exchange.1d_array.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.1d_array.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.exchange.1d_array.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.2d.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.exchange.2d.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.2d.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.exchange.2d.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.2d_array.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.exchange.2d_array.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.2d_array.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.exchange.2d_array.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.3d.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.exchange.3d.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.3d.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.exchange.3d.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.cube.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.exchange.cube.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.cube.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.exchange.cube.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.cube_array.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.exchange.cube_array.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.cube_array.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.exchange.cube_array.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.1d.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.1d.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.1d.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.1d.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.1d_array.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.1d_array.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.1d_array.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.1d_array.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.2d.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.2d.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.2d.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.2d.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.2d_array.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.2d_array.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.2d_array.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.2d_array.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.3d.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.3d.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.3d.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.3d.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.cube.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.cube.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.cube.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.cube.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.cube_array.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.cube_array.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.cube_array.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.cube_array.notransfer.normal_read.normal_img.r32i_intermediate_values
 dEQP-VK.image.texel_view_compatible.compute.basic.1d_image.image_load.bc1_rgb_unorm_block.r16g16b16a16_unorm
 dEQP-VK.image.texel_view_compatible.compute.basic.1d_image.image_load.bc1_rgb_unorm_block.r16g16b16a16_snorm
 dEQP-VK.image.texel_view_compatible.compute.basic.1d_image.image_load.bc1_rgb_unorm_block.r16g16b16a16_uscaled
@@ -396054,12 +396050,12 @@
 dEQP-VK.conditional_rendering.draw.condition_secondary_buffer_expect_noop_inverted.draw_indexed_indirect
 dEQP-VK.conditional_rendering.draw.condition_secondary_buffer_expect_noop_inverted.draw_indirect_count
 dEQP-VK.conditional_rendering.draw.condition_secondary_buffer_expect_noop_inverted.draw_indexed_indirect_count
-dEQP-VK.conditional_rendering.draw.no_condition_secondary_buffer_expect_execution.draw
-dEQP-VK.conditional_rendering.draw.no_condition_secondary_buffer_expect_execution.draw_indexed
-dEQP-VK.conditional_rendering.draw.no_condition_secondary_buffer_expect_execution.draw_indirect
-dEQP-VK.conditional_rendering.draw.no_condition_secondary_buffer_expect_execution.draw_indexed_indirect
-dEQP-VK.conditional_rendering.draw.no_condition_secondary_buffer_expect_execution.draw_indirect_count
-dEQP-VK.conditional_rendering.draw.no_condition_secondary_buffer_expect_execution.draw_indexed_indirect_count
+dEQP-VK.conditional_rendering.draw.no_condition_secondary_buffer_inherited_expect_execution.draw
+dEQP-VK.conditional_rendering.draw.no_condition_secondary_buffer_inherited_expect_execution.draw_indexed
+dEQP-VK.conditional_rendering.draw.no_condition_secondary_buffer_inherited_expect_execution.draw_indirect
+dEQP-VK.conditional_rendering.draw.no_condition_secondary_buffer_inherited_expect_execution.draw_indexed_indirect
+dEQP-VK.conditional_rendering.draw.no_condition_secondary_buffer_inherited_expect_execution.draw_indirect_count
+dEQP-VK.conditional_rendering.draw.no_condition_secondary_buffer_inherited_expect_execution.draw_indexed_indirect_count
 dEQP-VK.conditional_rendering.dispatch.condition_expect_execution.dispatch
 dEQP-VK.conditional_rendering.dispatch.condition_expect_execution.dispatch_indirect
 dEQP-VK.conditional_rendering.dispatch.condition_expect_execution.dispatch_base
@@ -396084,9 +396080,9 @@
 dEQP-VK.conditional_rendering.dispatch.condition_secondary_buffer_expect_noop_inverted.dispatch
 dEQP-VK.conditional_rendering.dispatch.condition_secondary_buffer_expect_noop_inverted.dispatch_indirect
 dEQP-VK.conditional_rendering.dispatch.condition_secondary_buffer_expect_noop_inverted.dispatch_base
-dEQP-VK.conditional_rendering.dispatch.no_condition_secondary_buffer_expect_execution.dispatch
-dEQP-VK.conditional_rendering.dispatch.no_condition_secondary_buffer_expect_execution.dispatch_indirect
-dEQP-VK.conditional_rendering.dispatch.no_condition_secondary_buffer_expect_execution.dispatch_base
+dEQP-VK.conditional_rendering.dispatch.no_condition_secondary_buffer_inherited_expect_execution.dispatch
+dEQP-VK.conditional_rendering.dispatch.no_condition_secondary_buffer_inherited_expect_execution.dispatch_indirect
+dEQP-VK.conditional_rendering.dispatch.no_condition_secondary_buffer_inherited_expect_execution.dispatch_base
 dEQP-VK.conditional_rendering.clear_attachments.condition_expect_execution.clear_attachments
 dEQP-VK.conditional_rendering.clear_attachments.condition_expect_noop.clear_attachments
 dEQP-VK.conditional_rendering.clear_attachments.condition_expect_execution_inverted.clear_attachments
@@ -396095,7 +396091,7 @@
 dEQP-VK.conditional_rendering.clear_attachments.condition_secondary_buffer_expect_noop.clear_attachments
 dEQP-VK.conditional_rendering.clear_attachments.condition_secondary_buffer_expect_execution_inverted.clear_attachments
 dEQP-VK.conditional_rendering.clear_attachments.condition_secondary_buffer_expect_noop_inverted.clear_attachments
-dEQP-VK.conditional_rendering.clear_attachments.no_condition_secondary_buffer_expect_execution.clear_attachments
+dEQP-VK.conditional_rendering.clear_attachments.no_condition_secondary_buffer_inherited_expect_execution.clear_attachments
 dEQP-VK.conditional_rendering.draw_clear.clear.color.no_discard_no_invert_full_no_offset
 dEQP-VK.conditional_rendering.draw_clear.clear.color.discard_no_invert_full_no_offset
 dEQP-VK.conditional_rendering.draw_clear.clear.color.no_discard_invert_full_no_offset
diff --git a/android/cts/master/vk-master-2020-03-01.txt b/android/cts/master/vk-master-2020-03-01.txt
index 22668fe..424a67c 100644
--- a/android/cts/master/vk-master-2020-03-01.txt
+++ b/android/cts/master/vk-master-2020-03-01.txt
@@ -77898,7 +77898,7 @@
 dEQP-VK.pipeline.executable_properties.compute.compute_stage_statistics
 dEQP-VK.pipeline.executable_properties.compute.compute_stage_internal_representations
 dEQP-VK.pipeline.executable_properties.compute.compute_stage_statistics_internal_representations
-dEQP-VK.pipeline.vertex_only.position_to_ssbo
+dEQP-VK.pipeline.misc.position_to_ssbo
 dEQP-VK.pipeline.max_varyings.test_vertex_io_between_vertex_fragment
 dEQP-VK.pipeline.max_varyings.test_fragment_io_between_vertex_fragment
 dEQP-VK.pipeline.max_varyings.test_tess_eval_io_between_tess_eval_fragment
@@ -81198,7 +81198,6 @@
 dEQP-VK.binding_model.descriptorset_random.sets4.dynindexed.ubolimitlow.sbolimithigh.nosampledimg.lowimgnotex.iublimithigh.nouab.frag.ialimitlow.0
 dEQP-VK.binding_model.descriptorset_random.sets4.dynindexed.ubolimitlow.sbolimithigh.nosampledimg.lowimgnotex.iublimithigh.uab.frag.ialimitlow.0
 dEQP-VK.binding_model.descriptorset_random.sets4.dynindexed.ubolimitlow.sbolimithigh.nosampledimg.lowimgsingletex.noiub.nouab.frag.ialimitlow.0
-dEQP-VK.binding_model.descriptorset_random.sets4.dynindexed.ubolimitlow.sbolimithigh.nosampledimg.lowimgsingletex.noiub.uab.frag.ialimitlow.0
 dEQP-VK.binding_model.descriptorset_random.sets4.dynindexed.ubolimitlow.sbolimithigh.nosampledimg.lowimgsingletex.iublimitlow.nouab.frag.ialimitlow.0
 dEQP-VK.binding_model.descriptorset_random.sets4.dynindexed.ubolimitlow.sbolimithigh.nosampledimg.lowimgsingletex.iublimitlow.uab.frag.ialimitlow.0
 dEQP-VK.binding_model.descriptorset_random.sets4.dynindexed.ubolimitlow.sbolimithigh.nosampledimg.lowimgsingletex.iublimithigh.nouab.frag.ialimitlow.0
@@ -81351,11 +81350,9 @@
 dEQP-VK.binding_model.descriptorset_random.sets4.runtimesize.ubolimitlow.sbolimitlow.nosampledimg.outimgtexlow.noiub.nouab.frag.ialimitlow.1
 dEQP-VK.binding_model.descriptorset_random.sets4.runtimesize.ubolimitlow.sbolimitlow.nosampledimg.outimgtexlow.noiub.nouab.frag.ialimitlow.2
 dEQP-VK.binding_model.descriptorset_random.sets4.runtimesize.ubolimitlow.sbolimitlow.nosampledimg.outimgtexlow.noiub.nouab.frag.ialimitlow.3
-dEQP-VK.binding_model.descriptorset_random.sets4.runtimesize.ubolimitlow.sbolimitlow.nosampledimg.outimgtexlow.noiub.nouab.frag.ialimitlow.4
 dEQP-VK.binding_model.descriptorset_random.sets4.runtimesize.ubolimitlow.sbolimitlow.nosampledimg.outimgtexlow.noiub.nouab.frag.ialimitlow.5
 dEQP-VK.binding_model.descriptorset_random.sets4.runtimesize.ubolimitlow.sbolimitlow.nosampledimg.outimgtexlow.noiub.nouab.frag.ialimitlow.6
 dEQP-VK.binding_model.descriptorset_random.sets4.runtimesize.ubolimitlow.sbolimitlow.nosampledimg.outimgtexlow.noiub.nouab.frag.ialimitlow.7
-dEQP-VK.binding_model.descriptorset_random.sets4.runtimesize.ubolimitlow.sbolimitlow.nosampledimg.outimgtexlow.noiub.nouab.frag.ialimitlow.8
 dEQP-VK.binding_model.descriptorset_random.sets4.runtimesize.ubolimitlow.sbolimitlow.nosampledimg.outimgtexlow.noiub.nouab.frag.ialimitlow.9
 dEQP-VK.binding_model.descriptorset_random.sets4.runtimesize.ubolimitlow.sbolimitlow.nosampledimg.outimgtexlow.noiub.nouab.frag.ialimithigh.0
 dEQP-VK.binding_model.descriptorset_random.sets4.runtimesize.ubolimitlow.sbolimitlow.nosampledimg.outimgtexlow.noiub.uab.frag.ialimitlow.0
@@ -81384,7 +81381,6 @@
 dEQP-VK.binding_model.descriptorset_random.sets4.runtimesize.ubolimitlow.sbolimitlow.nosampledimg.lowimgnotex.iublimithigh.uab.frag.ialimitlow.0
 dEQP-VK.binding_model.descriptorset_random.sets4.runtimesize.ubolimitlow.sbolimitlow.nosampledimg.lowimgnotex.iublimithigh.uab.frag.ialimithigh.0
 dEQP-VK.binding_model.descriptorset_random.sets4.runtimesize.ubolimitlow.sbolimitlow.nosampledimg.lowimgsingletex.iublimithigh.uab.frag.ialimithigh.0
-dEQP-VK.binding_model.descriptorset_random.sets4.runtimesize.ubolimitlow.sbolimitlow.nosampledimg.storageimghigh.noiub.nouab.frag.ialimitlow.0
 dEQP-VK.binding_model.descriptorset_random.sets4.runtimesize.ubolimitlow.sbolimitlow.nosampledimg.storageimghigh.noiub.uab.frag.ialimitlow.0
 dEQP-VK.binding_model.descriptorset_random.sets4.runtimesize.ubolimitlow.sbolimitlow.nosampledimg.storageimghigh.iublimitlow.uab.frag.ialimitlow.0
 dEQP-VK.binding_model.descriptorset_random.sets4.runtimesize.ubolimitlow.sbolimitlow.nosampledimg.storageimghigh.iublimithigh.nouab.frag.ialimitlow.0
@@ -81455,8 +81451,6 @@
 dEQP-VK.binding_model.descriptorset_random.sets4.runtimesize.ubolimitlow.sbolimitlow.sampledimglow.lowimgnotex.iublimithigh.nouab.rgen.noia.0
 dEQP-VK.binding_model.descriptorset_random.sets4.runtimesize.ubolimitlow.sbolimitlow.sampledimglow.lowimgnotex.iublimithigh.uab.rgen.noia.0
 dEQP-VK.binding_model.descriptorset_random.sets4.runtimesize.ubolimitlow.sbolimitlow.sampledimglow.storageimghigh.noiub.uab.comp.noia.0
-dEQP-VK.binding_model.descriptorset_random.sets4.runtimesize.ubolimitlow.sbolimitlow.sampledimglow.storageimghigh.noiub.uab.frag.noia.0
-dEQP-VK.binding_model.descriptorset_random.sets4.runtimesize.ubolimitlow.sbolimitlow.sampledimglow.storageimghigh.noiub.uab.vert.noia.0
 dEQP-VK.binding_model.descriptorset_random.sets4.runtimesize.ubolimitlow.sbolimitlow.sampledimglow.storageimghigh.iublimitlow.uab.comp.noia.0
 dEQP-VK.binding_model.descriptorset_random.sets4.runtimesize.ubolimitlow.sbolimitlow.sampledimglow.storageimghigh.iublimitlow.uab.frag.noia.0
 dEQP-VK.binding_model.descriptorset_random.sets4.runtimesize.ubolimitlow.sbolimitlow.sampledimglow.storageimghigh.iublimitlow.uab.vert.noia.0
diff --git a/android/cts/master/vk-master-2021-03-01.txt b/android/cts/master/vk-master-2021-03-01.txt
index 0757880..99f338e 100644
--- a/android/cts/master/vk-master-2021-03-01.txt
+++ b/android/cts/master/vk-master-2021-03-01.txt
@@ -1,3 +1,23 @@
+dEQP-VK.api.info.format_properties.g8_b8r8_2plane_444_unorm_ext
+dEQP-VK.api.info.format_properties.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext
+dEQP-VK.api.info.format_properties.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext
+dEQP-VK.api.info.format_properties.g16_b16r16_2plane_444_unorm_ext
+dEQP-VK.api.info.image_format_properties.2d.optimal.g8_b8r8_2plane_444_unorm_ext
+dEQP-VK.api.info.image_format_properties.2d.optimal.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext
+dEQP-VK.api.info.image_format_properties.2d.optimal.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext
+dEQP-VK.api.info.image_format_properties.2d.optimal.g16_b16r16_2plane_444_unorm_ext
+dEQP-VK.api.info.image_format_properties.2d.linear.g8_b8r8_2plane_444_unorm_ext
+dEQP-VK.api.info.image_format_properties.2d.linear.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext
+dEQP-VK.api.info.image_format_properties.2d.linear.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext
+dEQP-VK.api.info.image_format_properties.2d.linear.g16_b16r16_2plane_444_unorm_ext
+dEQP-VK.api.info.image_format_properties2.2d.optimal.g8_b8r8_2plane_444_unorm_ext
+dEQP-VK.api.info.image_format_properties2.2d.optimal.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext
+dEQP-VK.api.info.image_format_properties2.2d.optimal.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext
+dEQP-VK.api.info.image_format_properties2.2d.optimal.g16_b16r16_2plane_444_unorm_ext
+dEQP-VK.api.info.image_format_properties2.2d.linear.g8_b8r8_2plane_444_unorm_ext
+dEQP-VK.api.info.image_format_properties2.2d.linear.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext
+dEQP-VK.api.info.image_format_properties2.2d.linear.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext
+dEQP-VK.api.info.image_format_properties2.2d.linear.g16_b16r16_2plane_444_unorm_ext
 dEQP-VK.api.device_init.enumerate_devices_alloc_leak
 dEQP-VK.api.device_init.create_device_global_priority
 dEQP-VK.api.object_management.private_data.device_memory_small
@@ -41,6 +61,10 @@
 dEQP-VK.api.object_management.private_data.command_buffer_primary
 dEQP-VK.api.object_management.private_data.command_buffer_secondary
 dEQP-VK.api.buffer.basic.size_max_uint64
+dEQP-VK.api.command_buffers.record_many_draws_primary_1
+dEQP-VK.api.command_buffers.record_many_draws_primary_2
+dEQP-VK.api.command_buffers.record_many_draws_secondary_1
+dEQP-VK.api.command_buffers.record_many_draws_secondary_2
 dEQP-VK.api.command_buffers.render_pass_continue_no_fb
 dEQP-VK.api.command_buffers.bad_inheritance_info_random
 dEQP-VK.api.command_buffers.bad_inheritance_info_random_cont
@@ -51,6 +75,7 @@
 dEQP-VK.api.command_buffers.executable_to_ininitial
 dEQP-VK.api.command_buffers.recording_to_invalid
 dEQP-VK.api.command_buffers.executable_to_invalid
+dEQP-VK.api.copy_and_blit.core.image_to_image.simple_tests.partial_image_npot_diff_format_clear
 dEQP-VK.api.copy_and_blit.core.image_to_image.all_formats.color.1d.r4g4_unorm_pack8.r4g4_unorm_pack8.optimal_optimal
 dEQP-VK.api.copy_and_blit.core.image_to_image.all_formats.color.1d.r4g4_unorm_pack8.r4g4_unorm_pack8.optimal_general
 dEQP-VK.api.copy_and_blit.core.image_to_image.all_formats.color.1d.r4g4_unorm_pack8.r4g4_unorm_pack8.general_optimal
@@ -24540,887 +24565,3971 @@
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.1d.a8b8g8r8_srgb_pack32.a8b8g8r8_srgb_pack32.general_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.1d.a8b8g8r8_srgb_pack32.a8b8g8r8_srgb_pack32.general_general_linear
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_uint.r8_uint.optimal_optimal_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_uint.r8_uint.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_uint.r8_uint.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_uint.r8_uint.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_uint.r8_uint.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_uint.r8_uint.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_uint.r8_uint.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_uint.r8_uint.optimal_general_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_uint.r8_uint.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_uint.r8_uint.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_uint.r8_uint.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_uint.r8_uint.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_uint.r8_uint.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_uint.r8_uint.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_uint.r8_uint.general_optimal_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_uint.r8_uint.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_uint.r8_uint.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_uint.r8_uint.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_uint.r8_uint.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_uint.r8_uint.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_uint.r8_uint.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_uint.r8_uint.general_general_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_uint.r8_uint.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_uint.r8_uint.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_uint.r8_uint.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_uint.r8_uint.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_uint.r8_uint.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_uint.r8_uint.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_uint.r8g8_uint.optimal_optimal_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_uint.r8g8_uint.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_uint.r8g8_uint.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_uint.r8g8_uint.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_uint.r8g8_uint.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_uint.r8g8_uint.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_uint.r8g8_uint.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_uint.r8g8_uint.optimal_general_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_uint.r8g8_uint.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_uint.r8g8_uint.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_uint.r8g8_uint.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_uint.r8g8_uint.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_uint.r8g8_uint.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_uint.r8g8_uint.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_uint.r8g8_uint.general_optimal_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_uint.r8g8_uint.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_uint.r8g8_uint.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_uint.r8g8_uint.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_uint.r8g8_uint.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_uint.r8g8_uint.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_uint.r8g8_uint.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_uint.r8g8_uint.general_general_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_uint.r8g8_uint.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_uint.r8g8_uint.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_uint.r8g8_uint.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_uint.r8g8_uint.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_uint.r8g8_uint.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_uint.r8g8_uint.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_uint.r8g8b8_uint.optimal_optimal_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_uint.r8g8b8_uint.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_uint.r8g8b8_uint.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_uint.r8g8b8_uint.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_uint.r8g8b8_uint.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_uint.r8g8b8_uint.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_uint.r8g8b8_uint.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_uint.r8g8b8_uint.optimal_general_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_uint.r8g8b8_uint.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_uint.r8g8b8_uint.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_uint.r8g8b8_uint.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_uint.r8g8b8_uint.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_uint.r8g8b8_uint.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_uint.r8g8b8_uint.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_uint.r8g8b8_uint.general_optimal_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_uint.r8g8b8_uint.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_uint.r8g8b8_uint.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_uint.r8g8b8_uint.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_uint.r8g8b8_uint.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_uint.r8g8b8_uint.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_uint.r8g8b8_uint.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_uint.r8g8b8_uint.general_general_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_uint.r8g8b8_uint.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_uint.r8g8b8_uint.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_uint.r8g8b8_uint.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_uint.r8g8b8_uint.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_uint.r8g8b8_uint.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_uint.r8g8b8_uint.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_uint.b8g8r8_uint.optimal_optimal_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_uint.b8g8r8_uint.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_uint.b8g8r8_uint.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_uint.b8g8r8_uint.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_uint.b8g8r8_uint.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_uint.b8g8r8_uint.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_uint.b8g8r8_uint.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_uint.b8g8r8_uint.optimal_general_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_uint.b8g8r8_uint.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_uint.b8g8r8_uint.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_uint.b8g8r8_uint.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_uint.b8g8r8_uint.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_uint.b8g8r8_uint.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_uint.b8g8r8_uint.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_uint.b8g8r8_uint.general_optimal_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_uint.b8g8r8_uint.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_uint.b8g8r8_uint.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_uint.b8g8r8_uint.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_uint.b8g8r8_uint.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_uint.b8g8r8_uint.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_uint.b8g8r8_uint.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_uint.b8g8r8_uint.general_general_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_uint.b8g8r8_uint.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_uint.b8g8r8_uint.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_uint.b8g8r8_uint.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_uint.b8g8r8_uint.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_uint.b8g8r8_uint.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_uint.b8g8r8_uint.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_uint.r8g8b8a8_uint.optimal_optimal_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_uint.r8g8b8a8_uint.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_uint.r8g8b8a8_uint.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_uint.r8g8b8a8_uint.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_uint.r8g8b8a8_uint.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_uint.r8g8b8a8_uint.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_uint.r8g8b8a8_uint.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_uint.r8g8b8a8_uint.optimal_general_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_uint.r8g8b8a8_uint.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_uint.r8g8b8a8_uint.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_uint.r8g8b8a8_uint.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_uint.r8g8b8a8_uint.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_uint.r8g8b8a8_uint.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_uint.r8g8b8a8_uint.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_uint.r8g8b8a8_uint.general_optimal_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_uint.r8g8b8a8_uint.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_uint.r8g8b8a8_uint.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_uint.r8g8b8a8_uint.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_uint.r8g8b8a8_uint.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_uint.r8g8b8a8_uint.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_uint.r8g8b8a8_uint.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_uint.r8g8b8a8_uint.general_general_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_uint.r8g8b8a8_uint.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_uint.r8g8b8a8_uint.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_uint.r8g8b8a8_uint.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_uint.r8g8b8a8_uint.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_uint.r8g8b8a8_uint.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_uint.r8g8b8a8_uint.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_uint.b8g8r8a8_uint.optimal_optimal_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_uint.b8g8r8a8_uint.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_uint.b8g8r8a8_uint.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_uint.b8g8r8a8_uint.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_uint.b8g8r8a8_uint.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_uint.b8g8r8a8_uint.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_uint.b8g8r8a8_uint.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_uint.b8g8r8a8_uint.optimal_general_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_uint.b8g8r8a8_uint.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_uint.b8g8r8a8_uint.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_uint.b8g8r8a8_uint.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_uint.b8g8r8a8_uint.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_uint.b8g8r8a8_uint.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_uint.b8g8r8a8_uint.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_uint.b8g8r8a8_uint.general_optimal_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_uint.b8g8r8a8_uint.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_uint.b8g8r8a8_uint.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_uint.b8g8r8a8_uint.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_uint.b8g8r8a8_uint.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_uint.b8g8r8a8_uint.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_uint.b8g8r8a8_uint.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_uint.b8g8r8a8_uint.general_general_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_uint.b8g8r8a8_uint.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_uint.b8g8r8a8_uint.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_uint.b8g8r8a8_uint.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_uint.b8g8r8a8_uint.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_uint.b8g8r8a8_uint.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_uint.b8g8r8a8_uint.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_uint_pack32.a8b8g8r8_uint_pack32.optimal_optimal_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_uint_pack32.a8b8g8r8_uint_pack32.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_uint_pack32.a8b8g8r8_uint_pack32.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_uint_pack32.a8b8g8r8_uint_pack32.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_uint_pack32.a8b8g8r8_uint_pack32.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_uint_pack32.a8b8g8r8_uint_pack32.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_uint_pack32.a8b8g8r8_uint_pack32.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_uint_pack32.a8b8g8r8_uint_pack32.optimal_general_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_uint_pack32.a8b8g8r8_uint_pack32.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_uint_pack32.a8b8g8r8_uint_pack32.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_uint_pack32.a8b8g8r8_uint_pack32.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_uint_pack32.a8b8g8r8_uint_pack32.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_uint_pack32.a8b8g8r8_uint_pack32.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_uint_pack32.a8b8g8r8_uint_pack32.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_uint_pack32.a8b8g8r8_uint_pack32.general_optimal_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_uint_pack32.a8b8g8r8_uint_pack32.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_uint_pack32.a8b8g8r8_uint_pack32.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_uint_pack32.a8b8g8r8_uint_pack32.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_uint_pack32.a8b8g8r8_uint_pack32.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_uint_pack32.a8b8g8r8_uint_pack32.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_uint_pack32.a8b8g8r8_uint_pack32.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_uint_pack32.a8b8g8r8_uint_pack32.general_general_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_uint_pack32.a8b8g8r8_uint_pack32.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_uint_pack32.a8b8g8r8_uint_pack32.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_uint_pack32.a8b8g8r8_uint_pack32.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_uint_pack32.a8b8g8r8_uint_pack32.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_uint_pack32.a8b8g8r8_uint_pack32.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_uint_pack32.a8b8g8r8_uint_pack32.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_uint_pack32.a2r10g10b10_uint_pack32.optimal_optimal_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_uint_pack32.a2r10g10b10_uint_pack32.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_uint_pack32.a2r10g10b10_uint_pack32.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_uint_pack32.a2r10g10b10_uint_pack32.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_uint_pack32.a2r10g10b10_uint_pack32.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_uint_pack32.a2r10g10b10_uint_pack32.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_uint_pack32.a2r10g10b10_uint_pack32.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_uint_pack32.a2r10g10b10_uint_pack32.optimal_general_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_uint_pack32.a2r10g10b10_uint_pack32.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_uint_pack32.a2r10g10b10_uint_pack32.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_uint_pack32.a2r10g10b10_uint_pack32.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_uint_pack32.a2r10g10b10_uint_pack32.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_uint_pack32.a2r10g10b10_uint_pack32.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_uint_pack32.a2r10g10b10_uint_pack32.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_uint_pack32.a2r10g10b10_uint_pack32.general_optimal_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_uint_pack32.a2r10g10b10_uint_pack32.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_uint_pack32.a2r10g10b10_uint_pack32.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_uint_pack32.a2r10g10b10_uint_pack32.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_uint_pack32.a2r10g10b10_uint_pack32.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_uint_pack32.a2r10g10b10_uint_pack32.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_uint_pack32.a2r10g10b10_uint_pack32.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_uint_pack32.a2r10g10b10_uint_pack32.general_general_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_uint_pack32.a2r10g10b10_uint_pack32.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_uint_pack32.a2r10g10b10_uint_pack32.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_uint_pack32.a2r10g10b10_uint_pack32.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_uint_pack32.a2r10g10b10_uint_pack32.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_uint_pack32.a2r10g10b10_uint_pack32.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_uint_pack32.a2r10g10b10_uint_pack32.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_uint_pack32.a2b10g10r10_uint_pack32.optimal_optimal_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_uint_pack32.a2b10g10r10_uint_pack32.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_uint_pack32.a2b10g10r10_uint_pack32.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_uint_pack32.a2b10g10r10_uint_pack32.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_uint_pack32.a2b10g10r10_uint_pack32.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_uint_pack32.a2b10g10r10_uint_pack32.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_uint_pack32.a2b10g10r10_uint_pack32.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_uint_pack32.a2b10g10r10_uint_pack32.optimal_general_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_uint_pack32.a2b10g10r10_uint_pack32.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_uint_pack32.a2b10g10r10_uint_pack32.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_uint_pack32.a2b10g10r10_uint_pack32.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_uint_pack32.a2b10g10r10_uint_pack32.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_uint_pack32.a2b10g10r10_uint_pack32.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_uint_pack32.a2b10g10r10_uint_pack32.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_uint_pack32.a2b10g10r10_uint_pack32.general_optimal_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_uint_pack32.a2b10g10r10_uint_pack32.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_uint_pack32.a2b10g10r10_uint_pack32.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_uint_pack32.a2b10g10r10_uint_pack32.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_uint_pack32.a2b10g10r10_uint_pack32.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_uint_pack32.a2b10g10r10_uint_pack32.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_uint_pack32.a2b10g10r10_uint_pack32.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_uint_pack32.a2b10g10r10_uint_pack32.general_general_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_uint_pack32.a2b10g10r10_uint_pack32.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_uint_pack32.a2b10g10r10_uint_pack32.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_uint_pack32.a2b10g10r10_uint_pack32.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_uint_pack32.a2b10g10r10_uint_pack32.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_uint_pack32.a2b10g10r10_uint_pack32.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_uint_pack32.a2b10g10r10_uint_pack32.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_uint.r16_uint.optimal_optimal_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_uint.r16_uint.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_uint.r16_uint.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_uint.r16_uint.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_uint.r16_uint.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_uint.r16_uint.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_uint.r16_uint.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_uint.r16_uint.optimal_general_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_uint.r16_uint.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_uint.r16_uint.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_uint.r16_uint.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_uint.r16_uint.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_uint.r16_uint.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_uint.r16_uint.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_uint.r16_uint.general_optimal_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_uint.r16_uint.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_uint.r16_uint.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_uint.r16_uint.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_uint.r16_uint.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_uint.r16_uint.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_uint.r16_uint.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_uint.r16_uint.general_general_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_uint.r16_uint.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_uint.r16_uint.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_uint.r16_uint.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_uint.r16_uint.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_uint.r16_uint.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_uint.r16_uint.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_uint.r16g16_uint.optimal_optimal_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_uint.r16g16_uint.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_uint.r16g16_uint.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_uint.r16g16_uint.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_uint.r16g16_uint.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_uint.r16g16_uint.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_uint.r16g16_uint.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_uint.r16g16_uint.optimal_general_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_uint.r16g16_uint.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_uint.r16g16_uint.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_uint.r16g16_uint.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_uint.r16g16_uint.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_uint.r16g16_uint.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_uint.r16g16_uint.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_uint.r16g16_uint.general_optimal_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_uint.r16g16_uint.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_uint.r16g16_uint.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_uint.r16g16_uint.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_uint.r16g16_uint.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_uint.r16g16_uint.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_uint.r16g16_uint.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_uint.r16g16_uint.general_general_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_uint.r16g16_uint.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_uint.r16g16_uint.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_uint.r16g16_uint.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_uint.r16g16_uint.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_uint.r16g16_uint.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_uint.r16g16_uint.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_uint.r16g16b16_uint.optimal_optimal_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_uint.r16g16b16_uint.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_uint.r16g16b16_uint.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_uint.r16g16b16_uint.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_uint.r16g16b16_uint.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_uint.r16g16b16_uint.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_uint.r16g16b16_uint.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_uint.r16g16b16_uint.optimal_general_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_uint.r16g16b16_uint.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_uint.r16g16b16_uint.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_uint.r16g16b16_uint.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_uint.r16g16b16_uint.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_uint.r16g16b16_uint.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_uint.r16g16b16_uint.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_uint.r16g16b16_uint.general_optimal_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_uint.r16g16b16_uint.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_uint.r16g16b16_uint.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_uint.r16g16b16_uint.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_uint.r16g16b16_uint.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_uint.r16g16b16_uint.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_uint.r16g16b16_uint.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_uint.r16g16b16_uint.general_general_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_uint.r16g16b16_uint.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_uint.r16g16b16_uint.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_uint.r16g16b16_uint.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_uint.r16g16b16_uint.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_uint.r16g16b16_uint.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_uint.r16g16b16_uint.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_uint.r16g16b16a16_uint.optimal_optimal_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_uint.r16g16b16a16_uint.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_uint.r16g16b16a16_uint.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_uint.r16g16b16a16_uint.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_uint.r16g16b16a16_uint.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_uint.r16g16b16a16_uint.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_uint.r16g16b16a16_uint.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_uint.r16g16b16a16_uint.optimal_general_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_uint.r16g16b16a16_uint.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_uint.r16g16b16a16_uint.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_uint.r16g16b16a16_uint.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_uint.r16g16b16a16_uint.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_uint.r16g16b16a16_uint.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_uint.r16g16b16a16_uint.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_uint.r16g16b16a16_uint.general_optimal_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_uint.r16g16b16a16_uint.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_uint.r16g16b16a16_uint.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_uint.r16g16b16a16_uint.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_uint.r16g16b16a16_uint.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_uint.r16g16b16a16_uint.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_uint.r16g16b16a16_uint.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_uint.r16g16b16a16_uint.general_general_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_uint.r16g16b16a16_uint.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_uint.r16g16b16a16_uint.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_uint.r16g16b16a16_uint.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_uint.r16g16b16a16_uint.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_uint.r16g16b16a16_uint.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_uint.r16g16b16a16_uint.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_uint.r32_uint.optimal_optimal_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_uint.r32_uint.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_uint.r32_uint.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_uint.r32_uint.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_uint.r32_uint.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_uint.r32_uint.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_uint.r32_uint.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_uint.r32_uint.optimal_general_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_uint.r32_uint.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_uint.r32_uint.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_uint.r32_uint.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_uint.r32_uint.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_uint.r32_uint.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_uint.r32_uint.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_uint.r32_uint.general_optimal_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_uint.r32_uint.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_uint.r32_uint.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_uint.r32_uint.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_uint.r32_uint.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_uint.r32_uint.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_uint.r32_uint.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_uint.r32_uint.general_general_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_uint.r32_uint.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_uint.r32_uint.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_uint.r32_uint.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_uint.r32_uint.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_uint.r32_uint.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_uint.r32_uint.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32_uint.r32g32_uint.optimal_optimal_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32_uint.r32g32_uint.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32_uint.r32g32_uint.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32_uint.r32g32_uint.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32_uint.r32g32_uint.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32_uint.r32g32_uint.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32_uint.r32g32_uint.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32_uint.r32g32_uint.optimal_general_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32_uint.r32g32_uint.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32_uint.r32g32_uint.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32_uint.r32g32_uint.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32_uint.r32g32_uint.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32_uint.r32g32_uint.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32_uint.r32g32_uint.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32_uint.r32g32_uint.general_optimal_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32_uint.r32g32_uint.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32_uint.r32g32_uint.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32_uint.r32g32_uint.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32_uint.r32g32_uint.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32_uint.r32g32_uint.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32_uint.r32g32_uint.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32_uint.r32g32_uint.general_general_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32_uint.r32g32_uint.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32_uint.r32g32_uint.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32_uint.r32g32_uint.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32_uint.r32g32_uint.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32_uint.r32g32_uint.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32_uint.r32g32_uint.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_uint.r32g32b32_uint.optimal_optimal_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_uint.r32g32b32_uint.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_uint.r32g32b32_uint.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_uint.r32g32b32_uint.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_uint.r32g32b32_uint.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_uint.r32g32b32_uint.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_uint.r32g32b32_uint.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_uint.r32g32b32_uint.optimal_general_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_uint.r32g32b32_uint.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_uint.r32g32b32_uint.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_uint.r32g32b32_uint.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_uint.r32g32b32_uint.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_uint.r32g32b32_uint.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_uint.r32g32b32_uint.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_uint.r32g32b32_uint.optimal_linear_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_uint.r32g32b32_uint.optimal_linear_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_uint.r32g32b32_uint.optimal_linear_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_uint.r32g32b32_uint.optimal_linear_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_uint.r32g32b32_uint.optimal_linear_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_uint.r32g32b32_uint.optimal_linear_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_uint.r32g32b32_uint.optimal_linear_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_uint.r32g32b32_uint.general_optimal_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_uint.r32g32b32_uint.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_uint.r32g32b32_uint.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_uint.r32g32b32_uint.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_uint.r32g32b32_uint.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_uint.r32g32b32_uint.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_uint.r32g32b32_uint.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_uint.r32g32b32_uint.general_general_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_uint.r32g32b32_uint.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_uint.r32g32b32_uint.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_uint.r32g32b32_uint.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_uint.r32g32b32_uint.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_uint.r32g32b32_uint.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_uint.r32g32b32_uint.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_uint.r32g32b32_uint.general_linear_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_uint.r32g32b32_uint.general_linear_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_uint.r32g32b32_uint.general_linear_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_uint.r32g32b32_uint.general_linear_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_uint.r32g32b32_uint.general_linear_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_uint.r32g32b32_uint.general_linear_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_uint.r32g32b32_uint.general_linear_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_uint.r32g32b32_uint.linear_optimal_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_uint.r32g32b32_uint.linear_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_uint.r32g32b32_uint.linear_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_uint.r32g32b32_uint.linear_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_uint.r32g32b32_uint.linear_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_uint.r32g32b32_uint.linear_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_uint.r32g32b32_uint.linear_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_uint.r32g32b32_uint.linear_general_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_uint.r32g32b32_uint.linear_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_uint.r32g32b32_uint.linear_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_uint.r32g32b32_uint.linear_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_uint.r32g32b32_uint.linear_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_uint.r32g32b32_uint.linear_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_uint.r32g32b32_uint.linear_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_uint.r32g32b32_uint.linear_linear_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_uint.r32g32b32_uint.linear_linear_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_uint.r32g32b32_uint.linear_linear_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_uint.r32g32b32_uint.linear_linear_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_uint.r32g32b32_uint.linear_linear_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_uint.r32g32b32_uint.linear_linear_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_uint.r32g32b32_uint.linear_linear_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_uint.r32g32b32a32_uint.optimal_optimal_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_uint.r32g32b32a32_uint.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_uint.r32g32b32a32_uint.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_uint.r32g32b32a32_uint.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_uint.r32g32b32a32_uint.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_uint.r32g32b32a32_uint.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_uint.r32g32b32a32_uint.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_uint.r32g32b32a32_uint.optimal_general_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_uint.r32g32b32a32_uint.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_uint.r32g32b32a32_uint.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_uint.r32g32b32a32_uint.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_uint.r32g32b32a32_uint.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_uint.r32g32b32a32_uint.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_uint.r32g32b32a32_uint.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_uint.r32g32b32a32_uint.optimal_linear_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_uint.r32g32b32a32_uint.optimal_linear_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_uint.r32g32b32a32_uint.optimal_linear_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_uint.r32g32b32a32_uint.optimal_linear_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_uint.r32g32b32a32_uint.optimal_linear_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_uint.r32g32b32a32_uint.optimal_linear_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_uint.r32g32b32a32_uint.optimal_linear_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_uint.r32g32b32a32_uint.general_optimal_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_uint.r32g32b32a32_uint.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_uint.r32g32b32a32_uint.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_uint.r32g32b32a32_uint.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_uint.r32g32b32a32_uint.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_uint.r32g32b32a32_uint.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_uint.r32g32b32a32_uint.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_uint.r32g32b32a32_uint.general_general_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_uint.r32g32b32a32_uint.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_uint.r32g32b32a32_uint.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_uint.r32g32b32a32_uint.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_uint.r32g32b32a32_uint.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_uint.r32g32b32a32_uint.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_uint.r32g32b32a32_uint.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_uint.r32g32b32a32_uint.general_linear_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_uint.r32g32b32a32_uint.general_linear_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_uint.r32g32b32a32_uint.general_linear_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_uint.r32g32b32a32_uint.general_linear_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_uint.r32g32b32a32_uint.general_linear_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_uint.r32g32b32a32_uint.general_linear_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_uint.r32g32b32a32_uint.general_linear_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_uint.r32g32b32a32_uint.linear_optimal_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_uint.r32g32b32a32_uint.linear_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_uint.r32g32b32a32_uint.linear_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_uint.r32g32b32a32_uint.linear_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_uint.r32g32b32a32_uint.linear_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_uint.r32g32b32a32_uint.linear_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_uint.r32g32b32a32_uint.linear_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_uint.r32g32b32a32_uint.linear_general_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_uint.r32g32b32a32_uint.linear_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_uint.r32g32b32a32_uint.linear_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_uint.r32g32b32a32_uint.linear_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_uint.r32g32b32a32_uint.linear_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_uint.r32g32b32a32_uint.linear_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_uint.r32g32b32a32_uint.linear_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_uint.r32g32b32a32_uint.linear_linear_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_uint.r32g32b32a32_uint.linear_linear_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_uint.r32g32b32a32_uint.linear_linear_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_uint.r32g32b32a32_uint.linear_linear_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_uint.r32g32b32a32_uint.linear_linear_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_uint.r32g32b32a32_uint.linear_linear_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_uint.r32g32b32a32_uint.linear_linear_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_sint.r8_sint.optimal_optimal_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_sint.r8_sint.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_sint.r8_sint.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_sint.r8_sint.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_sint.r8_sint.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_sint.r8_sint.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_sint.r8_sint.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_sint.r8_sint.optimal_general_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_sint.r8_sint.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_sint.r8_sint.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_sint.r8_sint.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_sint.r8_sint.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_sint.r8_sint.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_sint.r8_sint.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_sint.r8_sint.general_optimal_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_sint.r8_sint.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_sint.r8_sint.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_sint.r8_sint.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_sint.r8_sint.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_sint.r8_sint.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_sint.r8_sint.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_sint.r8_sint.general_general_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_sint.r8_sint.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_sint.r8_sint.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_sint.r8_sint.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_sint.r8_sint.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_sint.r8_sint.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_sint.r8_sint.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_sint.r8g8_sint.optimal_optimal_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_sint.r8g8_sint.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_sint.r8g8_sint.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_sint.r8g8_sint.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_sint.r8g8_sint.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_sint.r8g8_sint.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_sint.r8g8_sint.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_sint.r8g8_sint.optimal_general_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_sint.r8g8_sint.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_sint.r8g8_sint.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_sint.r8g8_sint.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_sint.r8g8_sint.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_sint.r8g8_sint.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_sint.r8g8_sint.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_sint.r8g8_sint.general_optimal_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_sint.r8g8_sint.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_sint.r8g8_sint.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_sint.r8g8_sint.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_sint.r8g8_sint.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_sint.r8g8_sint.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_sint.r8g8_sint.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_sint.r8g8_sint.general_general_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_sint.r8g8_sint.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_sint.r8g8_sint.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_sint.r8g8_sint.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_sint.r8g8_sint.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_sint.r8g8_sint.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_sint.r8g8_sint.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_sint.r8g8b8_sint.optimal_optimal_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_sint.r8g8b8_sint.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_sint.r8g8b8_sint.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_sint.r8g8b8_sint.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_sint.r8g8b8_sint.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_sint.r8g8b8_sint.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_sint.r8g8b8_sint.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_sint.r8g8b8_sint.optimal_general_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_sint.r8g8b8_sint.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_sint.r8g8b8_sint.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_sint.r8g8b8_sint.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_sint.r8g8b8_sint.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_sint.r8g8b8_sint.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_sint.r8g8b8_sint.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_sint.r8g8b8_sint.general_optimal_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_sint.r8g8b8_sint.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_sint.r8g8b8_sint.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_sint.r8g8b8_sint.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_sint.r8g8b8_sint.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_sint.r8g8b8_sint.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_sint.r8g8b8_sint.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_sint.r8g8b8_sint.general_general_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_sint.r8g8b8_sint.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_sint.r8g8b8_sint.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_sint.r8g8b8_sint.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_sint.r8g8b8_sint.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_sint.r8g8b8_sint.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_sint.r8g8b8_sint.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_sint.b8g8r8_sint.optimal_optimal_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_sint.b8g8r8_sint.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_sint.b8g8r8_sint.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_sint.b8g8r8_sint.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_sint.b8g8r8_sint.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_sint.b8g8r8_sint.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_sint.b8g8r8_sint.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_sint.b8g8r8_sint.optimal_general_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_sint.b8g8r8_sint.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_sint.b8g8r8_sint.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_sint.b8g8r8_sint.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_sint.b8g8r8_sint.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_sint.b8g8r8_sint.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_sint.b8g8r8_sint.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_sint.b8g8r8_sint.general_optimal_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_sint.b8g8r8_sint.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_sint.b8g8r8_sint.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_sint.b8g8r8_sint.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_sint.b8g8r8_sint.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_sint.b8g8r8_sint.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_sint.b8g8r8_sint.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_sint.b8g8r8_sint.general_general_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_sint.b8g8r8_sint.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_sint.b8g8r8_sint.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_sint.b8g8r8_sint.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_sint.b8g8r8_sint.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_sint.b8g8r8_sint.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_sint.b8g8r8_sint.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_sint.r8g8b8a8_sint.optimal_optimal_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_sint.r8g8b8a8_sint.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_sint.r8g8b8a8_sint.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_sint.r8g8b8a8_sint.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_sint.r8g8b8a8_sint.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_sint.r8g8b8a8_sint.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_sint.r8g8b8a8_sint.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_sint.r8g8b8a8_sint.optimal_general_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_sint.r8g8b8a8_sint.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_sint.r8g8b8a8_sint.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_sint.r8g8b8a8_sint.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_sint.r8g8b8a8_sint.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_sint.r8g8b8a8_sint.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_sint.r8g8b8a8_sint.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_sint.r8g8b8a8_sint.general_optimal_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_sint.r8g8b8a8_sint.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_sint.r8g8b8a8_sint.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_sint.r8g8b8a8_sint.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_sint.r8g8b8a8_sint.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_sint.r8g8b8a8_sint.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_sint.r8g8b8a8_sint.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_sint.r8g8b8a8_sint.general_general_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_sint.r8g8b8a8_sint.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_sint.r8g8b8a8_sint.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_sint.r8g8b8a8_sint.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_sint.r8g8b8a8_sint.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_sint.r8g8b8a8_sint.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_sint.r8g8b8a8_sint.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_sint.b8g8r8a8_sint.optimal_optimal_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_sint.b8g8r8a8_sint.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_sint.b8g8r8a8_sint.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_sint.b8g8r8a8_sint.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_sint.b8g8r8a8_sint.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_sint.b8g8r8a8_sint.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_sint.b8g8r8a8_sint.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_sint.b8g8r8a8_sint.optimal_general_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_sint.b8g8r8a8_sint.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_sint.b8g8r8a8_sint.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_sint.b8g8r8a8_sint.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_sint.b8g8r8a8_sint.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_sint.b8g8r8a8_sint.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_sint.b8g8r8a8_sint.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_sint.b8g8r8a8_sint.general_optimal_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_sint.b8g8r8a8_sint.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_sint.b8g8r8a8_sint.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_sint.b8g8r8a8_sint.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_sint.b8g8r8a8_sint.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_sint.b8g8r8a8_sint.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_sint.b8g8r8a8_sint.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_sint.b8g8r8a8_sint.general_general_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_sint.b8g8r8a8_sint.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_sint.b8g8r8a8_sint.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_sint.b8g8r8a8_sint.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_sint.b8g8r8a8_sint.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_sint.b8g8r8a8_sint.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_sint.b8g8r8a8_sint.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_sint_pack32.a8b8g8r8_sint_pack32.optimal_optimal_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_sint_pack32.a8b8g8r8_sint_pack32.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_sint_pack32.a8b8g8r8_sint_pack32.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_sint_pack32.a8b8g8r8_sint_pack32.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_sint_pack32.a8b8g8r8_sint_pack32.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_sint_pack32.a8b8g8r8_sint_pack32.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_sint_pack32.a8b8g8r8_sint_pack32.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_sint_pack32.a8b8g8r8_sint_pack32.optimal_general_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_sint_pack32.a8b8g8r8_sint_pack32.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_sint_pack32.a8b8g8r8_sint_pack32.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_sint_pack32.a8b8g8r8_sint_pack32.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_sint_pack32.a8b8g8r8_sint_pack32.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_sint_pack32.a8b8g8r8_sint_pack32.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_sint_pack32.a8b8g8r8_sint_pack32.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_sint_pack32.a8b8g8r8_sint_pack32.general_optimal_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_sint_pack32.a8b8g8r8_sint_pack32.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_sint_pack32.a8b8g8r8_sint_pack32.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_sint_pack32.a8b8g8r8_sint_pack32.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_sint_pack32.a8b8g8r8_sint_pack32.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_sint_pack32.a8b8g8r8_sint_pack32.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_sint_pack32.a8b8g8r8_sint_pack32.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_sint_pack32.a8b8g8r8_sint_pack32.general_general_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_sint_pack32.a8b8g8r8_sint_pack32.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_sint_pack32.a8b8g8r8_sint_pack32.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_sint_pack32.a8b8g8r8_sint_pack32.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_sint_pack32.a8b8g8r8_sint_pack32.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_sint_pack32.a8b8g8r8_sint_pack32.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_sint_pack32.a8b8g8r8_sint_pack32.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_sint_pack32.a2r10g10b10_sint_pack32.optimal_optimal_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_sint_pack32.a2r10g10b10_sint_pack32.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_sint_pack32.a2r10g10b10_sint_pack32.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_sint_pack32.a2r10g10b10_sint_pack32.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_sint_pack32.a2r10g10b10_sint_pack32.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_sint_pack32.a2r10g10b10_sint_pack32.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_sint_pack32.a2r10g10b10_sint_pack32.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_sint_pack32.a2r10g10b10_sint_pack32.optimal_general_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_sint_pack32.a2r10g10b10_sint_pack32.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_sint_pack32.a2r10g10b10_sint_pack32.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_sint_pack32.a2r10g10b10_sint_pack32.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_sint_pack32.a2r10g10b10_sint_pack32.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_sint_pack32.a2r10g10b10_sint_pack32.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_sint_pack32.a2r10g10b10_sint_pack32.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_sint_pack32.a2r10g10b10_sint_pack32.general_optimal_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_sint_pack32.a2r10g10b10_sint_pack32.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_sint_pack32.a2r10g10b10_sint_pack32.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_sint_pack32.a2r10g10b10_sint_pack32.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_sint_pack32.a2r10g10b10_sint_pack32.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_sint_pack32.a2r10g10b10_sint_pack32.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_sint_pack32.a2r10g10b10_sint_pack32.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_sint_pack32.a2r10g10b10_sint_pack32.general_general_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_sint_pack32.a2r10g10b10_sint_pack32.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_sint_pack32.a2r10g10b10_sint_pack32.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_sint_pack32.a2r10g10b10_sint_pack32.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_sint_pack32.a2r10g10b10_sint_pack32.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_sint_pack32.a2r10g10b10_sint_pack32.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_sint_pack32.a2r10g10b10_sint_pack32.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_sint_pack32.a2b10g10r10_sint_pack32.optimal_optimal_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_sint_pack32.a2b10g10r10_sint_pack32.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_sint_pack32.a2b10g10r10_sint_pack32.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_sint_pack32.a2b10g10r10_sint_pack32.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_sint_pack32.a2b10g10r10_sint_pack32.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_sint_pack32.a2b10g10r10_sint_pack32.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_sint_pack32.a2b10g10r10_sint_pack32.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_sint_pack32.a2b10g10r10_sint_pack32.optimal_general_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_sint_pack32.a2b10g10r10_sint_pack32.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_sint_pack32.a2b10g10r10_sint_pack32.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_sint_pack32.a2b10g10r10_sint_pack32.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_sint_pack32.a2b10g10r10_sint_pack32.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_sint_pack32.a2b10g10r10_sint_pack32.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_sint_pack32.a2b10g10r10_sint_pack32.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_sint_pack32.a2b10g10r10_sint_pack32.general_optimal_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_sint_pack32.a2b10g10r10_sint_pack32.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_sint_pack32.a2b10g10r10_sint_pack32.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_sint_pack32.a2b10g10r10_sint_pack32.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_sint_pack32.a2b10g10r10_sint_pack32.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_sint_pack32.a2b10g10r10_sint_pack32.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_sint_pack32.a2b10g10r10_sint_pack32.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_sint_pack32.a2b10g10r10_sint_pack32.general_general_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_sint_pack32.a2b10g10r10_sint_pack32.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_sint_pack32.a2b10g10r10_sint_pack32.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_sint_pack32.a2b10g10r10_sint_pack32.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_sint_pack32.a2b10g10r10_sint_pack32.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_sint_pack32.a2b10g10r10_sint_pack32.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_sint_pack32.a2b10g10r10_sint_pack32.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sint.r16_sint.optimal_optimal_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sint.r16_sint.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sint.r16_sint.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sint.r16_sint.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sint.r16_sint.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sint.r16_sint.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sint.r16_sint.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sint.r16_sint.optimal_general_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sint.r16_sint.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sint.r16_sint.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sint.r16_sint.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sint.r16_sint.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sint.r16_sint.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sint.r16_sint.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sint.r16_sint.general_optimal_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sint.r16_sint.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sint.r16_sint.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sint.r16_sint.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sint.r16_sint.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sint.r16_sint.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sint.r16_sint.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sint.r16_sint.general_general_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sint.r16_sint.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sint.r16_sint.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sint.r16_sint.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sint.r16_sint.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sint.r16_sint.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sint.r16_sint.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_sint.r16g16_sint.optimal_optimal_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_sint.r16g16_sint.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_sint.r16g16_sint.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_sint.r16g16_sint.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_sint.r16g16_sint.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_sint.r16g16_sint.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_sint.r16g16_sint.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_sint.r16g16_sint.optimal_general_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_sint.r16g16_sint.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_sint.r16g16_sint.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_sint.r16g16_sint.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_sint.r16g16_sint.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_sint.r16g16_sint.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_sint.r16g16_sint.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_sint.r16g16_sint.general_optimal_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_sint.r16g16_sint.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_sint.r16g16_sint.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_sint.r16g16_sint.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_sint.r16g16_sint.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_sint.r16g16_sint.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_sint.r16g16_sint.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_sint.r16g16_sint.general_general_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_sint.r16g16_sint.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_sint.r16g16_sint.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_sint.r16g16_sint.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_sint.r16g16_sint.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_sint.r16g16_sint.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_sint.r16g16_sint.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sint.r16g16b16_sint.optimal_optimal_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sint.r16g16b16_sint.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sint.r16g16b16_sint.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sint.r16g16b16_sint.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sint.r16g16b16_sint.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sint.r16g16b16_sint.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sint.r16g16b16_sint.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sint.r16g16b16_sint.optimal_general_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sint.r16g16b16_sint.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sint.r16g16b16_sint.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sint.r16g16b16_sint.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sint.r16g16b16_sint.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sint.r16g16b16_sint.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sint.r16g16b16_sint.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sint.r16g16b16_sint.general_optimal_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sint.r16g16b16_sint.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sint.r16g16b16_sint.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sint.r16g16b16_sint.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sint.r16g16b16_sint.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sint.r16g16b16_sint.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sint.r16g16b16_sint.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sint.r16g16b16_sint.general_general_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sint.r16g16b16_sint.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sint.r16g16b16_sint.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sint.r16g16b16_sint.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sint.r16g16b16_sint.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sint.r16g16b16_sint.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sint.r16g16b16_sint.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_sint.r16g16b16a16_sint.optimal_optimal_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_sint.r16g16b16a16_sint.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_sint.r16g16b16a16_sint.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_sint.r16g16b16a16_sint.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_sint.r16g16b16a16_sint.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_sint.r16g16b16a16_sint.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_sint.r16g16b16a16_sint.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_sint.r16g16b16a16_sint.optimal_general_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_sint.r16g16b16a16_sint.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_sint.r16g16b16a16_sint.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_sint.r16g16b16a16_sint.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_sint.r16g16b16a16_sint.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_sint.r16g16b16a16_sint.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_sint.r16g16b16a16_sint.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_sint.r16g16b16a16_sint.general_optimal_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_sint.r16g16b16a16_sint.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_sint.r16g16b16a16_sint.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_sint.r16g16b16a16_sint.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_sint.r16g16b16a16_sint.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_sint.r16g16b16a16_sint.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_sint.r16g16b16a16_sint.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_sint.r16g16b16a16_sint.general_general_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_sint.r16g16b16a16_sint.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_sint.r16g16b16a16_sint.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_sint.r16g16b16a16_sint.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_sint.r16g16b16a16_sint.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_sint.r16g16b16a16_sint.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_sint.r16g16b16a16_sint.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_sint.r32_sint.optimal_optimal_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_sint.r32_sint.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_sint.r32_sint.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_sint.r32_sint.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_sint.r32_sint.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_sint.r32_sint.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_sint.r32_sint.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_sint.r32_sint.optimal_general_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_sint.r32_sint.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_sint.r32_sint.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_sint.r32_sint.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_sint.r32_sint.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_sint.r32_sint.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_sint.r32_sint.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_sint.r32_sint.general_optimal_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_sint.r32_sint.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_sint.r32_sint.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_sint.r32_sint.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_sint.r32_sint.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_sint.r32_sint.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_sint.r32_sint.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_sint.r32_sint.general_general_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_sint.r32_sint.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_sint.r32_sint.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_sint.r32_sint.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_sint.r32_sint.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_sint.r32_sint.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_sint.r32_sint.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32_sint.r32g32_sint.optimal_optimal_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32_sint.r32g32_sint.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32_sint.r32g32_sint.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32_sint.r32g32_sint.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32_sint.r32g32_sint.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32_sint.r32g32_sint.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32_sint.r32g32_sint.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32_sint.r32g32_sint.optimal_general_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32_sint.r32g32_sint.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32_sint.r32g32_sint.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32_sint.r32g32_sint.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32_sint.r32g32_sint.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32_sint.r32g32_sint.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32_sint.r32g32_sint.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32_sint.r32g32_sint.general_optimal_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32_sint.r32g32_sint.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32_sint.r32g32_sint.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32_sint.r32g32_sint.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32_sint.r32g32_sint.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32_sint.r32g32_sint.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32_sint.r32g32_sint.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32_sint.r32g32_sint.general_general_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32_sint.r32g32_sint.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32_sint.r32g32_sint.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32_sint.r32g32_sint.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32_sint.r32g32_sint.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32_sint.r32g32_sint.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32_sint.r32g32_sint.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_sint.r32g32b32_sint.optimal_optimal_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_sint.r32g32b32_sint.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_sint.r32g32b32_sint.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_sint.r32g32b32_sint.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_sint.r32g32b32_sint.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_sint.r32g32b32_sint.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_sint.r32g32b32_sint.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_sint.r32g32b32_sint.optimal_general_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_sint.r32g32b32_sint.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_sint.r32g32b32_sint.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_sint.r32g32b32_sint.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_sint.r32g32b32_sint.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_sint.r32g32b32_sint.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_sint.r32g32b32_sint.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_sint.r32g32b32_sint.general_optimal_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_sint.r32g32b32_sint.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_sint.r32g32b32_sint.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_sint.r32g32b32_sint.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_sint.r32g32b32_sint.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_sint.r32g32b32_sint.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_sint.r32g32b32_sint.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_sint.r32g32b32_sint.general_general_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_sint.r32g32b32_sint.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_sint.r32g32b32_sint.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_sint.r32g32b32_sint.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_sint.r32g32b32_sint.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_sint.r32g32b32_sint.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_sint.r32g32b32_sint.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_sint.r32g32b32a32_sint.optimal_optimal_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_sint.r32g32b32a32_sint.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_sint.r32g32b32a32_sint.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_sint.r32g32b32a32_sint.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_sint.r32g32b32a32_sint.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_sint.r32g32b32a32_sint.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_sint.r32g32b32a32_sint.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_sint.r32g32b32a32_sint.optimal_general_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_sint.r32g32b32a32_sint.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_sint.r32g32b32a32_sint.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_sint.r32g32b32a32_sint.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_sint.r32g32b32a32_sint.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_sint.r32g32b32a32_sint.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_sint.r32g32b32a32_sint.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_sint.r32g32b32a32_sint.general_optimal_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_sint.r32g32b32a32_sint.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_sint.r32g32b32a32_sint.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_sint.r32g32b32a32_sint.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_sint.r32g32b32a32_sint.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_sint.r32g32b32a32_sint.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_sint.r32g32b32a32_sint.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_sint.r32g32b32a32_sint.general_general_nearest
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_sint.r32g32b32a32_sint.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_sint.r32g32b32a32_sint.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_sint.r32g32b32a32_sint.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_sint.r32g32b32a32_sint.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_sint.r32g32b32a32_sint.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_sint.r32g32b32a32_sint.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.optimal_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.optimal_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.optimal_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.optimal_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.optimal_linear_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.optimal_linear_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.optimal_linear_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.optimal_linear_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.optimal_linear_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.optimal_linear_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.optimal_linear_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.optimal_linear_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.general_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.general_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.general_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.general_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.general_linear_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.general_linear_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.general_linear_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.general_linear_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.general_linear_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.general_linear_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.general_linear_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.general_linear_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.linear_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.linear_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.linear_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.linear_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.linear_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.linear_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.linear_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.linear_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.linear_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.linear_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.linear_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.linear_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.linear_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.linear_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.linear_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.linear_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.linear_linear_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.linear_linear_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.linear_linear_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.linear_linear_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.linear_linear_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.linear_linear_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.linear_linear_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.linear_linear_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4b4a4_unorm_pack16.r4g4b4a4_unorm_pack16.optimal_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4b4a4_unorm_pack16.r4g4b4a4_unorm_pack16.optimal_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4b4a4_unorm_pack16.r4g4b4a4_unorm_pack16.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4b4a4_unorm_pack16.r4g4b4a4_unorm_pack16.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4b4a4_unorm_pack16.r4g4b4a4_unorm_pack16.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4b4a4_unorm_pack16.r4g4b4a4_unorm_pack16.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4b4a4_unorm_pack16.r4g4b4a4_unorm_pack16.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4b4a4_unorm_pack16.r4g4b4a4_unorm_pack16.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4b4a4_unorm_pack16.r4g4b4a4_unorm_pack16.optimal_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4b4a4_unorm_pack16.r4g4b4a4_unorm_pack16.optimal_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4b4a4_unorm_pack16.r4g4b4a4_unorm_pack16.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4b4a4_unorm_pack16.r4g4b4a4_unorm_pack16.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4b4a4_unorm_pack16.r4g4b4a4_unorm_pack16.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4b4a4_unorm_pack16.r4g4b4a4_unorm_pack16.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4b4a4_unorm_pack16.r4g4b4a4_unorm_pack16.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4b4a4_unorm_pack16.r4g4b4a4_unorm_pack16.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4b4a4_unorm_pack16.r4g4b4a4_unorm_pack16.optimal_linear_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4b4a4_unorm_pack16.r4g4b4a4_unorm_pack16.optimal_linear_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4b4a4_unorm_pack16.r4g4b4a4_unorm_pack16.optimal_linear_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4b4a4_unorm_pack16.r4g4b4a4_unorm_pack16.optimal_linear_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4b4a4_unorm_pack16.r4g4b4a4_unorm_pack16.optimal_linear_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4b4a4_unorm_pack16.r4g4b4a4_unorm_pack16.optimal_linear_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4b4a4_unorm_pack16.r4g4b4a4_unorm_pack16.optimal_linear_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4b4a4_unorm_pack16.r4g4b4a4_unorm_pack16.optimal_linear_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4b4a4_unorm_pack16.r4g4b4a4_unorm_pack16.general_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4b4a4_unorm_pack16.r4g4b4a4_unorm_pack16.general_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4b4a4_unorm_pack16.r4g4b4a4_unorm_pack16.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4b4a4_unorm_pack16.r4g4b4a4_unorm_pack16.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4b4a4_unorm_pack16.r4g4b4a4_unorm_pack16.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4b4a4_unorm_pack16.r4g4b4a4_unorm_pack16.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4b4a4_unorm_pack16.r4g4b4a4_unorm_pack16.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4b4a4_unorm_pack16.r4g4b4a4_unorm_pack16.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4b4a4_unorm_pack16.r4g4b4a4_unorm_pack16.general_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4b4a4_unorm_pack16.r4g4b4a4_unorm_pack16.general_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4b4a4_unorm_pack16.r4g4b4a4_unorm_pack16.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4b4a4_unorm_pack16.r4g4b4a4_unorm_pack16.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4b4a4_unorm_pack16.r4g4b4a4_unorm_pack16.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4b4a4_unorm_pack16.r4g4b4a4_unorm_pack16.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4b4a4_unorm_pack16.r4g4b4a4_unorm_pack16.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4b4a4_unorm_pack16.r4g4b4a4_unorm_pack16.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4b4a4_unorm_pack16.r4g4b4a4_unorm_pack16.general_linear_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4b4a4_unorm_pack16.r4g4b4a4_unorm_pack16.general_linear_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4b4a4_unorm_pack16.r4g4b4a4_unorm_pack16.general_linear_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4b4a4_unorm_pack16.r4g4b4a4_unorm_pack16.general_linear_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4b4a4_unorm_pack16.r4g4b4a4_unorm_pack16.general_linear_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4b4a4_unorm_pack16.r4g4b4a4_unorm_pack16.general_linear_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4b4a4_unorm_pack16.r4g4b4a4_unorm_pack16.general_linear_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4b4a4_unorm_pack16.r4g4b4a4_unorm_pack16.general_linear_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4b4a4_unorm_pack16.r4g4b4a4_unorm_pack16.linear_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4b4a4_unorm_pack16.r4g4b4a4_unorm_pack16.linear_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4b4a4_unorm_pack16.r4g4b4a4_unorm_pack16.linear_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4b4a4_unorm_pack16.r4g4b4a4_unorm_pack16.linear_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4b4a4_unorm_pack16.r4g4b4a4_unorm_pack16.linear_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4b4a4_unorm_pack16.r4g4b4a4_unorm_pack16.linear_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4b4a4_unorm_pack16.r4g4b4a4_unorm_pack16.linear_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4b4a4_unorm_pack16.r4g4b4a4_unorm_pack16.linear_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4b4a4_unorm_pack16.r4g4b4a4_unorm_pack16.linear_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4b4a4_unorm_pack16.r4g4b4a4_unorm_pack16.linear_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4b4a4_unorm_pack16.r4g4b4a4_unorm_pack16.linear_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4b4a4_unorm_pack16.r4g4b4a4_unorm_pack16.linear_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4b4a4_unorm_pack16.r4g4b4a4_unorm_pack16.linear_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4b4a4_unorm_pack16.r4g4b4a4_unorm_pack16.linear_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4b4a4_unorm_pack16.r4g4b4a4_unorm_pack16.linear_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4b4a4_unorm_pack16.r4g4b4a4_unorm_pack16.linear_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4b4a4_unorm_pack16.r4g4b4a4_unorm_pack16.linear_linear_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4b4a4_unorm_pack16.r4g4b4a4_unorm_pack16.linear_linear_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4b4a4_unorm_pack16.r4g4b4a4_unorm_pack16.linear_linear_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4b4a4_unorm_pack16.r4g4b4a4_unorm_pack16.linear_linear_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4b4a4_unorm_pack16.r4g4b4a4_unorm_pack16.linear_linear_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4b4a4_unorm_pack16.r4g4b4a4_unorm_pack16.linear_linear_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4b4a4_unorm_pack16.r4g4b4a4_unorm_pack16.linear_linear_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r4g4b4a4_unorm_pack16.r4g4b4a4_unorm_pack16.linear_linear_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b4g4r4a4_unorm_pack16.b4g4r4a4_unorm_pack16.optimal_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b4g4r4a4_unorm_pack16.b4g4r4a4_unorm_pack16.optimal_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b4g4r4a4_unorm_pack16.b4g4r4a4_unorm_pack16.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b4g4r4a4_unorm_pack16.b4g4r4a4_unorm_pack16.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b4g4r4a4_unorm_pack16.b4g4r4a4_unorm_pack16.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b4g4r4a4_unorm_pack16.b4g4r4a4_unorm_pack16.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b4g4r4a4_unorm_pack16.b4g4r4a4_unorm_pack16.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b4g4r4a4_unorm_pack16.b4g4r4a4_unorm_pack16.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b4g4r4a4_unorm_pack16.b4g4r4a4_unorm_pack16.optimal_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b4g4r4a4_unorm_pack16.b4g4r4a4_unorm_pack16.optimal_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b4g4r4a4_unorm_pack16.b4g4r4a4_unorm_pack16.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b4g4r4a4_unorm_pack16.b4g4r4a4_unorm_pack16.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b4g4r4a4_unorm_pack16.b4g4r4a4_unorm_pack16.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b4g4r4a4_unorm_pack16.b4g4r4a4_unorm_pack16.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b4g4r4a4_unorm_pack16.b4g4r4a4_unorm_pack16.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b4g4r4a4_unorm_pack16.b4g4r4a4_unorm_pack16.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b4g4r4a4_unorm_pack16.b4g4r4a4_unorm_pack16.general_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b4g4r4a4_unorm_pack16.b4g4r4a4_unorm_pack16.general_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b4g4r4a4_unorm_pack16.b4g4r4a4_unorm_pack16.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b4g4r4a4_unorm_pack16.b4g4r4a4_unorm_pack16.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b4g4r4a4_unorm_pack16.b4g4r4a4_unorm_pack16.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b4g4r4a4_unorm_pack16.b4g4r4a4_unorm_pack16.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b4g4r4a4_unorm_pack16.b4g4r4a4_unorm_pack16.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b4g4r4a4_unorm_pack16.b4g4r4a4_unorm_pack16.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b4g4r4a4_unorm_pack16.b4g4r4a4_unorm_pack16.general_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b4g4r4a4_unorm_pack16.b4g4r4a4_unorm_pack16.general_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b4g4r4a4_unorm_pack16.b4g4r4a4_unorm_pack16.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b4g4r4a4_unorm_pack16.b4g4r4a4_unorm_pack16.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b4g4r4a4_unorm_pack16.b4g4r4a4_unorm_pack16.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b4g4r4a4_unorm_pack16.b4g4r4a4_unorm_pack16.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b4g4r4a4_unorm_pack16.b4g4r4a4_unorm_pack16.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b4g4r4a4_unorm_pack16.b4g4r4a4_unorm_pack16.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r5g6b5_unorm_pack16.r5g6b5_unorm_pack16.optimal_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r5g6b5_unorm_pack16.r5g6b5_unorm_pack16.optimal_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r5g6b5_unorm_pack16.r5g6b5_unorm_pack16.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r5g6b5_unorm_pack16.r5g6b5_unorm_pack16.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r5g6b5_unorm_pack16.r5g6b5_unorm_pack16.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r5g6b5_unorm_pack16.r5g6b5_unorm_pack16.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r5g6b5_unorm_pack16.r5g6b5_unorm_pack16.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r5g6b5_unorm_pack16.r5g6b5_unorm_pack16.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r5g6b5_unorm_pack16.r5g6b5_unorm_pack16.optimal_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r5g6b5_unorm_pack16.r5g6b5_unorm_pack16.optimal_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r5g6b5_unorm_pack16.r5g6b5_unorm_pack16.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r5g6b5_unorm_pack16.r5g6b5_unorm_pack16.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r5g6b5_unorm_pack16.r5g6b5_unorm_pack16.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r5g6b5_unorm_pack16.r5g6b5_unorm_pack16.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r5g6b5_unorm_pack16.r5g6b5_unorm_pack16.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r5g6b5_unorm_pack16.r5g6b5_unorm_pack16.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r5g6b5_unorm_pack16.r5g6b5_unorm_pack16.general_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r5g6b5_unorm_pack16.r5g6b5_unorm_pack16.general_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r5g6b5_unorm_pack16.r5g6b5_unorm_pack16.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r5g6b5_unorm_pack16.r5g6b5_unorm_pack16.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r5g6b5_unorm_pack16.r5g6b5_unorm_pack16.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r5g6b5_unorm_pack16.r5g6b5_unorm_pack16.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r5g6b5_unorm_pack16.r5g6b5_unorm_pack16.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r5g6b5_unorm_pack16.r5g6b5_unorm_pack16.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r5g6b5_unorm_pack16.r5g6b5_unorm_pack16.general_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r5g6b5_unorm_pack16.r5g6b5_unorm_pack16.general_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r5g6b5_unorm_pack16.r5g6b5_unorm_pack16.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r5g6b5_unorm_pack16.r5g6b5_unorm_pack16.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r5g6b5_unorm_pack16.r5g6b5_unorm_pack16.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r5g6b5_unorm_pack16.r5g6b5_unorm_pack16.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r5g6b5_unorm_pack16.r5g6b5_unorm_pack16.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r5g6b5_unorm_pack16.r5g6b5_unorm_pack16.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b5g6r5_unorm_pack16.b5g6r5_unorm_pack16.optimal_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b5g6r5_unorm_pack16.b5g6r5_unorm_pack16.optimal_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b5g6r5_unorm_pack16.b5g6r5_unorm_pack16.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b5g6r5_unorm_pack16.b5g6r5_unorm_pack16.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b5g6r5_unorm_pack16.b5g6r5_unorm_pack16.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b5g6r5_unorm_pack16.b5g6r5_unorm_pack16.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b5g6r5_unorm_pack16.b5g6r5_unorm_pack16.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b5g6r5_unorm_pack16.b5g6r5_unorm_pack16.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b5g6r5_unorm_pack16.b5g6r5_unorm_pack16.optimal_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b5g6r5_unorm_pack16.b5g6r5_unorm_pack16.optimal_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b5g6r5_unorm_pack16.b5g6r5_unorm_pack16.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b5g6r5_unorm_pack16.b5g6r5_unorm_pack16.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b5g6r5_unorm_pack16.b5g6r5_unorm_pack16.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b5g6r5_unorm_pack16.b5g6r5_unorm_pack16.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b5g6r5_unorm_pack16.b5g6r5_unorm_pack16.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b5g6r5_unorm_pack16.b5g6r5_unorm_pack16.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b5g6r5_unorm_pack16.b5g6r5_unorm_pack16.general_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b5g6r5_unorm_pack16.b5g6r5_unorm_pack16.general_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b5g6r5_unorm_pack16.b5g6r5_unorm_pack16.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b5g6r5_unorm_pack16.b5g6r5_unorm_pack16.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b5g6r5_unorm_pack16.b5g6r5_unorm_pack16.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b5g6r5_unorm_pack16.b5g6r5_unorm_pack16.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b5g6r5_unorm_pack16.b5g6r5_unorm_pack16.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b5g6r5_unorm_pack16.b5g6r5_unorm_pack16.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b5g6r5_unorm_pack16.b5g6r5_unorm_pack16.general_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b5g6r5_unorm_pack16.b5g6r5_unorm_pack16.general_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b5g6r5_unorm_pack16.b5g6r5_unorm_pack16.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b5g6r5_unorm_pack16.b5g6r5_unorm_pack16.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b5g6r5_unorm_pack16.b5g6r5_unorm_pack16.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b5g6r5_unorm_pack16.b5g6r5_unorm_pack16.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b5g6r5_unorm_pack16.b5g6r5_unorm_pack16.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b5g6r5_unorm_pack16.b5g6r5_unorm_pack16.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r5g5b5a1_unorm_pack16.r5g5b5a1_unorm_pack16.optimal_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r5g5b5a1_unorm_pack16.r5g5b5a1_unorm_pack16.optimal_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r5g5b5a1_unorm_pack16.r5g5b5a1_unorm_pack16.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r5g5b5a1_unorm_pack16.r5g5b5a1_unorm_pack16.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r5g5b5a1_unorm_pack16.r5g5b5a1_unorm_pack16.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r5g5b5a1_unorm_pack16.r5g5b5a1_unorm_pack16.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r5g5b5a1_unorm_pack16.r5g5b5a1_unorm_pack16.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r5g5b5a1_unorm_pack16.r5g5b5a1_unorm_pack16.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r5g5b5a1_unorm_pack16.r5g5b5a1_unorm_pack16.optimal_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r5g5b5a1_unorm_pack16.r5g5b5a1_unorm_pack16.optimal_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r5g5b5a1_unorm_pack16.r5g5b5a1_unorm_pack16.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r5g5b5a1_unorm_pack16.r5g5b5a1_unorm_pack16.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r5g5b5a1_unorm_pack16.r5g5b5a1_unorm_pack16.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r5g5b5a1_unorm_pack16.r5g5b5a1_unorm_pack16.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r5g5b5a1_unorm_pack16.r5g5b5a1_unorm_pack16.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r5g5b5a1_unorm_pack16.r5g5b5a1_unorm_pack16.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r5g5b5a1_unorm_pack16.r5g5b5a1_unorm_pack16.general_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r5g5b5a1_unorm_pack16.r5g5b5a1_unorm_pack16.general_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r5g5b5a1_unorm_pack16.r5g5b5a1_unorm_pack16.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r5g5b5a1_unorm_pack16.r5g5b5a1_unorm_pack16.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r5g5b5a1_unorm_pack16.r5g5b5a1_unorm_pack16.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r5g5b5a1_unorm_pack16.r5g5b5a1_unorm_pack16.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r5g5b5a1_unorm_pack16.r5g5b5a1_unorm_pack16.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r5g5b5a1_unorm_pack16.r5g5b5a1_unorm_pack16.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r5g5b5a1_unorm_pack16.r5g5b5a1_unorm_pack16.general_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r5g5b5a1_unorm_pack16.r5g5b5a1_unorm_pack16.general_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r5g5b5a1_unorm_pack16.r5g5b5a1_unorm_pack16.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r5g5b5a1_unorm_pack16.r5g5b5a1_unorm_pack16.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r5g5b5a1_unorm_pack16.r5g5b5a1_unorm_pack16.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r5g5b5a1_unorm_pack16.r5g5b5a1_unorm_pack16.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r5g5b5a1_unorm_pack16.r5g5b5a1_unorm_pack16.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r5g5b5a1_unorm_pack16.r5g5b5a1_unorm_pack16.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b5g5r5a1_unorm_pack16.b5g5r5a1_unorm_pack16.optimal_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b5g5r5a1_unorm_pack16.b5g5r5a1_unorm_pack16.optimal_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b5g5r5a1_unorm_pack16.b5g5r5a1_unorm_pack16.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b5g5r5a1_unorm_pack16.b5g5r5a1_unorm_pack16.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b5g5r5a1_unorm_pack16.b5g5r5a1_unorm_pack16.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b5g5r5a1_unorm_pack16.b5g5r5a1_unorm_pack16.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b5g5r5a1_unorm_pack16.b5g5r5a1_unorm_pack16.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b5g5r5a1_unorm_pack16.b5g5r5a1_unorm_pack16.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b5g5r5a1_unorm_pack16.b5g5r5a1_unorm_pack16.optimal_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b5g5r5a1_unorm_pack16.b5g5r5a1_unorm_pack16.optimal_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b5g5r5a1_unorm_pack16.b5g5r5a1_unorm_pack16.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b5g5r5a1_unorm_pack16.b5g5r5a1_unorm_pack16.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b5g5r5a1_unorm_pack16.b5g5r5a1_unorm_pack16.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b5g5r5a1_unorm_pack16.b5g5r5a1_unorm_pack16.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b5g5r5a1_unorm_pack16.b5g5r5a1_unorm_pack16.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b5g5r5a1_unorm_pack16.b5g5r5a1_unorm_pack16.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b5g5r5a1_unorm_pack16.b5g5r5a1_unorm_pack16.general_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b5g5r5a1_unorm_pack16.b5g5r5a1_unorm_pack16.general_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b5g5r5a1_unorm_pack16.b5g5r5a1_unorm_pack16.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b5g5r5a1_unorm_pack16.b5g5r5a1_unorm_pack16.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b5g5r5a1_unorm_pack16.b5g5r5a1_unorm_pack16.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b5g5r5a1_unorm_pack16.b5g5r5a1_unorm_pack16.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b5g5r5a1_unorm_pack16.b5g5r5a1_unorm_pack16.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b5g5r5a1_unorm_pack16.b5g5r5a1_unorm_pack16.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b5g5r5a1_unorm_pack16.b5g5r5a1_unorm_pack16.general_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b5g5r5a1_unorm_pack16.b5g5r5a1_unorm_pack16.general_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b5g5r5a1_unorm_pack16.b5g5r5a1_unorm_pack16.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b5g5r5a1_unorm_pack16.b5g5r5a1_unorm_pack16.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b5g5r5a1_unorm_pack16.b5g5r5a1_unorm_pack16.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b5g5r5a1_unorm_pack16.b5g5r5a1_unorm_pack16.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b5g5r5a1_unorm_pack16.b5g5r5a1_unorm_pack16.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b5g5r5a1_unorm_pack16.b5g5r5a1_unorm_pack16.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a1r5g5b5_unorm_pack16.a1r5g5b5_unorm_pack16.optimal_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a1r5g5b5_unorm_pack16.a1r5g5b5_unorm_pack16.optimal_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a1r5g5b5_unorm_pack16.a1r5g5b5_unorm_pack16.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a1r5g5b5_unorm_pack16.a1r5g5b5_unorm_pack16.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a1r5g5b5_unorm_pack16.a1r5g5b5_unorm_pack16.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a1r5g5b5_unorm_pack16.a1r5g5b5_unorm_pack16.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a1r5g5b5_unorm_pack16.a1r5g5b5_unorm_pack16.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a1r5g5b5_unorm_pack16.a1r5g5b5_unorm_pack16.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a1r5g5b5_unorm_pack16.a1r5g5b5_unorm_pack16.optimal_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a1r5g5b5_unorm_pack16.a1r5g5b5_unorm_pack16.optimal_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a1r5g5b5_unorm_pack16.a1r5g5b5_unorm_pack16.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a1r5g5b5_unorm_pack16.a1r5g5b5_unorm_pack16.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a1r5g5b5_unorm_pack16.a1r5g5b5_unorm_pack16.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a1r5g5b5_unorm_pack16.a1r5g5b5_unorm_pack16.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a1r5g5b5_unorm_pack16.a1r5g5b5_unorm_pack16.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a1r5g5b5_unorm_pack16.a1r5g5b5_unorm_pack16.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a1r5g5b5_unorm_pack16.a1r5g5b5_unorm_pack16.general_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a1r5g5b5_unorm_pack16.a1r5g5b5_unorm_pack16.general_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a1r5g5b5_unorm_pack16.a1r5g5b5_unorm_pack16.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a1r5g5b5_unorm_pack16.a1r5g5b5_unorm_pack16.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a1r5g5b5_unorm_pack16.a1r5g5b5_unorm_pack16.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a1r5g5b5_unorm_pack16.a1r5g5b5_unorm_pack16.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a1r5g5b5_unorm_pack16.a1r5g5b5_unorm_pack16.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a1r5g5b5_unorm_pack16.a1r5g5b5_unorm_pack16.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a1r5g5b5_unorm_pack16.a1r5g5b5_unorm_pack16.general_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a1r5g5b5_unorm_pack16.a1r5g5b5_unorm_pack16.general_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a1r5g5b5_unorm_pack16.a1r5g5b5_unorm_pack16.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a1r5g5b5_unorm_pack16.a1r5g5b5_unorm_pack16.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a1r5g5b5_unorm_pack16.a1r5g5b5_unorm_pack16.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a1r5g5b5_unorm_pack16.a1r5g5b5_unorm_pack16.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a1r5g5b5_unorm_pack16.a1r5g5b5_unorm_pack16.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a1r5g5b5_unorm_pack16.a1r5g5b5_unorm_pack16.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_unorm.r8_unorm.optimal_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_unorm.r8_unorm.optimal_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_unorm.r8_unorm.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_unorm.r8_unorm.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_unorm.r8_unorm.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_unorm.r8_unorm.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_unorm.r8_unorm.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_unorm.r8_unorm.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_unorm.r8_unorm.optimal_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_unorm.r8_unorm.optimal_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_unorm.r8_unorm.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_unorm.r8_unorm.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_unorm.r8_unorm.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_unorm.r8_unorm.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_unorm.r8_unorm.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_unorm.r8_unorm.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_unorm.r8_unorm.general_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_unorm.r8_unorm.general_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_unorm.r8_unorm.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_unorm.r8_unorm.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_unorm.r8_unorm.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_unorm.r8_unorm.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_unorm.r8_unorm.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_unorm.r8_unorm.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_unorm.r8_unorm.general_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_unorm.r8_unorm.general_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_unorm.r8_unorm.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_unorm.r8_unorm.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_unorm.r8_unorm.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_unorm.r8_unorm.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_unorm.r8_unorm.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_unorm.r8_unorm.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_snorm.r8_snorm.optimal_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_snorm.r8_snorm.optimal_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_snorm.r8_snorm.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_snorm.r8_snorm.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_snorm.r8_snorm.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_snorm.r8_snorm.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_snorm.r8_snorm.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_snorm.r8_snorm.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_snorm.r8_snorm.optimal_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_snorm.r8_snorm.optimal_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_snorm.r8_snorm.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_snorm.r8_snorm.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_snorm.r8_snorm.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_snorm.r8_snorm.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_snorm.r8_snorm.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_snorm.r8_snorm.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_snorm.r8_snorm.general_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_snorm.r8_snorm.general_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_snorm.r8_snorm.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_snorm.r8_snorm.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_snorm.r8_snorm.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_snorm.r8_snorm.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_snorm.r8_snorm.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_snorm.r8_snorm.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_snorm.r8_snorm.general_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_snorm.r8_snorm.general_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_snorm.r8_snorm.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_snorm.r8_snorm.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_snorm.r8_snorm.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_snorm.r8_snorm.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_snorm.r8_snorm.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_snorm.r8_snorm.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_uscaled.r8_uscaled.optimal_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_uscaled.r8_uscaled.optimal_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_uscaled.r8_uscaled.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_uscaled.r8_uscaled.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_uscaled.r8_uscaled.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_uscaled.r8_uscaled.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_uscaled.r8_uscaled.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_uscaled.r8_uscaled.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_uscaled.r8_uscaled.optimal_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_uscaled.r8_uscaled.optimal_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_uscaled.r8_uscaled.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_uscaled.r8_uscaled.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_uscaled.r8_uscaled.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_uscaled.r8_uscaled.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_uscaled.r8_uscaled.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_uscaled.r8_uscaled.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_uscaled.r8_uscaled.general_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_uscaled.r8_uscaled.general_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_uscaled.r8_uscaled.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_uscaled.r8_uscaled.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_uscaled.r8_uscaled.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_uscaled.r8_uscaled.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_uscaled.r8_uscaled.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_uscaled.r8_uscaled.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_uscaled.r8_uscaled.general_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_uscaled.r8_uscaled.general_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_uscaled.r8_uscaled.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_uscaled.r8_uscaled.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_uscaled.r8_uscaled.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_uscaled.r8_uscaled.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_uscaled.r8_uscaled.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_uscaled.r8_uscaled.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_sscaled.r8_sscaled.optimal_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_sscaled.r8_sscaled.optimal_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_sscaled.r8_sscaled.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_sscaled.r8_sscaled.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_sscaled.r8_sscaled.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_sscaled.r8_sscaled.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_sscaled.r8_sscaled.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_sscaled.r8_sscaled.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_sscaled.r8_sscaled.optimal_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_sscaled.r8_sscaled.optimal_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_sscaled.r8_sscaled.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_sscaled.r8_sscaled.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_sscaled.r8_sscaled.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_sscaled.r8_sscaled.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_sscaled.r8_sscaled.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_sscaled.r8_sscaled.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_sscaled.r8_sscaled.general_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_sscaled.r8_sscaled.general_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_sscaled.r8_sscaled.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_sscaled.r8_sscaled.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_sscaled.r8_sscaled.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_sscaled.r8_sscaled.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_sscaled.r8_sscaled.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_sscaled.r8_sscaled.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_sscaled.r8_sscaled.general_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_sscaled.r8_sscaled.general_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_sscaled.r8_sscaled.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_sscaled.r8_sscaled.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_sscaled.r8_sscaled.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_sscaled.r8_sscaled.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_sscaled.r8_sscaled.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_sscaled.r8_sscaled.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_unorm.r8g8_unorm.optimal_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_unorm.r8g8_unorm.optimal_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_unorm.r8g8_unorm.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_unorm.r8g8_unorm.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_unorm.r8g8_unorm.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_unorm.r8g8_unorm.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_unorm.r8g8_unorm.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_unorm.r8g8_unorm.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_unorm.r8g8_unorm.optimal_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_unorm.r8g8_unorm.optimal_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_unorm.r8g8_unorm.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_unorm.r8g8_unorm.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_unorm.r8g8_unorm.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_unorm.r8g8_unorm.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_unorm.r8g8_unorm.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_unorm.r8g8_unorm.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_unorm.r8g8_unorm.general_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_unorm.r8g8_unorm.general_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_unorm.r8g8_unorm.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_unorm.r8g8_unorm.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_unorm.r8g8_unorm.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_unorm.r8g8_unorm.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_unorm.r8g8_unorm.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_unorm.r8g8_unorm.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_unorm.r8g8_unorm.general_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_unorm.r8g8_unorm.general_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_unorm.r8g8_unorm.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_unorm.r8g8_unorm.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_unorm.r8g8_unorm.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_unorm.r8g8_unorm.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_unorm.r8g8_unorm.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_unorm.r8g8_unorm.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_snorm.r8g8_snorm.optimal_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_snorm.r8g8_snorm.optimal_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_snorm.r8g8_snorm.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_snorm.r8g8_snorm.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_snorm.r8g8_snorm.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_snorm.r8g8_snorm.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_snorm.r8g8_snorm.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_snorm.r8g8_snorm.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_snorm.r8g8_snorm.optimal_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_snorm.r8g8_snorm.optimal_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_snorm.r8g8_snorm.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_snorm.r8g8_snorm.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_snorm.r8g8_snorm.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_snorm.r8g8_snorm.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_snorm.r8g8_snorm.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_snorm.r8g8_snorm.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_snorm.r8g8_snorm.general_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_snorm.r8g8_snorm.general_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_snorm.r8g8_snorm.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_snorm.r8g8_snorm.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_snorm.r8g8_snorm.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_snorm.r8g8_snorm.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_snorm.r8g8_snorm.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_snorm.r8g8_snorm.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_snorm.r8g8_snorm.general_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_snorm.r8g8_snorm.general_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_snorm.r8g8_snorm.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_snorm.r8g8_snorm.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_snorm.r8g8_snorm.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_snorm.r8g8_snorm.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_snorm.r8g8_snorm.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_snorm.r8g8_snorm.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_uscaled.r8g8_uscaled.optimal_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_uscaled.r8g8_uscaled.optimal_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_uscaled.r8g8_uscaled.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_uscaled.r8g8_uscaled.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_uscaled.r8g8_uscaled.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_uscaled.r8g8_uscaled.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_uscaled.r8g8_uscaled.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_uscaled.r8g8_uscaled.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_uscaled.r8g8_uscaled.optimal_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_uscaled.r8g8_uscaled.optimal_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_uscaled.r8g8_uscaled.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_uscaled.r8g8_uscaled.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_uscaled.r8g8_uscaled.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_uscaled.r8g8_uscaled.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_uscaled.r8g8_uscaled.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_uscaled.r8g8_uscaled.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_uscaled.r8g8_uscaled.general_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_uscaled.r8g8_uscaled.general_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_uscaled.r8g8_uscaled.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_uscaled.r8g8_uscaled.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_uscaled.r8g8_uscaled.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_uscaled.r8g8_uscaled.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_uscaled.r8g8_uscaled.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_uscaled.r8g8_uscaled.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_uscaled.r8g8_uscaled.general_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_uscaled.r8g8_uscaled.general_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_uscaled.r8g8_uscaled.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_uscaled.r8g8_uscaled.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_uscaled.r8g8_uscaled.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_uscaled.r8g8_uscaled.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_uscaled.r8g8_uscaled.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_uscaled.r8g8_uscaled.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_sscaled.r8g8_sscaled.optimal_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_sscaled.r8g8_sscaled.optimal_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_sscaled.r8g8_sscaled.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_sscaled.r8g8_sscaled.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_sscaled.r8g8_sscaled.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_sscaled.r8g8_sscaled.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_sscaled.r8g8_sscaled.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_sscaled.r8g8_sscaled.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_sscaled.r8g8_sscaled.optimal_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_sscaled.r8g8_sscaled.optimal_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_sscaled.r8g8_sscaled.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_sscaled.r8g8_sscaled.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_sscaled.r8g8_sscaled.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_sscaled.r8g8_sscaled.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_sscaled.r8g8_sscaled.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_sscaled.r8g8_sscaled.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_sscaled.r8g8_sscaled.general_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_sscaled.r8g8_sscaled.general_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_sscaled.r8g8_sscaled.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_sscaled.r8g8_sscaled.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_sscaled.r8g8_sscaled.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_sscaled.r8g8_sscaled.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_sscaled.r8g8_sscaled.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_sscaled.r8g8_sscaled.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_sscaled.r8g8_sscaled.general_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_sscaled.r8g8_sscaled.general_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_sscaled.r8g8_sscaled.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_sscaled.r8g8_sscaled.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_sscaled.r8g8_sscaled.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_sscaled.r8g8_sscaled.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_sscaled.r8g8_sscaled.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_sscaled.r8g8_sscaled.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_unorm.r8g8b8_unorm.optimal_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_unorm.r8g8b8_unorm.optimal_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_unorm.r8g8b8_unorm.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_unorm.r8g8b8_unorm.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_unorm.r8g8b8_unorm.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_unorm.r8g8b8_unorm.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_unorm.r8g8b8_unorm.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_unorm.r8g8b8_unorm.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_unorm.r8g8b8_unorm.optimal_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_unorm.r8g8b8_unorm.optimal_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_unorm.r8g8b8_unorm.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_unorm.r8g8b8_unorm.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_unorm.r8g8b8_unorm.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_unorm.r8g8b8_unorm.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_unorm.r8g8b8_unorm.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_unorm.r8g8b8_unorm.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_unorm.r8g8b8_unorm.optimal_linear_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_unorm.r8g8b8_unorm.optimal_linear_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_unorm.r8g8b8_unorm.optimal_linear_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_unorm.r8g8b8_unorm.optimal_linear_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_unorm.r8g8b8_unorm.optimal_linear_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_unorm.r8g8b8_unorm.optimal_linear_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_unorm.r8g8b8_unorm.optimal_linear_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_unorm.r8g8b8_unorm.optimal_linear_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_unorm.r8g8b8_unorm.general_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_unorm.r8g8b8_unorm.general_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_unorm.r8g8b8_unorm.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_unorm.r8g8b8_unorm.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_unorm.r8g8b8_unorm.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_unorm.r8g8b8_unorm.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_unorm.r8g8b8_unorm.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_unorm.r8g8b8_unorm.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_unorm.r8g8b8_unorm.general_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_unorm.r8g8b8_unorm.general_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_unorm.r8g8b8_unorm.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_unorm.r8g8b8_unorm.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_unorm.r8g8b8_unorm.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_unorm.r8g8b8_unorm.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_unorm.r8g8b8_unorm.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_unorm.r8g8b8_unorm.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_unorm.r8g8b8_unorm.general_linear_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_unorm.r8g8b8_unorm.general_linear_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_unorm.r8g8b8_unorm.general_linear_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_unorm.r8g8b8_unorm.general_linear_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_unorm.r8g8b8_unorm.general_linear_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_unorm.r8g8b8_unorm.general_linear_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_unorm.r8g8b8_unorm.general_linear_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_unorm.r8g8b8_unorm.general_linear_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_unorm.r8g8b8_unorm.linear_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_unorm.r8g8b8_unorm.linear_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_unorm.r8g8b8_unorm.linear_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_unorm.r8g8b8_unorm.linear_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_unorm.r8g8b8_unorm.linear_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_unorm.r8g8b8_unorm.linear_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_unorm.r8g8b8_unorm.linear_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_unorm.r8g8b8_unorm.linear_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_unorm.r8g8b8_unorm.linear_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_unorm.r8g8b8_unorm.linear_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_unorm.r8g8b8_unorm.linear_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_unorm.r8g8b8_unorm.linear_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_unorm.r8g8b8_unorm.linear_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_unorm.r8g8b8_unorm.linear_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_unorm.r8g8b8_unorm.linear_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_unorm.r8g8b8_unorm.linear_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_unorm.r8g8b8_unorm.linear_linear_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_unorm.r8g8b8_unorm.linear_linear_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_unorm.r8g8b8_unorm.linear_linear_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_unorm.r8g8b8_unorm.linear_linear_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_unorm.r8g8b8_unorm.linear_linear_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_unorm.r8g8b8_unorm.linear_linear_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_unorm.r8g8b8_unorm.linear_linear_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_unorm.r8g8b8_unorm.linear_linear_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_snorm.r8g8b8_snorm.optimal_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_snorm.r8g8b8_snorm.optimal_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_snorm.r8g8b8_snorm.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_snorm.r8g8b8_snorm.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_snorm.r8g8b8_snorm.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_snorm.r8g8b8_snorm.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_snorm.r8g8b8_snorm.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_snorm.r8g8b8_snorm.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_snorm.r8g8b8_snorm.optimal_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_snorm.r8g8b8_snorm.optimal_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_snorm.r8g8b8_snorm.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_snorm.r8g8b8_snorm.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_snorm.r8g8b8_snorm.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_snorm.r8g8b8_snorm.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_snorm.r8g8b8_snorm.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_snorm.r8g8b8_snorm.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_snorm.r8g8b8_snorm.general_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_snorm.r8g8b8_snorm.general_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_snorm.r8g8b8_snorm.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_snorm.r8g8b8_snorm.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_snorm.r8g8b8_snorm.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_snorm.r8g8b8_snorm.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_snorm.r8g8b8_snorm.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_snorm.r8g8b8_snorm.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_snorm.r8g8b8_snorm.general_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_snorm.r8g8b8_snorm.general_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_snorm.r8g8b8_snorm.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_snorm.r8g8b8_snorm.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_snorm.r8g8b8_snorm.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_snorm.r8g8b8_snorm.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_snorm.r8g8b8_snorm.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_snorm.r8g8b8_snorm.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_uscaled.r8g8b8_uscaled.optimal_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_uscaled.r8g8b8_uscaled.optimal_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_uscaled.r8g8b8_uscaled.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_uscaled.r8g8b8_uscaled.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_uscaled.r8g8b8_uscaled.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_uscaled.r8g8b8_uscaled.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_uscaled.r8g8b8_uscaled.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_uscaled.r8g8b8_uscaled.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_uscaled.r8g8b8_uscaled.optimal_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_uscaled.r8g8b8_uscaled.optimal_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_uscaled.r8g8b8_uscaled.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_uscaled.r8g8b8_uscaled.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_uscaled.r8g8b8_uscaled.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_uscaled.r8g8b8_uscaled.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_uscaled.r8g8b8_uscaled.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_uscaled.r8g8b8_uscaled.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_uscaled.r8g8b8_uscaled.general_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_uscaled.r8g8b8_uscaled.general_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_uscaled.r8g8b8_uscaled.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_uscaled.r8g8b8_uscaled.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_uscaled.r8g8b8_uscaled.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_uscaled.r8g8b8_uscaled.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_uscaled.r8g8b8_uscaled.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_uscaled.r8g8b8_uscaled.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_uscaled.r8g8b8_uscaled.general_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_uscaled.r8g8b8_uscaled.general_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_uscaled.r8g8b8_uscaled.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_uscaled.r8g8b8_uscaled.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_uscaled.r8g8b8_uscaled.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_uscaled.r8g8b8_uscaled.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_uscaled.r8g8b8_uscaled.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_uscaled.r8g8b8_uscaled.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_sscaled.r8g8b8_sscaled.optimal_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_sscaled.r8g8b8_sscaled.optimal_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_sscaled.r8g8b8_sscaled.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_sscaled.r8g8b8_sscaled.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_sscaled.r8g8b8_sscaled.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_sscaled.r8g8b8_sscaled.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_sscaled.r8g8b8_sscaled.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_sscaled.r8g8b8_sscaled.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_sscaled.r8g8b8_sscaled.optimal_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_sscaled.r8g8b8_sscaled.optimal_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_sscaled.r8g8b8_sscaled.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_sscaled.r8g8b8_sscaled.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_sscaled.r8g8b8_sscaled.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_sscaled.r8g8b8_sscaled.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_sscaled.r8g8b8_sscaled.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_sscaled.r8g8b8_sscaled.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_sscaled.r8g8b8_sscaled.general_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_sscaled.r8g8b8_sscaled.general_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_sscaled.r8g8b8_sscaled.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_sscaled.r8g8b8_sscaled.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_sscaled.r8g8b8_sscaled.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_sscaled.r8g8b8_sscaled.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_sscaled.r8g8b8_sscaled.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_sscaled.r8g8b8_sscaled.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_sscaled.r8g8b8_sscaled.general_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_sscaled.r8g8b8_sscaled.general_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_sscaled.r8g8b8_sscaled.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_sscaled.r8g8b8_sscaled.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_sscaled.r8g8b8_sscaled.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_sscaled.r8g8b8_sscaled.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_sscaled.r8g8b8_sscaled.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_sscaled.r8g8b8_sscaled.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_unorm.b8g8r8_unorm.optimal_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_unorm.b8g8r8_unorm.optimal_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_unorm.b8g8r8_unorm.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_unorm.b8g8r8_unorm.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_unorm.b8g8r8_unorm.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_unorm.b8g8r8_unorm.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_unorm.b8g8r8_unorm.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_unorm.b8g8r8_unorm.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_unorm.b8g8r8_unorm.optimal_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_unorm.b8g8r8_unorm.optimal_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_unorm.b8g8r8_unorm.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_unorm.b8g8r8_unorm.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_unorm.b8g8r8_unorm.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_unorm.b8g8r8_unorm.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_unorm.b8g8r8_unorm.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_unorm.b8g8r8_unorm.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_unorm.b8g8r8_unorm.general_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_unorm.b8g8r8_unorm.general_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_unorm.b8g8r8_unorm.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_unorm.b8g8r8_unorm.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_unorm.b8g8r8_unorm.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_unorm.b8g8r8_unorm.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_unorm.b8g8r8_unorm.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_unorm.b8g8r8_unorm.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_unorm.b8g8r8_unorm.general_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_unorm.b8g8r8_unorm.general_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_unorm.b8g8r8_unorm.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_unorm.b8g8r8_unorm.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_unorm.b8g8r8_unorm.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_unorm.b8g8r8_unorm.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_unorm.b8g8r8_unorm.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_unorm.b8g8r8_unorm.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_snorm.b8g8r8_snorm.optimal_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_snorm.b8g8r8_snorm.optimal_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_snorm.b8g8r8_snorm.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_snorm.b8g8r8_snorm.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_snorm.b8g8r8_snorm.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_snorm.b8g8r8_snorm.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_snorm.b8g8r8_snorm.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_snorm.b8g8r8_snorm.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_snorm.b8g8r8_snorm.optimal_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_snorm.b8g8r8_snorm.optimal_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_snorm.b8g8r8_snorm.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_snorm.b8g8r8_snorm.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_snorm.b8g8r8_snorm.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_snorm.b8g8r8_snorm.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_snorm.b8g8r8_snorm.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_snorm.b8g8r8_snorm.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_snorm.b8g8r8_snorm.general_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_snorm.b8g8r8_snorm.general_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_snorm.b8g8r8_snorm.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_snorm.b8g8r8_snorm.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_snorm.b8g8r8_snorm.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_snorm.b8g8r8_snorm.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_snorm.b8g8r8_snorm.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_snorm.b8g8r8_snorm.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_snorm.b8g8r8_snorm.general_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_snorm.b8g8r8_snorm.general_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_snorm.b8g8r8_snorm.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_snorm.b8g8r8_snorm.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_snorm.b8g8r8_snorm.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_snorm.b8g8r8_snorm.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_snorm.b8g8r8_snorm.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_snorm.b8g8r8_snorm.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_uscaled.b8g8r8_uscaled.optimal_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_uscaled.b8g8r8_uscaled.optimal_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_uscaled.b8g8r8_uscaled.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_uscaled.b8g8r8_uscaled.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_uscaled.b8g8r8_uscaled.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_uscaled.b8g8r8_uscaled.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_uscaled.b8g8r8_uscaled.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_uscaled.b8g8r8_uscaled.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_uscaled.b8g8r8_uscaled.optimal_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_uscaled.b8g8r8_uscaled.optimal_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_uscaled.b8g8r8_uscaled.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_uscaled.b8g8r8_uscaled.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_uscaled.b8g8r8_uscaled.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_uscaled.b8g8r8_uscaled.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_uscaled.b8g8r8_uscaled.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_uscaled.b8g8r8_uscaled.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_uscaled.b8g8r8_uscaled.general_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_uscaled.b8g8r8_uscaled.general_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_uscaled.b8g8r8_uscaled.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_uscaled.b8g8r8_uscaled.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_uscaled.b8g8r8_uscaled.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_uscaled.b8g8r8_uscaled.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_uscaled.b8g8r8_uscaled.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_uscaled.b8g8r8_uscaled.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_uscaled.b8g8r8_uscaled.general_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_uscaled.b8g8r8_uscaled.general_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_uscaled.b8g8r8_uscaled.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_uscaled.b8g8r8_uscaled.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_uscaled.b8g8r8_uscaled.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_uscaled.b8g8r8_uscaled.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_uscaled.b8g8r8_uscaled.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_uscaled.b8g8r8_uscaled.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_sscaled.b8g8r8_sscaled.optimal_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_sscaled.b8g8r8_sscaled.optimal_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_sscaled.b8g8r8_sscaled.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_sscaled.b8g8r8_sscaled.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_sscaled.b8g8r8_sscaled.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_sscaled.b8g8r8_sscaled.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_sscaled.b8g8r8_sscaled.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_sscaled.b8g8r8_sscaled.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_sscaled.b8g8r8_sscaled.optimal_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_sscaled.b8g8r8_sscaled.optimal_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_sscaled.b8g8r8_sscaled.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_sscaled.b8g8r8_sscaled.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_sscaled.b8g8r8_sscaled.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_sscaled.b8g8r8_sscaled.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_sscaled.b8g8r8_sscaled.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_sscaled.b8g8r8_sscaled.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_sscaled.b8g8r8_sscaled.general_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_sscaled.b8g8r8_sscaled.general_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_sscaled.b8g8r8_sscaled.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_sscaled.b8g8r8_sscaled.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_sscaled.b8g8r8_sscaled.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_sscaled.b8g8r8_sscaled.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_sscaled.b8g8r8_sscaled.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_sscaled.b8g8r8_sscaled.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_sscaled.b8g8r8_sscaled.general_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_sscaled.b8g8r8_sscaled.general_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_sscaled.b8g8r8_sscaled.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_sscaled.b8g8r8_sscaled.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_sscaled.b8g8r8_sscaled.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_sscaled.b8g8r8_sscaled.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_sscaled.b8g8r8_sscaled.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_sscaled.b8g8r8_sscaled.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_unorm.r8g8b8a8_unorm.optimal_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_unorm.r8g8b8a8_unorm.optimal_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_unorm.r8g8b8a8_unorm.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_unorm.r8g8b8a8_unorm.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_unorm.r8g8b8a8_unorm.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_unorm.r8g8b8a8_unorm.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_unorm.r8g8b8a8_unorm.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_unorm.r8g8b8a8_unorm.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_unorm.r8g8b8a8_unorm.optimal_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_unorm.r8g8b8a8_unorm.optimal_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_unorm.r8g8b8a8_unorm.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_unorm.r8g8b8a8_unorm.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_unorm.r8g8b8a8_unorm.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_unorm.r8g8b8a8_unorm.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_unorm.r8g8b8a8_unorm.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_unorm.r8g8b8a8_unorm.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_unorm.r8g8b8a8_unorm.optimal_linear_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_unorm.r8g8b8a8_unorm.optimal_linear_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_unorm.r8g8b8a8_unorm.optimal_linear_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_unorm.r8g8b8a8_unorm.optimal_linear_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_unorm.r8g8b8a8_unorm.optimal_linear_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_unorm.r8g8b8a8_unorm.optimal_linear_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_unorm.r8g8b8a8_unorm.optimal_linear_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_unorm.r8g8b8a8_unorm.optimal_linear_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_unorm.r8g8b8a8_unorm.general_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_unorm.r8g8b8a8_unorm.general_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_unorm.r8g8b8a8_unorm.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_unorm.r8g8b8a8_unorm.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_unorm.r8g8b8a8_unorm.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_unorm.r8g8b8a8_unorm.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_unorm.r8g8b8a8_unorm.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_unorm.r8g8b8a8_unorm.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_unorm.r8g8b8a8_unorm.general_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_unorm.r8g8b8a8_unorm.general_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_unorm.r8g8b8a8_unorm.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_unorm.r8g8b8a8_unorm.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_unorm.r8g8b8a8_unorm.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_unorm.r8g8b8a8_unorm.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_unorm.r8g8b8a8_unorm.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_unorm.r8g8b8a8_unorm.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_unorm.r8g8b8a8_unorm.general_linear_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_unorm.r8g8b8a8_unorm.general_linear_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_unorm.r8g8b8a8_unorm.general_linear_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_unorm.r8g8b8a8_unorm.general_linear_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_unorm.r8g8b8a8_unorm.general_linear_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_unorm.r8g8b8a8_unorm.general_linear_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_unorm.r8g8b8a8_unorm.general_linear_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_unorm.r8g8b8a8_unorm.general_linear_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_unorm.r8g8b8a8_unorm.linear_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_unorm.r8g8b8a8_unorm.linear_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_unorm.r8g8b8a8_unorm.linear_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_unorm.r8g8b8a8_unorm.linear_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_unorm.r8g8b8a8_unorm.linear_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_unorm.r8g8b8a8_unorm.linear_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_unorm.r8g8b8a8_unorm.linear_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_unorm.r8g8b8a8_unorm.linear_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_unorm.r8g8b8a8_unorm.linear_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_unorm.r8g8b8a8_unorm.linear_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_unorm.r8g8b8a8_unorm.linear_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_unorm.r8g8b8a8_unorm.linear_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_unorm.r8g8b8a8_unorm.linear_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_unorm.r8g8b8a8_unorm.linear_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_unorm.r8g8b8a8_unorm.linear_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_unorm.r8g8b8a8_unorm.linear_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_unorm.r8g8b8a8_unorm.linear_linear_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_unorm.r8g8b8a8_unorm.linear_linear_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_unorm.r8g8b8a8_unorm.linear_linear_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_unorm.r8g8b8a8_unorm.linear_linear_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_unorm.r8g8b8a8_unorm.linear_linear_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_unorm.r8g8b8a8_unorm.linear_linear_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_unorm.r8g8b8a8_unorm.linear_linear_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_unorm.r8g8b8a8_unorm.linear_linear_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_snorm.r8g8b8a8_snorm.optimal_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_snorm.r8g8b8a8_snorm.optimal_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_snorm.r8g8b8a8_snorm.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_snorm.r8g8b8a8_snorm.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_snorm.r8g8b8a8_snorm.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_snorm.r8g8b8a8_snorm.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_snorm.r8g8b8a8_snorm.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_snorm.r8g8b8a8_snorm.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_snorm.r8g8b8a8_snorm.optimal_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_snorm.r8g8b8a8_snorm.optimal_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_snorm.r8g8b8a8_snorm.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_snorm.r8g8b8a8_snorm.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_snorm.r8g8b8a8_snorm.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_snorm.r8g8b8a8_snorm.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_snorm.r8g8b8a8_snorm.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_snorm.r8g8b8a8_snorm.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_snorm.r8g8b8a8_snorm.general_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_snorm.r8g8b8a8_snorm.general_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_snorm.r8g8b8a8_snorm.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_snorm.r8g8b8a8_snorm.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_snorm.r8g8b8a8_snorm.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_snorm.r8g8b8a8_snorm.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_snorm.r8g8b8a8_snorm.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_snorm.r8g8b8a8_snorm.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_snorm.r8g8b8a8_snorm.general_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_snorm.r8g8b8a8_snorm.general_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_snorm.r8g8b8a8_snorm.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_snorm.r8g8b8a8_snorm.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_snorm.r8g8b8a8_snorm.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_snorm.r8g8b8a8_snorm.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_snorm.r8g8b8a8_snorm.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_snorm.r8g8b8a8_snorm.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_uscaled.r8g8b8a8_uscaled.optimal_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_uscaled.r8g8b8a8_uscaled.optimal_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_uscaled.r8g8b8a8_uscaled.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_uscaled.r8g8b8a8_uscaled.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_uscaled.r8g8b8a8_uscaled.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_uscaled.r8g8b8a8_uscaled.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_uscaled.r8g8b8a8_uscaled.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_uscaled.r8g8b8a8_uscaled.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_uscaled.r8g8b8a8_uscaled.optimal_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_uscaled.r8g8b8a8_uscaled.optimal_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_uscaled.r8g8b8a8_uscaled.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_uscaled.r8g8b8a8_uscaled.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_uscaled.r8g8b8a8_uscaled.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_uscaled.r8g8b8a8_uscaled.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_uscaled.r8g8b8a8_uscaled.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_uscaled.r8g8b8a8_uscaled.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_uscaled.r8g8b8a8_uscaled.general_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_uscaled.r8g8b8a8_uscaled.general_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_uscaled.r8g8b8a8_uscaled.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_uscaled.r8g8b8a8_uscaled.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_uscaled.r8g8b8a8_uscaled.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_uscaled.r8g8b8a8_uscaled.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_uscaled.r8g8b8a8_uscaled.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_uscaled.r8g8b8a8_uscaled.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_uscaled.r8g8b8a8_uscaled.general_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_uscaled.r8g8b8a8_uscaled.general_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_uscaled.r8g8b8a8_uscaled.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_uscaled.r8g8b8a8_uscaled.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_uscaled.r8g8b8a8_uscaled.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_uscaled.r8g8b8a8_uscaled.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_uscaled.r8g8b8a8_uscaled.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_uscaled.r8g8b8a8_uscaled.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_sscaled.r8g8b8a8_sscaled.optimal_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_sscaled.r8g8b8a8_sscaled.optimal_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_sscaled.r8g8b8a8_sscaled.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_sscaled.r8g8b8a8_sscaled.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_sscaled.r8g8b8a8_sscaled.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_sscaled.r8g8b8a8_sscaled.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_sscaled.r8g8b8a8_sscaled.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_sscaled.r8g8b8a8_sscaled.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_sscaled.r8g8b8a8_sscaled.optimal_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_sscaled.r8g8b8a8_sscaled.optimal_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_sscaled.r8g8b8a8_sscaled.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_sscaled.r8g8b8a8_sscaled.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_sscaled.r8g8b8a8_sscaled.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_sscaled.r8g8b8a8_sscaled.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_sscaled.r8g8b8a8_sscaled.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_sscaled.r8g8b8a8_sscaled.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_sscaled.r8g8b8a8_sscaled.general_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_sscaled.r8g8b8a8_sscaled.general_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_sscaled.r8g8b8a8_sscaled.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_sscaled.r8g8b8a8_sscaled.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_sscaled.r8g8b8a8_sscaled.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_sscaled.r8g8b8a8_sscaled.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_sscaled.r8g8b8a8_sscaled.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_sscaled.r8g8b8a8_sscaled.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_sscaled.r8g8b8a8_sscaled.general_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_sscaled.r8g8b8a8_sscaled.general_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_sscaled.r8g8b8a8_sscaled.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_sscaled.r8g8b8a8_sscaled.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_sscaled.r8g8b8a8_sscaled.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_sscaled.r8g8b8a8_sscaled.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_sscaled.r8g8b8a8_sscaled.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_sscaled.r8g8b8a8_sscaled.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_unorm.b8g8r8a8_unorm.optimal_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_unorm.b8g8r8a8_unorm.optimal_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_unorm.b8g8r8a8_unorm.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_unorm.b8g8r8a8_unorm.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_unorm.b8g8r8a8_unorm.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_unorm.b8g8r8a8_unorm.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_unorm.b8g8r8a8_unorm.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_unorm.b8g8r8a8_unorm.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_unorm.b8g8r8a8_unorm.optimal_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_unorm.b8g8r8a8_unorm.optimal_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_unorm.b8g8r8a8_unorm.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_unorm.b8g8r8a8_unorm.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_unorm.b8g8r8a8_unorm.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_unorm.b8g8r8a8_unorm.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_unorm.b8g8r8a8_unorm.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_unorm.b8g8r8a8_unorm.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_unorm.b8g8r8a8_unorm.general_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_unorm.b8g8r8a8_unorm.general_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_unorm.b8g8r8a8_unorm.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_unorm.b8g8r8a8_unorm.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_unorm.b8g8r8a8_unorm.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_unorm.b8g8r8a8_unorm.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_unorm.b8g8r8a8_unorm.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_unorm.b8g8r8a8_unorm.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_unorm.b8g8r8a8_unorm.general_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_unorm.b8g8r8a8_unorm.general_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_unorm.b8g8r8a8_unorm.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_unorm.b8g8r8a8_unorm.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_unorm.b8g8r8a8_unorm.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_unorm.b8g8r8a8_unorm.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_unorm.b8g8r8a8_unorm.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_unorm.b8g8r8a8_unorm.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_snorm.b8g8r8a8_snorm.optimal_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_snorm.b8g8r8a8_snorm.optimal_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_snorm.b8g8r8a8_snorm.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_snorm.b8g8r8a8_snorm.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_snorm.b8g8r8a8_snorm.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_snorm.b8g8r8a8_snorm.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_snorm.b8g8r8a8_snorm.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_snorm.b8g8r8a8_snorm.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_snorm.b8g8r8a8_snorm.optimal_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_snorm.b8g8r8a8_snorm.optimal_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_snorm.b8g8r8a8_snorm.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_snorm.b8g8r8a8_snorm.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_snorm.b8g8r8a8_snorm.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_snorm.b8g8r8a8_snorm.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_snorm.b8g8r8a8_snorm.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_snorm.b8g8r8a8_snorm.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_snorm.b8g8r8a8_snorm.general_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_snorm.b8g8r8a8_snorm.general_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_snorm.b8g8r8a8_snorm.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_snorm.b8g8r8a8_snorm.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_snorm.b8g8r8a8_snorm.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_snorm.b8g8r8a8_snorm.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_snorm.b8g8r8a8_snorm.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_snorm.b8g8r8a8_snorm.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_snorm.b8g8r8a8_snorm.general_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_snorm.b8g8r8a8_snorm.general_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_snorm.b8g8r8a8_snorm.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_snorm.b8g8r8a8_snorm.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_snorm.b8g8r8a8_snorm.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_snorm.b8g8r8a8_snorm.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_snorm.b8g8r8a8_snorm.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_snorm.b8g8r8a8_snorm.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_uscaled.b8g8r8a8_uscaled.optimal_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_uscaled.b8g8r8a8_uscaled.optimal_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_uscaled.b8g8r8a8_uscaled.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_uscaled.b8g8r8a8_uscaled.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_uscaled.b8g8r8a8_uscaled.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_uscaled.b8g8r8a8_uscaled.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_uscaled.b8g8r8a8_uscaled.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_uscaled.b8g8r8a8_uscaled.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_uscaled.b8g8r8a8_uscaled.optimal_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_uscaled.b8g8r8a8_uscaled.optimal_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_uscaled.b8g8r8a8_uscaled.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_uscaled.b8g8r8a8_uscaled.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_uscaled.b8g8r8a8_uscaled.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_uscaled.b8g8r8a8_uscaled.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_uscaled.b8g8r8a8_uscaled.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_uscaled.b8g8r8a8_uscaled.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_uscaled.b8g8r8a8_uscaled.general_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_uscaled.b8g8r8a8_uscaled.general_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_uscaled.b8g8r8a8_uscaled.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_uscaled.b8g8r8a8_uscaled.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_uscaled.b8g8r8a8_uscaled.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_uscaled.b8g8r8a8_uscaled.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_uscaled.b8g8r8a8_uscaled.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_uscaled.b8g8r8a8_uscaled.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_uscaled.b8g8r8a8_uscaled.general_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_uscaled.b8g8r8a8_uscaled.general_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_uscaled.b8g8r8a8_uscaled.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_uscaled.b8g8r8a8_uscaled.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_uscaled.b8g8r8a8_uscaled.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_uscaled.b8g8r8a8_uscaled.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_uscaled.b8g8r8a8_uscaled.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_uscaled.b8g8r8a8_uscaled.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_sscaled.b8g8r8a8_sscaled.optimal_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_sscaled.b8g8r8a8_sscaled.optimal_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_sscaled.b8g8r8a8_sscaled.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_sscaled.b8g8r8a8_sscaled.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_sscaled.b8g8r8a8_sscaled.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_sscaled.b8g8r8a8_sscaled.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_sscaled.b8g8r8a8_sscaled.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_sscaled.b8g8r8a8_sscaled.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_sscaled.b8g8r8a8_sscaled.optimal_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_sscaled.b8g8r8a8_sscaled.optimal_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_sscaled.b8g8r8a8_sscaled.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_sscaled.b8g8r8a8_sscaled.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_sscaled.b8g8r8a8_sscaled.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_sscaled.b8g8r8a8_sscaled.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_sscaled.b8g8r8a8_sscaled.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_sscaled.b8g8r8a8_sscaled.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_sscaled.b8g8r8a8_sscaled.general_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_sscaled.b8g8r8a8_sscaled.general_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_sscaled.b8g8r8a8_sscaled.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_sscaled.b8g8r8a8_sscaled.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_sscaled.b8g8r8a8_sscaled.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_sscaled.b8g8r8a8_sscaled.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_sscaled.b8g8r8a8_sscaled.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_sscaled.b8g8r8a8_sscaled.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_sscaled.b8g8r8a8_sscaled.general_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_sscaled.b8g8r8a8_sscaled.general_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_sscaled.b8g8r8a8_sscaled.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_sscaled.b8g8r8a8_sscaled.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_sscaled.b8g8r8a8_sscaled.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_sscaled.b8g8r8a8_sscaled.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_sscaled.b8g8r8a8_sscaled.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_sscaled.b8g8r8a8_sscaled.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_unorm_pack32.a8b8g8r8_unorm_pack32.optimal_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_unorm_pack32.a8b8g8r8_unorm_pack32.optimal_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_unorm_pack32.a8b8g8r8_unorm_pack32.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_unorm_pack32.a8b8g8r8_unorm_pack32.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_unorm_pack32.a8b8g8r8_unorm_pack32.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_unorm_pack32.a8b8g8r8_unorm_pack32.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_unorm_pack32.a8b8g8r8_unorm_pack32.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_unorm_pack32.a8b8g8r8_unorm_pack32.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_unorm_pack32.a8b8g8r8_unorm_pack32.optimal_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_unorm_pack32.a8b8g8r8_unorm_pack32.optimal_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_unorm_pack32.a8b8g8r8_unorm_pack32.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_unorm_pack32.a8b8g8r8_unorm_pack32.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_unorm_pack32.a8b8g8r8_unorm_pack32.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_unorm_pack32.a8b8g8r8_unorm_pack32.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_unorm_pack32.a8b8g8r8_unorm_pack32.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_unorm_pack32.a8b8g8r8_unorm_pack32.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_unorm_pack32.a8b8g8r8_unorm_pack32.general_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_unorm_pack32.a8b8g8r8_unorm_pack32.general_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_unorm_pack32.a8b8g8r8_unorm_pack32.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_unorm_pack32.a8b8g8r8_unorm_pack32.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_unorm_pack32.a8b8g8r8_unorm_pack32.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_unorm_pack32.a8b8g8r8_unorm_pack32.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_unorm_pack32.a8b8g8r8_unorm_pack32.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_unorm_pack32.a8b8g8r8_unorm_pack32.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_unorm_pack32.a8b8g8r8_unorm_pack32.general_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_unorm_pack32.a8b8g8r8_unorm_pack32.general_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_unorm_pack32.a8b8g8r8_unorm_pack32.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_unorm_pack32.a8b8g8r8_unorm_pack32.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_unorm_pack32.a8b8g8r8_unorm_pack32.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_unorm_pack32.a8b8g8r8_unorm_pack32.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_unorm_pack32.a8b8g8r8_unorm_pack32.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_unorm_pack32.a8b8g8r8_unorm_pack32.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_snorm_pack32.a8b8g8r8_snorm_pack32.optimal_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_snorm_pack32.a8b8g8r8_snorm_pack32.optimal_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_snorm_pack32.a8b8g8r8_snorm_pack32.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_snorm_pack32.a8b8g8r8_snorm_pack32.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_snorm_pack32.a8b8g8r8_snorm_pack32.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_snorm_pack32.a8b8g8r8_snorm_pack32.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_snorm_pack32.a8b8g8r8_snorm_pack32.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_snorm_pack32.a8b8g8r8_snorm_pack32.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_snorm_pack32.a8b8g8r8_snorm_pack32.optimal_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_snorm_pack32.a8b8g8r8_snorm_pack32.optimal_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_snorm_pack32.a8b8g8r8_snorm_pack32.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_snorm_pack32.a8b8g8r8_snorm_pack32.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_snorm_pack32.a8b8g8r8_snorm_pack32.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_snorm_pack32.a8b8g8r8_snorm_pack32.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_snorm_pack32.a8b8g8r8_snorm_pack32.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_snorm_pack32.a8b8g8r8_snorm_pack32.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_snorm_pack32.a8b8g8r8_snorm_pack32.general_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_snorm_pack32.a8b8g8r8_snorm_pack32.general_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_snorm_pack32.a8b8g8r8_snorm_pack32.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_snorm_pack32.a8b8g8r8_snorm_pack32.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_snorm_pack32.a8b8g8r8_snorm_pack32.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_snorm_pack32.a8b8g8r8_snorm_pack32.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_snorm_pack32.a8b8g8r8_snorm_pack32.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_snorm_pack32.a8b8g8r8_snorm_pack32.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_snorm_pack32.a8b8g8r8_snorm_pack32.general_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_snorm_pack32.a8b8g8r8_snorm_pack32.general_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_snorm_pack32.a8b8g8r8_snorm_pack32.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_snorm_pack32.a8b8g8r8_snorm_pack32.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_snorm_pack32.a8b8g8r8_snorm_pack32.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_snorm_pack32.a8b8g8r8_snorm_pack32.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_snorm_pack32.a8b8g8r8_snorm_pack32.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_snorm_pack32.a8b8g8r8_snorm_pack32.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_uscaled_pack32.a8b8g8r8_uscaled_pack32.optimal_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_uscaled_pack32.a8b8g8r8_uscaled_pack32.optimal_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_uscaled_pack32.a8b8g8r8_uscaled_pack32.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_uscaled_pack32.a8b8g8r8_uscaled_pack32.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_uscaled_pack32.a8b8g8r8_uscaled_pack32.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_uscaled_pack32.a8b8g8r8_uscaled_pack32.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_uscaled_pack32.a8b8g8r8_uscaled_pack32.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_uscaled_pack32.a8b8g8r8_uscaled_pack32.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_uscaled_pack32.a8b8g8r8_uscaled_pack32.optimal_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_uscaled_pack32.a8b8g8r8_uscaled_pack32.optimal_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_uscaled_pack32.a8b8g8r8_uscaled_pack32.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_uscaled_pack32.a8b8g8r8_uscaled_pack32.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_uscaled_pack32.a8b8g8r8_uscaled_pack32.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_uscaled_pack32.a8b8g8r8_uscaled_pack32.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_uscaled_pack32.a8b8g8r8_uscaled_pack32.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_uscaled_pack32.a8b8g8r8_uscaled_pack32.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_uscaled_pack32.a8b8g8r8_uscaled_pack32.general_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_uscaled_pack32.a8b8g8r8_uscaled_pack32.general_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_uscaled_pack32.a8b8g8r8_uscaled_pack32.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_uscaled_pack32.a8b8g8r8_uscaled_pack32.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_uscaled_pack32.a8b8g8r8_uscaled_pack32.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_uscaled_pack32.a8b8g8r8_uscaled_pack32.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_uscaled_pack32.a8b8g8r8_uscaled_pack32.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_uscaled_pack32.a8b8g8r8_uscaled_pack32.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_uscaled_pack32.a8b8g8r8_uscaled_pack32.general_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_uscaled_pack32.a8b8g8r8_uscaled_pack32.general_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_uscaled_pack32.a8b8g8r8_uscaled_pack32.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_uscaled_pack32.a8b8g8r8_uscaled_pack32.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_uscaled_pack32.a8b8g8r8_uscaled_pack32.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_uscaled_pack32.a8b8g8r8_uscaled_pack32.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_uscaled_pack32.a8b8g8r8_uscaled_pack32.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_uscaled_pack32.a8b8g8r8_uscaled_pack32.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_sscaled_pack32.a8b8g8r8_sscaled_pack32.optimal_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_sscaled_pack32.a8b8g8r8_sscaled_pack32.optimal_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_sscaled_pack32.a8b8g8r8_sscaled_pack32.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_sscaled_pack32.a8b8g8r8_sscaled_pack32.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_sscaled_pack32.a8b8g8r8_sscaled_pack32.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_sscaled_pack32.a8b8g8r8_sscaled_pack32.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_sscaled_pack32.a8b8g8r8_sscaled_pack32.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_sscaled_pack32.a8b8g8r8_sscaled_pack32.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_sscaled_pack32.a8b8g8r8_sscaled_pack32.optimal_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_sscaled_pack32.a8b8g8r8_sscaled_pack32.optimal_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_sscaled_pack32.a8b8g8r8_sscaled_pack32.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_sscaled_pack32.a8b8g8r8_sscaled_pack32.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_sscaled_pack32.a8b8g8r8_sscaled_pack32.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_sscaled_pack32.a8b8g8r8_sscaled_pack32.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_sscaled_pack32.a8b8g8r8_sscaled_pack32.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_sscaled_pack32.a8b8g8r8_sscaled_pack32.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_sscaled_pack32.a8b8g8r8_sscaled_pack32.general_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_sscaled_pack32.a8b8g8r8_sscaled_pack32.general_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_sscaled_pack32.a8b8g8r8_sscaled_pack32.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_sscaled_pack32.a8b8g8r8_sscaled_pack32.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_sscaled_pack32.a8b8g8r8_sscaled_pack32.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_sscaled_pack32.a8b8g8r8_sscaled_pack32.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_sscaled_pack32.a8b8g8r8_sscaled_pack32.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_sscaled_pack32.a8b8g8r8_sscaled_pack32.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_sscaled_pack32.a8b8g8r8_sscaled_pack32.general_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_sscaled_pack32.a8b8g8r8_sscaled_pack32.general_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_sscaled_pack32.a8b8g8r8_sscaled_pack32.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_sscaled_pack32.a8b8g8r8_sscaled_pack32.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_sscaled_pack32.a8b8g8r8_sscaled_pack32.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_sscaled_pack32.a8b8g8r8_sscaled_pack32.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_sscaled_pack32.a8b8g8r8_sscaled_pack32.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_sscaled_pack32.a8b8g8r8_sscaled_pack32.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_unorm_pack32.a2r10g10b10_unorm_pack32.optimal_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_unorm_pack32.a2r10g10b10_unorm_pack32.optimal_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_unorm_pack32.a2r10g10b10_unorm_pack32.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_unorm_pack32.a2r10g10b10_unorm_pack32.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_unorm_pack32.a2r10g10b10_unorm_pack32.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_unorm_pack32.a2r10g10b10_unorm_pack32.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_unorm_pack32.a2r10g10b10_unorm_pack32.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_unorm_pack32.a2r10g10b10_unorm_pack32.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_unorm_pack32.a2r10g10b10_unorm_pack32.optimal_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_unorm_pack32.a2r10g10b10_unorm_pack32.optimal_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_unorm_pack32.a2r10g10b10_unorm_pack32.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_unorm_pack32.a2r10g10b10_unorm_pack32.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_unorm_pack32.a2r10g10b10_unorm_pack32.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_unorm_pack32.a2r10g10b10_unorm_pack32.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_unorm_pack32.a2r10g10b10_unorm_pack32.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_unorm_pack32.a2r10g10b10_unorm_pack32.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_unorm_pack32.a2r10g10b10_unorm_pack32.general_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_unorm_pack32.a2r10g10b10_unorm_pack32.general_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_unorm_pack32.a2r10g10b10_unorm_pack32.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_unorm_pack32.a2r10g10b10_unorm_pack32.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_unorm_pack32.a2r10g10b10_unorm_pack32.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_unorm_pack32.a2r10g10b10_unorm_pack32.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_unorm_pack32.a2r10g10b10_unorm_pack32.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_unorm_pack32.a2r10g10b10_unorm_pack32.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_unorm_pack32.a2r10g10b10_unorm_pack32.general_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_unorm_pack32.a2r10g10b10_unorm_pack32.general_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_unorm_pack32.a2r10g10b10_unorm_pack32.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_unorm_pack32.a2r10g10b10_unorm_pack32.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_unorm_pack32.a2r10g10b10_unorm_pack32.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_unorm_pack32.a2r10g10b10_unorm_pack32.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_unorm_pack32.a2r10g10b10_unorm_pack32.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_unorm_pack32.a2r10g10b10_unorm_pack32.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_snorm_pack32.a2r10g10b10_snorm_pack32.optimal_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_snorm_pack32.a2r10g10b10_snorm_pack32.optimal_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_snorm_pack32.a2r10g10b10_snorm_pack32.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_snorm_pack32.a2r10g10b10_snorm_pack32.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_snorm_pack32.a2r10g10b10_snorm_pack32.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_snorm_pack32.a2r10g10b10_snorm_pack32.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_snorm_pack32.a2r10g10b10_snorm_pack32.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_snorm_pack32.a2r10g10b10_snorm_pack32.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_snorm_pack32.a2r10g10b10_snorm_pack32.optimal_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_snorm_pack32.a2r10g10b10_snorm_pack32.optimal_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_snorm_pack32.a2r10g10b10_snorm_pack32.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_snorm_pack32.a2r10g10b10_snorm_pack32.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_snorm_pack32.a2r10g10b10_snorm_pack32.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_snorm_pack32.a2r10g10b10_snorm_pack32.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_snorm_pack32.a2r10g10b10_snorm_pack32.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_snorm_pack32.a2r10g10b10_snorm_pack32.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_snorm_pack32.a2r10g10b10_snorm_pack32.general_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_snorm_pack32.a2r10g10b10_snorm_pack32.general_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_snorm_pack32.a2r10g10b10_snorm_pack32.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_snorm_pack32.a2r10g10b10_snorm_pack32.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_snorm_pack32.a2r10g10b10_snorm_pack32.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_snorm_pack32.a2r10g10b10_snorm_pack32.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_snorm_pack32.a2r10g10b10_snorm_pack32.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_snorm_pack32.a2r10g10b10_snorm_pack32.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_snorm_pack32.a2r10g10b10_snorm_pack32.general_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_snorm_pack32.a2r10g10b10_snorm_pack32.general_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_snorm_pack32.a2r10g10b10_snorm_pack32.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_snorm_pack32.a2r10g10b10_snorm_pack32.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_snorm_pack32.a2r10g10b10_snorm_pack32.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_snorm_pack32.a2r10g10b10_snorm_pack32.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_snorm_pack32.a2r10g10b10_snorm_pack32.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_snorm_pack32.a2r10g10b10_snorm_pack32.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_uscaled_pack32.a2r10g10b10_uscaled_pack32.optimal_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_uscaled_pack32.a2r10g10b10_uscaled_pack32.optimal_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_uscaled_pack32.a2r10g10b10_uscaled_pack32.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_uscaled_pack32.a2r10g10b10_uscaled_pack32.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_uscaled_pack32.a2r10g10b10_uscaled_pack32.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_uscaled_pack32.a2r10g10b10_uscaled_pack32.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_uscaled_pack32.a2r10g10b10_uscaled_pack32.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_uscaled_pack32.a2r10g10b10_uscaled_pack32.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_uscaled_pack32.a2r10g10b10_uscaled_pack32.optimal_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_uscaled_pack32.a2r10g10b10_uscaled_pack32.optimal_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_uscaled_pack32.a2r10g10b10_uscaled_pack32.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_uscaled_pack32.a2r10g10b10_uscaled_pack32.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_uscaled_pack32.a2r10g10b10_uscaled_pack32.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_uscaled_pack32.a2r10g10b10_uscaled_pack32.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_uscaled_pack32.a2r10g10b10_uscaled_pack32.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_uscaled_pack32.a2r10g10b10_uscaled_pack32.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_uscaled_pack32.a2r10g10b10_uscaled_pack32.general_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_uscaled_pack32.a2r10g10b10_uscaled_pack32.general_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_uscaled_pack32.a2r10g10b10_uscaled_pack32.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_uscaled_pack32.a2r10g10b10_uscaled_pack32.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_uscaled_pack32.a2r10g10b10_uscaled_pack32.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_uscaled_pack32.a2r10g10b10_uscaled_pack32.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_uscaled_pack32.a2r10g10b10_uscaled_pack32.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_uscaled_pack32.a2r10g10b10_uscaled_pack32.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_uscaled_pack32.a2r10g10b10_uscaled_pack32.general_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_uscaled_pack32.a2r10g10b10_uscaled_pack32.general_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_uscaled_pack32.a2r10g10b10_uscaled_pack32.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_uscaled_pack32.a2r10g10b10_uscaled_pack32.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_uscaled_pack32.a2r10g10b10_uscaled_pack32.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_uscaled_pack32.a2r10g10b10_uscaled_pack32.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_uscaled_pack32.a2r10g10b10_uscaled_pack32.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_uscaled_pack32.a2r10g10b10_uscaled_pack32.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_sscaled_pack32.a2r10g10b10_sscaled_pack32.optimal_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_sscaled_pack32.a2r10g10b10_sscaled_pack32.optimal_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_sscaled_pack32.a2r10g10b10_sscaled_pack32.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_sscaled_pack32.a2r10g10b10_sscaled_pack32.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_sscaled_pack32.a2r10g10b10_sscaled_pack32.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_sscaled_pack32.a2r10g10b10_sscaled_pack32.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_sscaled_pack32.a2r10g10b10_sscaled_pack32.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_sscaled_pack32.a2r10g10b10_sscaled_pack32.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_sscaled_pack32.a2r10g10b10_sscaled_pack32.optimal_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_sscaled_pack32.a2r10g10b10_sscaled_pack32.optimal_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_sscaled_pack32.a2r10g10b10_sscaled_pack32.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_sscaled_pack32.a2r10g10b10_sscaled_pack32.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_sscaled_pack32.a2r10g10b10_sscaled_pack32.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_sscaled_pack32.a2r10g10b10_sscaled_pack32.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_sscaled_pack32.a2r10g10b10_sscaled_pack32.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_sscaled_pack32.a2r10g10b10_sscaled_pack32.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_sscaled_pack32.a2r10g10b10_sscaled_pack32.general_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_sscaled_pack32.a2r10g10b10_sscaled_pack32.general_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_sscaled_pack32.a2r10g10b10_sscaled_pack32.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_sscaled_pack32.a2r10g10b10_sscaled_pack32.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_sscaled_pack32.a2r10g10b10_sscaled_pack32.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_sscaled_pack32.a2r10g10b10_sscaled_pack32.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_sscaled_pack32.a2r10g10b10_sscaled_pack32.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_sscaled_pack32.a2r10g10b10_sscaled_pack32.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_sscaled_pack32.a2r10g10b10_sscaled_pack32.general_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_sscaled_pack32.a2r10g10b10_sscaled_pack32.general_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_sscaled_pack32.a2r10g10b10_sscaled_pack32.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_sscaled_pack32.a2r10g10b10_sscaled_pack32.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_sscaled_pack32.a2r10g10b10_sscaled_pack32.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_sscaled_pack32.a2r10g10b10_sscaled_pack32.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_sscaled_pack32.a2r10g10b10_sscaled_pack32.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2r10g10b10_sscaled_pack32.a2r10g10b10_sscaled_pack32.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_unorm_pack32.a2b10g10r10_unorm_pack32.optimal_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_unorm_pack32.a2b10g10r10_unorm_pack32.optimal_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_unorm_pack32.a2b10g10r10_unorm_pack32.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_unorm_pack32.a2b10g10r10_unorm_pack32.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_unorm_pack32.a2b10g10r10_unorm_pack32.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_unorm_pack32.a2b10g10r10_unorm_pack32.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_unorm_pack32.a2b10g10r10_unorm_pack32.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_unorm_pack32.a2b10g10r10_unorm_pack32.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_unorm_pack32.a2b10g10r10_unorm_pack32.optimal_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_unorm_pack32.a2b10g10r10_unorm_pack32.optimal_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_unorm_pack32.a2b10g10r10_unorm_pack32.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_unorm_pack32.a2b10g10r10_unorm_pack32.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_unorm_pack32.a2b10g10r10_unorm_pack32.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_unorm_pack32.a2b10g10r10_unorm_pack32.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_unorm_pack32.a2b10g10r10_unorm_pack32.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_unorm_pack32.a2b10g10r10_unorm_pack32.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_unorm_pack32.a2b10g10r10_unorm_pack32.general_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_unorm_pack32.a2b10g10r10_unorm_pack32.general_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_unorm_pack32.a2b10g10r10_unorm_pack32.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_unorm_pack32.a2b10g10r10_unorm_pack32.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_unorm_pack32.a2b10g10r10_unorm_pack32.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_unorm_pack32.a2b10g10r10_unorm_pack32.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_unorm_pack32.a2b10g10r10_unorm_pack32.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_unorm_pack32.a2b10g10r10_unorm_pack32.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_unorm_pack32.a2b10g10r10_unorm_pack32.general_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_unorm_pack32.a2b10g10r10_unorm_pack32.general_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_unorm_pack32.a2b10g10r10_unorm_pack32.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_unorm_pack32.a2b10g10r10_unorm_pack32.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_unorm_pack32.a2b10g10r10_unorm_pack32.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_unorm_pack32.a2b10g10r10_unorm_pack32.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_unorm_pack32.a2b10g10r10_unorm_pack32.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_unorm_pack32.a2b10g10r10_unorm_pack32.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_snorm_pack32.a2b10g10r10_snorm_pack32.optimal_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_snorm_pack32.a2b10g10r10_snorm_pack32.optimal_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_snorm_pack32.a2b10g10r10_snorm_pack32.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_snorm_pack32.a2b10g10r10_snorm_pack32.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_snorm_pack32.a2b10g10r10_snorm_pack32.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_snorm_pack32.a2b10g10r10_snorm_pack32.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_snorm_pack32.a2b10g10r10_snorm_pack32.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_snorm_pack32.a2b10g10r10_snorm_pack32.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_snorm_pack32.a2b10g10r10_snorm_pack32.optimal_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_snorm_pack32.a2b10g10r10_snorm_pack32.optimal_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_snorm_pack32.a2b10g10r10_snorm_pack32.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_snorm_pack32.a2b10g10r10_snorm_pack32.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_snorm_pack32.a2b10g10r10_snorm_pack32.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_snorm_pack32.a2b10g10r10_snorm_pack32.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_snorm_pack32.a2b10g10r10_snorm_pack32.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_snorm_pack32.a2b10g10r10_snorm_pack32.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_snorm_pack32.a2b10g10r10_snorm_pack32.general_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_snorm_pack32.a2b10g10r10_snorm_pack32.general_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_snorm_pack32.a2b10g10r10_snorm_pack32.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_snorm_pack32.a2b10g10r10_snorm_pack32.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_snorm_pack32.a2b10g10r10_snorm_pack32.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_snorm_pack32.a2b10g10r10_snorm_pack32.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_snorm_pack32.a2b10g10r10_snorm_pack32.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_snorm_pack32.a2b10g10r10_snorm_pack32.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_snorm_pack32.a2b10g10r10_snorm_pack32.general_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_snorm_pack32.a2b10g10r10_snorm_pack32.general_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_snorm_pack32.a2b10g10r10_snorm_pack32.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_snorm_pack32.a2b10g10r10_snorm_pack32.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_snorm_pack32.a2b10g10r10_snorm_pack32.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_snorm_pack32.a2b10g10r10_snorm_pack32.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_snorm_pack32.a2b10g10r10_snorm_pack32.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_snorm_pack32.a2b10g10r10_snorm_pack32.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_uscaled_pack32.a2b10g10r10_uscaled_pack32.optimal_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_uscaled_pack32.a2b10g10r10_uscaled_pack32.optimal_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_uscaled_pack32.a2b10g10r10_uscaled_pack32.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_uscaled_pack32.a2b10g10r10_uscaled_pack32.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_uscaled_pack32.a2b10g10r10_uscaled_pack32.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_uscaled_pack32.a2b10g10r10_uscaled_pack32.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_uscaled_pack32.a2b10g10r10_uscaled_pack32.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_uscaled_pack32.a2b10g10r10_uscaled_pack32.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_uscaled_pack32.a2b10g10r10_uscaled_pack32.optimal_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_uscaled_pack32.a2b10g10r10_uscaled_pack32.optimal_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_uscaled_pack32.a2b10g10r10_uscaled_pack32.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_uscaled_pack32.a2b10g10r10_uscaled_pack32.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_uscaled_pack32.a2b10g10r10_uscaled_pack32.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_uscaled_pack32.a2b10g10r10_uscaled_pack32.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_uscaled_pack32.a2b10g10r10_uscaled_pack32.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_uscaled_pack32.a2b10g10r10_uscaled_pack32.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_uscaled_pack32.a2b10g10r10_uscaled_pack32.general_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_uscaled_pack32.a2b10g10r10_uscaled_pack32.general_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_uscaled_pack32.a2b10g10r10_uscaled_pack32.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_uscaled_pack32.a2b10g10r10_uscaled_pack32.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_uscaled_pack32.a2b10g10r10_uscaled_pack32.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_uscaled_pack32.a2b10g10r10_uscaled_pack32.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_uscaled_pack32.a2b10g10r10_uscaled_pack32.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_uscaled_pack32.a2b10g10r10_uscaled_pack32.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_uscaled_pack32.a2b10g10r10_uscaled_pack32.general_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_uscaled_pack32.a2b10g10r10_uscaled_pack32.general_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_uscaled_pack32.a2b10g10r10_uscaled_pack32.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_uscaled_pack32.a2b10g10r10_uscaled_pack32.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_uscaled_pack32.a2b10g10r10_uscaled_pack32.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_uscaled_pack32.a2b10g10r10_uscaled_pack32.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_uscaled_pack32.a2b10g10r10_uscaled_pack32.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_uscaled_pack32.a2b10g10r10_uscaled_pack32.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_sscaled_pack32.a2b10g10r10_sscaled_pack32.optimal_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_sscaled_pack32.a2b10g10r10_sscaled_pack32.optimal_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_sscaled_pack32.a2b10g10r10_sscaled_pack32.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_sscaled_pack32.a2b10g10r10_sscaled_pack32.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_sscaled_pack32.a2b10g10r10_sscaled_pack32.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_sscaled_pack32.a2b10g10r10_sscaled_pack32.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_sscaled_pack32.a2b10g10r10_sscaled_pack32.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_sscaled_pack32.a2b10g10r10_sscaled_pack32.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_sscaled_pack32.a2b10g10r10_sscaled_pack32.optimal_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_sscaled_pack32.a2b10g10r10_sscaled_pack32.optimal_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_sscaled_pack32.a2b10g10r10_sscaled_pack32.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_sscaled_pack32.a2b10g10r10_sscaled_pack32.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_sscaled_pack32.a2b10g10r10_sscaled_pack32.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_sscaled_pack32.a2b10g10r10_sscaled_pack32.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_sscaled_pack32.a2b10g10r10_sscaled_pack32.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_sscaled_pack32.a2b10g10r10_sscaled_pack32.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_sscaled_pack32.a2b10g10r10_sscaled_pack32.general_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_sscaled_pack32.a2b10g10r10_sscaled_pack32.general_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_sscaled_pack32.a2b10g10r10_sscaled_pack32.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_sscaled_pack32.a2b10g10r10_sscaled_pack32.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_sscaled_pack32.a2b10g10r10_sscaled_pack32.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_sscaled_pack32.a2b10g10r10_sscaled_pack32.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_sscaled_pack32.a2b10g10r10_sscaled_pack32.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_sscaled_pack32.a2b10g10r10_sscaled_pack32.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_sscaled_pack32.a2b10g10r10_sscaled_pack32.general_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_sscaled_pack32.a2b10g10r10_sscaled_pack32.general_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_sscaled_pack32.a2b10g10r10_sscaled_pack32.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_sscaled_pack32.a2b10g10r10_sscaled_pack32.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_sscaled_pack32.a2b10g10r10_sscaled_pack32.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_sscaled_pack32.a2b10g10r10_sscaled_pack32.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_sscaled_pack32.a2b10g10r10_sscaled_pack32.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a2b10g10r10_sscaled_pack32.a2b10g10r10_sscaled_pack32.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_unorm.r16_unorm.optimal_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_unorm.r16_unorm.optimal_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_unorm.r16_unorm.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_unorm.r16_unorm.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_unorm.r16_unorm.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_unorm.r16_unorm.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_unorm.r16_unorm.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_unorm.r16_unorm.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_unorm.r16_unorm.optimal_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_unorm.r16_unorm.optimal_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_unorm.r16_unorm.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_unorm.r16_unorm.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_unorm.r16_unorm.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_unorm.r16_unorm.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_unorm.r16_unorm.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_unorm.r16_unorm.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_unorm.r16_unorm.general_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_unorm.r16_unorm.general_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_unorm.r16_unorm.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_unorm.r16_unorm.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_unorm.r16_unorm.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_unorm.r16_unorm.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_unorm.r16_unorm.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_unorm.r16_unorm.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_unorm.r16_unorm.general_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_unorm.r16_unorm.general_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_unorm.r16_unorm.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_unorm.r16_unorm.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_unorm.r16_unorm.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_unorm.r16_unorm.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_unorm.r16_unorm.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_unorm.r16_unorm.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_snorm.r16_snorm.optimal_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_snorm.r16_snorm.optimal_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_snorm.r16_snorm.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_snorm.r16_snorm.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_snorm.r16_snorm.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_snorm.r16_snorm.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_snorm.r16_snorm.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_snorm.r16_snorm.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_snorm.r16_snorm.optimal_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_snorm.r16_snorm.optimal_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_snorm.r16_snorm.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_snorm.r16_snorm.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_snorm.r16_snorm.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_snorm.r16_snorm.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_snorm.r16_snorm.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_snorm.r16_snorm.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_snorm.r16_snorm.general_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_snorm.r16_snorm.general_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_snorm.r16_snorm.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_snorm.r16_snorm.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_snorm.r16_snorm.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_snorm.r16_snorm.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_snorm.r16_snorm.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_snorm.r16_snorm.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_snorm.r16_snorm.general_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_snorm.r16_snorm.general_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_snorm.r16_snorm.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_snorm.r16_snorm.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_snorm.r16_snorm.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_snorm.r16_snorm.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_snorm.r16_snorm.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_snorm.r16_snorm.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_uscaled.r16_uscaled.optimal_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_uscaled.r16_uscaled.optimal_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_uscaled.r16_uscaled.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_uscaled.r16_uscaled.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_uscaled.r16_uscaled.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_uscaled.r16_uscaled.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_uscaled.r16_uscaled.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_uscaled.r16_uscaled.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_uscaled.r16_uscaled.optimal_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_uscaled.r16_uscaled.optimal_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_uscaled.r16_uscaled.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_uscaled.r16_uscaled.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_uscaled.r16_uscaled.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_uscaled.r16_uscaled.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_uscaled.r16_uscaled.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_uscaled.r16_uscaled.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_uscaled.r16_uscaled.general_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_uscaled.r16_uscaled.general_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_uscaled.r16_uscaled.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_uscaled.r16_uscaled.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_uscaled.r16_uscaled.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_uscaled.r16_uscaled.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_uscaled.r16_uscaled.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_uscaled.r16_uscaled.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_uscaled.r16_uscaled.general_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_uscaled.r16_uscaled.general_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_uscaled.r16_uscaled.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_uscaled.r16_uscaled.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_uscaled.r16_uscaled.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_uscaled.r16_uscaled.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_uscaled.r16_uscaled.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_uscaled.r16_uscaled.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sscaled.r16_sscaled.optimal_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sscaled.r16_sscaled.optimal_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sscaled.r16_sscaled.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sscaled.r16_sscaled.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sscaled.r16_sscaled.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sscaled.r16_sscaled.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sscaled.r16_sscaled.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sscaled.r16_sscaled.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sscaled.r16_sscaled.optimal_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sscaled.r16_sscaled.optimal_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sscaled.r16_sscaled.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sscaled.r16_sscaled.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sscaled.r16_sscaled.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sscaled.r16_sscaled.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sscaled.r16_sscaled.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sscaled.r16_sscaled.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sscaled.r16_sscaled.general_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sscaled.r16_sscaled.general_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sscaled.r16_sscaled.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sscaled.r16_sscaled.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sscaled.r16_sscaled.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sscaled.r16_sscaled.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sscaled.r16_sscaled.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sscaled.r16_sscaled.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sscaled.r16_sscaled.general_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sscaled.r16_sscaled.general_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sscaled.r16_sscaled.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sscaled.r16_sscaled.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sscaled.r16_sscaled.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sscaled.r16_sscaled.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sscaled.r16_sscaled.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sscaled.r16_sscaled.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sfloat.r16_sfloat.optimal_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sfloat.r16_sfloat.optimal_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sfloat.r16_sfloat.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sfloat.r16_sfloat.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sfloat.r16_sfloat.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sfloat.r16_sfloat.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sfloat.r16_sfloat.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sfloat.r16_sfloat.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sfloat.r16_sfloat.optimal_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sfloat.r16_sfloat.optimal_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sfloat.r16_sfloat.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sfloat.r16_sfloat.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sfloat.r16_sfloat.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sfloat.r16_sfloat.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sfloat.r16_sfloat.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sfloat.r16_sfloat.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sfloat.r16_sfloat.optimal_linear_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sfloat.r16_sfloat.optimal_linear_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sfloat.r16_sfloat.optimal_linear_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sfloat.r16_sfloat.optimal_linear_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sfloat.r16_sfloat.optimal_linear_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sfloat.r16_sfloat.optimal_linear_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sfloat.r16_sfloat.optimal_linear_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sfloat.r16_sfloat.optimal_linear_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sfloat.r16_sfloat.general_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sfloat.r16_sfloat.general_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sfloat.r16_sfloat.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sfloat.r16_sfloat.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sfloat.r16_sfloat.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sfloat.r16_sfloat.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sfloat.r16_sfloat.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sfloat.r16_sfloat.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sfloat.r16_sfloat.general_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sfloat.r16_sfloat.general_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sfloat.r16_sfloat.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sfloat.r16_sfloat.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sfloat.r16_sfloat.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sfloat.r16_sfloat.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sfloat.r16_sfloat.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sfloat.r16_sfloat.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sfloat.r16_sfloat.general_linear_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sfloat.r16_sfloat.general_linear_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sfloat.r16_sfloat.general_linear_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sfloat.r16_sfloat.general_linear_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sfloat.r16_sfloat.general_linear_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sfloat.r16_sfloat.general_linear_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sfloat.r16_sfloat.general_linear_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sfloat.r16_sfloat.general_linear_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sfloat.r16_sfloat.linear_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sfloat.r16_sfloat.linear_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sfloat.r16_sfloat.linear_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sfloat.r16_sfloat.linear_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sfloat.r16_sfloat.linear_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sfloat.r16_sfloat.linear_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sfloat.r16_sfloat.linear_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sfloat.r16_sfloat.linear_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sfloat.r16_sfloat.linear_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sfloat.r16_sfloat.linear_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sfloat.r16_sfloat.linear_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sfloat.r16_sfloat.linear_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sfloat.r16_sfloat.linear_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sfloat.r16_sfloat.linear_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sfloat.r16_sfloat.linear_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sfloat.r16_sfloat.linear_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sfloat.r16_sfloat.linear_linear_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sfloat.r16_sfloat.linear_linear_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sfloat.r16_sfloat.linear_linear_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sfloat.r16_sfloat.linear_linear_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sfloat.r16_sfloat.linear_linear_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sfloat.r16_sfloat.linear_linear_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sfloat.r16_sfloat.linear_linear_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16_sfloat.r16_sfloat.linear_linear_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_unorm.r16g16_unorm.optimal_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_unorm.r16g16_unorm.optimal_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_unorm.r16g16_unorm.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_unorm.r16g16_unorm.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_unorm.r16g16_unorm.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_unorm.r16g16_unorm.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_unorm.r16g16_unorm.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_unorm.r16g16_unorm.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_unorm.r16g16_unorm.optimal_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_unorm.r16g16_unorm.optimal_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_unorm.r16g16_unorm.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_unorm.r16g16_unorm.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_unorm.r16g16_unorm.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_unorm.r16g16_unorm.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_unorm.r16g16_unorm.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_unorm.r16g16_unorm.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_unorm.r16g16_unorm.general_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_unorm.r16g16_unorm.general_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_unorm.r16g16_unorm.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_unorm.r16g16_unorm.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_unorm.r16g16_unorm.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_unorm.r16g16_unorm.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_unorm.r16g16_unorm.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_unorm.r16g16_unorm.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_unorm.r16g16_unorm.general_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_unorm.r16g16_unorm.general_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_unorm.r16g16_unorm.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_unorm.r16g16_unorm.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_unorm.r16g16_unorm.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_unorm.r16g16_unorm.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_unorm.r16g16_unorm.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_unorm.r16g16_unorm.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_snorm.r16g16_snorm.optimal_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_snorm.r16g16_snorm.optimal_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_snorm.r16g16_snorm.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_snorm.r16g16_snorm.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_snorm.r16g16_snorm.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_snorm.r16g16_snorm.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_snorm.r16g16_snorm.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_snorm.r16g16_snorm.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_snorm.r16g16_snorm.optimal_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_snorm.r16g16_snorm.optimal_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_snorm.r16g16_snorm.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_snorm.r16g16_snorm.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_snorm.r16g16_snorm.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_snorm.r16g16_snorm.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_snorm.r16g16_snorm.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_snorm.r16g16_snorm.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_snorm.r16g16_snorm.general_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_snorm.r16g16_snorm.general_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_snorm.r16g16_snorm.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_snorm.r16g16_snorm.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_snorm.r16g16_snorm.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_snorm.r16g16_snorm.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_snorm.r16g16_snorm.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_snorm.r16g16_snorm.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_snorm.r16g16_snorm.general_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_snorm.r16g16_snorm.general_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_snorm.r16g16_snorm.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_snorm.r16g16_snorm.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_snorm.r16g16_snorm.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_snorm.r16g16_snorm.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_snorm.r16g16_snorm.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_snorm.r16g16_snorm.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_uscaled.r16g16_uscaled.optimal_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_uscaled.r16g16_uscaled.optimal_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_uscaled.r16g16_uscaled.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_uscaled.r16g16_uscaled.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_uscaled.r16g16_uscaled.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_uscaled.r16g16_uscaled.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_uscaled.r16g16_uscaled.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_uscaled.r16g16_uscaled.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_uscaled.r16g16_uscaled.optimal_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_uscaled.r16g16_uscaled.optimal_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_uscaled.r16g16_uscaled.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_uscaled.r16g16_uscaled.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_uscaled.r16g16_uscaled.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_uscaled.r16g16_uscaled.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_uscaled.r16g16_uscaled.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_uscaled.r16g16_uscaled.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_uscaled.r16g16_uscaled.general_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_uscaled.r16g16_uscaled.general_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_uscaled.r16g16_uscaled.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_uscaled.r16g16_uscaled.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_uscaled.r16g16_uscaled.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_uscaled.r16g16_uscaled.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_uscaled.r16g16_uscaled.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_uscaled.r16g16_uscaled.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_uscaled.r16g16_uscaled.general_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_uscaled.r16g16_uscaled.general_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_uscaled.r16g16_uscaled.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_uscaled.r16g16_uscaled.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_uscaled.r16g16_uscaled.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_uscaled.r16g16_uscaled.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_uscaled.r16g16_uscaled.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_uscaled.r16g16_uscaled.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_sscaled.r16g16_sscaled.optimal_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_sscaled.r16g16_sscaled.optimal_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_sscaled.r16g16_sscaled.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_sscaled.r16g16_sscaled.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_sscaled.r16g16_sscaled.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_sscaled.r16g16_sscaled.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_sscaled.r16g16_sscaled.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_sscaled.r16g16_sscaled.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_sscaled.r16g16_sscaled.optimal_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_sscaled.r16g16_sscaled.optimal_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_sscaled.r16g16_sscaled.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_sscaled.r16g16_sscaled.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_sscaled.r16g16_sscaled.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_sscaled.r16g16_sscaled.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_sscaled.r16g16_sscaled.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_sscaled.r16g16_sscaled.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_sscaled.r16g16_sscaled.general_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_sscaled.r16g16_sscaled.general_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_sscaled.r16g16_sscaled.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_sscaled.r16g16_sscaled.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_sscaled.r16g16_sscaled.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_sscaled.r16g16_sscaled.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_sscaled.r16g16_sscaled.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_sscaled.r16g16_sscaled.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_sscaled.r16g16_sscaled.general_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_sscaled.r16g16_sscaled.general_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_sscaled.r16g16_sscaled.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_sscaled.r16g16_sscaled.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_sscaled.r16g16_sscaled.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_sscaled.r16g16_sscaled.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_sscaled.r16g16_sscaled.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_sscaled.r16g16_sscaled.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_sfloat.r16g16_sfloat.optimal_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_sfloat.r16g16_sfloat.optimal_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_sfloat.r16g16_sfloat.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_sfloat.r16g16_sfloat.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_sfloat.r16g16_sfloat.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_sfloat.r16g16_sfloat.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_sfloat.r16g16_sfloat.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_sfloat.r16g16_sfloat.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_sfloat.r16g16_sfloat.optimal_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_sfloat.r16g16_sfloat.optimal_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_sfloat.r16g16_sfloat.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_sfloat.r16g16_sfloat.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_sfloat.r16g16_sfloat.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_sfloat.r16g16_sfloat.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_sfloat.r16g16_sfloat.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_sfloat.r16g16_sfloat.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_sfloat.r16g16_sfloat.general_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_sfloat.r16g16_sfloat.general_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_sfloat.r16g16_sfloat.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_sfloat.r16g16_sfloat.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_sfloat.r16g16_sfloat.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_sfloat.r16g16_sfloat.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_sfloat.r16g16_sfloat.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_sfloat.r16g16_sfloat.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_sfloat.r16g16_sfloat.general_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_sfloat.r16g16_sfloat.general_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_sfloat.r16g16_sfloat.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_sfloat.r16g16_sfloat.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_sfloat.r16g16_sfloat.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_sfloat.r16g16_sfloat.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_sfloat.r16g16_sfloat.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16_sfloat.r16g16_sfloat.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_unorm.r16g16b16_unorm.optimal_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_unorm.r16g16b16_unorm.optimal_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_unorm.r16g16b16_unorm.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_unorm.r16g16b16_unorm.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_unorm.r16g16b16_unorm.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_unorm.r16g16b16_unorm.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_unorm.r16g16b16_unorm.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_unorm.r16g16b16_unorm.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_unorm.r16g16b16_unorm.optimal_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_unorm.r16g16b16_unorm.optimal_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_unorm.r16g16b16_unorm.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_unorm.r16g16b16_unorm.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_unorm.r16g16b16_unorm.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_unorm.r16g16b16_unorm.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_unorm.r16g16b16_unorm.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_unorm.r16g16b16_unorm.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_unorm.r16g16b16_unorm.optimal_linear_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_unorm.r16g16b16_unorm.optimal_linear_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_unorm.r16g16b16_unorm.optimal_linear_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_unorm.r16g16b16_unorm.optimal_linear_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_unorm.r16g16b16_unorm.optimal_linear_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_unorm.r16g16b16_unorm.optimal_linear_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_unorm.r16g16b16_unorm.optimal_linear_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_unorm.r16g16b16_unorm.optimal_linear_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_unorm.r16g16b16_unorm.general_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_unorm.r16g16b16_unorm.general_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_unorm.r16g16b16_unorm.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_unorm.r16g16b16_unorm.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_unorm.r16g16b16_unorm.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_unorm.r16g16b16_unorm.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_unorm.r16g16b16_unorm.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_unorm.r16g16b16_unorm.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_unorm.r16g16b16_unorm.general_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_unorm.r16g16b16_unorm.general_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_unorm.r16g16b16_unorm.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_unorm.r16g16b16_unorm.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_unorm.r16g16b16_unorm.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_unorm.r16g16b16_unorm.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_unorm.r16g16b16_unorm.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_unorm.r16g16b16_unorm.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_unorm.r16g16b16_unorm.general_linear_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_unorm.r16g16b16_unorm.general_linear_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_unorm.r16g16b16_unorm.general_linear_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_unorm.r16g16b16_unorm.general_linear_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_unorm.r16g16b16_unorm.general_linear_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_unorm.r16g16b16_unorm.general_linear_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_unorm.r16g16b16_unorm.general_linear_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_unorm.r16g16b16_unorm.general_linear_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_unorm.r16g16b16_unorm.linear_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_unorm.r16g16b16_unorm.linear_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_unorm.r16g16b16_unorm.linear_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_unorm.r16g16b16_unorm.linear_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_unorm.r16g16b16_unorm.linear_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_unorm.r16g16b16_unorm.linear_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_unorm.r16g16b16_unorm.linear_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_unorm.r16g16b16_unorm.linear_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_unorm.r16g16b16_unorm.linear_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_unorm.r16g16b16_unorm.linear_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_unorm.r16g16b16_unorm.linear_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_unorm.r16g16b16_unorm.linear_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_unorm.r16g16b16_unorm.linear_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_unorm.r16g16b16_unorm.linear_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_unorm.r16g16b16_unorm.linear_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_unorm.r16g16b16_unorm.linear_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_unorm.r16g16b16_unorm.linear_linear_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_unorm.r16g16b16_unorm.linear_linear_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_unorm.r16g16b16_unorm.linear_linear_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_unorm.r16g16b16_unorm.linear_linear_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_unorm.r16g16b16_unorm.linear_linear_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_unorm.r16g16b16_unorm.linear_linear_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_unorm.r16g16b16_unorm.linear_linear_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_unorm.r16g16b16_unorm.linear_linear_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_snorm.r16g16b16_snorm.optimal_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_snorm.r16g16b16_snorm.optimal_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_snorm.r16g16b16_snorm.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_snorm.r16g16b16_snorm.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_snorm.r16g16b16_snorm.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_snorm.r16g16b16_snorm.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_snorm.r16g16b16_snorm.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_snorm.r16g16b16_snorm.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_snorm.r16g16b16_snorm.optimal_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_snorm.r16g16b16_snorm.optimal_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_snorm.r16g16b16_snorm.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_snorm.r16g16b16_snorm.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_snorm.r16g16b16_snorm.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_snorm.r16g16b16_snorm.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_snorm.r16g16b16_snorm.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_snorm.r16g16b16_snorm.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_snorm.r16g16b16_snorm.general_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_snorm.r16g16b16_snorm.general_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_snorm.r16g16b16_snorm.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_snorm.r16g16b16_snorm.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_snorm.r16g16b16_snorm.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_snorm.r16g16b16_snorm.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_snorm.r16g16b16_snorm.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_snorm.r16g16b16_snorm.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_snorm.r16g16b16_snorm.general_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_snorm.r16g16b16_snorm.general_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_snorm.r16g16b16_snorm.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_snorm.r16g16b16_snorm.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_snorm.r16g16b16_snorm.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_snorm.r16g16b16_snorm.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_snorm.r16g16b16_snorm.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_snorm.r16g16b16_snorm.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_uscaled.r16g16b16_uscaled.optimal_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_uscaled.r16g16b16_uscaled.optimal_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_uscaled.r16g16b16_uscaled.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_uscaled.r16g16b16_uscaled.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_uscaled.r16g16b16_uscaled.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_uscaled.r16g16b16_uscaled.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_uscaled.r16g16b16_uscaled.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_uscaled.r16g16b16_uscaled.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_uscaled.r16g16b16_uscaled.optimal_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_uscaled.r16g16b16_uscaled.optimal_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_uscaled.r16g16b16_uscaled.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_uscaled.r16g16b16_uscaled.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_uscaled.r16g16b16_uscaled.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_uscaled.r16g16b16_uscaled.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_uscaled.r16g16b16_uscaled.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_uscaled.r16g16b16_uscaled.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_uscaled.r16g16b16_uscaled.general_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_uscaled.r16g16b16_uscaled.general_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_uscaled.r16g16b16_uscaled.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_uscaled.r16g16b16_uscaled.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_uscaled.r16g16b16_uscaled.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_uscaled.r16g16b16_uscaled.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_uscaled.r16g16b16_uscaled.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_uscaled.r16g16b16_uscaled.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_uscaled.r16g16b16_uscaled.general_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_uscaled.r16g16b16_uscaled.general_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_uscaled.r16g16b16_uscaled.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_uscaled.r16g16b16_uscaled.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_uscaled.r16g16b16_uscaled.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_uscaled.r16g16b16_uscaled.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_uscaled.r16g16b16_uscaled.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_uscaled.r16g16b16_uscaled.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sscaled.r16g16b16_sscaled.optimal_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sscaled.r16g16b16_sscaled.optimal_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sscaled.r16g16b16_sscaled.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sscaled.r16g16b16_sscaled.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sscaled.r16g16b16_sscaled.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sscaled.r16g16b16_sscaled.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sscaled.r16g16b16_sscaled.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sscaled.r16g16b16_sscaled.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sscaled.r16g16b16_sscaled.optimal_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sscaled.r16g16b16_sscaled.optimal_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sscaled.r16g16b16_sscaled.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sscaled.r16g16b16_sscaled.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sscaled.r16g16b16_sscaled.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sscaled.r16g16b16_sscaled.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sscaled.r16g16b16_sscaled.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sscaled.r16g16b16_sscaled.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sscaled.r16g16b16_sscaled.general_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sscaled.r16g16b16_sscaled.general_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sscaled.r16g16b16_sscaled.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sscaled.r16g16b16_sscaled.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sscaled.r16g16b16_sscaled.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sscaled.r16g16b16_sscaled.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sscaled.r16g16b16_sscaled.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sscaled.r16g16b16_sscaled.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sscaled.r16g16b16_sscaled.general_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sscaled.r16g16b16_sscaled.general_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sscaled.r16g16b16_sscaled.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sscaled.r16g16b16_sscaled.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sscaled.r16g16b16_sscaled.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sscaled.r16g16b16_sscaled.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sscaled.r16g16b16_sscaled.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sscaled.r16g16b16_sscaled.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sfloat.r16g16b16_sfloat.optimal_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sfloat.r16g16b16_sfloat.optimal_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sfloat.r16g16b16_sfloat.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sfloat.r16g16b16_sfloat.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sfloat.r16g16b16_sfloat.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sfloat.r16g16b16_sfloat.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sfloat.r16g16b16_sfloat.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sfloat.r16g16b16_sfloat.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sfloat.r16g16b16_sfloat.optimal_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sfloat.r16g16b16_sfloat.optimal_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sfloat.r16g16b16_sfloat.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sfloat.r16g16b16_sfloat.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sfloat.r16g16b16_sfloat.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sfloat.r16g16b16_sfloat.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sfloat.r16g16b16_sfloat.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sfloat.r16g16b16_sfloat.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sfloat.r16g16b16_sfloat.optimal_linear_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sfloat.r16g16b16_sfloat.optimal_linear_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sfloat.r16g16b16_sfloat.optimal_linear_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sfloat.r16g16b16_sfloat.optimal_linear_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sfloat.r16g16b16_sfloat.optimal_linear_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sfloat.r16g16b16_sfloat.optimal_linear_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sfloat.r16g16b16_sfloat.optimal_linear_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sfloat.r16g16b16_sfloat.optimal_linear_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sfloat.r16g16b16_sfloat.general_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sfloat.r16g16b16_sfloat.general_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sfloat.r16g16b16_sfloat.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sfloat.r16g16b16_sfloat.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sfloat.r16g16b16_sfloat.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sfloat.r16g16b16_sfloat.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sfloat.r16g16b16_sfloat.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sfloat.r16g16b16_sfloat.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sfloat.r16g16b16_sfloat.general_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sfloat.r16g16b16_sfloat.general_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sfloat.r16g16b16_sfloat.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sfloat.r16g16b16_sfloat.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sfloat.r16g16b16_sfloat.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sfloat.r16g16b16_sfloat.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sfloat.r16g16b16_sfloat.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sfloat.r16g16b16_sfloat.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sfloat.r16g16b16_sfloat.general_linear_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sfloat.r16g16b16_sfloat.general_linear_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sfloat.r16g16b16_sfloat.general_linear_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sfloat.r16g16b16_sfloat.general_linear_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sfloat.r16g16b16_sfloat.general_linear_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sfloat.r16g16b16_sfloat.general_linear_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sfloat.r16g16b16_sfloat.general_linear_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sfloat.r16g16b16_sfloat.general_linear_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sfloat.r16g16b16_sfloat.linear_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sfloat.r16g16b16_sfloat.linear_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sfloat.r16g16b16_sfloat.linear_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sfloat.r16g16b16_sfloat.linear_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sfloat.r16g16b16_sfloat.linear_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sfloat.r16g16b16_sfloat.linear_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sfloat.r16g16b16_sfloat.linear_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sfloat.r16g16b16_sfloat.linear_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sfloat.r16g16b16_sfloat.linear_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sfloat.r16g16b16_sfloat.linear_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sfloat.r16g16b16_sfloat.linear_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sfloat.r16g16b16_sfloat.linear_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sfloat.r16g16b16_sfloat.linear_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sfloat.r16g16b16_sfloat.linear_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sfloat.r16g16b16_sfloat.linear_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sfloat.r16g16b16_sfloat.linear_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sfloat.r16g16b16_sfloat.linear_linear_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sfloat.r16g16b16_sfloat.linear_linear_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sfloat.r16g16b16_sfloat.linear_linear_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sfloat.r16g16b16_sfloat.linear_linear_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sfloat.r16g16b16_sfloat.linear_linear_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sfloat.r16g16b16_sfloat.linear_linear_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sfloat.r16g16b16_sfloat.linear_linear_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16_sfloat.r16g16b16_sfloat.linear_linear_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_unorm.r16g16b16a16_unorm.optimal_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_unorm.r16g16b16a16_unorm.optimal_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_unorm.r16g16b16a16_unorm.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_unorm.r16g16b16a16_unorm.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_unorm.r16g16b16a16_unorm.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_unorm.r16g16b16a16_unorm.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_unorm.r16g16b16a16_unorm.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_unorm.r16g16b16a16_unorm.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_unorm.r16g16b16a16_unorm.optimal_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_unorm.r16g16b16a16_unorm.optimal_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_unorm.r16g16b16a16_unorm.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_unorm.r16g16b16a16_unorm.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_unorm.r16g16b16a16_unorm.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_unorm.r16g16b16a16_unorm.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_unorm.r16g16b16a16_unorm.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_unorm.r16g16b16a16_unorm.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_unorm.r16g16b16a16_unorm.optimal_linear_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_unorm.r16g16b16a16_unorm.optimal_linear_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_unorm.r16g16b16a16_unorm.optimal_linear_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_unorm.r16g16b16a16_unorm.optimal_linear_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_unorm.r16g16b16a16_unorm.optimal_linear_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_unorm.r16g16b16a16_unorm.optimal_linear_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_unorm.r16g16b16a16_unorm.optimal_linear_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_unorm.r16g16b16a16_unorm.optimal_linear_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_unorm.r16g16b16a16_unorm.general_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_unorm.r16g16b16a16_unorm.general_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_unorm.r16g16b16a16_unorm.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_unorm.r16g16b16a16_unorm.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_unorm.r16g16b16a16_unorm.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_unorm.r16g16b16a16_unorm.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_unorm.r16g16b16a16_unorm.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_unorm.r16g16b16a16_unorm.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_unorm.r16g16b16a16_unorm.general_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_unorm.r16g16b16a16_unorm.general_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_unorm.r16g16b16a16_unorm.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_unorm.r16g16b16a16_unorm.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_unorm.r16g16b16a16_unorm.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_unorm.r16g16b16a16_unorm.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_unorm.r16g16b16a16_unorm.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_unorm.r16g16b16a16_unorm.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_unorm.r16g16b16a16_unorm.general_linear_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_unorm.r16g16b16a16_unorm.general_linear_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_unorm.r16g16b16a16_unorm.general_linear_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_unorm.r16g16b16a16_unorm.general_linear_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_unorm.r16g16b16a16_unorm.general_linear_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_unorm.r16g16b16a16_unorm.general_linear_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_unorm.r16g16b16a16_unorm.general_linear_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_unorm.r16g16b16a16_unorm.general_linear_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_unorm.r16g16b16a16_unorm.linear_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_unorm.r16g16b16a16_unorm.linear_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_unorm.r16g16b16a16_unorm.linear_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_unorm.r16g16b16a16_unorm.linear_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_unorm.r16g16b16a16_unorm.linear_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_unorm.r16g16b16a16_unorm.linear_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_unorm.r16g16b16a16_unorm.linear_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_unorm.r16g16b16a16_unorm.linear_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_unorm.r16g16b16a16_unorm.linear_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_unorm.r16g16b16a16_unorm.linear_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_unorm.r16g16b16a16_unorm.linear_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_unorm.r16g16b16a16_unorm.linear_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_unorm.r16g16b16a16_unorm.linear_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_unorm.r16g16b16a16_unorm.linear_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_unorm.r16g16b16a16_unorm.linear_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_unorm.r16g16b16a16_unorm.linear_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_unorm.r16g16b16a16_unorm.linear_linear_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_unorm.r16g16b16a16_unorm.linear_linear_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_unorm.r16g16b16a16_unorm.linear_linear_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_unorm.r16g16b16a16_unorm.linear_linear_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_unorm.r16g16b16a16_unorm.linear_linear_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_unorm.r16g16b16a16_unorm.linear_linear_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_unorm.r16g16b16a16_unorm.linear_linear_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_unorm.r16g16b16a16_unorm.linear_linear_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_snorm.r16g16b16a16_snorm.optimal_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_snorm.r16g16b16a16_snorm.optimal_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_snorm.r16g16b16a16_snorm.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_snorm.r16g16b16a16_snorm.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_snorm.r16g16b16a16_snorm.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_snorm.r16g16b16a16_snorm.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_snorm.r16g16b16a16_snorm.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_snorm.r16g16b16a16_snorm.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_snorm.r16g16b16a16_snorm.optimal_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_snorm.r16g16b16a16_snorm.optimal_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_snorm.r16g16b16a16_snorm.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_snorm.r16g16b16a16_snorm.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_snorm.r16g16b16a16_snorm.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_snorm.r16g16b16a16_snorm.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_snorm.r16g16b16a16_snorm.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_snorm.r16g16b16a16_snorm.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_snorm.r16g16b16a16_snorm.general_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_snorm.r16g16b16a16_snorm.general_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_snorm.r16g16b16a16_snorm.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_snorm.r16g16b16a16_snorm.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_snorm.r16g16b16a16_snorm.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_snorm.r16g16b16a16_snorm.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_snorm.r16g16b16a16_snorm.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_snorm.r16g16b16a16_snorm.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_snorm.r16g16b16a16_snorm.general_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_snorm.r16g16b16a16_snorm.general_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_snorm.r16g16b16a16_snorm.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_snorm.r16g16b16a16_snorm.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_snorm.r16g16b16a16_snorm.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_snorm.r16g16b16a16_snorm.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_snorm.r16g16b16a16_snorm.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_snorm.r16g16b16a16_snorm.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_uscaled.r16g16b16a16_uscaled.optimal_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_uscaled.r16g16b16a16_uscaled.optimal_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_uscaled.r16g16b16a16_uscaled.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_uscaled.r16g16b16a16_uscaled.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_uscaled.r16g16b16a16_uscaled.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_uscaled.r16g16b16a16_uscaled.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_uscaled.r16g16b16a16_uscaled.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_uscaled.r16g16b16a16_uscaled.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_uscaled.r16g16b16a16_uscaled.optimal_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_uscaled.r16g16b16a16_uscaled.optimal_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_uscaled.r16g16b16a16_uscaled.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_uscaled.r16g16b16a16_uscaled.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_uscaled.r16g16b16a16_uscaled.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_uscaled.r16g16b16a16_uscaled.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_uscaled.r16g16b16a16_uscaled.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_uscaled.r16g16b16a16_uscaled.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_uscaled.r16g16b16a16_uscaled.general_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_uscaled.r16g16b16a16_uscaled.general_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_uscaled.r16g16b16a16_uscaled.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_uscaled.r16g16b16a16_uscaled.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_uscaled.r16g16b16a16_uscaled.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_uscaled.r16g16b16a16_uscaled.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_uscaled.r16g16b16a16_uscaled.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_uscaled.r16g16b16a16_uscaled.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_uscaled.r16g16b16a16_uscaled.general_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_uscaled.r16g16b16a16_uscaled.general_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_uscaled.r16g16b16a16_uscaled.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_uscaled.r16g16b16a16_uscaled.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_uscaled.r16g16b16a16_uscaled.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_uscaled.r16g16b16a16_uscaled.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_uscaled.r16g16b16a16_uscaled.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_uscaled.r16g16b16a16_uscaled.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_sscaled.r16g16b16a16_sscaled.optimal_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_sscaled.r16g16b16a16_sscaled.optimal_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_sscaled.r16g16b16a16_sscaled.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_sscaled.r16g16b16a16_sscaled.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_sscaled.r16g16b16a16_sscaled.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_sscaled.r16g16b16a16_sscaled.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_sscaled.r16g16b16a16_sscaled.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_sscaled.r16g16b16a16_sscaled.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_sscaled.r16g16b16a16_sscaled.optimal_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_sscaled.r16g16b16a16_sscaled.optimal_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_sscaled.r16g16b16a16_sscaled.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_sscaled.r16g16b16a16_sscaled.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_sscaled.r16g16b16a16_sscaled.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_sscaled.r16g16b16a16_sscaled.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_sscaled.r16g16b16a16_sscaled.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_sscaled.r16g16b16a16_sscaled.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_sscaled.r16g16b16a16_sscaled.general_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_sscaled.r16g16b16a16_sscaled.general_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_sscaled.r16g16b16a16_sscaled.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_sscaled.r16g16b16a16_sscaled.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_sscaled.r16g16b16a16_sscaled.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_sscaled.r16g16b16a16_sscaled.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_sscaled.r16g16b16a16_sscaled.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_sscaled.r16g16b16a16_sscaled.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_sscaled.r16g16b16a16_sscaled.general_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_sscaled.r16g16b16a16_sscaled.general_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_sscaled.r16g16b16a16_sscaled.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_sscaled.r16g16b16a16_sscaled.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_sscaled.r16g16b16a16_sscaled.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_sscaled.r16g16b16a16_sscaled.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_sscaled.r16g16b16a16_sscaled.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_sscaled.r16g16b16a16_sscaled.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_sfloat.r16g16b16a16_sfloat.optimal_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_sfloat.r16g16b16a16_sfloat.optimal_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_sfloat.r16g16b16a16_sfloat.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_sfloat.r16g16b16a16_sfloat.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_sfloat.r16g16b16a16_sfloat.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_sfloat.r16g16b16a16_sfloat.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_sfloat.r16g16b16a16_sfloat.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_sfloat.r16g16b16a16_sfloat.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_sfloat.r16g16b16a16_sfloat.optimal_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_sfloat.r16g16b16a16_sfloat.optimal_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_sfloat.r16g16b16a16_sfloat.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_sfloat.r16g16b16a16_sfloat.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_sfloat.r16g16b16a16_sfloat.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_sfloat.r16g16b16a16_sfloat.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_sfloat.r16g16b16a16_sfloat.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_sfloat.r16g16b16a16_sfloat.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_sfloat.r16g16b16a16_sfloat.general_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_sfloat.r16g16b16a16_sfloat.general_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_sfloat.r16g16b16a16_sfloat.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_sfloat.r16g16b16a16_sfloat.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_sfloat.r16g16b16a16_sfloat.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_sfloat.r16g16b16a16_sfloat.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_sfloat.r16g16b16a16_sfloat.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_sfloat.r16g16b16a16_sfloat.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_sfloat.r16g16b16a16_sfloat.general_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_sfloat.r16g16b16a16_sfloat.general_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_sfloat.r16g16b16a16_sfloat.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_sfloat.r16g16b16a16_sfloat.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_sfloat.r16g16b16a16_sfloat.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_sfloat.r16g16b16a16_sfloat.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_sfloat.r16g16b16a16_sfloat.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r16g16b16a16_sfloat.r16g16b16a16_sfloat.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_sfloat.r32_sfloat.optimal_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_sfloat.r32_sfloat.optimal_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_sfloat.r32_sfloat.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_sfloat.r32_sfloat.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_sfloat.r32_sfloat.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_sfloat.r32_sfloat.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_sfloat.r32_sfloat.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_sfloat.r32_sfloat.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_sfloat.r32_sfloat.optimal_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_sfloat.r32_sfloat.optimal_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_sfloat.r32_sfloat.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_sfloat.r32_sfloat.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_sfloat.r32_sfloat.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_sfloat.r32_sfloat.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_sfloat.r32_sfloat.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_sfloat.r32_sfloat.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_sfloat.r32_sfloat.optimal_linear_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_sfloat.r32_sfloat.optimal_linear_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_sfloat.r32_sfloat.optimal_linear_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_sfloat.r32_sfloat.optimal_linear_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_sfloat.r32_sfloat.optimal_linear_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_sfloat.r32_sfloat.optimal_linear_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_sfloat.r32_sfloat.optimal_linear_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_sfloat.r32_sfloat.optimal_linear_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_sfloat.r32_sfloat.general_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_sfloat.r32_sfloat.general_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_sfloat.r32_sfloat.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_sfloat.r32_sfloat.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_sfloat.r32_sfloat.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_sfloat.r32_sfloat.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_sfloat.r32_sfloat.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_sfloat.r32_sfloat.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_sfloat.r32_sfloat.general_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_sfloat.r32_sfloat.general_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_sfloat.r32_sfloat.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_sfloat.r32_sfloat.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_sfloat.r32_sfloat.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_sfloat.r32_sfloat.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_sfloat.r32_sfloat.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_sfloat.r32_sfloat.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_sfloat.r32_sfloat.general_linear_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_sfloat.r32_sfloat.general_linear_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_sfloat.r32_sfloat.general_linear_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_sfloat.r32_sfloat.general_linear_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_sfloat.r32_sfloat.general_linear_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_sfloat.r32_sfloat.general_linear_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_sfloat.r32_sfloat.general_linear_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_sfloat.r32_sfloat.general_linear_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_sfloat.r32_sfloat.linear_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_sfloat.r32_sfloat.linear_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_sfloat.r32_sfloat.linear_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_sfloat.r32_sfloat.linear_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_sfloat.r32_sfloat.linear_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_sfloat.r32_sfloat.linear_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_sfloat.r32_sfloat.linear_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_sfloat.r32_sfloat.linear_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_sfloat.r32_sfloat.linear_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_sfloat.r32_sfloat.linear_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_sfloat.r32_sfloat.linear_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_sfloat.r32_sfloat.linear_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_sfloat.r32_sfloat.linear_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_sfloat.r32_sfloat.linear_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_sfloat.r32_sfloat.linear_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_sfloat.r32_sfloat.linear_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_sfloat.r32_sfloat.linear_linear_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_sfloat.r32_sfloat.linear_linear_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_sfloat.r32_sfloat.linear_linear_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_sfloat.r32_sfloat.linear_linear_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_sfloat.r32_sfloat.linear_linear_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_sfloat.r32_sfloat.linear_linear_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_sfloat.r32_sfloat.linear_linear_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32_sfloat.r32_sfloat.linear_linear_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32_sfloat.r32g32_sfloat.optimal_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32_sfloat.r32g32_sfloat.optimal_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32_sfloat.r32g32_sfloat.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32_sfloat.r32g32_sfloat.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32_sfloat.r32g32_sfloat.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32_sfloat.r32g32_sfloat.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32_sfloat.r32g32_sfloat.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32_sfloat.r32g32_sfloat.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32_sfloat.r32g32_sfloat.optimal_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32_sfloat.r32g32_sfloat.optimal_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32_sfloat.r32g32_sfloat.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32_sfloat.r32g32_sfloat.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32_sfloat.r32g32_sfloat.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32_sfloat.r32g32_sfloat.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32_sfloat.r32g32_sfloat.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32_sfloat.r32g32_sfloat.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32_sfloat.r32g32_sfloat.general_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32_sfloat.r32g32_sfloat.general_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32_sfloat.r32g32_sfloat.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32_sfloat.r32g32_sfloat.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32_sfloat.r32g32_sfloat.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32_sfloat.r32g32_sfloat.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32_sfloat.r32g32_sfloat.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32_sfloat.r32g32_sfloat.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32_sfloat.r32g32_sfloat.general_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32_sfloat.r32g32_sfloat.general_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32_sfloat.r32g32_sfloat.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32_sfloat.r32g32_sfloat.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32_sfloat.r32g32_sfloat.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32_sfloat.r32g32_sfloat.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32_sfloat.r32g32_sfloat.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32_sfloat.r32g32_sfloat.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_sfloat.r32g32b32_sfloat.optimal_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_sfloat.r32g32b32_sfloat.optimal_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_sfloat.r32g32b32_sfloat.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_sfloat.r32g32b32_sfloat.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_sfloat.r32g32b32_sfloat.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_sfloat.r32g32b32_sfloat.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_sfloat.r32g32b32_sfloat.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_sfloat.r32g32b32_sfloat.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_sfloat.r32g32b32_sfloat.optimal_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_sfloat.r32g32b32_sfloat.optimal_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_sfloat.r32g32b32_sfloat.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_sfloat.r32g32b32_sfloat.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_sfloat.r32g32b32_sfloat.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_sfloat.r32g32b32_sfloat.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_sfloat.r32g32b32_sfloat.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_sfloat.r32g32b32_sfloat.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_sfloat.r32g32b32_sfloat.optimal_linear_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_sfloat.r32g32b32_sfloat.optimal_linear_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_sfloat.r32g32b32_sfloat.optimal_linear_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_sfloat.r32g32b32_sfloat.optimal_linear_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_sfloat.r32g32b32_sfloat.optimal_linear_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_sfloat.r32g32b32_sfloat.optimal_linear_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_sfloat.r32g32b32_sfloat.optimal_linear_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_sfloat.r32g32b32_sfloat.optimal_linear_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_sfloat.r32g32b32_sfloat.general_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_sfloat.r32g32b32_sfloat.general_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_sfloat.r32g32b32_sfloat.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_sfloat.r32g32b32_sfloat.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_sfloat.r32g32b32_sfloat.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_sfloat.r32g32b32_sfloat.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_sfloat.r32g32b32_sfloat.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_sfloat.r32g32b32_sfloat.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_sfloat.r32g32b32_sfloat.general_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_sfloat.r32g32b32_sfloat.general_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_sfloat.r32g32b32_sfloat.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_sfloat.r32g32b32_sfloat.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_sfloat.r32g32b32_sfloat.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_sfloat.r32g32b32_sfloat.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_sfloat.r32g32b32_sfloat.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_sfloat.r32g32b32_sfloat.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_sfloat.r32g32b32_sfloat.general_linear_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_sfloat.r32g32b32_sfloat.general_linear_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_sfloat.r32g32b32_sfloat.general_linear_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_sfloat.r32g32b32_sfloat.general_linear_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_sfloat.r32g32b32_sfloat.general_linear_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_sfloat.r32g32b32_sfloat.general_linear_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_sfloat.r32g32b32_sfloat.general_linear_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_sfloat.r32g32b32_sfloat.general_linear_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_sfloat.r32g32b32_sfloat.linear_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_sfloat.r32g32b32_sfloat.linear_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_sfloat.r32g32b32_sfloat.linear_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_sfloat.r32g32b32_sfloat.linear_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_sfloat.r32g32b32_sfloat.linear_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_sfloat.r32g32b32_sfloat.linear_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_sfloat.r32g32b32_sfloat.linear_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_sfloat.r32g32b32_sfloat.linear_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_sfloat.r32g32b32_sfloat.linear_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_sfloat.r32g32b32_sfloat.linear_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_sfloat.r32g32b32_sfloat.linear_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_sfloat.r32g32b32_sfloat.linear_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_sfloat.r32g32b32_sfloat.linear_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_sfloat.r32g32b32_sfloat.linear_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_sfloat.r32g32b32_sfloat.linear_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_sfloat.r32g32b32_sfloat.linear_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_sfloat.r32g32b32_sfloat.linear_linear_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_sfloat.r32g32b32_sfloat.linear_linear_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_sfloat.r32g32b32_sfloat.linear_linear_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_sfloat.r32g32b32_sfloat.linear_linear_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_sfloat.r32g32b32_sfloat.linear_linear_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_sfloat.r32g32b32_sfloat.linear_linear_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_sfloat.r32g32b32_sfloat.linear_linear_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32_sfloat.r32g32b32_sfloat.linear_linear_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_sfloat.r32g32b32a32_sfloat.optimal_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_sfloat.r32g32b32a32_sfloat.optimal_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_sfloat.r32g32b32a32_sfloat.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_sfloat.r32g32b32a32_sfloat.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_sfloat.r32g32b32a32_sfloat.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_sfloat.r32g32b32a32_sfloat.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_sfloat.r32g32b32a32_sfloat.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_sfloat.r32g32b32a32_sfloat.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_sfloat.r32g32b32a32_sfloat.optimal_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_sfloat.r32g32b32a32_sfloat.optimal_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_sfloat.r32g32b32a32_sfloat.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_sfloat.r32g32b32a32_sfloat.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_sfloat.r32g32b32a32_sfloat.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_sfloat.r32g32b32a32_sfloat.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_sfloat.r32g32b32a32_sfloat.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_sfloat.r32g32b32a32_sfloat.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_sfloat.r32g32b32a32_sfloat.general_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_sfloat.r32g32b32a32_sfloat.general_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_sfloat.r32g32b32a32_sfloat.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_sfloat.r32g32b32a32_sfloat.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_sfloat.r32g32b32a32_sfloat.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_sfloat.r32g32b32a32_sfloat.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_sfloat.r32g32b32a32_sfloat.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_sfloat.r32g32b32a32_sfloat.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_sfloat.r32g32b32a32_sfloat.general_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_sfloat.r32g32b32a32_sfloat.general_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_sfloat.r32g32b32a32_sfloat.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_sfloat.r32g32b32a32_sfloat.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_sfloat.r32g32b32a32_sfloat.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_sfloat.r32g32b32a32_sfloat.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_sfloat.r32g32b32a32_sfloat.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r32g32b32a32_sfloat.r32g32b32a32_sfloat.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b10g11r11_ufloat_pack32.b10g11r11_ufloat_pack32.optimal_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b10g11r11_ufloat_pack32.b10g11r11_ufloat_pack32.optimal_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b10g11r11_ufloat_pack32.b10g11r11_ufloat_pack32.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b10g11r11_ufloat_pack32.b10g11r11_ufloat_pack32.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b10g11r11_ufloat_pack32.b10g11r11_ufloat_pack32.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b10g11r11_ufloat_pack32.b10g11r11_ufloat_pack32.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b10g11r11_ufloat_pack32.b10g11r11_ufloat_pack32.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b10g11r11_ufloat_pack32.b10g11r11_ufloat_pack32.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b10g11r11_ufloat_pack32.b10g11r11_ufloat_pack32.optimal_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b10g11r11_ufloat_pack32.b10g11r11_ufloat_pack32.optimal_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b10g11r11_ufloat_pack32.b10g11r11_ufloat_pack32.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b10g11r11_ufloat_pack32.b10g11r11_ufloat_pack32.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b10g11r11_ufloat_pack32.b10g11r11_ufloat_pack32.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b10g11r11_ufloat_pack32.b10g11r11_ufloat_pack32.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b10g11r11_ufloat_pack32.b10g11r11_ufloat_pack32.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b10g11r11_ufloat_pack32.b10g11r11_ufloat_pack32.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b10g11r11_ufloat_pack32.b10g11r11_ufloat_pack32.general_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b10g11r11_ufloat_pack32.b10g11r11_ufloat_pack32.general_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b10g11r11_ufloat_pack32.b10g11r11_ufloat_pack32.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b10g11r11_ufloat_pack32.b10g11r11_ufloat_pack32.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b10g11r11_ufloat_pack32.b10g11r11_ufloat_pack32.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b10g11r11_ufloat_pack32.b10g11r11_ufloat_pack32.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b10g11r11_ufloat_pack32.b10g11r11_ufloat_pack32.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b10g11r11_ufloat_pack32.b10g11r11_ufloat_pack32.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b10g11r11_ufloat_pack32.b10g11r11_ufloat_pack32.general_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b10g11r11_ufloat_pack32.b10g11r11_ufloat_pack32.general_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b10g11r11_ufloat_pack32.b10g11r11_ufloat_pack32.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b10g11r11_ufloat_pack32.b10g11r11_ufloat_pack32.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b10g11r11_ufloat_pack32.b10g11r11_ufloat_pack32.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b10g11r11_ufloat_pack32.b10g11r11_ufloat_pack32.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b10g11r11_ufloat_pack32.b10g11r11_ufloat_pack32.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b10g11r11_ufloat_pack32.b10g11r11_ufloat_pack32.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.e5b9g9r9_ufloat_pack32.e5b9g9r9_ufloat_pack32.optimal_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.e5b9g9r9_ufloat_pack32.e5b9g9r9_ufloat_pack32.optimal_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.e5b9g9r9_ufloat_pack32.e5b9g9r9_ufloat_pack32.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.e5b9g9r9_ufloat_pack32.e5b9g9r9_ufloat_pack32.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.e5b9g9r9_ufloat_pack32.e5b9g9r9_ufloat_pack32.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.e5b9g9r9_ufloat_pack32.e5b9g9r9_ufloat_pack32.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.e5b9g9r9_ufloat_pack32.e5b9g9r9_ufloat_pack32.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.e5b9g9r9_ufloat_pack32.e5b9g9r9_ufloat_pack32.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.e5b9g9r9_ufloat_pack32.e5b9g9r9_ufloat_pack32.optimal_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.e5b9g9r9_ufloat_pack32.e5b9g9r9_ufloat_pack32.optimal_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.e5b9g9r9_ufloat_pack32.e5b9g9r9_ufloat_pack32.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.e5b9g9r9_ufloat_pack32.e5b9g9r9_ufloat_pack32.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.e5b9g9r9_ufloat_pack32.e5b9g9r9_ufloat_pack32.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.e5b9g9r9_ufloat_pack32.e5b9g9r9_ufloat_pack32.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.e5b9g9r9_ufloat_pack32.e5b9g9r9_ufloat_pack32.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.e5b9g9r9_ufloat_pack32.e5b9g9r9_ufloat_pack32.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.e5b9g9r9_ufloat_pack32.e5b9g9r9_ufloat_pack32.general_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.e5b9g9r9_ufloat_pack32.e5b9g9r9_ufloat_pack32.general_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.e5b9g9r9_ufloat_pack32.e5b9g9r9_ufloat_pack32.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.e5b9g9r9_ufloat_pack32.e5b9g9r9_ufloat_pack32.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.e5b9g9r9_ufloat_pack32.e5b9g9r9_ufloat_pack32.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.e5b9g9r9_ufloat_pack32.e5b9g9r9_ufloat_pack32.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.e5b9g9r9_ufloat_pack32.e5b9g9r9_ufloat_pack32.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.e5b9g9r9_ufloat_pack32.e5b9g9r9_ufloat_pack32.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.e5b9g9r9_ufloat_pack32.e5b9g9r9_ufloat_pack32.general_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.e5b9g9r9_ufloat_pack32.e5b9g9r9_ufloat_pack32.general_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.e5b9g9r9_ufloat_pack32.e5b9g9r9_ufloat_pack32.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.e5b9g9r9_ufloat_pack32.e5b9g9r9_ufloat_pack32.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.e5b9g9r9_ufloat_pack32.e5b9g9r9_ufloat_pack32.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.e5b9g9r9_ufloat_pack32.e5b9g9r9_ufloat_pack32.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.e5b9g9r9_ufloat_pack32.e5b9g9r9_ufloat_pack32.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.e5b9g9r9_ufloat_pack32.e5b9g9r9_ufloat_pack32.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.optimal_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.optimal_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.optimal_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.optimal_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.optimal_linear_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.optimal_linear_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.optimal_linear_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.optimal_linear_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.optimal_linear_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.optimal_linear_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.optimal_linear_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.optimal_linear_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.general_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.general_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.general_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.general_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.general_linear_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.general_linear_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.general_linear_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.general_linear_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.general_linear_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.general_linear_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.general_linear_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.general_linear_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.linear_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.linear_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.linear_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.linear_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.linear_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.linear_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.linear_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.linear_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.linear_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.linear_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.linear_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.linear_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.linear_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.linear_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.linear_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.linear_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.linear_linear_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.linear_linear_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.linear_linear_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.linear_linear_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.linear_linear_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.linear_linear_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.linear_linear_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.linear_linear_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_srgb.r8g8_srgb.optimal_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_srgb.r8g8_srgb.optimal_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_srgb.r8g8_srgb.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_srgb.r8g8_srgb.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_srgb.r8g8_srgb.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_srgb.r8g8_srgb.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_srgb.r8g8_srgb.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_srgb.r8g8_srgb.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_srgb.r8g8_srgb.optimal_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_srgb.r8g8_srgb.optimal_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_srgb.r8g8_srgb.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_srgb.r8g8_srgb.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_srgb.r8g8_srgb.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_srgb.r8g8_srgb.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_srgb.r8g8_srgb.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_srgb.r8g8_srgb.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_srgb.r8g8_srgb.general_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_srgb.r8g8_srgb.general_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_srgb.r8g8_srgb.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_srgb.r8g8_srgb.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_srgb.r8g8_srgb.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_srgb.r8g8_srgb.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_srgb.r8g8_srgb.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_srgb.r8g8_srgb.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_srgb.r8g8_srgb.general_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_srgb.r8g8_srgb.general_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_srgb.r8g8_srgb.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_srgb.r8g8_srgb.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_srgb.r8g8_srgb.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_srgb.r8g8_srgb.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_srgb.r8g8_srgb.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8_srgb.r8g8_srgb.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_srgb.r8g8b8_srgb.optimal_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_srgb.r8g8b8_srgb.optimal_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_srgb.r8g8b8_srgb.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_srgb.r8g8b8_srgb.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_srgb.r8g8b8_srgb.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_srgb.r8g8b8_srgb.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_srgb.r8g8b8_srgb.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_srgb.r8g8b8_srgb.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_srgb.r8g8b8_srgb.optimal_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_srgb.r8g8b8_srgb.optimal_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_srgb.r8g8b8_srgb.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_srgb.r8g8b8_srgb.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_srgb.r8g8b8_srgb.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_srgb.r8g8b8_srgb.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_srgb.r8g8b8_srgb.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_srgb.r8g8b8_srgb.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_srgb.r8g8b8_srgb.general_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_srgb.r8g8b8_srgb.general_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_srgb.r8g8b8_srgb.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_srgb.r8g8b8_srgb.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_srgb.r8g8b8_srgb.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_srgb.r8g8b8_srgb.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_srgb.r8g8b8_srgb.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_srgb.r8g8b8_srgb.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_srgb.r8g8b8_srgb.general_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_srgb.r8g8b8_srgb.general_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_srgb.r8g8b8_srgb.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_srgb.r8g8b8_srgb.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_srgb.r8g8b8_srgb.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_srgb.r8g8b8_srgb.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_srgb.r8g8b8_srgb.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8_srgb.r8g8b8_srgb.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_srgb.b8g8r8_srgb.optimal_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_srgb.b8g8r8_srgb.optimal_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_srgb.b8g8r8_srgb.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_srgb.b8g8r8_srgb.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_srgb.b8g8r8_srgb.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_srgb.b8g8r8_srgb.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_srgb.b8g8r8_srgb.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_srgb.b8g8r8_srgb.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_srgb.b8g8r8_srgb.optimal_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_srgb.b8g8r8_srgb.optimal_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_srgb.b8g8r8_srgb.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_srgb.b8g8r8_srgb.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_srgb.b8g8r8_srgb.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_srgb.b8g8r8_srgb.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_srgb.b8g8r8_srgb.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_srgb.b8g8r8_srgb.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_srgb.b8g8r8_srgb.optimal_linear_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_srgb.b8g8r8_srgb.optimal_linear_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_srgb.b8g8r8_srgb.optimal_linear_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_srgb.b8g8r8_srgb.optimal_linear_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_srgb.b8g8r8_srgb.optimal_linear_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_srgb.b8g8r8_srgb.optimal_linear_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_srgb.b8g8r8_srgb.optimal_linear_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_srgb.b8g8r8_srgb.optimal_linear_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_srgb.b8g8r8_srgb.general_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_srgb.b8g8r8_srgb.general_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_srgb.b8g8r8_srgb.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_srgb.b8g8r8_srgb.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_srgb.b8g8r8_srgb.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_srgb.b8g8r8_srgb.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_srgb.b8g8r8_srgb.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_srgb.b8g8r8_srgb.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_srgb.b8g8r8_srgb.general_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_srgb.b8g8r8_srgb.general_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_srgb.b8g8r8_srgb.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_srgb.b8g8r8_srgb.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_srgb.b8g8r8_srgb.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_srgb.b8g8r8_srgb.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_srgb.b8g8r8_srgb.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_srgb.b8g8r8_srgb.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_srgb.b8g8r8_srgb.general_linear_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_srgb.b8g8r8_srgb.general_linear_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_srgb.b8g8r8_srgb.general_linear_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_srgb.b8g8r8_srgb.general_linear_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_srgb.b8g8r8_srgb.general_linear_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_srgb.b8g8r8_srgb.general_linear_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_srgb.b8g8r8_srgb.general_linear_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_srgb.b8g8r8_srgb.general_linear_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_srgb.b8g8r8_srgb.linear_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_srgb.b8g8r8_srgb.linear_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_srgb.b8g8r8_srgb.linear_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_srgb.b8g8r8_srgb.linear_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_srgb.b8g8r8_srgb.linear_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_srgb.b8g8r8_srgb.linear_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_srgb.b8g8r8_srgb.linear_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_srgb.b8g8r8_srgb.linear_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_srgb.b8g8r8_srgb.linear_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_srgb.b8g8r8_srgb.linear_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_srgb.b8g8r8_srgb.linear_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_srgb.b8g8r8_srgb.linear_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_srgb.b8g8r8_srgb.linear_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_srgb.b8g8r8_srgb.linear_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_srgb.b8g8r8_srgb.linear_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_srgb.b8g8r8_srgb.linear_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_srgb.b8g8r8_srgb.linear_linear_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_srgb.b8g8r8_srgb.linear_linear_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_srgb.b8g8r8_srgb.linear_linear_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_srgb.b8g8r8_srgb.linear_linear_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_srgb.b8g8r8_srgb.linear_linear_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_srgb.b8g8r8_srgb.linear_linear_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_srgb.b8g8r8_srgb.linear_linear_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8_srgb.b8g8r8_srgb.linear_linear_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_srgb.r8g8b8a8_srgb.optimal_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_srgb.r8g8b8a8_srgb.optimal_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_srgb.r8g8b8a8_srgb.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_srgb.r8g8b8a8_srgb.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_srgb.r8g8b8a8_srgb.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_srgb.r8g8b8a8_srgb.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_srgb.r8g8b8a8_srgb.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_srgb.r8g8b8a8_srgb.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_srgb.r8g8b8a8_srgb.optimal_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_srgb.r8g8b8a8_srgb.optimal_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_srgb.r8g8b8a8_srgb.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_srgb.r8g8b8a8_srgb.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_srgb.r8g8b8a8_srgb.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_srgb.r8g8b8a8_srgb.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_srgb.r8g8b8a8_srgb.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_srgb.r8g8b8a8_srgb.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_srgb.r8g8b8a8_srgb.general_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_srgb.r8g8b8a8_srgb.general_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_srgb.r8g8b8a8_srgb.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_srgb.r8g8b8a8_srgb.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_srgb.r8g8b8a8_srgb.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_srgb.r8g8b8a8_srgb.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_srgb.r8g8b8a8_srgb.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_srgb.r8g8b8a8_srgb.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_srgb.r8g8b8a8_srgb.general_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_srgb.r8g8b8a8_srgb.general_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_srgb.r8g8b8a8_srgb.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_srgb.r8g8b8a8_srgb.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_srgb.r8g8b8a8_srgb.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_srgb.r8g8b8a8_srgb.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_srgb.r8g8b8a8_srgb.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.r8g8b8a8_srgb.r8g8b8a8_srgb.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_srgb.b8g8r8a8_srgb.optimal_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_srgb.b8g8r8a8_srgb.optimal_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_srgb.b8g8r8a8_srgb.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_srgb.b8g8r8a8_srgb.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_srgb.b8g8r8a8_srgb.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_srgb.b8g8r8a8_srgb.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_srgb.b8g8r8a8_srgb.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_srgb.b8g8r8a8_srgb.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_srgb.b8g8r8a8_srgb.optimal_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_srgb.b8g8r8a8_srgb.optimal_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_srgb.b8g8r8a8_srgb.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_srgb.b8g8r8a8_srgb.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_srgb.b8g8r8a8_srgb.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_srgb.b8g8r8a8_srgb.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_srgb.b8g8r8a8_srgb.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_srgb.b8g8r8a8_srgb.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_srgb.b8g8r8a8_srgb.general_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_srgb.b8g8r8a8_srgb.general_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_srgb.b8g8r8a8_srgb.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_srgb.b8g8r8a8_srgb.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_srgb.b8g8r8a8_srgb.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_srgb.b8g8r8a8_srgb.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_srgb.b8g8r8a8_srgb.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_srgb.b8g8r8a8_srgb.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_srgb.b8g8r8a8_srgb.general_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_srgb.b8g8r8a8_srgb.general_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_srgb.b8g8r8a8_srgb.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_srgb.b8g8r8a8_srgb.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_srgb.b8g8r8a8_srgb.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_srgb.b8g8r8a8_srgb.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_srgb.b8g8r8a8_srgb.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.b8g8r8a8_srgb.b8g8r8a8_srgb.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_srgb_pack32.a8b8g8r8_srgb_pack32.optimal_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_srgb_pack32.a8b8g8r8_srgb_pack32.optimal_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_srgb_pack32.a8b8g8r8_srgb_pack32.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_srgb_pack32.a8b8g8r8_srgb_pack32.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_srgb_pack32.a8b8g8r8_srgb_pack32.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_srgb_pack32.a8b8g8r8_srgb_pack32.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_srgb_pack32.a8b8g8r8_srgb_pack32.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_srgb_pack32.a8b8g8r8_srgb_pack32.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_srgb_pack32.a8b8g8r8_srgb_pack32.optimal_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_srgb_pack32.a8b8g8r8_srgb_pack32.optimal_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_srgb_pack32.a8b8g8r8_srgb_pack32.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_srgb_pack32.a8b8g8r8_srgb_pack32.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_srgb_pack32.a8b8g8r8_srgb_pack32.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_srgb_pack32.a8b8g8r8_srgb_pack32.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_srgb_pack32.a8b8g8r8_srgb_pack32.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_srgb_pack32.a8b8g8r8_srgb_pack32.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_srgb_pack32.a8b8g8r8_srgb_pack32.general_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_srgb_pack32.a8b8g8r8_srgb_pack32.general_optimal_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_srgb_pack32.a8b8g8r8_srgb_pack32.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_srgb_pack32.a8b8g8r8_srgb_pack32.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_srgb_pack32.a8b8g8r8_srgb_pack32.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_srgb_pack32.a8b8g8r8_srgb_pack32.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_srgb_pack32.a8b8g8r8_srgb_pack32.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_srgb_pack32.a8b8g8r8_srgb_pack32.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_srgb_pack32.a8b8g8r8_srgb_pack32.general_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_srgb_pack32.a8b8g8r8_srgb_pack32.general_general_linear
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_srgb_pack32.a8b8g8r8_srgb_pack32.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_srgb_pack32.a8b8g8r8_srgb_pack32.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_srgb_pack32.a8b8g8r8_srgb_pack32.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_srgb_pack32.a8b8g8r8_srgb_pack32.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_srgb_pack32.a8b8g8r8_srgb_pack32.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_srgb_pack32.a8b8g8r8_srgb_pack32.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.depth_stencil.1d.d16_unorm_s8_uint_d16_unorm_s8_uint_separate_layouts.optimal_optimal_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.depth_stencil.1d.d16_unorm_s8_uint_d16_unorm_s8_uint_separate_layouts.optimal_general_nearest
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.depth_stencil.1d.d16_unorm_s8_uint_d16_unorm_s8_uint_separate_layouts.general_optimal_nearest
@@ -26645,6 +29754,7 @@
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.generate_mipmaps.from_previous_level.layercount_6.a8b8g8r8_srgb_pack32.optimal_general_cubic
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.generate_mipmaps.from_previous_level.layercount_6.a8b8g8r8_srgb_pack32.general_optimal_cubic
 dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.generate_mipmaps.from_previous_level.layercount_6.a8b8g8r8_srgb_pack32.general_general_cubic
+dEQP-VK.api.copy_and_blit.dedicated_allocation.image_to_image.simple_tests.partial_image_npot_diff_format_clear
 dEQP-VK.api.copy_and_blit.dedicated_allocation.image_to_image.all_formats.color.1d.r4g4_unorm_pack8.r4g4_unorm_pack8.optimal_optimal
 dEQP-VK.api.copy_and_blit.dedicated_allocation.image_to_image.all_formats.color.1d.r4g4_unorm_pack8.r4g4_unorm_pack8.optimal_general
 dEQP-VK.api.copy_and_blit.dedicated_allocation.image_to_image.all_formats.color.1d.r4g4_unorm_pack8.r4g4_unorm_pack8.general_optimal
@@ -28522,65 +31632,269 @@
 dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.1d.a8b8g8r8_srgb_pack32.a8b8g8r8_srgb_pack32.general_general_nearest
 dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.1d.a8b8g8r8_srgb_pack32.a8b8g8r8_srgb_pack32.general_general_linear
 dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_uint.r8_uint.optimal_optimal_nearest
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_uint.r8_uint.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_uint.r8_uint.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_uint.r8_uint.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_uint.r8_uint.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_uint.r8_uint.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_uint.r8_uint.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_uint.r8_uint.optimal_general_nearest
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_uint.r8_uint.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_uint.r8_uint.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_uint.r8_uint.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_uint.r8_uint.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_uint.r8_uint.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_uint.r8_uint.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_uint.r8_uint.general_optimal_nearest
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_uint.r8_uint.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_uint.r8_uint.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_uint.r8_uint.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_uint.r8_uint.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_uint.r8_uint.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_uint.r8_uint.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_uint.r8_uint.general_general_nearest
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_uint.r8_uint.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_uint.r8_uint.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_uint.r8_uint.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_uint.r8_uint.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_uint.r8_uint.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_uint.r8_uint.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_sint.r8_sint.optimal_optimal_nearest
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_sint.r8_sint.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_sint.r8_sint.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_sint.r8_sint.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_sint.r8_sint.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_sint.r8_sint.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_sint.r8_sint.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_sint.r8_sint.optimal_general_nearest
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_sint.r8_sint.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_sint.r8_sint.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_sint.r8_sint.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_sint.r8_sint.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_sint.r8_sint.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_sint.r8_sint.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_sint.r8_sint.general_optimal_nearest
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_sint.r8_sint.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_sint.r8_sint.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_sint.r8_sint.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_sint.r8_sint.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_sint.r8_sint.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_sint.r8_sint.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_sint.r8_sint.general_general_nearest
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_sint.r8_sint.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_sint.r8_sint.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_sint.r8_sint.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_sint.r8_sint.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_sint.r8_sint.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_sint.r8_sint.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.optimal_optimal_nearest
 dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.optimal_optimal_linear
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.optimal_general_nearest
 dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.optimal_general_linear
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.optimal_linear_nearest
 dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.optimal_linear_linear
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.optimal_linear_linear_stripes_x
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.optimal_linear_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.optimal_linear_linear_stripes_y
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.optimal_linear_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.optimal_linear_linear_stripes_z
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.optimal_linear_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.general_optimal_nearest
 dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.general_optimal_linear
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.general_general_nearest
 dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.general_general_linear
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.general_linear_nearest
 dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.general_linear_linear
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.general_linear_linear_stripes_x
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.general_linear_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.general_linear_linear_stripes_y
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.general_linear_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.general_linear_linear_stripes_z
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.general_linear_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.linear_optimal_nearest
 dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.linear_optimal_linear
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.linear_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.linear_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.linear_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.linear_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.linear_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.linear_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.linear_general_nearest
 dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.linear_general_linear
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.linear_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.linear_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.linear_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.linear_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.linear_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.linear_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.linear_linear_nearest
 dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.linear_linear_linear
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.linear_linear_linear_stripes_x
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.linear_linear_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.linear_linear_linear_stripes_y
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.linear_linear_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.linear_linear_linear_stripes_z
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.linear_linear_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.e5b9g9r9_ufloat_pack32.e5b9g9r9_ufloat_pack32.optimal_optimal_nearest
 dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.e5b9g9r9_ufloat_pack32.e5b9g9r9_ufloat_pack32.optimal_optimal_linear
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.e5b9g9r9_ufloat_pack32.e5b9g9r9_ufloat_pack32.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.e5b9g9r9_ufloat_pack32.e5b9g9r9_ufloat_pack32.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.e5b9g9r9_ufloat_pack32.e5b9g9r9_ufloat_pack32.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.e5b9g9r9_ufloat_pack32.e5b9g9r9_ufloat_pack32.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.e5b9g9r9_ufloat_pack32.e5b9g9r9_ufloat_pack32.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.e5b9g9r9_ufloat_pack32.e5b9g9r9_ufloat_pack32.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.e5b9g9r9_ufloat_pack32.e5b9g9r9_ufloat_pack32.optimal_general_nearest
 dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.e5b9g9r9_ufloat_pack32.e5b9g9r9_ufloat_pack32.optimal_general_linear
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.e5b9g9r9_ufloat_pack32.e5b9g9r9_ufloat_pack32.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.e5b9g9r9_ufloat_pack32.e5b9g9r9_ufloat_pack32.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.e5b9g9r9_ufloat_pack32.e5b9g9r9_ufloat_pack32.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.e5b9g9r9_ufloat_pack32.e5b9g9r9_ufloat_pack32.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.e5b9g9r9_ufloat_pack32.e5b9g9r9_ufloat_pack32.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.e5b9g9r9_ufloat_pack32.e5b9g9r9_ufloat_pack32.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.e5b9g9r9_ufloat_pack32.e5b9g9r9_ufloat_pack32.general_optimal_nearest
 dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.e5b9g9r9_ufloat_pack32.e5b9g9r9_ufloat_pack32.general_optimal_linear
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.e5b9g9r9_ufloat_pack32.e5b9g9r9_ufloat_pack32.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.e5b9g9r9_ufloat_pack32.e5b9g9r9_ufloat_pack32.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.e5b9g9r9_ufloat_pack32.e5b9g9r9_ufloat_pack32.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.e5b9g9r9_ufloat_pack32.e5b9g9r9_ufloat_pack32.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.e5b9g9r9_ufloat_pack32.e5b9g9r9_ufloat_pack32.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.e5b9g9r9_ufloat_pack32.e5b9g9r9_ufloat_pack32.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.e5b9g9r9_ufloat_pack32.e5b9g9r9_ufloat_pack32.general_general_nearest
 dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.e5b9g9r9_ufloat_pack32.e5b9g9r9_ufloat_pack32.general_general_linear
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.e5b9g9r9_ufloat_pack32.e5b9g9r9_ufloat_pack32.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.e5b9g9r9_ufloat_pack32.e5b9g9r9_ufloat_pack32.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.e5b9g9r9_ufloat_pack32.e5b9g9r9_ufloat_pack32.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.e5b9g9r9_ufloat_pack32.e5b9g9r9_ufloat_pack32.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.e5b9g9r9_ufloat_pack32.e5b9g9r9_ufloat_pack32.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.e5b9g9r9_ufloat_pack32.e5b9g9r9_ufloat_pack32.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.optimal_optimal_nearest
 dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.optimal_optimal_linear
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.optimal_general_nearest
 dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.optimal_general_linear
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.optimal_linear_nearest
 dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.optimal_linear_linear
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.optimal_linear_linear_stripes_x
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.optimal_linear_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.optimal_linear_linear_stripes_y
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.optimal_linear_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.optimal_linear_linear_stripes_z
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.optimal_linear_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.general_optimal_nearest
 dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.general_optimal_linear
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.general_general_nearest
 dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.general_general_linear
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.general_linear_nearest
 dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.general_linear_linear
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.general_linear_linear_stripes_x
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.general_linear_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.general_linear_linear_stripes_y
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.general_linear_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.general_linear_linear_stripes_z
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.general_linear_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.linear_optimal_nearest
 dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.linear_optimal_linear
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.linear_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.linear_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.linear_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.linear_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.linear_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.linear_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.linear_general_nearest
 dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.linear_general_linear
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.linear_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.linear_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.linear_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.linear_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.linear_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.linear_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.linear_linear_nearest
 dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.linear_linear_linear
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.linear_linear_linear_stripes_x
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.linear_linear_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.linear_linear_linear_stripes_y
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.linear_linear_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.linear_linear_linear_stripes_z
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.linear_linear_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.a8b8g8r8_srgb_pack32.a8b8g8r8_srgb_pack32.optimal_optimal_nearest
 dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.a8b8g8r8_srgb_pack32.a8b8g8r8_srgb_pack32.optimal_optimal_linear
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.a8b8g8r8_srgb_pack32.a8b8g8r8_srgb_pack32.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.a8b8g8r8_srgb_pack32.a8b8g8r8_srgb_pack32.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.a8b8g8r8_srgb_pack32.a8b8g8r8_srgb_pack32.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.a8b8g8r8_srgb_pack32.a8b8g8r8_srgb_pack32.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.a8b8g8r8_srgb_pack32.a8b8g8r8_srgb_pack32.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.a8b8g8r8_srgb_pack32.a8b8g8r8_srgb_pack32.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.a8b8g8r8_srgb_pack32.a8b8g8r8_srgb_pack32.optimal_general_nearest
 dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.a8b8g8r8_srgb_pack32.a8b8g8r8_srgb_pack32.optimal_general_linear
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.a8b8g8r8_srgb_pack32.a8b8g8r8_srgb_pack32.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.a8b8g8r8_srgb_pack32.a8b8g8r8_srgb_pack32.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.a8b8g8r8_srgb_pack32.a8b8g8r8_srgb_pack32.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.a8b8g8r8_srgb_pack32.a8b8g8r8_srgb_pack32.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.a8b8g8r8_srgb_pack32.a8b8g8r8_srgb_pack32.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.a8b8g8r8_srgb_pack32.a8b8g8r8_srgb_pack32.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.a8b8g8r8_srgb_pack32.a8b8g8r8_srgb_pack32.general_optimal_nearest
 dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.a8b8g8r8_srgb_pack32.a8b8g8r8_srgb_pack32.general_optimal_linear
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.a8b8g8r8_srgb_pack32.a8b8g8r8_srgb_pack32.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.a8b8g8r8_srgb_pack32.a8b8g8r8_srgb_pack32.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.a8b8g8r8_srgb_pack32.a8b8g8r8_srgb_pack32.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.a8b8g8r8_srgb_pack32.a8b8g8r8_srgb_pack32.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.a8b8g8r8_srgb_pack32.a8b8g8r8_srgb_pack32.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.a8b8g8r8_srgb_pack32.a8b8g8r8_srgb_pack32.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.a8b8g8r8_srgb_pack32.a8b8g8r8_srgb_pack32.general_general_nearest
 dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.a8b8g8r8_srgb_pack32.a8b8g8r8_srgb_pack32.general_general_linear
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.a8b8g8r8_srgb_pack32.a8b8g8r8_srgb_pack32.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.a8b8g8r8_srgb_pack32.a8b8g8r8_srgb_pack32.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.a8b8g8r8_srgb_pack32.a8b8g8r8_srgb_pack32.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.a8b8g8r8_srgb_pack32.a8b8g8r8_srgb_pack32.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.a8b8g8r8_srgb_pack32.a8b8g8r8_srgb_pack32.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.color.3d.a8b8g8r8_srgb_pack32.a8b8g8r8_srgb_pack32.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.depth_stencil.1d.d16_unorm_s8_uint_d16_unorm_s8_uint_separate_layouts.optimal_optimal_nearest
 dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.depth_stencil.1d.d16_unorm_s8_uint_d16_unorm_s8_uint_separate_layouts.optimal_general_nearest
 dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.depth_stencil.1d.d16_unorm_s8_uint_d16_unorm_s8_uint_separate_layouts.general_optimal_nearest
@@ -29805,6 +33119,7 @@
 dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.generate_mipmaps.from_previous_level.layercount_6.a8b8g8r8_srgb_pack32.optimal_general_cubic
 dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.generate_mipmaps.from_previous_level.layercount_6.a8b8g8r8_srgb_pack32.general_optimal_cubic
 dEQP-VK.api.copy_and_blit.dedicated_allocation.blit_image.all_formats.generate_mipmaps.from_previous_level.layercount_6.a8b8g8r8_srgb_pack32.general_general_cubic
+dEQP-VK.api.copy_and_blit.copy_commands2.image_to_image.simple_tests.partial_image_npot_diff_format_clear
 dEQP-VK.api.copy_and_blit.copy_commands2.image_to_image.all_formats.color.1d.r4g4_unorm_pack8.r4g4_unorm_pack8.optimal_optimal
 dEQP-VK.api.copy_and_blit.copy_commands2.image_to_image.all_formats.color.1d.r4g4_unorm_pack8.r4g4_unorm_pack8.optimal_general
 dEQP-VK.api.copy_and_blit.copy_commands2.image_to_image.all_formats.color.1d.r4g4_unorm_pack8.r4g4_unorm_pack8.general_optimal
@@ -31682,65 +34997,269 @@
 dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.1d.a8b8g8r8_srgb_pack32.a8b8g8r8_srgb_pack32.general_general_nearest
 dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.1d.a8b8g8r8_srgb_pack32.a8b8g8r8_srgb_pack32.general_general_linear
 dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_uint.r8_uint.optimal_optimal_nearest
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_uint.r8_uint.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_uint.r8_uint.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_uint.r8_uint.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_uint.r8_uint.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_uint.r8_uint.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_uint.r8_uint.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_uint.r8_uint.optimal_general_nearest
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_uint.r8_uint.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_uint.r8_uint.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_uint.r8_uint.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_uint.r8_uint.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_uint.r8_uint.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_uint.r8_uint.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_uint.r8_uint.general_optimal_nearest
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_uint.r8_uint.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_uint.r8_uint.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_uint.r8_uint.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_uint.r8_uint.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_uint.r8_uint.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_uint.r8_uint.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_uint.r8_uint.general_general_nearest
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_uint.r8_uint.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_uint.r8_uint.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_uint.r8_uint.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_uint.r8_uint.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_uint.r8_uint.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_uint.r8_uint.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_sint.r8_sint.optimal_optimal_nearest
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_sint.r8_sint.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_sint.r8_sint.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_sint.r8_sint.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_sint.r8_sint.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_sint.r8_sint.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_sint.r8_sint.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_sint.r8_sint.optimal_general_nearest
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_sint.r8_sint.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_sint.r8_sint.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_sint.r8_sint.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_sint.r8_sint.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_sint.r8_sint.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_sint.r8_sint.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_sint.r8_sint.general_optimal_nearest
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_sint.r8_sint.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_sint.r8_sint.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_sint.r8_sint.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_sint.r8_sint.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_sint.r8_sint.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_sint.r8_sint.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_sint.r8_sint.general_general_nearest
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_sint.r8_sint.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_sint.r8_sint.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_sint.r8_sint.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_sint.r8_sint.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_sint.r8_sint.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_sint.r8_sint.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.optimal_optimal_nearest
 dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.optimal_optimal_linear
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.optimal_general_nearest
 dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.optimal_general_linear
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.optimal_linear_nearest
 dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.optimal_linear_linear
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.optimal_linear_linear_stripes_x
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.optimal_linear_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.optimal_linear_linear_stripes_y
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.optimal_linear_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.optimal_linear_linear_stripes_z
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.optimal_linear_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.general_optimal_nearest
 dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.general_optimal_linear
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.general_general_nearest
 dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.general_general_linear
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.general_linear_nearest
 dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.general_linear_linear
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.general_linear_linear_stripes_x
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.general_linear_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.general_linear_linear_stripes_y
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.general_linear_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.general_linear_linear_stripes_z
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.general_linear_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.linear_optimal_nearest
 dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.linear_optimal_linear
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.linear_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.linear_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.linear_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.linear_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.linear_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.linear_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.linear_general_nearest
 dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.linear_general_linear
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.linear_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.linear_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.linear_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.linear_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.linear_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.linear_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.linear_linear_nearest
 dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.linear_linear_linear
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.linear_linear_linear_stripes_x
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.linear_linear_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.linear_linear_linear_stripes_y
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.linear_linear_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.linear_linear_linear_stripes_z
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r4g4_unorm_pack8.r4g4_unorm_pack8.linear_linear_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.e5b9g9r9_ufloat_pack32.e5b9g9r9_ufloat_pack32.optimal_optimal_nearest
 dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.e5b9g9r9_ufloat_pack32.e5b9g9r9_ufloat_pack32.optimal_optimal_linear
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.e5b9g9r9_ufloat_pack32.e5b9g9r9_ufloat_pack32.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.e5b9g9r9_ufloat_pack32.e5b9g9r9_ufloat_pack32.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.e5b9g9r9_ufloat_pack32.e5b9g9r9_ufloat_pack32.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.e5b9g9r9_ufloat_pack32.e5b9g9r9_ufloat_pack32.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.e5b9g9r9_ufloat_pack32.e5b9g9r9_ufloat_pack32.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.e5b9g9r9_ufloat_pack32.e5b9g9r9_ufloat_pack32.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.e5b9g9r9_ufloat_pack32.e5b9g9r9_ufloat_pack32.optimal_general_nearest
 dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.e5b9g9r9_ufloat_pack32.e5b9g9r9_ufloat_pack32.optimal_general_linear
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.e5b9g9r9_ufloat_pack32.e5b9g9r9_ufloat_pack32.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.e5b9g9r9_ufloat_pack32.e5b9g9r9_ufloat_pack32.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.e5b9g9r9_ufloat_pack32.e5b9g9r9_ufloat_pack32.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.e5b9g9r9_ufloat_pack32.e5b9g9r9_ufloat_pack32.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.e5b9g9r9_ufloat_pack32.e5b9g9r9_ufloat_pack32.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.e5b9g9r9_ufloat_pack32.e5b9g9r9_ufloat_pack32.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.e5b9g9r9_ufloat_pack32.e5b9g9r9_ufloat_pack32.general_optimal_nearest
 dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.e5b9g9r9_ufloat_pack32.e5b9g9r9_ufloat_pack32.general_optimal_linear
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.e5b9g9r9_ufloat_pack32.e5b9g9r9_ufloat_pack32.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.e5b9g9r9_ufloat_pack32.e5b9g9r9_ufloat_pack32.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.e5b9g9r9_ufloat_pack32.e5b9g9r9_ufloat_pack32.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.e5b9g9r9_ufloat_pack32.e5b9g9r9_ufloat_pack32.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.e5b9g9r9_ufloat_pack32.e5b9g9r9_ufloat_pack32.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.e5b9g9r9_ufloat_pack32.e5b9g9r9_ufloat_pack32.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.e5b9g9r9_ufloat_pack32.e5b9g9r9_ufloat_pack32.general_general_nearest
 dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.e5b9g9r9_ufloat_pack32.e5b9g9r9_ufloat_pack32.general_general_linear
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.e5b9g9r9_ufloat_pack32.e5b9g9r9_ufloat_pack32.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.e5b9g9r9_ufloat_pack32.e5b9g9r9_ufloat_pack32.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.e5b9g9r9_ufloat_pack32.e5b9g9r9_ufloat_pack32.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.e5b9g9r9_ufloat_pack32.e5b9g9r9_ufloat_pack32.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.e5b9g9r9_ufloat_pack32.e5b9g9r9_ufloat_pack32.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.e5b9g9r9_ufloat_pack32.e5b9g9r9_ufloat_pack32.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.optimal_optimal_nearest
 dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.optimal_optimal_linear
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.optimal_general_nearest
 dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.optimal_general_linear
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.optimal_linear_nearest
 dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.optimal_linear_linear
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.optimal_linear_linear_stripes_x
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.optimal_linear_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.optimal_linear_linear_stripes_y
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.optimal_linear_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.optimal_linear_linear_stripes_z
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.optimal_linear_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.general_optimal_nearest
 dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.general_optimal_linear
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.general_general_nearest
 dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.general_general_linear
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.general_linear_nearest
 dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.general_linear_linear
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.general_linear_linear_stripes_x
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.general_linear_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.general_linear_linear_stripes_y
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.general_linear_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.general_linear_linear_stripes_z
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.general_linear_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.linear_optimal_nearest
 dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.linear_optimal_linear
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.linear_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.linear_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.linear_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.linear_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.linear_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.linear_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.linear_general_nearest
 dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.linear_general_linear
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.linear_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.linear_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.linear_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.linear_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.linear_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.linear_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.linear_linear_nearest
 dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.linear_linear_linear
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.linear_linear_linear_stripes_x
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.linear_linear_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.linear_linear_linear_stripes_y
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.linear_linear_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.linear_linear_linear_stripes_z
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.r8_srgb.r8_srgb.linear_linear_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.a8b8g8r8_srgb_pack32.a8b8g8r8_srgb_pack32.optimal_optimal_nearest
 dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.a8b8g8r8_srgb_pack32.a8b8g8r8_srgb_pack32.optimal_optimal_linear
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.a8b8g8r8_srgb_pack32.a8b8g8r8_srgb_pack32.optimal_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.a8b8g8r8_srgb_pack32.a8b8g8r8_srgb_pack32.optimal_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.a8b8g8r8_srgb_pack32.a8b8g8r8_srgb_pack32.optimal_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.a8b8g8r8_srgb_pack32.a8b8g8r8_srgb_pack32.optimal_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.a8b8g8r8_srgb_pack32.a8b8g8r8_srgb_pack32.optimal_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.a8b8g8r8_srgb_pack32.a8b8g8r8_srgb_pack32.optimal_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.a8b8g8r8_srgb_pack32.a8b8g8r8_srgb_pack32.optimal_general_nearest
 dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.a8b8g8r8_srgb_pack32.a8b8g8r8_srgb_pack32.optimal_general_linear
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.a8b8g8r8_srgb_pack32.a8b8g8r8_srgb_pack32.optimal_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.a8b8g8r8_srgb_pack32.a8b8g8r8_srgb_pack32.optimal_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.a8b8g8r8_srgb_pack32.a8b8g8r8_srgb_pack32.optimal_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.a8b8g8r8_srgb_pack32.a8b8g8r8_srgb_pack32.optimal_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.a8b8g8r8_srgb_pack32.a8b8g8r8_srgb_pack32.optimal_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.a8b8g8r8_srgb_pack32.a8b8g8r8_srgb_pack32.optimal_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.a8b8g8r8_srgb_pack32.a8b8g8r8_srgb_pack32.general_optimal_nearest
 dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.a8b8g8r8_srgb_pack32.a8b8g8r8_srgb_pack32.general_optimal_linear
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.a8b8g8r8_srgb_pack32.a8b8g8r8_srgb_pack32.general_optimal_linear_stripes_x
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.a8b8g8r8_srgb_pack32.a8b8g8r8_srgb_pack32.general_optimal_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.a8b8g8r8_srgb_pack32.a8b8g8r8_srgb_pack32.general_optimal_linear_stripes_y
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.a8b8g8r8_srgb_pack32.a8b8g8r8_srgb_pack32.general_optimal_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.a8b8g8r8_srgb_pack32.a8b8g8r8_srgb_pack32.general_optimal_linear_stripes_z
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.a8b8g8r8_srgb_pack32.a8b8g8r8_srgb_pack32.general_optimal_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.a8b8g8r8_srgb_pack32.a8b8g8r8_srgb_pack32.general_general_nearest
 dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.a8b8g8r8_srgb_pack32.a8b8g8r8_srgb_pack32.general_general_linear
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.a8b8g8r8_srgb_pack32.a8b8g8r8_srgb_pack32.general_general_linear_stripes_x
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.a8b8g8r8_srgb_pack32.a8b8g8r8_srgb_pack32.general_general_nearest_stripes_x
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.a8b8g8r8_srgb_pack32.a8b8g8r8_srgb_pack32.general_general_linear_stripes_y
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.a8b8g8r8_srgb_pack32.a8b8g8r8_srgb_pack32.general_general_nearest_stripes_y
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.a8b8g8r8_srgb_pack32.a8b8g8r8_srgb_pack32.general_general_linear_stripes_z
+dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.color.3d.a8b8g8r8_srgb_pack32.a8b8g8r8_srgb_pack32.general_general_nearest_stripes_z
 dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.depth_stencil.1d.d16_unorm_s8_uint_d16_unorm_s8_uint_separate_layouts.optimal_optimal_nearest
 dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.depth_stencil.1d.d16_unorm_s8_uint_d16_unorm_s8_uint_separate_layouts.optimal_general_nearest
 dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.all_formats.depth_stencil.1d.d16_unorm_s8_uint_d16_unorm_s8_uint_separate_layouts.general_optimal_nearest
@@ -46959,9 +50478,14 @@
 dEQP-VK.api.external.memory.android_hardware_buffer.image_formats.d32_sfloat_s8_uint
 dEQP-VK.api.external.memory.android_hardware_buffer.image_formats.s8_uint
 dEQP-VK.api.external.fence.sync_fd.import_signaled_temporary
+dEQP-VK.api.descriptor_set.descriptor_set_layout_binding.update_subsequent_binding
+dEQP-VK.api.descriptor_set.descriptor_set_layout_binding.layout_binding_order
 dEQP-VK.api.pipeline.pipeline_layout.lifetime.destroy_after_end
 dEQP-VK.api.tooling_info.validate_getter
 dEQP-VK.api.tooling_info.validate_tools_properties
+dEQP-VK.memory.mapping.suballocation.full.variable.implicit_unmap
+dEQP-VK.memory.mapping.dedicated_alloc.buffer.full.variable.implicit_unmap
+dEQP-VK.memory.mapping.dedicated_alloc.image.full.variable.implicit_unmap
 dEQP-VK.memory.device_memory_report.create_and_destroy_object.device
 dEQP-VK.memory.device_memory_report.create_and_destroy_object.device_memory_small
 dEQP-VK.memory.device_memory_report.create_and_destroy_object.buffer_uniform_small
@@ -59408,24 +62932,12 @@
 dEQP-VK.pipeline.sampler.exact_sampling.b8g8r8_snorm.gradient.unnormalized_coords.centered
 dEQP-VK.pipeline.sampler.exact_sampling.b8g8r8_snorm.gradient.unnormalized_coords.edge_left
 dEQP-VK.pipeline.sampler.exact_sampling.b8g8r8_snorm.gradient.unnormalized_coords.edge_right
-dEQP-VK.pipeline.sampler.exact_sampling.b8g8r8_snorm.solid_color.normalized_coords.centered
-dEQP-VK.pipeline.sampler.exact_sampling.b8g8r8_snorm.solid_color.normalized_coords.edge_left
-dEQP-VK.pipeline.sampler.exact_sampling.b8g8r8_snorm.solid_color.normalized_coords.edge_right
-dEQP-VK.pipeline.sampler.exact_sampling.b8g8r8_snorm.solid_color.unnormalized_coords.centered
-dEQP-VK.pipeline.sampler.exact_sampling.b8g8r8_snorm.solid_color.unnormalized_coords.edge_left
-dEQP-VK.pipeline.sampler.exact_sampling.b8g8r8_snorm.solid_color.unnormalized_coords.edge_right
 dEQP-VK.pipeline.sampler.exact_sampling.r8g8b8a8_snorm.gradient.normalized_coords.centered
 dEQP-VK.pipeline.sampler.exact_sampling.r8g8b8a8_snorm.gradient.normalized_coords.edge_left
 dEQP-VK.pipeline.sampler.exact_sampling.r8g8b8a8_snorm.gradient.normalized_coords.edge_right
 dEQP-VK.pipeline.sampler.exact_sampling.r8g8b8a8_snorm.gradient.unnormalized_coords.centered
 dEQP-VK.pipeline.sampler.exact_sampling.r8g8b8a8_snorm.gradient.unnormalized_coords.edge_left
 dEQP-VK.pipeline.sampler.exact_sampling.r8g8b8a8_snorm.gradient.unnormalized_coords.edge_right
-dEQP-VK.pipeline.sampler.exact_sampling.r8g8b8a8_snorm.solid_color.normalized_coords.centered
-dEQP-VK.pipeline.sampler.exact_sampling.r8g8b8a8_snorm.solid_color.normalized_coords.edge_left
-dEQP-VK.pipeline.sampler.exact_sampling.r8g8b8a8_snorm.solid_color.normalized_coords.edge_right
-dEQP-VK.pipeline.sampler.exact_sampling.r8g8b8a8_snorm.solid_color.unnormalized_coords.centered
-dEQP-VK.pipeline.sampler.exact_sampling.r8g8b8a8_snorm.solid_color.unnormalized_coords.edge_left
-dEQP-VK.pipeline.sampler.exact_sampling.r8g8b8a8_snorm.solid_color.unnormalized_coords.edge_right
 dEQP-VK.pipeline.sampler.exact_sampling.r8g8_uint.gradient.normalized_coords.centered
 dEQP-VK.pipeline.sampler.exact_sampling.r8g8_uint.gradient.normalized_coords.edge_left
 dEQP-VK.pipeline.sampler.exact_sampling.r8g8_uint.gradient.normalized_coords.edge_right
@@ -59552,12 +63064,6 @@
 dEQP-VK.pipeline.sampler.exact_sampling.r8_snorm.gradient.unnormalized_coords.centered
 dEQP-VK.pipeline.sampler.exact_sampling.r8_snorm.gradient.unnormalized_coords.edge_left
 dEQP-VK.pipeline.sampler.exact_sampling.r8_snorm.gradient.unnormalized_coords.edge_right
-dEQP-VK.pipeline.sampler.exact_sampling.r8_snorm.solid_color.normalized_coords.centered
-dEQP-VK.pipeline.sampler.exact_sampling.r8_snorm.solid_color.normalized_coords.edge_left
-dEQP-VK.pipeline.sampler.exact_sampling.r8_snorm.solid_color.normalized_coords.edge_right
-dEQP-VK.pipeline.sampler.exact_sampling.r8_snorm.solid_color.unnormalized_coords.centered
-dEQP-VK.pipeline.sampler.exact_sampling.r8_snorm.solid_color.unnormalized_coords.edge_left
-dEQP-VK.pipeline.sampler.exact_sampling.r8_snorm.solid_color.unnormalized_coords.edge_right
 dEQP-VK.pipeline.sampler.exact_sampling.b8g8r8_sint.gradient.normalized_coords.centered
 dEQP-VK.pipeline.sampler.exact_sampling.b8g8r8_sint.gradient.normalized_coords.edge_left
 dEQP-VK.pipeline.sampler.exact_sampling.b8g8r8_sint.gradient.normalized_coords.edge_right
@@ -59576,12 +63082,6 @@
 dEQP-VK.pipeline.sampler.exact_sampling.r8g8_snorm.gradient.unnormalized_coords.centered
 dEQP-VK.pipeline.sampler.exact_sampling.r8g8_snorm.gradient.unnormalized_coords.edge_left
 dEQP-VK.pipeline.sampler.exact_sampling.r8g8_snorm.gradient.unnormalized_coords.edge_right
-dEQP-VK.pipeline.sampler.exact_sampling.r8g8_snorm.solid_color.normalized_coords.centered
-dEQP-VK.pipeline.sampler.exact_sampling.r8g8_snorm.solid_color.normalized_coords.edge_left
-dEQP-VK.pipeline.sampler.exact_sampling.r8g8_snorm.solid_color.normalized_coords.edge_right
-dEQP-VK.pipeline.sampler.exact_sampling.r8g8_snorm.solid_color.unnormalized_coords.centered
-dEQP-VK.pipeline.sampler.exact_sampling.r8g8_snorm.solid_color.unnormalized_coords.edge_left
-dEQP-VK.pipeline.sampler.exact_sampling.r8g8_snorm.solid_color.unnormalized_coords.edge_right
 dEQP-VK.pipeline.sampler.exact_sampling.b8g8r8_unorm.gradient.normalized_coords.centered
 dEQP-VK.pipeline.sampler.exact_sampling.b8g8r8_unorm.gradient.normalized_coords.edge_left
 dEQP-VK.pipeline.sampler.exact_sampling.b8g8r8_unorm.gradient.normalized_coords.edge_right
@@ -59744,12 +63244,6 @@
 dEQP-VK.pipeline.sampler.exact_sampling.r16_snorm.gradient.unnormalized_coords.centered
 dEQP-VK.pipeline.sampler.exact_sampling.r16_snorm.gradient.unnormalized_coords.edge_left
 dEQP-VK.pipeline.sampler.exact_sampling.r16_snorm.gradient.unnormalized_coords.edge_right
-dEQP-VK.pipeline.sampler.exact_sampling.r16_snorm.solid_color.normalized_coords.centered
-dEQP-VK.pipeline.sampler.exact_sampling.r16_snorm.solid_color.normalized_coords.edge_left
-dEQP-VK.pipeline.sampler.exact_sampling.r16_snorm.solid_color.normalized_coords.edge_right
-dEQP-VK.pipeline.sampler.exact_sampling.r16_snorm.solid_color.unnormalized_coords.centered
-dEQP-VK.pipeline.sampler.exact_sampling.r16_snorm.solid_color.unnormalized_coords.edge_left
-dEQP-VK.pipeline.sampler.exact_sampling.r16_snorm.solid_color.unnormalized_coords.edge_right
 dEQP-VK.pipeline.sampler.exact_sampling.r32_sfloat.gradient.normalized_coords.centered
 dEQP-VK.pipeline.sampler.exact_sampling.r32_sfloat.gradient.normalized_coords.edge_left
 dEQP-VK.pipeline.sampler.exact_sampling.r32_sfloat.gradient.normalized_coords.edge_right
@@ -59972,6 +63466,216 @@
 dEQP-VK.pipeline.sampler.separate_stencil_usage.view_type.cube_array.format.d32_sfloat_s8_uint.mag_reduce.comp_r_zero_zero_zero.average
 dEQP-VK.pipeline.sampler.separate_stencil_usage.view_type.cube_array.format.d32_sfloat_s8_uint.mag_reduce.comp_r_zero_zero_zero.min
 dEQP-VK.pipeline.sampler.separate_stencil_usage.view_type.cube_array.format.d32_sfloat_s8_uint.mag_reduce.comp_r_zero_zero_zero.max
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8_unorm.component_swizzle.r_g_b_a
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8_unorm.component_swizzle.g_b_a_r
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8_unorm.component_swizzle.b_a_r_g
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8_unorm.component_swizzle.a_r_g_b
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8_unorm.subresource_range.lod_base_mip_level
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8_unorm.subresource_range.lod_mip_levels
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8_unorm.subresource_range.array_layer_second
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8_unorm.subresource_range.array_layer_last
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8_unorm.subresource_range.lod_base_mip_level_array_layer_second
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8_unorm.subresource_range.lod_mip_levels_array_layer_second
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8_unorm.subresource_range.lod_base_mip_level_array_layer_last
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8_unorm.subresource_range.lod_mip_levels_array_layer_last
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8_unorm.subresource_range.lod_base_mip_level_remaining_levels
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8_unorm.subresource_range.array_layer_last_remaining_layers
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8_unorm.subresource_range.lod_base_mip_level_array_layer_last_remaining_levels_and_layers
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8_snorm.component_swizzle.r_g_b_a
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8_snorm.component_swizzle.g_b_a_r
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8_snorm.component_swizzle.b_a_r_g
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8_snorm.component_swizzle.a_r_g_b
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8_snorm.subresource_range.lod_base_mip_level
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8_snorm.subresource_range.lod_mip_levels
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8_snorm.subresource_range.array_layer_second
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8_snorm.subresource_range.array_layer_last
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8_snorm.subresource_range.lod_base_mip_level_array_layer_second
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8_snorm.subresource_range.lod_mip_levels_array_layer_second
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8_snorm.subresource_range.lod_base_mip_level_array_layer_last
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8_snorm.subresource_range.lod_mip_levels_array_layer_last
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8_snorm.subresource_range.lod_base_mip_level_remaining_levels
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8_snorm.subresource_range.array_layer_last_remaining_layers
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8_snorm.subresource_range.lod_base_mip_level_array_layer_last_remaining_levels_and_layers
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8_uscaled.component_swizzle.r_g_b_a
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8_uscaled.component_swizzle.g_b_a_r
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8_uscaled.component_swizzle.b_a_r_g
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8_uscaled.component_swizzle.a_r_g_b
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8_uscaled.subresource_range.lod_base_mip_level
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8_uscaled.subresource_range.lod_mip_levels
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8_uscaled.subresource_range.array_layer_second
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8_uscaled.subresource_range.array_layer_last
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8_uscaled.subresource_range.lod_base_mip_level_array_layer_second
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8_uscaled.subresource_range.lod_mip_levels_array_layer_second
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8_uscaled.subresource_range.lod_base_mip_level_array_layer_last
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8_uscaled.subresource_range.lod_mip_levels_array_layer_last
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8_uscaled.subresource_range.lod_base_mip_level_remaining_levels
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8_uscaled.subresource_range.array_layer_last_remaining_layers
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8_uscaled.subresource_range.lod_base_mip_level_array_layer_last_remaining_levels_and_layers
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8_sscaled.component_swizzle.r_g_b_a
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8_sscaled.component_swizzle.g_b_a_r
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8_sscaled.component_swizzle.b_a_r_g
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8_sscaled.component_swizzle.a_r_g_b
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8_sscaled.subresource_range.lod_base_mip_level
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8_sscaled.subresource_range.lod_mip_levels
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8_sscaled.subresource_range.array_layer_second
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8_sscaled.subresource_range.array_layer_last
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8_sscaled.subresource_range.lod_base_mip_level_array_layer_second
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8_sscaled.subresource_range.lod_mip_levels_array_layer_second
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8_sscaled.subresource_range.lod_base_mip_level_array_layer_last
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8_sscaled.subresource_range.lod_mip_levels_array_layer_last
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8_sscaled.subresource_range.lod_base_mip_level_remaining_levels
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8_sscaled.subresource_range.array_layer_last_remaining_layers
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8_sscaled.subresource_range.lod_base_mip_level_array_layer_last_remaining_levels_and_layers
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8_uint.component_swizzle.r_g_b_a
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8_uint.component_swizzle.g_b_a_r
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8_uint.component_swizzle.b_a_r_g
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8_uint.component_swizzle.a_r_g_b
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8_uint.subresource_range.lod_base_mip_level
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8_uint.subresource_range.lod_mip_levels
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8_uint.subresource_range.array_layer_second
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8_uint.subresource_range.array_layer_last
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8_uint.subresource_range.lod_base_mip_level_array_layer_second
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8_uint.subresource_range.lod_mip_levels_array_layer_second
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8_uint.subresource_range.lod_base_mip_level_array_layer_last
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8_uint.subresource_range.lod_mip_levels_array_layer_last
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8_uint.subresource_range.lod_base_mip_level_remaining_levels
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8_uint.subresource_range.array_layer_last_remaining_layers
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8_uint.subresource_range.lod_base_mip_level_array_layer_last_remaining_levels_and_layers
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8_sint.component_swizzle.r_g_b_a
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8_sint.component_swizzle.g_b_a_r
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8_sint.component_swizzle.b_a_r_g
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8_sint.component_swizzle.a_r_g_b
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8_sint.subresource_range.lod_base_mip_level
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8_sint.subresource_range.lod_mip_levels
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8_sint.subresource_range.array_layer_second
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8_sint.subresource_range.array_layer_last
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8_sint.subresource_range.lod_base_mip_level_array_layer_second
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8_sint.subresource_range.lod_mip_levels_array_layer_second
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8_sint.subresource_range.lod_base_mip_level_array_layer_last
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8_sint.subresource_range.lod_mip_levels_array_layer_last
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8_sint.subresource_range.lod_base_mip_level_remaining_levels
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8_sint.subresource_range.array_layer_last_remaining_layers
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8_sint.subresource_range.lod_base_mip_level_array_layer_last_remaining_levels_and_layers
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8_srgb.component_swizzle.r_g_b_a
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8_srgb.component_swizzle.g_b_a_r
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8_srgb.component_swizzle.b_a_r_g
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8_srgb.component_swizzle.a_r_g_b
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8_srgb.subresource_range.lod_base_mip_level
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8_srgb.subresource_range.lod_mip_levels
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8_srgb.subresource_range.array_layer_second
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8_srgb.subresource_range.array_layer_last
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8_srgb.subresource_range.lod_base_mip_level_array_layer_second
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8_srgb.subresource_range.lod_mip_levels_array_layer_second
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8_srgb.subresource_range.lod_base_mip_level_array_layer_last
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8_srgb.subresource_range.lod_mip_levels_array_layer_last
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8_srgb.subresource_range.lod_base_mip_level_remaining_levels
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8_srgb.subresource_range.array_layer_last_remaining_layers
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8_srgb.subresource_range.lod_base_mip_level_array_layer_last_remaining_levels_and_layers
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8a8_unorm.component_swizzle.r_g_b_a
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8a8_unorm.component_swizzle.g_b_a_r
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8a8_unorm.component_swizzle.b_a_r_g
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8a8_unorm.component_swizzle.a_r_g_b
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8a8_unorm.subresource_range.lod_base_mip_level
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8a8_unorm.subresource_range.lod_mip_levels
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8a8_unorm.subresource_range.array_layer_second
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8a8_unorm.subresource_range.array_layer_last
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8a8_unorm.subresource_range.lod_base_mip_level_array_layer_second
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8a8_unorm.subresource_range.lod_mip_levels_array_layer_second
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8a8_unorm.subresource_range.lod_base_mip_level_array_layer_last
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8a8_unorm.subresource_range.lod_mip_levels_array_layer_last
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8a8_unorm.subresource_range.lod_base_mip_level_remaining_levels
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8a8_unorm.subresource_range.array_layer_last_remaining_layers
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8a8_unorm.subresource_range.lod_base_mip_level_array_layer_last_remaining_levels_and_layers
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8a8_snorm.component_swizzle.r_g_b_a
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8a8_snorm.component_swizzle.g_b_a_r
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8a8_snorm.component_swizzle.b_a_r_g
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8a8_snorm.component_swizzle.a_r_g_b
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8a8_snorm.subresource_range.lod_base_mip_level
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8a8_snorm.subresource_range.lod_mip_levels
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8a8_snorm.subresource_range.array_layer_second
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8a8_snorm.subresource_range.array_layer_last
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8a8_snorm.subresource_range.lod_base_mip_level_array_layer_second
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8a8_snorm.subresource_range.lod_mip_levels_array_layer_second
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8a8_snorm.subresource_range.lod_base_mip_level_array_layer_last
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8a8_snorm.subresource_range.lod_mip_levels_array_layer_last
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8a8_snorm.subresource_range.lod_base_mip_level_remaining_levels
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8a8_snorm.subresource_range.array_layer_last_remaining_layers
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8a8_snorm.subresource_range.lod_base_mip_level_array_layer_last_remaining_levels_and_layers
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8a8_uscaled.component_swizzle.r_g_b_a
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8a8_uscaled.component_swizzle.g_b_a_r
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8a8_uscaled.component_swizzle.b_a_r_g
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8a8_uscaled.component_swizzle.a_r_g_b
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8a8_uscaled.subresource_range.lod_base_mip_level
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8a8_uscaled.subresource_range.lod_mip_levels
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8a8_uscaled.subresource_range.array_layer_second
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8a8_uscaled.subresource_range.array_layer_last
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8a8_uscaled.subresource_range.lod_base_mip_level_array_layer_second
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8a8_uscaled.subresource_range.lod_mip_levels_array_layer_second
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8a8_uscaled.subresource_range.lod_base_mip_level_array_layer_last
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8a8_uscaled.subresource_range.lod_mip_levels_array_layer_last
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8a8_uscaled.subresource_range.lod_base_mip_level_remaining_levels
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8a8_uscaled.subresource_range.array_layer_last_remaining_layers
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8a8_uscaled.subresource_range.lod_base_mip_level_array_layer_last_remaining_levels_and_layers
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8a8_sscaled.component_swizzle.r_g_b_a
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8a8_sscaled.component_swizzle.g_b_a_r
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8a8_sscaled.component_swizzle.b_a_r_g
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8a8_sscaled.component_swizzle.a_r_g_b
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8a8_sscaled.subresource_range.lod_base_mip_level
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8a8_sscaled.subresource_range.lod_mip_levels
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8a8_sscaled.subresource_range.array_layer_second
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8a8_sscaled.subresource_range.array_layer_last
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8a8_sscaled.subresource_range.lod_base_mip_level_array_layer_second
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8a8_sscaled.subresource_range.lod_mip_levels_array_layer_second
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8a8_sscaled.subresource_range.lod_base_mip_level_array_layer_last
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8a8_sscaled.subresource_range.lod_mip_levels_array_layer_last
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8a8_sscaled.subresource_range.lod_base_mip_level_remaining_levels
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8a8_sscaled.subresource_range.array_layer_last_remaining_layers
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8a8_sscaled.subresource_range.lod_base_mip_level_array_layer_last_remaining_levels_and_layers
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8a8_uint.component_swizzle.r_g_b_a
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8a8_uint.component_swizzle.g_b_a_r
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8a8_uint.component_swizzle.b_a_r_g
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8a8_uint.component_swizzle.a_r_g_b
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8a8_uint.subresource_range.lod_base_mip_level
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8a8_uint.subresource_range.lod_mip_levels
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8a8_uint.subresource_range.array_layer_second
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8a8_uint.subresource_range.array_layer_last
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8a8_uint.subresource_range.lod_base_mip_level_array_layer_second
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8a8_uint.subresource_range.lod_mip_levels_array_layer_second
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8a8_uint.subresource_range.lod_base_mip_level_array_layer_last
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8a8_uint.subresource_range.lod_mip_levels_array_layer_last
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8a8_uint.subresource_range.lod_base_mip_level_remaining_levels
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8a8_uint.subresource_range.array_layer_last_remaining_layers
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8a8_uint.subresource_range.lod_base_mip_level_array_layer_last_remaining_levels_and_layers
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8a8_sint.component_swizzle.r_g_b_a
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8a8_sint.component_swizzle.g_b_a_r
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8a8_sint.component_swizzle.b_a_r_g
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8a8_sint.component_swizzle.a_r_g_b
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8a8_sint.subresource_range.lod_base_mip_level
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8a8_sint.subresource_range.lod_mip_levels
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8a8_sint.subresource_range.array_layer_second
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8a8_sint.subresource_range.array_layer_last
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8a8_sint.subresource_range.lod_base_mip_level_array_layer_second
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8a8_sint.subresource_range.lod_mip_levels_array_layer_second
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8a8_sint.subresource_range.lod_base_mip_level_array_layer_last
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8a8_sint.subresource_range.lod_mip_levels_array_layer_last
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8a8_sint.subresource_range.lod_base_mip_level_remaining_levels
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8a8_sint.subresource_range.array_layer_last_remaining_layers
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8a8_sint.subresource_range.lod_base_mip_level_array_layer_last_remaining_levels_and_layers
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8a8_srgb.component_swizzle.r_g_b_a
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8a8_srgb.component_swizzle.g_b_a_r
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8a8_srgb.component_swizzle.b_a_r_g
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8a8_srgb.component_swizzle.a_r_g_b
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8a8_srgb.subresource_range.lod_base_mip_level
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8a8_srgb.subresource_range.lod_mip_levels
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8a8_srgb.subresource_range.array_layer_second
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8a8_srgb.subresource_range.array_layer_last
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8a8_srgb.subresource_range.lod_base_mip_level_array_layer_second
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8a8_srgb.subresource_range.lod_mip_levels_array_layer_second
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8a8_srgb.subresource_range.lod_base_mip_level_array_layer_last
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8a8_srgb.subresource_range.lod_mip_levels_array_layer_last
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8a8_srgb.subresource_range.lod_base_mip_level_remaining_levels
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8a8_srgb.subresource_range.array_layer_last_remaining_layers
+dEQP-VK.pipeline.image_view.view_type.1d.format.b8g8r8a8_srgb.subresource_range.lod_base_mip_level_array_layer_last_remaining_levels_and_layers
 dEQP-VK.pipeline.image_view.view_type.1d.format.a4r4g4b4_unorm_pack16_ext.component_swizzle.r_g_b_a
 dEQP-VK.pipeline.image_view.view_type.1d.format.a4r4g4b4_unorm_pack16_ext.component_swizzle.g_b_a_r
 dEQP-VK.pipeline.image_view.view_type.1d.format.a4r4g4b4_unorm_pack16_ext.component_swizzle.b_a_r_g
@@ -60002,6 +63706,258 @@
 dEQP-VK.pipeline.image_view.view_type.1d.format.a4b4g4r4_unorm_pack16_ext.subresource_range.lod_base_mip_level_remaining_levels
 dEQP-VK.pipeline.image_view.view_type.1d.format.a4b4g4r4_unorm_pack16_ext.subresource_range.array_layer_last_remaining_layers
 dEQP-VK.pipeline.image_view.view_type.1d.format.a4b4g4r4_unorm_pack16_ext.subresource_range.lod_base_mip_level_array_layer_last_remaining_levels_and_layers
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_unorm.component_swizzle.r_g_b_a
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_unorm.component_swizzle.g_b_a_r
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_unorm.component_swizzle.b_a_r_g
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_unorm.component_swizzle.a_r_g_b
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_unorm.subresource_range.lod_base_mip_level
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_unorm.subresource_range.lod_mip_levels
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_unorm.subresource_range.base_array_layer
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_unorm.subresource_range.array_size
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_unorm.subresource_range.array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_unorm.subresource_range.lod_base_mip_level_base_array_layer
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_unorm.subresource_range.lod_mip_levels_base_array_layer
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_unorm.subresource_range.lod_base_mip_level_array_size
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_unorm.subresource_range.lod_mip_levels_array_size
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_unorm.subresource_range.lod_base_mip_level_array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_unorm.subresource_range.lod_mip_levels_array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_unorm.subresource_range.lod_base_mip_level_remaining_levels
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_unorm.subresource_range.base_array_layer_remaining_layers
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_unorm.subresource_range.lod_base_mip_level_base_array_layer_remaining_levels_and_layers
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_snorm.component_swizzle.r_g_b_a
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_snorm.component_swizzle.g_b_a_r
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_snorm.component_swizzle.b_a_r_g
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_snorm.component_swizzle.a_r_g_b
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_snorm.subresource_range.lod_base_mip_level
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_snorm.subresource_range.lod_mip_levels
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_snorm.subresource_range.base_array_layer
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_snorm.subresource_range.array_size
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_snorm.subresource_range.array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_snorm.subresource_range.lod_base_mip_level_base_array_layer
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_snorm.subresource_range.lod_mip_levels_base_array_layer
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_snorm.subresource_range.lod_base_mip_level_array_size
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_snorm.subresource_range.lod_mip_levels_array_size
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_snorm.subresource_range.lod_base_mip_level_array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_snorm.subresource_range.lod_mip_levels_array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_snorm.subresource_range.lod_base_mip_level_remaining_levels
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_snorm.subresource_range.base_array_layer_remaining_layers
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_snorm.subresource_range.lod_base_mip_level_base_array_layer_remaining_levels_and_layers
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_uscaled.component_swizzle.r_g_b_a
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_uscaled.component_swizzle.g_b_a_r
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_uscaled.component_swizzle.b_a_r_g
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_uscaled.component_swizzle.a_r_g_b
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_uscaled.subresource_range.lod_base_mip_level
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_uscaled.subresource_range.lod_mip_levels
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_uscaled.subresource_range.base_array_layer
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_uscaled.subresource_range.array_size
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_uscaled.subresource_range.array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_uscaled.subresource_range.lod_base_mip_level_base_array_layer
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_uscaled.subresource_range.lod_mip_levels_base_array_layer
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_uscaled.subresource_range.lod_base_mip_level_array_size
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_uscaled.subresource_range.lod_mip_levels_array_size
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_uscaled.subresource_range.lod_base_mip_level_array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_uscaled.subresource_range.lod_mip_levels_array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_uscaled.subresource_range.lod_base_mip_level_remaining_levels
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_uscaled.subresource_range.base_array_layer_remaining_layers
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_uscaled.subresource_range.lod_base_mip_level_base_array_layer_remaining_levels_and_layers
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_sscaled.component_swizzle.r_g_b_a
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_sscaled.component_swizzle.g_b_a_r
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_sscaled.component_swizzle.b_a_r_g
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_sscaled.component_swizzle.a_r_g_b
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_sscaled.subresource_range.lod_base_mip_level
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_sscaled.subresource_range.lod_mip_levels
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_sscaled.subresource_range.base_array_layer
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_sscaled.subresource_range.array_size
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_sscaled.subresource_range.array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_sscaled.subresource_range.lod_base_mip_level_base_array_layer
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_sscaled.subresource_range.lod_mip_levels_base_array_layer
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_sscaled.subresource_range.lod_base_mip_level_array_size
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_sscaled.subresource_range.lod_mip_levels_array_size
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_sscaled.subresource_range.lod_base_mip_level_array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_sscaled.subresource_range.lod_mip_levels_array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_sscaled.subresource_range.lod_base_mip_level_remaining_levels
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_sscaled.subresource_range.base_array_layer_remaining_layers
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_sscaled.subresource_range.lod_base_mip_level_base_array_layer_remaining_levels_and_layers
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_uint.component_swizzle.r_g_b_a
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_uint.component_swizzle.g_b_a_r
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_uint.component_swizzle.b_a_r_g
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_uint.component_swizzle.a_r_g_b
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_uint.subresource_range.lod_base_mip_level
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_uint.subresource_range.lod_mip_levels
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_uint.subresource_range.base_array_layer
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_uint.subresource_range.array_size
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_uint.subresource_range.array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_uint.subresource_range.lod_base_mip_level_base_array_layer
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_uint.subresource_range.lod_mip_levels_base_array_layer
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_uint.subresource_range.lod_base_mip_level_array_size
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_uint.subresource_range.lod_mip_levels_array_size
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_uint.subresource_range.lod_base_mip_level_array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_uint.subresource_range.lod_mip_levels_array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_uint.subresource_range.lod_base_mip_level_remaining_levels
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_uint.subresource_range.base_array_layer_remaining_layers
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_uint.subresource_range.lod_base_mip_level_base_array_layer_remaining_levels_and_layers
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_sint.component_swizzle.r_g_b_a
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_sint.component_swizzle.g_b_a_r
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_sint.component_swizzle.b_a_r_g
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_sint.component_swizzle.a_r_g_b
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_sint.subresource_range.lod_base_mip_level
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_sint.subresource_range.lod_mip_levels
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_sint.subresource_range.base_array_layer
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_sint.subresource_range.array_size
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_sint.subresource_range.array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_sint.subresource_range.lod_base_mip_level_base_array_layer
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_sint.subresource_range.lod_mip_levels_base_array_layer
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_sint.subresource_range.lod_base_mip_level_array_size
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_sint.subresource_range.lod_mip_levels_array_size
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_sint.subresource_range.lod_base_mip_level_array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_sint.subresource_range.lod_mip_levels_array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_sint.subresource_range.lod_base_mip_level_remaining_levels
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_sint.subresource_range.base_array_layer_remaining_layers
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_sint.subresource_range.lod_base_mip_level_base_array_layer_remaining_levels_and_layers
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_srgb.component_swizzle.r_g_b_a
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_srgb.component_swizzle.g_b_a_r
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_srgb.component_swizzle.b_a_r_g
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_srgb.component_swizzle.a_r_g_b
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_srgb.subresource_range.lod_base_mip_level
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_srgb.subresource_range.lod_mip_levels
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_srgb.subresource_range.base_array_layer
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_srgb.subresource_range.array_size
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_srgb.subresource_range.array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_srgb.subresource_range.lod_base_mip_level_base_array_layer
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_srgb.subresource_range.lod_mip_levels_base_array_layer
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_srgb.subresource_range.lod_base_mip_level_array_size
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_srgb.subresource_range.lod_mip_levels_array_size
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_srgb.subresource_range.lod_base_mip_level_array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_srgb.subresource_range.lod_mip_levels_array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_srgb.subresource_range.lod_base_mip_level_remaining_levels
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_srgb.subresource_range.base_array_layer_remaining_layers
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8_srgb.subresource_range.lod_base_mip_level_base_array_layer_remaining_levels_and_layers
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_unorm.component_swizzle.r_g_b_a
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_unorm.component_swizzle.g_b_a_r
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_unorm.component_swizzle.b_a_r_g
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_unorm.component_swizzle.a_r_g_b
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_unorm.subresource_range.lod_base_mip_level
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_unorm.subresource_range.lod_mip_levels
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_unorm.subresource_range.base_array_layer
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_unorm.subresource_range.array_size
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_unorm.subresource_range.array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_unorm.subresource_range.lod_base_mip_level_base_array_layer
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_unorm.subresource_range.lod_mip_levels_base_array_layer
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_unorm.subresource_range.lod_base_mip_level_array_size
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_unorm.subresource_range.lod_mip_levels_array_size
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_unorm.subresource_range.lod_base_mip_level_array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_unorm.subresource_range.lod_mip_levels_array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_unorm.subresource_range.lod_base_mip_level_remaining_levels
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_unorm.subresource_range.base_array_layer_remaining_layers
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_unorm.subresource_range.lod_base_mip_level_base_array_layer_remaining_levels_and_layers
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_snorm.component_swizzle.r_g_b_a
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_snorm.component_swizzle.g_b_a_r
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_snorm.component_swizzle.b_a_r_g
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_snorm.component_swizzle.a_r_g_b
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_snorm.subresource_range.lod_base_mip_level
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_snorm.subresource_range.lod_mip_levels
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_snorm.subresource_range.base_array_layer
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_snorm.subresource_range.array_size
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_snorm.subresource_range.array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_snorm.subresource_range.lod_base_mip_level_base_array_layer
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_snorm.subresource_range.lod_mip_levels_base_array_layer
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_snorm.subresource_range.lod_base_mip_level_array_size
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_snorm.subresource_range.lod_mip_levels_array_size
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_snorm.subresource_range.lod_base_mip_level_array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_snorm.subresource_range.lod_mip_levels_array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_snorm.subresource_range.lod_base_mip_level_remaining_levels
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_snorm.subresource_range.base_array_layer_remaining_layers
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_snorm.subresource_range.lod_base_mip_level_base_array_layer_remaining_levels_and_layers
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_uscaled.component_swizzle.r_g_b_a
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_uscaled.component_swizzle.g_b_a_r
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_uscaled.component_swizzle.b_a_r_g
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_uscaled.component_swizzle.a_r_g_b
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_uscaled.subresource_range.lod_base_mip_level
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_uscaled.subresource_range.lod_mip_levels
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_uscaled.subresource_range.base_array_layer
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_uscaled.subresource_range.array_size
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_uscaled.subresource_range.array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_uscaled.subresource_range.lod_base_mip_level_base_array_layer
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_uscaled.subresource_range.lod_mip_levels_base_array_layer
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_uscaled.subresource_range.lod_base_mip_level_array_size
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_uscaled.subresource_range.lod_mip_levels_array_size
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_uscaled.subresource_range.lod_base_mip_level_array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_uscaled.subresource_range.lod_mip_levels_array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_uscaled.subresource_range.lod_base_mip_level_remaining_levels
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_uscaled.subresource_range.base_array_layer_remaining_layers
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_uscaled.subresource_range.lod_base_mip_level_base_array_layer_remaining_levels_and_layers
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_sscaled.component_swizzle.r_g_b_a
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_sscaled.component_swizzle.g_b_a_r
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_sscaled.component_swizzle.b_a_r_g
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_sscaled.component_swizzle.a_r_g_b
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_sscaled.subresource_range.lod_base_mip_level
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_sscaled.subresource_range.lod_mip_levels
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_sscaled.subresource_range.base_array_layer
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_sscaled.subresource_range.array_size
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_sscaled.subresource_range.array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_sscaled.subresource_range.lod_base_mip_level_base_array_layer
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_sscaled.subresource_range.lod_mip_levels_base_array_layer
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_sscaled.subresource_range.lod_base_mip_level_array_size
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_sscaled.subresource_range.lod_mip_levels_array_size
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_sscaled.subresource_range.lod_base_mip_level_array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_sscaled.subresource_range.lod_mip_levels_array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_sscaled.subresource_range.lod_base_mip_level_remaining_levels
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_sscaled.subresource_range.base_array_layer_remaining_layers
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_sscaled.subresource_range.lod_base_mip_level_base_array_layer_remaining_levels_and_layers
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_uint.component_swizzle.r_g_b_a
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_uint.component_swizzle.g_b_a_r
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_uint.component_swizzle.b_a_r_g
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_uint.component_swizzle.a_r_g_b
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_uint.subresource_range.lod_base_mip_level
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_uint.subresource_range.lod_mip_levels
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_uint.subresource_range.base_array_layer
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_uint.subresource_range.array_size
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_uint.subresource_range.array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_uint.subresource_range.lod_base_mip_level_base_array_layer
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_uint.subresource_range.lod_mip_levels_base_array_layer
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_uint.subresource_range.lod_base_mip_level_array_size
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_uint.subresource_range.lod_mip_levels_array_size
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_uint.subresource_range.lod_base_mip_level_array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_uint.subresource_range.lod_mip_levels_array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_uint.subresource_range.lod_base_mip_level_remaining_levels
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_uint.subresource_range.base_array_layer_remaining_layers
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_uint.subresource_range.lod_base_mip_level_base_array_layer_remaining_levels_and_layers
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_sint.component_swizzle.r_g_b_a
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_sint.component_swizzle.g_b_a_r
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_sint.component_swizzle.b_a_r_g
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_sint.component_swizzle.a_r_g_b
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_sint.subresource_range.lod_base_mip_level
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_sint.subresource_range.lod_mip_levels
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_sint.subresource_range.base_array_layer
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_sint.subresource_range.array_size
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_sint.subresource_range.array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_sint.subresource_range.lod_base_mip_level_base_array_layer
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_sint.subresource_range.lod_mip_levels_base_array_layer
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_sint.subresource_range.lod_base_mip_level_array_size
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_sint.subresource_range.lod_mip_levels_array_size
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_sint.subresource_range.lod_base_mip_level_array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_sint.subresource_range.lod_mip_levels_array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_sint.subresource_range.lod_base_mip_level_remaining_levels
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_sint.subresource_range.base_array_layer_remaining_layers
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_sint.subresource_range.lod_base_mip_level_base_array_layer_remaining_levels_and_layers
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_srgb.component_swizzle.r_g_b_a
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_srgb.component_swizzle.g_b_a_r
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_srgb.component_swizzle.b_a_r_g
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_srgb.component_swizzle.a_r_g_b
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_srgb.subresource_range.lod_base_mip_level
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_srgb.subresource_range.lod_mip_levels
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_srgb.subresource_range.base_array_layer
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_srgb.subresource_range.array_size
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_srgb.subresource_range.array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_srgb.subresource_range.lod_base_mip_level_base_array_layer
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_srgb.subresource_range.lod_mip_levels_base_array_layer
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_srgb.subresource_range.lod_base_mip_level_array_size
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_srgb.subresource_range.lod_mip_levels_array_size
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_srgb.subresource_range.lod_base_mip_level_array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_srgb.subresource_range.lod_mip_levels_array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_srgb.subresource_range.lod_base_mip_level_remaining_levels
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_srgb.subresource_range.base_array_layer_remaining_layers
+dEQP-VK.pipeline.image_view.view_type.1d_array.format.b8g8r8a8_srgb.subresource_range.lod_base_mip_level_base_array_layer_remaining_levels_and_layers
 dEQP-VK.pipeline.image_view.view_type.1d_array.format.a4r4g4b4_unorm_pack16_ext.component_swizzle.r_g_b_a
 dEQP-VK.pipeline.image_view.view_type.1d_array.format.a4r4g4b4_unorm_pack16_ext.component_swizzle.g_b_a_r
 dEQP-VK.pipeline.image_view.view_type.1d_array.format.a4r4g4b4_unorm_pack16_ext.component_swizzle.b_a_r_g
@@ -60038,6 +63994,216 @@
 dEQP-VK.pipeline.image_view.view_type.1d_array.format.a4b4g4r4_unorm_pack16_ext.subresource_range.lod_base_mip_level_remaining_levels
 dEQP-VK.pipeline.image_view.view_type.1d_array.format.a4b4g4r4_unorm_pack16_ext.subresource_range.base_array_layer_remaining_layers
 dEQP-VK.pipeline.image_view.view_type.1d_array.format.a4b4g4r4_unorm_pack16_ext.subresource_range.lod_base_mip_level_base_array_layer_remaining_levels_and_layers
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8_unorm.component_swizzle.r_g_b_a
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8_unorm.component_swizzle.g_b_a_r
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8_unorm.component_swizzle.b_a_r_g
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8_unorm.component_swizzle.a_r_g_b
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8_unorm.subresource_range.lod_base_mip_level
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8_unorm.subresource_range.lod_mip_levels
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8_unorm.subresource_range.array_layer_second
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8_unorm.subresource_range.array_layer_last
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8_unorm.subresource_range.lod_base_mip_level_array_layer_second
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8_unorm.subresource_range.lod_mip_levels_array_layer_second
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8_unorm.subresource_range.lod_base_mip_level_array_layer_last
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8_unorm.subresource_range.lod_mip_levels_array_layer_last
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8_unorm.subresource_range.lod_base_mip_level_remaining_levels
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8_unorm.subresource_range.array_layer_last_remaining_layers
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8_unorm.subresource_range.lod_base_mip_level_array_layer_last_remaining_levels_and_layers
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8_snorm.component_swizzle.r_g_b_a
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8_snorm.component_swizzle.g_b_a_r
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8_snorm.component_swizzle.b_a_r_g
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8_snorm.component_swizzle.a_r_g_b
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8_snorm.subresource_range.lod_base_mip_level
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8_snorm.subresource_range.lod_mip_levels
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8_snorm.subresource_range.array_layer_second
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8_snorm.subresource_range.array_layer_last
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8_snorm.subresource_range.lod_base_mip_level_array_layer_second
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8_snorm.subresource_range.lod_mip_levels_array_layer_second
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8_snorm.subresource_range.lod_base_mip_level_array_layer_last
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8_snorm.subresource_range.lod_mip_levels_array_layer_last
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8_snorm.subresource_range.lod_base_mip_level_remaining_levels
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8_snorm.subresource_range.array_layer_last_remaining_layers
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8_snorm.subresource_range.lod_base_mip_level_array_layer_last_remaining_levels_and_layers
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8_uscaled.component_swizzle.r_g_b_a
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8_uscaled.component_swizzle.g_b_a_r
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8_uscaled.component_swizzle.b_a_r_g
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8_uscaled.component_swizzle.a_r_g_b
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8_uscaled.subresource_range.lod_base_mip_level
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8_uscaled.subresource_range.lod_mip_levels
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8_uscaled.subresource_range.array_layer_second
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8_uscaled.subresource_range.array_layer_last
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8_uscaled.subresource_range.lod_base_mip_level_array_layer_second
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8_uscaled.subresource_range.lod_mip_levels_array_layer_second
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8_uscaled.subresource_range.lod_base_mip_level_array_layer_last
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8_uscaled.subresource_range.lod_mip_levels_array_layer_last
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8_uscaled.subresource_range.lod_base_mip_level_remaining_levels
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8_uscaled.subresource_range.array_layer_last_remaining_layers
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8_uscaled.subresource_range.lod_base_mip_level_array_layer_last_remaining_levels_and_layers
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8_sscaled.component_swizzle.r_g_b_a
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8_sscaled.component_swizzle.g_b_a_r
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8_sscaled.component_swizzle.b_a_r_g
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8_sscaled.component_swizzle.a_r_g_b
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8_sscaled.subresource_range.lod_base_mip_level
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8_sscaled.subresource_range.lod_mip_levels
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8_sscaled.subresource_range.array_layer_second
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8_sscaled.subresource_range.array_layer_last
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8_sscaled.subresource_range.lod_base_mip_level_array_layer_second
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8_sscaled.subresource_range.lod_mip_levels_array_layer_second
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8_sscaled.subresource_range.lod_base_mip_level_array_layer_last
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8_sscaled.subresource_range.lod_mip_levels_array_layer_last
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8_sscaled.subresource_range.lod_base_mip_level_remaining_levels
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8_sscaled.subresource_range.array_layer_last_remaining_layers
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8_sscaled.subresource_range.lod_base_mip_level_array_layer_last_remaining_levels_and_layers
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8_uint.component_swizzle.r_g_b_a
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8_uint.component_swizzle.g_b_a_r
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8_uint.component_swizzle.b_a_r_g
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8_uint.component_swizzle.a_r_g_b
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8_uint.subresource_range.lod_base_mip_level
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8_uint.subresource_range.lod_mip_levels
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8_uint.subresource_range.array_layer_second
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8_uint.subresource_range.array_layer_last
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8_uint.subresource_range.lod_base_mip_level_array_layer_second
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8_uint.subresource_range.lod_mip_levels_array_layer_second
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8_uint.subresource_range.lod_base_mip_level_array_layer_last
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8_uint.subresource_range.lod_mip_levels_array_layer_last
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8_uint.subresource_range.lod_base_mip_level_remaining_levels
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8_uint.subresource_range.array_layer_last_remaining_layers
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8_uint.subresource_range.lod_base_mip_level_array_layer_last_remaining_levels_and_layers
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8_sint.component_swizzle.r_g_b_a
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8_sint.component_swizzle.g_b_a_r
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8_sint.component_swizzle.b_a_r_g
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8_sint.component_swizzle.a_r_g_b
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8_sint.subresource_range.lod_base_mip_level
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8_sint.subresource_range.lod_mip_levels
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8_sint.subresource_range.array_layer_second
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8_sint.subresource_range.array_layer_last
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8_sint.subresource_range.lod_base_mip_level_array_layer_second
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8_sint.subresource_range.lod_mip_levels_array_layer_second
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8_sint.subresource_range.lod_base_mip_level_array_layer_last
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8_sint.subresource_range.lod_mip_levels_array_layer_last
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8_sint.subresource_range.lod_base_mip_level_remaining_levels
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8_sint.subresource_range.array_layer_last_remaining_layers
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8_sint.subresource_range.lod_base_mip_level_array_layer_last_remaining_levels_and_layers
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8_srgb.component_swizzle.r_g_b_a
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8_srgb.component_swizzle.g_b_a_r
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8_srgb.component_swizzle.b_a_r_g
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8_srgb.component_swizzle.a_r_g_b
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8_srgb.subresource_range.lod_base_mip_level
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8_srgb.subresource_range.lod_mip_levels
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8_srgb.subresource_range.array_layer_second
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8_srgb.subresource_range.array_layer_last
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8_srgb.subresource_range.lod_base_mip_level_array_layer_second
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8_srgb.subresource_range.lod_mip_levels_array_layer_second
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8_srgb.subresource_range.lod_base_mip_level_array_layer_last
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8_srgb.subresource_range.lod_mip_levels_array_layer_last
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8_srgb.subresource_range.lod_base_mip_level_remaining_levels
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8_srgb.subresource_range.array_layer_last_remaining_layers
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8_srgb.subresource_range.lod_base_mip_level_array_layer_last_remaining_levels_and_layers
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8a8_unorm.component_swizzle.r_g_b_a
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8a8_unorm.component_swizzle.g_b_a_r
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8a8_unorm.component_swizzle.b_a_r_g
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8a8_unorm.component_swizzle.a_r_g_b
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8a8_unorm.subresource_range.lod_base_mip_level
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8a8_unorm.subresource_range.lod_mip_levels
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8a8_unorm.subresource_range.array_layer_second
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8a8_unorm.subresource_range.array_layer_last
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8a8_unorm.subresource_range.lod_base_mip_level_array_layer_second
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8a8_unorm.subresource_range.lod_mip_levels_array_layer_second
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8a8_unorm.subresource_range.lod_base_mip_level_array_layer_last
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8a8_unorm.subresource_range.lod_mip_levels_array_layer_last
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8a8_unorm.subresource_range.lod_base_mip_level_remaining_levels
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8a8_unorm.subresource_range.array_layer_last_remaining_layers
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8a8_unorm.subresource_range.lod_base_mip_level_array_layer_last_remaining_levels_and_layers
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8a8_snorm.component_swizzle.r_g_b_a
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8a8_snorm.component_swizzle.g_b_a_r
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8a8_snorm.component_swizzle.b_a_r_g
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8a8_snorm.component_swizzle.a_r_g_b
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8a8_snorm.subresource_range.lod_base_mip_level
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8a8_snorm.subresource_range.lod_mip_levels
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8a8_snorm.subresource_range.array_layer_second
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8a8_snorm.subresource_range.array_layer_last
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8a8_snorm.subresource_range.lod_base_mip_level_array_layer_second
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8a8_snorm.subresource_range.lod_mip_levels_array_layer_second
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8a8_snorm.subresource_range.lod_base_mip_level_array_layer_last
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8a8_snorm.subresource_range.lod_mip_levels_array_layer_last
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8a8_snorm.subresource_range.lod_base_mip_level_remaining_levels
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8a8_snorm.subresource_range.array_layer_last_remaining_layers
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8a8_snorm.subresource_range.lod_base_mip_level_array_layer_last_remaining_levels_and_layers
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8a8_uscaled.component_swizzle.r_g_b_a
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8a8_uscaled.component_swizzle.g_b_a_r
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8a8_uscaled.component_swizzle.b_a_r_g
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8a8_uscaled.component_swizzle.a_r_g_b
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8a8_uscaled.subresource_range.lod_base_mip_level
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8a8_uscaled.subresource_range.lod_mip_levels
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8a8_uscaled.subresource_range.array_layer_second
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8a8_uscaled.subresource_range.array_layer_last
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8a8_uscaled.subresource_range.lod_base_mip_level_array_layer_second
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8a8_uscaled.subresource_range.lod_mip_levels_array_layer_second
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8a8_uscaled.subresource_range.lod_base_mip_level_array_layer_last
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8a8_uscaled.subresource_range.lod_mip_levels_array_layer_last
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8a8_uscaled.subresource_range.lod_base_mip_level_remaining_levels
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8a8_uscaled.subresource_range.array_layer_last_remaining_layers
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8a8_uscaled.subresource_range.lod_base_mip_level_array_layer_last_remaining_levels_and_layers
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8a8_sscaled.component_swizzle.r_g_b_a
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8a8_sscaled.component_swizzle.g_b_a_r
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8a8_sscaled.component_swizzle.b_a_r_g
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8a8_sscaled.component_swizzle.a_r_g_b
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8a8_sscaled.subresource_range.lod_base_mip_level
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8a8_sscaled.subresource_range.lod_mip_levels
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8a8_sscaled.subresource_range.array_layer_second
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8a8_sscaled.subresource_range.array_layer_last
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8a8_sscaled.subresource_range.lod_base_mip_level_array_layer_second
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8a8_sscaled.subresource_range.lod_mip_levels_array_layer_second
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8a8_sscaled.subresource_range.lod_base_mip_level_array_layer_last
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8a8_sscaled.subresource_range.lod_mip_levels_array_layer_last
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8a8_sscaled.subresource_range.lod_base_mip_level_remaining_levels
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8a8_sscaled.subresource_range.array_layer_last_remaining_layers
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8a8_sscaled.subresource_range.lod_base_mip_level_array_layer_last_remaining_levels_and_layers
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8a8_uint.component_swizzle.r_g_b_a
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8a8_uint.component_swizzle.g_b_a_r
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8a8_uint.component_swizzle.b_a_r_g
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8a8_uint.component_swizzle.a_r_g_b
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8a8_uint.subresource_range.lod_base_mip_level
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8a8_uint.subresource_range.lod_mip_levels
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8a8_uint.subresource_range.array_layer_second
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8a8_uint.subresource_range.array_layer_last
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8a8_uint.subresource_range.lod_base_mip_level_array_layer_second
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8a8_uint.subresource_range.lod_mip_levels_array_layer_second
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8a8_uint.subresource_range.lod_base_mip_level_array_layer_last
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8a8_uint.subresource_range.lod_mip_levels_array_layer_last
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8a8_uint.subresource_range.lod_base_mip_level_remaining_levels
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8a8_uint.subresource_range.array_layer_last_remaining_layers
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8a8_uint.subresource_range.lod_base_mip_level_array_layer_last_remaining_levels_and_layers
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8a8_sint.component_swizzle.r_g_b_a
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8a8_sint.component_swizzle.g_b_a_r
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8a8_sint.component_swizzle.b_a_r_g
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8a8_sint.component_swizzle.a_r_g_b
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8a8_sint.subresource_range.lod_base_mip_level
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8a8_sint.subresource_range.lod_mip_levels
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8a8_sint.subresource_range.array_layer_second
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8a8_sint.subresource_range.array_layer_last
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8a8_sint.subresource_range.lod_base_mip_level_array_layer_second
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8a8_sint.subresource_range.lod_mip_levels_array_layer_second
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8a8_sint.subresource_range.lod_base_mip_level_array_layer_last
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8a8_sint.subresource_range.lod_mip_levels_array_layer_last
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8a8_sint.subresource_range.lod_base_mip_level_remaining_levels
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8a8_sint.subresource_range.array_layer_last_remaining_layers
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8a8_sint.subresource_range.lod_base_mip_level_array_layer_last_remaining_levels_and_layers
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8a8_srgb.component_swizzle.r_g_b_a
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8a8_srgb.component_swizzle.g_b_a_r
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8a8_srgb.component_swizzle.b_a_r_g
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8a8_srgb.component_swizzle.a_r_g_b
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8a8_srgb.subresource_range.lod_base_mip_level
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8a8_srgb.subresource_range.lod_mip_levels
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8a8_srgb.subresource_range.array_layer_second
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8a8_srgb.subresource_range.array_layer_last
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8a8_srgb.subresource_range.lod_base_mip_level_array_layer_second
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8a8_srgb.subresource_range.lod_mip_levels_array_layer_second
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8a8_srgb.subresource_range.lod_base_mip_level_array_layer_last
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8a8_srgb.subresource_range.lod_mip_levels_array_layer_last
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8a8_srgb.subresource_range.lod_base_mip_level_remaining_levels
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8a8_srgb.subresource_range.array_layer_last_remaining_layers
+dEQP-VK.pipeline.image_view.view_type.2d.format.b8g8r8a8_srgb.subresource_range.lod_base_mip_level_array_layer_last_remaining_levels_and_layers
 dEQP-VK.pipeline.image_view.view_type.2d.format.a4r4g4b4_unorm_pack16_ext.component_swizzle.r_g_b_a
 dEQP-VK.pipeline.image_view.view_type.2d.format.a4r4g4b4_unorm_pack16_ext.component_swizzle.g_b_a_r
 dEQP-VK.pipeline.image_view.view_type.2d.format.a4r4g4b4_unorm_pack16_ext.component_swizzle.b_a_r_g
@@ -60068,6 +64234,258 @@
 dEQP-VK.pipeline.image_view.view_type.2d.format.a4b4g4r4_unorm_pack16_ext.subresource_range.lod_base_mip_level_remaining_levels
 dEQP-VK.pipeline.image_view.view_type.2d.format.a4b4g4r4_unorm_pack16_ext.subresource_range.array_layer_last_remaining_layers
 dEQP-VK.pipeline.image_view.view_type.2d.format.a4b4g4r4_unorm_pack16_ext.subresource_range.lod_base_mip_level_array_layer_last_remaining_levels_and_layers
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_unorm.component_swizzle.r_g_b_a
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_unorm.component_swizzle.g_b_a_r
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_unorm.component_swizzle.b_a_r_g
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_unorm.component_swizzle.a_r_g_b
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_unorm.subresource_range.lod_base_mip_level
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_unorm.subresource_range.lod_mip_levels
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_unorm.subresource_range.base_array_layer
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_unorm.subresource_range.array_size
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_unorm.subresource_range.array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_unorm.subresource_range.lod_base_mip_level_base_array_layer
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_unorm.subresource_range.lod_mip_levels_base_array_layer
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_unorm.subresource_range.lod_base_mip_level_array_size
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_unorm.subresource_range.lod_mip_levels_array_size
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_unorm.subresource_range.lod_base_mip_level_array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_unorm.subresource_range.lod_mip_levels_array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_unorm.subresource_range.lod_base_mip_level_remaining_levels
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_unorm.subresource_range.base_array_layer_remaining_layers
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_unorm.subresource_range.lod_base_mip_level_base_array_layer_remaining_levels_and_layers
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_snorm.component_swizzle.r_g_b_a
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_snorm.component_swizzle.g_b_a_r
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_snorm.component_swizzle.b_a_r_g
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_snorm.component_swizzle.a_r_g_b
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_snorm.subresource_range.lod_base_mip_level
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_snorm.subresource_range.lod_mip_levels
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_snorm.subresource_range.base_array_layer
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_snorm.subresource_range.array_size
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_snorm.subresource_range.array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_snorm.subresource_range.lod_base_mip_level_base_array_layer
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_snorm.subresource_range.lod_mip_levels_base_array_layer
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_snorm.subresource_range.lod_base_mip_level_array_size
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_snorm.subresource_range.lod_mip_levels_array_size
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_snorm.subresource_range.lod_base_mip_level_array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_snorm.subresource_range.lod_mip_levels_array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_snorm.subresource_range.lod_base_mip_level_remaining_levels
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_snorm.subresource_range.base_array_layer_remaining_layers
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_snorm.subresource_range.lod_base_mip_level_base_array_layer_remaining_levels_and_layers
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_uscaled.component_swizzle.r_g_b_a
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_uscaled.component_swizzle.g_b_a_r
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_uscaled.component_swizzle.b_a_r_g
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_uscaled.component_swizzle.a_r_g_b
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_uscaled.subresource_range.lod_base_mip_level
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_uscaled.subresource_range.lod_mip_levels
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_uscaled.subresource_range.base_array_layer
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_uscaled.subresource_range.array_size
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_uscaled.subresource_range.array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_uscaled.subresource_range.lod_base_mip_level_base_array_layer
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_uscaled.subresource_range.lod_mip_levels_base_array_layer
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_uscaled.subresource_range.lod_base_mip_level_array_size
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_uscaled.subresource_range.lod_mip_levels_array_size
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_uscaled.subresource_range.lod_base_mip_level_array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_uscaled.subresource_range.lod_mip_levels_array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_uscaled.subresource_range.lod_base_mip_level_remaining_levels
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_uscaled.subresource_range.base_array_layer_remaining_layers
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_uscaled.subresource_range.lod_base_mip_level_base_array_layer_remaining_levels_and_layers
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_sscaled.component_swizzle.r_g_b_a
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_sscaled.component_swizzle.g_b_a_r
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_sscaled.component_swizzle.b_a_r_g
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_sscaled.component_swizzle.a_r_g_b
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_sscaled.subresource_range.lod_base_mip_level
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_sscaled.subresource_range.lod_mip_levels
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_sscaled.subresource_range.base_array_layer
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_sscaled.subresource_range.array_size
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_sscaled.subresource_range.array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_sscaled.subresource_range.lod_base_mip_level_base_array_layer
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_sscaled.subresource_range.lod_mip_levels_base_array_layer
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_sscaled.subresource_range.lod_base_mip_level_array_size
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_sscaled.subresource_range.lod_mip_levels_array_size
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_sscaled.subresource_range.lod_base_mip_level_array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_sscaled.subresource_range.lod_mip_levels_array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_sscaled.subresource_range.lod_base_mip_level_remaining_levels
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_sscaled.subresource_range.base_array_layer_remaining_layers
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_sscaled.subresource_range.lod_base_mip_level_base_array_layer_remaining_levels_and_layers
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_uint.component_swizzle.r_g_b_a
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_uint.component_swizzle.g_b_a_r
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_uint.component_swizzle.b_a_r_g
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_uint.component_swizzle.a_r_g_b
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_uint.subresource_range.lod_base_mip_level
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_uint.subresource_range.lod_mip_levels
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_uint.subresource_range.base_array_layer
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_uint.subresource_range.array_size
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_uint.subresource_range.array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_uint.subresource_range.lod_base_mip_level_base_array_layer
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_uint.subresource_range.lod_mip_levels_base_array_layer
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_uint.subresource_range.lod_base_mip_level_array_size
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_uint.subresource_range.lod_mip_levels_array_size
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_uint.subresource_range.lod_base_mip_level_array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_uint.subresource_range.lod_mip_levels_array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_uint.subresource_range.lod_base_mip_level_remaining_levels
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_uint.subresource_range.base_array_layer_remaining_layers
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_uint.subresource_range.lod_base_mip_level_base_array_layer_remaining_levels_and_layers
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_sint.component_swizzle.r_g_b_a
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_sint.component_swizzle.g_b_a_r
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_sint.component_swizzle.b_a_r_g
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_sint.component_swizzle.a_r_g_b
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_sint.subresource_range.lod_base_mip_level
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_sint.subresource_range.lod_mip_levels
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_sint.subresource_range.base_array_layer
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_sint.subresource_range.array_size
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_sint.subresource_range.array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_sint.subresource_range.lod_base_mip_level_base_array_layer
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_sint.subresource_range.lod_mip_levels_base_array_layer
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_sint.subresource_range.lod_base_mip_level_array_size
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_sint.subresource_range.lod_mip_levels_array_size
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_sint.subresource_range.lod_base_mip_level_array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_sint.subresource_range.lod_mip_levels_array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_sint.subresource_range.lod_base_mip_level_remaining_levels
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_sint.subresource_range.base_array_layer_remaining_layers
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_sint.subresource_range.lod_base_mip_level_base_array_layer_remaining_levels_and_layers
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_srgb.component_swizzle.r_g_b_a
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_srgb.component_swizzle.g_b_a_r
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_srgb.component_swizzle.b_a_r_g
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_srgb.component_swizzle.a_r_g_b
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_srgb.subresource_range.lod_base_mip_level
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_srgb.subresource_range.lod_mip_levels
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_srgb.subresource_range.base_array_layer
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_srgb.subresource_range.array_size
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_srgb.subresource_range.array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_srgb.subresource_range.lod_base_mip_level_base_array_layer
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_srgb.subresource_range.lod_mip_levels_base_array_layer
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_srgb.subresource_range.lod_base_mip_level_array_size
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_srgb.subresource_range.lod_mip_levels_array_size
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_srgb.subresource_range.lod_base_mip_level_array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_srgb.subresource_range.lod_mip_levels_array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_srgb.subresource_range.lod_base_mip_level_remaining_levels
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_srgb.subresource_range.base_array_layer_remaining_layers
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8_srgb.subresource_range.lod_base_mip_level_base_array_layer_remaining_levels_and_layers
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_unorm.component_swizzle.r_g_b_a
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_unorm.component_swizzle.g_b_a_r
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_unorm.component_swizzle.b_a_r_g
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_unorm.component_swizzle.a_r_g_b
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_unorm.subresource_range.lod_base_mip_level
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_unorm.subresource_range.lod_mip_levels
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_unorm.subresource_range.base_array_layer
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_unorm.subresource_range.array_size
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_unorm.subresource_range.array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_unorm.subresource_range.lod_base_mip_level_base_array_layer
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_unorm.subresource_range.lod_mip_levels_base_array_layer
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_unorm.subresource_range.lod_base_mip_level_array_size
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_unorm.subresource_range.lod_mip_levels_array_size
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_unorm.subresource_range.lod_base_mip_level_array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_unorm.subresource_range.lod_mip_levels_array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_unorm.subresource_range.lod_base_mip_level_remaining_levels
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_unorm.subresource_range.base_array_layer_remaining_layers
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_unorm.subresource_range.lod_base_mip_level_base_array_layer_remaining_levels_and_layers
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_snorm.component_swizzle.r_g_b_a
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_snorm.component_swizzle.g_b_a_r
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_snorm.component_swizzle.b_a_r_g
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_snorm.component_swizzle.a_r_g_b
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_snorm.subresource_range.lod_base_mip_level
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_snorm.subresource_range.lod_mip_levels
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_snorm.subresource_range.base_array_layer
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_snorm.subresource_range.array_size
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_snorm.subresource_range.array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_snorm.subresource_range.lod_base_mip_level_base_array_layer
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_snorm.subresource_range.lod_mip_levels_base_array_layer
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_snorm.subresource_range.lod_base_mip_level_array_size
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_snorm.subresource_range.lod_mip_levels_array_size
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_snorm.subresource_range.lod_base_mip_level_array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_snorm.subresource_range.lod_mip_levels_array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_snorm.subresource_range.lod_base_mip_level_remaining_levels
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_snorm.subresource_range.base_array_layer_remaining_layers
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_snorm.subresource_range.lod_base_mip_level_base_array_layer_remaining_levels_and_layers
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_uscaled.component_swizzle.r_g_b_a
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_uscaled.component_swizzle.g_b_a_r
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_uscaled.component_swizzle.b_a_r_g
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_uscaled.component_swizzle.a_r_g_b
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_uscaled.subresource_range.lod_base_mip_level
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_uscaled.subresource_range.lod_mip_levels
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_uscaled.subresource_range.base_array_layer
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_uscaled.subresource_range.array_size
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_uscaled.subresource_range.array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_uscaled.subresource_range.lod_base_mip_level_base_array_layer
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_uscaled.subresource_range.lod_mip_levels_base_array_layer
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_uscaled.subresource_range.lod_base_mip_level_array_size
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_uscaled.subresource_range.lod_mip_levels_array_size
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_uscaled.subresource_range.lod_base_mip_level_array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_uscaled.subresource_range.lod_mip_levels_array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_uscaled.subresource_range.lod_base_mip_level_remaining_levels
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_uscaled.subresource_range.base_array_layer_remaining_layers
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_uscaled.subresource_range.lod_base_mip_level_base_array_layer_remaining_levels_and_layers
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_sscaled.component_swizzle.r_g_b_a
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_sscaled.component_swizzle.g_b_a_r
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_sscaled.component_swizzle.b_a_r_g
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_sscaled.component_swizzle.a_r_g_b
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_sscaled.subresource_range.lod_base_mip_level
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_sscaled.subresource_range.lod_mip_levels
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_sscaled.subresource_range.base_array_layer
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_sscaled.subresource_range.array_size
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_sscaled.subresource_range.array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_sscaled.subresource_range.lod_base_mip_level_base_array_layer
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_sscaled.subresource_range.lod_mip_levels_base_array_layer
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_sscaled.subresource_range.lod_base_mip_level_array_size
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_sscaled.subresource_range.lod_mip_levels_array_size
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_sscaled.subresource_range.lod_base_mip_level_array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_sscaled.subresource_range.lod_mip_levels_array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_sscaled.subresource_range.lod_base_mip_level_remaining_levels
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_sscaled.subresource_range.base_array_layer_remaining_layers
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_sscaled.subresource_range.lod_base_mip_level_base_array_layer_remaining_levels_and_layers
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_uint.component_swizzle.r_g_b_a
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_uint.component_swizzle.g_b_a_r
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_uint.component_swizzle.b_a_r_g
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_uint.component_swizzle.a_r_g_b
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_uint.subresource_range.lod_base_mip_level
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_uint.subresource_range.lod_mip_levels
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_uint.subresource_range.base_array_layer
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_uint.subresource_range.array_size
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_uint.subresource_range.array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_uint.subresource_range.lod_base_mip_level_base_array_layer
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_uint.subresource_range.lod_mip_levels_base_array_layer
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_uint.subresource_range.lod_base_mip_level_array_size
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_uint.subresource_range.lod_mip_levels_array_size
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_uint.subresource_range.lod_base_mip_level_array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_uint.subresource_range.lod_mip_levels_array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_uint.subresource_range.lod_base_mip_level_remaining_levels
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_uint.subresource_range.base_array_layer_remaining_layers
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_uint.subresource_range.lod_base_mip_level_base_array_layer_remaining_levels_and_layers
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_sint.component_swizzle.r_g_b_a
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_sint.component_swizzle.g_b_a_r
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_sint.component_swizzle.b_a_r_g
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_sint.component_swizzle.a_r_g_b
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_sint.subresource_range.lod_base_mip_level
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_sint.subresource_range.lod_mip_levels
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_sint.subresource_range.base_array_layer
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_sint.subresource_range.array_size
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_sint.subresource_range.array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_sint.subresource_range.lod_base_mip_level_base_array_layer
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_sint.subresource_range.lod_mip_levels_base_array_layer
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_sint.subresource_range.lod_base_mip_level_array_size
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_sint.subresource_range.lod_mip_levels_array_size
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_sint.subresource_range.lod_base_mip_level_array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_sint.subresource_range.lod_mip_levels_array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_sint.subresource_range.lod_base_mip_level_remaining_levels
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_sint.subresource_range.base_array_layer_remaining_layers
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_sint.subresource_range.lod_base_mip_level_base_array_layer_remaining_levels_and_layers
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_srgb.component_swizzle.r_g_b_a
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_srgb.component_swizzle.g_b_a_r
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_srgb.component_swizzle.b_a_r_g
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_srgb.component_swizzle.a_r_g_b
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_srgb.subresource_range.lod_base_mip_level
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_srgb.subresource_range.lod_mip_levels
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_srgb.subresource_range.base_array_layer
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_srgb.subresource_range.array_size
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_srgb.subresource_range.array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_srgb.subresource_range.lod_base_mip_level_base_array_layer
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_srgb.subresource_range.lod_mip_levels_base_array_layer
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_srgb.subresource_range.lod_base_mip_level_array_size
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_srgb.subresource_range.lod_mip_levels_array_size
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_srgb.subresource_range.lod_base_mip_level_array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_srgb.subresource_range.lod_mip_levels_array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_srgb.subresource_range.lod_base_mip_level_remaining_levels
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_srgb.subresource_range.base_array_layer_remaining_layers
+dEQP-VK.pipeline.image_view.view_type.2d_array.format.b8g8r8a8_srgb.subresource_range.lod_base_mip_level_base_array_layer_remaining_levels_and_layers
 dEQP-VK.pipeline.image_view.view_type.2d_array.format.a4r4g4b4_unorm_pack16_ext.component_swizzle.r_g_b_a
 dEQP-VK.pipeline.image_view.view_type.2d_array.format.a4r4g4b4_unorm_pack16_ext.component_swizzle.g_b_a_r
 dEQP-VK.pipeline.image_view.view_type.2d_array.format.a4r4g4b4_unorm_pack16_ext.component_swizzle.b_a_r_g
@@ -60104,6 +64522,132 @@
 dEQP-VK.pipeline.image_view.view_type.2d_array.format.a4b4g4r4_unorm_pack16_ext.subresource_range.lod_base_mip_level_remaining_levels
 dEQP-VK.pipeline.image_view.view_type.2d_array.format.a4b4g4r4_unorm_pack16_ext.subresource_range.base_array_layer_remaining_layers
 dEQP-VK.pipeline.image_view.view_type.2d_array.format.a4b4g4r4_unorm_pack16_ext.subresource_range.lod_base_mip_level_base_array_layer_remaining_levels_and_layers
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8_unorm.component_swizzle.r_g_b_a
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8_unorm.component_swizzle.g_b_a_r
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8_unorm.component_swizzle.b_a_r_g
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8_unorm.component_swizzle.a_r_g_b
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8_unorm.subresource_range.lod_base_mip_level
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8_unorm.subresource_range.lod_mip_levels
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8_unorm.subresource_range.lod_base_mip_level_remaining_levels
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8_unorm.subresource_range.single_array_layer_remaining_layers
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8_unorm.subresource_range.lod_base_mip_level_single_array_layer_remaining_levels_and_layers
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8_snorm.component_swizzle.r_g_b_a
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8_snorm.component_swizzle.g_b_a_r
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8_snorm.component_swizzle.b_a_r_g
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8_snorm.component_swizzle.a_r_g_b
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8_snorm.subresource_range.lod_base_mip_level
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8_snorm.subresource_range.lod_mip_levels
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8_snorm.subresource_range.lod_base_mip_level_remaining_levels
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8_snorm.subresource_range.single_array_layer_remaining_layers
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8_snorm.subresource_range.lod_base_mip_level_single_array_layer_remaining_levels_and_layers
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8_uscaled.component_swizzle.r_g_b_a
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8_uscaled.component_swizzle.g_b_a_r
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8_uscaled.component_swizzle.b_a_r_g
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8_uscaled.component_swizzle.a_r_g_b
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8_uscaled.subresource_range.lod_base_mip_level
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8_uscaled.subresource_range.lod_mip_levels
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8_uscaled.subresource_range.lod_base_mip_level_remaining_levels
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8_uscaled.subresource_range.single_array_layer_remaining_layers
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8_uscaled.subresource_range.lod_base_mip_level_single_array_layer_remaining_levels_and_layers
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8_sscaled.component_swizzle.r_g_b_a
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8_sscaled.component_swizzle.g_b_a_r
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8_sscaled.component_swizzle.b_a_r_g
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8_sscaled.component_swizzle.a_r_g_b
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8_sscaled.subresource_range.lod_base_mip_level
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8_sscaled.subresource_range.lod_mip_levels
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8_sscaled.subresource_range.lod_base_mip_level_remaining_levels
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8_sscaled.subresource_range.single_array_layer_remaining_layers
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8_sscaled.subresource_range.lod_base_mip_level_single_array_layer_remaining_levels_and_layers
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8_uint.component_swizzle.r_g_b_a
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8_uint.component_swizzle.g_b_a_r
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8_uint.component_swizzle.b_a_r_g
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8_uint.component_swizzle.a_r_g_b
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8_uint.subresource_range.lod_base_mip_level
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8_uint.subresource_range.lod_mip_levels
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8_uint.subresource_range.lod_base_mip_level_remaining_levels
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8_uint.subresource_range.single_array_layer_remaining_layers
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8_uint.subresource_range.lod_base_mip_level_single_array_layer_remaining_levels_and_layers
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8_sint.component_swizzle.r_g_b_a
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8_sint.component_swizzle.g_b_a_r
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8_sint.component_swizzle.b_a_r_g
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8_sint.component_swizzle.a_r_g_b
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8_sint.subresource_range.lod_base_mip_level
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8_sint.subresource_range.lod_mip_levels
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8_sint.subresource_range.lod_base_mip_level_remaining_levels
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8_sint.subresource_range.single_array_layer_remaining_layers
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8_sint.subresource_range.lod_base_mip_level_single_array_layer_remaining_levels_and_layers
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8_srgb.component_swizzle.r_g_b_a
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8_srgb.component_swizzle.g_b_a_r
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8_srgb.component_swizzle.b_a_r_g
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8_srgb.component_swizzle.a_r_g_b
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8_srgb.subresource_range.lod_base_mip_level
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8_srgb.subresource_range.lod_mip_levels
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8_srgb.subresource_range.lod_base_mip_level_remaining_levels
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8_srgb.subresource_range.single_array_layer_remaining_layers
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8_srgb.subresource_range.lod_base_mip_level_single_array_layer_remaining_levels_and_layers
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8a8_unorm.component_swizzle.r_g_b_a
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8a8_unorm.component_swizzle.g_b_a_r
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8a8_unorm.component_swizzle.b_a_r_g
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8a8_unorm.component_swizzle.a_r_g_b
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8a8_unorm.subresource_range.lod_base_mip_level
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8a8_unorm.subresource_range.lod_mip_levels
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8a8_unorm.subresource_range.lod_base_mip_level_remaining_levels
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8a8_unorm.subresource_range.single_array_layer_remaining_layers
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8a8_unorm.subresource_range.lod_base_mip_level_single_array_layer_remaining_levels_and_layers
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8a8_snorm.component_swizzle.r_g_b_a
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8a8_snorm.component_swizzle.g_b_a_r
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8a8_snorm.component_swizzle.b_a_r_g
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8a8_snorm.component_swizzle.a_r_g_b
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8a8_snorm.subresource_range.lod_base_mip_level
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8a8_snorm.subresource_range.lod_mip_levels
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8a8_snorm.subresource_range.lod_base_mip_level_remaining_levels
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8a8_snorm.subresource_range.single_array_layer_remaining_layers
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8a8_snorm.subresource_range.lod_base_mip_level_single_array_layer_remaining_levels_and_layers
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8a8_uscaled.component_swizzle.r_g_b_a
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8a8_uscaled.component_swizzle.g_b_a_r
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8a8_uscaled.component_swizzle.b_a_r_g
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8a8_uscaled.component_swizzle.a_r_g_b
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8a8_uscaled.subresource_range.lod_base_mip_level
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8a8_uscaled.subresource_range.lod_mip_levels
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8a8_uscaled.subresource_range.lod_base_mip_level_remaining_levels
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8a8_uscaled.subresource_range.single_array_layer_remaining_layers
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8a8_uscaled.subresource_range.lod_base_mip_level_single_array_layer_remaining_levels_and_layers
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8a8_sscaled.component_swizzle.r_g_b_a
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8a8_sscaled.component_swizzle.g_b_a_r
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8a8_sscaled.component_swizzle.b_a_r_g
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8a8_sscaled.component_swizzle.a_r_g_b
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8a8_sscaled.subresource_range.lod_base_mip_level
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8a8_sscaled.subresource_range.lod_mip_levels
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8a8_sscaled.subresource_range.lod_base_mip_level_remaining_levels
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8a8_sscaled.subresource_range.single_array_layer_remaining_layers
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8a8_sscaled.subresource_range.lod_base_mip_level_single_array_layer_remaining_levels_and_layers
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8a8_uint.component_swizzle.r_g_b_a
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8a8_uint.component_swizzle.g_b_a_r
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8a8_uint.component_swizzle.b_a_r_g
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8a8_uint.component_swizzle.a_r_g_b
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8a8_uint.subresource_range.lod_base_mip_level
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8a8_uint.subresource_range.lod_mip_levels
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8a8_uint.subresource_range.lod_base_mip_level_remaining_levels
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8a8_uint.subresource_range.single_array_layer_remaining_layers
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8a8_uint.subresource_range.lod_base_mip_level_single_array_layer_remaining_levels_and_layers
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8a8_sint.component_swizzle.r_g_b_a
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8a8_sint.component_swizzle.g_b_a_r
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8a8_sint.component_swizzle.b_a_r_g
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8a8_sint.component_swizzle.a_r_g_b
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8a8_sint.subresource_range.lod_base_mip_level
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8a8_sint.subresource_range.lod_mip_levels
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8a8_sint.subresource_range.lod_base_mip_level_remaining_levels
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8a8_sint.subresource_range.single_array_layer_remaining_layers
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8a8_sint.subresource_range.lod_base_mip_level_single_array_layer_remaining_levels_and_layers
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8a8_srgb.component_swizzle.r_g_b_a
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8a8_srgb.component_swizzle.g_b_a_r
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8a8_srgb.component_swizzle.b_a_r_g
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8a8_srgb.component_swizzle.a_r_g_b
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8a8_srgb.subresource_range.lod_base_mip_level
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8a8_srgb.subresource_range.lod_mip_levels
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8a8_srgb.subresource_range.lod_base_mip_level_remaining_levels
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8a8_srgb.subresource_range.single_array_layer_remaining_layers
+dEQP-VK.pipeline.image_view.view_type.3d.format.b8g8r8a8_srgb.subresource_range.lod_base_mip_level_single_array_layer_remaining_levels_and_layers
 dEQP-VK.pipeline.image_view.view_type.3d.format.a4r4g4b4_unorm_pack16_ext.component_swizzle.r_g_b_a
 dEQP-VK.pipeline.image_view.view_type.3d.format.a4r4g4b4_unorm_pack16_ext.component_swizzle.g_b_a_r
 dEQP-VK.pipeline.image_view.view_type.3d.format.a4r4g4b4_unorm_pack16_ext.component_swizzle.b_a_r_g
@@ -60122,6 +64666,216 @@
 dEQP-VK.pipeline.image_view.view_type.3d.format.a4b4g4r4_unorm_pack16_ext.subresource_range.lod_base_mip_level_remaining_levels
 dEQP-VK.pipeline.image_view.view_type.3d.format.a4b4g4r4_unorm_pack16_ext.subresource_range.single_array_layer_remaining_layers
 dEQP-VK.pipeline.image_view.view_type.3d.format.a4b4g4r4_unorm_pack16_ext.subresource_range.lod_base_mip_level_single_array_layer_remaining_levels_and_layers
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8_unorm.component_swizzle.r_g_b_a
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8_unorm.component_swizzle.g_b_a_r
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8_unorm.component_swizzle.b_a_r_g
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8_unorm.component_swizzle.a_r_g_b
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8_unorm.subresource_range.lod_base_mip_level
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8_unorm.subresource_range.lod_mip_levels
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8_unorm.subresource_range.array_layer_second
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8_unorm.subresource_range.array_layer_last
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8_unorm.subresource_range.lod_base_mip_level_array_layer_second
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8_unorm.subresource_range.lod_mip_levels_array_layer_second
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8_unorm.subresource_range.lod_base_mip_level_array_layer_last
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8_unorm.subresource_range.lod_mip_levels_array_layer_last
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8_unorm.subresource_range.lod_base_mip_level_remaining_levels
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8_unorm.subresource_range.array_layer_last_remaining_layers
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8_unorm.subresource_range.lod_base_mip_level_array_layer_last_remaining_levels_and_layers
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8_snorm.component_swizzle.r_g_b_a
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8_snorm.component_swizzle.g_b_a_r
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8_snorm.component_swizzle.b_a_r_g
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8_snorm.component_swizzle.a_r_g_b
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8_snorm.subresource_range.lod_base_mip_level
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8_snorm.subresource_range.lod_mip_levels
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8_snorm.subresource_range.array_layer_second
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8_snorm.subresource_range.array_layer_last
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8_snorm.subresource_range.lod_base_mip_level_array_layer_second
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8_snorm.subresource_range.lod_mip_levels_array_layer_second
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8_snorm.subresource_range.lod_base_mip_level_array_layer_last
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8_snorm.subresource_range.lod_mip_levels_array_layer_last
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8_snorm.subresource_range.lod_base_mip_level_remaining_levels
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8_snorm.subresource_range.array_layer_last_remaining_layers
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8_snorm.subresource_range.lod_base_mip_level_array_layer_last_remaining_levels_and_layers
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8_uscaled.component_swizzle.r_g_b_a
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8_uscaled.component_swizzle.g_b_a_r
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8_uscaled.component_swizzle.b_a_r_g
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8_uscaled.component_swizzle.a_r_g_b
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8_uscaled.subresource_range.lod_base_mip_level
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8_uscaled.subresource_range.lod_mip_levels
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8_uscaled.subresource_range.array_layer_second
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8_uscaled.subresource_range.array_layer_last
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8_uscaled.subresource_range.lod_base_mip_level_array_layer_second
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8_uscaled.subresource_range.lod_mip_levels_array_layer_second
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8_uscaled.subresource_range.lod_base_mip_level_array_layer_last
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8_uscaled.subresource_range.lod_mip_levels_array_layer_last
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8_uscaled.subresource_range.lod_base_mip_level_remaining_levels
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8_uscaled.subresource_range.array_layer_last_remaining_layers
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8_uscaled.subresource_range.lod_base_mip_level_array_layer_last_remaining_levels_and_layers
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8_sscaled.component_swizzle.r_g_b_a
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8_sscaled.component_swizzle.g_b_a_r
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8_sscaled.component_swizzle.b_a_r_g
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8_sscaled.component_swizzle.a_r_g_b
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8_sscaled.subresource_range.lod_base_mip_level
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8_sscaled.subresource_range.lod_mip_levels
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8_sscaled.subresource_range.array_layer_second
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8_sscaled.subresource_range.array_layer_last
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8_sscaled.subresource_range.lod_base_mip_level_array_layer_second
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8_sscaled.subresource_range.lod_mip_levels_array_layer_second
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8_sscaled.subresource_range.lod_base_mip_level_array_layer_last
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8_sscaled.subresource_range.lod_mip_levels_array_layer_last
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8_sscaled.subresource_range.lod_base_mip_level_remaining_levels
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8_sscaled.subresource_range.array_layer_last_remaining_layers
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8_sscaled.subresource_range.lod_base_mip_level_array_layer_last_remaining_levels_and_layers
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8_uint.component_swizzle.r_g_b_a
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8_uint.component_swizzle.g_b_a_r
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8_uint.component_swizzle.b_a_r_g
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8_uint.component_swizzle.a_r_g_b
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8_uint.subresource_range.lod_base_mip_level
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8_uint.subresource_range.lod_mip_levels
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8_uint.subresource_range.array_layer_second
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8_uint.subresource_range.array_layer_last
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8_uint.subresource_range.lod_base_mip_level_array_layer_second
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8_uint.subresource_range.lod_mip_levels_array_layer_second
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8_uint.subresource_range.lod_base_mip_level_array_layer_last
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8_uint.subresource_range.lod_mip_levels_array_layer_last
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8_uint.subresource_range.lod_base_mip_level_remaining_levels
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8_uint.subresource_range.array_layer_last_remaining_layers
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8_uint.subresource_range.lod_base_mip_level_array_layer_last_remaining_levels_and_layers
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8_sint.component_swizzle.r_g_b_a
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8_sint.component_swizzle.g_b_a_r
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8_sint.component_swizzle.b_a_r_g
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8_sint.component_swizzle.a_r_g_b
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8_sint.subresource_range.lod_base_mip_level
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8_sint.subresource_range.lod_mip_levels
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8_sint.subresource_range.array_layer_second
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8_sint.subresource_range.array_layer_last
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8_sint.subresource_range.lod_base_mip_level_array_layer_second
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8_sint.subresource_range.lod_mip_levels_array_layer_second
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8_sint.subresource_range.lod_base_mip_level_array_layer_last
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8_sint.subresource_range.lod_mip_levels_array_layer_last
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8_sint.subresource_range.lod_base_mip_level_remaining_levels
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8_sint.subresource_range.array_layer_last_remaining_layers
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8_sint.subresource_range.lod_base_mip_level_array_layer_last_remaining_levels_and_layers
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8_srgb.component_swizzle.r_g_b_a
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8_srgb.component_swizzle.g_b_a_r
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8_srgb.component_swizzle.b_a_r_g
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8_srgb.component_swizzle.a_r_g_b
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8_srgb.subresource_range.lod_base_mip_level
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8_srgb.subresource_range.lod_mip_levels
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8_srgb.subresource_range.array_layer_second
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8_srgb.subresource_range.array_layer_last
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8_srgb.subresource_range.lod_base_mip_level_array_layer_second
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8_srgb.subresource_range.lod_mip_levels_array_layer_second
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8_srgb.subresource_range.lod_base_mip_level_array_layer_last
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8_srgb.subresource_range.lod_mip_levels_array_layer_last
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8_srgb.subresource_range.lod_base_mip_level_remaining_levels
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8_srgb.subresource_range.array_layer_last_remaining_layers
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8_srgb.subresource_range.lod_base_mip_level_array_layer_last_remaining_levels_and_layers
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8a8_unorm.component_swizzle.r_g_b_a
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8a8_unorm.component_swizzle.g_b_a_r
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8a8_unorm.component_swizzle.b_a_r_g
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8a8_unorm.component_swizzle.a_r_g_b
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8a8_unorm.subresource_range.lod_base_mip_level
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8a8_unorm.subresource_range.lod_mip_levels
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8a8_unorm.subresource_range.array_layer_second
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8a8_unorm.subresource_range.array_layer_last
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8a8_unorm.subresource_range.lod_base_mip_level_array_layer_second
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8a8_unorm.subresource_range.lod_mip_levels_array_layer_second
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8a8_unorm.subresource_range.lod_base_mip_level_array_layer_last
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8a8_unorm.subresource_range.lod_mip_levels_array_layer_last
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8a8_unorm.subresource_range.lod_base_mip_level_remaining_levels
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8a8_unorm.subresource_range.array_layer_last_remaining_layers
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8a8_unorm.subresource_range.lod_base_mip_level_array_layer_last_remaining_levels_and_layers
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8a8_snorm.component_swizzle.r_g_b_a
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8a8_snorm.component_swizzle.g_b_a_r
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8a8_snorm.component_swizzle.b_a_r_g
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8a8_snorm.component_swizzle.a_r_g_b
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8a8_snorm.subresource_range.lod_base_mip_level
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8a8_snorm.subresource_range.lod_mip_levels
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8a8_snorm.subresource_range.array_layer_second
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8a8_snorm.subresource_range.array_layer_last
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8a8_snorm.subresource_range.lod_base_mip_level_array_layer_second
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8a8_snorm.subresource_range.lod_mip_levels_array_layer_second
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8a8_snorm.subresource_range.lod_base_mip_level_array_layer_last
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8a8_snorm.subresource_range.lod_mip_levels_array_layer_last
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8a8_snorm.subresource_range.lod_base_mip_level_remaining_levels
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8a8_snorm.subresource_range.array_layer_last_remaining_layers
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8a8_snorm.subresource_range.lod_base_mip_level_array_layer_last_remaining_levels_and_layers
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8a8_uscaled.component_swizzle.r_g_b_a
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8a8_uscaled.component_swizzle.g_b_a_r
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8a8_uscaled.component_swizzle.b_a_r_g
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8a8_uscaled.component_swizzle.a_r_g_b
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8a8_uscaled.subresource_range.lod_base_mip_level
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8a8_uscaled.subresource_range.lod_mip_levels
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8a8_uscaled.subresource_range.array_layer_second
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8a8_uscaled.subresource_range.array_layer_last
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8a8_uscaled.subresource_range.lod_base_mip_level_array_layer_second
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8a8_uscaled.subresource_range.lod_mip_levels_array_layer_second
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8a8_uscaled.subresource_range.lod_base_mip_level_array_layer_last
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8a8_uscaled.subresource_range.lod_mip_levels_array_layer_last
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8a8_uscaled.subresource_range.lod_base_mip_level_remaining_levels
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8a8_uscaled.subresource_range.array_layer_last_remaining_layers
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8a8_uscaled.subresource_range.lod_base_mip_level_array_layer_last_remaining_levels_and_layers
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8a8_sscaled.component_swizzle.r_g_b_a
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8a8_sscaled.component_swizzle.g_b_a_r
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8a8_sscaled.component_swizzle.b_a_r_g
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8a8_sscaled.component_swizzle.a_r_g_b
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8a8_sscaled.subresource_range.lod_base_mip_level
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8a8_sscaled.subresource_range.lod_mip_levels
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8a8_sscaled.subresource_range.array_layer_second
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8a8_sscaled.subresource_range.array_layer_last
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8a8_sscaled.subresource_range.lod_base_mip_level_array_layer_second
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8a8_sscaled.subresource_range.lod_mip_levels_array_layer_second
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8a8_sscaled.subresource_range.lod_base_mip_level_array_layer_last
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8a8_sscaled.subresource_range.lod_mip_levels_array_layer_last
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8a8_sscaled.subresource_range.lod_base_mip_level_remaining_levels
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8a8_sscaled.subresource_range.array_layer_last_remaining_layers
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8a8_sscaled.subresource_range.lod_base_mip_level_array_layer_last_remaining_levels_and_layers
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8a8_uint.component_swizzle.r_g_b_a
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8a8_uint.component_swizzle.g_b_a_r
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8a8_uint.component_swizzle.b_a_r_g
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8a8_uint.component_swizzle.a_r_g_b
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8a8_uint.subresource_range.lod_base_mip_level
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8a8_uint.subresource_range.lod_mip_levels
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8a8_uint.subresource_range.array_layer_second
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8a8_uint.subresource_range.array_layer_last
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8a8_uint.subresource_range.lod_base_mip_level_array_layer_second
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8a8_uint.subresource_range.lod_mip_levels_array_layer_second
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8a8_uint.subresource_range.lod_base_mip_level_array_layer_last
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8a8_uint.subresource_range.lod_mip_levels_array_layer_last
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8a8_uint.subresource_range.lod_base_mip_level_remaining_levels
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8a8_uint.subresource_range.array_layer_last_remaining_layers
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8a8_uint.subresource_range.lod_base_mip_level_array_layer_last_remaining_levels_and_layers
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8a8_sint.component_swizzle.r_g_b_a
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8a8_sint.component_swizzle.g_b_a_r
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8a8_sint.component_swizzle.b_a_r_g
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8a8_sint.component_swizzle.a_r_g_b
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8a8_sint.subresource_range.lod_base_mip_level
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8a8_sint.subresource_range.lod_mip_levels
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8a8_sint.subresource_range.array_layer_second
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8a8_sint.subresource_range.array_layer_last
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8a8_sint.subresource_range.lod_base_mip_level_array_layer_second
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8a8_sint.subresource_range.lod_mip_levels_array_layer_second
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8a8_sint.subresource_range.lod_base_mip_level_array_layer_last
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8a8_sint.subresource_range.lod_mip_levels_array_layer_last
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8a8_sint.subresource_range.lod_base_mip_level_remaining_levels
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8a8_sint.subresource_range.array_layer_last_remaining_layers
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8a8_sint.subresource_range.lod_base_mip_level_array_layer_last_remaining_levels_and_layers
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8a8_srgb.component_swizzle.r_g_b_a
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8a8_srgb.component_swizzle.g_b_a_r
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8a8_srgb.component_swizzle.b_a_r_g
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8a8_srgb.component_swizzle.a_r_g_b
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8a8_srgb.subresource_range.lod_base_mip_level
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8a8_srgb.subresource_range.lod_mip_levels
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8a8_srgb.subresource_range.array_layer_second
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8a8_srgb.subresource_range.array_layer_last
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8a8_srgb.subresource_range.lod_base_mip_level_array_layer_second
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8a8_srgb.subresource_range.lod_mip_levels_array_layer_second
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8a8_srgb.subresource_range.lod_base_mip_level_array_layer_last
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8a8_srgb.subresource_range.lod_mip_levels_array_layer_last
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8a8_srgb.subresource_range.lod_base_mip_level_remaining_levels
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8a8_srgb.subresource_range.array_layer_last_remaining_layers
+dEQP-VK.pipeline.image_view.view_type.cube.format.b8g8r8a8_srgb.subresource_range.lod_base_mip_level_array_layer_last_remaining_levels_and_layers
 dEQP-VK.pipeline.image_view.view_type.cube.format.a4r4g4b4_unorm_pack16_ext.component_swizzle.r_g_b_a
 dEQP-VK.pipeline.image_view.view_type.cube.format.a4r4g4b4_unorm_pack16_ext.component_swizzle.g_b_a_r
 dEQP-VK.pipeline.image_view.view_type.cube.format.a4r4g4b4_unorm_pack16_ext.component_swizzle.b_a_r_g
@@ -60152,6 +64906,258 @@
 dEQP-VK.pipeline.image_view.view_type.cube.format.a4b4g4r4_unorm_pack16_ext.subresource_range.lod_base_mip_level_remaining_levels
 dEQP-VK.pipeline.image_view.view_type.cube.format.a4b4g4r4_unorm_pack16_ext.subresource_range.array_layer_last_remaining_layers
 dEQP-VK.pipeline.image_view.view_type.cube.format.a4b4g4r4_unorm_pack16_ext.subresource_range.lod_base_mip_level_array_layer_last_remaining_levels_and_layers
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_unorm.component_swizzle.r_g_b_a
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_unorm.component_swizzle.g_b_a_r
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_unorm.component_swizzle.b_a_r_g
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_unorm.component_swizzle.a_r_g_b
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_unorm.subresource_range.lod_base_mip_level
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_unorm.subresource_range.lod_mip_levels
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_unorm.subresource_range.base_array_layer
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_unorm.subresource_range.array_size
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_unorm.subresource_range.array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_unorm.subresource_range.lod_base_mip_level_base_array_layer
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_unorm.subresource_range.lod_mip_levels_base_array_layer
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_unorm.subresource_range.lod_base_mip_level_array_size
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_unorm.subresource_range.lod_mip_levels_array_size
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_unorm.subresource_range.lod_base_mip_level_array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_unorm.subresource_range.lod_mip_levels_array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_unorm.subresource_range.lod_base_mip_level_remaining_levels
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_unorm.subresource_range.base_array_layer_remaining_layers
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_unorm.subresource_range.lod_base_mip_level_base_array_layer_remaining_levels_and_layers
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_snorm.component_swizzle.r_g_b_a
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_snorm.component_swizzle.g_b_a_r
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_snorm.component_swizzle.b_a_r_g
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_snorm.component_swizzle.a_r_g_b
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_snorm.subresource_range.lod_base_mip_level
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_snorm.subresource_range.lod_mip_levels
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_snorm.subresource_range.base_array_layer
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_snorm.subresource_range.array_size
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_snorm.subresource_range.array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_snorm.subresource_range.lod_base_mip_level_base_array_layer
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_snorm.subresource_range.lod_mip_levels_base_array_layer
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_snorm.subresource_range.lod_base_mip_level_array_size
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_snorm.subresource_range.lod_mip_levels_array_size
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_snorm.subresource_range.lod_base_mip_level_array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_snorm.subresource_range.lod_mip_levels_array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_snorm.subresource_range.lod_base_mip_level_remaining_levels
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_snorm.subresource_range.base_array_layer_remaining_layers
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_snorm.subresource_range.lod_base_mip_level_base_array_layer_remaining_levels_and_layers
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_uscaled.component_swizzle.r_g_b_a
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_uscaled.component_swizzle.g_b_a_r
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_uscaled.component_swizzle.b_a_r_g
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_uscaled.component_swizzle.a_r_g_b
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_uscaled.subresource_range.lod_base_mip_level
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_uscaled.subresource_range.lod_mip_levels
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_uscaled.subresource_range.base_array_layer
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_uscaled.subresource_range.array_size
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_uscaled.subresource_range.array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_uscaled.subresource_range.lod_base_mip_level_base_array_layer
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_uscaled.subresource_range.lod_mip_levels_base_array_layer
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_uscaled.subresource_range.lod_base_mip_level_array_size
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_uscaled.subresource_range.lod_mip_levels_array_size
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_uscaled.subresource_range.lod_base_mip_level_array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_uscaled.subresource_range.lod_mip_levels_array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_uscaled.subresource_range.lod_base_mip_level_remaining_levels
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_uscaled.subresource_range.base_array_layer_remaining_layers
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_uscaled.subresource_range.lod_base_mip_level_base_array_layer_remaining_levels_and_layers
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_sscaled.component_swizzle.r_g_b_a
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_sscaled.component_swizzle.g_b_a_r
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_sscaled.component_swizzle.b_a_r_g
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_sscaled.component_swizzle.a_r_g_b
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_sscaled.subresource_range.lod_base_mip_level
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_sscaled.subresource_range.lod_mip_levels
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_sscaled.subresource_range.base_array_layer
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_sscaled.subresource_range.array_size
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_sscaled.subresource_range.array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_sscaled.subresource_range.lod_base_mip_level_base_array_layer
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_sscaled.subresource_range.lod_mip_levels_base_array_layer
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_sscaled.subresource_range.lod_base_mip_level_array_size
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_sscaled.subresource_range.lod_mip_levels_array_size
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_sscaled.subresource_range.lod_base_mip_level_array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_sscaled.subresource_range.lod_mip_levels_array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_sscaled.subresource_range.lod_base_mip_level_remaining_levels
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_sscaled.subresource_range.base_array_layer_remaining_layers
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_sscaled.subresource_range.lod_base_mip_level_base_array_layer_remaining_levels_and_layers
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_uint.component_swizzle.r_g_b_a
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_uint.component_swizzle.g_b_a_r
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_uint.component_swizzle.b_a_r_g
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_uint.component_swizzle.a_r_g_b
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_uint.subresource_range.lod_base_mip_level
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_uint.subresource_range.lod_mip_levels
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_uint.subresource_range.base_array_layer
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_uint.subresource_range.array_size
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_uint.subresource_range.array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_uint.subresource_range.lod_base_mip_level_base_array_layer
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_uint.subresource_range.lod_mip_levels_base_array_layer
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_uint.subresource_range.lod_base_mip_level_array_size
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_uint.subresource_range.lod_mip_levels_array_size
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_uint.subresource_range.lod_base_mip_level_array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_uint.subresource_range.lod_mip_levels_array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_uint.subresource_range.lod_base_mip_level_remaining_levels
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_uint.subresource_range.base_array_layer_remaining_layers
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_uint.subresource_range.lod_base_mip_level_base_array_layer_remaining_levels_and_layers
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_sint.component_swizzle.r_g_b_a
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_sint.component_swizzle.g_b_a_r
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_sint.component_swizzle.b_a_r_g
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_sint.component_swizzle.a_r_g_b
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_sint.subresource_range.lod_base_mip_level
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_sint.subresource_range.lod_mip_levels
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_sint.subresource_range.base_array_layer
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_sint.subresource_range.array_size
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_sint.subresource_range.array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_sint.subresource_range.lod_base_mip_level_base_array_layer
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_sint.subresource_range.lod_mip_levels_base_array_layer
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_sint.subresource_range.lod_base_mip_level_array_size
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_sint.subresource_range.lod_mip_levels_array_size
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_sint.subresource_range.lod_base_mip_level_array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_sint.subresource_range.lod_mip_levels_array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_sint.subresource_range.lod_base_mip_level_remaining_levels
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_sint.subresource_range.base_array_layer_remaining_layers
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_sint.subresource_range.lod_base_mip_level_base_array_layer_remaining_levels_and_layers
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_srgb.component_swizzle.r_g_b_a
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_srgb.component_swizzle.g_b_a_r
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_srgb.component_swizzle.b_a_r_g
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_srgb.component_swizzle.a_r_g_b
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_srgb.subresource_range.lod_base_mip_level
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_srgb.subresource_range.lod_mip_levels
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_srgb.subresource_range.base_array_layer
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_srgb.subresource_range.array_size
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_srgb.subresource_range.array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_srgb.subresource_range.lod_base_mip_level_base_array_layer
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_srgb.subresource_range.lod_mip_levels_base_array_layer
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_srgb.subresource_range.lod_base_mip_level_array_size
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_srgb.subresource_range.lod_mip_levels_array_size
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_srgb.subresource_range.lod_base_mip_level_array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_srgb.subresource_range.lod_mip_levels_array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_srgb.subresource_range.lod_base_mip_level_remaining_levels
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_srgb.subresource_range.base_array_layer_remaining_layers
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8_srgb.subresource_range.lod_base_mip_level_base_array_layer_remaining_levels_and_layers
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_unorm.component_swizzle.r_g_b_a
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_unorm.component_swizzle.g_b_a_r
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_unorm.component_swizzle.b_a_r_g
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_unorm.component_swizzle.a_r_g_b
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_unorm.subresource_range.lod_base_mip_level
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_unorm.subresource_range.lod_mip_levels
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_unorm.subresource_range.base_array_layer
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_unorm.subresource_range.array_size
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_unorm.subresource_range.array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_unorm.subresource_range.lod_base_mip_level_base_array_layer
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_unorm.subresource_range.lod_mip_levels_base_array_layer
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_unorm.subresource_range.lod_base_mip_level_array_size
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_unorm.subresource_range.lod_mip_levels_array_size
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_unorm.subresource_range.lod_base_mip_level_array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_unorm.subresource_range.lod_mip_levels_array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_unorm.subresource_range.lod_base_mip_level_remaining_levels
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_unorm.subresource_range.base_array_layer_remaining_layers
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_unorm.subresource_range.lod_base_mip_level_base_array_layer_remaining_levels_and_layers
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_snorm.component_swizzle.r_g_b_a
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_snorm.component_swizzle.g_b_a_r
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_snorm.component_swizzle.b_a_r_g
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_snorm.component_swizzle.a_r_g_b
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_snorm.subresource_range.lod_base_mip_level
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_snorm.subresource_range.lod_mip_levels
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_snorm.subresource_range.base_array_layer
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_snorm.subresource_range.array_size
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_snorm.subresource_range.array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_snorm.subresource_range.lod_base_mip_level_base_array_layer
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_snorm.subresource_range.lod_mip_levels_base_array_layer
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_snorm.subresource_range.lod_base_mip_level_array_size
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_snorm.subresource_range.lod_mip_levels_array_size
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_snorm.subresource_range.lod_base_mip_level_array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_snorm.subresource_range.lod_mip_levels_array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_snorm.subresource_range.lod_base_mip_level_remaining_levels
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_snorm.subresource_range.base_array_layer_remaining_layers
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_snorm.subresource_range.lod_base_mip_level_base_array_layer_remaining_levels_and_layers
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_uscaled.component_swizzle.r_g_b_a
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_uscaled.component_swizzle.g_b_a_r
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_uscaled.component_swizzle.b_a_r_g
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_uscaled.component_swizzle.a_r_g_b
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_uscaled.subresource_range.lod_base_mip_level
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_uscaled.subresource_range.lod_mip_levels
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_uscaled.subresource_range.base_array_layer
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_uscaled.subresource_range.array_size
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_uscaled.subresource_range.array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_uscaled.subresource_range.lod_base_mip_level_base_array_layer
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_uscaled.subresource_range.lod_mip_levels_base_array_layer
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_uscaled.subresource_range.lod_base_mip_level_array_size
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_uscaled.subresource_range.lod_mip_levels_array_size
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_uscaled.subresource_range.lod_base_mip_level_array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_uscaled.subresource_range.lod_mip_levels_array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_uscaled.subresource_range.lod_base_mip_level_remaining_levels
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_uscaled.subresource_range.base_array_layer_remaining_layers
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_uscaled.subresource_range.lod_base_mip_level_base_array_layer_remaining_levels_and_layers
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_sscaled.component_swizzle.r_g_b_a
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_sscaled.component_swizzle.g_b_a_r
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_sscaled.component_swizzle.b_a_r_g
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_sscaled.component_swizzle.a_r_g_b
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_sscaled.subresource_range.lod_base_mip_level
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_sscaled.subresource_range.lod_mip_levels
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_sscaled.subresource_range.base_array_layer
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_sscaled.subresource_range.array_size
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_sscaled.subresource_range.array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_sscaled.subresource_range.lod_base_mip_level_base_array_layer
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_sscaled.subresource_range.lod_mip_levels_base_array_layer
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_sscaled.subresource_range.lod_base_mip_level_array_size
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_sscaled.subresource_range.lod_mip_levels_array_size
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_sscaled.subresource_range.lod_base_mip_level_array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_sscaled.subresource_range.lod_mip_levels_array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_sscaled.subresource_range.lod_base_mip_level_remaining_levels
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_sscaled.subresource_range.base_array_layer_remaining_layers
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_sscaled.subresource_range.lod_base_mip_level_base_array_layer_remaining_levels_and_layers
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_uint.component_swizzle.r_g_b_a
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_uint.component_swizzle.g_b_a_r
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_uint.component_swizzle.b_a_r_g
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_uint.component_swizzle.a_r_g_b
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_uint.subresource_range.lod_base_mip_level
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_uint.subresource_range.lod_mip_levels
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_uint.subresource_range.base_array_layer
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_uint.subresource_range.array_size
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_uint.subresource_range.array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_uint.subresource_range.lod_base_mip_level_base_array_layer
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_uint.subresource_range.lod_mip_levels_base_array_layer
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_uint.subresource_range.lod_base_mip_level_array_size
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_uint.subresource_range.lod_mip_levels_array_size
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_uint.subresource_range.lod_base_mip_level_array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_uint.subresource_range.lod_mip_levels_array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_uint.subresource_range.lod_base_mip_level_remaining_levels
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_uint.subresource_range.base_array_layer_remaining_layers
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_uint.subresource_range.lod_base_mip_level_base_array_layer_remaining_levels_and_layers
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_sint.component_swizzle.r_g_b_a
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_sint.component_swizzle.g_b_a_r
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_sint.component_swizzle.b_a_r_g
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_sint.component_swizzle.a_r_g_b
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_sint.subresource_range.lod_base_mip_level
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_sint.subresource_range.lod_mip_levels
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_sint.subresource_range.base_array_layer
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_sint.subresource_range.array_size
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_sint.subresource_range.array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_sint.subresource_range.lod_base_mip_level_base_array_layer
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_sint.subresource_range.lod_mip_levels_base_array_layer
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_sint.subresource_range.lod_base_mip_level_array_size
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_sint.subresource_range.lod_mip_levels_array_size
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_sint.subresource_range.lod_base_mip_level_array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_sint.subresource_range.lod_mip_levels_array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_sint.subresource_range.lod_base_mip_level_remaining_levels
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_sint.subresource_range.base_array_layer_remaining_layers
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_sint.subresource_range.lod_base_mip_level_base_array_layer_remaining_levels_and_layers
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_srgb.component_swizzle.r_g_b_a
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_srgb.component_swizzle.g_b_a_r
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_srgb.component_swizzle.b_a_r_g
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_srgb.component_swizzle.a_r_g_b
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_srgb.subresource_range.lod_base_mip_level
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_srgb.subresource_range.lod_mip_levels
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_srgb.subresource_range.base_array_layer
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_srgb.subresource_range.array_size
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_srgb.subresource_range.array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_srgb.subresource_range.lod_base_mip_level_base_array_layer
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_srgb.subresource_range.lod_mip_levels_base_array_layer
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_srgb.subresource_range.lod_base_mip_level_array_size
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_srgb.subresource_range.lod_mip_levels_array_size
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_srgb.subresource_range.lod_base_mip_level_array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_srgb.subresource_range.lod_mip_levels_array_base_and_size
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_srgb.subresource_range.lod_base_mip_level_remaining_levels
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_srgb.subresource_range.base_array_layer_remaining_layers
+dEQP-VK.pipeline.image_view.view_type.cube_array.format.b8g8r8a8_srgb.subresource_range.lod_base_mip_level_base_array_layer_remaining_levels_and_layers
 dEQP-VK.pipeline.image_view.view_type.cube_array.format.a4r4g4b4_unorm_pack16_ext.component_swizzle.r_g_b_a
 dEQP-VK.pipeline.image_view.view_type.cube_array.format.a4r4g4b4_unorm_pack16_ext.component_swizzle.g_b_a_r
 dEQP-VK.pipeline.image_view.view_type.cube_array.format.a4r4g4b4_unorm_pack16_ext.component_swizzle.b_a_r_g
@@ -60188,6 +65194,232 @@
 dEQP-VK.pipeline.image_view.view_type.cube_array.format.a4b4g4r4_unorm_pack16_ext.subresource_range.lod_base_mip_level_remaining_levels
 dEQP-VK.pipeline.image_view.view_type.cube_array.format.a4b4g4r4_unorm_pack16_ext.subresource_range.base_array_layer_remaining_layers
 dEQP-VK.pipeline.image_view.view_type.cube_array.format.a4b4g4r4_unorm_pack16_ext.subresource_range.lod_base_mip_level_base_array_layer_remaining_levels_and_layers
+dEQP-VK.pipeline.logic_op.r8_uint.clear
+dEQP-VK.pipeline.logic_op.r8_uint.and
+dEQP-VK.pipeline.logic_op.r8_uint.and_reverse
+dEQP-VK.pipeline.logic_op.r8_uint.copy
+dEQP-VK.pipeline.logic_op.r8_uint.and_inverted
+dEQP-VK.pipeline.logic_op.r8_uint.no_op
+dEQP-VK.pipeline.logic_op.r8_uint.xor
+dEQP-VK.pipeline.logic_op.r8_uint.or
+dEQP-VK.pipeline.logic_op.r8_uint.nor
+dEQP-VK.pipeline.logic_op.r8_uint.equivalent
+dEQP-VK.pipeline.logic_op.r8_uint.invert
+dEQP-VK.pipeline.logic_op.r8_uint.or_reverse
+dEQP-VK.pipeline.logic_op.r8_uint.copy_inverted
+dEQP-VK.pipeline.logic_op.r8_uint.or_inverted
+dEQP-VK.pipeline.logic_op.r8_uint.nand
+dEQP-VK.pipeline.logic_op.r8_uint.set
+dEQP-VK.pipeline.logic_op.r8g8_uint.clear
+dEQP-VK.pipeline.logic_op.r8g8_uint.and
+dEQP-VK.pipeline.logic_op.r8g8_uint.and_reverse
+dEQP-VK.pipeline.logic_op.r8g8_uint.copy
+dEQP-VK.pipeline.logic_op.r8g8_uint.and_inverted
+dEQP-VK.pipeline.logic_op.r8g8_uint.no_op
+dEQP-VK.pipeline.logic_op.r8g8_uint.xor
+dEQP-VK.pipeline.logic_op.r8g8_uint.or
+dEQP-VK.pipeline.logic_op.r8g8_uint.nor
+dEQP-VK.pipeline.logic_op.r8g8_uint.equivalent
+dEQP-VK.pipeline.logic_op.r8g8_uint.invert
+dEQP-VK.pipeline.logic_op.r8g8_uint.or_reverse
+dEQP-VK.pipeline.logic_op.r8g8_uint.copy_inverted
+dEQP-VK.pipeline.logic_op.r8g8_uint.or_inverted
+dEQP-VK.pipeline.logic_op.r8g8_uint.nand
+dEQP-VK.pipeline.logic_op.r8g8_uint.set
+dEQP-VK.pipeline.logic_op.r8g8b8_uint.clear
+dEQP-VK.pipeline.logic_op.r8g8b8_uint.and
+dEQP-VK.pipeline.logic_op.r8g8b8_uint.and_reverse
+dEQP-VK.pipeline.logic_op.r8g8b8_uint.copy
+dEQP-VK.pipeline.logic_op.r8g8b8_uint.and_inverted
+dEQP-VK.pipeline.logic_op.r8g8b8_uint.no_op
+dEQP-VK.pipeline.logic_op.r8g8b8_uint.xor
+dEQP-VK.pipeline.logic_op.r8g8b8_uint.or
+dEQP-VK.pipeline.logic_op.r8g8b8_uint.nor
+dEQP-VK.pipeline.logic_op.r8g8b8_uint.equivalent
+dEQP-VK.pipeline.logic_op.r8g8b8_uint.invert
+dEQP-VK.pipeline.logic_op.r8g8b8_uint.or_reverse
+dEQP-VK.pipeline.logic_op.r8g8b8_uint.copy_inverted
+dEQP-VK.pipeline.logic_op.r8g8b8_uint.or_inverted
+dEQP-VK.pipeline.logic_op.r8g8b8_uint.nand
+dEQP-VK.pipeline.logic_op.r8g8b8_uint.set
+dEQP-VK.pipeline.logic_op.b8g8r8_uint.clear
+dEQP-VK.pipeline.logic_op.b8g8r8_uint.and
+dEQP-VK.pipeline.logic_op.b8g8r8_uint.and_reverse
+dEQP-VK.pipeline.logic_op.b8g8r8_uint.copy
+dEQP-VK.pipeline.logic_op.b8g8r8_uint.and_inverted
+dEQP-VK.pipeline.logic_op.b8g8r8_uint.no_op
+dEQP-VK.pipeline.logic_op.b8g8r8_uint.xor
+dEQP-VK.pipeline.logic_op.b8g8r8_uint.or
+dEQP-VK.pipeline.logic_op.b8g8r8_uint.nor
+dEQP-VK.pipeline.logic_op.b8g8r8_uint.equivalent
+dEQP-VK.pipeline.logic_op.b8g8r8_uint.invert
+dEQP-VK.pipeline.logic_op.b8g8r8_uint.or_reverse
+dEQP-VK.pipeline.logic_op.b8g8r8_uint.copy_inverted
+dEQP-VK.pipeline.logic_op.b8g8r8_uint.or_inverted
+dEQP-VK.pipeline.logic_op.b8g8r8_uint.nand
+dEQP-VK.pipeline.logic_op.b8g8r8_uint.set
+dEQP-VK.pipeline.logic_op.r8g8b8a8_uint.clear
+dEQP-VK.pipeline.logic_op.r8g8b8a8_uint.and
+dEQP-VK.pipeline.logic_op.r8g8b8a8_uint.and_reverse
+dEQP-VK.pipeline.logic_op.r8g8b8a8_uint.copy
+dEQP-VK.pipeline.logic_op.r8g8b8a8_uint.and_inverted
+dEQP-VK.pipeline.logic_op.r8g8b8a8_uint.no_op
+dEQP-VK.pipeline.logic_op.r8g8b8a8_uint.xor
+dEQP-VK.pipeline.logic_op.r8g8b8a8_uint.or
+dEQP-VK.pipeline.logic_op.r8g8b8a8_uint.nor
+dEQP-VK.pipeline.logic_op.r8g8b8a8_uint.equivalent
+dEQP-VK.pipeline.logic_op.r8g8b8a8_uint.invert
+dEQP-VK.pipeline.logic_op.r8g8b8a8_uint.or_reverse
+dEQP-VK.pipeline.logic_op.r8g8b8a8_uint.copy_inverted
+dEQP-VK.pipeline.logic_op.r8g8b8a8_uint.or_inverted
+dEQP-VK.pipeline.logic_op.r8g8b8a8_uint.nand
+dEQP-VK.pipeline.logic_op.r8g8b8a8_uint.set
+dEQP-VK.pipeline.logic_op.b8g8r8a8_uint.clear
+dEQP-VK.pipeline.logic_op.b8g8r8a8_uint.and
+dEQP-VK.pipeline.logic_op.b8g8r8a8_uint.and_reverse
+dEQP-VK.pipeline.logic_op.b8g8r8a8_uint.copy
+dEQP-VK.pipeline.logic_op.b8g8r8a8_uint.and_inverted
+dEQP-VK.pipeline.logic_op.b8g8r8a8_uint.no_op
+dEQP-VK.pipeline.logic_op.b8g8r8a8_uint.xor
+dEQP-VK.pipeline.logic_op.b8g8r8a8_uint.or
+dEQP-VK.pipeline.logic_op.b8g8r8a8_uint.nor
+dEQP-VK.pipeline.logic_op.b8g8r8a8_uint.equivalent
+dEQP-VK.pipeline.logic_op.b8g8r8a8_uint.invert
+dEQP-VK.pipeline.logic_op.b8g8r8a8_uint.or_reverse
+dEQP-VK.pipeline.logic_op.b8g8r8a8_uint.copy_inverted
+dEQP-VK.pipeline.logic_op.b8g8r8a8_uint.or_inverted
+dEQP-VK.pipeline.logic_op.b8g8r8a8_uint.nand
+dEQP-VK.pipeline.logic_op.b8g8r8a8_uint.set
+dEQP-VK.pipeline.logic_op.r16_uint.clear
+dEQP-VK.pipeline.logic_op.r16_uint.and
+dEQP-VK.pipeline.logic_op.r16_uint.and_reverse
+dEQP-VK.pipeline.logic_op.r16_uint.copy
+dEQP-VK.pipeline.logic_op.r16_uint.and_inverted
+dEQP-VK.pipeline.logic_op.r16_uint.no_op
+dEQP-VK.pipeline.logic_op.r16_uint.xor
+dEQP-VK.pipeline.logic_op.r16_uint.or
+dEQP-VK.pipeline.logic_op.r16_uint.nor
+dEQP-VK.pipeline.logic_op.r16_uint.equivalent
+dEQP-VK.pipeline.logic_op.r16_uint.invert
+dEQP-VK.pipeline.logic_op.r16_uint.or_reverse
+dEQP-VK.pipeline.logic_op.r16_uint.copy_inverted
+dEQP-VK.pipeline.logic_op.r16_uint.or_inverted
+dEQP-VK.pipeline.logic_op.r16_uint.nand
+dEQP-VK.pipeline.logic_op.r16_uint.set
+dEQP-VK.pipeline.logic_op.r16g16_uint.clear
+dEQP-VK.pipeline.logic_op.r16g16_uint.and
+dEQP-VK.pipeline.logic_op.r16g16_uint.and_reverse
+dEQP-VK.pipeline.logic_op.r16g16_uint.copy
+dEQP-VK.pipeline.logic_op.r16g16_uint.and_inverted
+dEQP-VK.pipeline.logic_op.r16g16_uint.no_op
+dEQP-VK.pipeline.logic_op.r16g16_uint.xor
+dEQP-VK.pipeline.logic_op.r16g16_uint.or
+dEQP-VK.pipeline.logic_op.r16g16_uint.nor
+dEQP-VK.pipeline.logic_op.r16g16_uint.equivalent
+dEQP-VK.pipeline.logic_op.r16g16_uint.invert
+dEQP-VK.pipeline.logic_op.r16g16_uint.or_reverse
+dEQP-VK.pipeline.logic_op.r16g16_uint.copy_inverted
+dEQP-VK.pipeline.logic_op.r16g16_uint.or_inverted
+dEQP-VK.pipeline.logic_op.r16g16_uint.nand
+dEQP-VK.pipeline.logic_op.r16g16_uint.set
+dEQP-VK.pipeline.logic_op.r16g16b16_uint.clear
+dEQP-VK.pipeline.logic_op.r16g16b16_uint.and
+dEQP-VK.pipeline.logic_op.r16g16b16_uint.and_reverse
+dEQP-VK.pipeline.logic_op.r16g16b16_uint.copy
+dEQP-VK.pipeline.logic_op.r16g16b16_uint.and_inverted
+dEQP-VK.pipeline.logic_op.r16g16b16_uint.no_op
+dEQP-VK.pipeline.logic_op.r16g16b16_uint.xor
+dEQP-VK.pipeline.logic_op.r16g16b16_uint.or
+dEQP-VK.pipeline.logic_op.r16g16b16_uint.nor
+dEQP-VK.pipeline.logic_op.r16g16b16_uint.equivalent
+dEQP-VK.pipeline.logic_op.r16g16b16_uint.invert
+dEQP-VK.pipeline.logic_op.r16g16b16_uint.or_reverse
+dEQP-VK.pipeline.logic_op.r16g16b16_uint.copy_inverted
+dEQP-VK.pipeline.logic_op.r16g16b16_uint.or_inverted
+dEQP-VK.pipeline.logic_op.r16g16b16_uint.nand
+dEQP-VK.pipeline.logic_op.r16g16b16_uint.set
+dEQP-VK.pipeline.logic_op.r16g16b16a16_uint.clear
+dEQP-VK.pipeline.logic_op.r16g16b16a16_uint.and
+dEQP-VK.pipeline.logic_op.r16g16b16a16_uint.and_reverse
+dEQP-VK.pipeline.logic_op.r16g16b16a16_uint.copy
+dEQP-VK.pipeline.logic_op.r16g16b16a16_uint.and_inverted
+dEQP-VK.pipeline.logic_op.r16g16b16a16_uint.no_op
+dEQP-VK.pipeline.logic_op.r16g16b16a16_uint.xor
+dEQP-VK.pipeline.logic_op.r16g16b16a16_uint.or
+dEQP-VK.pipeline.logic_op.r16g16b16a16_uint.nor
+dEQP-VK.pipeline.logic_op.r16g16b16a16_uint.equivalent
+dEQP-VK.pipeline.logic_op.r16g16b16a16_uint.invert
+dEQP-VK.pipeline.logic_op.r16g16b16a16_uint.or_reverse
+dEQP-VK.pipeline.logic_op.r16g16b16a16_uint.copy_inverted
+dEQP-VK.pipeline.logic_op.r16g16b16a16_uint.or_inverted
+dEQP-VK.pipeline.logic_op.r16g16b16a16_uint.nand
+dEQP-VK.pipeline.logic_op.r16g16b16a16_uint.set
+dEQP-VK.pipeline.logic_op.r32_uint.clear
+dEQP-VK.pipeline.logic_op.r32_uint.and
+dEQP-VK.pipeline.logic_op.r32_uint.and_reverse
+dEQP-VK.pipeline.logic_op.r32_uint.copy
+dEQP-VK.pipeline.logic_op.r32_uint.and_inverted
+dEQP-VK.pipeline.logic_op.r32_uint.no_op
+dEQP-VK.pipeline.logic_op.r32_uint.xor
+dEQP-VK.pipeline.logic_op.r32_uint.or
+dEQP-VK.pipeline.logic_op.r32_uint.nor
+dEQP-VK.pipeline.logic_op.r32_uint.equivalent
+dEQP-VK.pipeline.logic_op.r32_uint.invert
+dEQP-VK.pipeline.logic_op.r32_uint.or_reverse
+dEQP-VK.pipeline.logic_op.r32_uint.copy_inverted
+dEQP-VK.pipeline.logic_op.r32_uint.or_inverted
+dEQP-VK.pipeline.logic_op.r32_uint.nand
+dEQP-VK.pipeline.logic_op.r32_uint.set
+dEQP-VK.pipeline.logic_op.r32g32_uint.clear
+dEQP-VK.pipeline.logic_op.r32g32_uint.and
+dEQP-VK.pipeline.logic_op.r32g32_uint.and_reverse
+dEQP-VK.pipeline.logic_op.r32g32_uint.copy
+dEQP-VK.pipeline.logic_op.r32g32_uint.and_inverted
+dEQP-VK.pipeline.logic_op.r32g32_uint.no_op
+dEQP-VK.pipeline.logic_op.r32g32_uint.xor
+dEQP-VK.pipeline.logic_op.r32g32_uint.or
+dEQP-VK.pipeline.logic_op.r32g32_uint.nor
+dEQP-VK.pipeline.logic_op.r32g32_uint.equivalent
+dEQP-VK.pipeline.logic_op.r32g32_uint.invert
+dEQP-VK.pipeline.logic_op.r32g32_uint.or_reverse
+dEQP-VK.pipeline.logic_op.r32g32_uint.copy_inverted
+dEQP-VK.pipeline.logic_op.r32g32_uint.or_inverted
+dEQP-VK.pipeline.logic_op.r32g32_uint.nand
+dEQP-VK.pipeline.logic_op.r32g32_uint.set
+dEQP-VK.pipeline.logic_op.r32g32b32_uint.clear
+dEQP-VK.pipeline.logic_op.r32g32b32_uint.and
+dEQP-VK.pipeline.logic_op.r32g32b32_uint.and_reverse
+dEQP-VK.pipeline.logic_op.r32g32b32_uint.copy
+dEQP-VK.pipeline.logic_op.r32g32b32_uint.and_inverted
+dEQP-VK.pipeline.logic_op.r32g32b32_uint.no_op
+dEQP-VK.pipeline.logic_op.r32g32b32_uint.xor
+dEQP-VK.pipeline.logic_op.r32g32b32_uint.or
+dEQP-VK.pipeline.logic_op.r32g32b32_uint.nor
+dEQP-VK.pipeline.logic_op.r32g32b32_uint.equivalent
+dEQP-VK.pipeline.logic_op.r32g32b32_uint.invert
+dEQP-VK.pipeline.logic_op.r32g32b32_uint.or_reverse
+dEQP-VK.pipeline.logic_op.r32g32b32_uint.copy_inverted
+dEQP-VK.pipeline.logic_op.r32g32b32_uint.or_inverted
+dEQP-VK.pipeline.logic_op.r32g32b32_uint.nand
+dEQP-VK.pipeline.logic_op.r32g32b32_uint.set
+dEQP-VK.pipeline.logic_op.r32g32b32a32_uint.clear
+dEQP-VK.pipeline.logic_op.r32g32b32a32_uint.and
+dEQP-VK.pipeline.logic_op.r32g32b32a32_uint.and_reverse
+dEQP-VK.pipeline.logic_op.r32g32b32a32_uint.copy
+dEQP-VK.pipeline.logic_op.r32g32b32a32_uint.and_inverted
+dEQP-VK.pipeline.logic_op.r32g32b32a32_uint.no_op
+dEQP-VK.pipeline.logic_op.r32g32b32a32_uint.xor
+dEQP-VK.pipeline.logic_op.r32g32b32a32_uint.or
+dEQP-VK.pipeline.logic_op.r32g32b32a32_uint.nor
+dEQP-VK.pipeline.logic_op.r32g32b32a32_uint.equivalent
+dEQP-VK.pipeline.logic_op.r32g32b32a32_uint.invert
+dEQP-VK.pipeline.logic_op.r32g32b32a32_uint.or_reverse
+dEQP-VK.pipeline.logic_op.r32g32b32a32_uint.copy_inverted
+dEQP-VK.pipeline.logic_op.r32g32b32a32_uint.or_inverted
+dEQP-VK.pipeline.logic_op.r32g32b32a32_uint.nand
+dEQP-VK.pipeline.logic_op.r32g32b32a32_uint.set
+dEQP-VK.pipeline.push_constant.graphics_pipeline.overwrite
+dEQP-VK.pipeline.push_constant.compute_pipeline.overwrite
 dEQP-VK.pipeline.push_constant.lifetime.push_range0_bind_layout1
 dEQP-VK.pipeline.push_constant.lifetime.push_range1_bind_layout1_push_range0
 dEQP-VK.pipeline.push_constant.lifetime.push_range0_bind_layout0_push_range1_push_range0
@@ -60569,6 +65801,18 @@
 dEQP-VK.pipeline.spec_constant.compute.basic.double_2_packed
 dEQP-VK.pipeline.spec_constant.compute.basic.mixed_packed
 dEQP-VK.pipeline.spec_constant.compute.basic.mixed_reversed_packed
+dEQP-VK.pipeline.multisample.standardsampleposition.r8g8b8a8_unorm.samples_2
+dEQP-VK.pipeline.multisample.standardsampleposition.r8g8b8a8_unorm.samples_4
+dEQP-VK.pipeline.multisample.standardsampleposition.r8g8b8a8_unorm.samples_8
+dEQP-VK.pipeline.multisample.standardsampleposition.r8g8b8a8_unorm.samples_16
+dEQP-VK.pipeline.multisample.standardsampleposition.r8g8b8a8_unorm.samples_32
+dEQP-VK.pipeline.multisample.standardsampleposition.r8g8b8a8_unorm.samples_64
+dEQP-VK.pipeline.multisample.standardsampleposition.r32g32b32a32_sfloat.samples_2
+dEQP-VK.pipeline.multisample.standardsampleposition.r32g32b32a32_sfloat.samples_4
+dEQP-VK.pipeline.multisample.standardsampleposition.r32g32b32a32_sfloat.samples_8
+dEQP-VK.pipeline.multisample.standardsampleposition.r32g32b32a32_sfloat.samples_16
+dEQP-VK.pipeline.multisample.standardsampleposition.r32g32b32a32_sfloat.samples_32
+dEQP-VK.pipeline.multisample.standardsampleposition.r32g32b32a32_sfloat.samples_64
 dEQP-VK.pipeline.multisample.variable_rate.1_2
 dEQP-VK.pipeline.multisample.variable_rate.1_4
 dEQP-VK.pipeline.multisample.variable_rate.1_8
@@ -61774,6 +67018,7 @@
 dEQP-VK.pipeline.multisample_shader_builtin.write_sample_mask.16_samples
 dEQP-VK.pipeline.shader_stencil_export.d24_unorm_s8_uint.op_replace
 dEQP-VK.pipeline.shader_stencil_export.d32_sfloat_s8_uint.op_replace
+dEQP-VK.pipeline.misc.primitive_id_from_tess
 dEQP-VK.pipeline.extended_dynamic_state.cmd_buffer_start.cull_none
 dEQP-VK.pipeline.extended_dynamic_state.cmd_buffer_start.cull_back
 dEQP-VK.pipeline.extended_dynamic_state.cmd_buffer_start.cull_front
@@ -61782,6 +67027,11 @@
 dEQP-VK.pipeline.extended_dynamic_state.cmd_buffer_start.front_face_ccw
 dEQP-VK.pipeline.extended_dynamic_state.cmd_buffer_start.front_face_cw_reversed
 dEQP-VK.pipeline.extended_dynamic_state.cmd_buffer_start.front_face_ccw_reversed
+dEQP-VK.pipeline.extended_dynamic_state.cmd_buffer_start.disable_raster
+dEQP-VK.pipeline.extended_dynamic_state.cmd_buffer_start.enable_raster
+dEQP-VK.pipeline.extended_dynamic_state.cmd_buffer_start.logic_op_or
+dEQP-VK.pipeline.extended_dynamic_state.cmd_buffer_start.prim_restart_enable
+dEQP-VK.pipeline.extended_dynamic_state.cmd_buffer_start.patch_control_points
 dEQP-VK.pipeline.extended_dynamic_state.cmd_buffer_start.topology_triangle
 dEQP-VK.pipeline.extended_dynamic_state.cmd_buffer_start.topology_line
 dEQP-VK.pipeline.extended_dynamic_state.cmd_buffer_start.topology_triangle_geom
@@ -61797,10 +67047,15 @@
 dEQP-VK.pipeline.extended_dynamic_state.cmd_buffer_start.stride
 dEQP-VK.pipeline.extended_dynamic_state.cmd_buffer_start.stride_with_offset
 dEQP-VK.pipeline.extended_dynamic_state.cmd_buffer_start.stride_with_offset_and_padding
+dEQP-VK.pipeline.extended_dynamic_state.cmd_buffer_start.large_stride
+dEQP-VK.pipeline.extended_dynamic_state.cmd_buffer_start.large_stride_with_offset
+dEQP-VK.pipeline.extended_dynamic_state.cmd_buffer_start.large_stride_with_offset_and_padding
 dEQP-VK.pipeline.extended_dynamic_state.cmd_buffer_start.depth_test_enable
 dEQP-VK.pipeline.extended_dynamic_state.cmd_buffer_start.depth_test_disable
 dEQP-VK.pipeline.extended_dynamic_state.cmd_buffer_start.depth_write_enable
 dEQP-VK.pipeline.extended_dynamic_state.cmd_buffer_start.depth_write_disable
+dEQP-VK.pipeline.extended_dynamic_state.cmd_buffer_start.depth_bias_enable
+dEQP-VK.pipeline.extended_dynamic_state.cmd_buffer_start.depth_bias_disable
 dEQP-VK.pipeline.extended_dynamic_state.cmd_buffer_start.depth_compare_never
 dEQP-VK.pipeline.extended_dynamic_state.cmd_buffer_start.depth_compare_less
 dEQP-VK.pipeline.extended_dynamic_state.cmd_buffer_start.depth_compare_greater
@@ -63147,6 +68402,7 @@
 dEQP-VK.pipeline.extended_dynamic_state.cmd_buffer_start.stencil_state_face_both_dual_xt_dec_wrap_clear_0_ref_0_depthfail
 dEQP-VK.pipeline.extended_dynamic_state.cmd_buffer_start.stencil_state_face_both_dual_xt_dec_wrap_clear_0_ref_1_pass
 dEQP-VK.pipeline.extended_dynamic_state.cmd_buffer_start.stencil_state_face_both_dual_xt_dec_wrap_clear_0_ref_1_depthfail
+dEQP-VK.pipeline.extended_dynamic_state.cmd_buffer_start.vertex_input
 dEQP-VK.pipeline.extended_dynamic_state.before_draw.cull_none
 dEQP-VK.pipeline.extended_dynamic_state.before_draw.cull_back
 dEQP-VK.pipeline.extended_dynamic_state.before_draw.cull_front
@@ -63155,6 +68411,11 @@
 dEQP-VK.pipeline.extended_dynamic_state.before_draw.front_face_ccw
 dEQP-VK.pipeline.extended_dynamic_state.before_draw.front_face_cw_reversed
 dEQP-VK.pipeline.extended_dynamic_state.before_draw.front_face_ccw_reversed
+dEQP-VK.pipeline.extended_dynamic_state.before_draw.disable_raster
+dEQP-VK.pipeline.extended_dynamic_state.before_draw.enable_raster
+dEQP-VK.pipeline.extended_dynamic_state.before_draw.logic_op_or
+dEQP-VK.pipeline.extended_dynamic_state.before_draw.prim_restart_enable
+dEQP-VK.pipeline.extended_dynamic_state.before_draw.patch_control_points
 dEQP-VK.pipeline.extended_dynamic_state.before_draw.topology_triangle
 dEQP-VK.pipeline.extended_dynamic_state.before_draw.topology_line
 dEQP-VK.pipeline.extended_dynamic_state.before_draw.topology_triangle_geom
@@ -63170,10 +68431,15 @@
 dEQP-VK.pipeline.extended_dynamic_state.before_draw.stride
 dEQP-VK.pipeline.extended_dynamic_state.before_draw.stride_with_offset
 dEQP-VK.pipeline.extended_dynamic_state.before_draw.stride_with_offset_and_padding
+dEQP-VK.pipeline.extended_dynamic_state.before_draw.large_stride
+dEQP-VK.pipeline.extended_dynamic_state.before_draw.large_stride_with_offset
+dEQP-VK.pipeline.extended_dynamic_state.before_draw.large_stride_with_offset_and_padding
 dEQP-VK.pipeline.extended_dynamic_state.before_draw.depth_test_enable
 dEQP-VK.pipeline.extended_dynamic_state.before_draw.depth_test_disable
 dEQP-VK.pipeline.extended_dynamic_state.before_draw.depth_write_enable
 dEQP-VK.pipeline.extended_dynamic_state.before_draw.depth_write_disable
+dEQP-VK.pipeline.extended_dynamic_state.before_draw.depth_bias_enable
+dEQP-VK.pipeline.extended_dynamic_state.before_draw.depth_bias_disable
 dEQP-VK.pipeline.extended_dynamic_state.before_draw.depth_compare_never
 dEQP-VK.pipeline.extended_dynamic_state.before_draw.depth_compare_less
 dEQP-VK.pipeline.extended_dynamic_state.before_draw.depth_compare_greater
@@ -64520,6 +69786,7 @@
 dEQP-VK.pipeline.extended_dynamic_state.before_draw.stencil_state_face_both_dual_xt_dec_wrap_clear_0_ref_0_depthfail
 dEQP-VK.pipeline.extended_dynamic_state.before_draw.stencil_state_face_both_dual_xt_dec_wrap_clear_0_ref_1_pass
 dEQP-VK.pipeline.extended_dynamic_state.before_draw.stencil_state_face_both_dual_xt_dec_wrap_clear_0_ref_1_depthfail
+dEQP-VK.pipeline.extended_dynamic_state.before_draw.vertex_input
 dEQP-VK.pipeline.extended_dynamic_state.between_pipelines.cull_none
 dEQP-VK.pipeline.extended_dynamic_state.between_pipelines.cull_back
 dEQP-VK.pipeline.extended_dynamic_state.between_pipelines.cull_front
@@ -64528,6 +69795,11 @@
 dEQP-VK.pipeline.extended_dynamic_state.between_pipelines.front_face_ccw
 dEQP-VK.pipeline.extended_dynamic_state.between_pipelines.front_face_cw_reversed
 dEQP-VK.pipeline.extended_dynamic_state.between_pipelines.front_face_ccw_reversed
+dEQP-VK.pipeline.extended_dynamic_state.between_pipelines.disable_raster
+dEQP-VK.pipeline.extended_dynamic_state.between_pipelines.enable_raster
+dEQP-VK.pipeline.extended_dynamic_state.between_pipelines.logic_op_or
+dEQP-VK.pipeline.extended_dynamic_state.between_pipelines.prim_restart_enable
+dEQP-VK.pipeline.extended_dynamic_state.between_pipelines.patch_control_points
 dEQP-VK.pipeline.extended_dynamic_state.between_pipelines.topology_triangle
 dEQP-VK.pipeline.extended_dynamic_state.between_pipelines.topology_line
 dEQP-VK.pipeline.extended_dynamic_state.between_pipelines.topology_triangle_geom
@@ -64543,10 +69815,15 @@
 dEQP-VK.pipeline.extended_dynamic_state.between_pipelines.stride
 dEQP-VK.pipeline.extended_dynamic_state.between_pipelines.stride_with_offset
 dEQP-VK.pipeline.extended_dynamic_state.between_pipelines.stride_with_offset_and_padding
+dEQP-VK.pipeline.extended_dynamic_state.between_pipelines.large_stride
+dEQP-VK.pipeline.extended_dynamic_state.between_pipelines.large_stride_with_offset
+dEQP-VK.pipeline.extended_dynamic_state.between_pipelines.large_stride_with_offset_and_padding
 dEQP-VK.pipeline.extended_dynamic_state.between_pipelines.depth_test_enable
 dEQP-VK.pipeline.extended_dynamic_state.between_pipelines.depth_test_disable
 dEQP-VK.pipeline.extended_dynamic_state.between_pipelines.depth_write_enable
 dEQP-VK.pipeline.extended_dynamic_state.between_pipelines.depth_write_disable
+dEQP-VK.pipeline.extended_dynamic_state.between_pipelines.depth_bias_enable
+dEQP-VK.pipeline.extended_dynamic_state.between_pipelines.depth_bias_disable
 dEQP-VK.pipeline.extended_dynamic_state.between_pipelines.depth_compare_never
 dEQP-VK.pipeline.extended_dynamic_state.between_pipelines.depth_compare_less
 dEQP-VK.pipeline.extended_dynamic_state.between_pipelines.depth_compare_greater
@@ -65893,6 +71170,7 @@
 dEQP-VK.pipeline.extended_dynamic_state.between_pipelines.stencil_state_face_both_dual_xt_dec_wrap_clear_0_ref_0_depthfail
 dEQP-VK.pipeline.extended_dynamic_state.between_pipelines.stencil_state_face_both_dual_xt_dec_wrap_clear_0_ref_1_pass
 dEQP-VK.pipeline.extended_dynamic_state.between_pipelines.stencil_state_face_both_dual_xt_dec_wrap_clear_0_ref_1_depthfail
+dEQP-VK.pipeline.extended_dynamic_state.between_pipelines.vertex_input
 dEQP-VK.pipeline.extended_dynamic_state.after_pipelines.cull_none
 dEQP-VK.pipeline.extended_dynamic_state.after_pipelines.cull_back
 dEQP-VK.pipeline.extended_dynamic_state.after_pipelines.cull_front
@@ -65901,6 +71179,11 @@
 dEQP-VK.pipeline.extended_dynamic_state.after_pipelines.front_face_ccw
 dEQP-VK.pipeline.extended_dynamic_state.after_pipelines.front_face_cw_reversed
 dEQP-VK.pipeline.extended_dynamic_state.after_pipelines.front_face_ccw_reversed
+dEQP-VK.pipeline.extended_dynamic_state.after_pipelines.disable_raster
+dEQP-VK.pipeline.extended_dynamic_state.after_pipelines.enable_raster
+dEQP-VK.pipeline.extended_dynamic_state.after_pipelines.logic_op_or
+dEQP-VK.pipeline.extended_dynamic_state.after_pipelines.prim_restart_enable
+dEQP-VK.pipeline.extended_dynamic_state.after_pipelines.patch_control_points
 dEQP-VK.pipeline.extended_dynamic_state.after_pipelines.topology_triangle
 dEQP-VK.pipeline.extended_dynamic_state.after_pipelines.topology_line
 dEQP-VK.pipeline.extended_dynamic_state.after_pipelines.topology_triangle_geom
@@ -65916,10 +71199,15 @@
 dEQP-VK.pipeline.extended_dynamic_state.after_pipelines.stride
 dEQP-VK.pipeline.extended_dynamic_state.after_pipelines.stride_with_offset
 dEQP-VK.pipeline.extended_dynamic_state.after_pipelines.stride_with_offset_and_padding
+dEQP-VK.pipeline.extended_dynamic_state.after_pipelines.large_stride
+dEQP-VK.pipeline.extended_dynamic_state.after_pipelines.large_stride_with_offset
+dEQP-VK.pipeline.extended_dynamic_state.after_pipelines.large_stride_with_offset_and_padding
 dEQP-VK.pipeline.extended_dynamic_state.after_pipelines.depth_test_enable
 dEQP-VK.pipeline.extended_dynamic_state.after_pipelines.depth_test_disable
 dEQP-VK.pipeline.extended_dynamic_state.after_pipelines.depth_write_enable
 dEQP-VK.pipeline.extended_dynamic_state.after_pipelines.depth_write_disable
+dEQP-VK.pipeline.extended_dynamic_state.after_pipelines.depth_bias_enable
+dEQP-VK.pipeline.extended_dynamic_state.after_pipelines.depth_bias_disable
 dEQP-VK.pipeline.extended_dynamic_state.after_pipelines.depth_compare_never
 dEQP-VK.pipeline.extended_dynamic_state.after_pipelines.depth_compare_less
 dEQP-VK.pipeline.extended_dynamic_state.after_pipelines.depth_compare_greater
@@ -67266,6 +72554,7 @@
 dEQP-VK.pipeline.extended_dynamic_state.after_pipelines.stencil_state_face_both_dual_xt_dec_wrap_clear_0_ref_0_depthfail
 dEQP-VK.pipeline.extended_dynamic_state.after_pipelines.stencil_state_face_both_dual_xt_dec_wrap_clear_0_ref_1_pass
 dEQP-VK.pipeline.extended_dynamic_state.after_pipelines.stencil_state_face_both_dual_xt_dec_wrap_clear_0_ref_1_depthfail
+dEQP-VK.pipeline.extended_dynamic_state.after_pipelines.vertex_input
 dEQP-VK.pipeline.extended_dynamic_state.before_good_static.cull_none
 dEQP-VK.pipeline.extended_dynamic_state.before_good_static.cull_back
 dEQP-VK.pipeline.extended_dynamic_state.before_good_static.cull_front
@@ -67274,6 +72563,11 @@
 dEQP-VK.pipeline.extended_dynamic_state.before_good_static.front_face_ccw
 dEQP-VK.pipeline.extended_dynamic_state.before_good_static.front_face_cw_reversed
 dEQP-VK.pipeline.extended_dynamic_state.before_good_static.front_face_ccw_reversed
+dEQP-VK.pipeline.extended_dynamic_state.before_good_static.disable_raster
+dEQP-VK.pipeline.extended_dynamic_state.before_good_static.enable_raster
+dEQP-VK.pipeline.extended_dynamic_state.before_good_static.logic_op_or
+dEQP-VK.pipeline.extended_dynamic_state.before_good_static.prim_restart_enable
+dEQP-VK.pipeline.extended_dynamic_state.before_good_static.patch_control_points
 dEQP-VK.pipeline.extended_dynamic_state.before_good_static.topology_triangle
 dEQP-VK.pipeline.extended_dynamic_state.before_good_static.topology_line
 dEQP-VK.pipeline.extended_dynamic_state.before_good_static.topology_triangle_geom
@@ -67289,10 +72583,15 @@
 dEQP-VK.pipeline.extended_dynamic_state.before_good_static.stride
 dEQP-VK.pipeline.extended_dynamic_state.before_good_static.stride_with_offset
 dEQP-VK.pipeline.extended_dynamic_state.before_good_static.stride_with_offset_and_padding
+dEQP-VK.pipeline.extended_dynamic_state.before_good_static.large_stride
+dEQP-VK.pipeline.extended_dynamic_state.before_good_static.large_stride_with_offset
+dEQP-VK.pipeline.extended_dynamic_state.before_good_static.large_stride_with_offset_and_padding
 dEQP-VK.pipeline.extended_dynamic_state.before_good_static.depth_test_enable
 dEQP-VK.pipeline.extended_dynamic_state.before_good_static.depth_test_disable
 dEQP-VK.pipeline.extended_dynamic_state.before_good_static.depth_write_enable
 dEQP-VK.pipeline.extended_dynamic_state.before_good_static.depth_write_disable
+dEQP-VK.pipeline.extended_dynamic_state.before_good_static.depth_bias_enable
+dEQP-VK.pipeline.extended_dynamic_state.before_good_static.depth_bias_disable
 dEQP-VK.pipeline.extended_dynamic_state.before_good_static.depth_compare_never
 dEQP-VK.pipeline.extended_dynamic_state.before_good_static.depth_compare_less
 dEQP-VK.pipeline.extended_dynamic_state.before_good_static.depth_compare_greater
@@ -68639,6 +73938,7 @@
 dEQP-VK.pipeline.extended_dynamic_state.before_good_static.stencil_state_face_both_dual_xt_dec_wrap_clear_0_ref_0_depthfail
 dEQP-VK.pipeline.extended_dynamic_state.before_good_static.stencil_state_face_both_dual_xt_dec_wrap_clear_0_ref_1_pass
 dEQP-VK.pipeline.extended_dynamic_state.before_good_static.stencil_state_face_both_dual_xt_dec_wrap_clear_0_ref_1_depthfail
+dEQP-VK.pipeline.extended_dynamic_state.before_good_static.vertex_input
 dEQP-VK.pipeline.extended_dynamic_state.two_draws_dynamic.cull_none
 dEQP-VK.pipeline.extended_dynamic_state.two_draws_dynamic.cull_back
 dEQP-VK.pipeline.extended_dynamic_state.two_draws_dynamic.cull_front
@@ -68647,6 +73947,11 @@
 dEQP-VK.pipeline.extended_dynamic_state.two_draws_dynamic.front_face_ccw
 dEQP-VK.pipeline.extended_dynamic_state.two_draws_dynamic.front_face_cw_reversed
 dEQP-VK.pipeline.extended_dynamic_state.two_draws_dynamic.front_face_ccw_reversed
+dEQP-VK.pipeline.extended_dynamic_state.two_draws_dynamic.disable_raster
+dEQP-VK.pipeline.extended_dynamic_state.two_draws_dynamic.enable_raster
+dEQP-VK.pipeline.extended_dynamic_state.two_draws_dynamic.logic_op_or
+dEQP-VK.pipeline.extended_dynamic_state.two_draws_dynamic.prim_restart_enable
+dEQP-VK.pipeline.extended_dynamic_state.two_draws_dynamic.patch_control_points
 dEQP-VK.pipeline.extended_dynamic_state.two_draws_dynamic.topology_triangle
 dEQP-VK.pipeline.extended_dynamic_state.two_draws_dynamic.topology_line
 dEQP-VK.pipeline.extended_dynamic_state.two_draws_dynamic.topology_triangle_geom
@@ -68662,10 +73967,15 @@
 dEQP-VK.pipeline.extended_dynamic_state.two_draws_dynamic.stride
 dEQP-VK.pipeline.extended_dynamic_state.two_draws_dynamic.stride_with_offset
 dEQP-VK.pipeline.extended_dynamic_state.two_draws_dynamic.stride_with_offset_and_padding
+dEQP-VK.pipeline.extended_dynamic_state.two_draws_dynamic.large_stride
+dEQP-VK.pipeline.extended_dynamic_state.two_draws_dynamic.large_stride_with_offset
+dEQP-VK.pipeline.extended_dynamic_state.two_draws_dynamic.large_stride_with_offset_and_padding
 dEQP-VK.pipeline.extended_dynamic_state.two_draws_dynamic.depth_test_enable
 dEQP-VK.pipeline.extended_dynamic_state.two_draws_dynamic.depth_test_disable
 dEQP-VK.pipeline.extended_dynamic_state.two_draws_dynamic.depth_write_enable
 dEQP-VK.pipeline.extended_dynamic_state.two_draws_dynamic.depth_write_disable
+dEQP-VK.pipeline.extended_dynamic_state.two_draws_dynamic.depth_bias_enable
+dEQP-VK.pipeline.extended_dynamic_state.two_draws_dynamic.depth_bias_disable
 dEQP-VK.pipeline.extended_dynamic_state.two_draws_dynamic.depth_compare_never
 dEQP-VK.pipeline.extended_dynamic_state.two_draws_dynamic.depth_compare_less
 dEQP-VK.pipeline.extended_dynamic_state.two_draws_dynamic.depth_compare_greater
@@ -70012,6 +75322,7 @@
 dEQP-VK.pipeline.extended_dynamic_state.two_draws_dynamic.stencil_state_face_both_dual_xt_dec_wrap_clear_0_ref_0_depthfail
 dEQP-VK.pipeline.extended_dynamic_state.two_draws_dynamic.stencil_state_face_both_dual_xt_dec_wrap_clear_0_ref_1_pass
 dEQP-VK.pipeline.extended_dynamic_state.two_draws_dynamic.stencil_state_face_both_dual_xt_dec_wrap_clear_0_ref_1_depthfail
+dEQP-VK.pipeline.extended_dynamic_state.two_draws_dynamic.vertex_input
 dEQP-VK.pipeline.extended_dynamic_state.two_draws_static.cull_none
 dEQP-VK.pipeline.extended_dynamic_state.two_draws_static.cull_back
 dEQP-VK.pipeline.extended_dynamic_state.two_draws_static.cull_front
@@ -70020,6 +75331,11 @@
 dEQP-VK.pipeline.extended_dynamic_state.two_draws_static.front_face_ccw
 dEQP-VK.pipeline.extended_dynamic_state.two_draws_static.front_face_cw_reversed
 dEQP-VK.pipeline.extended_dynamic_state.two_draws_static.front_face_ccw_reversed
+dEQP-VK.pipeline.extended_dynamic_state.two_draws_static.disable_raster
+dEQP-VK.pipeline.extended_dynamic_state.two_draws_static.enable_raster
+dEQP-VK.pipeline.extended_dynamic_state.two_draws_static.logic_op_or
+dEQP-VK.pipeline.extended_dynamic_state.two_draws_static.prim_restart_enable
+dEQP-VK.pipeline.extended_dynamic_state.two_draws_static.patch_control_points
 dEQP-VK.pipeline.extended_dynamic_state.two_draws_static.topology_triangle
 dEQP-VK.pipeline.extended_dynamic_state.two_draws_static.topology_line
 dEQP-VK.pipeline.extended_dynamic_state.two_draws_static.topology_triangle_geom
@@ -70039,6 +75355,8 @@
 dEQP-VK.pipeline.extended_dynamic_state.two_draws_static.depth_test_disable
 dEQP-VK.pipeline.extended_dynamic_state.two_draws_static.depth_write_enable
 dEQP-VK.pipeline.extended_dynamic_state.two_draws_static.depth_write_disable
+dEQP-VK.pipeline.extended_dynamic_state.two_draws_static.depth_bias_enable
+dEQP-VK.pipeline.extended_dynamic_state.two_draws_static.depth_bias_disable
 dEQP-VK.pipeline.extended_dynamic_state.two_draws_static.depth_compare_never
 dEQP-VK.pipeline.extended_dynamic_state.two_draws_static.depth_compare_less
 dEQP-VK.pipeline.extended_dynamic_state.two_draws_static.depth_compare_greater
@@ -71385,15 +76703,1674 @@
 dEQP-VK.pipeline.extended_dynamic_state.two_draws_static.stencil_state_face_both_dual_xt_dec_wrap_clear_0_ref_0_depthfail
 dEQP-VK.pipeline.extended_dynamic_state.two_draws_static.stencil_state_face_both_dual_xt_dec_wrap_clear_0_ref_1_pass
 dEQP-VK.pipeline.extended_dynamic_state.two_draws_static.stencil_state_face_both_dual_xt_dec_wrap_clear_0_ref_1_depthfail
+dEQP-VK.pipeline.extended_dynamic_state.two_draws_static.vertex_input
+dEQP-VK.pipeline.creation_cache_control.graphics_pipelines.single_pipeline_no_compile
+dEQP-VK.pipeline.creation_cache_control.graphics_pipelines.batch_pipelines_early_return
+dEQP-VK.pipeline.creation_cache_control.graphics_pipelines.duplicate_single_recreate_explicit_caching
+dEQP-VK.pipeline.creation_cache_control.graphics_pipelines.duplicate_single_recreate_no_caching
+dEQP-VK.pipeline.creation_cache_control.graphics_pipelines.duplicate_single_recreate_derivative
+dEQP-VK.pipeline.creation_cache_control.graphics_pipelines.duplicate_batch_pipelines_explicit_cache
+dEQP-VK.pipeline.creation_cache_control.graphics_pipelines.duplicate_batch_pipelines_no_cache
+dEQP-VK.pipeline.creation_cache_control.graphics_pipelines.duplicate_batch_pipelines_derivative_index
+dEQP-VK.pipeline.creation_cache_control.compute_pipelines.single_pipeline_no_compile
+dEQP-VK.pipeline.creation_cache_control.compute_pipelines.batch_pipelines_early_return
+dEQP-VK.pipeline.creation_cache_control.compute_pipelines.duplicate_single_recreate_explicit_caching
+dEQP-VK.pipeline.creation_cache_control.compute_pipelines.duplicate_single_recreate_no_caching
+dEQP-VK.pipeline.creation_cache_control.compute_pipelines.duplicate_single_recreate_derivative
+dEQP-VK.pipeline.creation_cache_control.compute_pipelines.duplicate_batch_pipelines_explicit_cache
+dEQP-VK.pipeline.creation_cache_control.compute_pipelines.duplicate_batch_pipelines_no_cache
+dEQP-VK.pipeline.creation_cache_control.compute_pipelines.duplicate_batch_pipelines_derivative_index
+dEQP-VK.pipeline.no_position.implicit_declarations.basic.single_view.v0
+dEQP-VK.pipeline.no_position.implicit_declarations.basic.single_view.v1
+dEQP-VK.pipeline.no_position.implicit_declarations.basic.single_view.v0_c0_e0
+dEQP-VK.pipeline.no_position.implicit_declarations.basic.single_view.v1_c0_e0
+dEQP-VK.pipeline.no_position.implicit_declarations.basic.single_view.v0_c1_e0
+dEQP-VK.pipeline.no_position.implicit_declarations.basic.single_view.v1_c1_e0
+dEQP-VK.pipeline.no_position.implicit_declarations.basic.single_view.v0_c0_e1
+dEQP-VK.pipeline.no_position.implicit_declarations.basic.single_view.v1_c0_e1
+dEQP-VK.pipeline.no_position.implicit_declarations.basic.single_view.v0_c1_e1
+dEQP-VK.pipeline.no_position.implicit_declarations.basic.single_view.v1_c1_e1
+dEQP-VK.pipeline.no_position.implicit_declarations.basic.single_view.v0_g0
+dEQP-VK.pipeline.no_position.implicit_declarations.basic.single_view.v1_g0
+dEQP-VK.pipeline.no_position.implicit_declarations.basic.single_view.v0_g1
+dEQP-VK.pipeline.no_position.implicit_declarations.basic.single_view.v1_g1
+dEQP-VK.pipeline.no_position.implicit_declarations.basic.single_view.v0_c0_e0_g0
+dEQP-VK.pipeline.no_position.implicit_declarations.basic.single_view.v1_c0_e0_g0
+dEQP-VK.pipeline.no_position.implicit_declarations.basic.single_view.v0_c1_e0_g0
+dEQP-VK.pipeline.no_position.implicit_declarations.basic.single_view.v1_c1_e0_g0
+dEQP-VK.pipeline.no_position.implicit_declarations.basic.single_view.v0_c0_e1_g0
+dEQP-VK.pipeline.no_position.implicit_declarations.basic.single_view.v1_c0_e1_g0
+dEQP-VK.pipeline.no_position.implicit_declarations.basic.single_view.v0_c1_e1_g0
+dEQP-VK.pipeline.no_position.implicit_declarations.basic.single_view.v1_c1_e1_g0
+dEQP-VK.pipeline.no_position.implicit_declarations.basic.single_view.v0_c0_e0_g1
+dEQP-VK.pipeline.no_position.implicit_declarations.basic.single_view.v1_c0_e0_g1
+dEQP-VK.pipeline.no_position.implicit_declarations.basic.single_view.v0_c1_e0_g1
+dEQP-VK.pipeline.no_position.implicit_declarations.basic.single_view.v1_c1_e0_g1
+dEQP-VK.pipeline.no_position.implicit_declarations.basic.single_view.v0_c0_e1_g1
+dEQP-VK.pipeline.no_position.implicit_declarations.basic.single_view.v1_c0_e1_g1
+dEQP-VK.pipeline.no_position.implicit_declarations.basic.single_view.v0_c1_e1_g1
+dEQP-VK.pipeline.no_position.implicit_declarations.basic.single_view.v1_c1_e1_g1
+dEQP-VK.pipeline.no_position.implicit_declarations.basic.multiview.v0
+dEQP-VK.pipeline.no_position.implicit_declarations.basic.multiview.v1
+dEQP-VK.pipeline.no_position.implicit_declarations.basic.multiview.v0_c0_e0
+dEQP-VK.pipeline.no_position.implicit_declarations.basic.multiview.v1_c0_e0
+dEQP-VK.pipeline.no_position.implicit_declarations.basic.multiview.v0_c1_e0
+dEQP-VK.pipeline.no_position.implicit_declarations.basic.multiview.v1_c1_e0
+dEQP-VK.pipeline.no_position.implicit_declarations.basic.multiview.v0_c0_e1
+dEQP-VK.pipeline.no_position.implicit_declarations.basic.multiview.v1_c0_e1
+dEQP-VK.pipeline.no_position.implicit_declarations.basic.multiview.v0_c1_e1
+dEQP-VK.pipeline.no_position.implicit_declarations.basic.multiview.v1_c1_e1
+dEQP-VK.pipeline.no_position.implicit_declarations.basic.multiview.v0_g0
+dEQP-VK.pipeline.no_position.implicit_declarations.basic.multiview.v1_g0
+dEQP-VK.pipeline.no_position.implicit_declarations.basic.multiview.v0_g1
+dEQP-VK.pipeline.no_position.implicit_declarations.basic.multiview.v1_g1
+dEQP-VK.pipeline.no_position.implicit_declarations.basic.multiview.v0_c0_e0_g0
+dEQP-VK.pipeline.no_position.implicit_declarations.basic.multiview.v1_c0_e0_g0
+dEQP-VK.pipeline.no_position.implicit_declarations.basic.multiview.v0_c1_e0_g0
+dEQP-VK.pipeline.no_position.implicit_declarations.basic.multiview.v1_c1_e0_g0
+dEQP-VK.pipeline.no_position.implicit_declarations.basic.multiview.v0_c0_e1_g0
+dEQP-VK.pipeline.no_position.implicit_declarations.basic.multiview.v1_c0_e1_g0
+dEQP-VK.pipeline.no_position.implicit_declarations.basic.multiview.v0_c1_e1_g0
+dEQP-VK.pipeline.no_position.implicit_declarations.basic.multiview.v1_c1_e1_g0
+dEQP-VK.pipeline.no_position.implicit_declarations.basic.multiview.v0_c0_e0_g1
+dEQP-VK.pipeline.no_position.implicit_declarations.basic.multiview.v1_c0_e0_g1
+dEQP-VK.pipeline.no_position.implicit_declarations.basic.multiview.v0_c1_e0_g1
+dEQP-VK.pipeline.no_position.implicit_declarations.basic.multiview.v1_c1_e0_g1
+dEQP-VK.pipeline.no_position.implicit_declarations.basic.multiview.v0_c0_e1_g1
+dEQP-VK.pipeline.no_position.implicit_declarations.basic.multiview.v1_c0_e1_g1
+dEQP-VK.pipeline.no_position.implicit_declarations.basic.multiview.v0_c1_e1_g1
+dEQP-VK.pipeline.no_position.implicit_declarations.basic.multiview.v1_c1_e1_g1
+dEQP-VK.pipeline.no_position.implicit_declarations.ssbo_writes.single_view.v0
+dEQP-VK.pipeline.no_position.implicit_declarations.ssbo_writes.single_view.v1
+dEQP-VK.pipeline.no_position.implicit_declarations.ssbo_writes.single_view.v0_c0_e0
+dEQP-VK.pipeline.no_position.implicit_declarations.ssbo_writes.single_view.v1_c0_e0
+dEQP-VK.pipeline.no_position.implicit_declarations.ssbo_writes.single_view.v0_c1_e0
+dEQP-VK.pipeline.no_position.implicit_declarations.ssbo_writes.single_view.v1_c1_e0
+dEQP-VK.pipeline.no_position.implicit_declarations.ssbo_writes.single_view.v0_c0_e1
+dEQP-VK.pipeline.no_position.implicit_declarations.ssbo_writes.single_view.v1_c0_e1
+dEQP-VK.pipeline.no_position.implicit_declarations.ssbo_writes.single_view.v0_c1_e1
+dEQP-VK.pipeline.no_position.implicit_declarations.ssbo_writes.single_view.v1_c1_e1
+dEQP-VK.pipeline.no_position.implicit_declarations.ssbo_writes.single_view.v0_g0
+dEQP-VK.pipeline.no_position.implicit_declarations.ssbo_writes.single_view.v1_g0
+dEQP-VK.pipeline.no_position.implicit_declarations.ssbo_writes.single_view.v0_g1
+dEQP-VK.pipeline.no_position.implicit_declarations.ssbo_writes.single_view.v1_g1
+dEQP-VK.pipeline.no_position.implicit_declarations.ssbo_writes.single_view.v0_c0_e0_g0
+dEQP-VK.pipeline.no_position.implicit_declarations.ssbo_writes.single_view.v1_c0_e0_g0
+dEQP-VK.pipeline.no_position.implicit_declarations.ssbo_writes.single_view.v0_c1_e0_g0
+dEQP-VK.pipeline.no_position.implicit_declarations.ssbo_writes.single_view.v1_c1_e0_g0
+dEQP-VK.pipeline.no_position.implicit_declarations.ssbo_writes.single_view.v0_c0_e1_g0
+dEQP-VK.pipeline.no_position.implicit_declarations.ssbo_writes.single_view.v1_c0_e1_g0
+dEQP-VK.pipeline.no_position.implicit_declarations.ssbo_writes.single_view.v0_c1_e1_g0
+dEQP-VK.pipeline.no_position.implicit_declarations.ssbo_writes.single_view.v1_c1_e1_g0
+dEQP-VK.pipeline.no_position.implicit_declarations.ssbo_writes.single_view.v0_c0_e0_g1
+dEQP-VK.pipeline.no_position.implicit_declarations.ssbo_writes.single_view.v1_c0_e0_g1
+dEQP-VK.pipeline.no_position.implicit_declarations.ssbo_writes.single_view.v0_c1_e0_g1
+dEQP-VK.pipeline.no_position.implicit_declarations.ssbo_writes.single_view.v1_c1_e0_g1
+dEQP-VK.pipeline.no_position.implicit_declarations.ssbo_writes.single_view.v0_c0_e1_g1
+dEQP-VK.pipeline.no_position.implicit_declarations.ssbo_writes.single_view.v1_c0_e1_g1
+dEQP-VK.pipeline.no_position.implicit_declarations.ssbo_writes.single_view.v0_c1_e1_g1
+dEQP-VK.pipeline.no_position.implicit_declarations.ssbo_writes.single_view.v1_c1_e1_g1
+dEQP-VK.pipeline.no_position.implicit_declarations.ssbo_writes.multiview.v0
+dEQP-VK.pipeline.no_position.implicit_declarations.ssbo_writes.multiview.v1
+dEQP-VK.pipeline.no_position.implicit_declarations.ssbo_writes.multiview.v0_c0_e0
+dEQP-VK.pipeline.no_position.implicit_declarations.ssbo_writes.multiview.v1_c0_e0
+dEQP-VK.pipeline.no_position.implicit_declarations.ssbo_writes.multiview.v0_c1_e0
+dEQP-VK.pipeline.no_position.implicit_declarations.ssbo_writes.multiview.v1_c1_e0
+dEQP-VK.pipeline.no_position.implicit_declarations.ssbo_writes.multiview.v0_c0_e1
+dEQP-VK.pipeline.no_position.implicit_declarations.ssbo_writes.multiview.v1_c0_e1
+dEQP-VK.pipeline.no_position.implicit_declarations.ssbo_writes.multiview.v0_c1_e1
+dEQP-VK.pipeline.no_position.implicit_declarations.ssbo_writes.multiview.v1_c1_e1
+dEQP-VK.pipeline.no_position.implicit_declarations.ssbo_writes.multiview.v0_g0
+dEQP-VK.pipeline.no_position.implicit_declarations.ssbo_writes.multiview.v1_g0
+dEQP-VK.pipeline.no_position.implicit_declarations.ssbo_writes.multiview.v0_g1
+dEQP-VK.pipeline.no_position.implicit_declarations.ssbo_writes.multiview.v1_g1
+dEQP-VK.pipeline.no_position.implicit_declarations.ssbo_writes.multiview.v0_c0_e0_g0
+dEQP-VK.pipeline.no_position.implicit_declarations.ssbo_writes.multiview.v1_c0_e0_g0
+dEQP-VK.pipeline.no_position.implicit_declarations.ssbo_writes.multiview.v0_c1_e0_g0
+dEQP-VK.pipeline.no_position.implicit_declarations.ssbo_writes.multiview.v1_c1_e0_g0
+dEQP-VK.pipeline.no_position.implicit_declarations.ssbo_writes.multiview.v0_c0_e1_g0
+dEQP-VK.pipeline.no_position.implicit_declarations.ssbo_writes.multiview.v1_c0_e1_g0
+dEQP-VK.pipeline.no_position.implicit_declarations.ssbo_writes.multiview.v0_c1_e1_g0
+dEQP-VK.pipeline.no_position.implicit_declarations.ssbo_writes.multiview.v1_c1_e1_g0
+dEQP-VK.pipeline.no_position.implicit_declarations.ssbo_writes.multiview.v0_c0_e0_g1
+dEQP-VK.pipeline.no_position.implicit_declarations.ssbo_writes.multiview.v1_c0_e0_g1
+dEQP-VK.pipeline.no_position.implicit_declarations.ssbo_writes.multiview.v0_c1_e0_g1
+dEQP-VK.pipeline.no_position.implicit_declarations.ssbo_writes.multiview.v1_c1_e0_g1
+dEQP-VK.pipeline.no_position.implicit_declarations.ssbo_writes.multiview.v0_c0_e1_g1
+dEQP-VK.pipeline.no_position.implicit_declarations.ssbo_writes.multiview.v1_c0_e1_g1
+dEQP-VK.pipeline.no_position.implicit_declarations.ssbo_writes.multiview.v0_c1_e1_g1
+dEQP-VK.pipeline.no_position.implicit_declarations.ssbo_writes.multiview.v1_c1_e1_g1
+dEQP-VK.pipeline.no_position.explicit_declarations.basic.single_view.v0
+dEQP-VK.pipeline.no_position.explicit_declarations.basic.single_view.v1
+dEQP-VK.pipeline.no_position.explicit_declarations.basic.single_view.v0_c0_e0
+dEQP-VK.pipeline.no_position.explicit_declarations.basic.single_view.v1_c0_e0
+dEQP-VK.pipeline.no_position.explicit_declarations.basic.single_view.v0_c1_e0
+dEQP-VK.pipeline.no_position.explicit_declarations.basic.single_view.v1_c1_e0
+dEQP-VK.pipeline.no_position.explicit_declarations.basic.single_view.v0_c0_e1
+dEQP-VK.pipeline.no_position.explicit_declarations.basic.single_view.v1_c0_e1
+dEQP-VK.pipeline.no_position.explicit_declarations.basic.single_view.v0_c1_e1
+dEQP-VK.pipeline.no_position.explicit_declarations.basic.single_view.v1_c1_e1
+dEQP-VK.pipeline.no_position.explicit_declarations.basic.single_view.v0_g0
+dEQP-VK.pipeline.no_position.explicit_declarations.basic.single_view.v1_g0
+dEQP-VK.pipeline.no_position.explicit_declarations.basic.single_view.v0_g1
+dEQP-VK.pipeline.no_position.explicit_declarations.basic.single_view.v1_g1
+dEQP-VK.pipeline.no_position.explicit_declarations.basic.single_view.v0_c0_e0_g0
+dEQP-VK.pipeline.no_position.explicit_declarations.basic.single_view.v1_c0_e0_g0
+dEQP-VK.pipeline.no_position.explicit_declarations.basic.single_view.v0_c1_e0_g0
+dEQP-VK.pipeline.no_position.explicit_declarations.basic.single_view.v1_c1_e0_g0
+dEQP-VK.pipeline.no_position.explicit_declarations.basic.single_view.v0_c0_e1_g0
+dEQP-VK.pipeline.no_position.explicit_declarations.basic.single_view.v1_c0_e1_g0
+dEQP-VK.pipeline.no_position.explicit_declarations.basic.single_view.v0_c1_e1_g0
+dEQP-VK.pipeline.no_position.explicit_declarations.basic.single_view.v1_c1_e1_g0
+dEQP-VK.pipeline.no_position.explicit_declarations.basic.single_view.v0_c0_e0_g1
+dEQP-VK.pipeline.no_position.explicit_declarations.basic.single_view.v1_c0_e0_g1
+dEQP-VK.pipeline.no_position.explicit_declarations.basic.single_view.v0_c1_e0_g1
+dEQP-VK.pipeline.no_position.explicit_declarations.basic.single_view.v1_c1_e0_g1
+dEQP-VK.pipeline.no_position.explicit_declarations.basic.single_view.v0_c0_e1_g1
+dEQP-VK.pipeline.no_position.explicit_declarations.basic.single_view.v1_c0_e1_g1
+dEQP-VK.pipeline.no_position.explicit_declarations.basic.single_view.v0_c1_e1_g1
+dEQP-VK.pipeline.no_position.explicit_declarations.basic.single_view.v1_c1_e1_g1
+dEQP-VK.pipeline.no_position.explicit_declarations.basic.multiview.v0
+dEQP-VK.pipeline.no_position.explicit_declarations.basic.multiview.v1
+dEQP-VK.pipeline.no_position.explicit_declarations.basic.multiview.v0_c0_e0
+dEQP-VK.pipeline.no_position.explicit_declarations.basic.multiview.v1_c0_e0
+dEQP-VK.pipeline.no_position.explicit_declarations.basic.multiview.v0_c1_e0
+dEQP-VK.pipeline.no_position.explicit_declarations.basic.multiview.v1_c1_e0
+dEQP-VK.pipeline.no_position.explicit_declarations.basic.multiview.v0_c0_e1
+dEQP-VK.pipeline.no_position.explicit_declarations.basic.multiview.v1_c0_e1
+dEQP-VK.pipeline.no_position.explicit_declarations.basic.multiview.v0_c1_e1
+dEQP-VK.pipeline.no_position.explicit_declarations.basic.multiview.v1_c1_e1
+dEQP-VK.pipeline.no_position.explicit_declarations.basic.multiview.v0_g0
+dEQP-VK.pipeline.no_position.explicit_declarations.basic.multiview.v1_g0
+dEQP-VK.pipeline.no_position.explicit_declarations.basic.multiview.v0_g1
+dEQP-VK.pipeline.no_position.explicit_declarations.basic.multiview.v1_g1
+dEQP-VK.pipeline.no_position.explicit_declarations.basic.multiview.v0_c0_e0_g0
+dEQP-VK.pipeline.no_position.explicit_declarations.basic.multiview.v1_c0_e0_g0
+dEQP-VK.pipeline.no_position.explicit_declarations.basic.multiview.v0_c1_e0_g0
+dEQP-VK.pipeline.no_position.explicit_declarations.basic.multiview.v1_c1_e0_g0
+dEQP-VK.pipeline.no_position.explicit_declarations.basic.multiview.v0_c0_e1_g0
+dEQP-VK.pipeline.no_position.explicit_declarations.basic.multiview.v1_c0_e1_g0
+dEQP-VK.pipeline.no_position.explicit_declarations.basic.multiview.v0_c1_e1_g0
+dEQP-VK.pipeline.no_position.explicit_declarations.basic.multiview.v1_c1_e1_g0
+dEQP-VK.pipeline.no_position.explicit_declarations.basic.multiview.v0_c0_e0_g1
+dEQP-VK.pipeline.no_position.explicit_declarations.basic.multiview.v1_c0_e0_g1
+dEQP-VK.pipeline.no_position.explicit_declarations.basic.multiview.v0_c1_e0_g1
+dEQP-VK.pipeline.no_position.explicit_declarations.basic.multiview.v1_c1_e0_g1
+dEQP-VK.pipeline.no_position.explicit_declarations.basic.multiview.v0_c0_e1_g1
+dEQP-VK.pipeline.no_position.explicit_declarations.basic.multiview.v1_c0_e1_g1
+dEQP-VK.pipeline.no_position.explicit_declarations.basic.multiview.v0_c1_e1_g1
+dEQP-VK.pipeline.no_position.explicit_declarations.basic.multiview.v1_c1_e1_g1
+dEQP-VK.pipeline.no_position.explicit_declarations.ssbo_writes.single_view.v0
+dEQP-VK.pipeline.no_position.explicit_declarations.ssbo_writes.single_view.v1
+dEQP-VK.pipeline.no_position.explicit_declarations.ssbo_writes.single_view.v0_c0_e0
+dEQP-VK.pipeline.no_position.explicit_declarations.ssbo_writes.single_view.v1_c0_e0
+dEQP-VK.pipeline.no_position.explicit_declarations.ssbo_writes.single_view.v0_c1_e0
+dEQP-VK.pipeline.no_position.explicit_declarations.ssbo_writes.single_view.v1_c1_e0
+dEQP-VK.pipeline.no_position.explicit_declarations.ssbo_writes.single_view.v0_c0_e1
+dEQP-VK.pipeline.no_position.explicit_declarations.ssbo_writes.single_view.v1_c0_e1
+dEQP-VK.pipeline.no_position.explicit_declarations.ssbo_writes.single_view.v0_c1_e1
+dEQP-VK.pipeline.no_position.explicit_declarations.ssbo_writes.single_view.v1_c1_e1
+dEQP-VK.pipeline.no_position.explicit_declarations.ssbo_writes.single_view.v0_g0
+dEQP-VK.pipeline.no_position.explicit_declarations.ssbo_writes.single_view.v1_g0
+dEQP-VK.pipeline.no_position.explicit_declarations.ssbo_writes.single_view.v0_g1
+dEQP-VK.pipeline.no_position.explicit_declarations.ssbo_writes.single_view.v1_g1
+dEQP-VK.pipeline.no_position.explicit_declarations.ssbo_writes.single_view.v0_c0_e0_g0
+dEQP-VK.pipeline.no_position.explicit_declarations.ssbo_writes.single_view.v1_c0_e0_g0
+dEQP-VK.pipeline.no_position.explicit_declarations.ssbo_writes.single_view.v0_c1_e0_g0
+dEQP-VK.pipeline.no_position.explicit_declarations.ssbo_writes.single_view.v1_c1_e0_g0
+dEQP-VK.pipeline.no_position.explicit_declarations.ssbo_writes.single_view.v0_c0_e1_g0
+dEQP-VK.pipeline.no_position.explicit_declarations.ssbo_writes.single_view.v1_c0_e1_g0
+dEQP-VK.pipeline.no_position.explicit_declarations.ssbo_writes.single_view.v0_c1_e1_g0
+dEQP-VK.pipeline.no_position.explicit_declarations.ssbo_writes.single_view.v1_c1_e1_g0
+dEQP-VK.pipeline.no_position.explicit_declarations.ssbo_writes.single_view.v0_c0_e0_g1
+dEQP-VK.pipeline.no_position.explicit_declarations.ssbo_writes.single_view.v1_c0_e0_g1
+dEQP-VK.pipeline.no_position.explicit_declarations.ssbo_writes.single_view.v0_c1_e0_g1
+dEQP-VK.pipeline.no_position.explicit_declarations.ssbo_writes.single_view.v1_c1_e0_g1
+dEQP-VK.pipeline.no_position.explicit_declarations.ssbo_writes.single_view.v0_c0_e1_g1
+dEQP-VK.pipeline.no_position.explicit_declarations.ssbo_writes.single_view.v1_c0_e1_g1
+dEQP-VK.pipeline.no_position.explicit_declarations.ssbo_writes.single_view.v0_c1_e1_g1
+dEQP-VK.pipeline.no_position.explicit_declarations.ssbo_writes.single_view.v1_c1_e1_g1
+dEQP-VK.pipeline.no_position.explicit_declarations.ssbo_writes.multiview.v0
+dEQP-VK.pipeline.no_position.explicit_declarations.ssbo_writes.multiview.v1
+dEQP-VK.pipeline.no_position.explicit_declarations.ssbo_writes.multiview.v0_c0_e0
+dEQP-VK.pipeline.no_position.explicit_declarations.ssbo_writes.multiview.v1_c0_e0
+dEQP-VK.pipeline.no_position.explicit_declarations.ssbo_writes.multiview.v0_c1_e0
+dEQP-VK.pipeline.no_position.explicit_declarations.ssbo_writes.multiview.v1_c1_e0
+dEQP-VK.pipeline.no_position.explicit_declarations.ssbo_writes.multiview.v0_c0_e1
+dEQP-VK.pipeline.no_position.explicit_declarations.ssbo_writes.multiview.v1_c0_e1
+dEQP-VK.pipeline.no_position.explicit_declarations.ssbo_writes.multiview.v0_c1_e1
+dEQP-VK.pipeline.no_position.explicit_declarations.ssbo_writes.multiview.v1_c1_e1
+dEQP-VK.pipeline.no_position.explicit_declarations.ssbo_writes.multiview.v0_g0
+dEQP-VK.pipeline.no_position.explicit_declarations.ssbo_writes.multiview.v1_g0
+dEQP-VK.pipeline.no_position.explicit_declarations.ssbo_writes.multiview.v0_g1
+dEQP-VK.pipeline.no_position.explicit_declarations.ssbo_writes.multiview.v1_g1
+dEQP-VK.pipeline.no_position.explicit_declarations.ssbo_writes.multiview.v0_c0_e0_g0
+dEQP-VK.pipeline.no_position.explicit_declarations.ssbo_writes.multiview.v1_c0_e0_g0
+dEQP-VK.pipeline.no_position.explicit_declarations.ssbo_writes.multiview.v0_c1_e0_g0
+dEQP-VK.pipeline.no_position.explicit_declarations.ssbo_writes.multiview.v1_c1_e0_g0
+dEQP-VK.pipeline.no_position.explicit_declarations.ssbo_writes.multiview.v0_c0_e1_g0
+dEQP-VK.pipeline.no_position.explicit_declarations.ssbo_writes.multiview.v1_c0_e1_g0
+dEQP-VK.pipeline.no_position.explicit_declarations.ssbo_writes.multiview.v0_c1_e1_g0
+dEQP-VK.pipeline.no_position.explicit_declarations.ssbo_writes.multiview.v1_c1_e1_g0
+dEQP-VK.pipeline.no_position.explicit_declarations.ssbo_writes.multiview.v0_c0_e0_g1
+dEQP-VK.pipeline.no_position.explicit_declarations.ssbo_writes.multiview.v1_c0_e0_g1
+dEQP-VK.pipeline.no_position.explicit_declarations.ssbo_writes.multiview.v0_c1_e0_g1
+dEQP-VK.pipeline.no_position.explicit_declarations.ssbo_writes.multiview.v1_c1_e0_g1
+dEQP-VK.pipeline.no_position.explicit_declarations.ssbo_writes.multiview.v0_c0_e1_g1
+dEQP-VK.pipeline.no_position.explicit_declarations.ssbo_writes.multiview.v1_c0_e1_g1
+dEQP-VK.pipeline.no_position.explicit_declarations.ssbo_writes.multiview.v0_c1_e1_g1
+dEQP-VK.pipeline.no_position.explicit_declarations.ssbo_writes.multiview.v1_c1_e1_g1
+dEQP-VK.pipeline.bind_point.graphics_compute.write_write.setup_gp_cp_gs_cs.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.write_write.setup_gp_cp_gs_cs.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.write_write.setup_gp_cp_cs_gs.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.write_write.setup_gp_cp_cs_gs.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.write_write.setup_gp_gs_cp_cs.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.write_write.setup_gp_gs_cp_cs.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.write_write.setup_gp_gs_cs_cp.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.write_write.setup_gp_gs_cs_cp.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.write_write.setup_gp_cs_cp_gs.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.write_write.setup_gp_cs_cp_gs.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.write_write.setup_gp_cs_gs_cp.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.write_write.setup_gp_cs_gs_cp.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.write_write.setup_cp_gp_gs_cs.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.write_write.setup_cp_gp_gs_cs.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.write_write.setup_cp_gp_cs_gs.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.write_write.setup_cp_gp_cs_gs.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.write_write.setup_cp_gs_gp_cs.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.write_write.setup_cp_gs_gp_cs.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.write_write.setup_cp_gs_cs_gp.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.write_write.setup_cp_gs_cs_gp.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.write_write.setup_cp_cs_gp_gs.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.write_write.setup_cp_cs_gp_gs.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.write_write.setup_cp_cs_gs_gp.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.write_write.setup_cp_cs_gs_gp.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.write_write.setup_gs_gp_cp_cs.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.write_write.setup_gs_gp_cp_cs.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.write_write.setup_gs_gp_cs_cp.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.write_write.setup_gs_gp_cs_cp.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.write_write.setup_gs_cp_gp_cs.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.write_write.setup_gs_cp_gp_cs.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.write_write.setup_gs_cp_cs_gp.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.write_write.setup_gs_cp_cs_gp.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.write_write.setup_gs_cs_gp_cp.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.write_write.setup_gs_cs_gp_cp.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.write_write.setup_gs_cs_cp_gp.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.write_write.setup_gs_cs_cp_gp.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.write_write.setup_cs_gp_cp_gs.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.write_write.setup_cs_gp_cp_gs.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.write_write.setup_cs_gp_gs_cp.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.write_write.setup_cs_gp_gs_cp.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.write_write.setup_cs_cp_gp_gs.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.write_write.setup_cs_cp_gp_gs.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.write_write.setup_cs_cp_gs_gp.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.write_write.setup_cs_cp_gs_gp.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.write_write.setup_cs_gs_gp_cp.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.write_write.setup_cs_gs_gp_cp.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.write_write.setup_cs_gs_cp_gp.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.write_write.setup_cs_gs_cp_gp.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.write_push.setup_gp_cp_gs_cs.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.write_push.setup_gp_cp_gs_cs.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.write_push.setup_gp_cp_cs_gs.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.write_push.setup_gp_cp_cs_gs.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.write_push.setup_gp_gs_cp_cs.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.write_push.setup_gp_gs_cp_cs.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.write_push.setup_gp_gs_cs_cp.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.write_push.setup_gp_gs_cs_cp.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.write_push.setup_gp_cs_cp_gs.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.write_push.setup_gp_cs_cp_gs.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.write_push.setup_gp_cs_gs_cp.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.write_push.setup_gp_cs_gs_cp.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.write_push.setup_cp_gp_gs_cs.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.write_push.setup_cp_gp_gs_cs.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.write_push.setup_cp_gp_cs_gs.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.write_push.setup_cp_gp_cs_gs.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.write_push.setup_cp_gs_gp_cs.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.write_push.setup_cp_gs_gp_cs.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.write_push.setup_cp_gs_cs_gp.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.write_push.setup_cp_gs_cs_gp.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.write_push.setup_cp_cs_gp_gs.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.write_push.setup_cp_cs_gp_gs.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.write_push.setup_cp_cs_gs_gp.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.write_push.setup_cp_cs_gs_gp.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.write_push.setup_gs_gp_cp_cs.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.write_push.setup_gs_gp_cp_cs.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.write_push.setup_gs_gp_cs_cp.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.write_push.setup_gs_gp_cs_cp.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.write_push.setup_gs_cp_gp_cs.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.write_push.setup_gs_cp_gp_cs.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.write_push.setup_gs_cp_cs_gp.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.write_push.setup_gs_cp_cs_gp.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.write_push.setup_gs_cs_gp_cp.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.write_push.setup_gs_cs_gp_cp.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.write_push.setup_gs_cs_cp_gp.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.write_push.setup_gs_cs_cp_gp.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.write_push.setup_cs_gp_cp_gs.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.write_push.setup_cs_gp_cp_gs.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.write_push.setup_cs_gp_gs_cp.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.write_push.setup_cs_gp_gs_cp.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.write_push.setup_cs_cp_gp_gs.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.write_push.setup_cs_cp_gp_gs.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.write_push.setup_cs_cp_gs_gp.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.write_push.setup_cs_cp_gs_gp.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.write_push.setup_cs_gs_gp_cp.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.write_push.setup_cs_gs_gp_cp.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.write_push.setup_cs_gs_cp_gp.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.write_push.setup_cs_gs_cp_gp.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.write_template_push.setup_gp_cp_gs_cs.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.write_template_push.setup_gp_cp_gs_cs.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.write_template_push.setup_gp_cp_cs_gs.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.write_template_push.setup_gp_cp_cs_gs.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.write_template_push.setup_gp_gs_cp_cs.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.write_template_push.setup_gp_gs_cp_cs.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.write_template_push.setup_gp_gs_cs_cp.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.write_template_push.setup_gp_gs_cs_cp.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.write_template_push.setup_gp_cs_cp_gs.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.write_template_push.setup_gp_cs_cp_gs.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.write_template_push.setup_gp_cs_gs_cp.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.write_template_push.setup_gp_cs_gs_cp.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.write_template_push.setup_cp_gp_gs_cs.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.write_template_push.setup_cp_gp_gs_cs.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.write_template_push.setup_cp_gp_cs_gs.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.write_template_push.setup_cp_gp_cs_gs.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.write_template_push.setup_cp_gs_gp_cs.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.write_template_push.setup_cp_gs_gp_cs.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.write_template_push.setup_cp_gs_cs_gp.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.write_template_push.setup_cp_gs_cs_gp.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.write_template_push.setup_cp_cs_gp_gs.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.write_template_push.setup_cp_cs_gp_gs.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.write_template_push.setup_cp_cs_gs_gp.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.write_template_push.setup_cp_cs_gs_gp.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.write_template_push.setup_gs_gp_cp_cs.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.write_template_push.setup_gs_gp_cp_cs.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.write_template_push.setup_gs_gp_cs_cp.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.write_template_push.setup_gs_gp_cs_cp.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.write_template_push.setup_gs_cp_gp_cs.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.write_template_push.setup_gs_cp_gp_cs.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.write_template_push.setup_gs_cp_cs_gp.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.write_template_push.setup_gs_cp_cs_gp.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.write_template_push.setup_gs_cs_gp_cp.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.write_template_push.setup_gs_cs_gp_cp.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.write_template_push.setup_gs_cs_cp_gp.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.write_template_push.setup_gs_cs_cp_gp.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.write_template_push.setup_cs_gp_cp_gs.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.write_template_push.setup_cs_gp_cp_gs.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.write_template_push.setup_cs_gp_gs_cp.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.write_template_push.setup_cs_gp_gs_cp.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.write_template_push.setup_cs_cp_gp_gs.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.write_template_push.setup_cs_cp_gp_gs.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.write_template_push.setup_cs_cp_gs_gp.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.write_template_push.setup_cs_cp_gs_gp.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.write_template_push.setup_cs_gs_gp_cp.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.write_template_push.setup_cs_gs_gp_cp.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.write_template_push.setup_cs_gs_cp_gp.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.write_template_push.setup_cs_gs_cp_gp.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.push_write.setup_gp_cp_gs_cs.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.push_write.setup_gp_cp_gs_cs.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.push_write.setup_gp_cp_cs_gs.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.push_write.setup_gp_cp_cs_gs.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.push_write.setup_gp_gs_cp_cs.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.push_write.setup_gp_gs_cp_cs.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.push_write.setup_gp_gs_cs_cp.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.push_write.setup_gp_gs_cs_cp.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.push_write.setup_gp_cs_cp_gs.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.push_write.setup_gp_cs_cp_gs.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.push_write.setup_gp_cs_gs_cp.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.push_write.setup_gp_cs_gs_cp.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.push_write.setup_cp_gp_gs_cs.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.push_write.setup_cp_gp_gs_cs.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.push_write.setup_cp_gp_cs_gs.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.push_write.setup_cp_gp_cs_gs.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.push_write.setup_cp_gs_gp_cs.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.push_write.setup_cp_gs_gp_cs.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.push_write.setup_cp_gs_cs_gp.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.push_write.setup_cp_gs_cs_gp.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.push_write.setup_cp_cs_gp_gs.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.push_write.setup_cp_cs_gp_gs.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.push_write.setup_cp_cs_gs_gp.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.push_write.setup_cp_cs_gs_gp.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.push_write.setup_gs_gp_cp_cs.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.push_write.setup_gs_gp_cp_cs.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.push_write.setup_gs_gp_cs_cp.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.push_write.setup_gs_gp_cs_cp.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.push_write.setup_gs_cp_gp_cs.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.push_write.setup_gs_cp_gp_cs.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.push_write.setup_gs_cp_cs_gp.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.push_write.setup_gs_cp_cs_gp.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.push_write.setup_gs_cs_gp_cp.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.push_write.setup_gs_cs_gp_cp.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.push_write.setup_gs_cs_cp_gp.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.push_write.setup_gs_cs_cp_gp.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.push_write.setup_cs_gp_cp_gs.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.push_write.setup_cs_gp_cp_gs.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.push_write.setup_cs_gp_gs_cp.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.push_write.setup_cs_gp_gs_cp.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.push_write.setup_cs_cp_gp_gs.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.push_write.setup_cs_cp_gp_gs.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.push_write.setup_cs_cp_gs_gp.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.push_write.setup_cs_cp_gs_gp.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.push_write.setup_cs_gs_gp_cp.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.push_write.setup_cs_gs_gp_cp.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.push_write.setup_cs_gs_cp_gp.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.push_write.setup_cs_gs_cp_gp.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.push_push.setup_gp_cp_gs_cs.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.push_push.setup_gp_cp_gs_cs.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.push_push.setup_gp_cp_cs_gs.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.push_push.setup_gp_cp_cs_gs.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.push_push.setup_gp_gs_cp_cs.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.push_push.setup_gp_gs_cp_cs.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.push_push.setup_gp_gs_cs_cp.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.push_push.setup_gp_gs_cs_cp.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.push_push.setup_gp_cs_cp_gs.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.push_push.setup_gp_cs_cp_gs.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.push_push.setup_gp_cs_gs_cp.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.push_push.setup_gp_cs_gs_cp.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.push_push.setup_cp_gp_gs_cs.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.push_push.setup_cp_gp_gs_cs.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.push_push.setup_cp_gp_cs_gs.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.push_push.setup_cp_gp_cs_gs.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.push_push.setup_cp_gs_gp_cs.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.push_push.setup_cp_gs_gp_cs.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.push_push.setup_cp_gs_cs_gp.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.push_push.setup_cp_gs_cs_gp.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.push_push.setup_cp_cs_gp_gs.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.push_push.setup_cp_cs_gp_gs.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.push_push.setup_cp_cs_gs_gp.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.push_push.setup_cp_cs_gs_gp.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.push_push.setup_gs_gp_cp_cs.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.push_push.setup_gs_gp_cp_cs.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.push_push.setup_gs_gp_cs_cp.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.push_push.setup_gs_gp_cs_cp.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.push_push.setup_gs_cp_gp_cs.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.push_push.setup_gs_cp_gp_cs.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.push_push.setup_gs_cp_cs_gp.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.push_push.setup_gs_cp_cs_gp.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.push_push.setup_gs_cs_gp_cp.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.push_push.setup_gs_cs_gp_cp.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.push_push.setup_gs_cs_cp_gp.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.push_push.setup_gs_cs_cp_gp.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.push_push.setup_cs_gp_cp_gs.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.push_push.setup_cs_gp_cp_gs.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.push_push.setup_cs_gp_gs_cp.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.push_push.setup_cs_gp_gs_cp.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.push_push.setup_cs_cp_gp_gs.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.push_push.setup_cs_cp_gp_gs.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.push_push.setup_cs_cp_gs_gp.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.push_push.setup_cs_cp_gs_gp.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.push_push.setup_cs_gs_gp_cp.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.push_push.setup_cs_gs_gp_cp.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.push_push.setup_cs_gs_cp_gp.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.push_push.setup_cs_gs_cp_gp.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.push_template_push.setup_gp_cp_gs_cs.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.push_template_push.setup_gp_cp_gs_cs.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.push_template_push.setup_gp_cp_cs_gs.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.push_template_push.setup_gp_cp_cs_gs.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.push_template_push.setup_gp_gs_cp_cs.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.push_template_push.setup_gp_gs_cp_cs.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.push_template_push.setup_gp_gs_cs_cp.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.push_template_push.setup_gp_gs_cs_cp.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.push_template_push.setup_gp_cs_cp_gs.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.push_template_push.setup_gp_cs_cp_gs.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.push_template_push.setup_gp_cs_gs_cp.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.push_template_push.setup_gp_cs_gs_cp.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.push_template_push.setup_cp_gp_gs_cs.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.push_template_push.setup_cp_gp_gs_cs.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.push_template_push.setup_cp_gp_cs_gs.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.push_template_push.setup_cp_gp_cs_gs.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.push_template_push.setup_cp_gs_gp_cs.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.push_template_push.setup_cp_gs_gp_cs.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.push_template_push.setup_cp_gs_cs_gp.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.push_template_push.setup_cp_gs_cs_gp.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.push_template_push.setup_cp_cs_gp_gs.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.push_template_push.setup_cp_cs_gp_gs.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.push_template_push.setup_cp_cs_gs_gp.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.push_template_push.setup_cp_cs_gs_gp.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.push_template_push.setup_gs_gp_cp_cs.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.push_template_push.setup_gs_gp_cp_cs.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.push_template_push.setup_gs_gp_cs_cp.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.push_template_push.setup_gs_gp_cs_cp.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.push_template_push.setup_gs_cp_gp_cs.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.push_template_push.setup_gs_cp_gp_cs.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.push_template_push.setup_gs_cp_cs_gp.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.push_template_push.setup_gs_cp_cs_gp.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.push_template_push.setup_gs_cs_gp_cp.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.push_template_push.setup_gs_cs_gp_cp.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.push_template_push.setup_gs_cs_cp_gp.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.push_template_push.setup_gs_cs_cp_gp.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.push_template_push.setup_cs_gp_cp_gs.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.push_template_push.setup_cs_gp_cp_gs.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.push_template_push.setup_cs_gp_gs_cp.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.push_template_push.setup_cs_gp_gs_cp.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.push_template_push.setup_cs_cp_gp_gs.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.push_template_push.setup_cs_cp_gp_gs.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.push_template_push.setup_cs_cp_gs_gp.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.push_template_push.setup_cs_cp_gs_gp.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.push_template_push.setup_cs_gs_gp_cp.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.push_template_push.setup_cs_gs_gp_cp.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.push_template_push.setup_cs_gs_cp_gp.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.push_template_push.setup_cs_gs_cp_gp.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_write.setup_gp_cp_gs_cs.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_write.setup_gp_cp_gs_cs.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_write.setup_gp_cp_cs_gs.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_write.setup_gp_cp_cs_gs.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_write.setup_gp_gs_cp_cs.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_write.setup_gp_gs_cp_cs.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_write.setup_gp_gs_cs_cp.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_write.setup_gp_gs_cs_cp.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_write.setup_gp_cs_cp_gs.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_write.setup_gp_cs_cp_gs.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_write.setup_gp_cs_gs_cp.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_write.setup_gp_cs_gs_cp.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_write.setup_cp_gp_gs_cs.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_write.setup_cp_gp_gs_cs.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_write.setup_cp_gp_cs_gs.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_write.setup_cp_gp_cs_gs.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_write.setup_cp_gs_gp_cs.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_write.setup_cp_gs_gp_cs.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_write.setup_cp_gs_cs_gp.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_write.setup_cp_gs_cs_gp.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_write.setup_cp_cs_gp_gs.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_write.setup_cp_cs_gp_gs.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_write.setup_cp_cs_gs_gp.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_write.setup_cp_cs_gs_gp.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_write.setup_gs_gp_cp_cs.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_write.setup_gs_gp_cp_cs.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_write.setup_gs_gp_cs_cp.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_write.setup_gs_gp_cs_cp.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_write.setup_gs_cp_gp_cs.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_write.setup_gs_cp_gp_cs.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_write.setup_gs_cp_cs_gp.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_write.setup_gs_cp_cs_gp.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_write.setup_gs_cs_gp_cp.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_write.setup_gs_cs_gp_cp.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_write.setup_gs_cs_cp_gp.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_write.setup_gs_cs_cp_gp.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_write.setup_cs_gp_cp_gs.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_write.setup_cs_gp_cp_gs.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_write.setup_cs_gp_gs_cp.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_write.setup_cs_gp_gs_cp.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_write.setup_cs_cp_gp_gs.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_write.setup_cs_cp_gp_gs.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_write.setup_cs_cp_gs_gp.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_write.setup_cs_cp_gs_gp.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_write.setup_cs_gs_gp_cp.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_write.setup_cs_gs_gp_cp.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_write.setup_cs_gs_cp_gp.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_write.setup_cs_gs_cp_gp.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_push.setup_gp_cp_gs_cs.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_push.setup_gp_cp_gs_cs.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_push.setup_gp_cp_cs_gs.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_push.setup_gp_cp_cs_gs.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_push.setup_gp_gs_cp_cs.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_push.setup_gp_gs_cp_cs.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_push.setup_gp_gs_cs_cp.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_push.setup_gp_gs_cs_cp.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_push.setup_gp_cs_cp_gs.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_push.setup_gp_cs_cp_gs.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_push.setup_gp_cs_gs_cp.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_push.setup_gp_cs_gs_cp.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_push.setup_cp_gp_gs_cs.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_push.setup_cp_gp_gs_cs.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_push.setup_cp_gp_cs_gs.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_push.setup_cp_gp_cs_gs.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_push.setup_cp_gs_gp_cs.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_push.setup_cp_gs_gp_cs.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_push.setup_cp_gs_cs_gp.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_push.setup_cp_gs_cs_gp.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_push.setup_cp_cs_gp_gs.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_push.setup_cp_cs_gp_gs.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_push.setup_cp_cs_gs_gp.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_push.setup_cp_cs_gs_gp.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_push.setup_gs_gp_cp_cs.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_push.setup_gs_gp_cp_cs.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_push.setup_gs_gp_cs_cp.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_push.setup_gs_gp_cs_cp.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_push.setup_gs_cp_gp_cs.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_push.setup_gs_cp_gp_cs.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_push.setup_gs_cp_cs_gp.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_push.setup_gs_cp_cs_gp.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_push.setup_gs_cs_gp_cp.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_push.setup_gs_cs_gp_cp.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_push.setup_gs_cs_cp_gp.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_push.setup_gs_cs_cp_gp.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_push.setup_cs_gp_cp_gs.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_push.setup_cs_gp_cp_gs.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_push.setup_cs_gp_gs_cp.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_push.setup_cs_gp_gs_cp.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_push.setup_cs_cp_gp_gs.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_push.setup_cs_cp_gp_gs.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_push.setup_cs_cp_gs_gp.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_push.setup_cs_cp_gs_gp.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_push.setup_cs_gs_gp_cp.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_push.setup_cs_gs_gp_cp.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_push.setup_cs_gs_cp_gp.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_push.setup_cs_gs_cp_gp.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_template_push.setup_gp_cp_gs_cs.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_template_push.setup_gp_cp_gs_cs.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_template_push.setup_gp_cp_cs_gs.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_template_push.setup_gp_cp_cs_gs.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_template_push.setup_gp_gs_cp_cs.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_template_push.setup_gp_gs_cp_cs.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_template_push.setup_gp_gs_cs_cp.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_template_push.setup_gp_gs_cs_cp.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_template_push.setup_gp_cs_cp_gs.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_template_push.setup_gp_cs_cp_gs.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_template_push.setup_gp_cs_gs_cp.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_template_push.setup_gp_cs_gs_cp.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_template_push.setup_cp_gp_gs_cs.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_template_push.setup_cp_gp_gs_cs.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_template_push.setup_cp_gp_cs_gs.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_template_push.setup_cp_gp_cs_gs.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_template_push.setup_cp_gs_gp_cs.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_template_push.setup_cp_gs_gp_cs.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_template_push.setup_cp_gs_cs_gp.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_template_push.setup_cp_gs_cs_gp.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_template_push.setup_cp_cs_gp_gs.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_template_push.setup_cp_cs_gp_gs.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_template_push.setup_cp_cs_gs_gp.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_template_push.setup_cp_cs_gs_gp.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_template_push.setup_gs_gp_cp_cs.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_template_push.setup_gs_gp_cp_cs.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_template_push.setup_gs_gp_cs_cp.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_template_push.setup_gs_gp_cs_cp.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_template_push.setup_gs_cp_gp_cs.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_template_push.setup_gs_cp_gp_cs.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_template_push.setup_gs_cp_cs_gp.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_template_push.setup_gs_cp_cs_gp.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_template_push.setup_gs_cs_gp_cp.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_template_push.setup_gs_cs_gp_cp.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_template_push.setup_gs_cs_cp_gp.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_template_push.setup_gs_cs_cp_gp.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_template_push.setup_cs_gp_cp_gs.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_template_push.setup_cs_gp_cp_gs.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_template_push.setup_cs_gp_gs_cp.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_template_push.setup_cs_gp_gs_cp.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_template_push.setup_cs_cp_gp_gs.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_template_push.setup_cs_cp_gp_gs.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_template_push.setup_cs_cp_gs_gp.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_template_push.setup_cs_cp_gs_gp.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_template_push.setup_cs_gs_gp_cp.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_template_push.setup_cs_gs_gp_cp.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_template_push.setup_cs_gs_cp_gp.cmd_draw_dispatch
+dEQP-VK.pipeline.bind_point.graphics_compute.template_push_template_push.setup_cs_gs_cp_gp.cmd_dispatch_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_write.setup_gp_rp_gs_rs.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_write.setup_gp_rp_gs_rs.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_write.setup_gp_rp_rs_gs.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_write.setup_gp_rp_rs_gs.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_write.setup_gp_gs_rp_rs.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_write.setup_gp_gs_rp_rs.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_write.setup_gp_gs_rs_rp.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_write.setup_gp_gs_rs_rp.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_write.setup_gp_rs_rp_gs.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_write.setup_gp_rs_rp_gs.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_write.setup_gp_rs_gs_rp.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_write.setup_gp_rs_gs_rp.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_write.setup_rp_gp_gs_rs.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_write.setup_rp_gp_gs_rs.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_write.setup_rp_gp_rs_gs.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_write.setup_rp_gp_rs_gs.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_write.setup_rp_gs_gp_rs.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_write.setup_rp_gs_gp_rs.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_write.setup_rp_gs_rs_gp.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_write.setup_rp_gs_rs_gp.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_write.setup_rp_rs_gp_gs.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_write.setup_rp_rs_gp_gs.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_write.setup_rp_rs_gs_gp.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_write.setup_rp_rs_gs_gp.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_write.setup_gs_gp_rp_rs.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_write.setup_gs_gp_rp_rs.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_write.setup_gs_gp_rs_rp.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_write.setup_gs_gp_rs_rp.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_write.setup_gs_rp_gp_rs.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_write.setup_gs_rp_gp_rs.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_write.setup_gs_rp_rs_gp.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_write.setup_gs_rp_rs_gp.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_write.setup_gs_rs_gp_rp.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_write.setup_gs_rs_gp_rp.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_write.setup_gs_rs_rp_gp.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_write.setup_gs_rs_rp_gp.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_write.setup_rs_gp_rp_gs.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_write.setup_rs_gp_rp_gs.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_write.setup_rs_gp_gs_rp.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_write.setup_rs_gp_gs_rp.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_write.setup_rs_rp_gp_gs.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_write.setup_rs_rp_gp_gs.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_write.setup_rs_rp_gs_gp.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_write.setup_rs_rp_gs_gp.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_write.setup_rs_gs_gp_rp.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_write.setup_rs_gs_gp_rp.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_write.setup_rs_gs_rp_gp.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_write.setup_rs_gs_rp_gp.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_push.setup_gp_rp_gs_rs.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_push.setup_gp_rp_gs_rs.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_push.setup_gp_rp_rs_gs.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_push.setup_gp_rp_rs_gs.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_push.setup_gp_gs_rp_rs.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_push.setup_gp_gs_rp_rs.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_push.setup_gp_gs_rs_rp.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_push.setup_gp_gs_rs_rp.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_push.setup_gp_rs_rp_gs.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_push.setup_gp_rs_rp_gs.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_push.setup_gp_rs_gs_rp.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_push.setup_gp_rs_gs_rp.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_push.setup_rp_gp_gs_rs.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_push.setup_rp_gp_gs_rs.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_push.setup_rp_gp_rs_gs.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_push.setup_rp_gp_rs_gs.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_push.setup_rp_gs_gp_rs.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_push.setup_rp_gs_gp_rs.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_push.setup_rp_gs_rs_gp.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_push.setup_rp_gs_rs_gp.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_push.setup_rp_rs_gp_gs.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_push.setup_rp_rs_gp_gs.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_push.setup_rp_rs_gs_gp.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_push.setup_rp_rs_gs_gp.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_push.setup_gs_gp_rp_rs.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_push.setup_gs_gp_rp_rs.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_push.setup_gs_gp_rs_rp.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_push.setup_gs_gp_rs_rp.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_push.setup_gs_rp_gp_rs.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_push.setup_gs_rp_gp_rs.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_push.setup_gs_rp_rs_gp.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_push.setup_gs_rp_rs_gp.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_push.setup_gs_rs_gp_rp.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_push.setup_gs_rs_gp_rp.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_push.setup_gs_rs_rp_gp.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_push.setup_gs_rs_rp_gp.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_push.setup_rs_gp_rp_gs.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_push.setup_rs_gp_rp_gs.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_push.setup_rs_gp_gs_rp.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_push.setup_rs_gp_gs_rp.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_push.setup_rs_rp_gp_gs.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_push.setup_rs_rp_gp_gs.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_push.setup_rs_rp_gs_gp.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_push.setup_rs_rp_gs_gp.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_push.setup_rs_gs_gp_rp.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_push.setup_rs_gs_gp_rp.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_push.setup_rs_gs_rp_gp.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_push.setup_rs_gs_rp_gp.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_template_push.setup_gp_rp_gs_rs.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_template_push.setup_gp_rp_gs_rs.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_template_push.setup_gp_rp_rs_gs.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_template_push.setup_gp_rp_rs_gs.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_template_push.setup_gp_gs_rp_rs.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_template_push.setup_gp_gs_rp_rs.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_template_push.setup_gp_gs_rs_rp.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_template_push.setup_gp_gs_rs_rp.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_template_push.setup_gp_rs_rp_gs.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_template_push.setup_gp_rs_rp_gs.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_template_push.setup_gp_rs_gs_rp.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_template_push.setup_gp_rs_gs_rp.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_template_push.setup_rp_gp_gs_rs.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_template_push.setup_rp_gp_gs_rs.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_template_push.setup_rp_gp_rs_gs.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_template_push.setup_rp_gp_rs_gs.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_template_push.setup_rp_gs_gp_rs.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_template_push.setup_rp_gs_gp_rs.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_template_push.setup_rp_gs_rs_gp.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_template_push.setup_rp_gs_rs_gp.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_template_push.setup_rp_rs_gp_gs.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_template_push.setup_rp_rs_gp_gs.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_template_push.setup_rp_rs_gs_gp.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_template_push.setup_rp_rs_gs_gp.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_template_push.setup_gs_gp_rp_rs.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_template_push.setup_gs_gp_rp_rs.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_template_push.setup_gs_gp_rs_rp.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_template_push.setup_gs_gp_rs_rp.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_template_push.setup_gs_rp_gp_rs.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_template_push.setup_gs_rp_gp_rs.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_template_push.setup_gs_rp_rs_gp.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_template_push.setup_gs_rp_rs_gp.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_template_push.setup_gs_rs_gp_rp.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_template_push.setup_gs_rs_gp_rp.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_template_push.setup_gs_rs_rp_gp.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_template_push.setup_gs_rs_rp_gp.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_template_push.setup_rs_gp_rp_gs.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_template_push.setup_rs_gp_rp_gs.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_template_push.setup_rs_gp_gs_rp.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_template_push.setup_rs_gp_gs_rp.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_template_push.setup_rs_rp_gp_gs.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_template_push.setup_rs_rp_gp_gs.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_template_push.setup_rs_rp_gs_gp.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_template_push.setup_rs_rp_gs_gp.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_template_push.setup_rs_gs_gp_rp.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_template_push.setup_rs_gs_gp_rp.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_template_push.setup_rs_gs_rp_gp.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.write_template_push.setup_rs_gs_rp_gp.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_write.setup_gp_rp_gs_rs.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_write.setup_gp_rp_gs_rs.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_write.setup_gp_rp_rs_gs.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_write.setup_gp_rp_rs_gs.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_write.setup_gp_gs_rp_rs.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_write.setup_gp_gs_rp_rs.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_write.setup_gp_gs_rs_rp.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_write.setup_gp_gs_rs_rp.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_write.setup_gp_rs_rp_gs.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_write.setup_gp_rs_rp_gs.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_write.setup_gp_rs_gs_rp.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_write.setup_gp_rs_gs_rp.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_write.setup_rp_gp_gs_rs.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_write.setup_rp_gp_gs_rs.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_write.setup_rp_gp_rs_gs.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_write.setup_rp_gp_rs_gs.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_write.setup_rp_gs_gp_rs.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_write.setup_rp_gs_gp_rs.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_write.setup_rp_gs_rs_gp.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_write.setup_rp_gs_rs_gp.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_write.setup_rp_rs_gp_gs.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_write.setup_rp_rs_gp_gs.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_write.setup_rp_rs_gs_gp.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_write.setup_rp_rs_gs_gp.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_write.setup_gs_gp_rp_rs.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_write.setup_gs_gp_rp_rs.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_write.setup_gs_gp_rs_rp.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_write.setup_gs_gp_rs_rp.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_write.setup_gs_rp_gp_rs.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_write.setup_gs_rp_gp_rs.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_write.setup_gs_rp_rs_gp.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_write.setup_gs_rp_rs_gp.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_write.setup_gs_rs_gp_rp.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_write.setup_gs_rs_gp_rp.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_write.setup_gs_rs_rp_gp.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_write.setup_gs_rs_rp_gp.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_write.setup_rs_gp_rp_gs.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_write.setup_rs_gp_rp_gs.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_write.setup_rs_gp_gs_rp.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_write.setup_rs_gp_gs_rp.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_write.setup_rs_rp_gp_gs.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_write.setup_rs_rp_gp_gs.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_write.setup_rs_rp_gs_gp.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_write.setup_rs_rp_gs_gp.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_write.setup_rs_gs_gp_rp.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_write.setup_rs_gs_gp_rp.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_write.setup_rs_gs_rp_gp.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_write.setup_rs_gs_rp_gp.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_push.setup_gp_rp_gs_rs.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_push.setup_gp_rp_gs_rs.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_push.setup_gp_rp_rs_gs.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_push.setup_gp_rp_rs_gs.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_push.setup_gp_gs_rp_rs.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_push.setup_gp_gs_rp_rs.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_push.setup_gp_gs_rs_rp.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_push.setup_gp_gs_rs_rp.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_push.setup_gp_rs_rp_gs.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_push.setup_gp_rs_rp_gs.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_push.setup_gp_rs_gs_rp.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_push.setup_gp_rs_gs_rp.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_push.setup_rp_gp_gs_rs.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_push.setup_rp_gp_gs_rs.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_push.setup_rp_gp_rs_gs.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_push.setup_rp_gp_rs_gs.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_push.setup_rp_gs_gp_rs.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_push.setup_rp_gs_gp_rs.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_push.setup_rp_gs_rs_gp.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_push.setup_rp_gs_rs_gp.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_push.setup_rp_rs_gp_gs.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_push.setup_rp_rs_gp_gs.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_push.setup_rp_rs_gs_gp.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_push.setup_rp_rs_gs_gp.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_push.setup_gs_gp_rp_rs.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_push.setup_gs_gp_rp_rs.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_push.setup_gs_gp_rs_rp.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_push.setup_gs_gp_rs_rp.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_push.setup_gs_rp_gp_rs.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_push.setup_gs_rp_gp_rs.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_push.setup_gs_rp_rs_gp.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_push.setup_gs_rp_rs_gp.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_push.setup_gs_rs_gp_rp.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_push.setup_gs_rs_gp_rp.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_push.setup_gs_rs_rp_gp.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_push.setup_gs_rs_rp_gp.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_push.setup_rs_gp_rp_gs.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_push.setup_rs_gp_rp_gs.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_push.setup_rs_gp_gs_rp.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_push.setup_rs_gp_gs_rp.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_push.setup_rs_rp_gp_gs.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_push.setup_rs_rp_gp_gs.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_push.setup_rs_rp_gs_gp.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_push.setup_rs_rp_gs_gp.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_push.setup_rs_gs_gp_rp.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_push.setup_rs_gs_gp_rp.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_push.setup_rs_gs_rp_gp.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_push.setup_rs_gs_rp_gp.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_template_push.setup_gp_rp_gs_rs.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_template_push.setup_gp_rp_gs_rs.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_template_push.setup_gp_rp_rs_gs.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_template_push.setup_gp_rp_rs_gs.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_template_push.setup_gp_gs_rp_rs.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_template_push.setup_gp_gs_rp_rs.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_template_push.setup_gp_gs_rs_rp.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_template_push.setup_gp_gs_rs_rp.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_template_push.setup_gp_rs_rp_gs.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_template_push.setup_gp_rs_rp_gs.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_template_push.setup_gp_rs_gs_rp.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_template_push.setup_gp_rs_gs_rp.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_template_push.setup_rp_gp_gs_rs.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_template_push.setup_rp_gp_gs_rs.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_template_push.setup_rp_gp_rs_gs.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_template_push.setup_rp_gp_rs_gs.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_template_push.setup_rp_gs_gp_rs.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_template_push.setup_rp_gs_gp_rs.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_template_push.setup_rp_gs_rs_gp.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_template_push.setup_rp_gs_rs_gp.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_template_push.setup_rp_rs_gp_gs.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_template_push.setup_rp_rs_gp_gs.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_template_push.setup_rp_rs_gs_gp.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_template_push.setup_rp_rs_gs_gp.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_template_push.setup_gs_gp_rp_rs.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_template_push.setup_gs_gp_rp_rs.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_template_push.setup_gs_gp_rs_rp.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_template_push.setup_gs_gp_rs_rp.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_template_push.setup_gs_rp_gp_rs.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_template_push.setup_gs_rp_gp_rs.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_template_push.setup_gs_rp_rs_gp.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_template_push.setup_gs_rp_rs_gp.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_template_push.setup_gs_rs_gp_rp.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_template_push.setup_gs_rs_gp_rp.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_template_push.setup_gs_rs_rp_gp.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_template_push.setup_gs_rs_rp_gp.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_template_push.setup_rs_gp_rp_gs.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_template_push.setup_rs_gp_rp_gs.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_template_push.setup_rs_gp_gs_rp.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_template_push.setup_rs_gp_gs_rp.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_template_push.setup_rs_rp_gp_gs.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_template_push.setup_rs_rp_gp_gs.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_template_push.setup_rs_rp_gs_gp.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_template_push.setup_rs_rp_gs_gp.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_template_push.setup_rs_gs_gp_rp.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_template_push.setup_rs_gs_gp_rp.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_template_push.setup_rs_gs_rp_gp.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.push_template_push.setup_rs_gs_rp_gp.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_write.setup_gp_rp_gs_rs.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_write.setup_gp_rp_gs_rs.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_write.setup_gp_rp_rs_gs.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_write.setup_gp_rp_rs_gs.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_write.setup_gp_gs_rp_rs.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_write.setup_gp_gs_rp_rs.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_write.setup_gp_gs_rs_rp.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_write.setup_gp_gs_rs_rp.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_write.setup_gp_rs_rp_gs.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_write.setup_gp_rs_rp_gs.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_write.setup_gp_rs_gs_rp.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_write.setup_gp_rs_gs_rp.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_write.setup_rp_gp_gs_rs.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_write.setup_rp_gp_gs_rs.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_write.setup_rp_gp_rs_gs.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_write.setup_rp_gp_rs_gs.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_write.setup_rp_gs_gp_rs.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_write.setup_rp_gs_gp_rs.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_write.setup_rp_gs_rs_gp.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_write.setup_rp_gs_rs_gp.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_write.setup_rp_rs_gp_gs.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_write.setup_rp_rs_gp_gs.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_write.setup_rp_rs_gs_gp.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_write.setup_rp_rs_gs_gp.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_write.setup_gs_gp_rp_rs.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_write.setup_gs_gp_rp_rs.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_write.setup_gs_gp_rs_rp.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_write.setup_gs_gp_rs_rp.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_write.setup_gs_rp_gp_rs.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_write.setup_gs_rp_gp_rs.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_write.setup_gs_rp_rs_gp.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_write.setup_gs_rp_rs_gp.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_write.setup_gs_rs_gp_rp.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_write.setup_gs_rs_gp_rp.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_write.setup_gs_rs_rp_gp.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_write.setup_gs_rs_rp_gp.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_write.setup_rs_gp_rp_gs.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_write.setup_rs_gp_rp_gs.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_write.setup_rs_gp_gs_rp.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_write.setup_rs_gp_gs_rp.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_write.setup_rs_rp_gp_gs.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_write.setup_rs_rp_gp_gs.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_write.setup_rs_rp_gs_gp.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_write.setup_rs_rp_gs_gp.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_write.setup_rs_gs_gp_rp.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_write.setup_rs_gs_gp_rp.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_write.setup_rs_gs_rp_gp.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_write.setup_rs_gs_rp_gp.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_push.setup_gp_rp_gs_rs.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_push.setup_gp_rp_gs_rs.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_push.setup_gp_rp_rs_gs.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_push.setup_gp_rp_rs_gs.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_push.setup_gp_gs_rp_rs.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_push.setup_gp_gs_rp_rs.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_push.setup_gp_gs_rs_rp.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_push.setup_gp_gs_rs_rp.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_push.setup_gp_rs_rp_gs.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_push.setup_gp_rs_rp_gs.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_push.setup_gp_rs_gs_rp.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_push.setup_gp_rs_gs_rp.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_push.setup_rp_gp_gs_rs.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_push.setup_rp_gp_gs_rs.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_push.setup_rp_gp_rs_gs.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_push.setup_rp_gp_rs_gs.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_push.setup_rp_gs_gp_rs.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_push.setup_rp_gs_gp_rs.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_push.setup_rp_gs_rs_gp.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_push.setup_rp_gs_rs_gp.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_push.setup_rp_rs_gp_gs.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_push.setup_rp_rs_gp_gs.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_push.setup_rp_rs_gs_gp.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_push.setup_rp_rs_gs_gp.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_push.setup_gs_gp_rp_rs.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_push.setup_gs_gp_rp_rs.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_push.setup_gs_gp_rs_rp.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_push.setup_gs_gp_rs_rp.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_push.setup_gs_rp_gp_rs.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_push.setup_gs_rp_gp_rs.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_push.setup_gs_rp_rs_gp.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_push.setup_gs_rp_rs_gp.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_push.setup_gs_rs_gp_rp.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_push.setup_gs_rs_gp_rp.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_push.setup_gs_rs_rp_gp.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_push.setup_gs_rs_rp_gp.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_push.setup_rs_gp_rp_gs.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_push.setup_rs_gp_rp_gs.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_push.setup_rs_gp_gs_rp.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_push.setup_rs_gp_gs_rp.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_push.setup_rs_rp_gp_gs.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_push.setup_rs_rp_gp_gs.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_push.setup_rs_rp_gs_gp.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_push.setup_rs_rp_gs_gp.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_push.setup_rs_gs_gp_rp.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_push.setup_rs_gs_gp_rp.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_push.setup_rs_gs_rp_gp.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_push.setup_rs_gs_rp_gp.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_template_push.setup_gp_rp_gs_rs.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_template_push.setup_gp_rp_gs_rs.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_template_push.setup_gp_rp_rs_gs.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_template_push.setup_gp_rp_rs_gs.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_template_push.setup_gp_gs_rp_rs.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_template_push.setup_gp_gs_rp_rs.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_template_push.setup_gp_gs_rs_rp.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_template_push.setup_gp_gs_rs_rp.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_template_push.setup_gp_rs_rp_gs.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_template_push.setup_gp_rs_rp_gs.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_template_push.setup_gp_rs_gs_rp.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_template_push.setup_gp_rs_gs_rp.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_template_push.setup_rp_gp_gs_rs.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_template_push.setup_rp_gp_gs_rs.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_template_push.setup_rp_gp_rs_gs.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_template_push.setup_rp_gp_rs_gs.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_template_push.setup_rp_gs_gp_rs.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_template_push.setup_rp_gs_gp_rs.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_template_push.setup_rp_gs_rs_gp.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_template_push.setup_rp_gs_rs_gp.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_template_push.setup_rp_rs_gp_gs.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_template_push.setup_rp_rs_gp_gs.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_template_push.setup_rp_rs_gs_gp.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_template_push.setup_rp_rs_gs_gp.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_template_push.setup_gs_gp_rp_rs.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_template_push.setup_gs_gp_rp_rs.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_template_push.setup_gs_gp_rs_rp.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_template_push.setup_gs_gp_rs_rp.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_template_push.setup_gs_rp_gp_rs.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_template_push.setup_gs_rp_gp_rs.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_template_push.setup_gs_rp_rs_gp.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_template_push.setup_gs_rp_rs_gp.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_template_push.setup_gs_rs_gp_rp.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_template_push.setup_gs_rs_gp_rp.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_template_push.setup_gs_rs_rp_gp.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_template_push.setup_gs_rs_rp_gp.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_template_push.setup_rs_gp_rp_gs.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_template_push.setup_rs_gp_rp_gs.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_template_push.setup_rs_gp_gs_rp.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_template_push.setup_rs_gp_gs_rp.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_template_push.setup_rs_rp_gp_gs.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_template_push.setup_rs_rp_gp_gs.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_template_push.setup_rs_rp_gs_gp.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_template_push.setup_rs_rp_gs_gp.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_template_push.setup_rs_gs_gp_rp.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_template_push.setup_rs_gs_gp_rp.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_template_push.setup_rs_gs_rp_gp.cmd_draw_tracerays
+dEQP-VK.pipeline.bind_point.graphics_raytracing.template_push_template_push.setup_rs_gs_rp_gp.cmd_tracerays_draw
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_write.setup_cp_rp_cs_rs.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_write.setup_cp_rp_cs_rs.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_write.setup_cp_rp_rs_cs.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_write.setup_cp_rp_rs_cs.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_write.setup_cp_cs_rp_rs.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_write.setup_cp_cs_rp_rs.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_write.setup_cp_cs_rs_rp.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_write.setup_cp_cs_rs_rp.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_write.setup_cp_rs_rp_cs.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_write.setup_cp_rs_rp_cs.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_write.setup_cp_rs_cs_rp.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_write.setup_cp_rs_cs_rp.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_write.setup_rp_cp_cs_rs.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_write.setup_rp_cp_cs_rs.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_write.setup_rp_cp_rs_cs.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_write.setup_rp_cp_rs_cs.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_write.setup_rp_cs_cp_rs.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_write.setup_rp_cs_cp_rs.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_write.setup_rp_cs_rs_cp.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_write.setup_rp_cs_rs_cp.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_write.setup_rp_rs_cp_cs.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_write.setup_rp_rs_cp_cs.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_write.setup_rp_rs_cs_cp.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_write.setup_rp_rs_cs_cp.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_write.setup_cs_cp_rp_rs.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_write.setup_cs_cp_rp_rs.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_write.setup_cs_cp_rs_rp.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_write.setup_cs_cp_rs_rp.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_write.setup_cs_rp_cp_rs.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_write.setup_cs_rp_cp_rs.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_write.setup_cs_rp_rs_cp.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_write.setup_cs_rp_rs_cp.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_write.setup_cs_rs_cp_rp.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_write.setup_cs_rs_cp_rp.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_write.setup_cs_rs_rp_cp.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_write.setup_cs_rs_rp_cp.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_write.setup_rs_cp_rp_cs.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_write.setup_rs_cp_rp_cs.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_write.setup_rs_cp_cs_rp.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_write.setup_rs_cp_cs_rp.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_write.setup_rs_rp_cp_cs.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_write.setup_rs_rp_cp_cs.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_write.setup_rs_rp_cs_cp.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_write.setup_rs_rp_cs_cp.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_write.setup_rs_cs_cp_rp.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_write.setup_rs_cs_cp_rp.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_write.setup_rs_cs_rp_cp.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_write.setup_rs_cs_rp_cp.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_push.setup_cp_rp_cs_rs.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_push.setup_cp_rp_cs_rs.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_push.setup_cp_rp_rs_cs.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_push.setup_cp_rp_rs_cs.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_push.setup_cp_cs_rp_rs.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_push.setup_cp_cs_rp_rs.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_push.setup_cp_cs_rs_rp.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_push.setup_cp_cs_rs_rp.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_push.setup_cp_rs_rp_cs.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_push.setup_cp_rs_rp_cs.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_push.setup_cp_rs_cs_rp.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_push.setup_cp_rs_cs_rp.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_push.setup_rp_cp_cs_rs.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_push.setup_rp_cp_cs_rs.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_push.setup_rp_cp_rs_cs.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_push.setup_rp_cp_rs_cs.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_push.setup_rp_cs_cp_rs.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_push.setup_rp_cs_cp_rs.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_push.setup_rp_cs_rs_cp.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_push.setup_rp_cs_rs_cp.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_push.setup_rp_rs_cp_cs.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_push.setup_rp_rs_cp_cs.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_push.setup_rp_rs_cs_cp.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_push.setup_rp_rs_cs_cp.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_push.setup_cs_cp_rp_rs.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_push.setup_cs_cp_rp_rs.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_push.setup_cs_cp_rs_rp.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_push.setup_cs_cp_rs_rp.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_push.setup_cs_rp_cp_rs.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_push.setup_cs_rp_cp_rs.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_push.setup_cs_rp_rs_cp.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_push.setup_cs_rp_rs_cp.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_push.setup_cs_rs_cp_rp.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_push.setup_cs_rs_cp_rp.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_push.setup_cs_rs_rp_cp.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_push.setup_cs_rs_rp_cp.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_push.setup_rs_cp_rp_cs.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_push.setup_rs_cp_rp_cs.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_push.setup_rs_cp_cs_rp.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_push.setup_rs_cp_cs_rp.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_push.setup_rs_rp_cp_cs.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_push.setup_rs_rp_cp_cs.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_push.setup_rs_rp_cs_cp.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_push.setup_rs_rp_cs_cp.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_push.setup_rs_cs_cp_rp.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_push.setup_rs_cs_cp_rp.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_push.setup_rs_cs_rp_cp.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_push.setup_rs_cs_rp_cp.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_template_push.setup_cp_rp_cs_rs.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_template_push.setup_cp_rp_cs_rs.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_template_push.setup_cp_rp_rs_cs.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_template_push.setup_cp_rp_rs_cs.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_template_push.setup_cp_cs_rp_rs.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_template_push.setup_cp_cs_rp_rs.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_template_push.setup_cp_cs_rs_rp.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_template_push.setup_cp_cs_rs_rp.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_template_push.setup_cp_rs_rp_cs.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_template_push.setup_cp_rs_rp_cs.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_template_push.setup_cp_rs_cs_rp.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_template_push.setup_cp_rs_cs_rp.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_template_push.setup_rp_cp_cs_rs.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_template_push.setup_rp_cp_cs_rs.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_template_push.setup_rp_cp_rs_cs.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_template_push.setup_rp_cp_rs_cs.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_template_push.setup_rp_cs_cp_rs.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_template_push.setup_rp_cs_cp_rs.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_template_push.setup_rp_cs_rs_cp.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_template_push.setup_rp_cs_rs_cp.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_template_push.setup_rp_rs_cp_cs.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_template_push.setup_rp_rs_cp_cs.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_template_push.setup_rp_rs_cs_cp.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_template_push.setup_rp_rs_cs_cp.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_template_push.setup_cs_cp_rp_rs.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_template_push.setup_cs_cp_rp_rs.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_template_push.setup_cs_cp_rs_rp.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_template_push.setup_cs_cp_rs_rp.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_template_push.setup_cs_rp_cp_rs.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_template_push.setup_cs_rp_cp_rs.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_template_push.setup_cs_rp_rs_cp.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_template_push.setup_cs_rp_rs_cp.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_template_push.setup_cs_rs_cp_rp.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_template_push.setup_cs_rs_cp_rp.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_template_push.setup_cs_rs_rp_cp.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_template_push.setup_cs_rs_rp_cp.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_template_push.setup_rs_cp_rp_cs.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_template_push.setup_rs_cp_rp_cs.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_template_push.setup_rs_cp_cs_rp.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_template_push.setup_rs_cp_cs_rp.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_template_push.setup_rs_rp_cp_cs.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_template_push.setup_rs_rp_cp_cs.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_template_push.setup_rs_rp_cs_cp.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_template_push.setup_rs_rp_cs_cp.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_template_push.setup_rs_cs_cp_rp.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_template_push.setup_rs_cs_cp_rp.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_template_push.setup_rs_cs_rp_cp.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.write_template_push.setup_rs_cs_rp_cp.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_write.setup_cp_rp_cs_rs.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_write.setup_cp_rp_cs_rs.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_write.setup_cp_rp_rs_cs.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_write.setup_cp_rp_rs_cs.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_write.setup_cp_cs_rp_rs.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_write.setup_cp_cs_rp_rs.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_write.setup_cp_cs_rs_rp.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_write.setup_cp_cs_rs_rp.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_write.setup_cp_rs_rp_cs.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_write.setup_cp_rs_rp_cs.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_write.setup_cp_rs_cs_rp.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_write.setup_cp_rs_cs_rp.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_write.setup_rp_cp_cs_rs.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_write.setup_rp_cp_cs_rs.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_write.setup_rp_cp_rs_cs.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_write.setup_rp_cp_rs_cs.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_write.setup_rp_cs_cp_rs.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_write.setup_rp_cs_cp_rs.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_write.setup_rp_cs_rs_cp.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_write.setup_rp_cs_rs_cp.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_write.setup_rp_rs_cp_cs.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_write.setup_rp_rs_cp_cs.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_write.setup_rp_rs_cs_cp.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_write.setup_rp_rs_cs_cp.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_write.setup_cs_cp_rp_rs.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_write.setup_cs_cp_rp_rs.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_write.setup_cs_cp_rs_rp.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_write.setup_cs_cp_rs_rp.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_write.setup_cs_rp_cp_rs.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_write.setup_cs_rp_cp_rs.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_write.setup_cs_rp_rs_cp.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_write.setup_cs_rp_rs_cp.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_write.setup_cs_rs_cp_rp.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_write.setup_cs_rs_cp_rp.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_write.setup_cs_rs_rp_cp.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_write.setup_cs_rs_rp_cp.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_write.setup_rs_cp_rp_cs.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_write.setup_rs_cp_rp_cs.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_write.setup_rs_cp_cs_rp.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_write.setup_rs_cp_cs_rp.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_write.setup_rs_rp_cp_cs.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_write.setup_rs_rp_cp_cs.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_write.setup_rs_rp_cs_cp.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_write.setup_rs_rp_cs_cp.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_write.setup_rs_cs_cp_rp.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_write.setup_rs_cs_cp_rp.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_write.setup_rs_cs_rp_cp.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_write.setup_rs_cs_rp_cp.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_push.setup_cp_rp_cs_rs.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_push.setup_cp_rp_cs_rs.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_push.setup_cp_rp_rs_cs.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_push.setup_cp_rp_rs_cs.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_push.setup_cp_cs_rp_rs.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_push.setup_cp_cs_rp_rs.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_push.setup_cp_cs_rs_rp.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_push.setup_cp_cs_rs_rp.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_push.setup_cp_rs_rp_cs.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_push.setup_cp_rs_rp_cs.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_push.setup_cp_rs_cs_rp.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_push.setup_cp_rs_cs_rp.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_push.setup_rp_cp_cs_rs.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_push.setup_rp_cp_cs_rs.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_push.setup_rp_cp_rs_cs.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_push.setup_rp_cp_rs_cs.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_push.setup_rp_cs_cp_rs.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_push.setup_rp_cs_cp_rs.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_push.setup_rp_cs_rs_cp.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_push.setup_rp_cs_rs_cp.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_push.setup_rp_rs_cp_cs.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_push.setup_rp_rs_cp_cs.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_push.setup_rp_rs_cs_cp.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_push.setup_rp_rs_cs_cp.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_push.setup_cs_cp_rp_rs.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_push.setup_cs_cp_rp_rs.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_push.setup_cs_cp_rs_rp.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_push.setup_cs_cp_rs_rp.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_push.setup_cs_rp_cp_rs.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_push.setup_cs_rp_cp_rs.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_push.setup_cs_rp_rs_cp.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_push.setup_cs_rp_rs_cp.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_push.setup_cs_rs_cp_rp.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_push.setup_cs_rs_cp_rp.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_push.setup_cs_rs_rp_cp.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_push.setup_cs_rs_rp_cp.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_push.setup_rs_cp_rp_cs.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_push.setup_rs_cp_rp_cs.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_push.setup_rs_cp_cs_rp.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_push.setup_rs_cp_cs_rp.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_push.setup_rs_rp_cp_cs.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_push.setup_rs_rp_cp_cs.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_push.setup_rs_rp_cs_cp.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_push.setup_rs_rp_cs_cp.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_push.setup_rs_cs_cp_rp.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_push.setup_rs_cs_cp_rp.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_push.setup_rs_cs_rp_cp.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_push.setup_rs_cs_rp_cp.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_template_push.setup_cp_rp_cs_rs.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_template_push.setup_cp_rp_cs_rs.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_template_push.setup_cp_rp_rs_cs.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_template_push.setup_cp_rp_rs_cs.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_template_push.setup_cp_cs_rp_rs.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_template_push.setup_cp_cs_rp_rs.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_template_push.setup_cp_cs_rs_rp.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_template_push.setup_cp_cs_rs_rp.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_template_push.setup_cp_rs_rp_cs.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_template_push.setup_cp_rs_rp_cs.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_template_push.setup_cp_rs_cs_rp.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_template_push.setup_cp_rs_cs_rp.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_template_push.setup_rp_cp_cs_rs.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_template_push.setup_rp_cp_cs_rs.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_template_push.setup_rp_cp_rs_cs.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_template_push.setup_rp_cp_rs_cs.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_template_push.setup_rp_cs_cp_rs.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_template_push.setup_rp_cs_cp_rs.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_template_push.setup_rp_cs_rs_cp.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_template_push.setup_rp_cs_rs_cp.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_template_push.setup_rp_rs_cp_cs.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_template_push.setup_rp_rs_cp_cs.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_template_push.setup_rp_rs_cs_cp.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_template_push.setup_rp_rs_cs_cp.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_template_push.setup_cs_cp_rp_rs.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_template_push.setup_cs_cp_rp_rs.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_template_push.setup_cs_cp_rs_rp.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_template_push.setup_cs_cp_rs_rp.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_template_push.setup_cs_rp_cp_rs.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_template_push.setup_cs_rp_cp_rs.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_template_push.setup_cs_rp_rs_cp.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_template_push.setup_cs_rp_rs_cp.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_template_push.setup_cs_rs_cp_rp.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_template_push.setup_cs_rs_cp_rp.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_template_push.setup_cs_rs_rp_cp.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_template_push.setup_cs_rs_rp_cp.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_template_push.setup_rs_cp_rp_cs.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_template_push.setup_rs_cp_rp_cs.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_template_push.setup_rs_cp_cs_rp.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_template_push.setup_rs_cp_cs_rp.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_template_push.setup_rs_rp_cp_cs.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_template_push.setup_rs_rp_cp_cs.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_template_push.setup_rs_rp_cs_cp.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_template_push.setup_rs_rp_cs_cp.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_template_push.setup_rs_cs_cp_rp.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_template_push.setup_rs_cs_cp_rp.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_template_push.setup_rs_cs_rp_cp.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.push_template_push.setup_rs_cs_rp_cp.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_write.setup_cp_rp_cs_rs.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_write.setup_cp_rp_cs_rs.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_write.setup_cp_rp_rs_cs.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_write.setup_cp_rp_rs_cs.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_write.setup_cp_cs_rp_rs.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_write.setup_cp_cs_rp_rs.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_write.setup_cp_cs_rs_rp.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_write.setup_cp_cs_rs_rp.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_write.setup_cp_rs_rp_cs.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_write.setup_cp_rs_rp_cs.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_write.setup_cp_rs_cs_rp.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_write.setup_cp_rs_cs_rp.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_write.setup_rp_cp_cs_rs.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_write.setup_rp_cp_cs_rs.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_write.setup_rp_cp_rs_cs.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_write.setup_rp_cp_rs_cs.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_write.setup_rp_cs_cp_rs.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_write.setup_rp_cs_cp_rs.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_write.setup_rp_cs_rs_cp.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_write.setup_rp_cs_rs_cp.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_write.setup_rp_rs_cp_cs.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_write.setup_rp_rs_cp_cs.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_write.setup_rp_rs_cs_cp.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_write.setup_rp_rs_cs_cp.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_write.setup_cs_cp_rp_rs.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_write.setup_cs_cp_rp_rs.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_write.setup_cs_cp_rs_rp.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_write.setup_cs_cp_rs_rp.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_write.setup_cs_rp_cp_rs.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_write.setup_cs_rp_cp_rs.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_write.setup_cs_rp_rs_cp.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_write.setup_cs_rp_rs_cp.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_write.setup_cs_rs_cp_rp.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_write.setup_cs_rs_cp_rp.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_write.setup_cs_rs_rp_cp.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_write.setup_cs_rs_rp_cp.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_write.setup_rs_cp_rp_cs.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_write.setup_rs_cp_rp_cs.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_write.setup_rs_cp_cs_rp.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_write.setup_rs_cp_cs_rp.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_write.setup_rs_rp_cp_cs.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_write.setup_rs_rp_cp_cs.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_write.setup_rs_rp_cs_cp.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_write.setup_rs_rp_cs_cp.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_write.setup_rs_cs_cp_rp.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_write.setup_rs_cs_cp_rp.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_write.setup_rs_cs_rp_cp.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_write.setup_rs_cs_rp_cp.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_push.setup_cp_rp_cs_rs.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_push.setup_cp_rp_cs_rs.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_push.setup_cp_rp_rs_cs.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_push.setup_cp_rp_rs_cs.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_push.setup_cp_cs_rp_rs.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_push.setup_cp_cs_rp_rs.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_push.setup_cp_cs_rs_rp.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_push.setup_cp_cs_rs_rp.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_push.setup_cp_rs_rp_cs.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_push.setup_cp_rs_rp_cs.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_push.setup_cp_rs_cs_rp.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_push.setup_cp_rs_cs_rp.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_push.setup_rp_cp_cs_rs.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_push.setup_rp_cp_cs_rs.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_push.setup_rp_cp_rs_cs.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_push.setup_rp_cp_rs_cs.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_push.setup_rp_cs_cp_rs.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_push.setup_rp_cs_cp_rs.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_push.setup_rp_cs_rs_cp.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_push.setup_rp_cs_rs_cp.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_push.setup_rp_rs_cp_cs.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_push.setup_rp_rs_cp_cs.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_push.setup_rp_rs_cs_cp.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_push.setup_rp_rs_cs_cp.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_push.setup_cs_cp_rp_rs.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_push.setup_cs_cp_rp_rs.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_push.setup_cs_cp_rs_rp.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_push.setup_cs_cp_rs_rp.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_push.setup_cs_rp_cp_rs.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_push.setup_cs_rp_cp_rs.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_push.setup_cs_rp_rs_cp.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_push.setup_cs_rp_rs_cp.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_push.setup_cs_rs_cp_rp.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_push.setup_cs_rs_cp_rp.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_push.setup_cs_rs_rp_cp.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_push.setup_cs_rs_rp_cp.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_push.setup_rs_cp_rp_cs.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_push.setup_rs_cp_rp_cs.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_push.setup_rs_cp_cs_rp.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_push.setup_rs_cp_cs_rp.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_push.setup_rs_rp_cp_cs.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_push.setup_rs_rp_cp_cs.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_push.setup_rs_rp_cs_cp.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_push.setup_rs_rp_cs_cp.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_push.setup_rs_cs_cp_rp.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_push.setup_rs_cs_cp_rp.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_push.setup_rs_cs_rp_cp.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_push.setup_rs_cs_rp_cp.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_template_push.setup_cp_rp_cs_rs.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_template_push.setup_cp_rp_cs_rs.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_template_push.setup_cp_rp_rs_cs.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_template_push.setup_cp_rp_rs_cs.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_template_push.setup_cp_cs_rp_rs.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_template_push.setup_cp_cs_rp_rs.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_template_push.setup_cp_cs_rs_rp.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_template_push.setup_cp_cs_rs_rp.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_template_push.setup_cp_rs_rp_cs.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_template_push.setup_cp_rs_rp_cs.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_template_push.setup_cp_rs_cs_rp.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_template_push.setup_cp_rs_cs_rp.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_template_push.setup_rp_cp_cs_rs.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_template_push.setup_rp_cp_cs_rs.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_template_push.setup_rp_cp_rs_cs.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_template_push.setup_rp_cp_rs_cs.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_template_push.setup_rp_cs_cp_rs.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_template_push.setup_rp_cs_cp_rs.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_template_push.setup_rp_cs_rs_cp.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_template_push.setup_rp_cs_rs_cp.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_template_push.setup_rp_rs_cp_cs.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_template_push.setup_rp_rs_cp_cs.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_template_push.setup_rp_rs_cs_cp.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_template_push.setup_rp_rs_cs_cp.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_template_push.setup_cs_cp_rp_rs.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_template_push.setup_cs_cp_rp_rs.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_template_push.setup_cs_cp_rs_rp.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_template_push.setup_cs_cp_rs_rp.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_template_push.setup_cs_rp_cp_rs.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_template_push.setup_cs_rp_cp_rs.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_template_push.setup_cs_rp_rs_cp.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_template_push.setup_cs_rp_rs_cp.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_template_push.setup_cs_rs_cp_rp.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_template_push.setup_cs_rs_cp_rp.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_template_push.setup_cs_rs_rp_cp.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_template_push.setup_cs_rs_rp_cp.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_template_push.setup_rs_cp_rp_cs.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_template_push.setup_rs_cp_rp_cs.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_template_push.setup_rs_cp_cs_rp.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_template_push.setup_rs_cp_cs_rp.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_template_push.setup_rs_rp_cp_cs.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_template_push.setup_rs_rp_cp_cs.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_template_push.setup_rs_rp_cs_cp.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_template_push.setup_rs_rp_cs_cp.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_template_push.setup_rs_cs_cp_rp.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_template_push.setup_rs_cs_cp_rp.cmd_tracerays_dispatch
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_template_push.setup_rs_cs_rp_cp.cmd_dispatch_tracerays
+dEQP-VK.pipeline.bind_point.compute_raytracing.template_push_template_push.setup_rs_cs_rp_cp.cmd_tracerays_dispatch
+dEQP-VK.pipeline.color_write_enable.cmd_buffer_start.enable_all
+dEQP-VK.pipeline.color_write_enable.cmd_buffer_start.enable_first
+dEQP-VK.pipeline.color_write_enable.cmd_buffer_start.enable_second
+dEQP-VK.pipeline.color_write_enable.cmd_buffer_start.enable_last
+dEQP-VK.pipeline.color_write_enable.cmd_buffer_start.enable_first_and_second
+dEQP-VK.pipeline.color_write_enable.cmd_buffer_start.enable_second_and_last
+dEQP-VK.pipeline.color_write_enable.cmd_buffer_start.disable_all
+dEQP-VK.pipeline.color_write_enable.cmd_buffer_start.disable_first
+dEQP-VK.pipeline.color_write_enable.cmd_buffer_start.disable_second
+dEQP-VK.pipeline.color_write_enable.cmd_buffer_start.disable_last
+dEQP-VK.pipeline.color_write_enable.cmd_buffer_start.disable_first_and_second
+dEQP-VK.pipeline.color_write_enable.cmd_buffer_start.disable_second_and_last
+dEQP-VK.pipeline.color_write_enable.before_draw.enable_all
+dEQP-VK.pipeline.color_write_enable.before_draw.enable_first
+dEQP-VK.pipeline.color_write_enable.before_draw.enable_second
+dEQP-VK.pipeline.color_write_enable.before_draw.enable_last
+dEQP-VK.pipeline.color_write_enable.before_draw.enable_first_and_second
+dEQP-VK.pipeline.color_write_enable.before_draw.enable_second_and_last
+dEQP-VK.pipeline.color_write_enable.before_draw.disable_all
+dEQP-VK.pipeline.color_write_enable.before_draw.disable_first
+dEQP-VK.pipeline.color_write_enable.before_draw.disable_second
+dEQP-VK.pipeline.color_write_enable.before_draw.disable_last
+dEQP-VK.pipeline.color_write_enable.before_draw.disable_first_and_second
+dEQP-VK.pipeline.color_write_enable.before_draw.disable_second_and_last
+dEQP-VK.pipeline.color_write_enable.between_pipelines.enable_all
+dEQP-VK.pipeline.color_write_enable.between_pipelines.enable_first
+dEQP-VK.pipeline.color_write_enable.between_pipelines.enable_second
+dEQP-VK.pipeline.color_write_enable.between_pipelines.enable_last
+dEQP-VK.pipeline.color_write_enable.between_pipelines.enable_first_and_second
+dEQP-VK.pipeline.color_write_enable.between_pipelines.enable_second_and_last
+dEQP-VK.pipeline.color_write_enable.between_pipelines.disable_all
+dEQP-VK.pipeline.color_write_enable.between_pipelines.disable_first
+dEQP-VK.pipeline.color_write_enable.between_pipelines.disable_second
+dEQP-VK.pipeline.color_write_enable.between_pipelines.disable_last
+dEQP-VK.pipeline.color_write_enable.between_pipelines.disable_first_and_second
+dEQP-VK.pipeline.color_write_enable.between_pipelines.disable_second_and_last
+dEQP-VK.pipeline.color_write_enable.after_pipelines.enable_all
+dEQP-VK.pipeline.color_write_enable.after_pipelines.enable_first
+dEQP-VK.pipeline.color_write_enable.after_pipelines.enable_second
+dEQP-VK.pipeline.color_write_enable.after_pipelines.enable_last
+dEQP-VK.pipeline.color_write_enable.after_pipelines.enable_first_and_second
+dEQP-VK.pipeline.color_write_enable.after_pipelines.enable_second_and_last
+dEQP-VK.pipeline.color_write_enable.after_pipelines.disable_all
+dEQP-VK.pipeline.color_write_enable.after_pipelines.disable_first
+dEQP-VK.pipeline.color_write_enable.after_pipelines.disable_second
+dEQP-VK.pipeline.color_write_enable.after_pipelines.disable_last
+dEQP-VK.pipeline.color_write_enable.after_pipelines.disable_first_and_second
+dEQP-VK.pipeline.color_write_enable.after_pipelines.disable_second_and_last
+dEQP-VK.pipeline.color_write_enable.before_good_static.enable_all
+dEQP-VK.pipeline.color_write_enable.before_good_static.enable_first
+dEQP-VK.pipeline.color_write_enable.before_good_static.enable_second
+dEQP-VK.pipeline.color_write_enable.before_good_static.enable_last
+dEQP-VK.pipeline.color_write_enable.before_good_static.enable_first_and_second
+dEQP-VK.pipeline.color_write_enable.before_good_static.enable_second_and_last
+dEQP-VK.pipeline.color_write_enable.before_good_static.disable_all
+dEQP-VK.pipeline.color_write_enable.before_good_static.disable_first
+dEQP-VK.pipeline.color_write_enable.before_good_static.disable_second
+dEQP-VK.pipeline.color_write_enable.before_good_static.disable_last
+dEQP-VK.pipeline.color_write_enable.before_good_static.disable_first_and_second
+dEQP-VK.pipeline.color_write_enable.before_good_static.disable_second_and_last
+dEQP-VK.pipeline.color_write_enable.two_draws_dynamic.enable_all
+dEQP-VK.pipeline.color_write_enable.two_draws_dynamic.enable_first
+dEQP-VK.pipeline.color_write_enable.two_draws_dynamic.enable_second
+dEQP-VK.pipeline.color_write_enable.two_draws_dynamic.enable_last
+dEQP-VK.pipeline.color_write_enable.two_draws_dynamic.enable_first_and_second
+dEQP-VK.pipeline.color_write_enable.two_draws_dynamic.enable_second_and_last
+dEQP-VK.pipeline.color_write_enable.two_draws_dynamic.disable_all
+dEQP-VK.pipeline.color_write_enable.two_draws_dynamic.disable_first
+dEQP-VK.pipeline.color_write_enable.two_draws_dynamic.disable_second
+dEQP-VK.pipeline.color_write_enable.two_draws_dynamic.disable_last
+dEQP-VK.pipeline.color_write_enable.two_draws_dynamic.disable_first_and_second
+dEQP-VK.pipeline.color_write_enable.two_draws_dynamic.disable_second_and_last
+dEQP-VK.pipeline.color_write_enable.two_draws_static.enable_all
+dEQP-VK.pipeline.color_write_enable.two_draws_static.enable_first
+dEQP-VK.pipeline.color_write_enable.two_draws_static.enable_second
+dEQP-VK.pipeline.color_write_enable.two_draws_static.enable_last
+dEQP-VK.pipeline.color_write_enable.two_draws_static.enable_first_and_second
+dEQP-VK.pipeline.color_write_enable.two_draws_static.enable_second_and_last
+dEQP-VK.pipeline.color_write_enable.two_draws_static.disable_all
+dEQP-VK.pipeline.color_write_enable.two_draws_static.disable_first
+dEQP-VK.pipeline.color_write_enable.two_draws_static.disable_second
+dEQP-VK.pipeline.color_write_enable.two_draws_static.disable_last
+dEQP-VK.pipeline.color_write_enable.two_draws_static.disable_first_and_second
+dEQP-VK.pipeline.color_write_enable.two_draws_static.disable_second_and_last
+dEQP-VK.pipeline.color_write_enable.static.enable_all
+dEQP-VK.pipeline.color_write_enable.static.enable_first
+dEQP-VK.pipeline.color_write_enable.static.enable_second
+dEQP-VK.pipeline.color_write_enable.static.enable_last
+dEQP-VK.pipeline.color_write_enable.static.enable_first_and_second
+dEQP-VK.pipeline.color_write_enable.static.enable_second_and_last
+dEQP-VK.pipeline.color_write_enable.static.disable_all
+dEQP-VK.pipeline.color_write_enable.static.disable_first
+dEQP-VK.pipeline.color_write_enable.static.disable_second
+dEQP-VK.pipeline.color_write_enable.static.disable_last
+dEQP-VK.pipeline.color_write_enable.static.disable_first_and_second
+dEQP-VK.pipeline.color_write_enable.static.disable_second_and_last
 dEQP-VK.binding_model.descriptor_update.samplerless.sampled_img_sampler_zero
+dEQP-VK.binding_model.descriptor_update.samplerless.sampled_img_sampler_zero_set_1
 dEQP-VK.binding_model.descriptor_update.samplerless.sampled_img_sampler_one
+dEQP-VK.binding_model.descriptor_update.samplerless.sampled_img_sampler_one_set_1
 dEQP-VK.binding_model.descriptor_update.samplerless.sampled_img_sampler_destroyed
+dEQP-VK.binding_model.descriptor_update.samplerless.sampled_img_sampler_destroyed_set_1
 dEQP-VK.binding_model.descriptor_update.samplerless.storage_img_sampler_zero
+dEQP-VK.binding_model.descriptor_update.samplerless.storage_img_sampler_zero_set_1
 dEQP-VK.binding_model.descriptor_update.samplerless.storage_img_sampler_one
+dEQP-VK.binding_model.descriptor_update.samplerless.storage_img_sampler_one_set_1
 dEQP-VK.binding_model.descriptor_update.samplerless.storage_img_sampler_destroyed
+dEQP-VK.binding_model.descriptor_update.samplerless.storage_img_sampler_destroyed_set_1
 dEQP-VK.binding_model.descriptor_update.samplerless.input_attachment_sampler_zero
+dEQP-VK.binding_model.descriptor_update.samplerless.input_attachment_sampler_zero_set_1
 dEQP-VK.binding_model.descriptor_update.samplerless.input_attachment_sampler_one
+dEQP-VK.binding_model.descriptor_update.samplerless.input_attachment_sampler_one_set_1
 dEQP-VK.binding_model.descriptor_update.samplerless.input_attachment_sampler_destroyed
+dEQP-VK.binding_model.descriptor_update.samplerless.input_attachment_sampler_destroyed_set_1
+dEQP-VK.binding_model.descriptor_update.random.uniform_buffer
 dEQP-VK.binding_model.descriptorset_random.sets4.noarray.ubolimitlow.sbolimitlow.sampledimglow.outimgonly.noiub.nouab.frag.ialimitlow.1
 dEQP-VK.binding_model.descriptorset_random.sets4.noarray.ubolimitlow.sbolimitlow.sampledimglow.outimgonly.noiub.nouab.frag.ialimitlow.2
 dEQP-VK.binding_model.descriptorset_random.sets4.noarray.ubolimitlow.sbolimitlow.sampledimglow.outimgonly.noiub.nouab.frag.ialimitlow.3
@@ -71670,6 +78647,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
@@ -77982,6 +84960,7 @@
 dEQP-VK.binding_model.descriptorset_random.sets4.dynindexed.ubolimitlow.sbolimitlow.sampledimghigh.lowimgsingletex.iublimithigh.uab.chit.noia.0
 dEQP-VK.binding_model.descriptorset_random.sets4.dynindexed.ubolimitlow.sbolimitlow.sampledimghigh.lowimgsingletex.iublimithigh.uab.miss.noia.0
 dEQP-VK.binding_model.descriptorset_random.sets4.dynindexed.ubolimitlow.sbolimitlow.sampledimghigh.lowimgsingletex.iublimithigh.uab.call.noia.0
+dEQP-VK.binding_model.descriptorset_random.sets4.dynindexed.ubolimitlow.sbolimithigh.nosampledimg.lowimgsingletex.noiub.uab.frag.ialimitlow.0
 dEQP-VK.binding_model.descriptorset_random.sets4.dynindexed.ubolimitlow.sbolimithigh.sampledimglow.outimgonly.noiub.nouab.frag.ialimitlow.0
 dEQP-VK.binding_model.descriptorset_random.sets4.dynindexed.ubolimitlow.sbolimithigh.sampledimglow.outimgonly.noiub.uab.frag.ialimitlow.0
 dEQP-VK.binding_model.descriptorset_random.sets4.dynindexed.ubolimitlow.sbolimithigh.sampledimglow.outimgonly.iublimitlow.nouab.frag.ialimitlow.0
@@ -80250,6 +87229,8 @@
 dEQP-VK.binding_model.descriptorset_random.sets4.runtimesize.ubolimitlow.nosbo.sampledimghigh.lowimgsingletex.iublimitlow.uab.frag.ialimitlow.0
 dEQP-VK.binding_model.descriptorset_random.sets4.runtimesize.ubolimitlow.nosbo.sampledimghigh.lowimgsingletex.iublimithigh.nouab.frag.ialimitlow.0
 dEQP-VK.binding_model.descriptorset_random.sets4.runtimesize.ubolimitlow.nosbo.sampledimghigh.lowimgsingletex.iublimithigh.uab.frag.ialimitlow.0
+dEQP-VK.binding_model.descriptorset_random.sets4.runtimesize.ubolimitlow.sbolimitlow.nosampledimg.outimgtexlow.noiub.nouab.frag.ialimitlow.4
+dEQP-VK.binding_model.descriptorset_random.sets4.runtimesize.ubolimitlow.sbolimitlow.nosampledimg.outimgtexlow.noiub.nouab.frag.ialimitlow.8
 dEQP-VK.binding_model.descriptorset_random.sets4.runtimesize.ubolimitlow.sbolimitlow.nosampledimg.lowimgnotex.noiub.nouab.frag.ialimitlow.0
 dEQP-VK.binding_model.descriptorset_random.sets4.runtimesize.ubolimitlow.sbolimitlow.nosampledimg.lowimgnotex.noiub.nouab.frag.ialimitlow.1
 dEQP-VK.binding_model.descriptorset_random.sets4.runtimesize.ubolimitlow.sbolimitlow.nosampledimg.lowimgnotex.noiub.nouab.frag.ialimitlow.2
@@ -80303,6 +87284,7 @@
 dEQP-VK.binding_model.descriptorset_random.sets4.runtimesize.ubolimitlow.sbolimitlow.nosampledimg.lowimgsingletex.iublimithigh.nouab.frag.ialimitlow.0
 dEQP-VK.binding_model.descriptorset_random.sets4.runtimesize.ubolimitlow.sbolimitlow.nosampledimg.lowimgsingletex.iublimithigh.nouab.frag.ialimithigh.0
 dEQP-VK.binding_model.descriptorset_random.sets4.runtimesize.ubolimitlow.sbolimitlow.nosampledimg.lowimgsingletex.iublimithigh.uab.frag.ialimitlow.0
+dEQP-VK.binding_model.descriptorset_random.sets4.runtimesize.ubolimitlow.sbolimitlow.nosampledimg.storageimghigh.noiub.nouab.frag.ialimitlow.0
 dEQP-VK.binding_model.descriptorset_random.sets4.runtimesize.ubolimitlow.sbolimitlow.nosampledimg.storageimghigh.iublimitlow.nouab.frag.ialimitlow.0
 dEQP-VK.binding_model.descriptorset_random.sets4.runtimesize.ubolimitlow.sbolimitlow.sampledimglow.outimgonly.noiub.nouab.frag.ialimitlow.0
 dEQP-VK.binding_model.descriptorset_random.sets4.runtimesize.ubolimitlow.sbolimitlow.sampledimglow.outimgonly.noiub.nouab.frag.ialimitlow.1
@@ -80672,6 +87654,7 @@
 dEQP-VK.binding_model.descriptorset_random.sets4.runtimesize.ubolimitlow.sbolimitlow.sampledimglow.lowimgnotex.noiub.uab.frag.ialimitlow.8
 dEQP-VK.binding_model.descriptorset_random.sets4.runtimesize.ubolimitlow.sbolimitlow.sampledimglow.lowimgnotex.noiub.uab.frag.ialimitlow.9
 dEQP-VK.binding_model.descriptorset_random.sets4.runtimesize.ubolimitlow.sbolimitlow.sampledimglow.lowimgnotex.noiub.uab.frag.ialimithigh.0
+dEQP-VK.binding_model.descriptorset_random.sets4.runtimesize.ubolimitlow.sbolimitlow.sampledimglow.lowimgnotex.noiub.uab.vert.noia.0
 dEQP-VK.binding_model.descriptorset_random.sets4.runtimesize.ubolimitlow.sbolimitlow.sampledimglow.lowimgnotex.noiub.uab.rgnv.noia.0
 dEQP-VK.binding_model.descriptorset_random.sets4.runtimesize.ubolimitlow.sbolimitlow.sampledimglow.lowimgnotex.noiub.uab.rgnv.noia.1
 dEQP-VK.binding_model.descriptorset_random.sets4.runtimesize.ubolimitlow.sbolimitlow.sampledimglow.lowimgnotex.noiub.uab.rgnv.noia.2
@@ -81045,7 +88028,9 @@
 dEQP-VK.binding_model.descriptorset_random.sets4.runtimesize.ubolimitlow.sbolimitlow.sampledimglow.storageimghigh.noiub.nouab.chit.noia.0
 dEQP-VK.binding_model.descriptorset_random.sets4.runtimesize.ubolimitlow.sbolimitlow.sampledimglow.storageimghigh.noiub.nouab.miss.noia.0
 dEQP-VK.binding_model.descriptorset_random.sets4.runtimesize.ubolimitlow.sbolimitlow.sampledimglow.storageimghigh.noiub.nouab.call.noia.0
+dEQP-VK.binding_model.descriptorset_random.sets4.runtimesize.ubolimitlow.sbolimitlow.sampledimglow.storageimghigh.noiub.uab.frag.noia.0
 dEQP-VK.binding_model.descriptorset_random.sets4.runtimesize.ubolimitlow.sbolimitlow.sampledimglow.storageimghigh.noiub.uab.frag.ialimitlow.0
+dEQP-VK.binding_model.descriptorset_random.sets4.runtimesize.ubolimitlow.sbolimitlow.sampledimglow.storageimghigh.noiub.uab.vert.noia.0
 dEQP-VK.binding_model.descriptorset_random.sets4.runtimesize.ubolimitlow.sbolimitlow.sampledimglow.storageimghigh.noiub.uab.rgnv.noia.0
 dEQP-VK.binding_model.descriptorset_random.sets4.runtimesize.ubolimitlow.sbolimitlow.sampledimglow.storageimghigh.noiub.uab.rgen.noia.0
 dEQP-VK.binding_model.descriptorset_random.sets4.runtimesize.ubolimitlow.sbolimitlow.sampledimglow.storageimghigh.noiub.uab.sect.noia.0
@@ -95481,6 +102466,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
@@ -96156,10 +104353,15 @@
 dEQP-VK.spirv_assembly.instruction.compute.composite_insert.undef_mat3x4
 dEQP-VK.spirv_assembly.instruction.compute.composite_insert.undef_mat4x4
 dEQP-VK.spirv_assembly.instruction.compute.composite_insert.undef_nested_struct
+dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.dynamic_offset.select_descriptor_array
 dEQP-VK.spirv_assembly.instruction.compute.float32.comparison_1.modfstruct
+dEQP-VK.spirv_assembly.instruction.compute.float32.comparison_1.frexpstruct
 dEQP-VK.spirv_assembly.instruction.compute.float32.comparison_2.modfstruct
+dEQP-VK.spirv_assembly.instruction.compute.float32.comparison_2.frexpstruct
 dEQP-VK.spirv_assembly.instruction.compute.float32.comparison_3.modfstruct
+dEQP-VK.spirv_assembly.instruction.compute.float32.comparison_3.frexpstruct
 dEQP-VK.spirv_assembly.instruction.compute.float32.comparison_4.modfstruct
+dEQP-VK.spirv_assembly.instruction.compute.float32.comparison_4.frexpstruct
 dEQP-VK.spirv_assembly.instruction.compute.signed_op.glsl_int_findumsb
 dEQP-VK.spirv_assembly.instruction.compute.signed_op.glsl_int_uclamp
 dEQP-VK.spirv_assembly.instruction.compute.signed_op.glsl_int_umax
@@ -97623,21 +105825,41 @@
 dEQP-VK.spirv_assembly.instruction.graphics.float32.comparison_1.modfstruct_tese
 dEQP-VK.spirv_assembly.instruction.graphics.float32.comparison_1.modfstruct_geom
 dEQP-VK.spirv_assembly.instruction.graphics.float32.comparison_1.modfstruct_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float32.comparison_1.frexpstruct_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float32.comparison_1.frexpstruct_tesc
+dEQP-VK.spirv_assembly.instruction.graphics.float32.comparison_1.frexpstruct_tese
+dEQP-VK.spirv_assembly.instruction.graphics.float32.comparison_1.frexpstruct_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float32.comparison_1.frexpstruct_frag
 dEQP-VK.spirv_assembly.instruction.graphics.float32.comparison_2.modfstruct_vert
 dEQP-VK.spirv_assembly.instruction.graphics.float32.comparison_2.modfstruct_tesc
 dEQP-VK.spirv_assembly.instruction.graphics.float32.comparison_2.modfstruct_tese
 dEQP-VK.spirv_assembly.instruction.graphics.float32.comparison_2.modfstruct_geom
 dEQP-VK.spirv_assembly.instruction.graphics.float32.comparison_2.modfstruct_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float32.comparison_2.frexpstruct_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float32.comparison_2.frexpstruct_tesc
+dEQP-VK.spirv_assembly.instruction.graphics.float32.comparison_2.frexpstruct_tese
+dEQP-VK.spirv_assembly.instruction.graphics.float32.comparison_2.frexpstruct_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float32.comparison_2.frexpstruct_frag
 dEQP-VK.spirv_assembly.instruction.graphics.float32.comparison_3.modfstruct_vert
 dEQP-VK.spirv_assembly.instruction.graphics.float32.comparison_3.modfstruct_tesc
 dEQP-VK.spirv_assembly.instruction.graphics.float32.comparison_3.modfstruct_tese
 dEQP-VK.spirv_assembly.instruction.graphics.float32.comparison_3.modfstruct_geom
 dEQP-VK.spirv_assembly.instruction.graphics.float32.comparison_3.modfstruct_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float32.comparison_3.frexpstruct_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float32.comparison_3.frexpstruct_tesc
+dEQP-VK.spirv_assembly.instruction.graphics.float32.comparison_3.frexpstruct_tese
+dEQP-VK.spirv_assembly.instruction.graphics.float32.comparison_3.frexpstruct_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float32.comparison_3.frexpstruct_frag
 dEQP-VK.spirv_assembly.instruction.graphics.float32.comparison_4.modfstruct_vert
 dEQP-VK.spirv_assembly.instruction.graphics.float32.comparison_4.modfstruct_tesc
 dEQP-VK.spirv_assembly.instruction.graphics.float32.comparison_4.modfstruct_tese
 dEQP-VK.spirv_assembly.instruction.graphics.float32.comparison_4.modfstruct_geom
 dEQP-VK.spirv_assembly.instruction.graphics.float32.comparison_4.modfstruct_frag
+dEQP-VK.spirv_assembly.instruction.graphics.float32.comparison_4.frexpstruct_vert
+dEQP-VK.spirv_assembly.instruction.graphics.float32.comparison_4.frexpstruct_tesc
+dEQP-VK.spirv_assembly.instruction.graphics.float32.comparison_4.frexpstruct_tese
+dEQP-VK.spirv_assembly.instruction.graphics.float32.comparison_4.frexpstruct_geom
+dEQP-VK.spirv_assembly.instruction.graphics.float32.comparison_4.frexpstruct_frag
 dEQP-VK.spirv_assembly.instruction.spirv1p4.hlsl_functionality1.member_decorate_string
 dEQP-VK.spirv_assembly.instruction.function_params.sampler_param
 dEQP-VK.spirv_assembly.instruction.amd_trinary_minmax.min3.i8.scalar
@@ -97891,6 +106113,22 @@
 dEQP-VK.glsl.invariance.lowp.user_defined.loop_2
 dEQP-VK.glsl.invariance.lowp.user_defined.loop_3
 dEQP-VK.glsl.invariance.lowp.user_defined.loop_4
+dEQP-VK.glsl.texture_functions.query.texturesizems.sampler2dms_fixed_vertex
+dEQP-VK.glsl.texture_functions.query.texturesizems.sampler2dms_fixed_fragment
+dEQP-VK.glsl.texture_functions.query.texturesizems.sampler2dms_float_vertex
+dEQP-VK.glsl.texture_functions.query.texturesizems.sampler2dms_float_fragment
+dEQP-VK.glsl.texture_functions.query.texturesizems.isampler2dms_vertex
+dEQP-VK.glsl.texture_functions.query.texturesizems.isampler2dms_fragment
+dEQP-VK.glsl.texture_functions.query.texturesizems.usampler2dms_vertex
+dEQP-VK.glsl.texture_functions.query.texturesizems.usampler2dms_fragment
+dEQP-VK.glsl.texture_functions.query.texturesizems.sampler2dmsarray_fixed_vertex
+dEQP-VK.glsl.texture_functions.query.texturesizems.sampler2dmsarray_fixed_fragment
+dEQP-VK.glsl.texture_functions.query.texturesizems.sampler2dmsarray_float_vertex
+dEQP-VK.glsl.texture_functions.query.texturesizems.sampler2dmsarray_float_fragment
+dEQP-VK.glsl.texture_functions.query.texturesizems.isampler2dmsarray_vertex
+dEQP-VK.glsl.texture_functions.query.texturesizems.isampler2dmsarray_fragment
+dEQP-VK.glsl.texture_functions.query.texturesizems.usampler2dmsarray_vertex
+dEQP-VK.glsl.texture_functions.query.texturesizems.usampler2dmsarray_fragment
 dEQP-VK.glsl.texture_gather.basic.2d.rgba8.base_level.level_1_amd_bias
 dEQP-VK.glsl.texture_gather.basic.2d.rgba8.base_level.sparse_level_1_amd_bias
 dEQP-VK.glsl.texture_gather.basic.2d.rgba8.base_level.level_1_amd_lod
@@ -98107,6 +106345,13 @@
 dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8i.base_level.sparse_level_2_amd_bias
 dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8i.base_level.level_2_amd_lod
 dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8i.base_level.sparse_level_2_amd_lod
+dEQP-VK.glsl.builtin_var.fragcoord_msaa_input.1_bit
+dEQP-VK.glsl.builtin_var.fragcoord_msaa_input.2_bit
+dEQP-VK.glsl.builtin_var.fragcoord_msaa_input.4_bit
+dEQP-VK.glsl.builtin_var.fragcoord_msaa_input.8_bit
+dEQP-VK.glsl.builtin_var.fragcoord_msaa_input.16_bit
+dEQP-VK.glsl.builtin_var.fragcoord_msaa_input.32_bit
+dEQP-VK.glsl.builtin_var.fragcoord_msaa_input.64_bit
 dEQP-VK.glsl.builtin.function.common.isnan.double_compute
 dEQP-VK.glsl.builtin.function.common.isnan.dvec2_compute
 dEQP-VK.glsl.builtin.function.common.isnan.dvec3_compute
@@ -100234,6 +108479,136 @@
 dEQP-VK.renderpass2.fragment_density_map.properties.8_subsampled_samplers
 dEQP-VK.renderpass2.fragment_density_map.properties.subsampled_loads
 dEQP-VK.renderpass2.fragment_density_map.properties.subsampled_coarse_reconstruction
+dEQP-VK.dynamic_state.compute_transfer.single.compute.viewport.before
+dEQP-VK.dynamic_state.compute_transfer.single.compute.viewport.after
+dEQP-VK.dynamic_state.compute_transfer.single.compute.scissor.before
+dEQP-VK.dynamic_state.compute_transfer.single.compute.scissor.after
+dEQP-VK.dynamic_state.compute_transfer.single.compute.line_width.before
+dEQP-VK.dynamic_state.compute_transfer.single.compute.line_width.after
+dEQP-VK.dynamic_state.compute_transfer.single.compute.depth_bias.before
+dEQP-VK.dynamic_state.compute_transfer.single.compute.depth_bias.after
+dEQP-VK.dynamic_state.compute_transfer.single.compute.blend_constants.before
+dEQP-VK.dynamic_state.compute_transfer.single.compute.blend_constants.after
+dEQP-VK.dynamic_state.compute_transfer.single.compute.depth_bounds.before
+dEQP-VK.dynamic_state.compute_transfer.single.compute.depth_bounds.after
+dEQP-VK.dynamic_state.compute_transfer.single.compute.stencil_compare_mask.before
+dEQP-VK.dynamic_state.compute_transfer.single.compute.stencil_compare_mask.after
+dEQP-VK.dynamic_state.compute_transfer.single.compute.stencil_write_mask.before
+dEQP-VK.dynamic_state.compute_transfer.single.compute.stencil_write_mask.after
+dEQP-VK.dynamic_state.compute_transfer.single.compute.stencil_reference.before
+dEQP-VK.dynamic_state.compute_transfer.single.compute.stencil_reference.after
+dEQP-VK.dynamic_state.compute_transfer.single.compute.discard_rectangle_ext.before
+dEQP-VK.dynamic_state.compute_transfer.single.compute.discard_rectangle_ext.after
+dEQP-VK.dynamic_state.compute_transfer.single.compute.sample_locations_ext.before
+dEQP-VK.dynamic_state.compute_transfer.single.compute.sample_locations_ext.after
+dEQP-VK.dynamic_state.compute_transfer.single.compute.ray_tracing_pipeline_stack_size_khr.before
+dEQP-VK.dynamic_state.compute_transfer.single.compute.ray_tracing_pipeline_stack_size_khr.after
+dEQP-VK.dynamic_state.compute_transfer.single.compute.fragment_shading_rate_khr.before
+dEQP-VK.dynamic_state.compute_transfer.single.compute.fragment_shading_rate_khr.after
+dEQP-VK.dynamic_state.compute_transfer.single.compute.line_stipple_ext.before
+dEQP-VK.dynamic_state.compute_transfer.single.compute.line_stipple_ext.after
+dEQP-VK.dynamic_state.compute_transfer.single.compute.cull_mode_ext.before
+dEQP-VK.dynamic_state.compute_transfer.single.compute.cull_mode_ext.after
+dEQP-VK.dynamic_state.compute_transfer.single.compute.front_face_ext.before
+dEQP-VK.dynamic_state.compute_transfer.single.compute.front_face_ext.after
+dEQP-VK.dynamic_state.compute_transfer.single.compute.primitive_topology_ext.before
+dEQP-VK.dynamic_state.compute_transfer.single.compute.primitive_topology_ext.after
+dEQP-VK.dynamic_state.compute_transfer.single.compute.viewport_with_count_ext.before
+dEQP-VK.dynamic_state.compute_transfer.single.compute.viewport_with_count_ext.after
+dEQP-VK.dynamic_state.compute_transfer.single.compute.scissor_with_count_ext.before
+dEQP-VK.dynamic_state.compute_transfer.single.compute.scissor_with_count_ext.after
+dEQP-VK.dynamic_state.compute_transfer.single.compute.vertex_input_binding_stride_ext.before
+dEQP-VK.dynamic_state.compute_transfer.single.compute.vertex_input_binding_stride_ext.after
+dEQP-VK.dynamic_state.compute_transfer.single.compute.depth_test_enable_ext.before
+dEQP-VK.dynamic_state.compute_transfer.single.compute.depth_test_enable_ext.after
+dEQP-VK.dynamic_state.compute_transfer.single.compute.depth_write_enable_ext.before
+dEQP-VK.dynamic_state.compute_transfer.single.compute.depth_write_enable_ext.after
+dEQP-VK.dynamic_state.compute_transfer.single.compute.depth_compare_op_ext.before
+dEQP-VK.dynamic_state.compute_transfer.single.compute.depth_compare_op_ext.after
+dEQP-VK.dynamic_state.compute_transfer.single.compute.depth_bounds_test_enable_ext.before
+dEQP-VK.dynamic_state.compute_transfer.single.compute.depth_bounds_test_enable_ext.after
+dEQP-VK.dynamic_state.compute_transfer.single.compute.stencil_test_enable_ext.before
+dEQP-VK.dynamic_state.compute_transfer.single.compute.stencil_test_enable_ext.after
+dEQP-VK.dynamic_state.compute_transfer.single.compute.stencil_op_ext.before
+dEQP-VK.dynamic_state.compute_transfer.single.compute.stencil_op_ext.after
+dEQP-VK.dynamic_state.compute_transfer.single.compute.viewport_w_scaling_nv.before
+dEQP-VK.dynamic_state.compute_transfer.single.compute.viewport_w_scaling_nv.after
+dEQP-VK.dynamic_state.compute_transfer.single.compute.viewport_shading_rate_palette_nv.before
+dEQP-VK.dynamic_state.compute_transfer.single.compute.viewport_shading_rate_palette_nv.after
+dEQP-VK.dynamic_state.compute_transfer.single.compute.viewport_coarse_sample_order_nv.before
+dEQP-VK.dynamic_state.compute_transfer.single.compute.viewport_coarse_sample_order_nv.after
+dEQP-VK.dynamic_state.compute_transfer.single.compute.exclusive_scissor_nv.before
+dEQP-VK.dynamic_state.compute_transfer.single.compute.exclusive_scissor_nv.after
+dEQP-VK.dynamic_state.compute_transfer.single.transfer.viewport.before
+dEQP-VK.dynamic_state.compute_transfer.single.transfer.viewport.after
+dEQP-VK.dynamic_state.compute_transfer.single.transfer.scissor.before
+dEQP-VK.dynamic_state.compute_transfer.single.transfer.scissor.after
+dEQP-VK.dynamic_state.compute_transfer.single.transfer.line_width.before
+dEQP-VK.dynamic_state.compute_transfer.single.transfer.line_width.after
+dEQP-VK.dynamic_state.compute_transfer.single.transfer.depth_bias.before
+dEQP-VK.dynamic_state.compute_transfer.single.transfer.depth_bias.after
+dEQP-VK.dynamic_state.compute_transfer.single.transfer.blend_constants.before
+dEQP-VK.dynamic_state.compute_transfer.single.transfer.blend_constants.after
+dEQP-VK.dynamic_state.compute_transfer.single.transfer.depth_bounds.before
+dEQP-VK.dynamic_state.compute_transfer.single.transfer.depth_bounds.after
+dEQP-VK.dynamic_state.compute_transfer.single.transfer.stencil_compare_mask.before
+dEQP-VK.dynamic_state.compute_transfer.single.transfer.stencil_compare_mask.after
+dEQP-VK.dynamic_state.compute_transfer.single.transfer.stencil_write_mask.before
+dEQP-VK.dynamic_state.compute_transfer.single.transfer.stencil_write_mask.after
+dEQP-VK.dynamic_state.compute_transfer.single.transfer.stencil_reference.before
+dEQP-VK.dynamic_state.compute_transfer.single.transfer.stencil_reference.after
+dEQP-VK.dynamic_state.compute_transfer.single.transfer.discard_rectangle_ext.before
+dEQP-VK.dynamic_state.compute_transfer.single.transfer.discard_rectangle_ext.after
+dEQP-VK.dynamic_state.compute_transfer.single.transfer.sample_locations_ext.before
+dEQP-VK.dynamic_state.compute_transfer.single.transfer.sample_locations_ext.after
+dEQP-VK.dynamic_state.compute_transfer.single.transfer.ray_tracing_pipeline_stack_size_khr.before
+dEQP-VK.dynamic_state.compute_transfer.single.transfer.ray_tracing_pipeline_stack_size_khr.after
+dEQP-VK.dynamic_state.compute_transfer.single.transfer.fragment_shading_rate_khr.before
+dEQP-VK.dynamic_state.compute_transfer.single.transfer.fragment_shading_rate_khr.after
+dEQP-VK.dynamic_state.compute_transfer.single.transfer.line_stipple_ext.before
+dEQP-VK.dynamic_state.compute_transfer.single.transfer.line_stipple_ext.after
+dEQP-VK.dynamic_state.compute_transfer.single.transfer.cull_mode_ext.before
+dEQP-VK.dynamic_state.compute_transfer.single.transfer.cull_mode_ext.after
+dEQP-VK.dynamic_state.compute_transfer.single.transfer.front_face_ext.before
+dEQP-VK.dynamic_state.compute_transfer.single.transfer.front_face_ext.after
+dEQP-VK.dynamic_state.compute_transfer.single.transfer.primitive_topology_ext.before
+dEQP-VK.dynamic_state.compute_transfer.single.transfer.primitive_topology_ext.after
+dEQP-VK.dynamic_state.compute_transfer.single.transfer.viewport_with_count_ext.before
+dEQP-VK.dynamic_state.compute_transfer.single.transfer.viewport_with_count_ext.after
+dEQP-VK.dynamic_state.compute_transfer.single.transfer.scissor_with_count_ext.before
+dEQP-VK.dynamic_state.compute_transfer.single.transfer.scissor_with_count_ext.after
+dEQP-VK.dynamic_state.compute_transfer.single.transfer.vertex_input_binding_stride_ext.before
+dEQP-VK.dynamic_state.compute_transfer.single.transfer.vertex_input_binding_stride_ext.after
+dEQP-VK.dynamic_state.compute_transfer.single.transfer.depth_test_enable_ext.before
+dEQP-VK.dynamic_state.compute_transfer.single.transfer.depth_test_enable_ext.after
+dEQP-VK.dynamic_state.compute_transfer.single.transfer.depth_write_enable_ext.before
+dEQP-VK.dynamic_state.compute_transfer.single.transfer.depth_write_enable_ext.after
+dEQP-VK.dynamic_state.compute_transfer.single.transfer.depth_compare_op_ext.before
+dEQP-VK.dynamic_state.compute_transfer.single.transfer.depth_compare_op_ext.after
+dEQP-VK.dynamic_state.compute_transfer.single.transfer.depth_bounds_test_enable_ext.before
+dEQP-VK.dynamic_state.compute_transfer.single.transfer.depth_bounds_test_enable_ext.after
+dEQP-VK.dynamic_state.compute_transfer.single.transfer.stencil_test_enable_ext.before
+dEQP-VK.dynamic_state.compute_transfer.single.transfer.stencil_test_enable_ext.after
+dEQP-VK.dynamic_state.compute_transfer.single.transfer.stencil_op_ext.before
+dEQP-VK.dynamic_state.compute_transfer.single.transfer.stencil_op_ext.after
+dEQP-VK.dynamic_state.compute_transfer.single.transfer.viewport_w_scaling_nv.before
+dEQP-VK.dynamic_state.compute_transfer.single.transfer.viewport_w_scaling_nv.after
+dEQP-VK.dynamic_state.compute_transfer.single.transfer.viewport_shading_rate_palette_nv.before
+dEQP-VK.dynamic_state.compute_transfer.single.transfer.viewport_shading_rate_palette_nv.after
+dEQP-VK.dynamic_state.compute_transfer.single.transfer.viewport_coarse_sample_order_nv.before
+dEQP-VK.dynamic_state.compute_transfer.single.transfer.viewport_coarse_sample_order_nv.after
+dEQP-VK.dynamic_state.compute_transfer.single.transfer.exclusive_scissor_nv.before
+dEQP-VK.dynamic_state.compute_transfer.single.transfer.exclusive_scissor_nv.after
+dEQP-VK.dynamic_state.compute_transfer.multi.compute.before
+dEQP-VK.dynamic_state.compute_transfer.multi.compute.after
+dEQP-VK.dynamic_state.compute_transfer.multi.transfer.before
+dEQP-VK.dynamic_state.compute_transfer.multi.transfer.after
+dEQP-VK.dynamic_state.inheritance.baseline
+dEQP-VK.dynamic_state.inheritance.primary
+dEQP-VK.dynamic_state.inheritance.secondary
+dEQP-VK.dynamic_state.inheritance.split
+dEQP-VK.dynamic_state.inheritance.primary_with_count
+dEQP-VK.dynamic_state.inheritance.secondary_with_count
 dEQP-VK.ssbo.layout.single_basic_type.std140.row_major_lowp_mat2_store_cols
 dEQP-VK.ssbo.layout.single_basic_type.std140.row_major_lowp_mat2_comp_access_store_cols
 dEQP-VK.ssbo.layout.single_basic_type.std140.row_major_mediump_mat2_store_cols
@@ -102542,7 +110917,6 @@
 dEQP-VK.ssbo.phys.layout.multi_nested_struct.single_buffer.scalar_comp_access_store_cols
 dEQP-VK.ssbo.phys.layout.multi_nested_struct.single_buffer.scalar_instance_array_store_cols
 dEQP-VK.ssbo.phys.layout.multi_nested_struct.single_buffer.scalar_instance_array_comp_access_store_cols
-dEQP-VK.ssbo.phys.layout.random.16bit.scalar.13
 dEQP-VK.query_pool.concurrent_queries.primary_command_buffer
 dEQP-VK.query_pool.concurrent_queries.secondary_command_buffer
 dEQP-VK.draw.indirect_draw.sequential.indirect_draw_param_count.triangle_list
@@ -102561,6 +110935,12 @@
 dEQP-VK.draw.indirect_draw.indexed.indirect_draw_param_count_instanced.no_first_instance.triangle_strip
 dEQP-VK.draw.indirect_draw.indexed.indirect_draw_param_count_instanced.first_instance.triangle_list
 dEQP-VK.draw.indirect_draw.indexed.indirect_draw_param_count_instanced.first_instance.triangle_strip
+dEQP-VK.draw.inverted_depth_ranges.depthclamp_deltasmall
+dEQP-VK.draw.inverted_depth_ranges.depthclamp_deltaone
+dEQP-VK.draw.inverted_depth_ranges.depthclamp_deltaone_bias_clamp_neg
+dEQP-VK.draw.inverted_depth_ranges.depthclamp_deltasmall_bias_clamp_pos
+dEQP-VK.draw.inverted_depth_ranges.nodepthclamp_deltaone_bias_clamp_neg
+dEQP-VK.draw.inverted_depth_ranges.nodepthclamp_deltasmall_bias_clamp_pos
 dEQP-VK.draw.shader_viewport_index.fragment_shader_implicit
 dEQP-VK.draw.shader_viewport_index.fragment_shader_1
 dEQP-VK.draw.shader_viewport_index.fragment_shader_2
@@ -102693,6 +111073,154 @@
 dEQP-VK.draw.depth_clamp.d32_sfloat_s8_uint_depth_bias_clamp_input_positive
 dEQP-VK.draw.depth_clamp.d32_sfloat_s8_uint_depth_range_unrestricted_negative
 dEQP-VK.draw.depth_clamp.d32_sfloat_s8_uint_depth_range_unrestricted_positive
+dEQP-VK.draw.ahb.triangle_list
+dEQP-VK.draw.ahb.triangle_list_layers_3
+dEQP-VK.draw.ahb.triangle_list_layers_5
+dEQP-VK.draw.ahb.triangle_list_layers_8
+dEQP-VK.draw.multiple_clears_within_render_pass.load_clear_draw_c_r8g8b8a8_unorm_triangle_strip
+dEQP-VK.draw.multiple_clears_within_render_pass.draw_clear_draw_c_r8g8b8a8_unorm_triangle_strip
+dEQP-VK.draw.multiple_clears_within_render_pass.clear_clear_draw_c_r8g8b8a8_unorm_triangle_strip
+dEQP-VK.draw.multiple_clears_within_render_pass.load_clear_c_r8g8b8a8_unorm_triangle_strip
+dEQP-VK.draw.multiple_clears_within_render_pass.draw_clear_c_r8g8b8a8_unorm_triangle_strip
+dEQP-VK.draw.multiple_clears_within_render_pass.clear_clear_c_r8g8b8a8_unorm_triangle_strip
+dEQP-VK.draw.multiple_clears_within_render_pass.load_clear_draw_c_r8g8b8a8_unorm_triangles
+dEQP-VK.draw.multiple_clears_within_render_pass.draw_clear_draw_c_r8g8b8a8_unorm_triangles
+dEQP-VK.draw.multiple_clears_within_render_pass.clear_clear_draw_c_r8g8b8a8_unorm_triangles
+dEQP-VK.draw.multiple_clears_within_render_pass.load_clear_c_r8g8b8a8_unorm_triangles
+dEQP-VK.draw.multiple_clears_within_render_pass.draw_clear_c_r8g8b8a8_unorm_triangles
+dEQP-VK.draw.multiple_clears_within_render_pass.clear_clear_c_r8g8b8a8_unorm_triangles
+dEQP-VK.draw.multiple_clears_within_render_pass.load_clear_draw_c_r8g8b8a8_unorm_big_triangle
+dEQP-VK.draw.multiple_clears_within_render_pass.draw_clear_draw_c_r8g8b8a8_unorm_big_triangle
+dEQP-VK.draw.multiple_clears_within_render_pass.clear_clear_draw_c_r8g8b8a8_unorm_big_triangle
+dEQP-VK.draw.multiple_clears_within_render_pass.load_clear_c_r8g8b8a8_unorm_big_triangle
+dEQP-VK.draw.multiple_clears_within_render_pass.draw_clear_c_r8g8b8a8_unorm_big_triangle
+dEQP-VK.draw.multiple_clears_within_render_pass.clear_clear_c_r8g8b8a8_unorm_big_triangle
+dEQP-VK.draw.multiple_clears_within_render_pass.load_clear_draw_c_r8g8b8a8_snorm_triangle_strip
+dEQP-VK.draw.multiple_clears_within_render_pass.draw_clear_draw_c_r8g8b8a8_snorm_triangle_strip
+dEQP-VK.draw.multiple_clears_within_render_pass.clear_clear_draw_c_r8g8b8a8_snorm_triangle_strip
+dEQP-VK.draw.multiple_clears_within_render_pass.load_clear_c_r8g8b8a8_snorm_triangle_strip
+dEQP-VK.draw.multiple_clears_within_render_pass.draw_clear_c_r8g8b8a8_snorm_triangle_strip
+dEQP-VK.draw.multiple_clears_within_render_pass.clear_clear_c_r8g8b8a8_snorm_triangle_strip
+dEQP-VK.draw.multiple_clears_within_render_pass.load_clear_draw_c_r8g8b8a8_snorm_triangles
+dEQP-VK.draw.multiple_clears_within_render_pass.draw_clear_draw_c_r8g8b8a8_snorm_triangles
+dEQP-VK.draw.multiple_clears_within_render_pass.clear_clear_draw_c_r8g8b8a8_snorm_triangles
+dEQP-VK.draw.multiple_clears_within_render_pass.load_clear_c_r8g8b8a8_snorm_triangles
+dEQP-VK.draw.multiple_clears_within_render_pass.draw_clear_c_r8g8b8a8_snorm_triangles
+dEQP-VK.draw.multiple_clears_within_render_pass.clear_clear_c_r8g8b8a8_snorm_triangles
+dEQP-VK.draw.multiple_clears_within_render_pass.load_clear_draw_c_r8g8b8a8_snorm_big_triangle
+dEQP-VK.draw.multiple_clears_within_render_pass.draw_clear_draw_c_r8g8b8a8_snorm_big_triangle
+dEQP-VK.draw.multiple_clears_within_render_pass.clear_clear_draw_c_r8g8b8a8_snorm_big_triangle
+dEQP-VK.draw.multiple_clears_within_render_pass.load_clear_c_r8g8b8a8_snorm_big_triangle
+dEQP-VK.draw.multiple_clears_within_render_pass.draw_clear_c_r8g8b8a8_snorm_big_triangle
+dEQP-VK.draw.multiple_clears_within_render_pass.clear_clear_c_r8g8b8a8_snorm_big_triangle
+dEQP-VK.draw.multiple_clears_within_render_pass.load_clear_draw_d_d32_sfloat_triangle_strip
+dEQP-VK.draw.multiple_clears_within_render_pass.draw_clear_draw_d_d32_sfloat_triangle_strip
+dEQP-VK.draw.multiple_clears_within_render_pass.clear_clear_draw_d_d32_sfloat_triangle_strip
+dEQP-VK.draw.multiple_clears_within_render_pass.load_clear_d_d32_sfloat_triangle_strip
+dEQP-VK.draw.multiple_clears_within_render_pass.draw_clear_d_d32_sfloat_triangle_strip
+dEQP-VK.draw.multiple_clears_within_render_pass.clear_clear_d_d32_sfloat_triangle_strip
+dEQP-VK.draw.multiple_clears_within_render_pass.load_clear_draw_d_d32_sfloat_triangles
+dEQP-VK.draw.multiple_clears_within_render_pass.draw_clear_draw_d_d32_sfloat_triangles
+dEQP-VK.draw.multiple_clears_within_render_pass.clear_clear_draw_d_d32_sfloat_triangles
+dEQP-VK.draw.multiple_clears_within_render_pass.load_clear_d_d32_sfloat_triangles
+dEQP-VK.draw.multiple_clears_within_render_pass.draw_clear_d_d32_sfloat_triangles
+dEQP-VK.draw.multiple_clears_within_render_pass.clear_clear_d_d32_sfloat_triangles
+dEQP-VK.draw.multiple_clears_within_render_pass.load_clear_draw_d_d32_sfloat_big_triangle
+dEQP-VK.draw.multiple_clears_within_render_pass.draw_clear_draw_d_d32_sfloat_big_triangle
+dEQP-VK.draw.multiple_clears_within_render_pass.clear_clear_draw_d_d32_sfloat_big_triangle
+dEQP-VK.draw.multiple_clears_within_render_pass.load_clear_d_d32_sfloat_big_triangle
+dEQP-VK.draw.multiple_clears_within_render_pass.draw_clear_d_d32_sfloat_big_triangle
+dEQP-VK.draw.multiple_clears_within_render_pass.clear_clear_d_d32_sfloat_big_triangle
+dEQP-VK.draw.multiple_clears_within_render_pass.load_clear_draw_d_d16_unorm_triangle_strip
+dEQP-VK.draw.multiple_clears_within_render_pass.draw_clear_draw_d_d16_unorm_triangle_strip
+dEQP-VK.draw.multiple_clears_within_render_pass.clear_clear_draw_d_d16_unorm_triangle_strip
+dEQP-VK.draw.multiple_clears_within_render_pass.load_clear_d_d16_unorm_triangle_strip
+dEQP-VK.draw.multiple_clears_within_render_pass.draw_clear_d_d16_unorm_triangle_strip
+dEQP-VK.draw.multiple_clears_within_render_pass.clear_clear_d_d16_unorm_triangle_strip
+dEQP-VK.draw.multiple_clears_within_render_pass.load_clear_draw_d_d16_unorm_triangles
+dEQP-VK.draw.multiple_clears_within_render_pass.draw_clear_draw_d_d16_unorm_triangles
+dEQP-VK.draw.multiple_clears_within_render_pass.clear_clear_draw_d_d16_unorm_triangles
+dEQP-VK.draw.multiple_clears_within_render_pass.load_clear_d_d16_unorm_triangles
+dEQP-VK.draw.multiple_clears_within_render_pass.draw_clear_d_d16_unorm_triangles
+dEQP-VK.draw.multiple_clears_within_render_pass.clear_clear_d_d16_unorm_triangles
+dEQP-VK.draw.multiple_clears_within_render_pass.load_clear_draw_d_d16_unorm_big_triangle
+dEQP-VK.draw.multiple_clears_within_render_pass.draw_clear_draw_d_d16_unorm_big_triangle
+dEQP-VK.draw.multiple_clears_within_render_pass.clear_clear_draw_d_d16_unorm_big_triangle
+dEQP-VK.draw.multiple_clears_within_render_pass.load_clear_d_d16_unorm_big_triangle
+dEQP-VK.draw.multiple_clears_within_render_pass.draw_clear_d_d16_unorm_big_triangle
+dEQP-VK.draw.multiple_clears_within_render_pass.clear_clear_d_d16_unorm_big_triangle
+dEQP-VK.draw.multiple_clears_within_render_pass.load_clear_draw_c_r8g8b8a8_unorm_d_d32_sfloat_triangle_strip
+dEQP-VK.draw.multiple_clears_within_render_pass.draw_clear_draw_c_r8g8b8a8_unorm_d_d32_sfloat_triangle_strip
+dEQP-VK.draw.multiple_clears_within_render_pass.clear_clear_draw_c_r8g8b8a8_unorm_d_d32_sfloat_triangle_strip
+dEQP-VK.draw.multiple_clears_within_render_pass.load_clear_c_r8g8b8a8_unorm_d_d32_sfloat_triangle_strip
+dEQP-VK.draw.multiple_clears_within_render_pass.draw_clear_c_r8g8b8a8_unorm_d_d32_sfloat_triangle_strip
+dEQP-VK.draw.multiple_clears_within_render_pass.clear_clear_c_r8g8b8a8_unorm_d_d32_sfloat_triangle_strip
+dEQP-VK.draw.multiple_clears_within_render_pass.load_clear_draw_c_r8g8b8a8_unorm_d_d32_sfloat_triangles
+dEQP-VK.draw.multiple_clears_within_render_pass.draw_clear_draw_c_r8g8b8a8_unorm_d_d32_sfloat_triangles
+dEQP-VK.draw.multiple_clears_within_render_pass.clear_clear_draw_c_r8g8b8a8_unorm_d_d32_sfloat_triangles
+dEQP-VK.draw.multiple_clears_within_render_pass.load_clear_c_r8g8b8a8_unorm_d_d32_sfloat_triangles
+dEQP-VK.draw.multiple_clears_within_render_pass.draw_clear_c_r8g8b8a8_unorm_d_d32_sfloat_triangles
+dEQP-VK.draw.multiple_clears_within_render_pass.clear_clear_c_r8g8b8a8_unorm_d_d32_sfloat_triangles
+dEQP-VK.draw.multiple_clears_within_render_pass.load_clear_draw_c_r8g8b8a8_unorm_d_d32_sfloat_big_triangle
+dEQP-VK.draw.multiple_clears_within_render_pass.draw_clear_draw_c_r8g8b8a8_unorm_d_d32_sfloat_big_triangle
+dEQP-VK.draw.multiple_clears_within_render_pass.clear_clear_draw_c_r8g8b8a8_unorm_d_d32_sfloat_big_triangle
+dEQP-VK.draw.multiple_clears_within_render_pass.load_clear_c_r8g8b8a8_unorm_d_d32_sfloat_big_triangle
+dEQP-VK.draw.multiple_clears_within_render_pass.draw_clear_c_r8g8b8a8_unorm_d_d32_sfloat_big_triangle
+dEQP-VK.draw.multiple_clears_within_render_pass.clear_clear_c_r8g8b8a8_unorm_d_d32_sfloat_big_triangle
+dEQP-VK.draw.multiple_clears_within_render_pass.load_clear_draw_c_r8g8b8a8_unorm_d_d16_unorm_triangle_strip
+dEQP-VK.draw.multiple_clears_within_render_pass.draw_clear_draw_c_r8g8b8a8_unorm_d_d16_unorm_triangle_strip
+dEQP-VK.draw.multiple_clears_within_render_pass.clear_clear_draw_c_r8g8b8a8_unorm_d_d16_unorm_triangle_strip
+dEQP-VK.draw.multiple_clears_within_render_pass.load_clear_c_r8g8b8a8_unorm_d_d16_unorm_triangle_strip
+dEQP-VK.draw.multiple_clears_within_render_pass.draw_clear_c_r8g8b8a8_unorm_d_d16_unorm_triangle_strip
+dEQP-VK.draw.multiple_clears_within_render_pass.clear_clear_c_r8g8b8a8_unorm_d_d16_unorm_triangle_strip
+dEQP-VK.draw.multiple_clears_within_render_pass.load_clear_draw_c_r8g8b8a8_unorm_d_d16_unorm_triangles
+dEQP-VK.draw.multiple_clears_within_render_pass.draw_clear_draw_c_r8g8b8a8_unorm_d_d16_unorm_triangles
+dEQP-VK.draw.multiple_clears_within_render_pass.clear_clear_draw_c_r8g8b8a8_unorm_d_d16_unorm_triangles
+dEQP-VK.draw.multiple_clears_within_render_pass.load_clear_c_r8g8b8a8_unorm_d_d16_unorm_triangles
+dEQP-VK.draw.multiple_clears_within_render_pass.draw_clear_c_r8g8b8a8_unorm_d_d16_unorm_triangles
+dEQP-VK.draw.multiple_clears_within_render_pass.clear_clear_c_r8g8b8a8_unorm_d_d16_unorm_triangles
+dEQP-VK.draw.multiple_clears_within_render_pass.load_clear_draw_c_r8g8b8a8_unorm_d_d16_unorm_big_triangle
+dEQP-VK.draw.multiple_clears_within_render_pass.draw_clear_draw_c_r8g8b8a8_unorm_d_d16_unorm_big_triangle
+dEQP-VK.draw.multiple_clears_within_render_pass.clear_clear_draw_c_r8g8b8a8_unorm_d_d16_unorm_big_triangle
+dEQP-VK.draw.multiple_clears_within_render_pass.load_clear_c_r8g8b8a8_unorm_d_d16_unorm_big_triangle
+dEQP-VK.draw.multiple_clears_within_render_pass.draw_clear_c_r8g8b8a8_unorm_d_d16_unorm_big_triangle
+dEQP-VK.draw.multiple_clears_within_render_pass.clear_clear_c_r8g8b8a8_unorm_d_d16_unorm_big_triangle
+dEQP-VK.draw.multiple_clears_within_render_pass.load_clear_draw_c_r8g8b8a8_snorm_d_d32_sfloat_triangle_strip
+dEQP-VK.draw.multiple_clears_within_render_pass.draw_clear_draw_c_r8g8b8a8_snorm_d_d32_sfloat_triangle_strip
+dEQP-VK.draw.multiple_clears_within_render_pass.clear_clear_draw_c_r8g8b8a8_snorm_d_d32_sfloat_triangle_strip
+dEQP-VK.draw.multiple_clears_within_render_pass.load_clear_c_r8g8b8a8_snorm_d_d32_sfloat_triangle_strip
+dEQP-VK.draw.multiple_clears_within_render_pass.draw_clear_c_r8g8b8a8_snorm_d_d32_sfloat_triangle_strip
+dEQP-VK.draw.multiple_clears_within_render_pass.clear_clear_c_r8g8b8a8_snorm_d_d32_sfloat_triangle_strip
+dEQP-VK.draw.multiple_clears_within_render_pass.load_clear_draw_c_r8g8b8a8_snorm_d_d32_sfloat_triangles
+dEQP-VK.draw.multiple_clears_within_render_pass.draw_clear_draw_c_r8g8b8a8_snorm_d_d32_sfloat_triangles
+dEQP-VK.draw.multiple_clears_within_render_pass.clear_clear_draw_c_r8g8b8a8_snorm_d_d32_sfloat_triangles
+dEQP-VK.draw.multiple_clears_within_render_pass.load_clear_c_r8g8b8a8_snorm_d_d32_sfloat_triangles
+dEQP-VK.draw.multiple_clears_within_render_pass.draw_clear_c_r8g8b8a8_snorm_d_d32_sfloat_triangles
+dEQP-VK.draw.multiple_clears_within_render_pass.clear_clear_c_r8g8b8a8_snorm_d_d32_sfloat_triangles
+dEQP-VK.draw.multiple_clears_within_render_pass.load_clear_draw_c_r8g8b8a8_snorm_d_d32_sfloat_big_triangle
+dEQP-VK.draw.multiple_clears_within_render_pass.draw_clear_draw_c_r8g8b8a8_snorm_d_d32_sfloat_big_triangle
+dEQP-VK.draw.multiple_clears_within_render_pass.clear_clear_draw_c_r8g8b8a8_snorm_d_d32_sfloat_big_triangle
+dEQP-VK.draw.multiple_clears_within_render_pass.load_clear_c_r8g8b8a8_snorm_d_d32_sfloat_big_triangle
+dEQP-VK.draw.multiple_clears_within_render_pass.draw_clear_c_r8g8b8a8_snorm_d_d32_sfloat_big_triangle
+dEQP-VK.draw.multiple_clears_within_render_pass.clear_clear_c_r8g8b8a8_snorm_d_d32_sfloat_big_triangle
+dEQP-VK.draw.multiple_clears_within_render_pass.load_clear_draw_c_r8g8b8a8_snorm_d_d16_unorm_triangle_strip
+dEQP-VK.draw.multiple_clears_within_render_pass.draw_clear_draw_c_r8g8b8a8_snorm_d_d16_unorm_triangle_strip
+dEQP-VK.draw.multiple_clears_within_render_pass.clear_clear_draw_c_r8g8b8a8_snorm_d_d16_unorm_triangle_strip
+dEQP-VK.draw.multiple_clears_within_render_pass.load_clear_c_r8g8b8a8_snorm_d_d16_unorm_triangle_strip
+dEQP-VK.draw.multiple_clears_within_render_pass.draw_clear_c_r8g8b8a8_snorm_d_d16_unorm_triangle_strip
+dEQP-VK.draw.multiple_clears_within_render_pass.clear_clear_c_r8g8b8a8_snorm_d_d16_unorm_triangle_strip
+dEQP-VK.draw.multiple_clears_within_render_pass.load_clear_draw_c_r8g8b8a8_snorm_d_d16_unorm_triangles
+dEQP-VK.draw.multiple_clears_within_render_pass.draw_clear_draw_c_r8g8b8a8_snorm_d_d16_unorm_triangles
+dEQP-VK.draw.multiple_clears_within_render_pass.clear_clear_draw_c_r8g8b8a8_snorm_d_d16_unorm_triangles
+dEQP-VK.draw.multiple_clears_within_render_pass.load_clear_c_r8g8b8a8_snorm_d_d16_unorm_triangles
+dEQP-VK.draw.multiple_clears_within_render_pass.draw_clear_c_r8g8b8a8_snorm_d_d16_unorm_triangles
+dEQP-VK.draw.multiple_clears_within_render_pass.clear_clear_c_r8g8b8a8_snorm_d_d16_unorm_triangles
+dEQP-VK.draw.multiple_clears_within_render_pass.load_clear_draw_c_r8g8b8a8_snorm_d_d16_unorm_big_triangle
+dEQP-VK.draw.multiple_clears_within_render_pass.draw_clear_draw_c_r8g8b8a8_snorm_d_d16_unorm_big_triangle
+dEQP-VK.draw.multiple_clears_within_render_pass.clear_clear_draw_c_r8g8b8a8_snorm_d_d16_unorm_big_triangle
+dEQP-VK.draw.multiple_clears_within_render_pass.load_clear_c_r8g8b8a8_snorm_d_d16_unorm_big_triangle
+dEQP-VK.draw.multiple_clears_within_render_pass.draw_clear_c_r8g8b8a8_snorm_d_d16_unorm_big_triangle
+dEQP-VK.draw.multiple_clears_within_render_pass.clear_clear_c_r8g8b8a8_snorm_d_d16_unorm_big_triangle
 dEQP-VK.compute.basic.max_local_size_x
 dEQP-VK.compute.basic.max_local_size_y
 dEQP-VK.compute.basic.max_local_size_z
@@ -107160,430 +115688,3278 @@
 dEQP-VK.compute.workgroup_memory_explicit_layout.copy_memory.basic
 dEQP-VK.compute.workgroup_memory_explicit_layout.copy_memory.two_invocations
 dEQP-VK.compute.workgroup_memory_explicit_layout.copy_memory.variable_pointers
-dEQP-VK.image.atomic_operations.add.1d.r32f_end_result
-dEQP-VK.image.atomic_operations.add.1d.r32f_intermediate_values
-dEQP-VK.image.atomic_operations.add.1d.r64ui_end_result
-dEQP-VK.image.atomic_operations.add.1d.r64ui_intermediate_values
-dEQP-VK.image.atomic_operations.add.1d.r64i_end_result
-dEQP-VK.image.atomic_operations.add.1d.r64i_intermediate_values
-dEQP-VK.image.atomic_operations.add.1d_array.r32f_end_result
-dEQP-VK.image.atomic_operations.add.1d_array.r32f_intermediate_values
-dEQP-VK.image.atomic_operations.add.1d_array.r64ui_end_result
-dEQP-VK.image.atomic_operations.add.1d_array.r64ui_intermediate_values
-dEQP-VK.image.atomic_operations.add.1d_array.r64i_end_result
-dEQP-VK.image.atomic_operations.add.1d_array.r64i_intermediate_values
-dEQP-VK.image.atomic_operations.add.2d.r32f_end_result
-dEQP-VK.image.atomic_operations.add.2d.r32f_intermediate_values
-dEQP-VK.image.atomic_operations.add.2d.r64ui_end_result
-dEQP-VK.image.atomic_operations.add.2d.r64ui_intermediate_values
-dEQP-VK.image.atomic_operations.add.2d.r64i_end_result
-dEQP-VK.image.atomic_operations.add.2d.r64i_intermediate_values
-dEQP-VK.image.atomic_operations.add.2d_array.r32f_end_result
-dEQP-VK.image.atomic_operations.add.2d_array.r32f_intermediate_values
-dEQP-VK.image.atomic_operations.add.2d_array.r64ui_end_result
-dEQP-VK.image.atomic_operations.add.2d_array.r64ui_intermediate_values
-dEQP-VK.image.atomic_operations.add.2d_array.r64i_end_result
-dEQP-VK.image.atomic_operations.add.2d_array.r64i_intermediate_values
-dEQP-VK.image.atomic_operations.add.3d.r32f_end_result
-dEQP-VK.image.atomic_operations.add.3d.r32f_intermediate_values
-dEQP-VK.image.atomic_operations.add.3d.r64ui_end_result
-dEQP-VK.image.atomic_operations.add.3d.r64ui_intermediate_values
-dEQP-VK.image.atomic_operations.add.3d.r64i_end_result
-dEQP-VK.image.atomic_operations.add.3d.r64i_intermediate_values
-dEQP-VK.image.atomic_operations.add.cube.r32f_end_result
-dEQP-VK.image.atomic_operations.add.cube.r32f_intermediate_values
-dEQP-VK.image.atomic_operations.add.cube.r64ui_end_result
-dEQP-VK.image.atomic_operations.add.cube.r64ui_intermediate_values
-dEQP-VK.image.atomic_operations.add.cube.r64i_end_result
-dEQP-VK.image.atomic_operations.add.cube.r64i_intermediate_values
-dEQP-VK.image.atomic_operations.add.cube_array.r32f_end_result
-dEQP-VK.image.atomic_operations.add.cube_array.r32f_intermediate_values
-dEQP-VK.image.atomic_operations.add.cube_array.r64ui_end_result
-dEQP-VK.image.atomic_operations.add.cube_array.r64ui_intermediate_values
-dEQP-VK.image.atomic_operations.add.cube_array.r64i_end_result
-dEQP-VK.image.atomic_operations.add.cube_array.r64i_intermediate_values
-dEQP-VK.image.atomic_operations.add.buffer.r32f_end_result
-dEQP-VK.image.atomic_operations.add.buffer.r32f_intermediate_values
-dEQP-VK.image.atomic_operations.sub.1d.r32ui_end_result
-dEQP-VK.image.atomic_operations.sub.1d.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.sub.1d.r32i_end_result
-dEQP-VK.image.atomic_operations.sub.1d.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.sub.1d.r64ui_end_result
-dEQP-VK.image.atomic_operations.sub.1d.r64ui_intermediate_values
-dEQP-VK.image.atomic_operations.sub.1d.r64i_end_result
-dEQP-VK.image.atomic_operations.sub.1d.r64i_intermediate_values
-dEQP-VK.image.atomic_operations.sub.1d_array.r32ui_end_result
-dEQP-VK.image.atomic_operations.sub.1d_array.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.sub.1d_array.r32i_end_result
-dEQP-VK.image.atomic_operations.sub.1d_array.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.sub.1d_array.r64ui_end_result
-dEQP-VK.image.atomic_operations.sub.1d_array.r64ui_intermediate_values
-dEQP-VK.image.atomic_operations.sub.1d_array.r64i_end_result
-dEQP-VK.image.atomic_operations.sub.1d_array.r64i_intermediate_values
-dEQP-VK.image.atomic_operations.sub.2d.r32ui_end_result
-dEQP-VK.image.atomic_operations.sub.2d.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.sub.2d.r32i_end_result
-dEQP-VK.image.atomic_operations.sub.2d.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.sub.2d.r64ui_end_result
-dEQP-VK.image.atomic_operations.sub.2d.r64ui_intermediate_values
-dEQP-VK.image.atomic_operations.sub.2d.r64i_end_result
-dEQP-VK.image.atomic_operations.sub.2d.r64i_intermediate_values
-dEQP-VK.image.atomic_operations.sub.2d_array.r32ui_end_result
-dEQP-VK.image.atomic_operations.sub.2d_array.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.sub.2d_array.r32i_end_result
-dEQP-VK.image.atomic_operations.sub.2d_array.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.sub.2d_array.r64ui_end_result
-dEQP-VK.image.atomic_operations.sub.2d_array.r64ui_intermediate_values
-dEQP-VK.image.atomic_operations.sub.2d_array.r64i_end_result
-dEQP-VK.image.atomic_operations.sub.2d_array.r64i_intermediate_values
-dEQP-VK.image.atomic_operations.sub.3d.r32ui_end_result
-dEQP-VK.image.atomic_operations.sub.3d.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.sub.3d.r32i_end_result
-dEQP-VK.image.atomic_operations.sub.3d.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.sub.3d.r64ui_end_result
-dEQP-VK.image.atomic_operations.sub.3d.r64ui_intermediate_values
-dEQP-VK.image.atomic_operations.sub.3d.r64i_end_result
-dEQP-VK.image.atomic_operations.sub.3d.r64i_intermediate_values
-dEQP-VK.image.atomic_operations.sub.cube.r32ui_end_result
-dEQP-VK.image.atomic_operations.sub.cube.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.sub.cube.r32i_end_result
-dEQP-VK.image.atomic_operations.sub.cube.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.sub.cube.r64ui_end_result
-dEQP-VK.image.atomic_operations.sub.cube.r64ui_intermediate_values
-dEQP-VK.image.atomic_operations.sub.cube.r64i_end_result
-dEQP-VK.image.atomic_operations.sub.cube.r64i_intermediate_values
-dEQP-VK.image.atomic_operations.sub.cube_array.r32ui_end_result
-dEQP-VK.image.atomic_operations.sub.cube_array.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.sub.cube_array.r32i_end_result
-dEQP-VK.image.atomic_operations.sub.cube_array.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.sub.cube_array.r64ui_end_result
-dEQP-VK.image.atomic_operations.sub.cube_array.r64ui_intermediate_values
-dEQP-VK.image.atomic_operations.sub.cube_array.r64i_end_result
-dEQP-VK.image.atomic_operations.sub.cube_array.r64i_intermediate_values
-dEQP-VK.image.atomic_operations.inc.1d.r32ui_end_result
-dEQP-VK.image.atomic_operations.inc.1d.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.inc.1d.r32i_end_result
-dEQP-VK.image.atomic_operations.inc.1d.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.inc.1d.r64ui_end_result
-dEQP-VK.image.atomic_operations.inc.1d.r64ui_intermediate_values
-dEQP-VK.image.atomic_operations.inc.1d.r64i_end_result
-dEQP-VK.image.atomic_operations.inc.1d.r64i_intermediate_values
-dEQP-VK.image.atomic_operations.inc.1d_array.r32ui_end_result
-dEQP-VK.image.atomic_operations.inc.1d_array.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.inc.1d_array.r32i_end_result
-dEQP-VK.image.atomic_operations.inc.1d_array.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.inc.1d_array.r64ui_end_result
-dEQP-VK.image.atomic_operations.inc.1d_array.r64ui_intermediate_values
-dEQP-VK.image.atomic_operations.inc.1d_array.r64i_end_result
-dEQP-VK.image.atomic_operations.inc.1d_array.r64i_intermediate_values
-dEQP-VK.image.atomic_operations.inc.2d.r32ui_end_result
-dEQP-VK.image.atomic_operations.inc.2d.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.inc.2d.r32i_end_result
-dEQP-VK.image.atomic_operations.inc.2d.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.inc.2d.r64ui_end_result
-dEQP-VK.image.atomic_operations.inc.2d.r64ui_intermediate_values
-dEQP-VK.image.atomic_operations.inc.2d.r64i_end_result
-dEQP-VK.image.atomic_operations.inc.2d.r64i_intermediate_values
-dEQP-VK.image.atomic_operations.inc.2d_array.r32ui_end_result
-dEQP-VK.image.atomic_operations.inc.2d_array.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.inc.2d_array.r32i_end_result
-dEQP-VK.image.atomic_operations.inc.2d_array.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.inc.2d_array.r64ui_end_result
-dEQP-VK.image.atomic_operations.inc.2d_array.r64ui_intermediate_values
-dEQP-VK.image.atomic_operations.inc.2d_array.r64i_end_result
-dEQP-VK.image.atomic_operations.inc.2d_array.r64i_intermediate_values
-dEQP-VK.image.atomic_operations.inc.3d.r32ui_end_result
-dEQP-VK.image.atomic_operations.inc.3d.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.inc.3d.r32i_end_result
-dEQP-VK.image.atomic_operations.inc.3d.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.inc.3d.r64ui_end_result
-dEQP-VK.image.atomic_operations.inc.3d.r64ui_intermediate_values
-dEQP-VK.image.atomic_operations.inc.3d.r64i_end_result
-dEQP-VK.image.atomic_operations.inc.3d.r64i_intermediate_values
-dEQP-VK.image.atomic_operations.inc.cube.r32ui_end_result
-dEQP-VK.image.atomic_operations.inc.cube.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.inc.cube.r32i_end_result
-dEQP-VK.image.atomic_operations.inc.cube.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.inc.cube.r64ui_end_result
-dEQP-VK.image.atomic_operations.inc.cube.r64ui_intermediate_values
-dEQP-VK.image.atomic_operations.inc.cube.r64i_end_result
-dEQP-VK.image.atomic_operations.inc.cube.r64i_intermediate_values
-dEQP-VK.image.atomic_operations.inc.cube_array.r32ui_end_result
-dEQP-VK.image.atomic_operations.inc.cube_array.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.inc.cube_array.r32i_end_result
-dEQP-VK.image.atomic_operations.inc.cube_array.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.inc.cube_array.r64ui_end_result
-dEQP-VK.image.atomic_operations.inc.cube_array.r64ui_intermediate_values
-dEQP-VK.image.atomic_operations.inc.cube_array.r64i_end_result
-dEQP-VK.image.atomic_operations.inc.cube_array.r64i_intermediate_values
-dEQP-VK.image.atomic_operations.dec.1d.r32ui_end_result
-dEQP-VK.image.atomic_operations.dec.1d.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.dec.1d.r32i_end_result
-dEQP-VK.image.atomic_operations.dec.1d.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.dec.1d.r64ui_end_result
-dEQP-VK.image.atomic_operations.dec.1d.r64ui_intermediate_values
-dEQP-VK.image.atomic_operations.dec.1d.r64i_end_result
-dEQP-VK.image.atomic_operations.dec.1d.r64i_intermediate_values
-dEQP-VK.image.atomic_operations.dec.1d_array.r32ui_end_result
-dEQP-VK.image.atomic_operations.dec.1d_array.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.dec.1d_array.r32i_end_result
-dEQP-VK.image.atomic_operations.dec.1d_array.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.dec.1d_array.r64ui_end_result
-dEQP-VK.image.atomic_operations.dec.1d_array.r64ui_intermediate_values
-dEQP-VK.image.atomic_operations.dec.1d_array.r64i_end_result
-dEQP-VK.image.atomic_operations.dec.1d_array.r64i_intermediate_values
-dEQP-VK.image.atomic_operations.dec.2d.r32ui_end_result
-dEQP-VK.image.atomic_operations.dec.2d.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.dec.2d.r32i_end_result
-dEQP-VK.image.atomic_operations.dec.2d.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.dec.2d.r64ui_end_result
-dEQP-VK.image.atomic_operations.dec.2d.r64ui_intermediate_values
-dEQP-VK.image.atomic_operations.dec.2d.r64i_end_result
-dEQP-VK.image.atomic_operations.dec.2d.r64i_intermediate_values
-dEQP-VK.image.atomic_operations.dec.2d_array.r32ui_end_result
-dEQP-VK.image.atomic_operations.dec.2d_array.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.dec.2d_array.r32i_end_result
-dEQP-VK.image.atomic_operations.dec.2d_array.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.dec.2d_array.r64ui_end_result
-dEQP-VK.image.atomic_operations.dec.2d_array.r64ui_intermediate_values
-dEQP-VK.image.atomic_operations.dec.2d_array.r64i_end_result
-dEQP-VK.image.atomic_operations.dec.2d_array.r64i_intermediate_values
-dEQP-VK.image.atomic_operations.dec.3d.r32ui_end_result
-dEQP-VK.image.atomic_operations.dec.3d.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.dec.3d.r32i_end_result
-dEQP-VK.image.atomic_operations.dec.3d.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.dec.3d.r64ui_end_result
-dEQP-VK.image.atomic_operations.dec.3d.r64ui_intermediate_values
-dEQP-VK.image.atomic_operations.dec.3d.r64i_end_result
-dEQP-VK.image.atomic_operations.dec.3d.r64i_intermediate_values
-dEQP-VK.image.atomic_operations.dec.cube.r32ui_end_result
-dEQP-VK.image.atomic_operations.dec.cube.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.dec.cube.r32i_end_result
-dEQP-VK.image.atomic_operations.dec.cube.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.dec.cube.r64ui_end_result
-dEQP-VK.image.atomic_operations.dec.cube.r64ui_intermediate_values
-dEQP-VK.image.atomic_operations.dec.cube.r64i_end_result
-dEQP-VK.image.atomic_operations.dec.cube.r64i_intermediate_values
-dEQP-VK.image.atomic_operations.dec.cube_array.r32ui_end_result
-dEQP-VK.image.atomic_operations.dec.cube_array.r32ui_intermediate_values
-dEQP-VK.image.atomic_operations.dec.cube_array.r32i_end_result
-dEQP-VK.image.atomic_operations.dec.cube_array.r32i_intermediate_values
-dEQP-VK.image.atomic_operations.dec.cube_array.r64ui_end_result
-dEQP-VK.image.atomic_operations.dec.cube_array.r64ui_intermediate_values
-dEQP-VK.image.atomic_operations.dec.cube_array.r64i_end_result
-dEQP-VK.image.atomic_operations.dec.cube_array.r64i_intermediate_values
-dEQP-VK.image.atomic_operations.min.1d.r64ui_end_result
-dEQP-VK.image.atomic_operations.min.1d.r64ui_intermediate_values
-dEQP-VK.image.atomic_operations.min.1d.r64i_end_result
-dEQP-VK.image.atomic_operations.min.1d.r64i_intermediate_values
-dEQP-VK.image.atomic_operations.min.1d_array.r64ui_end_result
-dEQP-VK.image.atomic_operations.min.1d_array.r64ui_intermediate_values
-dEQP-VK.image.atomic_operations.min.1d_array.r64i_end_result
-dEQP-VK.image.atomic_operations.min.1d_array.r64i_intermediate_values
-dEQP-VK.image.atomic_operations.min.2d.r64ui_end_result
-dEQP-VK.image.atomic_operations.min.2d.r64ui_intermediate_values
-dEQP-VK.image.atomic_operations.min.2d.r64i_end_result
-dEQP-VK.image.atomic_operations.min.2d.r64i_intermediate_values
-dEQP-VK.image.atomic_operations.min.2d_array.r64ui_end_result
-dEQP-VK.image.atomic_operations.min.2d_array.r64ui_intermediate_values
-dEQP-VK.image.atomic_operations.min.2d_array.r64i_end_result
-dEQP-VK.image.atomic_operations.min.2d_array.r64i_intermediate_values
-dEQP-VK.image.atomic_operations.min.3d.r64ui_end_result
-dEQP-VK.image.atomic_operations.min.3d.r64ui_intermediate_values
-dEQP-VK.image.atomic_operations.min.3d.r64i_end_result
-dEQP-VK.image.atomic_operations.min.3d.r64i_intermediate_values
-dEQP-VK.image.atomic_operations.min.cube.r64ui_end_result
-dEQP-VK.image.atomic_operations.min.cube.r64ui_intermediate_values
-dEQP-VK.image.atomic_operations.min.cube.r64i_end_result
-dEQP-VK.image.atomic_operations.min.cube.r64i_intermediate_values
-dEQP-VK.image.atomic_operations.min.cube_array.r64ui_end_result
-dEQP-VK.image.atomic_operations.min.cube_array.r64ui_intermediate_values
-dEQP-VK.image.atomic_operations.min.cube_array.r64i_end_result
-dEQP-VK.image.atomic_operations.min.cube_array.r64i_intermediate_values
-dEQP-VK.image.atomic_operations.max.1d.r64ui_end_result
-dEQP-VK.image.atomic_operations.max.1d.r64ui_intermediate_values
-dEQP-VK.image.atomic_operations.max.1d.r64i_end_result
-dEQP-VK.image.atomic_operations.max.1d.r64i_intermediate_values
-dEQP-VK.image.atomic_operations.max.1d_array.r64ui_end_result
-dEQP-VK.image.atomic_operations.max.1d_array.r64ui_intermediate_values
-dEQP-VK.image.atomic_operations.max.1d_array.r64i_end_result
-dEQP-VK.image.atomic_operations.max.1d_array.r64i_intermediate_values
-dEQP-VK.image.atomic_operations.max.2d.r64ui_end_result
-dEQP-VK.image.atomic_operations.max.2d.r64ui_intermediate_values
-dEQP-VK.image.atomic_operations.max.2d.r64i_end_result
-dEQP-VK.image.atomic_operations.max.2d.r64i_intermediate_values
-dEQP-VK.image.atomic_operations.max.2d_array.r64ui_end_result
-dEQP-VK.image.atomic_operations.max.2d_array.r64ui_intermediate_values
-dEQP-VK.image.atomic_operations.max.2d_array.r64i_end_result
-dEQP-VK.image.atomic_operations.max.2d_array.r64i_intermediate_values
-dEQP-VK.image.atomic_operations.max.3d.r64ui_end_result
-dEQP-VK.image.atomic_operations.max.3d.r64ui_intermediate_values
-dEQP-VK.image.atomic_operations.max.3d.r64i_end_result
-dEQP-VK.image.atomic_operations.max.3d.r64i_intermediate_values
-dEQP-VK.image.atomic_operations.max.cube.r64ui_end_result
-dEQP-VK.image.atomic_operations.max.cube.r64ui_intermediate_values
-dEQP-VK.image.atomic_operations.max.cube.r64i_end_result
-dEQP-VK.image.atomic_operations.max.cube.r64i_intermediate_values
-dEQP-VK.image.atomic_operations.max.cube_array.r64ui_end_result
-dEQP-VK.image.atomic_operations.max.cube_array.r64ui_intermediate_values
-dEQP-VK.image.atomic_operations.max.cube_array.r64i_end_result
-dEQP-VK.image.atomic_operations.max.cube_array.r64i_intermediate_values
-dEQP-VK.image.atomic_operations.and.1d.r64ui_end_result
-dEQP-VK.image.atomic_operations.and.1d.r64ui_intermediate_values
-dEQP-VK.image.atomic_operations.and.1d.r64i_end_result
-dEQP-VK.image.atomic_operations.and.1d.r64i_intermediate_values
-dEQP-VK.image.atomic_operations.and.1d_array.r64ui_end_result
-dEQP-VK.image.atomic_operations.and.1d_array.r64ui_intermediate_values
-dEQP-VK.image.atomic_operations.and.1d_array.r64i_end_result
-dEQP-VK.image.atomic_operations.and.1d_array.r64i_intermediate_values
-dEQP-VK.image.atomic_operations.and.2d.r64ui_end_result
-dEQP-VK.image.atomic_operations.and.2d.r64ui_intermediate_values
-dEQP-VK.image.atomic_operations.and.2d.r64i_end_result
-dEQP-VK.image.atomic_operations.and.2d.r64i_intermediate_values
-dEQP-VK.image.atomic_operations.and.2d_array.r64ui_end_result
-dEQP-VK.image.atomic_operations.and.2d_array.r64ui_intermediate_values
-dEQP-VK.image.atomic_operations.and.2d_array.r64i_end_result
-dEQP-VK.image.atomic_operations.and.2d_array.r64i_intermediate_values
-dEQP-VK.image.atomic_operations.and.3d.r64ui_end_result
-dEQP-VK.image.atomic_operations.and.3d.r64ui_intermediate_values
-dEQP-VK.image.atomic_operations.and.3d.r64i_end_result
-dEQP-VK.image.atomic_operations.and.3d.r64i_intermediate_values
-dEQP-VK.image.atomic_operations.and.cube.r64ui_end_result
-dEQP-VK.image.atomic_operations.and.cube.r64ui_intermediate_values
-dEQP-VK.image.atomic_operations.and.cube.r64i_end_result
-dEQP-VK.image.atomic_operations.and.cube.r64i_intermediate_values
-dEQP-VK.image.atomic_operations.and.cube_array.r64ui_end_result
-dEQP-VK.image.atomic_operations.and.cube_array.r64ui_intermediate_values
-dEQP-VK.image.atomic_operations.and.cube_array.r64i_end_result
-dEQP-VK.image.atomic_operations.and.cube_array.r64i_intermediate_values
-dEQP-VK.image.atomic_operations.or.1d.r64ui_end_result
-dEQP-VK.image.atomic_operations.or.1d.r64ui_intermediate_values
-dEQP-VK.image.atomic_operations.or.1d.r64i_end_result
-dEQP-VK.image.atomic_operations.or.1d.r64i_intermediate_values
-dEQP-VK.image.atomic_operations.or.1d_array.r64ui_end_result
-dEQP-VK.image.atomic_operations.or.1d_array.r64ui_intermediate_values
-dEQP-VK.image.atomic_operations.or.1d_array.r64i_end_result
-dEQP-VK.image.atomic_operations.or.1d_array.r64i_intermediate_values
-dEQP-VK.image.atomic_operations.or.2d.r64ui_end_result
-dEQP-VK.image.atomic_operations.or.2d.r64ui_intermediate_values
-dEQP-VK.image.atomic_operations.or.2d.r64i_end_result
-dEQP-VK.image.atomic_operations.or.2d.r64i_intermediate_values
-dEQP-VK.image.atomic_operations.or.2d_array.r64ui_end_result
-dEQP-VK.image.atomic_operations.or.2d_array.r64ui_intermediate_values
-dEQP-VK.image.atomic_operations.or.2d_array.r64i_end_result
-dEQP-VK.image.atomic_operations.or.2d_array.r64i_intermediate_values
-dEQP-VK.image.atomic_operations.or.3d.r64ui_end_result
-dEQP-VK.image.atomic_operations.or.3d.r64ui_intermediate_values
-dEQP-VK.image.atomic_operations.or.3d.r64i_end_result
-dEQP-VK.image.atomic_operations.or.3d.r64i_intermediate_values
-dEQP-VK.image.atomic_operations.or.cube.r64ui_end_result
-dEQP-VK.image.atomic_operations.or.cube.r64ui_intermediate_values
-dEQP-VK.image.atomic_operations.or.cube.r64i_end_result
-dEQP-VK.image.atomic_operations.or.cube.r64i_intermediate_values
-dEQP-VK.image.atomic_operations.or.cube_array.r64ui_end_result
-dEQP-VK.image.atomic_operations.or.cube_array.r64ui_intermediate_values
-dEQP-VK.image.atomic_operations.or.cube_array.r64i_end_result
-dEQP-VK.image.atomic_operations.or.cube_array.r64i_intermediate_values
-dEQP-VK.image.atomic_operations.xor.1d.r64ui_end_result
-dEQP-VK.image.atomic_operations.xor.1d.r64ui_intermediate_values
-dEQP-VK.image.atomic_operations.xor.1d.r64i_end_result
-dEQP-VK.image.atomic_operations.xor.1d.r64i_intermediate_values
-dEQP-VK.image.atomic_operations.xor.1d_array.r64ui_end_result
-dEQP-VK.image.atomic_operations.xor.1d_array.r64ui_intermediate_values
-dEQP-VK.image.atomic_operations.xor.1d_array.r64i_end_result
-dEQP-VK.image.atomic_operations.xor.1d_array.r64i_intermediate_values
-dEQP-VK.image.atomic_operations.xor.2d.r64ui_end_result
-dEQP-VK.image.atomic_operations.xor.2d.r64ui_intermediate_values
-dEQP-VK.image.atomic_operations.xor.2d.r64i_end_result
-dEQP-VK.image.atomic_operations.xor.2d.r64i_intermediate_values
-dEQP-VK.image.atomic_operations.xor.2d_array.r64ui_end_result
-dEQP-VK.image.atomic_operations.xor.2d_array.r64ui_intermediate_values
-dEQP-VK.image.atomic_operations.xor.2d_array.r64i_end_result
-dEQP-VK.image.atomic_operations.xor.2d_array.r64i_intermediate_values
-dEQP-VK.image.atomic_operations.xor.3d.r64ui_end_result
-dEQP-VK.image.atomic_operations.xor.3d.r64ui_intermediate_values
-dEQP-VK.image.atomic_operations.xor.3d.r64i_end_result
-dEQP-VK.image.atomic_operations.xor.3d.r64i_intermediate_values
-dEQP-VK.image.atomic_operations.xor.cube.r64ui_end_result
-dEQP-VK.image.atomic_operations.xor.cube.r64ui_intermediate_values
-dEQP-VK.image.atomic_operations.xor.cube.r64i_end_result
-dEQP-VK.image.atomic_operations.xor.cube.r64i_intermediate_values
-dEQP-VK.image.atomic_operations.xor.cube_array.r64ui_end_result
-dEQP-VK.image.atomic_operations.xor.cube_array.r64ui_intermediate_values
-dEQP-VK.image.atomic_operations.xor.cube_array.r64i_end_result
-dEQP-VK.image.atomic_operations.xor.cube_array.r64i_intermediate_values
-dEQP-VK.image.atomic_operations.exchange.1d.r32f_end_result
-dEQP-VK.image.atomic_operations.exchange.1d.r32f_intermediate_values
-dEQP-VK.image.atomic_operations.exchange.1d.r64ui_end_result
-dEQP-VK.image.atomic_operations.exchange.1d.r64ui_intermediate_values
-dEQP-VK.image.atomic_operations.exchange.1d.r64i_end_result
-dEQP-VK.image.atomic_operations.exchange.1d.r64i_intermediate_values
-dEQP-VK.image.atomic_operations.exchange.1d_array.r32f_end_result
-dEQP-VK.image.atomic_operations.exchange.1d_array.r32f_intermediate_values
-dEQP-VK.image.atomic_operations.exchange.1d_array.r64ui_end_result
-dEQP-VK.image.atomic_operations.exchange.1d_array.r64ui_intermediate_values
-dEQP-VK.image.atomic_operations.exchange.1d_array.r64i_end_result
-dEQP-VK.image.atomic_operations.exchange.1d_array.r64i_intermediate_values
-dEQP-VK.image.atomic_operations.exchange.2d.r32f_end_result
-dEQP-VK.image.atomic_operations.exchange.2d.r32f_intermediate_values
-dEQP-VK.image.atomic_operations.exchange.2d.r64ui_end_result
-dEQP-VK.image.atomic_operations.exchange.2d.r64ui_intermediate_values
-dEQP-VK.image.atomic_operations.exchange.2d.r64i_end_result
-dEQP-VK.image.atomic_operations.exchange.2d.r64i_intermediate_values
-dEQP-VK.image.atomic_operations.exchange.2d_array.r32f_end_result
-dEQP-VK.image.atomic_operations.exchange.2d_array.r32f_intermediate_values
-dEQP-VK.image.atomic_operations.exchange.2d_array.r64ui_end_result
-dEQP-VK.image.atomic_operations.exchange.2d_array.r64ui_intermediate_values
-dEQP-VK.image.atomic_operations.exchange.2d_array.r64i_end_result
-dEQP-VK.image.atomic_operations.exchange.2d_array.r64i_intermediate_values
-dEQP-VK.image.atomic_operations.exchange.3d.r32f_end_result
-dEQP-VK.image.atomic_operations.exchange.3d.r32f_intermediate_values
-dEQP-VK.image.atomic_operations.exchange.3d.r64ui_end_result
-dEQP-VK.image.atomic_operations.exchange.3d.r64ui_intermediate_values
-dEQP-VK.image.atomic_operations.exchange.3d.r64i_end_result
-dEQP-VK.image.atomic_operations.exchange.3d.r64i_intermediate_values
-dEQP-VK.image.atomic_operations.exchange.cube.r32f_end_result
-dEQP-VK.image.atomic_operations.exchange.cube.r32f_intermediate_values
-dEQP-VK.image.atomic_operations.exchange.cube.r64ui_end_result
-dEQP-VK.image.atomic_operations.exchange.cube.r64ui_intermediate_values
-dEQP-VK.image.atomic_operations.exchange.cube.r64i_end_result
-dEQP-VK.image.atomic_operations.exchange.cube.r64i_intermediate_values
-dEQP-VK.image.atomic_operations.exchange.cube_array.r32f_end_result
-dEQP-VK.image.atomic_operations.exchange.cube_array.r32f_intermediate_values
-dEQP-VK.image.atomic_operations.exchange.cube_array.r64ui_end_result
-dEQP-VK.image.atomic_operations.exchange.cube_array.r64ui_intermediate_values
-dEQP-VK.image.atomic_operations.exchange.cube_array.r64i_end_result
-dEQP-VK.image.atomic_operations.exchange.cube_array.r64i_intermediate_values
-dEQP-VK.image.atomic_operations.exchange.buffer.r32f_end_result
-dEQP-VK.image.atomic_operations.exchange.buffer.r32f_intermediate_values
-dEQP-VK.image.atomic_operations.compare_exchange.1d.r64ui_end_result
-dEQP-VK.image.atomic_operations.compare_exchange.1d.r64ui_intermediate_values
-dEQP-VK.image.atomic_operations.compare_exchange.1d.r64i_end_result
-dEQP-VK.image.atomic_operations.compare_exchange.1d.r64i_intermediate_values
-dEQP-VK.image.atomic_operations.compare_exchange.1d_array.r64ui_end_result
-dEQP-VK.image.atomic_operations.compare_exchange.1d_array.r64ui_intermediate_values
-dEQP-VK.image.atomic_operations.compare_exchange.1d_array.r64i_end_result
-dEQP-VK.image.atomic_operations.compare_exchange.1d_array.r64i_intermediate_values
-dEQP-VK.image.atomic_operations.compare_exchange.2d.r64ui_end_result
-dEQP-VK.image.atomic_operations.compare_exchange.2d.r64ui_intermediate_values
-dEQP-VK.image.atomic_operations.compare_exchange.2d.r64i_end_result
-dEQP-VK.image.atomic_operations.compare_exchange.2d.r64i_intermediate_values
-dEQP-VK.image.atomic_operations.compare_exchange.2d_array.r64ui_end_result
-dEQP-VK.image.atomic_operations.compare_exchange.2d_array.r64ui_intermediate_values
-dEQP-VK.image.atomic_operations.compare_exchange.2d_array.r64i_end_result
-dEQP-VK.image.atomic_operations.compare_exchange.2d_array.r64i_intermediate_values
-dEQP-VK.image.atomic_operations.compare_exchange.3d.r64ui_end_result
-dEQP-VK.image.atomic_operations.compare_exchange.3d.r64ui_intermediate_values
-dEQP-VK.image.atomic_operations.compare_exchange.3d.r64i_end_result
-dEQP-VK.image.atomic_operations.compare_exchange.3d.r64i_intermediate_values
-dEQP-VK.image.atomic_operations.compare_exchange.cube.r64ui_end_result
-dEQP-VK.image.atomic_operations.compare_exchange.cube.r64ui_intermediate_values
-dEQP-VK.image.atomic_operations.compare_exchange.cube.r64i_end_result
-dEQP-VK.image.atomic_operations.compare_exchange.cube.r64i_intermediate_values
-dEQP-VK.image.atomic_operations.compare_exchange.cube_array.r64ui_end_result
-dEQP-VK.image.atomic_operations.compare_exchange.cube_array.r64ui_intermediate_values
-dEQP-VK.image.atomic_operations.compare_exchange.cube_array.r64i_end_result
-dEQP-VK.image.atomic_operations.compare_exchange.cube_array.r64i_intermediate_values
+dEQP-VK.image.swapchain_mutable.headless.2d.r8g8b8a8_unorm_r8g8b8a8_snorm_clear_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.r8g8b8a8_unorm_r8g8b8a8_snorm_clear_load_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.r8g8b8a8_unorm_r8g8b8a8_snorm_clear_texture_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.r8g8b8a8_unorm_r8g8b8a8_snorm_copy_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.r8g8b8a8_unorm_r8g8b8a8_snorm_copy_load_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.r8g8b8a8_unorm_r8g8b8a8_snorm_copy_texture_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.r8g8b8a8_unorm_r8g8b8a8_snorm_store_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.r8g8b8a8_unorm_r8g8b8a8_snorm_store_load_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.r8g8b8a8_unorm_r8g8b8a8_snorm_store_texture_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.r8g8b8a8_unorm_r8g8b8a8_snorm_draw_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.r8g8b8a8_unorm_r8g8b8a8_snorm_draw_load_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.r8g8b8a8_unorm_r8g8b8a8_snorm_draw_texture_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.r8g8b8a8_unorm_r8g8b8a8_srgb_clear_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.r8g8b8a8_unorm_r8g8b8a8_srgb_copy_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.r8g8b8a8_unorm_r8g8b8a8_srgb_draw_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.r8g8b8a8_unorm_b8g8r8a8_unorm_clear_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.r8g8b8a8_unorm_b8g8r8a8_unorm_copy_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.r8g8b8a8_unorm_b8g8r8a8_unorm_draw_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.r8g8b8a8_unorm_b8g8r8a8_snorm_clear_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.r8g8b8a8_unorm_b8g8r8a8_snorm_copy_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.r8g8b8a8_unorm_b8g8r8a8_snorm_draw_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.r8g8b8a8_unorm_b8g8r8a8_srgb_clear_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.r8g8b8a8_unorm_b8g8r8a8_srgb_copy_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.r8g8b8a8_unorm_b8g8r8a8_srgb_draw_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.r8g8b8a8_snorm_r8g8b8a8_unorm_clear_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.r8g8b8a8_snorm_r8g8b8a8_unorm_clear_load_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.r8g8b8a8_snorm_r8g8b8a8_unorm_clear_texture_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.r8g8b8a8_snorm_r8g8b8a8_unorm_copy_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.r8g8b8a8_snorm_r8g8b8a8_unorm_copy_load_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.r8g8b8a8_snorm_r8g8b8a8_unorm_copy_texture_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.r8g8b8a8_snorm_r8g8b8a8_unorm_store_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.r8g8b8a8_snorm_r8g8b8a8_unorm_store_load_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.r8g8b8a8_snorm_r8g8b8a8_unorm_store_texture_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.r8g8b8a8_snorm_r8g8b8a8_unorm_draw_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.r8g8b8a8_snorm_r8g8b8a8_unorm_draw_load_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.r8g8b8a8_snorm_r8g8b8a8_unorm_draw_texture_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.r8g8b8a8_snorm_r8g8b8a8_srgb_clear_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.r8g8b8a8_snorm_r8g8b8a8_srgb_copy_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.r8g8b8a8_snorm_r8g8b8a8_srgb_draw_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.r8g8b8a8_snorm_b8g8r8a8_unorm_clear_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.r8g8b8a8_snorm_b8g8r8a8_unorm_copy_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.r8g8b8a8_snorm_b8g8r8a8_unorm_draw_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.r8g8b8a8_snorm_b8g8r8a8_snorm_clear_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.r8g8b8a8_snorm_b8g8r8a8_snorm_copy_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.r8g8b8a8_snorm_b8g8r8a8_snorm_draw_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.r8g8b8a8_snorm_b8g8r8a8_srgb_clear_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.r8g8b8a8_snorm_b8g8r8a8_srgb_copy_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.r8g8b8a8_snorm_b8g8r8a8_srgb_draw_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.r8g8b8a8_srgb_r8g8b8a8_unorm_clear_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.r8g8b8a8_srgb_r8g8b8a8_unorm_clear_load_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.r8g8b8a8_srgb_r8g8b8a8_unorm_clear_texture_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.r8g8b8a8_srgb_r8g8b8a8_unorm_copy_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.r8g8b8a8_srgb_r8g8b8a8_unorm_copy_load_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.r8g8b8a8_srgb_r8g8b8a8_unorm_copy_texture_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.r8g8b8a8_srgb_r8g8b8a8_unorm_store_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.r8g8b8a8_srgb_r8g8b8a8_unorm_store_load_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.r8g8b8a8_srgb_r8g8b8a8_unorm_store_texture_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.r8g8b8a8_srgb_r8g8b8a8_unorm_draw_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.r8g8b8a8_srgb_r8g8b8a8_unorm_draw_load_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.r8g8b8a8_srgb_r8g8b8a8_unorm_draw_texture_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.r8g8b8a8_srgb_r8g8b8a8_snorm_clear_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.r8g8b8a8_srgb_r8g8b8a8_snorm_clear_load_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.r8g8b8a8_srgb_r8g8b8a8_snorm_clear_texture_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.r8g8b8a8_srgb_r8g8b8a8_snorm_copy_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.r8g8b8a8_srgb_r8g8b8a8_snorm_copy_load_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.r8g8b8a8_srgb_r8g8b8a8_snorm_copy_texture_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.r8g8b8a8_srgb_r8g8b8a8_snorm_store_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.r8g8b8a8_srgb_r8g8b8a8_snorm_store_load_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.r8g8b8a8_srgb_r8g8b8a8_snorm_store_texture_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.r8g8b8a8_srgb_r8g8b8a8_snorm_draw_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.r8g8b8a8_srgb_r8g8b8a8_snorm_draw_load_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.r8g8b8a8_srgb_r8g8b8a8_snorm_draw_texture_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.r8g8b8a8_srgb_b8g8r8a8_unorm_clear_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.r8g8b8a8_srgb_b8g8r8a8_unorm_copy_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.r8g8b8a8_srgb_b8g8r8a8_unorm_draw_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.r8g8b8a8_srgb_b8g8r8a8_snorm_clear_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.r8g8b8a8_srgb_b8g8r8a8_snorm_copy_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.r8g8b8a8_srgb_b8g8r8a8_snorm_draw_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.r8g8b8a8_srgb_b8g8r8a8_srgb_clear_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.r8g8b8a8_srgb_b8g8r8a8_srgb_copy_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.r8g8b8a8_srgb_b8g8r8a8_srgb_draw_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.b8g8r8a8_unorm_r8g8b8a8_unorm_clear_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.b8g8r8a8_unorm_r8g8b8a8_unorm_clear_load_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.b8g8r8a8_unorm_r8g8b8a8_unorm_clear_texture_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.b8g8r8a8_unorm_r8g8b8a8_unorm_copy_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.b8g8r8a8_unorm_r8g8b8a8_unorm_copy_load_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.b8g8r8a8_unorm_r8g8b8a8_unorm_copy_texture_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.b8g8r8a8_unorm_r8g8b8a8_unorm_store_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.b8g8r8a8_unorm_r8g8b8a8_unorm_store_load_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.b8g8r8a8_unorm_r8g8b8a8_unorm_store_texture_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.b8g8r8a8_unorm_r8g8b8a8_unorm_draw_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.b8g8r8a8_unorm_r8g8b8a8_unorm_draw_load_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.b8g8r8a8_unorm_r8g8b8a8_unorm_draw_texture_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.b8g8r8a8_unorm_r8g8b8a8_snorm_clear_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.b8g8r8a8_unorm_r8g8b8a8_snorm_clear_load_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.b8g8r8a8_unorm_r8g8b8a8_snorm_clear_texture_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.b8g8r8a8_unorm_r8g8b8a8_snorm_copy_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.b8g8r8a8_unorm_r8g8b8a8_snorm_copy_load_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.b8g8r8a8_unorm_r8g8b8a8_snorm_copy_texture_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.b8g8r8a8_unorm_r8g8b8a8_snorm_store_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.b8g8r8a8_unorm_r8g8b8a8_snorm_store_load_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.b8g8r8a8_unorm_r8g8b8a8_snorm_store_texture_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.b8g8r8a8_unorm_r8g8b8a8_snorm_draw_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.b8g8r8a8_unorm_r8g8b8a8_snorm_draw_load_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.b8g8r8a8_unorm_r8g8b8a8_snorm_draw_texture_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.b8g8r8a8_unorm_r8g8b8a8_srgb_clear_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.b8g8r8a8_unorm_r8g8b8a8_srgb_copy_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.b8g8r8a8_unorm_r8g8b8a8_srgb_draw_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.b8g8r8a8_unorm_b8g8r8a8_snorm_clear_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.b8g8r8a8_unorm_b8g8r8a8_snorm_copy_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.b8g8r8a8_unorm_b8g8r8a8_snorm_draw_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.b8g8r8a8_unorm_b8g8r8a8_srgb_clear_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.b8g8r8a8_unorm_b8g8r8a8_srgb_copy_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.b8g8r8a8_unorm_b8g8r8a8_srgb_draw_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.b8g8r8a8_snorm_r8g8b8a8_unorm_clear_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.b8g8r8a8_snorm_r8g8b8a8_unorm_clear_load_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.b8g8r8a8_snorm_r8g8b8a8_unorm_clear_texture_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.b8g8r8a8_snorm_r8g8b8a8_unorm_copy_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.b8g8r8a8_snorm_r8g8b8a8_unorm_copy_load_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.b8g8r8a8_snorm_r8g8b8a8_unorm_copy_texture_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.b8g8r8a8_snorm_r8g8b8a8_unorm_store_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.b8g8r8a8_snorm_r8g8b8a8_unorm_store_load_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.b8g8r8a8_snorm_r8g8b8a8_unorm_store_texture_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.b8g8r8a8_snorm_r8g8b8a8_unorm_draw_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.b8g8r8a8_snorm_r8g8b8a8_unorm_draw_load_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.b8g8r8a8_snorm_r8g8b8a8_unorm_draw_texture_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.b8g8r8a8_snorm_r8g8b8a8_snorm_clear_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.b8g8r8a8_snorm_r8g8b8a8_snorm_clear_load_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.b8g8r8a8_snorm_r8g8b8a8_snorm_clear_texture_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.b8g8r8a8_snorm_r8g8b8a8_snorm_copy_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.b8g8r8a8_snorm_r8g8b8a8_snorm_copy_load_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.b8g8r8a8_snorm_r8g8b8a8_snorm_copy_texture_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.b8g8r8a8_snorm_r8g8b8a8_snorm_store_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.b8g8r8a8_snorm_r8g8b8a8_snorm_store_load_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.b8g8r8a8_snorm_r8g8b8a8_snorm_store_texture_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.b8g8r8a8_snorm_r8g8b8a8_snorm_draw_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.b8g8r8a8_snorm_r8g8b8a8_snorm_draw_load_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.b8g8r8a8_snorm_r8g8b8a8_snorm_draw_texture_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.b8g8r8a8_snorm_r8g8b8a8_srgb_clear_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.b8g8r8a8_snorm_r8g8b8a8_srgb_copy_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.b8g8r8a8_snorm_r8g8b8a8_srgb_draw_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.b8g8r8a8_snorm_b8g8r8a8_unorm_clear_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.b8g8r8a8_snorm_b8g8r8a8_unorm_copy_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.b8g8r8a8_snorm_b8g8r8a8_unorm_draw_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.b8g8r8a8_snorm_b8g8r8a8_srgb_clear_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.b8g8r8a8_snorm_b8g8r8a8_srgb_copy_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.b8g8r8a8_snorm_b8g8r8a8_srgb_draw_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.b8g8r8a8_srgb_r8g8b8a8_unorm_clear_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.b8g8r8a8_srgb_r8g8b8a8_unorm_clear_load_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.b8g8r8a8_srgb_r8g8b8a8_unorm_clear_texture_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.b8g8r8a8_srgb_r8g8b8a8_unorm_copy_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.b8g8r8a8_srgb_r8g8b8a8_unorm_copy_load_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.b8g8r8a8_srgb_r8g8b8a8_unorm_copy_texture_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.b8g8r8a8_srgb_r8g8b8a8_unorm_store_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.b8g8r8a8_srgb_r8g8b8a8_unorm_store_load_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.b8g8r8a8_srgb_r8g8b8a8_unorm_store_texture_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.b8g8r8a8_srgb_r8g8b8a8_unorm_draw_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.b8g8r8a8_srgb_r8g8b8a8_unorm_draw_load_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.b8g8r8a8_srgb_r8g8b8a8_unorm_draw_texture_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.b8g8r8a8_srgb_r8g8b8a8_snorm_clear_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.b8g8r8a8_srgb_r8g8b8a8_snorm_clear_load_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.b8g8r8a8_srgb_r8g8b8a8_snorm_clear_texture_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.b8g8r8a8_srgb_r8g8b8a8_snorm_copy_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.b8g8r8a8_srgb_r8g8b8a8_snorm_copy_load_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.b8g8r8a8_srgb_r8g8b8a8_snorm_copy_texture_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.b8g8r8a8_srgb_r8g8b8a8_snorm_store_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.b8g8r8a8_srgb_r8g8b8a8_snorm_store_load_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.b8g8r8a8_srgb_r8g8b8a8_snorm_store_texture_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.b8g8r8a8_srgb_r8g8b8a8_snorm_draw_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.b8g8r8a8_srgb_r8g8b8a8_snorm_draw_load_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.b8g8r8a8_srgb_r8g8b8a8_snorm_draw_texture_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.b8g8r8a8_srgb_r8g8b8a8_srgb_clear_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.b8g8r8a8_srgb_r8g8b8a8_srgb_copy_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.b8g8r8a8_srgb_r8g8b8a8_srgb_draw_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.b8g8r8a8_srgb_b8g8r8a8_unorm_clear_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.b8g8r8a8_srgb_b8g8r8a8_unorm_copy_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.b8g8r8a8_srgb_b8g8r8a8_unorm_draw_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.b8g8r8a8_srgb_b8g8r8a8_snorm_clear_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.b8g8r8a8_srgb_b8g8r8a8_snorm_copy_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d.b8g8r8a8_srgb_b8g8r8a8_snorm_draw_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.r8g8b8a8_unorm_r8g8b8a8_snorm_clear_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.r8g8b8a8_unorm_r8g8b8a8_snorm_clear_load_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.r8g8b8a8_unorm_r8g8b8a8_snorm_clear_texture_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.r8g8b8a8_unorm_r8g8b8a8_snorm_copy_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.r8g8b8a8_unorm_r8g8b8a8_snorm_copy_load_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.r8g8b8a8_unorm_r8g8b8a8_snorm_copy_texture_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.r8g8b8a8_unorm_r8g8b8a8_snorm_store_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.r8g8b8a8_unorm_r8g8b8a8_snorm_store_load_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.r8g8b8a8_unorm_r8g8b8a8_snorm_store_texture_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.r8g8b8a8_unorm_r8g8b8a8_snorm_draw_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.r8g8b8a8_unorm_r8g8b8a8_snorm_draw_load_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.r8g8b8a8_unorm_r8g8b8a8_snorm_draw_texture_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.r8g8b8a8_unorm_r8g8b8a8_srgb_clear_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.r8g8b8a8_unorm_r8g8b8a8_srgb_copy_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.r8g8b8a8_unorm_r8g8b8a8_srgb_draw_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.r8g8b8a8_unorm_b8g8r8a8_unorm_clear_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.r8g8b8a8_unorm_b8g8r8a8_unorm_copy_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.r8g8b8a8_unorm_b8g8r8a8_unorm_draw_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.r8g8b8a8_unorm_b8g8r8a8_snorm_clear_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.r8g8b8a8_unorm_b8g8r8a8_snorm_copy_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.r8g8b8a8_unorm_b8g8r8a8_snorm_draw_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.r8g8b8a8_unorm_b8g8r8a8_srgb_clear_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.r8g8b8a8_unorm_b8g8r8a8_srgb_copy_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.r8g8b8a8_unorm_b8g8r8a8_srgb_draw_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.r8g8b8a8_snorm_r8g8b8a8_unorm_clear_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.r8g8b8a8_snorm_r8g8b8a8_unorm_clear_load_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.r8g8b8a8_snorm_r8g8b8a8_unorm_clear_texture_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.r8g8b8a8_snorm_r8g8b8a8_unorm_copy_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.r8g8b8a8_snorm_r8g8b8a8_unorm_copy_load_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.r8g8b8a8_snorm_r8g8b8a8_unorm_copy_texture_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.r8g8b8a8_snorm_r8g8b8a8_unorm_store_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.r8g8b8a8_snorm_r8g8b8a8_unorm_store_load_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.r8g8b8a8_snorm_r8g8b8a8_unorm_store_texture_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.r8g8b8a8_snorm_r8g8b8a8_unorm_draw_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.r8g8b8a8_snorm_r8g8b8a8_unorm_draw_load_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.r8g8b8a8_snorm_r8g8b8a8_unorm_draw_texture_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.r8g8b8a8_snorm_r8g8b8a8_srgb_clear_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.r8g8b8a8_snorm_r8g8b8a8_srgb_copy_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.r8g8b8a8_snorm_r8g8b8a8_srgb_draw_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.r8g8b8a8_snorm_b8g8r8a8_unorm_clear_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.r8g8b8a8_snorm_b8g8r8a8_unorm_copy_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.r8g8b8a8_snorm_b8g8r8a8_unorm_draw_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.r8g8b8a8_snorm_b8g8r8a8_snorm_clear_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.r8g8b8a8_snorm_b8g8r8a8_snorm_copy_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.r8g8b8a8_snorm_b8g8r8a8_snorm_draw_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.r8g8b8a8_snorm_b8g8r8a8_srgb_clear_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.r8g8b8a8_snorm_b8g8r8a8_srgb_copy_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.r8g8b8a8_snorm_b8g8r8a8_srgb_draw_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.r8g8b8a8_srgb_r8g8b8a8_unorm_clear_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.r8g8b8a8_srgb_r8g8b8a8_unorm_clear_load_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.r8g8b8a8_srgb_r8g8b8a8_unorm_clear_texture_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.r8g8b8a8_srgb_r8g8b8a8_unorm_copy_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.r8g8b8a8_srgb_r8g8b8a8_unorm_copy_load_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.r8g8b8a8_srgb_r8g8b8a8_unorm_copy_texture_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.r8g8b8a8_srgb_r8g8b8a8_unorm_store_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.r8g8b8a8_srgb_r8g8b8a8_unorm_store_load_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.r8g8b8a8_srgb_r8g8b8a8_unorm_store_texture_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.r8g8b8a8_srgb_r8g8b8a8_unorm_draw_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.r8g8b8a8_srgb_r8g8b8a8_unorm_draw_load_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.r8g8b8a8_srgb_r8g8b8a8_unorm_draw_texture_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.r8g8b8a8_srgb_r8g8b8a8_snorm_clear_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.r8g8b8a8_srgb_r8g8b8a8_snorm_clear_load_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.r8g8b8a8_srgb_r8g8b8a8_snorm_clear_texture_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.r8g8b8a8_srgb_r8g8b8a8_snorm_copy_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.r8g8b8a8_srgb_r8g8b8a8_snorm_copy_load_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.r8g8b8a8_srgb_r8g8b8a8_snorm_copy_texture_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.r8g8b8a8_srgb_r8g8b8a8_snorm_store_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.r8g8b8a8_srgb_r8g8b8a8_snorm_store_load_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.r8g8b8a8_srgb_r8g8b8a8_snorm_store_texture_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.r8g8b8a8_srgb_r8g8b8a8_snorm_draw_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.r8g8b8a8_srgb_r8g8b8a8_snorm_draw_load_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.r8g8b8a8_srgb_r8g8b8a8_snorm_draw_texture_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.r8g8b8a8_srgb_b8g8r8a8_unorm_clear_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.r8g8b8a8_srgb_b8g8r8a8_unorm_copy_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.r8g8b8a8_srgb_b8g8r8a8_unorm_draw_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.r8g8b8a8_srgb_b8g8r8a8_snorm_clear_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.r8g8b8a8_srgb_b8g8r8a8_snorm_copy_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.r8g8b8a8_srgb_b8g8r8a8_snorm_draw_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.r8g8b8a8_srgb_b8g8r8a8_srgb_clear_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.r8g8b8a8_srgb_b8g8r8a8_srgb_copy_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.r8g8b8a8_srgb_b8g8r8a8_srgb_draw_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.b8g8r8a8_unorm_r8g8b8a8_unorm_clear_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.b8g8r8a8_unorm_r8g8b8a8_unorm_clear_load_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.b8g8r8a8_unorm_r8g8b8a8_unorm_clear_texture_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.b8g8r8a8_unorm_r8g8b8a8_unorm_copy_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.b8g8r8a8_unorm_r8g8b8a8_unorm_copy_load_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.b8g8r8a8_unorm_r8g8b8a8_unorm_copy_texture_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.b8g8r8a8_unorm_r8g8b8a8_unorm_store_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.b8g8r8a8_unorm_r8g8b8a8_unorm_store_load_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.b8g8r8a8_unorm_r8g8b8a8_unorm_store_texture_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.b8g8r8a8_unorm_r8g8b8a8_unorm_draw_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.b8g8r8a8_unorm_r8g8b8a8_unorm_draw_load_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.b8g8r8a8_unorm_r8g8b8a8_unorm_draw_texture_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.b8g8r8a8_unorm_r8g8b8a8_snorm_clear_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.b8g8r8a8_unorm_r8g8b8a8_snorm_clear_load_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.b8g8r8a8_unorm_r8g8b8a8_snorm_clear_texture_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.b8g8r8a8_unorm_r8g8b8a8_snorm_copy_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.b8g8r8a8_unorm_r8g8b8a8_snorm_copy_load_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.b8g8r8a8_unorm_r8g8b8a8_snorm_copy_texture_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.b8g8r8a8_unorm_r8g8b8a8_snorm_store_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.b8g8r8a8_unorm_r8g8b8a8_snorm_store_load_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.b8g8r8a8_unorm_r8g8b8a8_snorm_store_texture_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.b8g8r8a8_unorm_r8g8b8a8_snorm_draw_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.b8g8r8a8_unorm_r8g8b8a8_snorm_draw_load_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.b8g8r8a8_unorm_r8g8b8a8_snorm_draw_texture_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.b8g8r8a8_unorm_r8g8b8a8_srgb_clear_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.b8g8r8a8_unorm_r8g8b8a8_srgb_copy_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.b8g8r8a8_unorm_r8g8b8a8_srgb_draw_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.b8g8r8a8_unorm_b8g8r8a8_snorm_clear_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.b8g8r8a8_unorm_b8g8r8a8_snorm_copy_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.b8g8r8a8_unorm_b8g8r8a8_snorm_draw_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.b8g8r8a8_unorm_b8g8r8a8_srgb_clear_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.b8g8r8a8_unorm_b8g8r8a8_srgb_copy_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.b8g8r8a8_unorm_b8g8r8a8_srgb_draw_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.b8g8r8a8_snorm_r8g8b8a8_unorm_clear_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.b8g8r8a8_snorm_r8g8b8a8_unorm_clear_load_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.b8g8r8a8_snorm_r8g8b8a8_unorm_clear_texture_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.b8g8r8a8_snorm_r8g8b8a8_unorm_copy_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.b8g8r8a8_snorm_r8g8b8a8_unorm_copy_load_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.b8g8r8a8_snorm_r8g8b8a8_unorm_copy_texture_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.b8g8r8a8_snorm_r8g8b8a8_unorm_store_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.b8g8r8a8_snorm_r8g8b8a8_unorm_store_load_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.b8g8r8a8_snorm_r8g8b8a8_unorm_store_texture_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.b8g8r8a8_snorm_r8g8b8a8_unorm_draw_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.b8g8r8a8_snorm_r8g8b8a8_unorm_draw_load_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.b8g8r8a8_snorm_r8g8b8a8_unorm_draw_texture_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.b8g8r8a8_snorm_r8g8b8a8_snorm_clear_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.b8g8r8a8_snorm_r8g8b8a8_snorm_clear_load_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.b8g8r8a8_snorm_r8g8b8a8_snorm_clear_texture_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.b8g8r8a8_snorm_r8g8b8a8_snorm_copy_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.b8g8r8a8_snorm_r8g8b8a8_snorm_copy_load_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.b8g8r8a8_snorm_r8g8b8a8_snorm_copy_texture_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.b8g8r8a8_snorm_r8g8b8a8_snorm_store_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.b8g8r8a8_snorm_r8g8b8a8_snorm_store_load_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.b8g8r8a8_snorm_r8g8b8a8_snorm_store_texture_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.b8g8r8a8_snorm_r8g8b8a8_snorm_draw_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.b8g8r8a8_snorm_r8g8b8a8_snorm_draw_load_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.b8g8r8a8_snorm_r8g8b8a8_snorm_draw_texture_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.b8g8r8a8_snorm_r8g8b8a8_srgb_clear_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.b8g8r8a8_snorm_r8g8b8a8_srgb_copy_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.b8g8r8a8_snorm_r8g8b8a8_srgb_draw_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.b8g8r8a8_snorm_b8g8r8a8_unorm_clear_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.b8g8r8a8_snorm_b8g8r8a8_unorm_copy_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.b8g8r8a8_snorm_b8g8r8a8_unorm_draw_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.b8g8r8a8_snorm_b8g8r8a8_srgb_clear_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.b8g8r8a8_snorm_b8g8r8a8_srgb_copy_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.b8g8r8a8_snorm_b8g8r8a8_srgb_draw_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.b8g8r8a8_srgb_r8g8b8a8_unorm_clear_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.b8g8r8a8_srgb_r8g8b8a8_unorm_clear_load_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.b8g8r8a8_srgb_r8g8b8a8_unorm_clear_texture_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.b8g8r8a8_srgb_r8g8b8a8_unorm_copy_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.b8g8r8a8_srgb_r8g8b8a8_unorm_copy_load_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.b8g8r8a8_srgb_r8g8b8a8_unorm_copy_texture_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.b8g8r8a8_srgb_r8g8b8a8_unorm_store_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.b8g8r8a8_srgb_r8g8b8a8_unorm_store_load_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.b8g8r8a8_srgb_r8g8b8a8_unorm_store_texture_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.b8g8r8a8_srgb_r8g8b8a8_unorm_draw_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.b8g8r8a8_srgb_r8g8b8a8_unorm_draw_load_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.b8g8r8a8_srgb_r8g8b8a8_unorm_draw_texture_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.b8g8r8a8_srgb_r8g8b8a8_snorm_clear_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.b8g8r8a8_srgb_r8g8b8a8_snorm_clear_load_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.b8g8r8a8_srgb_r8g8b8a8_snorm_clear_texture_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.b8g8r8a8_srgb_r8g8b8a8_snorm_copy_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.b8g8r8a8_srgb_r8g8b8a8_snorm_copy_load_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.b8g8r8a8_srgb_r8g8b8a8_snorm_copy_texture_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.b8g8r8a8_srgb_r8g8b8a8_snorm_store_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.b8g8r8a8_srgb_r8g8b8a8_snorm_store_load_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.b8g8r8a8_srgb_r8g8b8a8_snorm_store_texture_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.b8g8r8a8_srgb_r8g8b8a8_snorm_draw_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.b8g8r8a8_srgb_r8g8b8a8_snorm_draw_load_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.b8g8r8a8_srgb_r8g8b8a8_snorm_draw_texture_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.b8g8r8a8_srgb_r8g8b8a8_srgb_clear_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.b8g8r8a8_srgb_r8g8b8a8_srgb_copy_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.b8g8r8a8_srgb_r8g8b8a8_srgb_draw_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.b8g8r8a8_srgb_b8g8r8a8_unorm_clear_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.b8g8r8a8_srgb_b8g8r8a8_unorm_copy_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.b8g8r8a8_srgb_b8g8r8a8_unorm_draw_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.b8g8r8a8_srgb_b8g8r8a8_snorm_clear_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.b8g8r8a8_srgb_b8g8r8a8_snorm_copy_copy_format_list
+dEQP-VK.image.swapchain_mutable.headless.2d_array.b8g8r8a8_srgb_b8g8r8a8_snorm_draw_copy_format_list
+dEQP-VK.image.atomic_operations.add.1d.notransfer.normal_read.normal_img.r32f_end_result
+dEQP-VK.image.atomic_operations.add.1d.notransfer.normal_read.normal_img.r32f_intermediate_values
+dEQP-VK.image.atomic_operations.add.1d.notransfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.add.1d.notransfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.add.1d.notransfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.add.1d.notransfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.add.1d.transfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.add.1d.transfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.add.1d.transfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.add.1d.transfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.add.1d.transfer.normal_read.normal_img.r32f_end_result
+dEQP-VK.image.atomic_operations.add.1d.transfer.normal_read.normal_img.r32f_intermediate_values
+dEQP-VK.image.atomic_operations.add.1d.transfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.add.1d.transfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.add.1d.transfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.add.1d.transfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.add.1d_array.notransfer.normal_read.normal_img.r32f_end_result
+dEQP-VK.image.atomic_operations.add.1d_array.notransfer.normal_read.normal_img.r32f_intermediate_values
+dEQP-VK.image.atomic_operations.add.1d_array.notransfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.add.1d_array.notransfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.add.1d_array.notransfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.add.1d_array.notransfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.add.1d_array.transfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.add.1d_array.transfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.add.1d_array.transfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.add.1d_array.transfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.add.1d_array.transfer.normal_read.normal_img.r32f_end_result
+dEQP-VK.image.atomic_operations.add.1d_array.transfer.normal_read.normal_img.r32f_intermediate_values
+dEQP-VK.image.atomic_operations.add.1d_array.transfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.add.1d_array.transfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.add.1d_array.transfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.add.1d_array.transfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.add.2d.notransfer.normal_read.normal_img.r32f_end_result
+dEQP-VK.image.atomic_operations.add.2d.notransfer.normal_read.normal_img.r32f_intermediate_values
+dEQP-VK.image.atomic_operations.add.2d.notransfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.add.2d.notransfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.add.2d.notransfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.add.2d.notransfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.add.2d.notransfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.add.2d.notransfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.add.2d.notransfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.add.2d.notransfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.add.2d.notransfer.normal_read.sparse_img.r32f_end_result
+dEQP-VK.image.atomic_operations.add.2d.notransfer.normal_read.sparse_img.r32f_intermediate_values
+dEQP-VK.image.atomic_operations.add.2d.notransfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.add.2d.notransfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.add.2d.notransfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.add.2d.notransfer.normal_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.add.2d.notransfer.sparse_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.add.2d.notransfer.sparse_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.add.2d.notransfer.sparse_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.add.2d.notransfer.sparse_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.add.2d.notransfer.sparse_read.normal_img.r32f_end_result
+dEQP-VK.image.atomic_operations.add.2d.notransfer.sparse_read.normal_img.r32f_intermediate_values
+dEQP-VK.image.atomic_operations.add.2d.notransfer.sparse_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.add.2d.notransfer.sparse_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.add.2d.notransfer.sparse_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.add.2d.notransfer.sparse_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.add.2d.notransfer.sparse_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.add.2d.notransfer.sparse_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.add.2d.notransfer.sparse_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.add.2d.notransfer.sparse_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.add.2d.notransfer.sparse_read.sparse_img.r32f_end_result
+dEQP-VK.image.atomic_operations.add.2d.notransfer.sparse_read.sparse_img.r32f_intermediate_values
+dEQP-VK.image.atomic_operations.add.2d.notransfer.sparse_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.add.2d.notransfer.sparse_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.add.2d.notransfer.sparse_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.add.2d.notransfer.sparse_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.add.2d.transfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.add.2d.transfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.add.2d.transfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.add.2d.transfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.add.2d.transfer.normal_read.normal_img.r32f_end_result
+dEQP-VK.image.atomic_operations.add.2d.transfer.normal_read.normal_img.r32f_intermediate_values
+dEQP-VK.image.atomic_operations.add.2d.transfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.add.2d.transfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.add.2d.transfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.add.2d.transfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.add.2d.transfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.add.2d.transfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.add.2d.transfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.add.2d.transfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.add.2d.transfer.normal_read.sparse_img.r32f_end_result
+dEQP-VK.image.atomic_operations.add.2d.transfer.normal_read.sparse_img.r32f_intermediate_values
+dEQP-VK.image.atomic_operations.add.2d.transfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.add.2d.transfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.add.2d.transfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.add.2d.transfer.normal_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.add.2d_array.notransfer.normal_read.normal_img.r32f_end_result
+dEQP-VK.image.atomic_operations.add.2d_array.notransfer.normal_read.normal_img.r32f_intermediate_values
+dEQP-VK.image.atomic_operations.add.2d_array.notransfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.add.2d_array.notransfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.add.2d_array.notransfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.add.2d_array.notransfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.add.2d_array.notransfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.add.2d_array.notransfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.add.2d_array.notransfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.add.2d_array.notransfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.add.2d_array.notransfer.normal_read.sparse_img.r32f_end_result
+dEQP-VK.image.atomic_operations.add.2d_array.notransfer.normal_read.sparse_img.r32f_intermediate_values
+dEQP-VK.image.atomic_operations.add.2d_array.notransfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.add.2d_array.notransfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.add.2d_array.notransfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.add.2d_array.notransfer.normal_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.add.2d_array.notransfer.sparse_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.add.2d_array.notransfer.sparse_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.add.2d_array.notransfer.sparse_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.add.2d_array.notransfer.sparse_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.add.2d_array.notransfer.sparse_read.normal_img.r32f_end_result
+dEQP-VK.image.atomic_operations.add.2d_array.notransfer.sparse_read.normal_img.r32f_intermediate_values
+dEQP-VK.image.atomic_operations.add.2d_array.notransfer.sparse_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.add.2d_array.notransfer.sparse_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.add.2d_array.notransfer.sparse_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.add.2d_array.notransfer.sparse_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.add.2d_array.notransfer.sparse_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.add.2d_array.notransfer.sparse_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.add.2d_array.notransfer.sparse_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.add.2d_array.notransfer.sparse_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.add.2d_array.notransfer.sparse_read.sparse_img.r32f_end_result
+dEQP-VK.image.atomic_operations.add.2d_array.notransfer.sparse_read.sparse_img.r32f_intermediate_values
+dEQP-VK.image.atomic_operations.add.2d_array.notransfer.sparse_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.add.2d_array.notransfer.sparse_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.add.2d_array.notransfer.sparse_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.add.2d_array.notransfer.sparse_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.add.2d_array.transfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.add.2d_array.transfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.add.2d_array.transfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.add.2d_array.transfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.add.2d_array.transfer.normal_read.normal_img.r32f_end_result
+dEQP-VK.image.atomic_operations.add.2d_array.transfer.normal_read.normal_img.r32f_intermediate_values
+dEQP-VK.image.atomic_operations.add.2d_array.transfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.add.2d_array.transfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.add.2d_array.transfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.add.2d_array.transfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.add.2d_array.transfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.add.2d_array.transfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.add.2d_array.transfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.add.2d_array.transfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.add.2d_array.transfer.normal_read.sparse_img.r32f_end_result
+dEQP-VK.image.atomic_operations.add.2d_array.transfer.normal_read.sparse_img.r32f_intermediate_values
+dEQP-VK.image.atomic_operations.add.2d_array.transfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.add.2d_array.transfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.add.2d_array.transfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.add.2d_array.transfer.normal_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.add.3d.notransfer.normal_read.normal_img.r32f_end_result
+dEQP-VK.image.atomic_operations.add.3d.notransfer.normal_read.normal_img.r32f_intermediate_values
+dEQP-VK.image.atomic_operations.add.3d.notransfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.add.3d.notransfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.add.3d.notransfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.add.3d.notransfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.add.3d.notransfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.add.3d.notransfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.add.3d.notransfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.add.3d.notransfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.add.3d.notransfer.normal_read.sparse_img.r32f_end_result
+dEQP-VK.image.atomic_operations.add.3d.notransfer.normal_read.sparse_img.r32f_intermediate_values
+dEQP-VK.image.atomic_operations.add.3d.notransfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.add.3d.notransfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.add.3d.notransfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.add.3d.notransfer.normal_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.add.3d.notransfer.sparse_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.add.3d.notransfer.sparse_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.add.3d.notransfer.sparse_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.add.3d.notransfer.sparse_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.add.3d.notransfer.sparse_read.normal_img.r32f_end_result
+dEQP-VK.image.atomic_operations.add.3d.notransfer.sparse_read.normal_img.r32f_intermediate_values
+dEQP-VK.image.atomic_operations.add.3d.notransfer.sparse_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.add.3d.notransfer.sparse_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.add.3d.notransfer.sparse_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.add.3d.notransfer.sparse_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.add.3d.notransfer.sparse_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.add.3d.notransfer.sparse_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.add.3d.notransfer.sparse_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.add.3d.notransfer.sparse_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.add.3d.notransfer.sparse_read.sparse_img.r32f_end_result
+dEQP-VK.image.atomic_operations.add.3d.notransfer.sparse_read.sparse_img.r32f_intermediate_values
+dEQP-VK.image.atomic_operations.add.3d.notransfer.sparse_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.add.3d.notransfer.sparse_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.add.3d.notransfer.sparse_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.add.3d.notransfer.sparse_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.add.3d.transfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.add.3d.transfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.add.3d.transfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.add.3d.transfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.add.3d.transfer.normal_read.normal_img.r32f_end_result
+dEQP-VK.image.atomic_operations.add.3d.transfer.normal_read.normal_img.r32f_intermediate_values
+dEQP-VK.image.atomic_operations.add.3d.transfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.add.3d.transfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.add.3d.transfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.add.3d.transfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.add.3d.transfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.add.3d.transfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.add.3d.transfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.add.3d.transfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.add.3d.transfer.normal_read.sparse_img.r32f_end_result
+dEQP-VK.image.atomic_operations.add.3d.transfer.normal_read.sparse_img.r32f_intermediate_values
+dEQP-VK.image.atomic_operations.add.3d.transfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.add.3d.transfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.add.3d.transfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.add.3d.transfer.normal_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.add.cube.notransfer.normal_read.normal_img.r32f_end_result
+dEQP-VK.image.atomic_operations.add.cube.notransfer.normal_read.normal_img.r32f_intermediate_values
+dEQP-VK.image.atomic_operations.add.cube.notransfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.add.cube.notransfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.add.cube.notransfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.add.cube.notransfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.add.cube.notransfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.add.cube.notransfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.add.cube.notransfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.add.cube.notransfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.add.cube.notransfer.normal_read.sparse_img.r32f_end_result
+dEQP-VK.image.atomic_operations.add.cube.notransfer.normal_read.sparse_img.r32f_intermediate_values
+dEQP-VK.image.atomic_operations.add.cube.notransfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.add.cube.notransfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.add.cube.notransfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.add.cube.notransfer.normal_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.add.cube.notransfer.sparse_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.add.cube.notransfer.sparse_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.add.cube.notransfer.sparse_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.add.cube.notransfer.sparse_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.add.cube.notransfer.sparse_read.normal_img.r32f_end_result
+dEQP-VK.image.atomic_operations.add.cube.notransfer.sparse_read.normal_img.r32f_intermediate_values
+dEQP-VK.image.atomic_operations.add.cube.notransfer.sparse_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.add.cube.notransfer.sparse_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.add.cube.notransfer.sparse_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.add.cube.notransfer.sparse_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.add.cube.notransfer.sparse_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.add.cube.notransfer.sparse_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.add.cube.notransfer.sparse_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.add.cube.notransfer.sparse_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.add.cube.notransfer.sparse_read.sparse_img.r32f_end_result
+dEQP-VK.image.atomic_operations.add.cube.notransfer.sparse_read.sparse_img.r32f_intermediate_values
+dEQP-VK.image.atomic_operations.add.cube.notransfer.sparse_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.add.cube.notransfer.sparse_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.add.cube.notransfer.sparse_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.add.cube.notransfer.sparse_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.add.cube.transfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.add.cube.transfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.add.cube.transfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.add.cube.transfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.add.cube.transfer.normal_read.normal_img.r32f_end_result
+dEQP-VK.image.atomic_operations.add.cube.transfer.normal_read.normal_img.r32f_intermediate_values
+dEQP-VK.image.atomic_operations.add.cube.transfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.add.cube.transfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.add.cube.transfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.add.cube.transfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.add.cube.transfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.add.cube.transfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.add.cube.transfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.add.cube.transfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.add.cube.transfer.normal_read.sparse_img.r32f_end_result
+dEQP-VK.image.atomic_operations.add.cube.transfer.normal_read.sparse_img.r32f_intermediate_values
+dEQP-VK.image.atomic_operations.add.cube.transfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.add.cube.transfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.add.cube.transfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.add.cube.transfer.normal_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.add.cube_array.notransfer.normal_read.normal_img.r32f_end_result
+dEQP-VK.image.atomic_operations.add.cube_array.notransfer.normal_read.normal_img.r32f_intermediate_values
+dEQP-VK.image.atomic_operations.add.cube_array.notransfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.add.cube_array.notransfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.add.cube_array.notransfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.add.cube_array.notransfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.add.cube_array.notransfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.add.cube_array.notransfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.add.cube_array.notransfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.add.cube_array.notransfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.add.cube_array.notransfer.normal_read.sparse_img.r32f_end_result
+dEQP-VK.image.atomic_operations.add.cube_array.notransfer.normal_read.sparse_img.r32f_intermediate_values
+dEQP-VK.image.atomic_operations.add.cube_array.notransfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.add.cube_array.notransfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.add.cube_array.notransfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.add.cube_array.notransfer.normal_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.add.cube_array.notransfer.sparse_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.add.cube_array.notransfer.sparse_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.add.cube_array.notransfer.sparse_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.add.cube_array.notransfer.sparse_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.add.cube_array.notransfer.sparse_read.normal_img.r32f_end_result
+dEQP-VK.image.atomic_operations.add.cube_array.notransfer.sparse_read.normal_img.r32f_intermediate_values
+dEQP-VK.image.atomic_operations.add.cube_array.notransfer.sparse_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.add.cube_array.notransfer.sparse_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.add.cube_array.notransfer.sparse_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.add.cube_array.notransfer.sparse_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.add.cube_array.notransfer.sparse_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.add.cube_array.notransfer.sparse_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.add.cube_array.notransfer.sparse_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.add.cube_array.notransfer.sparse_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.add.cube_array.notransfer.sparse_read.sparse_img.r32f_end_result
+dEQP-VK.image.atomic_operations.add.cube_array.notransfer.sparse_read.sparse_img.r32f_intermediate_values
+dEQP-VK.image.atomic_operations.add.cube_array.notransfer.sparse_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.add.cube_array.notransfer.sparse_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.add.cube_array.notransfer.sparse_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.add.cube_array.notransfer.sparse_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.add.cube_array.transfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.add.cube_array.transfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.add.cube_array.transfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.add.cube_array.transfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.add.cube_array.transfer.normal_read.normal_img.r32f_end_result
+dEQP-VK.image.atomic_operations.add.cube_array.transfer.normal_read.normal_img.r32f_intermediate_values
+dEQP-VK.image.atomic_operations.add.cube_array.transfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.add.cube_array.transfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.add.cube_array.transfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.add.cube_array.transfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.add.cube_array.transfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.add.cube_array.transfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.add.cube_array.transfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.add.cube_array.transfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.add.cube_array.transfer.normal_read.sparse_img.r32f_end_result
+dEQP-VK.image.atomic_operations.add.cube_array.transfer.normal_read.sparse_img.r32f_intermediate_values
+dEQP-VK.image.atomic_operations.add.cube_array.transfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.add.cube_array.transfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.add.cube_array.transfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.add.cube_array.transfer.normal_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.add.buffer.notransfer.normal_read.normal_img.r32f_end_result
+dEQP-VK.image.atomic_operations.add.buffer.notransfer.normal_read.normal_img.r32f_intermediate_values
+dEQP-VK.image.atomic_operations.add.buffer.transfer.normal_read.normal_img.r32f_end_result
+dEQP-VK.image.atomic_operations.add.buffer.transfer.normal_read.normal_img.r32f_intermediate_values
+dEQP-VK.image.atomic_operations.sub.1d.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.sub.1d.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.sub.1d.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.sub.1d.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.sub.1d.notransfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.sub.1d.notransfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.sub.1d.notransfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.sub.1d.notransfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.sub.1d.transfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.sub.1d.transfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.sub.1d.transfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.sub.1d.transfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.sub.1d.transfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.sub.1d.transfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.sub.1d.transfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.sub.1d.transfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.sub.1d_array.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.sub.1d_array.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.sub.1d_array.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.sub.1d_array.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.sub.1d_array.notransfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.sub.1d_array.notransfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.sub.1d_array.notransfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.sub.1d_array.notransfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.sub.1d_array.transfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.sub.1d_array.transfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.sub.1d_array.transfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.sub.1d_array.transfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.sub.1d_array.transfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.sub.1d_array.transfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.sub.1d_array.transfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.sub.1d_array.transfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.sub.2d.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.sub.2d.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.sub.2d.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.sub.2d.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.sub.2d.notransfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.sub.2d.notransfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.sub.2d.notransfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.sub.2d.notransfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.sub.2d.notransfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.sub.2d.notransfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.sub.2d.notransfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.sub.2d.notransfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.sub.2d.notransfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.sub.2d.notransfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.sub.2d.notransfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.sub.2d.notransfer.normal_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.sub.2d.notransfer.sparse_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.sub.2d.notransfer.sparse_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.sub.2d.notransfer.sparse_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.sub.2d.notransfer.sparse_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.sub.2d.notransfer.sparse_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.sub.2d.notransfer.sparse_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.sub.2d.notransfer.sparse_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.sub.2d.notransfer.sparse_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.sub.2d.notransfer.sparse_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.sub.2d.notransfer.sparse_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.sub.2d.notransfer.sparse_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.sub.2d.notransfer.sparse_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.sub.2d.notransfer.sparse_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.sub.2d.notransfer.sparse_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.sub.2d.notransfer.sparse_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.sub.2d.notransfer.sparse_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.sub.2d.transfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.sub.2d.transfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.sub.2d.transfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.sub.2d.transfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.sub.2d.transfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.sub.2d.transfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.sub.2d.transfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.sub.2d.transfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.sub.2d.transfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.sub.2d.transfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.sub.2d.transfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.sub.2d.transfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.sub.2d.transfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.sub.2d.transfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.sub.2d.transfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.sub.2d.transfer.normal_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.sub.2d_array.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.sub.2d_array.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.sub.2d_array.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.sub.2d_array.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.sub.2d_array.notransfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.sub.2d_array.notransfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.sub.2d_array.notransfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.sub.2d_array.notransfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.sub.2d_array.notransfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.sub.2d_array.notransfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.sub.2d_array.notransfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.sub.2d_array.notransfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.sub.2d_array.notransfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.sub.2d_array.notransfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.sub.2d_array.notransfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.sub.2d_array.notransfer.normal_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.sub.2d_array.notransfer.sparse_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.sub.2d_array.notransfer.sparse_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.sub.2d_array.notransfer.sparse_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.sub.2d_array.notransfer.sparse_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.sub.2d_array.notransfer.sparse_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.sub.2d_array.notransfer.sparse_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.sub.2d_array.notransfer.sparse_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.sub.2d_array.notransfer.sparse_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.sub.2d_array.notransfer.sparse_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.sub.2d_array.notransfer.sparse_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.sub.2d_array.notransfer.sparse_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.sub.2d_array.notransfer.sparse_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.sub.2d_array.notransfer.sparse_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.sub.2d_array.notransfer.sparse_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.sub.2d_array.notransfer.sparse_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.sub.2d_array.notransfer.sparse_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.sub.2d_array.transfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.sub.2d_array.transfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.sub.2d_array.transfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.sub.2d_array.transfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.sub.2d_array.transfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.sub.2d_array.transfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.sub.2d_array.transfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.sub.2d_array.transfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.sub.2d_array.transfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.sub.2d_array.transfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.sub.2d_array.transfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.sub.2d_array.transfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.sub.2d_array.transfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.sub.2d_array.transfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.sub.2d_array.transfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.sub.2d_array.transfer.normal_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.sub.3d.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.sub.3d.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.sub.3d.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.sub.3d.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.sub.3d.notransfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.sub.3d.notransfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.sub.3d.notransfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.sub.3d.notransfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.sub.3d.notransfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.sub.3d.notransfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.sub.3d.notransfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.sub.3d.notransfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.sub.3d.notransfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.sub.3d.notransfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.sub.3d.notransfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.sub.3d.notransfer.normal_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.sub.3d.notransfer.sparse_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.sub.3d.notransfer.sparse_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.sub.3d.notransfer.sparse_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.sub.3d.notransfer.sparse_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.sub.3d.notransfer.sparse_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.sub.3d.notransfer.sparse_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.sub.3d.notransfer.sparse_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.sub.3d.notransfer.sparse_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.sub.3d.notransfer.sparse_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.sub.3d.notransfer.sparse_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.sub.3d.notransfer.sparse_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.sub.3d.notransfer.sparse_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.sub.3d.notransfer.sparse_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.sub.3d.notransfer.sparse_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.sub.3d.notransfer.sparse_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.sub.3d.notransfer.sparse_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.sub.3d.transfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.sub.3d.transfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.sub.3d.transfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.sub.3d.transfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.sub.3d.transfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.sub.3d.transfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.sub.3d.transfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.sub.3d.transfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.sub.3d.transfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.sub.3d.transfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.sub.3d.transfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.sub.3d.transfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.sub.3d.transfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.sub.3d.transfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.sub.3d.transfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.sub.3d.transfer.normal_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.sub.cube.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.sub.cube.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.sub.cube.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.sub.cube.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.sub.cube.notransfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.sub.cube.notransfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.sub.cube.notransfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.sub.cube.notransfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.sub.cube.notransfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.sub.cube.notransfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.sub.cube.notransfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.sub.cube.notransfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.sub.cube.notransfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.sub.cube.notransfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.sub.cube.notransfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.sub.cube.notransfer.normal_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.sub.cube.notransfer.sparse_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.sub.cube.notransfer.sparse_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.sub.cube.notransfer.sparse_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.sub.cube.notransfer.sparse_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.sub.cube.notransfer.sparse_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.sub.cube.notransfer.sparse_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.sub.cube.notransfer.sparse_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.sub.cube.notransfer.sparse_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.sub.cube.notransfer.sparse_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.sub.cube.notransfer.sparse_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.sub.cube.notransfer.sparse_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.sub.cube.notransfer.sparse_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.sub.cube.notransfer.sparse_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.sub.cube.notransfer.sparse_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.sub.cube.notransfer.sparse_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.sub.cube.notransfer.sparse_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.sub.cube.transfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.sub.cube.transfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.sub.cube.transfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.sub.cube.transfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.sub.cube.transfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.sub.cube.transfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.sub.cube.transfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.sub.cube.transfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.sub.cube.transfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.sub.cube.transfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.sub.cube.transfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.sub.cube.transfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.sub.cube.transfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.sub.cube.transfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.sub.cube.transfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.sub.cube.transfer.normal_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.sub.cube_array.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.sub.cube_array.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.sub.cube_array.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.sub.cube_array.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.sub.cube_array.notransfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.sub.cube_array.notransfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.sub.cube_array.notransfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.sub.cube_array.notransfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.sub.cube_array.notransfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.sub.cube_array.notransfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.sub.cube_array.notransfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.sub.cube_array.notransfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.sub.cube_array.notransfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.sub.cube_array.notransfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.sub.cube_array.notransfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.sub.cube_array.notransfer.normal_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.sub.cube_array.notransfer.sparse_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.sub.cube_array.notransfer.sparse_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.sub.cube_array.notransfer.sparse_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.sub.cube_array.notransfer.sparse_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.sub.cube_array.notransfer.sparse_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.sub.cube_array.notransfer.sparse_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.sub.cube_array.notransfer.sparse_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.sub.cube_array.notransfer.sparse_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.sub.cube_array.notransfer.sparse_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.sub.cube_array.notransfer.sparse_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.sub.cube_array.notransfer.sparse_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.sub.cube_array.notransfer.sparse_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.sub.cube_array.notransfer.sparse_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.sub.cube_array.notransfer.sparse_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.sub.cube_array.notransfer.sparse_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.sub.cube_array.notransfer.sparse_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.sub.cube_array.transfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.sub.cube_array.transfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.sub.cube_array.transfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.sub.cube_array.transfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.sub.cube_array.transfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.sub.cube_array.transfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.sub.cube_array.transfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.sub.cube_array.transfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.sub.cube_array.transfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.sub.cube_array.transfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.sub.cube_array.transfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.sub.cube_array.transfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.sub.cube_array.transfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.sub.cube_array.transfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.sub.cube_array.transfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.sub.cube_array.transfer.normal_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.inc.1d.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.inc.1d.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.inc.1d.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.inc.1d.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.inc.1d.notransfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.inc.1d.notransfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.inc.1d.notransfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.inc.1d.notransfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.inc.1d.transfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.inc.1d.transfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.inc.1d.transfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.inc.1d.transfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.inc.1d.transfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.inc.1d.transfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.inc.1d.transfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.inc.1d.transfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.inc.1d_array.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.inc.1d_array.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.inc.1d_array.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.inc.1d_array.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.inc.1d_array.notransfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.inc.1d_array.notransfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.inc.1d_array.notransfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.inc.1d_array.notransfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.inc.1d_array.transfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.inc.1d_array.transfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.inc.1d_array.transfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.inc.1d_array.transfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.inc.1d_array.transfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.inc.1d_array.transfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.inc.1d_array.transfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.inc.1d_array.transfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.inc.2d.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.inc.2d.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.inc.2d.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.inc.2d.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.inc.2d.notransfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.inc.2d.notransfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.inc.2d.notransfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.inc.2d.notransfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.inc.2d.notransfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.inc.2d.notransfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.inc.2d.notransfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.inc.2d.notransfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.inc.2d.notransfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.inc.2d.notransfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.inc.2d.notransfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.inc.2d.notransfer.normal_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.inc.2d.notransfer.sparse_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.inc.2d.notransfer.sparse_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.inc.2d.notransfer.sparse_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.inc.2d.notransfer.sparse_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.inc.2d.notransfer.sparse_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.inc.2d.notransfer.sparse_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.inc.2d.notransfer.sparse_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.inc.2d.notransfer.sparse_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.inc.2d.notransfer.sparse_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.inc.2d.notransfer.sparse_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.inc.2d.notransfer.sparse_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.inc.2d.notransfer.sparse_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.inc.2d.notransfer.sparse_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.inc.2d.notransfer.sparse_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.inc.2d.notransfer.sparse_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.inc.2d.notransfer.sparse_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.inc.2d.transfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.inc.2d.transfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.inc.2d.transfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.inc.2d.transfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.inc.2d.transfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.inc.2d.transfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.inc.2d.transfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.inc.2d.transfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.inc.2d.transfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.inc.2d.transfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.inc.2d.transfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.inc.2d.transfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.inc.2d.transfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.inc.2d.transfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.inc.2d.transfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.inc.2d.transfer.normal_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.inc.2d_array.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.inc.2d_array.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.inc.2d_array.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.inc.2d_array.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.inc.2d_array.notransfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.inc.2d_array.notransfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.inc.2d_array.notransfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.inc.2d_array.notransfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.inc.2d_array.notransfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.inc.2d_array.notransfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.inc.2d_array.notransfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.inc.2d_array.notransfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.inc.2d_array.notransfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.inc.2d_array.notransfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.inc.2d_array.notransfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.inc.2d_array.notransfer.normal_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.inc.2d_array.notransfer.sparse_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.inc.2d_array.notransfer.sparse_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.inc.2d_array.notransfer.sparse_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.inc.2d_array.notransfer.sparse_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.inc.2d_array.notransfer.sparse_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.inc.2d_array.notransfer.sparse_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.inc.2d_array.notransfer.sparse_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.inc.2d_array.notransfer.sparse_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.inc.2d_array.notransfer.sparse_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.inc.2d_array.notransfer.sparse_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.inc.2d_array.notransfer.sparse_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.inc.2d_array.notransfer.sparse_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.inc.2d_array.notransfer.sparse_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.inc.2d_array.notransfer.sparse_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.inc.2d_array.notransfer.sparse_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.inc.2d_array.notransfer.sparse_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.inc.2d_array.transfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.inc.2d_array.transfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.inc.2d_array.transfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.inc.2d_array.transfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.inc.2d_array.transfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.inc.2d_array.transfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.inc.2d_array.transfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.inc.2d_array.transfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.inc.2d_array.transfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.inc.2d_array.transfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.inc.2d_array.transfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.inc.2d_array.transfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.inc.2d_array.transfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.inc.2d_array.transfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.inc.2d_array.transfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.inc.2d_array.transfer.normal_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.inc.3d.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.inc.3d.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.inc.3d.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.inc.3d.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.inc.3d.notransfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.inc.3d.notransfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.inc.3d.notransfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.inc.3d.notransfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.inc.3d.notransfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.inc.3d.notransfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.inc.3d.notransfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.inc.3d.notransfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.inc.3d.notransfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.inc.3d.notransfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.inc.3d.notransfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.inc.3d.notransfer.normal_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.inc.3d.notransfer.sparse_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.inc.3d.notransfer.sparse_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.inc.3d.notransfer.sparse_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.inc.3d.notransfer.sparse_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.inc.3d.notransfer.sparse_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.inc.3d.notransfer.sparse_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.inc.3d.notransfer.sparse_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.inc.3d.notransfer.sparse_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.inc.3d.notransfer.sparse_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.inc.3d.notransfer.sparse_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.inc.3d.notransfer.sparse_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.inc.3d.notransfer.sparse_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.inc.3d.notransfer.sparse_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.inc.3d.notransfer.sparse_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.inc.3d.notransfer.sparse_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.inc.3d.notransfer.sparse_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.inc.3d.transfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.inc.3d.transfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.inc.3d.transfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.inc.3d.transfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.inc.3d.transfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.inc.3d.transfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.inc.3d.transfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.inc.3d.transfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.inc.3d.transfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.inc.3d.transfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.inc.3d.transfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.inc.3d.transfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.inc.3d.transfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.inc.3d.transfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.inc.3d.transfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.inc.3d.transfer.normal_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.inc.cube.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.inc.cube.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.inc.cube.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.inc.cube.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.inc.cube.notransfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.inc.cube.notransfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.inc.cube.notransfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.inc.cube.notransfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.inc.cube.notransfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.inc.cube.notransfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.inc.cube.notransfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.inc.cube.notransfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.inc.cube.notransfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.inc.cube.notransfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.inc.cube.notransfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.inc.cube.notransfer.normal_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.inc.cube.notransfer.sparse_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.inc.cube.notransfer.sparse_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.inc.cube.notransfer.sparse_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.inc.cube.notransfer.sparse_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.inc.cube.notransfer.sparse_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.inc.cube.notransfer.sparse_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.inc.cube.notransfer.sparse_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.inc.cube.notransfer.sparse_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.inc.cube.notransfer.sparse_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.inc.cube.notransfer.sparse_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.inc.cube.notransfer.sparse_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.inc.cube.notransfer.sparse_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.inc.cube.notransfer.sparse_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.inc.cube.notransfer.sparse_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.inc.cube.notransfer.sparse_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.inc.cube.notransfer.sparse_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.inc.cube.transfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.inc.cube.transfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.inc.cube.transfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.inc.cube.transfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.inc.cube.transfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.inc.cube.transfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.inc.cube.transfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.inc.cube.transfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.inc.cube.transfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.inc.cube.transfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.inc.cube.transfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.inc.cube.transfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.inc.cube.transfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.inc.cube.transfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.inc.cube.transfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.inc.cube.transfer.normal_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.inc.cube_array.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.inc.cube_array.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.inc.cube_array.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.inc.cube_array.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.inc.cube_array.notransfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.inc.cube_array.notransfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.inc.cube_array.notransfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.inc.cube_array.notransfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.inc.cube_array.notransfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.inc.cube_array.notransfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.inc.cube_array.notransfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.inc.cube_array.notransfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.inc.cube_array.notransfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.inc.cube_array.notransfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.inc.cube_array.notransfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.inc.cube_array.notransfer.normal_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.inc.cube_array.notransfer.sparse_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.inc.cube_array.notransfer.sparse_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.inc.cube_array.notransfer.sparse_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.inc.cube_array.notransfer.sparse_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.inc.cube_array.notransfer.sparse_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.inc.cube_array.notransfer.sparse_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.inc.cube_array.notransfer.sparse_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.inc.cube_array.notransfer.sparse_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.inc.cube_array.notransfer.sparse_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.inc.cube_array.notransfer.sparse_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.inc.cube_array.notransfer.sparse_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.inc.cube_array.notransfer.sparse_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.inc.cube_array.notransfer.sparse_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.inc.cube_array.notransfer.sparse_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.inc.cube_array.notransfer.sparse_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.inc.cube_array.notransfer.sparse_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.inc.cube_array.transfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.inc.cube_array.transfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.inc.cube_array.transfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.inc.cube_array.transfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.inc.cube_array.transfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.inc.cube_array.transfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.inc.cube_array.transfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.inc.cube_array.transfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.inc.cube_array.transfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.inc.cube_array.transfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.inc.cube_array.transfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.inc.cube_array.transfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.inc.cube_array.transfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.inc.cube_array.transfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.inc.cube_array.transfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.inc.cube_array.transfer.normal_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.dec.1d.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.dec.1d.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.dec.1d.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.dec.1d.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.dec.1d.notransfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.dec.1d.notransfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.dec.1d.notransfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.dec.1d.notransfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.dec.1d.transfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.dec.1d.transfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.dec.1d.transfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.dec.1d.transfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.dec.1d.transfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.dec.1d.transfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.dec.1d.transfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.dec.1d.transfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.dec.1d_array.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.dec.1d_array.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.dec.1d_array.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.dec.1d_array.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.dec.1d_array.notransfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.dec.1d_array.notransfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.dec.1d_array.notransfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.dec.1d_array.notransfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.dec.1d_array.transfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.dec.1d_array.transfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.dec.1d_array.transfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.dec.1d_array.transfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.dec.1d_array.transfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.dec.1d_array.transfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.dec.1d_array.transfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.dec.1d_array.transfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.dec.2d.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.dec.2d.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.dec.2d.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.dec.2d.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.dec.2d.notransfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.dec.2d.notransfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.dec.2d.notransfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.dec.2d.notransfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.dec.2d.notransfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.dec.2d.notransfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.dec.2d.notransfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.dec.2d.notransfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.dec.2d.notransfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.dec.2d.notransfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.dec.2d.notransfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.dec.2d.notransfer.normal_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.dec.2d.notransfer.sparse_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.dec.2d.notransfer.sparse_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.dec.2d.notransfer.sparse_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.dec.2d.notransfer.sparse_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.dec.2d.notransfer.sparse_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.dec.2d.notransfer.sparse_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.dec.2d.notransfer.sparse_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.dec.2d.notransfer.sparse_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.dec.2d.notransfer.sparse_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.dec.2d.notransfer.sparse_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.dec.2d.notransfer.sparse_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.dec.2d.notransfer.sparse_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.dec.2d.notransfer.sparse_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.dec.2d.notransfer.sparse_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.dec.2d.notransfer.sparse_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.dec.2d.notransfer.sparse_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.dec.2d.transfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.dec.2d.transfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.dec.2d.transfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.dec.2d.transfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.dec.2d.transfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.dec.2d.transfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.dec.2d.transfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.dec.2d.transfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.dec.2d.transfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.dec.2d.transfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.dec.2d.transfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.dec.2d.transfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.dec.2d.transfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.dec.2d.transfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.dec.2d.transfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.dec.2d.transfer.normal_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.dec.2d_array.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.dec.2d_array.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.dec.2d_array.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.dec.2d_array.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.dec.2d_array.notransfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.dec.2d_array.notransfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.dec.2d_array.notransfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.dec.2d_array.notransfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.dec.2d_array.notransfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.dec.2d_array.notransfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.dec.2d_array.notransfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.dec.2d_array.notransfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.dec.2d_array.notransfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.dec.2d_array.notransfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.dec.2d_array.notransfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.dec.2d_array.notransfer.normal_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.dec.2d_array.notransfer.sparse_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.dec.2d_array.notransfer.sparse_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.dec.2d_array.notransfer.sparse_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.dec.2d_array.notransfer.sparse_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.dec.2d_array.notransfer.sparse_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.dec.2d_array.notransfer.sparse_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.dec.2d_array.notransfer.sparse_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.dec.2d_array.notransfer.sparse_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.dec.2d_array.notransfer.sparse_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.dec.2d_array.notransfer.sparse_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.dec.2d_array.notransfer.sparse_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.dec.2d_array.notransfer.sparse_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.dec.2d_array.notransfer.sparse_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.dec.2d_array.notransfer.sparse_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.dec.2d_array.notransfer.sparse_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.dec.2d_array.notransfer.sparse_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.dec.2d_array.transfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.dec.2d_array.transfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.dec.2d_array.transfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.dec.2d_array.transfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.dec.2d_array.transfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.dec.2d_array.transfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.dec.2d_array.transfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.dec.2d_array.transfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.dec.2d_array.transfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.dec.2d_array.transfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.dec.2d_array.transfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.dec.2d_array.transfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.dec.2d_array.transfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.dec.2d_array.transfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.dec.2d_array.transfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.dec.2d_array.transfer.normal_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.dec.3d.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.dec.3d.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.dec.3d.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.dec.3d.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.dec.3d.notransfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.dec.3d.notransfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.dec.3d.notransfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.dec.3d.notransfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.dec.3d.notransfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.dec.3d.notransfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.dec.3d.notransfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.dec.3d.notransfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.dec.3d.notransfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.dec.3d.notransfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.dec.3d.notransfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.dec.3d.notransfer.normal_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.dec.3d.notransfer.sparse_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.dec.3d.notransfer.sparse_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.dec.3d.notransfer.sparse_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.dec.3d.notransfer.sparse_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.dec.3d.notransfer.sparse_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.dec.3d.notransfer.sparse_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.dec.3d.notransfer.sparse_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.dec.3d.notransfer.sparse_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.dec.3d.notransfer.sparse_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.dec.3d.notransfer.sparse_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.dec.3d.notransfer.sparse_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.dec.3d.notransfer.sparse_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.dec.3d.notransfer.sparse_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.dec.3d.notransfer.sparse_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.dec.3d.notransfer.sparse_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.dec.3d.notransfer.sparse_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.dec.3d.transfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.dec.3d.transfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.dec.3d.transfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.dec.3d.transfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.dec.3d.transfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.dec.3d.transfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.dec.3d.transfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.dec.3d.transfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.dec.3d.transfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.dec.3d.transfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.dec.3d.transfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.dec.3d.transfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.dec.3d.transfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.dec.3d.transfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.dec.3d.transfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.dec.3d.transfer.normal_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.dec.cube.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.dec.cube.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.dec.cube.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.dec.cube.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.dec.cube.notransfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.dec.cube.notransfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.dec.cube.notransfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.dec.cube.notransfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.dec.cube.notransfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.dec.cube.notransfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.dec.cube.notransfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.dec.cube.notransfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.dec.cube.notransfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.dec.cube.notransfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.dec.cube.notransfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.dec.cube.notransfer.normal_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.dec.cube.notransfer.sparse_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.dec.cube.notransfer.sparse_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.dec.cube.notransfer.sparse_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.dec.cube.notransfer.sparse_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.dec.cube.notransfer.sparse_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.dec.cube.notransfer.sparse_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.dec.cube.notransfer.sparse_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.dec.cube.notransfer.sparse_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.dec.cube.notransfer.sparse_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.dec.cube.notransfer.sparse_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.dec.cube.notransfer.sparse_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.dec.cube.notransfer.sparse_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.dec.cube.notransfer.sparse_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.dec.cube.notransfer.sparse_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.dec.cube.notransfer.sparse_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.dec.cube.notransfer.sparse_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.dec.cube.transfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.dec.cube.transfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.dec.cube.transfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.dec.cube.transfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.dec.cube.transfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.dec.cube.transfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.dec.cube.transfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.dec.cube.transfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.dec.cube.transfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.dec.cube.transfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.dec.cube.transfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.dec.cube.transfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.dec.cube.transfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.dec.cube.transfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.dec.cube.transfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.dec.cube.transfer.normal_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.dec.cube_array.notransfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.dec.cube_array.notransfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.dec.cube_array.notransfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.dec.cube_array.notransfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.dec.cube_array.notransfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.dec.cube_array.notransfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.dec.cube_array.notransfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.dec.cube_array.notransfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.dec.cube_array.notransfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.dec.cube_array.notransfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.dec.cube_array.notransfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.dec.cube_array.notransfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.dec.cube_array.notransfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.dec.cube_array.notransfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.dec.cube_array.notransfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.dec.cube_array.notransfer.normal_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.dec.cube_array.notransfer.sparse_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.dec.cube_array.notransfer.sparse_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.dec.cube_array.notransfer.sparse_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.dec.cube_array.notransfer.sparse_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.dec.cube_array.notransfer.sparse_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.dec.cube_array.notransfer.sparse_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.dec.cube_array.notransfer.sparse_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.dec.cube_array.notransfer.sparse_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.dec.cube_array.notransfer.sparse_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.dec.cube_array.notransfer.sparse_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.dec.cube_array.notransfer.sparse_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.dec.cube_array.notransfer.sparse_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.dec.cube_array.notransfer.sparse_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.dec.cube_array.notransfer.sparse_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.dec.cube_array.notransfer.sparse_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.dec.cube_array.notransfer.sparse_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.dec.cube_array.transfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.dec.cube_array.transfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.dec.cube_array.transfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.dec.cube_array.transfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.dec.cube_array.transfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.dec.cube_array.transfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.dec.cube_array.transfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.dec.cube_array.transfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.dec.cube_array.transfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.dec.cube_array.transfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.dec.cube_array.transfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.dec.cube_array.transfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.dec.cube_array.transfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.dec.cube_array.transfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.dec.cube_array.transfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.dec.cube_array.transfer.normal_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.min.1d.notransfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.min.1d.notransfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.min.1d.notransfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.min.1d.notransfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.min.1d.transfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.min.1d.transfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.min.1d.transfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.min.1d.transfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.min.1d.transfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.min.1d.transfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.min.1d.transfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.min.1d.transfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.min.1d_array.notransfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.min.1d_array.notransfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.min.1d_array.notransfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.min.1d_array.notransfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.min.1d_array.transfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.min.1d_array.transfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.min.1d_array.transfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.min.1d_array.transfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.min.1d_array.transfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.min.1d_array.transfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.min.1d_array.transfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.min.1d_array.transfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.min.2d.notransfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.min.2d.notransfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.min.2d.notransfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.min.2d.notransfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.min.2d.notransfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.min.2d.notransfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.min.2d.notransfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.min.2d.notransfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.min.2d.notransfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.min.2d.notransfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.min.2d.notransfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.min.2d.notransfer.normal_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.min.2d.notransfer.sparse_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.min.2d.notransfer.sparse_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.min.2d.notransfer.sparse_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.min.2d.notransfer.sparse_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.min.2d.notransfer.sparse_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.min.2d.notransfer.sparse_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.min.2d.notransfer.sparse_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.min.2d.notransfer.sparse_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.min.2d.notransfer.sparse_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.min.2d.notransfer.sparse_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.min.2d.notransfer.sparse_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.min.2d.notransfer.sparse_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.min.2d.notransfer.sparse_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.min.2d.notransfer.sparse_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.min.2d.notransfer.sparse_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.min.2d.notransfer.sparse_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.min.2d.transfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.min.2d.transfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.min.2d.transfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.min.2d.transfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.min.2d.transfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.min.2d.transfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.min.2d.transfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.min.2d.transfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.min.2d.transfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.min.2d.transfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.min.2d.transfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.min.2d.transfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.min.2d.transfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.min.2d.transfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.min.2d.transfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.min.2d.transfer.normal_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.min.2d_array.notransfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.min.2d_array.notransfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.min.2d_array.notransfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.min.2d_array.notransfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.min.2d_array.notransfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.min.2d_array.notransfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.min.2d_array.notransfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.min.2d_array.notransfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.min.2d_array.notransfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.min.2d_array.notransfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.min.2d_array.notransfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.min.2d_array.notransfer.normal_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.min.2d_array.notransfer.sparse_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.min.2d_array.notransfer.sparse_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.min.2d_array.notransfer.sparse_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.min.2d_array.notransfer.sparse_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.min.2d_array.notransfer.sparse_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.min.2d_array.notransfer.sparse_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.min.2d_array.notransfer.sparse_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.min.2d_array.notransfer.sparse_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.min.2d_array.notransfer.sparse_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.min.2d_array.notransfer.sparse_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.min.2d_array.notransfer.sparse_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.min.2d_array.notransfer.sparse_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.min.2d_array.notransfer.sparse_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.min.2d_array.notransfer.sparse_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.min.2d_array.notransfer.sparse_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.min.2d_array.notransfer.sparse_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.min.2d_array.transfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.min.2d_array.transfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.min.2d_array.transfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.min.2d_array.transfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.min.2d_array.transfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.min.2d_array.transfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.min.2d_array.transfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.min.2d_array.transfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.min.2d_array.transfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.min.2d_array.transfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.min.2d_array.transfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.min.2d_array.transfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.min.2d_array.transfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.min.2d_array.transfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.min.2d_array.transfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.min.2d_array.transfer.normal_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.min.3d.notransfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.min.3d.notransfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.min.3d.notransfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.min.3d.notransfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.min.3d.notransfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.min.3d.notransfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.min.3d.notransfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.min.3d.notransfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.min.3d.notransfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.min.3d.notransfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.min.3d.notransfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.min.3d.notransfer.normal_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.min.3d.notransfer.sparse_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.min.3d.notransfer.sparse_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.min.3d.notransfer.sparse_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.min.3d.notransfer.sparse_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.min.3d.notransfer.sparse_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.min.3d.notransfer.sparse_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.min.3d.notransfer.sparse_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.min.3d.notransfer.sparse_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.min.3d.notransfer.sparse_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.min.3d.notransfer.sparse_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.min.3d.notransfer.sparse_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.min.3d.notransfer.sparse_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.min.3d.notransfer.sparse_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.min.3d.notransfer.sparse_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.min.3d.notransfer.sparse_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.min.3d.notransfer.sparse_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.min.3d.transfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.min.3d.transfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.min.3d.transfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.min.3d.transfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.min.3d.transfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.min.3d.transfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.min.3d.transfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.min.3d.transfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.min.3d.transfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.min.3d.transfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.min.3d.transfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.min.3d.transfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.min.3d.transfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.min.3d.transfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.min.3d.transfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.min.3d.transfer.normal_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.min.cube.notransfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.min.cube.notransfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.min.cube.notransfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.min.cube.notransfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.min.cube.notransfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.min.cube.notransfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.min.cube.notransfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.min.cube.notransfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.min.cube.notransfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.min.cube.notransfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.min.cube.notransfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.min.cube.notransfer.normal_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.min.cube.notransfer.sparse_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.min.cube.notransfer.sparse_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.min.cube.notransfer.sparse_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.min.cube.notransfer.sparse_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.min.cube.notransfer.sparse_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.min.cube.notransfer.sparse_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.min.cube.notransfer.sparse_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.min.cube.notransfer.sparse_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.min.cube.notransfer.sparse_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.min.cube.notransfer.sparse_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.min.cube.notransfer.sparse_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.min.cube.notransfer.sparse_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.min.cube.notransfer.sparse_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.min.cube.notransfer.sparse_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.min.cube.notransfer.sparse_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.min.cube.notransfer.sparse_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.min.cube.transfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.min.cube.transfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.min.cube.transfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.min.cube.transfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.min.cube.transfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.min.cube.transfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.min.cube.transfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.min.cube.transfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.min.cube.transfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.min.cube.transfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.min.cube.transfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.min.cube.transfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.min.cube.transfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.min.cube.transfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.min.cube.transfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.min.cube.transfer.normal_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.min.cube_array.notransfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.min.cube_array.notransfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.min.cube_array.notransfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.min.cube_array.notransfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.min.cube_array.notransfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.min.cube_array.notransfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.min.cube_array.notransfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.min.cube_array.notransfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.min.cube_array.notransfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.min.cube_array.notransfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.min.cube_array.notransfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.min.cube_array.notransfer.normal_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.min.cube_array.notransfer.sparse_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.min.cube_array.notransfer.sparse_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.min.cube_array.notransfer.sparse_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.min.cube_array.notransfer.sparse_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.min.cube_array.notransfer.sparse_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.min.cube_array.notransfer.sparse_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.min.cube_array.notransfer.sparse_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.min.cube_array.notransfer.sparse_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.min.cube_array.notransfer.sparse_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.min.cube_array.notransfer.sparse_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.min.cube_array.notransfer.sparse_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.min.cube_array.notransfer.sparse_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.min.cube_array.notransfer.sparse_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.min.cube_array.notransfer.sparse_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.min.cube_array.notransfer.sparse_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.min.cube_array.notransfer.sparse_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.min.cube_array.transfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.min.cube_array.transfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.min.cube_array.transfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.min.cube_array.transfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.min.cube_array.transfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.min.cube_array.transfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.min.cube_array.transfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.min.cube_array.transfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.min.cube_array.transfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.min.cube_array.transfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.min.cube_array.transfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.min.cube_array.transfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.min.cube_array.transfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.min.cube_array.transfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.min.cube_array.transfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.min.cube_array.transfer.normal_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.max.1d.notransfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.max.1d.notransfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.max.1d.notransfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.max.1d.notransfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.max.1d.transfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.max.1d.transfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.max.1d.transfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.max.1d.transfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.max.1d.transfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.max.1d.transfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.max.1d.transfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.max.1d.transfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.max.1d_array.notransfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.max.1d_array.notransfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.max.1d_array.notransfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.max.1d_array.notransfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.max.1d_array.transfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.max.1d_array.transfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.max.1d_array.transfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.max.1d_array.transfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.max.1d_array.transfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.max.1d_array.transfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.max.1d_array.transfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.max.1d_array.transfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.max.2d.notransfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.max.2d.notransfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.max.2d.notransfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.max.2d.notransfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.max.2d.notransfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.max.2d.notransfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.max.2d.notransfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.max.2d.notransfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.max.2d.notransfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.max.2d.notransfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.max.2d.notransfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.max.2d.notransfer.normal_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.max.2d.notransfer.sparse_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.max.2d.notransfer.sparse_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.max.2d.notransfer.sparse_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.max.2d.notransfer.sparse_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.max.2d.notransfer.sparse_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.max.2d.notransfer.sparse_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.max.2d.notransfer.sparse_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.max.2d.notransfer.sparse_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.max.2d.notransfer.sparse_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.max.2d.notransfer.sparse_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.max.2d.notransfer.sparse_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.max.2d.notransfer.sparse_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.max.2d.notransfer.sparse_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.max.2d.notransfer.sparse_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.max.2d.notransfer.sparse_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.max.2d.notransfer.sparse_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.max.2d.transfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.max.2d.transfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.max.2d.transfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.max.2d.transfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.max.2d.transfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.max.2d.transfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.max.2d.transfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.max.2d.transfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.max.2d.transfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.max.2d.transfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.max.2d.transfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.max.2d.transfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.max.2d.transfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.max.2d.transfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.max.2d.transfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.max.2d.transfer.normal_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.max.2d_array.notransfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.max.2d_array.notransfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.max.2d_array.notransfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.max.2d_array.notransfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.max.2d_array.notransfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.max.2d_array.notransfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.max.2d_array.notransfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.max.2d_array.notransfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.max.2d_array.notransfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.max.2d_array.notransfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.max.2d_array.notransfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.max.2d_array.notransfer.normal_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.max.2d_array.notransfer.sparse_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.max.2d_array.notransfer.sparse_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.max.2d_array.notransfer.sparse_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.max.2d_array.notransfer.sparse_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.max.2d_array.notransfer.sparse_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.max.2d_array.notransfer.sparse_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.max.2d_array.notransfer.sparse_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.max.2d_array.notransfer.sparse_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.max.2d_array.notransfer.sparse_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.max.2d_array.notransfer.sparse_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.max.2d_array.notransfer.sparse_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.max.2d_array.notransfer.sparse_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.max.2d_array.notransfer.sparse_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.max.2d_array.notransfer.sparse_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.max.2d_array.notransfer.sparse_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.max.2d_array.notransfer.sparse_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.max.2d_array.transfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.max.2d_array.transfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.max.2d_array.transfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.max.2d_array.transfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.max.2d_array.transfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.max.2d_array.transfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.max.2d_array.transfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.max.2d_array.transfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.max.2d_array.transfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.max.2d_array.transfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.max.2d_array.transfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.max.2d_array.transfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.max.2d_array.transfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.max.2d_array.transfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.max.2d_array.transfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.max.2d_array.transfer.normal_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.max.3d.notransfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.max.3d.notransfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.max.3d.notransfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.max.3d.notransfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.max.3d.notransfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.max.3d.notransfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.max.3d.notransfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.max.3d.notransfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.max.3d.notransfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.max.3d.notransfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.max.3d.notransfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.max.3d.notransfer.normal_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.max.3d.notransfer.sparse_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.max.3d.notransfer.sparse_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.max.3d.notransfer.sparse_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.max.3d.notransfer.sparse_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.max.3d.notransfer.sparse_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.max.3d.notransfer.sparse_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.max.3d.notransfer.sparse_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.max.3d.notransfer.sparse_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.max.3d.notransfer.sparse_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.max.3d.notransfer.sparse_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.max.3d.notransfer.sparse_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.max.3d.notransfer.sparse_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.max.3d.notransfer.sparse_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.max.3d.notransfer.sparse_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.max.3d.notransfer.sparse_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.max.3d.notransfer.sparse_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.max.3d.transfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.max.3d.transfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.max.3d.transfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.max.3d.transfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.max.3d.transfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.max.3d.transfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.max.3d.transfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.max.3d.transfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.max.3d.transfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.max.3d.transfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.max.3d.transfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.max.3d.transfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.max.3d.transfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.max.3d.transfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.max.3d.transfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.max.3d.transfer.normal_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.max.cube.notransfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.max.cube.notransfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.max.cube.notransfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.max.cube.notransfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.max.cube.notransfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.max.cube.notransfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.max.cube.notransfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.max.cube.notransfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.max.cube.notransfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.max.cube.notransfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.max.cube.notransfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.max.cube.notransfer.normal_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.max.cube.notransfer.sparse_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.max.cube.notransfer.sparse_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.max.cube.notransfer.sparse_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.max.cube.notransfer.sparse_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.max.cube.notransfer.sparse_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.max.cube.notransfer.sparse_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.max.cube.notransfer.sparse_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.max.cube.notransfer.sparse_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.max.cube.notransfer.sparse_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.max.cube.notransfer.sparse_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.max.cube.notransfer.sparse_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.max.cube.notransfer.sparse_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.max.cube.notransfer.sparse_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.max.cube.notransfer.sparse_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.max.cube.notransfer.sparse_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.max.cube.notransfer.sparse_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.max.cube.transfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.max.cube.transfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.max.cube.transfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.max.cube.transfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.max.cube.transfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.max.cube.transfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.max.cube.transfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.max.cube.transfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.max.cube.transfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.max.cube.transfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.max.cube.transfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.max.cube.transfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.max.cube.transfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.max.cube.transfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.max.cube.transfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.max.cube.transfer.normal_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.max.cube_array.notransfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.max.cube_array.notransfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.max.cube_array.notransfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.max.cube_array.notransfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.max.cube_array.notransfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.max.cube_array.notransfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.max.cube_array.notransfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.max.cube_array.notransfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.max.cube_array.notransfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.max.cube_array.notransfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.max.cube_array.notransfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.max.cube_array.notransfer.normal_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.max.cube_array.notransfer.sparse_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.max.cube_array.notransfer.sparse_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.max.cube_array.notransfer.sparse_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.max.cube_array.notransfer.sparse_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.max.cube_array.notransfer.sparse_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.max.cube_array.notransfer.sparse_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.max.cube_array.notransfer.sparse_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.max.cube_array.notransfer.sparse_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.max.cube_array.notransfer.sparse_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.max.cube_array.notransfer.sparse_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.max.cube_array.notransfer.sparse_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.max.cube_array.notransfer.sparse_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.max.cube_array.notransfer.sparse_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.max.cube_array.notransfer.sparse_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.max.cube_array.notransfer.sparse_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.max.cube_array.notransfer.sparse_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.max.cube_array.transfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.max.cube_array.transfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.max.cube_array.transfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.max.cube_array.transfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.max.cube_array.transfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.max.cube_array.transfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.max.cube_array.transfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.max.cube_array.transfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.max.cube_array.transfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.max.cube_array.transfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.max.cube_array.transfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.max.cube_array.transfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.max.cube_array.transfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.max.cube_array.transfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.max.cube_array.transfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.max.cube_array.transfer.normal_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.and.1d.notransfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.and.1d.notransfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.and.1d.notransfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.and.1d.notransfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.and.1d.transfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.and.1d.transfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.and.1d.transfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.and.1d.transfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.and.1d.transfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.and.1d.transfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.and.1d.transfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.and.1d.transfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.and.1d_array.notransfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.and.1d_array.notransfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.and.1d_array.notransfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.and.1d_array.notransfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.and.1d_array.transfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.and.1d_array.transfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.and.1d_array.transfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.and.1d_array.transfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.and.1d_array.transfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.and.1d_array.transfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.and.1d_array.transfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.and.1d_array.transfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.and.2d.notransfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.and.2d.notransfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.and.2d.notransfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.and.2d.notransfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.and.2d.notransfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.and.2d.notransfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.and.2d.notransfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.and.2d.notransfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.and.2d.notransfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.and.2d.notransfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.and.2d.notransfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.and.2d.notransfer.normal_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.and.2d.notransfer.sparse_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.and.2d.notransfer.sparse_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.and.2d.notransfer.sparse_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.and.2d.notransfer.sparse_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.and.2d.notransfer.sparse_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.and.2d.notransfer.sparse_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.and.2d.notransfer.sparse_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.and.2d.notransfer.sparse_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.and.2d.notransfer.sparse_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.and.2d.notransfer.sparse_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.and.2d.notransfer.sparse_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.and.2d.notransfer.sparse_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.and.2d.notransfer.sparse_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.and.2d.notransfer.sparse_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.and.2d.notransfer.sparse_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.and.2d.notransfer.sparse_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.and.2d.transfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.and.2d.transfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.and.2d.transfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.and.2d.transfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.and.2d.transfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.and.2d.transfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.and.2d.transfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.and.2d.transfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.and.2d.transfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.and.2d.transfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.and.2d.transfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.and.2d.transfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.and.2d.transfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.and.2d.transfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.and.2d.transfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.and.2d.transfer.normal_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.and.2d_array.notransfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.and.2d_array.notransfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.and.2d_array.notransfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.and.2d_array.notransfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.and.2d_array.notransfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.and.2d_array.notransfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.and.2d_array.notransfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.and.2d_array.notransfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.and.2d_array.notransfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.and.2d_array.notransfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.and.2d_array.notransfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.and.2d_array.notransfer.normal_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.and.2d_array.notransfer.sparse_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.and.2d_array.notransfer.sparse_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.and.2d_array.notransfer.sparse_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.and.2d_array.notransfer.sparse_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.and.2d_array.notransfer.sparse_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.and.2d_array.notransfer.sparse_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.and.2d_array.notransfer.sparse_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.and.2d_array.notransfer.sparse_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.and.2d_array.notransfer.sparse_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.and.2d_array.notransfer.sparse_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.and.2d_array.notransfer.sparse_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.and.2d_array.notransfer.sparse_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.and.2d_array.notransfer.sparse_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.and.2d_array.notransfer.sparse_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.and.2d_array.notransfer.sparse_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.and.2d_array.notransfer.sparse_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.and.2d_array.transfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.and.2d_array.transfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.and.2d_array.transfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.and.2d_array.transfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.and.2d_array.transfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.and.2d_array.transfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.and.2d_array.transfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.and.2d_array.transfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.and.2d_array.transfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.and.2d_array.transfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.and.2d_array.transfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.and.2d_array.transfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.and.2d_array.transfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.and.2d_array.transfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.and.2d_array.transfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.and.2d_array.transfer.normal_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.and.3d.notransfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.and.3d.notransfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.and.3d.notransfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.and.3d.notransfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.and.3d.notransfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.and.3d.notransfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.and.3d.notransfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.and.3d.notransfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.and.3d.notransfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.and.3d.notransfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.and.3d.notransfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.and.3d.notransfer.normal_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.and.3d.notransfer.sparse_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.and.3d.notransfer.sparse_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.and.3d.notransfer.sparse_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.and.3d.notransfer.sparse_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.and.3d.notransfer.sparse_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.and.3d.notransfer.sparse_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.and.3d.notransfer.sparse_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.and.3d.notransfer.sparse_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.and.3d.notransfer.sparse_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.and.3d.notransfer.sparse_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.and.3d.notransfer.sparse_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.and.3d.notransfer.sparse_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.and.3d.notransfer.sparse_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.and.3d.notransfer.sparse_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.and.3d.notransfer.sparse_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.and.3d.notransfer.sparse_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.and.3d.transfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.and.3d.transfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.and.3d.transfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.and.3d.transfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.and.3d.transfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.and.3d.transfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.and.3d.transfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.and.3d.transfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.and.3d.transfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.and.3d.transfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.and.3d.transfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.and.3d.transfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.and.3d.transfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.and.3d.transfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.and.3d.transfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.and.3d.transfer.normal_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.and.cube.notransfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.and.cube.notransfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.and.cube.notransfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.and.cube.notransfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.and.cube.notransfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.and.cube.notransfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.and.cube.notransfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.and.cube.notransfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.and.cube.notransfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.and.cube.notransfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.and.cube.notransfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.and.cube.notransfer.normal_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.and.cube.notransfer.sparse_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.and.cube.notransfer.sparse_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.and.cube.notransfer.sparse_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.and.cube.notransfer.sparse_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.and.cube.notransfer.sparse_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.and.cube.notransfer.sparse_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.and.cube.notransfer.sparse_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.and.cube.notransfer.sparse_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.and.cube.notransfer.sparse_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.and.cube.notransfer.sparse_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.and.cube.notransfer.sparse_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.and.cube.notransfer.sparse_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.and.cube.notransfer.sparse_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.and.cube.notransfer.sparse_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.and.cube.notransfer.sparse_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.and.cube.notransfer.sparse_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.and.cube.transfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.and.cube.transfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.and.cube.transfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.and.cube.transfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.and.cube.transfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.and.cube.transfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.and.cube.transfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.and.cube.transfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.and.cube.transfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.and.cube.transfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.and.cube.transfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.and.cube.transfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.and.cube.transfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.and.cube.transfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.and.cube.transfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.and.cube.transfer.normal_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.and.cube_array.notransfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.and.cube_array.notransfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.and.cube_array.notransfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.and.cube_array.notransfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.and.cube_array.notransfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.and.cube_array.notransfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.and.cube_array.notransfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.and.cube_array.notransfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.and.cube_array.notransfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.and.cube_array.notransfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.and.cube_array.notransfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.and.cube_array.notransfer.normal_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.and.cube_array.notransfer.sparse_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.and.cube_array.notransfer.sparse_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.and.cube_array.notransfer.sparse_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.and.cube_array.notransfer.sparse_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.and.cube_array.notransfer.sparse_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.and.cube_array.notransfer.sparse_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.and.cube_array.notransfer.sparse_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.and.cube_array.notransfer.sparse_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.and.cube_array.notransfer.sparse_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.and.cube_array.notransfer.sparse_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.and.cube_array.notransfer.sparse_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.and.cube_array.notransfer.sparse_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.and.cube_array.notransfer.sparse_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.and.cube_array.notransfer.sparse_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.and.cube_array.notransfer.sparse_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.and.cube_array.notransfer.sparse_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.and.cube_array.transfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.and.cube_array.transfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.and.cube_array.transfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.and.cube_array.transfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.and.cube_array.transfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.and.cube_array.transfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.and.cube_array.transfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.and.cube_array.transfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.and.cube_array.transfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.and.cube_array.transfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.and.cube_array.transfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.and.cube_array.transfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.and.cube_array.transfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.and.cube_array.transfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.and.cube_array.transfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.and.cube_array.transfer.normal_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.or.1d.notransfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.or.1d.notransfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.or.1d.notransfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.or.1d.notransfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.or.1d.transfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.or.1d.transfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.or.1d.transfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.or.1d.transfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.or.1d.transfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.or.1d.transfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.or.1d.transfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.or.1d.transfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.or.1d_array.notransfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.or.1d_array.notransfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.or.1d_array.notransfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.or.1d_array.notransfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.or.1d_array.transfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.or.1d_array.transfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.or.1d_array.transfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.or.1d_array.transfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.or.1d_array.transfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.or.1d_array.transfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.or.1d_array.transfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.or.1d_array.transfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.or.2d.notransfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.or.2d.notransfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.or.2d.notransfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.or.2d.notransfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.or.2d.notransfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.or.2d.notransfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.or.2d.notransfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.or.2d.notransfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.or.2d.notransfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.or.2d.notransfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.or.2d.notransfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.or.2d.notransfer.normal_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.or.2d.notransfer.sparse_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.or.2d.notransfer.sparse_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.or.2d.notransfer.sparse_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.or.2d.notransfer.sparse_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.or.2d.notransfer.sparse_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.or.2d.notransfer.sparse_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.or.2d.notransfer.sparse_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.or.2d.notransfer.sparse_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.or.2d.notransfer.sparse_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.or.2d.notransfer.sparse_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.or.2d.notransfer.sparse_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.or.2d.notransfer.sparse_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.or.2d.notransfer.sparse_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.or.2d.notransfer.sparse_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.or.2d.notransfer.sparse_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.or.2d.notransfer.sparse_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.or.2d.transfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.or.2d.transfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.or.2d.transfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.or.2d.transfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.or.2d.transfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.or.2d.transfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.or.2d.transfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.or.2d.transfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.or.2d.transfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.or.2d.transfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.or.2d.transfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.or.2d.transfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.or.2d.transfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.or.2d.transfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.or.2d.transfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.or.2d.transfer.normal_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.or.2d_array.notransfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.or.2d_array.notransfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.or.2d_array.notransfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.or.2d_array.notransfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.or.2d_array.notransfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.or.2d_array.notransfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.or.2d_array.notransfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.or.2d_array.notransfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.or.2d_array.notransfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.or.2d_array.notransfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.or.2d_array.notransfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.or.2d_array.notransfer.normal_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.or.2d_array.notransfer.sparse_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.or.2d_array.notransfer.sparse_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.or.2d_array.notransfer.sparse_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.or.2d_array.notransfer.sparse_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.or.2d_array.notransfer.sparse_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.or.2d_array.notransfer.sparse_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.or.2d_array.notransfer.sparse_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.or.2d_array.notransfer.sparse_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.or.2d_array.notransfer.sparse_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.or.2d_array.notransfer.sparse_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.or.2d_array.notransfer.sparse_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.or.2d_array.notransfer.sparse_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.or.2d_array.notransfer.sparse_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.or.2d_array.notransfer.sparse_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.or.2d_array.notransfer.sparse_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.or.2d_array.notransfer.sparse_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.or.2d_array.transfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.or.2d_array.transfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.or.2d_array.transfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.or.2d_array.transfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.or.2d_array.transfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.or.2d_array.transfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.or.2d_array.transfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.or.2d_array.transfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.or.2d_array.transfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.or.2d_array.transfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.or.2d_array.transfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.or.2d_array.transfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.or.2d_array.transfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.or.2d_array.transfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.or.2d_array.transfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.or.2d_array.transfer.normal_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.or.3d.notransfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.or.3d.notransfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.or.3d.notransfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.or.3d.notransfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.or.3d.notransfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.or.3d.notransfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.or.3d.notransfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.or.3d.notransfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.or.3d.notransfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.or.3d.notransfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.or.3d.notransfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.or.3d.notransfer.normal_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.or.3d.notransfer.sparse_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.or.3d.notransfer.sparse_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.or.3d.notransfer.sparse_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.or.3d.notransfer.sparse_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.or.3d.notransfer.sparse_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.or.3d.notransfer.sparse_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.or.3d.notransfer.sparse_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.or.3d.notransfer.sparse_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.or.3d.notransfer.sparse_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.or.3d.notransfer.sparse_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.or.3d.notransfer.sparse_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.or.3d.notransfer.sparse_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.or.3d.notransfer.sparse_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.or.3d.notransfer.sparse_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.or.3d.notransfer.sparse_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.or.3d.notransfer.sparse_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.or.3d.transfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.or.3d.transfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.or.3d.transfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.or.3d.transfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.or.3d.transfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.or.3d.transfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.or.3d.transfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.or.3d.transfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.or.3d.transfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.or.3d.transfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.or.3d.transfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.or.3d.transfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.or.3d.transfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.or.3d.transfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.or.3d.transfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.or.3d.transfer.normal_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.or.cube.notransfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.or.cube.notransfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.or.cube.notransfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.or.cube.notransfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.or.cube.notransfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.or.cube.notransfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.or.cube.notransfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.or.cube.notransfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.or.cube.notransfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.or.cube.notransfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.or.cube.notransfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.or.cube.notransfer.normal_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.or.cube.notransfer.sparse_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.or.cube.notransfer.sparse_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.or.cube.notransfer.sparse_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.or.cube.notransfer.sparse_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.or.cube.notransfer.sparse_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.or.cube.notransfer.sparse_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.or.cube.notransfer.sparse_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.or.cube.notransfer.sparse_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.or.cube.notransfer.sparse_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.or.cube.notransfer.sparse_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.or.cube.notransfer.sparse_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.or.cube.notransfer.sparse_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.or.cube.notransfer.sparse_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.or.cube.notransfer.sparse_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.or.cube.notransfer.sparse_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.or.cube.notransfer.sparse_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.or.cube.transfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.or.cube.transfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.or.cube.transfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.or.cube.transfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.or.cube.transfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.or.cube.transfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.or.cube.transfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.or.cube.transfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.or.cube.transfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.or.cube.transfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.or.cube.transfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.or.cube.transfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.or.cube.transfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.or.cube.transfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.or.cube.transfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.or.cube.transfer.normal_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.or.cube_array.notransfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.or.cube_array.notransfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.or.cube_array.notransfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.or.cube_array.notransfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.or.cube_array.notransfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.or.cube_array.notransfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.or.cube_array.notransfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.or.cube_array.notransfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.or.cube_array.notransfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.or.cube_array.notransfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.or.cube_array.notransfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.or.cube_array.notransfer.normal_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.or.cube_array.notransfer.sparse_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.or.cube_array.notransfer.sparse_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.or.cube_array.notransfer.sparse_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.or.cube_array.notransfer.sparse_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.or.cube_array.notransfer.sparse_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.or.cube_array.notransfer.sparse_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.or.cube_array.notransfer.sparse_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.or.cube_array.notransfer.sparse_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.or.cube_array.notransfer.sparse_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.or.cube_array.notransfer.sparse_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.or.cube_array.notransfer.sparse_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.or.cube_array.notransfer.sparse_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.or.cube_array.notransfer.sparse_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.or.cube_array.notransfer.sparse_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.or.cube_array.notransfer.sparse_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.or.cube_array.notransfer.sparse_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.or.cube_array.transfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.or.cube_array.transfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.or.cube_array.transfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.or.cube_array.transfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.or.cube_array.transfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.or.cube_array.transfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.or.cube_array.transfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.or.cube_array.transfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.or.cube_array.transfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.or.cube_array.transfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.or.cube_array.transfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.or.cube_array.transfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.or.cube_array.transfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.or.cube_array.transfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.or.cube_array.transfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.or.cube_array.transfer.normal_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.xor.1d.notransfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.xor.1d.notransfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.xor.1d.notransfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.xor.1d.notransfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.xor.1d.transfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.xor.1d.transfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.xor.1d.transfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.xor.1d.transfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.xor.1d.transfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.xor.1d.transfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.xor.1d.transfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.xor.1d.transfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.xor.1d_array.notransfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.xor.1d_array.notransfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.xor.1d_array.notransfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.xor.1d_array.notransfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.xor.1d_array.transfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.xor.1d_array.transfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.xor.1d_array.transfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.xor.1d_array.transfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.xor.1d_array.transfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.xor.1d_array.transfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.xor.1d_array.transfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.xor.1d_array.transfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.xor.2d.notransfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.xor.2d.notransfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.xor.2d.notransfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.xor.2d.notransfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.xor.2d.notransfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.xor.2d.notransfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.xor.2d.notransfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.xor.2d.notransfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.xor.2d.notransfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.xor.2d.notransfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.xor.2d.notransfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.xor.2d.notransfer.normal_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.xor.2d.notransfer.sparse_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.xor.2d.notransfer.sparse_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.xor.2d.notransfer.sparse_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.xor.2d.notransfer.sparse_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.xor.2d.notransfer.sparse_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.xor.2d.notransfer.sparse_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.xor.2d.notransfer.sparse_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.xor.2d.notransfer.sparse_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.xor.2d.notransfer.sparse_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.xor.2d.notransfer.sparse_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.xor.2d.notransfer.sparse_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.xor.2d.notransfer.sparse_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.xor.2d.notransfer.sparse_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.xor.2d.notransfer.sparse_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.xor.2d.notransfer.sparse_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.xor.2d.notransfer.sparse_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.xor.2d.transfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.xor.2d.transfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.xor.2d.transfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.xor.2d.transfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.xor.2d.transfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.xor.2d.transfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.xor.2d.transfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.xor.2d.transfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.xor.2d.transfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.xor.2d.transfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.xor.2d.transfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.xor.2d.transfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.xor.2d.transfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.xor.2d.transfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.xor.2d.transfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.xor.2d.transfer.normal_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.xor.2d_array.notransfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.xor.2d_array.notransfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.xor.2d_array.notransfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.xor.2d_array.notransfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.xor.2d_array.notransfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.xor.2d_array.notransfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.xor.2d_array.notransfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.xor.2d_array.notransfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.xor.2d_array.notransfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.xor.2d_array.notransfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.xor.2d_array.notransfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.xor.2d_array.notransfer.normal_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.xor.2d_array.notransfer.sparse_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.xor.2d_array.notransfer.sparse_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.xor.2d_array.notransfer.sparse_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.xor.2d_array.notransfer.sparse_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.xor.2d_array.notransfer.sparse_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.xor.2d_array.notransfer.sparse_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.xor.2d_array.notransfer.sparse_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.xor.2d_array.notransfer.sparse_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.xor.2d_array.notransfer.sparse_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.xor.2d_array.notransfer.sparse_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.xor.2d_array.notransfer.sparse_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.xor.2d_array.notransfer.sparse_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.xor.2d_array.notransfer.sparse_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.xor.2d_array.notransfer.sparse_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.xor.2d_array.notransfer.sparse_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.xor.2d_array.notransfer.sparse_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.xor.2d_array.transfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.xor.2d_array.transfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.xor.2d_array.transfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.xor.2d_array.transfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.xor.2d_array.transfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.xor.2d_array.transfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.xor.2d_array.transfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.xor.2d_array.transfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.xor.2d_array.transfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.xor.2d_array.transfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.xor.2d_array.transfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.xor.2d_array.transfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.xor.2d_array.transfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.xor.2d_array.transfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.xor.2d_array.transfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.xor.2d_array.transfer.normal_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.xor.3d.notransfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.xor.3d.notransfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.xor.3d.notransfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.xor.3d.notransfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.xor.3d.notransfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.xor.3d.notransfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.xor.3d.notransfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.xor.3d.notransfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.xor.3d.notransfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.xor.3d.notransfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.xor.3d.notransfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.xor.3d.notransfer.normal_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.xor.3d.notransfer.sparse_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.xor.3d.notransfer.sparse_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.xor.3d.notransfer.sparse_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.xor.3d.notransfer.sparse_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.xor.3d.notransfer.sparse_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.xor.3d.notransfer.sparse_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.xor.3d.notransfer.sparse_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.xor.3d.notransfer.sparse_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.xor.3d.notransfer.sparse_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.xor.3d.notransfer.sparse_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.xor.3d.notransfer.sparse_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.xor.3d.notransfer.sparse_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.xor.3d.notransfer.sparse_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.xor.3d.notransfer.sparse_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.xor.3d.notransfer.sparse_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.xor.3d.notransfer.sparse_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.xor.3d.transfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.xor.3d.transfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.xor.3d.transfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.xor.3d.transfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.xor.3d.transfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.xor.3d.transfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.xor.3d.transfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.xor.3d.transfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.xor.3d.transfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.xor.3d.transfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.xor.3d.transfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.xor.3d.transfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.xor.3d.transfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.xor.3d.transfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.xor.3d.transfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.xor.3d.transfer.normal_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.xor.cube.notransfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.xor.cube.notransfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.xor.cube.notransfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.xor.cube.notransfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.xor.cube.notransfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.xor.cube.notransfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.xor.cube.notransfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.xor.cube.notransfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.xor.cube.notransfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.xor.cube.notransfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.xor.cube.notransfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.xor.cube.notransfer.normal_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.xor.cube.notransfer.sparse_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.xor.cube.notransfer.sparse_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.xor.cube.notransfer.sparse_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.xor.cube.notransfer.sparse_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.xor.cube.notransfer.sparse_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.xor.cube.notransfer.sparse_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.xor.cube.notransfer.sparse_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.xor.cube.notransfer.sparse_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.xor.cube.notransfer.sparse_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.xor.cube.notransfer.sparse_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.xor.cube.notransfer.sparse_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.xor.cube.notransfer.sparse_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.xor.cube.notransfer.sparse_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.xor.cube.notransfer.sparse_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.xor.cube.notransfer.sparse_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.xor.cube.notransfer.sparse_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.xor.cube.transfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.xor.cube.transfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.xor.cube.transfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.xor.cube.transfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.xor.cube.transfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.xor.cube.transfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.xor.cube.transfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.xor.cube.transfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.xor.cube.transfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.xor.cube.transfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.xor.cube.transfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.xor.cube.transfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.xor.cube.transfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.xor.cube.transfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.xor.cube.transfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.xor.cube.transfer.normal_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.xor.cube_array.notransfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.xor.cube_array.notransfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.xor.cube_array.notransfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.xor.cube_array.notransfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.xor.cube_array.notransfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.xor.cube_array.notransfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.xor.cube_array.notransfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.xor.cube_array.notransfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.xor.cube_array.notransfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.xor.cube_array.notransfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.xor.cube_array.notransfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.xor.cube_array.notransfer.normal_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.xor.cube_array.notransfer.sparse_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.xor.cube_array.notransfer.sparse_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.xor.cube_array.notransfer.sparse_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.xor.cube_array.notransfer.sparse_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.xor.cube_array.notransfer.sparse_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.xor.cube_array.notransfer.sparse_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.xor.cube_array.notransfer.sparse_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.xor.cube_array.notransfer.sparse_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.xor.cube_array.notransfer.sparse_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.xor.cube_array.notransfer.sparse_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.xor.cube_array.notransfer.sparse_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.xor.cube_array.notransfer.sparse_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.xor.cube_array.notransfer.sparse_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.xor.cube_array.notransfer.sparse_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.xor.cube_array.notransfer.sparse_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.xor.cube_array.notransfer.sparse_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.xor.cube_array.transfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.xor.cube_array.transfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.xor.cube_array.transfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.xor.cube_array.transfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.xor.cube_array.transfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.xor.cube_array.transfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.xor.cube_array.transfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.xor.cube_array.transfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.xor.cube_array.transfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.xor.cube_array.transfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.xor.cube_array.transfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.xor.cube_array.transfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.xor.cube_array.transfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.xor.cube_array.transfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.xor.cube_array.transfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.xor.cube_array.transfer.normal_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.1d.notransfer.normal_read.normal_img.r32f_end_result
+dEQP-VK.image.atomic_operations.exchange.1d.notransfer.normal_read.normal_img.r32f_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.1d.notransfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.exchange.1d.notransfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.1d.notransfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.exchange.1d.notransfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.1d.transfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.exchange.1d.transfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.1d.transfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.exchange.1d.transfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.1d.transfer.normal_read.normal_img.r32f_end_result
+dEQP-VK.image.atomic_operations.exchange.1d.transfer.normal_read.normal_img.r32f_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.1d.transfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.exchange.1d.transfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.1d.transfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.exchange.1d.transfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.1d_array.notransfer.normal_read.normal_img.r32f_end_result
+dEQP-VK.image.atomic_operations.exchange.1d_array.notransfer.normal_read.normal_img.r32f_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.1d_array.notransfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.exchange.1d_array.notransfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.1d_array.notransfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.exchange.1d_array.notransfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.1d_array.transfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.exchange.1d_array.transfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.1d_array.transfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.exchange.1d_array.transfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.1d_array.transfer.normal_read.normal_img.r32f_end_result
+dEQP-VK.image.atomic_operations.exchange.1d_array.transfer.normal_read.normal_img.r32f_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.1d_array.transfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.exchange.1d_array.transfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.1d_array.transfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.exchange.1d_array.transfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.2d.notransfer.normal_read.normal_img.r32f_end_result
+dEQP-VK.image.atomic_operations.exchange.2d.notransfer.normal_read.normal_img.r32f_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.2d.notransfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.exchange.2d.notransfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.2d.notransfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.exchange.2d.notransfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.2d.notransfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.exchange.2d.notransfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.2d.notransfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.exchange.2d.notransfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.2d.notransfer.normal_read.sparse_img.r32f_end_result
+dEQP-VK.image.atomic_operations.exchange.2d.notransfer.normal_read.sparse_img.r32f_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.2d.notransfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.exchange.2d.notransfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.2d.notransfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.exchange.2d.notransfer.normal_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.2d.notransfer.sparse_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.exchange.2d.notransfer.sparse_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.2d.notransfer.sparse_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.exchange.2d.notransfer.sparse_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.2d.notransfer.sparse_read.normal_img.r32f_end_result
+dEQP-VK.image.atomic_operations.exchange.2d.notransfer.sparse_read.normal_img.r32f_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.2d.notransfer.sparse_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.exchange.2d.notransfer.sparse_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.2d.notransfer.sparse_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.exchange.2d.notransfer.sparse_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.2d.notransfer.sparse_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.exchange.2d.notransfer.sparse_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.2d.notransfer.sparse_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.exchange.2d.notransfer.sparse_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.2d.notransfer.sparse_read.sparse_img.r32f_end_result
+dEQP-VK.image.atomic_operations.exchange.2d.notransfer.sparse_read.sparse_img.r32f_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.2d.notransfer.sparse_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.exchange.2d.notransfer.sparse_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.2d.notransfer.sparse_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.exchange.2d.notransfer.sparse_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.2d.transfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.exchange.2d.transfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.2d.transfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.exchange.2d.transfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.2d.transfer.normal_read.normal_img.r32f_end_result
+dEQP-VK.image.atomic_operations.exchange.2d.transfer.normal_read.normal_img.r32f_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.2d.transfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.exchange.2d.transfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.2d.transfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.exchange.2d.transfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.2d.transfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.exchange.2d.transfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.2d.transfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.exchange.2d.transfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.2d.transfer.normal_read.sparse_img.r32f_end_result
+dEQP-VK.image.atomic_operations.exchange.2d.transfer.normal_read.sparse_img.r32f_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.2d.transfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.exchange.2d.transfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.2d.transfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.exchange.2d.transfer.normal_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.2d_array.notransfer.normal_read.normal_img.r32f_end_result
+dEQP-VK.image.atomic_operations.exchange.2d_array.notransfer.normal_read.normal_img.r32f_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.2d_array.notransfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.exchange.2d_array.notransfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.2d_array.notransfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.exchange.2d_array.notransfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.2d_array.notransfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.exchange.2d_array.notransfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.2d_array.notransfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.exchange.2d_array.notransfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.2d_array.notransfer.normal_read.sparse_img.r32f_end_result
+dEQP-VK.image.atomic_operations.exchange.2d_array.notransfer.normal_read.sparse_img.r32f_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.2d_array.notransfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.exchange.2d_array.notransfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.2d_array.notransfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.exchange.2d_array.notransfer.normal_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.2d_array.notransfer.sparse_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.exchange.2d_array.notransfer.sparse_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.2d_array.notransfer.sparse_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.exchange.2d_array.notransfer.sparse_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.2d_array.notransfer.sparse_read.normal_img.r32f_end_result
+dEQP-VK.image.atomic_operations.exchange.2d_array.notransfer.sparse_read.normal_img.r32f_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.2d_array.notransfer.sparse_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.exchange.2d_array.notransfer.sparse_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.2d_array.notransfer.sparse_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.exchange.2d_array.notransfer.sparse_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.2d_array.notransfer.sparse_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.exchange.2d_array.notransfer.sparse_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.2d_array.notransfer.sparse_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.exchange.2d_array.notransfer.sparse_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.2d_array.notransfer.sparse_read.sparse_img.r32f_end_result
+dEQP-VK.image.atomic_operations.exchange.2d_array.notransfer.sparse_read.sparse_img.r32f_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.2d_array.notransfer.sparse_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.exchange.2d_array.notransfer.sparse_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.2d_array.notransfer.sparse_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.exchange.2d_array.notransfer.sparse_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.2d_array.transfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.exchange.2d_array.transfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.2d_array.transfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.exchange.2d_array.transfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.2d_array.transfer.normal_read.normal_img.r32f_end_result
+dEQP-VK.image.atomic_operations.exchange.2d_array.transfer.normal_read.normal_img.r32f_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.2d_array.transfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.exchange.2d_array.transfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.2d_array.transfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.exchange.2d_array.transfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.2d_array.transfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.exchange.2d_array.transfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.2d_array.transfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.exchange.2d_array.transfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.2d_array.transfer.normal_read.sparse_img.r32f_end_result
+dEQP-VK.image.atomic_operations.exchange.2d_array.transfer.normal_read.sparse_img.r32f_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.2d_array.transfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.exchange.2d_array.transfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.2d_array.transfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.exchange.2d_array.transfer.normal_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.3d.notransfer.normal_read.normal_img.r32f_end_result
+dEQP-VK.image.atomic_operations.exchange.3d.notransfer.normal_read.normal_img.r32f_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.3d.notransfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.exchange.3d.notransfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.3d.notransfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.exchange.3d.notransfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.3d.notransfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.exchange.3d.notransfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.3d.notransfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.exchange.3d.notransfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.3d.notransfer.normal_read.sparse_img.r32f_end_result
+dEQP-VK.image.atomic_operations.exchange.3d.notransfer.normal_read.sparse_img.r32f_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.3d.notransfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.exchange.3d.notransfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.3d.notransfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.exchange.3d.notransfer.normal_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.3d.notransfer.sparse_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.exchange.3d.notransfer.sparse_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.3d.notransfer.sparse_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.exchange.3d.notransfer.sparse_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.3d.notransfer.sparse_read.normal_img.r32f_end_result
+dEQP-VK.image.atomic_operations.exchange.3d.notransfer.sparse_read.normal_img.r32f_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.3d.notransfer.sparse_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.exchange.3d.notransfer.sparse_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.3d.notransfer.sparse_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.exchange.3d.notransfer.sparse_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.3d.notransfer.sparse_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.exchange.3d.notransfer.sparse_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.3d.notransfer.sparse_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.exchange.3d.notransfer.sparse_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.3d.notransfer.sparse_read.sparse_img.r32f_end_result
+dEQP-VK.image.atomic_operations.exchange.3d.notransfer.sparse_read.sparse_img.r32f_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.3d.notransfer.sparse_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.exchange.3d.notransfer.sparse_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.3d.notransfer.sparse_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.exchange.3d.notransfer.sparse_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.3d.transfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.exchange.3d.transfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.3d.transfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.exchange.3d.transfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.3d.transfer.normal_read.normal_img.r32f_end_result
+dEQP-VK.image.atomic_operations.exchange.3d.transfer.normal_read.normal_img.r32f_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.3d.transfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.exchange.3d.transfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.3d.transfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.exchange.3d.transfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.3d.transfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.exchange.3d.transfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.3d.transfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.exchange.3d.transfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.3d.transfer.normal_read.sparse_img.r32f_end_result
+dEQP-VK.image.atomic_operations.exchange.3d.transfer.normal_read.sparse_img.r32f_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.3d.transfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.exchange.3d.transfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.3d.transfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.exchange.3d.transfer.normal_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.cube.notransfer.normal_read.normal_img.r32f_end_result
+dEQP-VK.image.atomic_operations.exchange.cube.notransfer.normal_read.normal_img.r32f_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.cube.notransfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.exchange.cube.notransfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.cube.notransfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.exchange.cube.notransfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.cube.notransfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.exchange.cube.notransfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.cube.notransfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.exchange.cube.notransfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.cube.notransfer.normal_read.sparse_img.r32f_end_result
+dEQP-VK.image.atomic_operations.exchange.cube.notransfer.normal_read.sparse_img.r32f_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.cube.notransfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.exchange.cube.notransfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.cube.notransfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.exchange.cube.notransfer.normal_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.cube.notransfer.sparse_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.exchange.cube.notransfer.sparse_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.cube.notransfer.sparse_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.exchange.cube.notransfer.sparse_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.cube.notransfer.sparse_read.normal_img.r32f_end_result
+dEQP-VK.image.atomic_operations.exchange.cube.notransfer.sparse_read.normal_img.r32f_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.cube.notransfer.sparse_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.exchange.cube.notransfer.sparse_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.cube.notransfer.sparse_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.exchange.cube.notransfer.sparse_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.cube.notransfer.sparse_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.exchange.cube.notransfer.sparse_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.cube.notransfer.sparse_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.exchange.cube.notransfer.sparse_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.cube.notransfer.sparse_read.sparse_img.r32f_end_result
+dEQP-VK.image.atomic_operations.exchange.cube.notransfer.sparse_read.sparse_img.r32f_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.cube.notransfer.sparse_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.exchange.cube.notransfer.sparse_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.cube.notransfer.sparse_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.exchange.cube.notransfer.sparse_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.cube.transfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.exchange.cube.transfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.cube.transfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.exchange.cube.transfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.cube.transfer.normal_read.normal_img.r32f_end_result
+dEQP-VK.image.atomic_operations.exchange.cube.transfer.normal_read.normal_img.r32f_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.cube.transfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.exchange.cube.transfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.cube.transfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.exchange.cube.transfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.cube.transfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.exchange.cube.transfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.cube.transfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.exchange.cube.transfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.cube.transfer.normal_read.sparse_img.r32f_end_result
+dEQP-VK.image.atomic_operations.exchange.cube.transfer.normal_read.sparse_img.r32f_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.cube.transfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.exchange.cube.transfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.cube.transfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.exchange.cube.transfer.normal_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.cube_array.notransfer.normal_read.normal_img.r32f_end_result
+dEQP-VK.image.atomic_operations.exchange.cube_array.notransfer.normal_read.normal_img.r32f_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.cube_array.notransfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.exchange.cube_array.notransfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.cube_array.notransfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.exchange.cube_array.notransfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.cube_array.notransfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.exchange.cube_array.notransfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.cube_array.notransfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.exchange.cube_array.notransfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.cube_array.notransfer.normal_read.sparse_img.r32f_end_result
+dEQP-VK.image.atomic_operations.exchange.cube_array.notransfer.normal_read.sparse_img.r32f_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.cube_array.notransfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.exchange.cube_array.notransfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.cube_array.notransfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.exchange.cube_array.notransfer.normal_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.cube_array.notransfer.sparse_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.exchange.cube_array.notransfer.sparse_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.cube_array.notransfer.sparse_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.exchange.cube_array.notransfer.sparse_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.cube_array.notransfer.sparse_read.normal_img.r32f_end_result
+dEQP-VK.image.atomic_operations.exchange.cube_array.notransfer.sparse_read.normal_img.r32f_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.cube_array.notransfer.sparse_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.exchange.cube_array.notransfer.sparse_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.cube_array.notransfer.sparse_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.exchange.cube_array.notransfer.sparse_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.cube_array.notransfer.sparse_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.exchange.cube_array.notransfer.sparse_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.cube_array.notransfer.sparse_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.exchange.cube_array.notransfer.sparse_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.cube_array.notransfer.sparse_read.sparse_img.r32f_end_result
+dEQP-VK.image.atomic_operations.exchange.cube_array.notransfer.sparse_read.sparse_img.r32f_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.cube_array.notransfer.sparse_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.exchange.cube_array.notransfer.sparse_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.cube_array.notransfer.sparse_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.exchange.cube_array.notransfer.sparse_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.cube_array.transfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.exchange.cube_array.transfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.cube_array.transfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.exchange.cube_array.transfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.cube_array.transfer.normal_read.normal_img.r32f_end_result
+dEQP-VK.image.atomic_operations.exchange.cube_array.transfer.normal_read.normal_img.r32f_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.cube_array.transfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.exchange.cube_array.transfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.cube_array.transfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.exchange.cube_array.transfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.cube_array.transfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.exchange.cube_array.transfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.cube_array.transfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.exchange.cube_array.transfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.cube_array.transfer.normal_read.sparse_img.r32f_end_result
+dEQP-VK.image.atomic_operations.exchange.cube_array.transfer.normal_read.sparse_img.r32f_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.cube_array.transfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.exchange.cube_array.transfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.cube_array.transfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.exchange.cube_array.transfer.normal_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.buffer.notransfer.normal_read.normal_img.r32f_end_result
+dEQP-VK.image.atomic_operations.exchange.buffer.notransfer.normal_read.normal_img.r32f_intermediate_values
+dEQP-VK.image.atomic_operations.exchange.buffer.transfer.normal_read.normal_img.r32f_end_result
+dEQP-VK.image.atomic_operations.exchange.buffer.transfer.normal_read.normal_img.r32f_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.1d.notransfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.1d.notransfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.1d.notransfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.1d.notransfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.1d.transfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.1d.transfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.1d.transfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.1d.transfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.1d.transfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.1d.transfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.1d.transfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.1d.transfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.1d_array.notransfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.1d_array.notransfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.1d_array.notransfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.1d_array.notransfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.1d_array.transfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.1d_array.transfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.1d_array.transfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.1d_array.transfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.1d_array.transfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.1d_array.transfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.1d_array.transfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.1d_array.transfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.2d.notransfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.2d.notransfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.2d.notransfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.2d.notransfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.2d.notransfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.2d.notransfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.2d.notransfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.2d.notransfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.2d.notransfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.2d.notransfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.2d.notransfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.2d.notransfer.normal_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.2d.notransfer.sparse_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.2d.notransfer.sparse_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.2d.notransfer.sparse_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.2d.notransfer.sparse_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.2d.notransfer.sparse_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.2d.notransfer.sparse_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.2d.notransfer.sparse_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.2d.notransfer.sparse_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.2d.notransfer.sparse_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.2d.notransfer.sparse_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.2d.notransfer.sparse_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.2d.notransfer.sparse_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.2d.notransfer.sparse_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.2d.notransfer.sparse_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.2d.notransfer.sparse_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.2d.notransfer.sparse_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.2d.transfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.2d.transfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.2d.transfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.2d.transfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.2d.transfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.2d.transfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.2d.transfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.2d.transfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.2d.transfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.2d.transfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.2d.transfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.2d.transfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.2d.transfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.2d.transfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.2d.transfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.2d.transfer.normal_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.2d_array.notransfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.2d_array.notransfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.2d_array.notransfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.2d_array.notransfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.2d_array.notransfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.2d_array.notransfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.2d_array.notransfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.2d_array.notransfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.2d_array.notransfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.2d_array.notransfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.2d_array.notransfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.2d_array.notransfer.normal_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.2d_array.notransfer.sparse_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.2d_array.notransfer.sparse_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.2d_array.notransfer.sparse_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.2d_array.notransfer.sparse_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.2d_array.notransfer.sparse_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.2d_array.notransfer.sparse_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.2d_array.notransfer.sparse_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.2d_array.notransfer.sparse_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.2d_array.notransfer.sparse_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.2d_array.notransfer.sparse_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.2d_array.notransfer.sparse_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.2d_array.notransfer.sparse_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.2d_array.notransfer.sparse_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.2d_array.notransfer.sparse_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.2d_array.notransfer.sparse_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.2d_array.notransfer.sparse_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.2d_array.transfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.2d_array.transfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.2d_array.transfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.2d_array.transfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.2d_array.transfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.2d_array.transfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.2d_array.transfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.2d_array.transfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.2d_array.transfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.2d_array.transfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.2d_array.transfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.2d_array.transfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.2d_array.transfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.2d_array.transfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.2d_array.transfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.2d_array.transfer.normal_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.3d.notransfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.3d.notransfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.3d.notransfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.3d.notransfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.3d.notransfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.3d.notransfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.3d.notransfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.3d.notransfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.3d.notransfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.3d.notransfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.3d.notransfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.3d.notransfer.normal_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.3d.notransfer.sparse_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.3d.notransfer.sparse_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.3d.notransfer.sparse_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.3d.notransfer.sparse_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.3d.notransfer.sparse_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.3d.notransfer.sparse_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.3d.notransfer.sparse_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.3d.notransfer.sparse_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.3d.notransfer.sparse_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.3d.notransfer.sparse_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.3d.notransfer.sparse_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.3d.notransfer.sparse_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.3d.notransfer.sparse_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.3d.notransfer.sparse_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.3d.notransfer.sparse_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.3d.notransfer.sparse_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.3d.transfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.3d.transfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.3d.transfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.3d.transfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.3d.transfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.3d.transfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.3d.transfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.3d.transfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.3d.transfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.3d.transfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.3d.transfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.3d.transfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.3d.transfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.3d.transfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.3d.transfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.3d.transfer.normal_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.cube.notransfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.cube.notransfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.cube.notransfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.cube.notransfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.cube.notransfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.cube.notransfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.cube.notransfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.cube.notransfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.cube.notransfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.cube.notransfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.cube.notransfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.cube.notransfer.normal_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.cube.notransfer.sparse_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.cube.notransfer.sparse_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.cube.notransfer.sparse_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.cube.notransfer.sparse_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.cube.notransfer.sparse_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.cube.notransfer.sparse_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.cube.notransfer.sparse_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.cube.notransfer.sparse_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.cube.notransfer.sparse_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.cube.notransfer.sparse_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.cube.notransfer.sparse_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.cube.notransfer.sparse_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.cube.notransfer.sparse_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.cube.notransfer.sparse_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.cube.notransfer.sparse_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.cube.notransfer.sparse_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.cube.transfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.cube.transfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.cube.transfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.cube.transfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.cube.transfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.cube.transfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.cube.transfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.cube.transfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.cube.transfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.cube.transfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.cube.transfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.cube.transfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.cube.transfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.cube.transfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.cube.transfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.cube.transfer.normal_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.cube_array.notransfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.cube_array.notransfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.cube_array.notransfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.cube_array.notransfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.cube_array.notransfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.cube_array.notransfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.cube_array.notransfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.cube_array.notransfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.cube_array.notransfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.cube_array.notransfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.cube_array.notransfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.cube_array.notransfer.normal_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.cube_array.notransfer.sparse_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.cube_array.notransfer.sparse_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.cube_array.notransfer.sparse_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.cube_array.notransfer.sparse_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.cube_array.notransfer.sparse_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.cube_array.notransfer.sparse_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.cube_array.notransfer.sparse_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.cube_array.notransfer.sparse_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.cube_array.notransfer.sparse_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.cube_array.notransfer.sparse_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.cube_array.notransfer.sparse_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.cube_array.notransfer.sparse_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.cube_array.notransfer.sparse_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.cube_array.notransfer.sparse_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.cube_array.notransfer.sparse_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.cube_array.notransfer.sparse_read.sparse_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.cube_array.transfer.normal_read.normal_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.cube_array.transfer.normal_read.normal_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.cube_array.transfer.normal_read.normal_img.r32i_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.cube_array.transfer.normal_read.normal_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.cube_array.transfer.normal_read.normal_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.cube_array.transfer.normal_read.normal_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.cube_array.transfer.normal_read.normal_img.r64i_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.cube_array.transfer.normal_read.normal_img.r64i_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.cube_array.transfer.normal_read.sparse_img.r32ui_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.cube_array.transfer.normal_read.sparse_img.r32ui_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.cube_array.transfer.normal_read.sparse_img.r32i_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.cube_array.transfer.normal_read.sparse_img.r32i_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.cube_array.transfer.normal_read.sparse_img.r64ui_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.cube_array.transfer.normal_read.sparse_img.r64ui_intermediate_values
+dEQP-VK.image.atomic_operations.compare_exchange.cube_array.transfer.normal_read.sparse_img.r64i_end_result
+dEQP-VK.image.atomic_operations.compare_exchange.cube_array.transfer.normal_read.sparse_img.r64i_intermediate_values
 dEQP-VK.image.load_store_lod.with_format.1d_array.r32g32b32a32_sfloat
 dEQP-VK.image.load_store_lod.with_format.1d_array.r32g32b32a32_sfloat_single_layer
 dEQP-VK.image.load_store_lod.with_format.1d_array.r16g16b16a16_sfloat
@@ -110044,6 +121420,114 @@
 dEQP-VK.image.mismatched_formats.sparse_image_read.d16_unorm_with_r16
 dEQP-VK.image.mismatched_formats.sparse_image_read.d32_sfloat_with_r32f
 dEQP-VK.image.mismatched_formats.sparse_image_read.s8_uint_with_r8ui
+dEQP-VK.image.mismatched_write_op.mismatched_vector_sizes.rgba32f_from_vec4
+dEQP-VK.image.mismatched_write_op.mismatched_vector_sizes.rgba16f_from_vec4
+dEQP-VK.image.mismatched_write_op.mismatched_vector_sizes.r32f_from_vec4
+dEQP-VK.image.mismatched_write_op.mismatched_vector_sizes.r32f_from_vec3
+dEQP-VK.image.mismatched_write_op.mismatched_vector_sizes.r32f_from_vec2
+dEQP-VK.image.mismatched_write_op.mismatched_vector_sizes.r32f_from_scalar
+dEQP-VK.image.mismatched_write_op.mismatched_vector_sizes.rgba8_from_vec4
+dEQP-VK.image.mismatched_write_op.mismatched_vector_sizes.rgba8snorm_from_vec4
+dEQP-VK.image.mismatched_write_op.mismatched_vector_sizes.rg32f_from_vec4
+dEQP-VK.image.mismatched_write_op.mismatched_vector_sizes.rg32f_from_vec3
+dEQP-VK.image.mismatched_write_op.mismatched_vector_sizes.rg32f_from_vec2
+dEQP-VK.image.mismatched_write_op.mismatched_vector_sizes.rg16f_from_vec4
+dEQP-VK.image.mismatched_write_op.mismatched_vector_sizes.rg16f_from_vec3
+dEQP-VK.image.mismatched_write_op.mismatched_vector_sizes.rg16f_from_vec2
+dEQP-VK.image.mismatched_write_op.mismatched_vector_sizes.r11fg11fb10f_from_vec4
+dEQP-VK.image.mismatched_write_op.mismatched_vector_sizes.r11fg11fb10f_from_vec3
+dEQP-VK.image.mismatched_write_op.mismatched_vector_sizes.r16f_from_vec4
+dEQP-VK.image.mismatched_write_op.mismatched_vector_sizes.r16f_from_vec3
+dEQP-VK.image.mismatched_write_op.mismatched_vector_sizes.r16f_from_vec2
+dEQP-VK.image.mismatched_write_op.mismatched_vector_sizes.r16f_from_scalar
+dEQP-VK.image.mismatched_write_op.mismatched_vector_sizes.rgba16_from_vec4
+dEQP-VK.image.mismatched_write_op.mismatched_vector_sizes.rgb10a2_from_vec4
+dEQP-VK.image.mismatched_write_op.mismatched_vector_sizes.rg16_from_vec4
+dEQP-VK.image.mismatched_write_op.mismatched_vector_sizes.rg16_from_vec3
+dEQP-VK.image.mismatched_write_op.mismatched_vector_sizes.rg16_from_vec2
+dEQP-VK.image.mismatched_write_op.mismatched_vector_sizes.rg8_from_vec4
+dEQP-VK.image.mismatched_write_op.mismatched_vector_sizes.rg8_from_vec3
+dEQP-VK.image.mismatched_write_op.mismatched_vector_sizes.rg8_from_vec2
+dEQP-VK.image.mismatched_write_op.mismatched_vector_sizes.r16_from_vec4
+dEQP-VK.image.mismatched_write_op.mismatched_vector_sizes.r16_from_vec3
+dEQP-VK.image.mismatched_write_op.mismatched_vector_sizes.r16_from_vec2
+dEQP-VK.image.mismatched_write_op.mismatched_vector_sizes.r16_from_scalar
+dEQP-VK.image.mismatched_write_op.mismatched_vector_sizes.r8_from_vec4
+dEQP-VK.image.mismatched_write_op.mismatched_vector_sizes.r8_from_vec3
+dEQP-VK.image.mismatched_write_op.mismatched_vector_sizes.r8_from_vec2
+dEQP-VK.image.mismatched_write_op.mismatched_vector_sizes.r8_from_scalar
+dEQP-VK.image.mismatched_write_op.mismatched_vector_sizes.rgba16snorm_from_vec4
+dEQP-VK.image.mismatched_write_op.mismatched_vector_sizes.rg16snorm_from_vec4
+dEQP-VK.image.mismatched_write_op.mismatched_vector_sizes.rg16snorm_from_vec3
+dEQP-VK.image.mismatched_write_op.mismatched_vector_sizes.rg16snorm_from_vec2
+dEQP-VK.image.mismatched_write_op.mismatched_vector_sizes.rg8snorm_from_vec4
+dEQP-VK.image.mismatched_write_op.mismatched_vector_sizes.rg8snorm_from_vec3
+dEQP-VK.image.mismatched_write_op.mismatched_vector_sizes.rg8snorm_from_vec2
+dEQP-VK.image.mismatched_write_op.mismatched_vector_sizes.r16snorm_from_vec4
+dEQP-VK.image.mismatched_write_op.mismatched_vector_sizes.r16snorm_from_vec3
+dEQP-VK.image.mismatched_write_op.mismatched_vector_sizes.r16snorm_from_vec2
+dEQP-VK.image.mismatched_write_op.mismatched_vector_sizes.r16snorm_from_scalar
+dEQP-VK.image.mismatched_write_op.mismatched_vector_sizes.r8snorm_from_vec4
+dEQP-VK.image.mismatched_write_op.mismatched_vector_sizes.r8snorm_from_vec3
+dEQP-VK.image.mismatched_write_op.mismatched_vector_sizes.r8snorm_from_vec2
+dEQP-VK.image.mismatched_write_op.mismatched_vector_sizes.r8snorm_from_scalar
+dEQP-VK.image.mismatched_write_op.mismatched_vector_sizes.rgba32i_from_vec4
+dEQP-VK.image.mismatched_write_op.mismatched_vector_sizes.rgba16i_from_vec4
+dEQP-VK.image.mismatched_write_op.mismatched_vector_sizes.rgba8i_from_vec4
+dEQP-VK.image.mismatched_write_op.mismatched_vector_sizes.r32i_from_vec4
+dEQP-VK.image.mismatched_write_op.mismatched_vector_sizes.r32i_from_vec3
+dEQP-VK.image.mismatched_write_op.mismatched_vector_sizes.r32i_from_vec2
+dEQP-VK.image.mismatched_write_op.mismatched_vector_sizes.r32i_from_scalar
+dEQP-VK.image.mismatched_write_op.mismatched_vector_sizes.rg32i_from_vec4
+dEQP-VK.image.mismatched_write_op.mismatched_vector_sizes.rg32i_from_vec3
+dEQP-VK.image.mismatched_write_op.mismatched_vector_sizes.rg32i_from_vec2
+dEQP-VK.image.mismatched_write_op.mismatched_vector_sizes.rg16i_from_vec4
+dEQP-VK.image.mismatched_write_op.mismatched_vector_sizes.rg16i_from_vec3
+dEQP-VK.image.mismatched_write_op.mismatched_vector_sizes.rg16i_from_vec2
+dEQP-VK.image.mismatched_write_op.mismatched_vector_sizes.rg8i_from_vec4
+dEQP-VK.image.mismatched_write_op.mismatched_vector_sizes.rg8i_from_vec3
+dEQP-VK.image.mismatched_write_op.mismatched_vector_sizes.rg8i_from_vec2
+dEQP-VK.image.mismatched_write_op.mismatched_vector_sizes.r16i_from_vec4
+dEQP-VK.image.mismatched_write_op.mismatched_vector_sizes.r16i_from_vec3
+dEQP-VK.image.mismatched_write_op.mismatched_vector_sizes.r16i_from_vec2
+dEQP-VK.image.mismatched_write_op.mismatched_vector_sizes.r16i_from_scalar
+dEQP-VK.image.mismatched_write_op.mismatched_vector_sizes.r8i_from_vec4
+dEQP-VK.image.mismatched_write_op.mismatched_vector_sizes.r8i_from_vec3
+dEQP-VK.image.mismatched_write_op.mismatched_vector_sizes.r8i_from_vec2
+dEQP-VK.image.mismatched_write_op.mismatched_vector_sizes.r8i_from_scalar
+dEQP-VK.image.mismatched_write_op.mismatched_vector_sizes.rgba32ui_from_vec4
+dEQP-VK.image.mismatched_write_op.mismatched_vector_sizes.rgba16ui_from_vec4
+dEQP-VK.image.mismatched_write_op.mismatched_vector_sizes.rgba8ui_from_vec4
+dEQP-VK.image.mismatched_write_op.mismatched_vector_sizes.r32ui_from_vec4
+dEQP-VK.image.mismatched_write_op.mismatched_vector_sizes.r32ui_from_vec3
+dEQP-VK.image.mismatched_write_op.mismatched_vector_sizes.r32ui_from_vec2
+dEQP-VK.image.mismatched_write_op.mismatched_vector_sizes.r32ui_from_scalar
+dEQP-VK.image.mismatched_write_op.mismatched_vector_sizes.rgb10a2ui_from_vec4
+dEQP-VK.image.mismatched_write_op.mismatched_vector_sizes.rg32ui_from_vec4
+dEQP-VK.image.mismatched_write_op.mismatched_vector_sizes.rg32ui_from_vec3
+dEQP-VK.image.mismatched_write_op.mismatched_vector_sizes.rg32ui_from_vec2
+dEQP-VK.image.mismatched_write_op.mismatched_vector_sizes.rg16ui_from_vec4
+dEQP-VK.image.mismatched_write_op.mismatched_vector_sizes.rg16ui_from_vec3
+dEQP-VK.image.mismatched_write_op.mismatched_vector_sizes.rg16ui_from_vec2
+dEQP-VK.image.mismatched_write_op.mismatched_vector_sizes.rg8ui_from_vec4
+dEQP-VK.image.mismatched_write_op.mismatched_vector_sizes.rg8ui_from_vec3
+dEQP-VK.image.mismatched_write_op.mismatched_vector_sizes.rg8ui_from_vec2
+dEQP-VK.image.mismatched_write_op.mismatched_vector_sizes.r16ui_from_vec4
+dEQP-VK.image.mismatched_write_op.mismatched_vector_sizes.r16ui_from_vec3
+dEQP-VK.image.mismatched_write_op.mismatched_vector_sizes.r16ui_from_vec2
+dEQP-VK.image.mismatched_write_op.mismatched_vector_sizes.r16ui_from_scalar
+dEQP-VK.image.mismatched_write_op.mismatched_vector_sizes.r8ui_from_vec4
+dEQP-VK.image.mismatched_write_op.mismatched_vector_sizes.r8ui_from_vec3
+dEQP-VK.image.mismatched_write_op.mismatched_vector_sizes.r8ui_from_vec2
+dEQP-VK.image.mismatched_write_op.mismatched_vector_sizes.r8ui_from_scalar
+dEQP-VK.image.mismatched_write_op.mismatched_vector_sizes.r64ui_from_vec4
+dEQP-VK.image.mismatched_write_op.mismatched_vector_sizes.r64ui_from_vec3
+dEQP-VK.image.mismatched_write_op.mismatched_vector_sizes.r64ui_from_vec2
+dEQP-VK.image.mismatched_write_op.mismatched_vector_sizes.r64ui_from_scalar
+dEQP-VK.image.mismatched_write_op.mismatched_vector_sizes.r64i_from_vec4
+dEQP-VK.image.mismatched_write_op.mismatched_vector_sizes.r64i_from_vec3
+dEQP-VK.image.mismatched_write_op.mismatched_vector_sizes.r64i_from_vec2
+dEQP-VK.image.mismatched_write_op.mismatched_vector_sizes.r64i_from_scalar
 dEQP-VK.wsi.android.swapchain.acquire.too_many
 dEQP-VK.wsi.android.swapchain.acquire.too_many_timeout
 dEQP-VK.wsi.android.swapchain.private_data.min_image_count
@@ -110055,6 +121539,12 @@
 dEQP-VK.wsi.android.swapchain.private_data.composite_alpha
 dEQP-VK.wsi.android.swapchain.private_data.present_mode
 dEQP-VK.wsi.android.swapchain.private_data.clipped
+dEQP-VK.wsi.android.colorspace_compare.b8g8r8a8_unorm
+dEQP-VK.wsi.android.colorspace_compare.r8g8b8a8_unorm
+dEQP-VK.wsi.android.colorspace_compare.r8g8b8a8_srgb
+dEQP-VK.wsi.android.colorspace_compare.r5g6b5_unorm_pack16
+dEQP-VK.wsi.android.colorspace_compare.a2b10g10r10_unorm_pack32
+dEQP-VK.wsi.android.colorspace_compare.r16g16b16a16_sfloat
 dEQP-VK.wsi.android.full_screen_exclusive.default
 dEQP-VK.wsi.android.full_screen_exclusive.allowed
 dEQP-VK.wsi.android.full_screen_exclusive.disallowed
@@ -110070,10 +121560,457 @@
 dEQP-VK.wsi.macos.swapchain.private_data.composite_alpha
 dEQP-VK.wsi.macos.swapchain.private_data.present_mode
 dEQP-VK.wsi.macos.swapchain.private_data.clipped
+dEQP-VK.wsi.macos.colorspace_compare.b8g8r8a8_unorm
+dEQP-VK.wsi.macos.colorspace_compare.r8g8b8a8_unorm
+dEQP-VK.wsi.macos.colorspace_compare.r8g8b8a8_srgb
+dEQP-VK.wsi.macos.colorspace_compare.r5g6b5_unorm_pack16
+dEQP-VK.wsi.macos.colorspace_compare.a2b10g10r10_unorm_pack32
+dEQP-VK.wsi.macos.colorspace_compare.r16g16b16a16_sfloat
 dEQP-VK.wsi.macos.full_screen_exclusive.default
 dEQP-VK.wsi.macos.full_screen_exclusive.allowed
 dEQP-VK.wsi.macos.full_screen_exclusive.disallowed
 dEQP-VK.wsi.macos.full_screen_exclusive.application_controlled
+dEQP-VK.wsi.headless.surface.create
+dEQP-VK.wsi.headless.surface.create_custom_allocator
+dEQP-VK.wsi.headless.surface.create_simulate_oom
+dEQP-VK.wsi.headless.surface.query_support
+dEQP-VK.wsi.headless.surface.query_presentation_support
+dEQP-VK.wsi.headless.surface.query_capabilities
+dEQP-VK.wsi.headless.surface.query_capabilities2
+dEQP-VK.wsi.headless.surface.query_protected_capabilities
+dEQP-VK.wsi.headless.surface.query_surface_counters
+dEQP-VK.wsi.headless.surface.query_formats
+dEQP-VK.wsi.headless.surface.query_formats2
+dEQP-VK.wsi.headless.surface.query_present_modes
+dEQP-VK.wsi.headless.surface.query_devgroup_present_capabilities
+dEQP-VK.wsi.headless.surface.query_devgroup_present_modes
+dEQP-VK.wsi.headless.surface.destroy_null_handle
+dEQP-VK.wsi.headless.swapchain.create.min_image_count
+dEQP-VK.wsi.headless.swapchain.create.image_format
+dEQP-VK.wsi.headless.swapchain.create.image_extent
+dEQP-VK.wsi.headless.swapchain.create.image_array_layers
+dEQP-VK.wsi.headless.swapchain.create.image_usage
+dEQP-VK.wsi.headless.swapchain.create.image_sharing_mode
+dEQP-VK.wsi.headless.swapchain.create.pre_transform
+dEQP-VK.wsi.headless.swapchain.create.composite_alpha
+dEQP-VK.wsi.headless.swapchain.create.present_mode
+dEQP-VK.wsi.headless.swapchain.create.clipped
+dEQP-VK.wsi.headless.swapchain.create.image_swapchain_create_info
+dEQP-VK.wsi.headless.swapchain.simulate_oom.min_image_count
+dEQP-VK.wsi.headless.swapchain.simulate_oom.image_format
+dEQP-VK.wsi.headless.swapchain.simulate_oom.image_extent
+dEQP-VK.wsi.headless.swapchain.simulate_oom.image_array_layers
+dEQP-VK.wsi.headless.swapchain.simulate_oom.image_usage
+dEQP-VK.wsi.headless.swapchain.simulate_oom.image_sharing_mode
+dEQP-VK.wsi.headless.swapchain.simulate_oom.pre_transform
+dEQP-VK.wsi.headless.swapchain.simulate_oom.composite_alpha
+dEQP-VK.wsi.headless.swapchain.simulate_oom.present_mode
+dEQP-VK.wsi.headless.swapchain.simulate_oom.clipped
+dEQP-VK.wsi.headless.swapchain.simulate_oom.image_swapchain_create_info
+dEQP-VK.wsi.headless.swapchain.render.basic
+dEQP-VK.wsi.headless.swapchain.render.basic2
+dEQP-VK.wsi.headless.swapchain.render.device_group
+dEQP-VK.wsi.headless.swapchain.render.device_group2
+dEQP-VK.wsi.headless.swapchain.render.2swapchains
+dEQP-VK.wsi.headless.swapchain.render.2swapchains2
+dEQP-VK.wsi.headless.swapchain.render.10swapchains
+dEQP-VK.wsi.headless.swapchain.render.10swapchains2
+dEQP-VK.wsi.headless.swapchain.modify.resize
+dEQP-VK.wsi.headless.swapchain.destroy.null_handle
+dEQP-VK.wsi.headless.swapchain.get_images.incomplete
+dEQP-VK.wsi.headless.swapchain.get_images.count
+dEQP-VK.wsi.headless.swapchain.acquire.too_many
+dEQP-VK.wsi.headless.swapchain.acquire.too_many_timeout
+dEQP-VK.wsi.headless.swapchain.private_data.min_image_count
+dEQP-VK.wsi.headless.swapchain.private_data.image_format
+dEQP-VK.wsi.headless.swapchain.private_data.image_array_layers
+dEQP-VK.wsi.headless.swapchain.private_data.image_usage
+dEQP-VK.wsi.headless.swapchain.private_data.image_sharing_mode
+dEQP-VK.wsi.headless.swapchain.private_data.pre_transform
+dEQP-VK.wsi.headless.swapchain.private_data.composite_alpha
+dEQP-VK.wsi.headless.swapchain.private_data.present_mode
+dEQP-VK.wsi.headless.swapchain.private_data.clipped
+dEQP-VK.wsi.headless.incremental_present.scale_none.immediate.identity.opaque.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.immediate.identity.opaque.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.immediate.identity.pre_multiplied.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.immediate.identity.pre_multiplied.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.immediate.identity.post_multiplied.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.immediate.identity.post_multiplied.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.immediate.identity.inherit.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.immediate.identity.inherit.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.immediate.rotate_90.opaque.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.immediate.rotate_90.opaque.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.immediate.rotate_90.pre_multiplied.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.immediate.rotate_90.pre_multiplied.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.immediate.rotate_90.post_multiplied.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.immediate.rotate_90.post_multiplied.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.immediate.rotate_90.inherit.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.immediate.rotate_90.inherit.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.immediate.rotate_180.opaque.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.immediate.rotate_180.opaque.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.immediate.rotate_180.pre_multiplied.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.immediate.rotate_180.pre_multiplied.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.immediate.rotate_180.post_multiplied.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.immediate.rotate_180.post_multiplied.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.immediate.rotate_180.inherit.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.immediate.rotate_180.inherit.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.immediate.rotate_270.opaque.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.immediate.rotate_270.opaque.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.immediate.rotate_270.pre_multiplied.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.immediate.rotate_270.pre_multiplied.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.immediate.rotate_270.post_multiplied.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.immediate.rotate_270.post_multiplied.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.immediate.rotate_270.inherit.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.immediate.rotate_270.inherit.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.immediate.horizontal_mirror.opaque.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.immediate.horizontal_mirror.opaque.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.immediate.horizontal_mirror.pre_multiplied.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.immediate.horizontal_mirror.pre_multiplied.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.immediate.horizontal_mirror.post_multiplied.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.immediate.horizontal_mirror.post_multiplied.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.immediate.horizontal_mirror.inherit.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.immediate.horizontal_mirror.inherit.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.immediate.horizontal_mirror_rotate_90.opaque.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.immediate.horizontal_mirror_rotate_90.opaque.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.immediate.horizontal_mirror_rotate_90.pre_multiplied.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.immediate.horizontal_mirror_rotate_90.pre_multiplied.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.immediate.horizontal_mirror_rotate_90.post_multiplied.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.immediate.horizontal_mirror_rotate_90.post_multiplied.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.immediate.horizontal_mirror_rotate_90.inherit.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.immediate.horizontal_mirror_rotate_90.inherit.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.immediate.horizontal_mirror_rotate_180.opaque.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.immediate.horizontal_mirror_rotate_180.opaque.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.immediate.horizontal_mirror_rotate_180.pre_multiplied.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.immediate.horizontal_mirror_rotate_180.pre_multiplied.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.immediate.horizontal_mirror_rotate_180.post_multiplied.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.immediate.horizontal_mirror_rotate_180.post_multiplied.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.immediate.horizontal_mirror_rotate_180.inherit.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.immediate.horizontal_mirror_rotate_180.inherit.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.immediate.horizontal_mirror_rotate_270.opaque.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.immediate.horizontal_mirror_rotate_270.opaque.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.immediate.horizontal_mirror_rotate_270.pre_multiplied.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.immediate.horizontal_mirror_rotate_270.pre_multiplied.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.immediate.horizontal_mirror_rotate_270.post_multiplied.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.immediate.horizontal_mirror_rotate_270.post_multiplied.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.immediate.horizontal_mirror_rotate_270.inherit.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.immediate.horizontal_mirror_rotate_270.inherit.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.immediate.inherit.opaque.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.immediate.inherit.opaque.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.immediate.inherit.pre_multiplied.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.immediate.inherit.pre_multiplied.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.immediate.inherit.post_multiplied.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.immediate.inherit.post_multiplied.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.immediate.inherit.inherit.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.immediate.inherit.inherit.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.mailbox.identity.opaque.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.mailbox.identity.opaque.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.mailbox.identity.pre_multiplied.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.mailbox.identity.pre_multiplied.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.mailbox.identity.post_multiplied.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.mailbox.identity.post_multiplied.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.mailbox.identity.inherit.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.mailbox.identity.inherit.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.mailbox.rotate_90.opaque.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.mailbox.rotate_90.opaque.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.mailbox.rotate_90.pre_multiplied.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.mailbox.rotate_90.pre_multiplied.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.mailbox.rotate_90.post_multiplied.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.mailbox.rotate_90.post_multiplied.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.mailbox.rotate_90.inherit.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.mailbox.rotate_90.inherit.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.mailbox.rotate_180.opaque.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.mailbox.rotate_180.opaque.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.mailbox.rotate_180.pre_multiplied.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.mailbox.rotate_180.pre_multiplied.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.mailbox.rotate_180.post_multiplied.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.mailbox.rotate_180.post_multiplied.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.mailbox.rotate_180.inherit.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.mailbox.rotate_180.inherit.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.mailbox.rotate_270.opaque.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.mailbox.rotate_270.opaque.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.mailbox.rotate_270.pre_multiplied.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.mailbox.rotate_270.pre_multiplied.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.mailbox.rotate_270.post_multiplied.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.mailbox.rotate_270.post_multiplied.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.mailbox.rotate_270.inherit.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.mailbox.rotate_270.inherit.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.mailbox.horizontal_mirror.opaque.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.mailbox.horizontal_mirror.opaque.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.mailbox.horizontal_mirror.pre_multiplied.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.mailbox.horizontal_mirror.pre_multiplied.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.mailbox.horizontal_mirror.post_multiplied.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.mailbox.horizontal_mirror.post_multiplied.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.mailbox.horizontal_mirror.inherit.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.mailbox.horizontal_mirror.inherit.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.mailbox.horizontal_mirror_rotate_90.opaque.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.mailbox.horizontal_mirror_rotate_90.opaque.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.mailbox.horizontal_mirror_rotate_90.pre_multiplied.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.mailbox.horizontal_mirror_rotate_90.pre_multiplied.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.mailbox.horizontal_mirror_rotate_90.post_multiplied.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.mailbox.horizontal_mirror_rotate_90.post_multiplied.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.mailbox.horizontal_mirror_rotate_90.inherit.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.mailbox.horizontal_mirror_rotate_90.inherit.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.mailbox.horizontal_mirror_rotate_180.opaque.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.mailbox.horizontal_mirror_rotate_180.opaque.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.mailbox.horizontal_mirror_rotate_180.pre_multiplied.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.mailbox.horizontal_mirror_rotate_180.pre_multiplied.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.mailbox.horizontal_mirror_rotate_180.post_multiplied.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.mailbox.horizontal_mirror_rotate_180.post_multiplied.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.mailbox.horizontal_mirror_rotate_180.inherit.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.mailbox.horizontal_mirror_rotate_180.inherit.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.mailbox.horizontal_mirror_rotate_270.opaque.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.mailbox.horizontal_mirror_rotate_270.opaque.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.mailbox.horizontal_mirror_rotate_270.pre_multiplied.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.mailbox.horizontal_mirror_rotate_270.pre_multiplied.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.mailbox.horizontal_mirror_rotate_270.post_multiplied.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.mailbox.horizontal_mirror_rotate_270.post_multiplied.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.mailbox.horizontal_mirror_rotate_270.inherit.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.mailbox.horizontal_mirror_rotate_270.inherit.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.mailbox.inherit.opaque.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.mailbox.inherit.opaque.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.mailbox.inherit.pre_multiplied.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.mailbox.inherit.pre_multiplied.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.mailbox.inherit.post_multiplied.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.mailbox.inherit.post_multiplied.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.mailbox.inherit.inherit.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.mailbox.inherit.inherit.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo.identity.opaque.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo.identity.opaque.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo.identity.pre_multiplied.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo.identity.pre_multiplied.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo.identity.post_multiplied.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo.identity.post_multiplied.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo.identity.inherit.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo.identity.inherit.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo.rotate_90.opaque.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo.rotate_90.opaque.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo.rotate_90.pre_multiplied.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo.rotate_90.pre_multiplied.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo.rotate_90.post_multiplied.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo.rotate_90.post_multiplied.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo.rotate_90.inherit.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo.rotate_90.inherit.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo.rotate_180.opaque.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo.rotate_180.opaque.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo.rotate_180.pre_multiplied.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo.rotate_180.pre_multiplied.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo.rotate_180.post_multiplied.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo.rotate_180.post_multiplied.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo.rotate_180.inherit.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo.rotate_180.inherit.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo.rotate_270.opaque.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo.rotate_270.opaque.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo.rotate_270.pre_multiplied.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo.rotate_270.pre_multiplied.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo.rotate_270.post_multiplied.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo.rotate_270.post_multiplied.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo.rotate_270.inherit.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo.rotate_270.inherit.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo.horizontal_mirror.opaque.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo.horizontal_mirror.opaque.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo.horizontal_mirror.pre_multiplied.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo.horizontal_mirror.pre_multiplied.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo.horizontal_mirror.post_multiplied.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo.horizontal_mirror.post_multiplied.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo.horizontal_mirror.inherit.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo.horizontal_mirror.inherit.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo.horizontal_mirror_rotate_90.opaque.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo.horizontal_mirror_rotate_90.opaque.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo.horizontal_mirror_rotate_90.pre_multiplied.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo.horizontal_mirror_rotate_90.pre_multiplied.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo.horizontal_mirror_rotate_90.post_multiplied.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo.horizontal_mirror_rotate_90.post_multiplied.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo.horizontal_mirror_rotate_90.inherit.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo.horizontal_mirror_rotate_90.inherit.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo.horizontal_mirror_rotate_180.opaque.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo.horizontal_mirror_rotate_180.opaque.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo.horizontal_mirror_rotate_180.pre_multiplied.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo.horizontal_mirror_rotate_180.pre_multiplied.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo.horizontal_mirror_rotate_180.post_multiplied.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo.horizontal_mirror_rotate_180.post_multiplied.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo.horizontal_mirror_rotate_180.inherit.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo.horizontal_mirror_rotate_180.inherit.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo.horizontal_mirror_rotate_270.opaque.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo.horizontal_mirror_rotate_270.opaque.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo.horizontal_mirror_rotate_270.pre_multiplied.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo.horizontal_mirror_rotate_270.pre_multiplied.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo.horizontal_mirror_rotate_270.post_multiplied.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo.horizontal_mirror_rotate_270.post_multiplied.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo.horizontal_mirror_rotate_270.inherit.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo.horizontal_mirror_rotate_270.inherit.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo.inherit.opaque.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo.inherit.opaque.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo.inherit.pre_multiplied.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo.inherit.pre_multiplied.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo.inherit.post_multiplied.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo.inherit.post_multiplied.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo.inherit.inherit.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo.inherit.inherit.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo_relaxed.identity.opaque.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo_relaxed.identity.opaque.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo_relaxed.identity.pre_multiplied.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo_relaxed.identity.pre_multiplied.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo_relaxed.identity.post_multiplied.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo_relaxed.identity.post_multiplied.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo_relaxed.identity.inherit.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo_relaxed.identity.inherit.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo_relaxed.rotate_90.opaque.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo_relaxed.rotate_90.opaque.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo_relaxed.rotate_90.pre_multiplied.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo_relaxed.rotate_90.pre_multiplied.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo_relaxed.rotate_90.post_multiplied.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo_relaxed.rotate_90.post_multiplied.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo_relaxed.rotate_90.inherit.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo_relaxed.rotate_90.inherit.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo_relaxed.rotate_180.opaque.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo_relaxed.rotate_180.opaque.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo_relaxed.rotate_180.pre_multiplied.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo_relaxed.rotate_180.pre_multiplied.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo_relaxed.rotate_180.post_multiplied.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo_relaxed.rotate_180.post_multiplied.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo_relaxed.rotate_180.inherit.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo_relaxed.rotate_180.inherit.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo_relaxed.rotate_270.opaque.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo_relaxed.rotate_270.opaque.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo_relaxed.rotate_270.pre_multiplied.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo_relaxed.rotate_270.pre_multiplied.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo_relaxed.rotate_270.post_multiplied.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo_relaxed.rotate_270.post_multiplied.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo_relaxed.rotate_270.inherit.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo_relaxed.rotate_270.inherit.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo_relaxed.horizontal_mirror.opaque.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo_relaxed.horizontal_mirror.opaque.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo_relaxed.horizontal_mirror.pre_multiplied.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo_relaxed.horizontal_mirror.pre_multiplied.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo_relaxed.horizontal_mirror.post_multiplied.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo_relaxed.horizontal_mirror.post_multiplied.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo_relaxed.horizontal_mirror.inherit.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo_relaxed.horizontal_mirror.inherit.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo_relaxed.horizontal_mirror_rotate_90.opaque.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo_relaxed.horizontal_mirror_rotate_90.opaque.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo_relaxed.horizontal_mirror_rotate_90.pre_multiplied.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo_relaxed.horizontal_mirror_rotate_90.pre_multiplied.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo_relaxed.horizontal_mirror_rotate_90.post_multiplied.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo_relaxed.horizontal_mirror_rotate_90.post_multiplied.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo_relaxed.horizontal_mirror_rotate_90.inherit.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo_relaxed.horizontal_mirror_rotate_90.inherit.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo_relaxed.horizontal_mirror_rotate_180.opaque.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo_relaxed.horizontal_mirror_rotate_180.opaque.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo_relaxed.horizontal_mirror_rotate_180.pre_multiplied.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo_relaxed.horizontal_mirror_rotate_180.pre_multiplied.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo_relaxed.horizontal_mirror_rotate_180.post_multiplied.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo_relaxed.horizontal_mirror_rotate_180.post_multiplied.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo_relaxed.horizontal_mirror_rotate_180.inherit.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo_relaxed.horizontal_mirror_rotate_180.inherit.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo_relaxed.horizontal_mirror_rotate_270.opaque.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo_relaxed.horizontal_mirror_rotate_270.opaque.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo_relaxed.horizontal_mirror_rotate_270.pre_multiplied.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo_relaxed.horizontal_mirror_rotate_270.pre_multiplied.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo_relaxed.horizontal_mirror_rotate_270.post_multiplied.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo_relaxed.horizontal_mirror_rotate_270.post_multiplied.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo_relaxed.horizontal_mirror_rotate_270.inherit.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo_relaxed.horizontal_mirror_rotate_270.inherit.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo_relaxed.inherit.opaque.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo_relaxed.inherit.opaque.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo_relaxed.inherit.pre_multiplied.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo_relaxed.inherit.pre_multiplied.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo_relaxed.inherit.post_multiplied.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo_relaxed.inherit.post_multiplied.incremental_present
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo_relaxed.inherit.inherit.reference
+dEQP-VK.wsi.headless.incremental_present.scale_none.fifo_relaxed.inherit.inherit.incremental_present
+dEQP-VK.wsi.headless.display_timing.fifo.reference
+dEQP-VK.wsi.headless.display_timing.fifo.display_timing
+dEQP-VK.wsi.headless.display_timing.fifo_relaxed.reference
+dEQP-VK.wsi.headless.display_timing.fifo_relaxed.display_timing
+dEQP-VK.wsi.headless.display_timing.immediate.reference
+dEQP-VK.wsi.headless.display_timing.immediate.display_timing
+dEQP-VK.wsi.headless.display_timing.mailbox.reference
+dEQP-VK.wsi.headless.display_timing.mailbox.display_timing
+dEQP-VK.wsi.headless.shared_presentable_image.scale_none.identity.opaque.demand
+dEQP-VK.wsi.headless.shared_presentable_image.scale_none.identity.opaque.continuous
+dEQP-VK.wsi.headless.shared_presentable_image.scale_none.identity.pre_multiplied.demand
+dEQP-VK.wsi.headless.shared_presentable_image.scale_none.identity.pre_multiplied.continuous
+dEQP-VK.wsi.headless.shared_presentable_image.scale_none.identity.post_multiplied.demand
+dEQP-VK.wsi.headless.shared_presentable_image.scale_none.identity.post_multiplied.continuous
+dEQP-VK.wsi.headless.shared_presentable_image.scale_none.identity.inherit.demand
+dEQP-VK.wsi.headless.shared_presentable_image.scale_none.identity.inherit.continuous
+dEQP-VK.wsi.headless.shared_presentable_image.scale_none.rotate_90.opaque.demand
+dEQP-VK.wsi.headless.shared_presentable_image.scale_none.rotate_90.opaque.continuous
+dEQP-VK.wsi.headless.shared_presentable_image.scale_none.rotate_90.pre_multiplied.demand
+dEQP-VK.wsi.headless.shared_presentable_image.scale_none.rotate_90.pre_multiplied.continuous
+dEQP-VK.wsi.headless.shared_presentable_image.scale_none.rotate_90.post_multiplied.demand
+dEQP-VK.wsi.headless.shared_presentable_image.scale_none.rotate_90.post_multiplied.continuous
+dEQP-VK.wsi.headless.shared_presentable_image.scale_none.rotate_90.inherit.demand
+dEQP-VK.wsi.headless.shared_presentable_image.scale_none.rotate_90.inherit.continuous
+dEQP-VK.wsi.headless.shared_presentable_image.scale_none.rotate_180.opaque.demand
+dEQP-VK.wsi.headless.shared_presentable_image.scale_none.rotate_180.opaque.continuous
+dEQP-VK.wsi.headless.shared_presentable_image.scale_none.rotate_180.pre_multiplied.demand
+dEQP-VK.wsi.headless.shared_presentable_image.scale_none.rotate_180.pre_multiplied.continuous
+dEQP-VK.wsi.headless.shared_presentable_image.scale_none.rotate_180.post_multiplied.demand
+dEQP-VK.wsi.headless.shared_presentable_image.scale_none.rotate_180.post_multiplied.continuous
+dEQP-VK.wsi.headless.shared_presentable_image.scale_none.rotate_180.inherit.demand
+dEQP-VK.wsi.headless.shared_presentable_image.scale_none.rotate_180.inherit.continuous
+dEQP-VK.wsi.headless.shared_presentable_image.scale_none.rotate_270.opaque.demand
+dEQP-VK.wsi.headless.shared_presentable_image.scale_none.rotate_270.opaque.continuous
+dEQP-VK.wsi.headless.shared_presentable_image.scale_none.rotate_270.pre_multiplied.demand
+dEQP-VK.wsi.headless.shared_presentable_image.scale_none.rotate_270.pre_multiplied.continuous
+dEQP-VK.wsi.headless.shared_presentable_image.scale_none.rotate_270.post_multiplied.demand
+dEQP-VK.wsi.headless.shared_presentable_image.scale_none.rotate_270.post_multiplied.continuous
+dEQP-VK.wsi.headless.shared_presentable_image.scale_none.rotate_270.inherit.demand
+dEQP-VK.wsi.headless.shared_presentable_image.scale_none.rotate_270.inherit.continuous
+dEQP-VK.wsi.headless.shared_presentable_image.scale_none.horizontal_mirror.opaque.demand
+dEQP-VK.wsi.headless.shared_presentable_image.scale_none.horizontal_mirror.opaque.continuous
+dEQP-VK.wsi.headless.shared_presentable_image.scale_none.horizontal_mirror.pre_multiplied.demand
+dEQP-VK.wsi.headless.shared_presentable_image.scale_none.horizontal_mirror.pre_multiplied.continuous
+dEQP-VK.wsi.headless.shared_presentable_image.scale_none.horizontal_mirror.post_multiplied.demand
+dEQP-VK.wsi.headless.shared_presentable_image.scale_none.horizontal_mirror.post_multiplied.continuous
+dEQP-VK.wsi.headless.shared_presentable_image.scale_none.horizontal_mirror.inherit.demand
+dEQP-VK.wsi.headless.shared_presentable_image.scale_none.horizontal_mirror.inherit.continuous
+dEQP-VK.wsi.headless.shared_presentable_image.scale_none.horizontal_mirror_rotate_90.opaque.demand
+dEQP-VK.wsi.headless.shared_presentable_image.scale_none.horizontal_mirror_rotate_90.opaque.continuous
+dEQP-VK.wsi.headless.shared_presentable_image.scale_none.horizontal_mirror_rotate_90.pre_multiplied.demand
+dEQP-VK.wsi.headless.shared_presentable_image.scale_none.horizontal_mirror_rotate_90.pre_multiplied.continuous
+dEQP-VK.wsi.headless.shared_presentable_image.scale_none.horizontal_mirror_rotate_90.post_multiplied.demand
+dEQP-VK.wsi.headless.shared_presentable_image.scale_none.horizontal_mirror_rotate_90.post_multiplied.continuous
+dEQP-VK.wsi.headless.shared_presentable_image.scale_none.horizontal_mirror_rotate_90.inherit.demand
+dEQP-VK.wsi.headless.shared_presentable_image.scale_none.horizontal_mirror_rotate_90.inherit.continuous
+dEQP-VK.wsi.headless.shared_presentable_image.scale_none.horizontal_mirror_rotate_180.opaque.demand
+dEQP-VK.wsi.headless.shared_presentable_image.scale_none.horizontal_mirror_rotate_180.opaque.continuous
+dEQP-VK.wsi.headless.shared_presentable_image.scale_none.horizontal_mirror_rotate_180.pre_multiplied.demand
+dEQP-VK.wsi.headless.shared_presentable_image.scale_none.horizontal_mirror_rotate_180.pre_multiplied.continuous
+dEQP-VK.wsi.headless.shared_presentable_image.scale_none.horizontal_mirror_rotate_180.post_multiplied.demand
+dEQP-VK.wsi.headless.shared_presentable_image.scale_none.horizontal_mirror_rotate_180.post_multiplied.continuous
+dEQP-VK.wsi.headless.shared_presentable_image.scale_none.horizontal_mirror_rotate_180.inherit.demand
+dEQP-VK.wsi.headless.shared_presentable_image.scale_none.horizontal_mirror_rotate_180.inherit.continuous
+dEQP-VK.wsi.headless.shared_presentable_image.scale_none.horizontal_mirror_rotate_270.opaque.demand
+dEQP-VK.wsi.headless.shared_presentable_image.scale_none.horizontal_mirror_rotate_270.opaque.continuous
+dEQP-VK.wsi.headless.shared_presentable_image.scale_none.horizontal_mirror_rotate_270.pre_multiplied.demand
+dEQP-VK.wsi.headless.shared_presentable_image.scale_none.horizontal_mirror_rotate_270.pre_multiplied.continuous
+dEQP-VK.wsi.headless.shared_presentable_image.scale_none.horizontal_mirror_rotate_270.post_multiplied.demand
+dEQP-VK.wsi.headless.shared_presentable_image.scale_none.horizontal_mirror_rotate_270.post_multiplied.continuous
+dEQP-VK.wsi.headless.shared_presentable_image.scale_none.horizontal_mirror_rotate_270.inherit.demand
+dEQP-VK.wsi.headless.shared_presentable_image.scale_none.horizontal_mirror_rotate_270.inherit.continuous
+dEQP-VK.wsi.headless.shared_presentable_image.scale_none.inherit.opaque.demand
+dEQP-VK.wsi.headless.shared_presentable_image.scale_none.inherit.opaque.continuous
+dEQP-VK.wsi.headless.shared_presentable_image.scale_none.inherit.pre_multiplied.demand
+dEQP-VK.wsi.headless.shared_presentable_image.scale_none.inherit.pre_multiplied.continuous
+dEQP-VK.wsi.headless.shared_presentable_image.scale_none.inherit.post_multiplied.demand
+dEQP-VK.wsi.headless.shared_presentable_image.scale_none.inherit.post_multiplied.continuous
+dEQP-VK.wsi.headless.shared_presentable_image.scale_none.inherit.inherit.demand
+dEQP-VK.wsi.headless.shared_presentable_image.scale_none.inherit.inherit.continuous
+dEQP-VK.wsi.headless.colorspace.extensions
+dEQP-VK.wsi.headless.colorspace.basic
+dEQP-VK.wsi.headless.colorspace.hdr
+dEQP-VK.wsi.headless.colorspace_compare.b8g8r8a8_unorm
+dEQP-VK.wsi.headless.colorspace_compare.r8g8b8a8_unorm
+dEQP-VK.wsi.headless.colorspace_compare.r8g8b8a8_srgb
+dEQP-VK.wsi.headless.colorspace_compare.r5g6b5_unorm_pack16
+dEQP-VK.wsi.headless.colorspace_compare.a2b10g10r10_unorm_pack32
+dEQP-VK.wsi.headless.colorspace_compare.r16g16b16a16_sfloat
+dEQP-VK.wsi.headless.full_screen_exclusive.default
+dEQP-VK.wsi.headless.full_screen_exclusive.allowed
+dEQP-VK.wsi.headless.full_screen_exclusive.disallowed
+dEQP-VK.wsi.headless.full_screen_exclusive.application_controlled
 dEQP-VK.synchronization.timeline_semaphore.wait.poll_signal_from_device
 dEQP-VK.synchronization.timeline_semaphore.wait.poll_signal_from_host
 dEQP-VK.synchronization.timeline_semaphore.sparse_bind.no_sems
@@ -110081,6 +122018,7 @@
 dEQP-VK.synchronization.timeline_semaphore.sparse_bind.wait_no_sig
 dEQP-VK.synchronization.timeline_semaphore.sparse_bind.wait_and_sig
 dEQP-VK.synchronization.timeline_semaphore.sparse_bind.wait_and_sig_2
+dEQP-VK.synchronization.basic.timeline_semaphore.two_threads
 dEQP-VK.synchronization.op.single_queue.fence.write_image_compute_multisample_read_resolve_image.image_64x64_r32_uint
 dEQP-VK.synchronization.op.single_queue.fence.write_update_index_buffer_read_index_input.buffer_20
 dEQP-VK.synchronization.op.single_queue.binary_semaphore.write_image_compute_multisample_read_resolve_image.image_64x64_r32_uint
@@ -168009,12 +179947,36 @@
 dEQP-VK.sparse_resources.image_sparse_binding.2d.r64ui.512_256_1
 dEQP-VK.sparse_resources.image_sparse_binding.2d.r64ui.1024_128_1
 dEQP-VK.sparse_resources.image_sparse_binding.2d.r64ui.11_137_1
+dEQP-VK.sparse_resources.image_sparse_binding.2d.g8_b8r8_2plane_444_unorm_ext.512_256_1
+dEQP-VK.sparse_resources.image_sparse_binding.2d.g8_b8r8_2plane_444_unorm_ext.1024_128_1
+dEQP-VK.sparse_resources.image_sparse_binding.2d.g8_b8r8_2plane_444_unorm_ext.11_137_1
+dEQP-VK.sparse_resources.image_sparse_binding.2d.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.512_256_1
+dEQP-VK.sparse_resources.image_sparse_binding.2d.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.1024_128_1
+dEQP-VK.sparse_resources.image_sparse_binding.2d.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.11_137_1
+dEQP-VK.sparse_resources.image_sparse_binding.2d.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.512_256_1
+dEQP-VK.sparse_resources.image_sparse_binding.2d.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.1024_128_1
+dEQP-VK.sparse_resources.image_sparse_binding.2d.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.11_137_1
+dEQP-VK.sparse_resources.image_sparse_binding.2d.g16_b16r16_2plane_444_unorm_ext.512_256_1
+dEQP-VK.sparse_resources.image_sparse_binding.2d.g16_b16r16_2plane_444_unorm_ext.1024_128_1
+dEQP-VK.sparse_resources.image_sparse_binding.2d.g16_b16r16_2plane_444_unorm_ext.11_137_1
 dEQP-VK.sparse_resources.image_sparse_binding.2d_array.r64i.512_256_6
 dEQP-VK.sparse_resources.image_sparse_binding.2d_array.r64i.1024_128_8
 dEQP-VK.sparse_resources.image_sparse_binding.2d_array.r64i.11_137_3
 dEQP-VK.sparse_resources.image_sparse_binding.2d_array.r64ui.512_256_6
 dEQP-VK.sparse_resources.image_sparse_binding.2d_array.r64ui.1024_128_8
 dEQP-VK.sparse_resources.image_sparse_binding.2d_array.r64ui.11_137_3
+dEQP-VK.sparse_resources.image_sparse_binding.2d_array.g8_b8r8_2plane_444_unorm_ext.512_256_6
+dEQP-VK.sparse_resources.image_sparse_binding.2d_array.g8_b8r8_2plane_444_unorm_ext.1024_128_8
+dEQP-VK.sparse_resources.image_sparse_binding.2d_array.g8_b8r8_2plane_444_unorm_ext.11_137_3
+dEQP-VK.sparse_resources.image_sparse_binding.2d_array.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.512_256_6
+dEQP-VK.sparse_resources.image_sparse_binding.2d_array.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.1024_128_8
+dEQP-VK.sparse_resources.image_sparse_binding.2d_array.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.11_137_3
+dEQP-VK.sparse_resources.image_sparse_binding.2d_array.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.512_256_6
+dEQP-VK.sparse_resources.image_sparse_binding.2d_array.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.1024_128_8
+dEQP-VK.sparse_resources.image_sparse_binding.2d_array.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.11_137_3
+dEQP-VK.sparse_resources.image_sparse_binding.2d_array.g16_b16r16_2plane_444_unorm_ext.512_256_6
+dEQP-VK.sparse_resources.image_sparse_binding.2d_array.g16_b16r16_2plane_444_unorm_ext.1024_128_8
+dEQP-VK.sparse_resources.image_sparse_binding.2d_array.g16_b16r16_2plane_444_unorm_ext.11_137_3
 dEQP-VK.sparse_resources.image_sparse_binding.3d.r64i.512_256_6
 dEQP-VK.sparse_resources.image_sparse_binding.3d.r64i.1024_128_8
 dEQP-VK.sparse_resources.image_sparse_binding.3d.r64i.11_137_3
@@ -168051,12 +180013,36 @@
 dEQP-VK.sparse_resources.device_group_image_sparse_binding.2d.r64ui.512_256_1
 dEQP-VK.sparse_resources.device_group_image_sparse_binding.2d.r64ui.1024_128_1
 dEQP-VK.sparse_resources.device_group_image_sparse_binding.2d.r64ui.11_137_1
+dEQP-VK.sparse_resources.device_group_image_sparse_binding.2d.g8_b8r8_2plane_444_unorm_ext.512_256_1
+dEQP-VK.sparse_resources.device_group_image_sparse_binding.2d.g8_b8r8_2plane_444_unorm_ext.1024_128_1
+dEQP-VK.sparse_resources.device_group_image_sparse_binding.2d.g8_b8r8_2plane_444_unorm_ext.11_137_1
+dEQP-VK.sparse_resources.device_group_image_sparse_binding.2d.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.512_256_1
+dEQP-VK.sparse_resources.device_group_image_sparse_binding.2d.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.1024_128_1
+dEQP-VK.sparse_resources.device_group_image_sparse_binding.2d.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.11_137_1
+dEQP-VK.sparse_resources.device_group_image_sparse_binding.2d.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.512_256_1
+dEQP-VK.sparse_resources.device_group_image_sparse_binding.2d.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.1024_128_1
+dEQP-VK.sparse_resources.device_group_image_sparse_binding.2d.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.11_137_1
+dEQP-VK.sparse_resources.device_group_image_sparse_binding.2d.g16_b16r16_2plane_444_unorm_ext.512_256_1
+dEQP-VK.sparse_resources.device_group_image_sparse_binding.2d.g16_b16r16_2plane_444_unorm_ext.1024_128_1
+dEQP-VK.sparse_resources.device_group_image_sparse_binding.2d.g16_b16r16_2plane_444_unorm_ext.11_137_1
 dEQP-VK.sparse_resources.device_group_image_sparse_binding.2d_array.r64i.512_256_6
 dEQP-VK.sparse_resources.device_group_image_sparse_binding.2d_array.r64i.1024_128_8
 dEQP-VK.sparse_resources.device_group_image_sparse_binding.2d_array.r64i.11_137_3
 dEQP-VK.sparse_resources.device_group_image_sparse_binding.2d_array.r64ui.512_256_6
 dEQP-VK.sparse_resources.device_group_image_sparse_binding.2d_array.r64ui.1024_128_8
 dEQP-VK.sparse_resources.device_group_image_sparse_binding.2d_array.r64ui.11_137_3
+dEQP-VK.sparse_resources.device_group_image_sparse_binding.2d_array.g8_b8r8_2plane_444_unorm_ext.512_256_6
+dEQP-VK.sparse_resources.device_group_image_sparse_binding.2d_array.g8_b8r8_2plane_444_unorm_ext.1024_128_8
+dEQP-VK.sparse_resources.device_group_image_sparse_binding.2d_array.g8_b8r8_2plane_444_unorm_ext.11_137_3
+dEQP-VK.sparse_resources.device_group_image_sparse_binding.2d_array.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.512_256_6
+dEQP-VK.sparse_resources.device_group_image_sparse_binding.2d_array.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.1024_128_8
+dEQP-VK.sparse_resources.device_group_image_sparse_binding.2d_array.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.11_137_3
+dEQP-VK.sparse_resources.device_group_image_sparse_binding.2d_array.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.512_256_6
+dEQP-VK.sparse_resources.device_group_image_sparse_binding.2d_array.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.1024_128_8
+dEQP-VK.sparse_resources.device_group_image_sparse_binding.2d_array.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.11_137_3
+dEQP-VK.sparse_resources.device_group_image_sparse_binding.2d_array.g16_b16r16_2plane_444_unorm_ext.512_256_6
+dEQP-VK.sparse_resources.device_group_image_sparse_binding.2d_array.g16_b16r16_2plane_444_unorm_ext.1024_128_8
+dEQP-VK.sparse_resources.device_group_image_sparse_binding.2d_array.g16_b16r16_2plane_444_unorm_ext.11_137_3
 dEQP-VK.sparse_resources.device_group_image_sparse_binding.3d.r64i.512_256_6
 dEQP-VK.sparse_resources.device_group_image_sparse_binding.3d.r64i.1024_128_8
 dEQP-VK.sparse_resources.device_group_image_sparse_binding.3d.r64i.11_137_3
@@ -168081,12 +180067,36 @@
 dEQP-VK.sparse_resources.image_sparse_residency.2d.r64ui.512_256_1
 dEQP-VK.sparse_resources.image_sparse_residency.2d.r64ui.1024_128_1
 dEQP-VK.sparse_resources.image_sparse_residency.2d.r64ui.11_137_1
+dEQP-VK.sparse_resources.image_sparse_residency.2d.g8_b8r8_2plane_444_unorm_ext.512_256_1
+dEQP-VK.sparse_resources.image_sparse_residency.2d.g8_b8r8_2plane_444_unorm_ext.1024_128_1
+dEQP-VK.sparse_resources.image_sparse_residency.2d.g8_b8r8_2plane_444_unorm_ext.11_137_1
+dEQP-VK.sparse_resources.image_sparse_residency.2d.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.512_256_1
+dEQP-VK.sparse_resources.image_sparse_residency.2d.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.1024_128_1
+dEQP-VK.sparse_resources.image_sparse_residency.2d.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.11_137_1
+dEQP-VK.sparse_resources.image_sparse_residency.2d.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.512_256_1
+dEQP-VK.sparse_resources.image_sparse_residency.2d.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.1024_128_1
+dEQP-VK.sparse_resources.image_sparse_residency.2d.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.11_137_1
+dEQP-VK.sparse_resources.image_sparse_residency.2d.g16_b16r16_2plane_444_unorm_ext.512_256_1
+dEQP-VK.sparse_resources.image_sparse_residency.2d.g16_b16r16_2plane_444_unorm_ext.1024_128_1
+dEQP-VK.sparse_resources.image_sparse_residency.2d.g16_b16r16_2plane_444_unorm_ext.11_137_1
 dEQP-VK.sparse_resources.image_sparse_residency.2d_array.r64i.512_256_6
 dEQP-VK.sparse_resources.image_sparse_residency.2d_array.r64i.1024_128_8
 dEQP-VK.sparse_resources.image_sparse_residency.2d_array.r64i.11_137_3
 dEQP-VK.sparse_resources.image_sparse_residency.2d_array.r64ui.512_256_6
 dEQP-VK.sparse_resources.image_sparse_residency.2d_array.r64ui.1024_128_8
 dEQP-VK.sparse_resources.image_sparse_residency.2d_array.r64ui.11_137_3
+dEQP-VK.sparse_resources.image_sparse_residency.2d_array.g8_b8r8_2plane_444_unorm_ext.512_256_6
+dEQP-VK.sparse_resources.image_sparse_residency.2d_array.g8_b8r8_2plane_444_unorm_ext.1024_128_8
+dEQP-VK.sparse_resources.image_sparse_residency.2d_array.g8_b8r8_2plane_444_unorm_ext.11_137_3
+dEQP-VK.sparse_resources.image_sparse_residency.2d_array.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.512_256_6
+dEQP-VK.sparse_resources.image_sparse_residency.2d_array.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.1024_128_8
+dEQP-VK.sparse_resources.image_sparse_residency.2d_array.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.11_137_3
+dEQP-VK.sparse_resources.image_sparse_residency.2d_array.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.512_256_6
+dEQP-VK.sparse_resources.image_sparse_residency.2d_array.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.1024_128_8
+dEQP-VK.sparse_resources.image_sparse_residency.2d_array.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.11_137_3
+dEQP-VK.sparse_resources.image_sparse_residency.2d_array.g16_b16r16_2plane_444_unorm_ext.512_256_6
+dEQP-VK.sparse_resources.image_sparse_residency.2d_array.g16_b16r16_2plane_444_unorm_ext.1024_128_8
+dEQP-VK.sparse_resources.image_sparse_residency.2d_array.g16_b16r16_2plane_444_unorm_ext.11_137_3
 dEQP-VK.sparse_resources.image_sparse_residency.cube.r64i.256_256_1
 dEQP-VK.sparse_resources.image_sparse_residency.cube.r64i.128_128_1
 dEQP-VK.sparse_resources.image_sparse_residency.cube.r64i.137_137_1
@@ -168107,8 +180117,16 @@
 dEQP-VK.sparse_resources.image_sparse_residency.3d.r64ui.11_137_3
 dEQP-VK.sparse_resources.aligned_mip_size.2d.r64i
 dEQP-VK.sparse_resources.aligned_mip_size.2d.r64ui
+dEQP-VK.sparse_resources.aligned_mip_size.2d.g8_b8r8_2plane_444_unorm_ext
+dEQP-VK.sparse_resources.aligned_mip_size.2d.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext
+dEQP-VK.sparse_resources.aligned_mip_size.2d.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext
+dEQP-VK.sparse_resources.aligned_mip_size.2d.g16_b16r16_2plane_444_unorm_ext
 dEQP-VK.sparse_resources.aligned_mip_size.2d_array.r64i
 dEQP-VK.sparse_resources.aligned_mip_size.2d_array.r64ui
+dEQP-VK.sparse_resources.aligned_mip_size.2d_array.g8_b8r8_2plane_444_unorm_ext
+dEQP-VK.sparse_resources.aligned_mip_size.2d_array.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext
+dEQP-VK.sparse_resources.aligned_mip_size.2d_array.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext
+dEQP-VK.sparse_resources.aligned_mip_size.2d_array.g16_b16r16_2plane_444_unorm_ext
 dEQP-VK.sparse_resources.aligned_mip_size.cube.r64i
 dEQP-VK.sparse_resources.aligned_mip_size.cube.r64ui
 dEQP-VK.sparse_resources.aligned_mip_size.cube_array.r64i
@@ -168125,6 +180143,26 @@
 dEQP-VK.sparse_resources.image_block_shapes.2d.r64ui.samples_4
 dEQP-VK.sparse_resources.image_block_shapes.2d.r64ui.samples_8
 dEQP-VK.sparse_resources.image_block_shapes.2d.r64ui.samples_16
+dEQP-VK.sparse_resources.image_block_shapes.2d.g8_b8r8_2plane_444_unorm_ext.samples_1
+dEQP-VK.sparse_resources.image_block_shapes.2d.g8_b8r8_2plane_444_unorm_ext.samples_2
+dEQP-VK.sparse_resources.image_block_shapes.2d.g8_b8r8_2plane_444_unorm_ext.samples_4
+dEQP-VK.sparse_resources.image_block_shapes.2d.g8_b8r8_2plane_444_unorm_ext.samples_8
+dEQP-VK.sparse_resources.image_block_shapes.2d.g8_b8r8_2plane_444_unorm_ext.samples_16
+dEQP-VK.sparse_resources.image_block_shapes.2d.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.samples_1
+dEQP-VK.sparse_resources.image_block_shapes.2d.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.samples_2
+dEQP-VK.sparse_resources.image_block_shapes.2d.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.samples_4
+dEQP-VK.sparse_resources.image_block_shapes.2d.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.samples_8
+dEQP-VK.sparse_resources.image_block_shapes.2d.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.samples_16
+dEQP-VK.sparse_resources.image_block_shapes.2d.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.samples_1
+dEQP-VK.sparse_resources.image_block_shapes.2d.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.samples_2
+dEQP-VK.sparse_resources.image_block_shapes.2d.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.samples_4
+dEQP-VK.sparse_resources.image_block_shapes.2d.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.samples_8
+dEQP-VK.sparse_resources.image_block_shapes.2d.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.samples_16
+dEQP-VK.sparse_resources.image_block_shapes.2d.g16_b16r16_2plane_444_unorm_ext.samples_1
+dEQP-VK.sparse_resources.image_block_shapes.2d.g16_b16r16_2plane_444_unorm_ext.samples_2
+dEQP-VK.sparse_resources.image_block_shapes.2d.g16_b16r16_2plane_444_unorm_ext.samples_4
+dEQP-VK.sparse_resources.image_block_shapes.2d.g16_b16r16_2plane_444_unorm_ext.samples_8
+dEQP-VK.sparse_resources.image_block_shapes.2d.g16_b16r16_2plane_444_unorm_ext.samples_16
 dEQP-VK.sparse_resources.image_block_shapes.2d_array.r64i.samples_1
 dEQP-VK.sparse_resources.image_block_shapes.2d_array.r64i.samples_2
 dEQP-VK.sparse_resources.image_block_shapes.2d_array.r64i.samples_4
@@ -168135,6 +180173,26 @@
 dEQP-VK.sparse_resources.image_block_shapes.2d_array.r64ui.samples_4
 dEQP-VK.sparse_resources.image_block_shapes.2d_array.r64ui.samples_8
 dEQP-VK.sparse_resources.image_block_shapes.2d_array.r64ui.samples_16
+dEQP-VK.sparse_resources.image_block_shapes.2d_array.g8_b8r8_2plane_444_unorm_ext.samples_1
+dEQP-VK.sparse_resources.image_block_shapes.2d_array.g8_b8r8_2plane_444_unorm_ext.samples_2
+dEQP-VK.sparse_resources.image_block_shapes.2d_array.g8_b8r8_2plane_444_unorm_ext.samples_4
+dEQP-VK.sparse_resources.image_block_shapes.2d_array.g8_b8r8_2plane_444_unorm_ext.samples_8
+dEQP-VK.sparse_resources.image_block_shapes.2d_array.g8_b8r8_2plane_444_unorm_ext.samples_16
+dEQP-VK.sparse_resources.image_block_shapes.2d_array.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.samples_1
+dEQP-VK.sparse_resources.image_block_shapes.2d_array.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.samples_2
+dEQP-VK.sparse_resources.image_block_shapes.2d_array.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.samples_4
+dEQP-VK.sparse_resources.image_block_shapes.2d_array.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.samples_8
+dEQP-VK.sparse_resources.image_block_shapes.2d_array.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.samples_16
+dEQP-VK.sparse_resources.image_block_shapes.2d_array.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.samples_1
+dEQP-VK.sparse_resources.image_block_shapes.2d_array.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.samples_2
+dEQP-VK.sparse_resources.image_block_shapes.2d_array.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.samples_4
+dEQP-VK.sparse_resources.image_block_shapes.2d_array.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.samples_8
+dEQP-VK.sparse_resources.image_block_shapes.2d_array.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.samples_16
+dEQP-VK.sparse_resources.image_block_shapes.2d_array.g16_b16r16_2plane_444_unorm_ext.samples_1
+dEQP-VK.sparse_resources.image_block_shapes.2d_array.g16_b16r16_2plane_444_unorm_ext.samples_2
+dEQP-VK.sparse_resources.image_block_shapes.2d_array.g16_b16r16_2plane_444_unorm_ext.samples_4
+dEQP-VK.sparse_resources.image_block_shapes.2d_array.g16_b16r16_2plane_444_unorm_ext.samples_8
+dEQP-VK.sparse_resources.image_block_shapes.2d_array.g16_b16r16_2plane_444_unorm_ext.samples_16
 dEQP-VK.sparse_resources.image_block_shapes.cube.r64i.samples_1
 dEQP-VK.sparse_resources.image_block_shapes.cube.r64i.samples_2
 dEQP-VK.sparse_resources.image_block_shapes.cube.r64i.samples_4
@@ -168171,12 +180229,36 @@
 dEQP-VK.sparse_resources.device_group_image_sparse_residency.2d.r64ui.512_256_1
 dEQP-VK.sparse_resources.device_group_image_sparse_residency.2d.r64ui.1024_128_1
 dEQP-VK.sparse_resources.device_group_image_sparse_residency.2d.r64ui.11_137_1
+dEQP-VK.sparse_resources.device_group_image_sparse_residency.2d.g8_b8r8_2plane_444_unorm_ext.512_256_1
+dEQP-VK.sparse_resources.device_group_image_sparse_residency.2d.g8_b8r8_2plane_444_unorm_ext.1024_128_1
+dEQP-VK.sparse_resources.device_group_image_sparse_residency.2d.g8_b8r8_2plane_444_unorm_ext.11_137_1
+dEQP-VK.sparse_resources.device_group_image_sparse_residency.2d.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.512_256_1
+dEQP-VK.sparse_resources.device_group_image_sparse_residency.2d.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.1024_128_1
+dEQP-VK.sparse_resources.device_group_image_sparse_residency.2d.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.11_137_1
+dEQP-VK.sparse_resources.device_group_image_sparse_residency.2d.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.512_256_1
+dEQP-VK.sparse_resources.device_group_image_sparse_residency.2d.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.1024_128_1
+dEQP-VK.sparse_resources.device_group_image_sparse_residency.2d.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.11_137_1
+dEQP-VK.sparse_resources.device_group_image_sparse_residency.2d.g16_b16r16_2plane_444_unorm_ext.512_256_1
+dEQP-VK.sparse_resources.device_group_image_sparse_residency.2d.g16_b16r16_2plane_444_unorm_ext.1024_128_1
+dEQP-VK.sparse_resources.device_group_image_sparse_residency.2d.g16_b16r16_2plane_444_unorm_ext.11_137_1
 dEQP-VK.sparse_resources.device_group_image_sparse_residency.2d_array.r64i.512_256_6
 dEQP-VK.sparse_resources.device_group_image_sparse_residency.2d_array.r64i.1024_128_8
 dEQP-VK.sparse_resources.device_group_image_sparse_residency.2d_array.r64i.11_137_3
 dEQP-VK.sparse_resources.device_group_image_sparse_residency.2d_array.r64ui.512_256_6
 dEQP-VK.sparse_resources.device_group_image_sparse_residency.2d_array.r64ui.1024_128_8
 dEQP-VK.sparse_resources.device_group_image_sparse_residency.2d_array.r64ui.11_137_3
+dEQP-VK.sparse_resources.device_group_image_sparse_residency.2d_array.g8_b8r8_2plane_444_unorm_ext.512_256_6
+dEQP-VK.sparse_resources.device_group_image_sparse_residency.2d_array.g8_b8r8_2plane_444_unorm_ext.1024_128_8
+dEQP-VK.sparse_resources.device_group_image_sparse_residency.2d_array.g8_b8r8_2plane_444_unorm_ext.11_137_3
+dEQP-VK.sparse_resources.device_group_image_sparse_residency.2d_array.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.512_256_6
+dEQP-VK.sparse_resources.device_group_image_sparse_residency.2d_array.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.1024_128_8
+dEQP-VK.sparse_resources.device_group_image_sparse_residency.2d_array.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.11_137_3
+dEQP-VK.sparse_resources.device_group_image_sparse_residency.2d_array.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.512_256_6
+dEQP-VK.sparse_resources.device_group_image_sparse_residency.2d_array.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.1024_128_8
+dEQP-VK.sparse_resources.device_group_image_sparse_residency.2d_array.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.11_137_3
+dEQP-VK.sparse_resources.device_group_image_sparse_residency.2d_array.g16_b16r16_2plane_444_unorm_ext.512_256_6
+dEQP-VK.sparse_resources.device_group_image_sparse_residency.2d_array.g16_b16r16_2plane_444_unorm_ext.1024_128_8
+dEQP-VK.sparse_resources.device_group_image_sparse_residency.2d_array.g16_b16r16_2plane_444_unorm_ext.11_137_3
 dEQP-VK.sparse_resources.device_group_image_sparse_residency.cube.r64i.256_256_1
 dEQP-VK.sparse_resources.device_group_image_sparse_residency.cube.r64i.128_128_1
 dEQP-VK.sparse_resources.device_group_image_sparse_residency.cube.r64i.137_137_1
@@ -168201,12 +180283,36 @@
 dEQP-VK.sparse_resources.mipmap_sparse_residency.2d.r64ui.512_256_1
 dEQP-VK.sparse_resources.mipmap_sparse_residency.2d.r64ui.1024_128_1
 dEQP-VK.sparse_resources.mipmap_sparse_residency.2d.r64ui.11_137_1
+dEQP-VK.sparse_resources.mipmap_sparse_residency.2d.g8_b8r8_2plane_444_unorm_ext.512_256_1
+dEQP-VK.sparse_resources.mipmap_sparse_residency.2d.g8_b8r8_2plane_444_unorm_ext.1024_128_1
+dEQP-VK.sparse_resources.mipmap_sparse_residency.2d.g8_b8r8_2plane_444_unorm_ext.11_137_1
+dEQP-VK.sparse_resources.mipmap_sparse_residency.2d.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.512_256_1
+dEQP-VK.sparse_resources.mipmap_sparse_residency.2d.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.1024_128_1
+dEQP-VK.sparse_resources.mipmap_sparse_residency.2d.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.11_137_1
+dEQP-VK.sparse_resources.mipmap_sparse_residency.2d.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.512_256_1
+dEQP-VK.sparse_resources.mipmap_sparse_residency.2d.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.1024_128_1
+dEQP-VK.sparse_resources.mipmap_sparse_residency.2d.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.11_137_1
+dEQP-VK.sparse_resources.mipmap_sparse_residency.2d.g16_b16r16_2plane_444_unorm_ext.512_256_1
+dEQP-VK.sparse_resources.mipmap_sparse_residency.2d.g16_b16r16_2plane_444_unorm_ext.1024_128_1
+dEQP-VK.sparse_resources.mipmap_sparse_residency.2d.g16_b16r16_2plane_444_unorm_ext.11_137_1
 dEQP-VK.sparse_resources.mipmap_sparse_residency.2d_array.r64i.512_256_6
 dEQP-VK.sparse_resources.mipmap_sparse_residency.2d_array.r64i.1024_128_8
 dEQP-VK.sparse_resources.mipmap_sparse_residency.2d_array.r64i.11_137_3
 dEQP-VK.sparse_resources.mipmap_sparse_residency.2d_array.r64ui.512_256_6
 dEQP-VK.sparse_resources.mipmap_sparse_residency.2d_array.r64ui.1024_128_8
 dEQP-VK.sparse_resources.mipmap_sparse_residency.2d_array.r64ui.11_137_3
+dEQP-VK.sparse_resources.mipmap_sparse_residency.2d_array.g8_b8r8_2plane_444_unorm_ext.512_256_6
+dEQP-VK.sparse_resources.mipmap_sparse_residency.2d_array.g8_b8r8_2plane_444_unorm_ext.1024_128_8
+dEQP-VK.sparse_resources.mipmap_sparse_residency.2d_array.g8_b8r8_2plane_444_unorm_ext.11_137_3
+dEQP-VK.sparse_resources.mipmap_sparse_residency.2d_array.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.512_256_6
+dEQP-VK.sparse_resources.mipmap_sparse_residency.2d_array.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.1024_128_8
+dEQP-VK.sparse_resources.mipmap_sparse_residency.2d_array.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.11_137_3
+dEQP-VK.sparse_resources.mipmap_sparse_residency.2d_array.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.512_256_6
+dEQP-VK.sparse_resources.mipmap_sparse_residency.2d_array.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.1024_128_8
+dEQP-VK.sparse_resources.mipmap_sparse_residency.2d_array.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.11_137_3
+dEQP-VK.sparse_resources.mipmap_sparse_residency.2d_array.g16_b16r16_2plane_444_unorm_ext.512_256_6
+dEQP-VK.sparse_resources.mipmap_sparse_residency.2d_array.g16_b16r16_2plane_444_unorm_ext.1024_128_8
+dEQP-VK.sparse_resources.mipmap_sparse_residency.2d_array.g16_b16r16_2plane_444_unorm_ext.11_137_3
 dEQP-VK.sparse_resources.mipmap_sparse_residency.cube.r64i.256_256_1
 dEQP-VK.sparse_resources.mipmap_sparse_residency.cube.r64i.128_128_1
 dEQP-VK.sparse_resources.mipmap_sparse_residency.cube.r64i.137_137_1
@@ -168231,12 +180337,36 @@
 dEQP-VK.sparse_resources.device_group_mipmap_sparse_residency.2d.r64ui.512_256_1
 dEQP-VK.sparse_resources.device_group_mipmap_sparse_residency.2d.r64ui.1024_128_1
 dEQP-VK.sparse_resources.device_group_mipmap_sparse_residency.2d.r64ui.11_137_1
+dEQP-VK.sparse_resources.device_group_mipmap_sparse_residency.2d.g8_b8r8_2plane_444_unorm_ext.512_256_1
+dEQP-VK.sparse_resources.device_group_mipmap_sparse_residency.2d.g8_b8r8_2plane_444_unorm_ext.1024_128_1
+dEQP-VK.sparse_resources.device_group_mipmap_sparse_residency.2d.g8_b8r8_2plane_444_unorm_ext.11_137_1
+dEQP-VK.sparse_resources.device_group_mipmap_sparse_residency.2d.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.512_256_1
+dEQP-VK.sparse_resources.device_group_mipmap_sparse_residency.2d.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.1024_128_1
+dEQP-VK.sparse_resources.device_group_mipmap_sparse_residency.2d.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.11_137_1
+dEQP-VK.sparse_resources.device_group_mipmap_sparse_residency.2d.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.512_256_1
+dEQP-VK.sparse_resources.device_group_mipmap_sparse_residency.2d.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.1024_128_1
+dEQP-VK.sparse_resources.device_group_mipmap_sparse_residency.2d.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.11_137_1
+dEQP-VK.sparse_resources.device_group_mipmap_sparse_residency.2d.g16_b16r16_2plane_444_unorm_ext.512_256_1
+dEQP-VK.sparse_resources.device_group_mipmap_sparse_residency.2d.g16_b16r16_2plane_444_unorm_ext.1024_128_1
+dEQP-VK.sparse_resources.device_group_mipmap_sparse_residency.2d.g16_b16r16_2plane_444_unorm_ext.11_137_1
 dEQP-VK.sparse_resources.device_group_mipmap_sparse_residency.2d_array.r64i.512_256_6
 dEQP-VK.sparse_resources.device_group_mipmap_sparse_residency.2d_array.r64i.1024_128_8
 dEQP-VK.sparse_resources.device_group_mipmap_sparse_residency.2d_array.r64i.11_137_3
 dEQP-VK.sparse_resources.device_group_mipmap_sparse_residency.2d_array.r64ui.512_256_6
 dEQP-VK.sparse_resources.device_group_mipmap_sparse_residency.2d_array.r64ui.1024_128_8
 dEQP-VK.sparse_resources.device_group_mipmap_sparse_residency.2d_array.r64ui.11_137_3
+dEQP-VK.sparse_resources.device_group_mipmap_sparse_residency.2d_array.g8_b8r8_2plane_444_unorm_ext.512_256_6
+dEQP-VK.sparse_resources.device_group_mipmap_sparse_residency.2d_array.g8_b8r8_2plane_444_unorm_ext.1024_128_8
+dEQP-VK.sparse_resources.device_group_mipmap_sparse_residency.2d_array.g8_b8r8_2plane_444_unorm_ext.11_137_3
+dEQP-VK.sparse_resources.device_group_mipmap_sparse_residency.2d_array.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.512_256_6
+dEQP-VK.sparse_resources.device_group_mipmap_sparse_residency.2d_array.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.1024_128_8
+dEQP-VK.sparse_resources.device_group_mipmap_sparse_residency.2d_array.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.11_137_3
+dEQP-VK.sparse_resources.device_group_mipmap_sparse_residency.2d_array.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.512_256_6
+dEQP-VK.sparse_resources.device_group_mipmap_sparse_residency.2d_array.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.1024_128_8
+dEQP-VK.sparse_resources.device_group_mipmap_sparse_residency.2d_array.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.11_137_3
+dEQP-VK.sparse_resources.device_group_mipmap_sparse_residency.2d_array.g16_b16r16_2plane_444_unorm_ext.512_256_6
+dEQP-VK.sparse_resources.device_group_mipmap_sparse_residency.2d_array.g16_b16r16_2plane_444_unorm_ext.1024_128_8
+dEQP-VK.sparse_resources.device_group_mipmap_sparse_residency.2d_array.g16_b16r16_2plane_444_unorm_ext.11_137_3
 dEQP-VK.sparse_resources.device_group_mipmap_sparse_residency.cube.r64i.256_256_1
 dEQP-VK.sparse_resources.device_group_mipmap_sparse_residency.cube.r64i.128_128_1
 dEQP-VK.sparse_resources.device_group_mipmap_sparse_residency.cube.r64i.137_137_1
@@ -168263,6 +180393,22 @@
 dEQP-VK.sparse_resources.image_sparse_memory_aliasing.2d.r64ui.128_128_1
 dEQP-VK.sparse_resources.image_sparse_memory_aliasing.2d.r64ui.503_137_1
 dEQP-VK.sparse_resources.image_sparse_memory_aliasing.2d.r64ui.11_37_1
+dEQP-VK.sparse_resources.image_sparse_memory_aliasing.2d.g8_b8r8_2plane_444_unorm_ext.512_256_1
+dEQP-VK.sparse_resources.image_sparse_memory_aliasing.2d.g8_b8r8_2plane_444_unorm_ext.128_128_1
+dEQP-VK.sparse_resources.image_sparse_memory_aliasing.2d.g8_b8r8_2plane_444_unorm_ext.503_137_1
+dEQP-VK.sparse_resources.image_sparse_memory_aliasing.2d.g8_b8r8_2plane_444_unorm_ext.11_37_1
+dEQP-VK.sparse_resources.image_sparse_memory_aliasing.2d.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.512_256_1
+dEQP-VK.sparse_resources.image_sparse_memory_aliasing.2d.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.128_128_1
+dEQP-VK.sparse_resources.image_sparse_memory_aliasing.2d.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.503_137_1
+dEQP-VK.sparse_resources.image_sparse_memory_aliasing.2d.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.11_37_1
+dEQP-VK.sparse_resources.image_sparse_memory_aliasing.2d.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.512_256_1
+dEQP-VK.sparse_resources.image_sparse_memory_aliasing.2d.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.128_128_1
+dEQP-VK.sparse_resources.image_sparse_memory_aliasing.2d.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.503_137_1
+dEQP-VK.sparse_resources.image_sparse_memory_aliasing.2d.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.11_37_1
+dEQP-VK.sparse_resources.image_sparse_memory_aliasing.2d.g16_b16r16_2plane_444_unorm_ext.512_256_1
+dEQP-VK.sparse_resources.image_sparse_memory_aliasing.2d.g16_b16r16_2plane_444_unorm_ext.128_128_1
+dEQP-VK.sparse_resources.image_sparse_memory_aliasing.2d.g16_b16r16_2plane_444_unorm_ext.503_137_1
+dEQP-VK.sparse_resources.image_sparse_memory_aliasing.2d.g16_b16r16_2plane_444_unorm_ext.11_37_1
 dEQP-VK.sparse_resources.image_sparse_memory_aliasing.2d_array.r64i.512_256_6
 dEQP-VK.sparse_resources.image_sparse_memory_aliasing.2d_array.r64i.128_128_8
 dEQP-VK.sparse_resources.image_sparse_memory_aliasing.2d_array.r64i.503_137_3
@@ -168271,6 +180417,22 @@
 dEQP-VK.sparse_resources.image_sparse_memory_aliasing.2d_array.r64ui.128_128_8
 dEQP-VK.sparse_resources.image_sparse_memory_aliasing.2d_array.r64ui.503_137_3
 dEQP-VK.sparse_resources.image_sparse_memory_aliasing.2d_array.r64ui.11_37_3
+dEQP-VK.sparse_resources.image_sparse_memory_aliasing.2d_array.g8_b8r8_2plane_444_unorm_ext.512_256_6
+dEQP-VK.sparse_resources.image_sparse_memory_aliasing.2d_array.g8_b8r8_2plane_444_unorm_ext.128_128_8
+dEQP-VK.sparse_resources.image_sparse_memory_aliasing.2d_array.g8_b8r8_2plane_444_unorm_ext.503_137_3
+dEQP-VK.sparse_resources.image_sparse_memory_aliasing.2d_array.g8_b8r8_2plane_444_unorm_ext.11_37_3
+dEQP-VK.sparse_resources.image_sparse_memory_aliasing.2d_array.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.512_256_6
+dEQP-VK.sparse_resources.image_sparse_memory_aliasing.2d_array.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.128_128_8
+dEQP-VK.sparse_resources.image_sparse_memory_aliasing.2d_array.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.503_137_3
+dEQP-VK.sparse_resources.image_sparse_memory_aliasing.2d_array.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.11_37_3
+dEQP-VK.sparse_resources.image_sparse_memory_aliasing.2d_array.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.512_256_6
+dEQP-VK.sparse_resources.image_sparse_memory_aliasing.2d_array.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.128_128_8
+dEQP-VK.sparse_resources.image_sparse_memory_aliasing.2d_array.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.503_137_3
+dEQP-VK.sparse_resources.image_sparse_memory_aliasing.2d_array.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.11_37_3
+dEQP-VK.sparse_resources.image_sparse_memory_aliasing.2d_array.g16_b16r16_2plane_444_unorm_ext.512_256_6
+dEQP-VK.sparse_resources.image_sparse_memory_aliasing.2d_array.g16_b16r16_2plane_444_unorm_ext.128_128_8
+dEQP-VK.sparse_resources.image_sparse_memory_aliasing.2d_array.g16_b16r16_2plane_444_unorm_ext.503_137_3
+dEQP-VK.sparse_resources.image_sparse_memory_aliasing.2d_array.g16_b16r16_2plane_444_unorm_ext.11_37_3
 dEQP-VK.sparse_resources.image_sparse_memory_aliasing.cube.r64i.256_256_1
 dEQP-VK.sparse_resources.image_sparse_memory_aliasing.cube.r64i.128_128_1
 dEQP-VK.sparse_resources.image_sparse_memory_aliasing.cube.r64i.137_137_1
@@ -168303,6 +180465,22 @@
 dEQP-VK.sparse_resources.device_group_image_sparse_memory_aliasing.2d.r64ui.128_128_1
 dEQP-VK.sparse_resources.device_group_image_sparse_memory_aliasing.2d.r64ui.503_137_1
 dEQP-VK.sparse_resources.device_group_image_sparse_memory_aliasing.2d.r64ui.11_37_1
+dEQP-VK.sparse_resources.device_group_image_sparse_memory_aliasing.2d.g8_b8r8_2plane_444_unorm_ext.512_256_1
+dEQP-VK.sparse_resources.device_group_image_sparse_memory_aliasing.2d.g8_b8r8_2plane_444_unorm_ext.128_128_1
+dEQP-VK.sparse_resources.device_group_image_sparse_memory_aliasing.2d.g8_b8r8_2plane_444_unorm_ext.503_137_1
+dEQP-VK.sparse_resources.device_group_image_sparse_memory_aliasing.2d.g8_b8r8_2plane_444_unorm_ext.11_37_1
+dEQP-VK.sparse_resources.device_group_image_sparse_memory_aliasing.2d.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.512_256_1
+dEQP-VK.sparse_resources.device_group_image_sparse_memory_aliasing.2d.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.128_128_1
+dEQP-VK.sparse_resources.device_group_image_sparse_memory_aliasing.2d.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.503_137_1
+dEQP-VK.sparse_resources.device_group_image_sparse_memory_aliasing.2d.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.11_37_1
+dEQP-VK.sparse_resources.device_group_image_sparse_memory_aliasing.2d.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.512_256_1
+dEQP-VK.sparse_resources.device_group_image_sparse_memory_aliasing.2d.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.128_128_1
+dEQP-VK.sparse_resources.device_group_image_sparse_memory_aliasing.2d.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.503_137_1
+dEQP-VK.sparse_resources.device_group_image_sparse_memory_aliasing.2d.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.11_37_1
+dEQP-VK.sparse_resources.device_group_image_sparse_memory_aliasing.2d.g16_b16r16_2plane_444_unorm_ext.512_256_1
+dEQP-VK.sparse_resources.device_group_image_sparse_memory_aliasing.2d.g16_b16r16_2plane_444_unorm_ext.128_128_1
+dEQP-VK.sparse_resources.device_group_image_sparse_memory_aliasing.2d.g16_b16r16_2plane_444_unorm_ext.503_137_1
+dEQP-VK.sparse_resources.device_group_image_sparse_memory_aliasing.2d.g16_b16r16_2plane_444_unorm_ext.11_37_1
 dEQP-VK.sparse_resources.device_group_image_sparse_memory_aliasing.2d_array.r64i.512_256_6
 dEQP-VK.sparse_resources.device_group_image_sparse_memory_aliasing.2d_array.r64i.128_128_8
 dEQP-VK.sparse_resources.device_group_image_sparse_memory_aliasing.2d_array.r64i.503_137_3
@@ -168311,6 +180489,22 @@
 dEQP-VK.sparse_resources.device_group_image_sparse_memory_aliasing.2d_array.r64ui.128_128_8
 dEQP-VK.sparse_resources.device_group_image_sparse_memory_aliasing.2d_array.r64ui.503_137_3
 dEQP-VK.sparse_resources.device_group_image_sparse_memory_aliasing.2d_array.r64ui.11_37_3
+dEQP-VK.sparse_resources.device_group_image_sparse_memory_aliasing.2d_array.g8_b8r8_2plane_444_unorm_ext.512_256_6
+dEQP-VK.sparse_resources.device_group_image_sparse_memory_aliasing.2d_array.g8_b8r8_2plane_444_unorm_ext.128_128_8
+dEQP-VK.sparse_resources.device_group_image_sparse_memory_aliasing.2d_array.g8_b8r8_2plane_444_unorm_ext.503_137_3
+dEQP-VK.sparse_resources.device_group_image_sparse_memory_aliasing.2d_array.g8_b8r8_2plane_444_unorm_ext.11_37_3
+dEQP-VK.sparse_resources.device_group_image_sparse_memory_aliasing.2d_array.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.512_256_6
+dEQP-VK.sparse_resources.device_group_image_sparse_memory_aliasing.2d_array.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.128_128_8
+dEQP-VK.sparse_resources.device_group_image_sparse_memory_aliasing.2d_array.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.503_137_3
+dEQP-VK.sparse_resources.device_group_image_sparse_memory_aliasing.2d_array.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.11_37_3
+dEQP-VK.sparse_resources.device_group_image_sparse_memory_aliasing.2d_array.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.512_256_6
+dEQP-VK.sparse_resources.device_group_image_sparse_memory_aliasing.2d_array.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.128_128_8
+dEQP-VK.sparse_resources.device_group_image_sparse_memory_aliasing.2d_array.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.503_137_3
+dEQP-VK.sparse_resources.device_group_image_sparse_memory_aliasing.2d_array.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.11_37_3
+dEQP-VK.sparse_resources.device_group_image_sparse_memory_aliasing.2d_array.g16_b16r16_2plane_444_unorm_ext.512_256_6
+dEQP-VK.sparse_resources.device_group_image_sparse_memory_aliasing.2d_array.g16_b16r16_2plane_444_unorm_ext.128_128_8
+dEQP-VK.sparse_resources.device_group_image_sparse_memory_aliasing.2d_array.g16_b16r16_2plane_444_unorm_ext.503_137_3
+dEQP-VK.sparse_resources.device_group_image_sparse_memory_aliasing.2d_array.g16_b16r16_2plane_444_unorm_ext.11_37_3
 dEQP-VK.sparse_resources.device_group_image_sparse_memory_aliasing.cube.r64i.256_256_1
 dEQP-VK.sparse_resources.device_group_image_sparse_memory_aliasing.cube.r64i.128_128_1
 dEQP-VK.sparse_resources.device_group_image_sparse_memory_aliasing.cube.r64i.137_137_1
@@ -168343,6 +180537,22 @@
 dEQP-VK.sparse_resources.shader_intrinsics.2d_sparse_fetch.r64ui.128_128_1
 dEQP-VK.sparse_resources.shader_intrinsics.2d_sparse_fetch.r64ui.503_137_1
 dEQP-VK.sparse_resources.shader_intrinsics.2d_sparse_fetch.r64ui.11_37_1
+dEQP-VK.sparse_resources.shader_intrinsics.2d_sparse_fetch.g8_b8r8_2plane_444_unorm_ext.512_256_1
+dEQP-VK.sparse_resources.shader_intrinsics.2d_sparse_fetch.g8_b8r8_2plane_444_unorm_ext.128_128_1
+dEQP-VK.sparse_resources.shader_intrinsics.2d_sparse_fetch.g8_b8r8_2plane_444_unorm_ext.503_137_1
+dEQP-VK.sparse_resources.shader_intrinsics.2d_sparse_fetch.g8_b8r8_2plane_444_unorm_ext.11_37_1
+dEQP-VK.sparse_resources.shader_intrinsics.2d_sparse_fetch.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.512_256_1
+dEQP-VK.sparse_resources.shader_intrinsics.2d_sparse_fetch.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.128_128_1
+dEQP-VK.sparse_resources.shader_intrinsics.2d_sparse_fetch.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.503_137_1
+dEQP-VK.sparse_resources.shader_intrinsics.2d_sparse_fetch.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.11_37_1
+dEQP-VK.sparse_resources.shader_intrinsics.2d_sparse_fetch.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.512_256_1
+dEQP-VK.sparse_resources.shader_intrinsics.2d_sparse_fetch.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.128_128_1
+dEQP-VK.sparse_resources.shader_intrinsics.2d_sparse_fetch.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.503_137_1
+dEQP-VK.sparse_resources.shader_intrinsics.2d_sparse_fetch.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.11_37_1
+dEQP-VK.sparse_resources.shader_intrinsics.2d_sparse_fetch.g16_b16r16_2plane_444_unorm_ext.512_256_1
+dEQP-VK.sparse_resources.shader_intrinsics.2d_sparse_fetch.g16_b16r16_2plane_444_unorm_ext.128_128_1
+dEQP-VK.sparse_resources.shader_intrinsics.2d_sparse_fetch.g16_b16r16_2plane_444_unorm_ext.503_137_1
+dEQP-VK.sparse_resources.shader_intrinsics.2d_sparse_fetch.g16_b16r16_2plane_444_unorm_ext.11_37_1
 dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_fetch.r64i.512_256_6
 dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_fetch.r64i.128_128_8
 dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_fetch.r64i.503_137_3
@@ -168351,6 +180561,22 @@
 dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_fetch.r64ui.128_128_8
 dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_fetch.r64ui.503_137_3
 dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_fetch.r64ui.11_37_3
+dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_fetch.g8_b8r8_2plane_444_unorm_ext.512_256_6
+dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_fetch.g8_b8r8_2plane_444_unorm_ext.128_128_8
+dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_fetch.g8_b8r8_2plane_444_unorm_ext.503_137_3
+dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_fetch.g8_b8r8_2plane_444_unorm_ext.11_37_3
+dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_fetch.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.512_256_6
+dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_fetch.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.128_128_8
+dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_fetch.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.503_137_3
+dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_fetch.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.11_37_3
+dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_fetch.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.512_256_6
+dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_fetch.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.128_128_8
+dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_fetch.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.503_137_3
+dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_fetch.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.11_37_3
+dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_fetch.g16_b16r16_2plane_444_unorm_ext.512_256_6
+dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_fetch.g16_b16r16_2plane_444_unorm_ext.128_128_8
+dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_fetch.g16_b16r16_2plane_444_unorm_ext.503_137_3
+dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_fetch.g16_b16r16_2plane_444_unorm_ext.11_37_3
 dEQP-VK.sparse_resources.shader_intrinsics.3d_sparse_fetch.r64i.256_256_16
 dEQP-VK.sparse_resources.shader_intrinsics.3d_sparse_fetch.r64i.128_128_8
 dEQP-VK.sparse_resources.shader_intrinsics.3d_sparse_fetch.r64i.503_137_3
@@ -168367,6 +180593,22 @@
 dEQP-VK.sparse_resources.shader_intrinsics.2d_sparse_read.r64ui.128_128_1
 dEQP-VK.sparse_resources.shader_intrinsics.2d_sparse_read.r64ui.503_137_1
 dEQP-VK.sparse_resources.shader_intrinsics.2d_sparse_read.r64ui.11_37_1
+dEQP-VK.sparse_resources.shader_intrinsics.2d_sparse_read.g8_b8r8_2plane_444_unorm_ext.512_256_1
+dEQP-VK.sparse_resources.shader_intrinsics.2d_sparse_read.g8_b8r8_2plane_444_unorm_ext.128_128_1
+dEQP-VK.sparse_resources.shader_intrinsics.2d_sparse_read.g8_b8r8_2plane_444_unorm_ext.503_137_1
+dEQP-VK.sparse_resources.shader_intrinsics.2d_sparse_read.g8_b8r8_2plane_444_unorm_ext.11_37_1
+dEQP-VK.sparse_resources.shader_intrinsics.2d_sparse_read.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.512_256_1
+dEQP-VK.sparse_resources.shader_intrinsics.2d_sparse_read.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.128_128_1
+dEQP-VK.sparse_resources.shader_intrinsics.2d_sparse_read.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.503_137_1
+dEQP-VK.sparse_resources.shader_intrinsics.2d_sparse_read.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.11_37_1
+dEQP-VK.sparse_resources.shader_intrinsics.2d_sparse_read.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.512_256_1
+dEQP-VK.sparse_resources.shader_intrinsics.2d_sparse_read.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.128_128_1
+dEQP-VK.sparse_resources.shader_intrinsics.2d_sparse_read.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.503_137_1
+dEQP-VK.sparse_resources.shader_intrinsics.2d_sparse_read.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.11_37_1
+dEQP-VK.sparse_resources.shader_intrinsics.2d_sparse_read.g16_b16r16_2plane_444_unorm_ext.512_256_1
+dEQP-VK.sparse_resources.shader_intrinsics.2d_sparse_read.g16_b16r16_2plane_444_unorm_ext.128_128_1
+dEQP-VK.sparse_resources.shader_intrinsics.2d_sparse_read.g16_b16r16_2plane_444_unorm_ext.503_137_1
+dEQP-VK.sparse_resources.shader_intrinsics.2d_sparse_read.g16_b16r16_2plane_444_unorm_ext.11_37_1
 dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_read.r64i.512_256_6
 dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_read.r64i.128_128_8
 dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_read.r64i.503_137_3
@@ -168375,6 +180617,22 @@
 dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_read.r64ui.128_128_8
 dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_read.r64ui.503_137_3
 dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_read.r64ui.11_37_3
+dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_read.g8_b8r8_2plane_444_unorm_ext.512_256_6
+dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_read.g8_b8r8_2plane_444_unorm_ext.128_128_8
+dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_read.g8_b8r8_2plane_444_unorm_ext.503_137_3
+dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_read.g8_b8r8_2plane_444_unorm_ext.11_37_3
+dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_read.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.512_256_6
+dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_read.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.128_128_8
+dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_read.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.503_137_3
+dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_read.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.11_37_3
+dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_read.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.512_256_6
+dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_read.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.128_128_8
+dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_read.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.503_137_3
+dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_read.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.11_37_3
+dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_read.g16_b16r16_2plane_444_unorm_ext.512_256_6
+dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_read.g16_b16r16_2plane_444_unorm_ext.128_128_8
+dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_read.g16_b16r16_2plane_444_unorm_ext.503_137_3
+dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_read.g16_b16r16_2plane_444_unorm_ext.11_37_3
 dEQP-VK.sparse_resources.shader_intrinsics.cube_sparse_read.r64i.256_256_1
 dEQP-VK.sparse_resources.shader_intrinsics.cube_sparse_read.r64i.128_128_1
 dEQP-VK.sparse_resources.shader_intrinsics.cube_sparse_read.r64i.137_137_1
@@ -168407,6 +180665,22 @@
 dEQP-VK.sparse_resources.shader_intrinsics.2d_sparse_sample_explicit_lod.r64ui.128_128_1
 dEQP-VK.sparse_resources.shader_intrinsics.2d_sparse_sample_explicit_lod.r64ui.503_137_1
 dEQP-VK.sparse_resources.shader_intrinsics.2d_sparse_sample_explicit_lod.r64ui.11_37_1
+dEQP-VK.sparse_resources.shader_intrinsics.2d_sparse_sample_explicit_lod.g8_b8r8_2plane_444_unorm_ext.512_256_1
+dEQP-VK.sparse_resources.shader_intrinsics.2d_sparse_sample_explicit_lod.g8_b8r8_2plane_444_unorm_ext.128_128_1
+dEQP-VK.sparse_resources.shader_intrinsics.2d_sparse_sample_explicit_lod.g8_b8r8_2plane_444_unorm_ext.503_137_1
+dEQP-VK.sparse_resources.shader_intrinsics.2d_sparse_sample_explicit_lod.g8_b8r8_2plane_444_unorm_ext.11_37_1
+dEQP-VK.sparse_resources.shader_intrinsics.2d_sparse_sample_explicit_lod.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.512_256_1
+dEQP-VK.sparse_resources.shader_intrinsics.2d_sparse_sample_explicit_lod.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.128_128_1
+dEQP-VK.sparse_resources.shader_intrinsics.2d_sparse_sample_explicit_lod.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.503_137_1
+dEQP-VK.sparse_resources.shader_intrinsics.2d_sparse_sample_explicit_lod.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.11_37_1
+dEQP-VK.sparse_resources.shader_intrinsics.2d_sparse_sample_explicit_lod.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.512_256_1
+dEQP-VK.sparse_resources.shader_intrinsics.2d_sparse_sample_explicit_lod.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.128_128_1
+dEQP-VK.sparse_resources.shader_intrinsics.2d_sparse_sample_explicit_lod.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.503_137_1
+dEQP-VK.sparse_resources.shader_intrinsics.2d_sparse_sample_explicit_lod.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.11_37_1
+dEQP-VK.sparse_resources.shader_intrinsics.2d_sparse_sample_explicit_lod.g16_b16r16_2plane_444_unorm_ext.512_256_1
+dEQP-VK.sparse_resources.shader_intrinsics.2d_sparse_sample_explicit_lod.g16_b16r16_2plane_444_unorm_ext.128_128_1
+dEQP-VK.sparse_resources.shader_intrinsics.2d_sparse_sample_explicit_lod.g16_b16r16_2plane_444_unorm_ext.503_137_1
+dEQP-VK.sparse_resources.shader_intrinsics.2d_sparse_sample_explicit_lod.g16_b16r16_2plane_444_unorm_ext.11_37_1
 dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_sample_explicit_lod.r64i.512_256_6
 dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_sample_explicit_lod.r64i.128_128_8
 dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_sample_explicit_lod.r64i.503_137_3
@@ -168415,6 +180689,22 @@
 dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_sample_explicit_lod.r64ui.128_128_8
 dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_sample_explicit_lod.r64ui.503_137_3
 dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_sample_explicit_lod.r64ui.11_37_3
+dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_sample_explicit_lod.g8_b8r8_2plane_444_unorm_ext.512_256_6
+dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_sample_explicit_lod.g8_b8r8_2plane_444_unorm_ext.128_128_8
+dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_sample_explicit_lod.g8_b8r8_2plane_444_unorm_ext.503_137_3
+dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_sample_explicit_lod.g8_b8r8_2plane_444_unorm_ext.11_37_3
+dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_sample_explicit_lod.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.512_256_6
+dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_sample_explicit_lod.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.128_128_8
+dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_sample_explicit_lod.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.503_137_3
+dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_sample_explicit_lod.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.11_37_3
+dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_sample_explicit_lod.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.512_256_6
+dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_sample_explicit_lod.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.128_128_8
+dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_sample_explicit_lod.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.503_137_3
+dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_sample_explicit_lod.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.11_37_3
+dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_sample_explicit_lod.g16_b16r16_2plane_444_unorm_ext.512_256_6
+dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_sample_explicit_lod.g16_b16r16_2plane_444_unorm_ext.128_128_8
+dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_sample_explicit_lod.g16_b16r16_2plane_444_unorm_ext.503_137_3
+dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_sample_explicit_lod.g16_b16r16_2plane_444_unorm_ext.11_37_3
 dEQP-VK.sparse_resources.shader_intrinsics.2d_sparse_sample_implicit_lod.r64i.512_256_1
 dEQP-VK.sparse_resources.shader_intrinsics.2d_sparse_sample_implicit_lod.r64i.128_128_1
 dEQP-VK.sparse_resources.shader_intrinsics.2d_sparse_sample_implicit_lod.r64i.503_137_1
@@ -168423,6 +180713,22 @@
 dEQP-VK.sparse_resources.shader_intrinsics.2d_sparse_sample_implicit_lod.r64ui.128_128_1
 dEQP-VK.sparse_resources.shader_intrinsics.2d_sparse_sample_implicit_lod.r64ui.503_137_1
 dEQP-VK.sparse_resources.shader_intrinsics.2d_sparse_sample_implicit_lod.r64ui.11_37_1
+dEQP-VK.sparse_resources.shader_intrinsics.2d_sparse_sample_implicit_lod.g8_b8r8_2plane_444_unorm_ext.512_256_1
+dEQP-VK.sparse_resources.shader_intrinsics.2d_sparse_sample_implicit_lod.g8_b8r8_2plane_444_unorm_ext.128_128_1
+dEQP-VK.sparse_resources.shader_intrinsics.2d_sparse_sample_implicit_lod.g8_b8r8_2plane_444_unorm_ext.503_137_1
+dEQP-VK.sparse_resources.shader_intrinsics.2d_sparse_sample_implicit_lod.g8_b8r8_2plane_444_unorm_ext.11_37_1
+dEQP-VK.sparse_resources.shader_intrinsics.2d_sparse_sample_implicit_lod.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.512_256_1
+dEQP-VK.sparse_resources.shader_intrinsics.2d_sparse_sample_implicit_lod.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.128_128_1
+dEQP-VK.sparse_resources.shader_intrinsics.2d_sparse_sample_implicit_lod.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.503_137_1
+dEQP-VK.sparse_resources.shader_intrinsics.2d_sparse_sample_implicit_lod.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.11_37_1
+dEQP-VK.sparse_resources.shader_intrinsics.2d_sparse_sample_implicit_lod.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.512_256_1
+dEQP-VK.sparse_resources.shader_intrinsics.2d_sparse_sample_implicit_lod.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.128_128_1
+dEQP-VK.sparse_resources.shader_intrinsics.2d_sparse_sample_implicit_lod.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.503_137_1
+dEQP-VK.sparse_resources.shader_intrinsics.2d_sparse_sample_implicit_lod.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.11_37_1
+dEQP-VK.sparse_resources.shader_intrinsics.2d_sparse_sample_implicit_lod.g16_b16r16_2plane_444_unorm_ext.512_256_1
+dEQP-VK.sparse_resources.shader_intrinsics.2d_sparse_sample_implicit_lod.g16_b16r16_2plane_444_unorm_ext.128_128_1
+dEQP-VK.sparse_resources.shader_intrinsics.2d_sparse_sample_implicit_lod.g16_b16r16_2plane_444_unorm_ext.503_137_1
+dEQP-VK.sparse_resources.shader_intrinsics.2d_sparse_sample_implicit_lod.g16_b16r16_2plane_444_unorm_ext.11_37_1
 dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_sample_implicit_lod.r64i.512_256_6
 dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_sample_implicit_lod.r64i.128_128_8
 dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_sample_implicit_lod.r64i.503_137_3
@@ -168431,6 +180737,22 @@
 dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_sample_implicit_lod.r64ui.128_128_8
 dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_sample_implicit_lod.r64ui.503_137_3
 dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_sample_implicit_lod.r64ui.11_37_3
+dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_sample_implicit_lod.g8_b8r8_2plane_444_unorm_ext.512_256_6
+dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_sample_implicit_lod.g8_b8r8_2plane_444_unorm_ext.128_128_8
+dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_sample_implicit_lod.g8_b8r8_2plane_444_unorm_ext.503_137_3
+dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_sample_implicit_lod.g8_b8r8_2plane_444_unorm_ext.11_37_3
+dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_sample_implicit_lod.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.512_256_6
+dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_sample_implicit_lod.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.128_128_8
+dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_sample_implicit_lod.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.503_137_3
+dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_sample_implicit_lod.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.11_37_3
+dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_sample_implicit_lod.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.512_256_6
+dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_sample_implicit_lod.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.128_128_8
+dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_sample_implicit_lod.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.503_137_3
+dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_sample_implicit_lod.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.11_37_3
+dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_sample_implicit_lod.g16_b16r16_2plane_444_unorm_ext.512_256_6
+dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_sample_implicit_lod.g16_b16r16_2plane_444_unorm_ext.128_128_8
+dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_sample_implicit_lod.g16_b16r16_2plane_444_unorm_ext.503_137_3
+dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_sample_implicit_lod.g16_b16r16_2plane_444_unorm_ext.11_37_3
 dEQP-VK.sparse_resources.shader_intrinsics.2d_sparse_gather.r64i.512_256_1
 dEQP-VK.sparse_resources.shader_intrinsics.2d_sparse_gather.r64i.128_128_1
 dEQP-VK.sparse_resources.shader_intrinsics.2d_sparse_gather.r64i.503_137_1
@@ -168439,6 +180761,22 @@
 dEQP-VK.sparse_resources.shader_intrinsics.2d_sparse_gather.r64ui.128_128_1
 dEQP-VK.sparse_resources.shader_intrinsics.2d_sparse_gather.r64ui.503_137_1
 dEQP-VK.sparse_resources.shader_intrinsics.2d_sparse_gather.r64ui.11_37_1
+dEQP-VK.sparse_resources.shader_intrinsics.2d_sparse_gather.g8_b8r8_2plane_444_unorm_ext.512_256_1
+dEQP-VK.sparse_resources.shader_intrinsics.2d_sparse_gather.g8_b8r8_2plane_444_unorm_ext.128_128_1
+dEQP-VK.sparse_resources.shader_intrinsics.2d_sparse_gather.g8_b8r8_2plane_444_unorm_ext.503_137_1
+dEQP-VK.sparse_resources.shader_intrinsics.2d_sparse_gather.g8_b8r8_2plane_444_unorm_ext.11_37_1
+dEQP-VK.sparse_resources.shader_intrinsics.2d_sparse_gather.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.512_256_1
+dEQP-VK.sparse_resources.shader_intrinsics.2d_sparse_gather.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.128_128_1
+dEQP-VK.sparse_resources.shader_intrinsics.2d_sparse_gather.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.503_137_1
+dEQP-VK.sparse_resources.shader_intrinsics.2d_sparse_gather.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.11_37_1
+dEQP-VK.sparse_resources.shader_intrinsics.2d_sparse_gather.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.512_256_1
+dEQP-VK.sparse_resources.shader_intrinsics.2d_sparse_gather.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.128_128_1
+dEQP-VK.sparse_resources.shader_intrinsics.2d_sparse_gather.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.503_137_1
+dEQP-VK.sparse_resources.shader_intrinsics.2d_sparse_gather.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.11_37_1
+dEQP-VK.sparse_resources.shader_intrinsics.2d_sparse_gather.g16_b16r16_2plane_444_unorm_ext.512_256_1
+dEQP-VK.sparse_resources.shader_intrinsics.2d_sparse_gather.g16_b16r16_2plane_444_unorm_ext.128_128_1
+dEQP-VK.sparse_resources.shader_intrinsics.2d_sparse_gather.g16_b16r16_2plane_444_unorm_ext.503_137_1
+dEQP-VK.sparse_resources.shader_intrinsics.2d_sparse_gather.g16_b16r16_2plane_444_unorm_ext.11_37_1
 dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_gather.r64i.512_256_6
 dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_gather.r64i.128_128_8
 dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_gather.r64i.503_137_3
@@ -168447,6 +180785,22 @@
 dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_gather.r64ui.128_128_8
 dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_gather.r64ui.503_137_3
 dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_gather.r64ui.11_37_3
+dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_gather.g8_b8r8_2plane_444_unorm_ext.512_256_6
+dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_gather.g8_b8r8_2plane_444_unorm_ext.128_128_8
+dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_gather.g8_b8r8_2plane_444_unorm_ext.503_137_3
+dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_gather.g8_b8r8_2plane_444_unorm_ext.11_37_3
+dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_gather.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.512_256_6
+dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_gather.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.128_128_8
+dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_gather.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.503_137_3
+dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_gather.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.11_37_3
+dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_gather.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.512_256_6
+dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_gather.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.128_128_8
+dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_gather.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.503_137_3
+dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_gather.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.11_37_3
+dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_gather.g16_b16r16_2plane_444_unorm_ext.512_256_6
+dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_gather.g16_b16r16_2plane_444_unorm_ext.128_128_8
+dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_gather.g16_b16r16_2plane_444_unorm_ext.503_137_3
+dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_gather.g16_b16r16_2plane_444_unorm_ext.11_37_3
 dEQP-VK.tessellation.tesscoord.triangles_equal_spacing_execution_mode_in_tesc
 dEQP-VK.tessellation.tesscoord.triangles_fractional_odd_spacing_execution_mode_in_tesc
 dEQP-VK.tessellation.tesscoord.triangles_fractional_even_spacing_execution_mode_in_tesc
@@ -168467,6 +180821,349 @@
 dEQP-VK.rasterization.primitives.stride_zero.single_point
 dEQP-VK.rasterization.primitives.stride_zero.four_points
 dEQP-VK.rasterization.primitives.stride_zero.many_points
+dEQP-VK.rasterization.conservative.overestimate.samples_1.triangles.normal.0_00
+dEQP-VK.rasterization.conservative.overestimate.samples_1.triangles.normal.0_25
+dEQP-VK.rasterization.conservative.overestimate.samples_1.triangles.normal.0_50
+dEQP-VK.rasterization.conservative.overestimate.samples_1.triangles.normal.0_75
+dEQP-VK.rasterization.conservative.overestimate.samples_1.triangles.normal.1_00
+dEQP-VK.rasterization.conservative.overestimate.samples_1.triangles.normal.2_00
+dEQP-VK.rasterization.conservative.overestimate.samples_1.triangles.normal.4_00
+dEQP-VK.rasterization.conservative.overestimate.samples_1.triangles.normal.min
+dEQP-VK.rasterization.conservative.overestimate.samples_1.triangles.normal.max
+dEQP-VK.rasterization.conservative.overestimate.samples_1.triangles.degenerate.0_00
+dEQP-VK.rasterization.conservative.overestimate.samples_1.triangles.degenerate.0_25
+dEQP-VK.rasterization.conservative.overestimate.samples_1.triangles.degenerate.min
+dEQP-VK.rasterization.conservative.overestimate.samples_1.triangles.degenerate.max
+dEQP-VK.rasterization.conservative.overestimate.samples_1.lines.normal.0_00
+dEQP-VK.rasterization.conservative.overestimate.samples_1.lines.normal.0_25
+dEQP-VK.rasterization.conservative.overestimate.samples_1.lines.normal.0_50
+dEQP-VK.rasterization.conservative.overestimate.samples_1.lines.normal.0_75
+dEQP-VK.rasterization.conservative.overestimate.samples_1.lines.normal.1_00
+dEQP-VK.rasterization.conservative.overestimate.samples_1.lines.normal.2_00
+dEQP-VK.rasterization.conservative.overestimate.samples_1.lines.normal.4_00
+dEQP-VK.rasterization.conservative.overestimate.samples_1.lines.normal.min
+dEQP-VK.rasterization.conservative.overestimate.samples_1.lines.normal.max
+dEQP-VK.rasterization.conservative.overestimate.samples_1.lines.degenerate.0_00
+dEQP-VK.rasterization.conservative.overestimate.samples_1.lines.degenerate.0_25
+dEQP-VK.rasterization.conservative.overestimate.samples_1.lines.degenerate.min
+dEQP-VK.rasterization.conservative.overestimate.samples_1.lines.degenerate.max
+dEQP-VK.rasterization.conservative.overestimate.samples_1.points.normal.0_00
+dEQP-VK.rasterization.conservative.overestimate.samples_1.points.normal.0_25
+dEQP-VK.rasterization.conservative.overestimate.samples_1.points.normal.0_50
+dEQP-VK.rasterization.conservative.overestimate.samples_1.points.normal.0_75
+dEQP-VK.rasterization.conservative.overestimate.samples_1.points.normal.1_00
+dEQP-VK.rasterization.conservative.overestimate.samples_1.points.normal.2_00
+dEQP-VK.rasterization.conservative.overestimate.samples_1.points.normal.4_00
+dEQP-VK.rasterization.conservative.overestimate.samples_1.points.normal.min
+dEQP-VK.rasterization.conservative.overestimate.samples_1.points.normal.max
+dEQP-VK.rasterization.conservative.overestimate.samples_2.triangles.normal.0_00
+dEQP-VK.rasterization.conservative.overestimate.samples_2.triangles.normal.0_25
+dEQP-VK.rasterization.conservative.overestimate.samples_2.triangles.normal.0_50
+dEQP-VK.rasterization.conservative.overestimate.samples_2.triangles.normal.0_75
+dEQP-VK.rasterization.conservative.overestimate.samples_2.triangles.normal.1_00
+dEQP-VK.rasterization.conservative.overestimate.samples_2.triangles.normal.2_00
+dEQP-VK.rasterization.conservative.overestimate.samples_2.triangles.normal.4_00
+dEQP-VK.rasterization.conservative.overestimate.samples_2.triangles.normal.min
+dEQP-VK.rasterization.conservative.overestimate.samples_2.triangles.normal.max
+dEQP-VK.rasterization.conservative.overestimate.samples_2.triangles.degenerate.0_00
+dEQP-VK.rasterization.conservative.overestimate.samples_2.triangles.degenerate.0_25
+dEQP-VK.rasterization.conservative.overestimate.samples_2.triangles.degenerate.min
+dEQP-VK.rasterization.conservative.overestimate.samples_2.triangles.degenerate.max
+dEQP-VK.rasterization.conservative.overestimate.samples_2.lines.normal.0_00
+dEQP-VK.rasterization.conservative.overestimate.samples_2.lines.normal.0_25
+dEQP-VK.rasterization.conservative.overestimate.samples_2.lines.normal.0_50
+dEQP-VK.rasterization.conservative.overestimate.samples_2.lines.normal.0_75
+dEQP-VK.rasterization.conservative.overestimate.samples_2.lines.normal.1_00
+dEQP-VK.rasterization.conservative.overestimate.samples_2.lines.normal.2_00
+dEQP-VK.rasterization.conservative.overestimate.samples_2.lines.normal.4_00
+dEQP-VK.rasterization.conservative.overestimate.samples_2.lines.normal.min
+dEQP-VK.rasterization.conservative.overestimate.samples_2.lines.normal.max
+dEQP-VK.rasterization.conservative.overestimate.samples_2.lines.degenerate.0_00
+dEQP-VK.rasterization.conservative.overestimate.samples_2.lines.degenerate.0_25
+dEQP-VK.rasterization.conservative.overestimate.samples_2.lines.degenerate.min
+dEQP-VK.rasterization.conservative.overestimate.samples_2.lines.degenerate.max
+dEQP-VK.rasterization.conservative.overestimate.samples_2.points.normal.0_00
+dEQP-VK.rasterization.conservative.overestimate.samples_2.points.normal.0_25
+dEQP-VK.rasterization.conservative.overestimate.samples_2.points.normal.0_50
+dEQP-VK.rasterization.conservative.overestimate.samples_2.points.normal.0_75
+dEQP-VK.rasterization.conservative.overestimate.samples_2.points.normal.1_00
+dEQP-VK.rasterization.conservative.overestimate.samples_2.points.normal.2_00
+dEQP-VK.rasterization.conservative.overestimate.samples_2.points.normal.4_00
+dEQP-VK.rasterization.conservative.overestimate.samples_2.points.normal.min
+dEQP-VK.rasterization.conservative.overestimate.samples_2.points.normal.max
+dEQP-VK.rasterization.conservative.overestimate.samples_4.triangles.normal.0_00
+dEQP-VK.rasterization.conservative.overestimate.samples_4.triangles.normal.0_25
+dEQP-VK.rasterization.conservative.overestimate.samples_4.triangles.normal.0_50
+dEQP-VK.rasterization.conservative.overestimate.samples_4.triangles.normal.0_75
+dEQP-VK.rasterization.conservative.overestimate.samples_4.triangles.normal.1_00
+dEQP-VK.rasterization.conservative.overestimate.samples_4.triangles.normal.2_00
+dEQP-VK.rasterization.conservative.overestimate.samples_4.triangles.normal.4_00
+dEQP-VK.rasterization.conservative.overestimate.samples_4.triangles.normal.min
+dEQP-VK.rasterization.conservative.overestimate.samples_4.triangles.normal.max
+dEQP-VK.rasterization.conservative.overestimate.samples_4.triangles.degenerate.0_00
+dEQP-VK.rasterization.conservative.overestimate.samples_4.triangles.degenerate.0_25
+dEQP-VK.rasterization.conservative.overestimate.samples_4.triangles.degenerate.min
+dEQP-VK.rasterization.conservative.overestimate.samples_4.triangles.degenerate.max
+dEQP-VK.rasterization.conservative.overestimate.samples_4.lines.normal.0_00
+dEQP-VK.rasterization.conservative.overestimate.samples_4.lines.normal.0_25
+dEQP-VK.rasterization.conservative.overestimate.samples_4.lines.normal.0_50
+dEQP-VK.rasterization.conservative.overestimate.samples_4.lines.normal.0_75
+dEQP-VK.rasterization.conservative.overestimate.samples_4.lines.normal.1_00
+dEQP-VK.rasterization.conservative.overestimate.samples_4.lines.normal.2_00
+dEQP-VK.rasterization.conservative.overestimate.samples_4.lines.normal.4_00
+dEQP-VK.rasterization.conservative.overestimate.samples_4.lines.normal.min
+dEQP-VK.rasterization.conservative.overestimate.samples_4.lines.normal.max
+dEQP-VK.rasterization.conservative.overestimate.samples_4.lines.degenerate.0_00
+dEQP-VK.rasterization.conservative.overestimate.samples_4.lines.degenerate.0_25
+dEQP-VK.rasterization.conservative.overestimate.samples_4.lines.degenerate.min
+dEQP-VK.rasterization.conservative.overestimate.samples_4.lines.degenerate.max
+dEQP-VK.rasterization.conservative.overestimate.samples_4.points.normal.0_00
+dEQP-VK.rasterization.conservative.overestimate.samples_4.points.normal.0_25
+dEQP-VK.rasterization.conservative.overestimate.samples_4.points.normal.0_50
+dEQP-VK.rasterization.conservative.overestimate.samples_4.points.normal.0_75
+dEQP-VK.rasterization.conservative.overestimate.samples_4.points.normal.1_00
+dEQP-VK.rasterization.conservative.overestimate.samples_4.points.normal.2_00
+dEQP-VK.rasterization.conservative.overestimate.samples_4.points.normal.4_00
+dEQP-VK.rasterization.conservative.overestimate.samples_4.points.normal.min
+dEQP-VK.rasterization.conservative.overestimate.samples_4.points.normal.max
+dEQP-VK.rasterization.conservative.overestimate.samples_8.triangles.normal.0_00
+dEQP-VK.rasterization.conservative.overestimate.samples_8.triangles.normal.0_25
+dEQP-VK.rasterization.conservative.overestimate.samples_8.triangles.normal.0_50
+dEQP-VK.rasterization.conservative.overestimate.samples_8.triangles.normal.0_75
+dEQP-VK.rasterization.conservative.overestimate.samples_8.triangles.normal.1_00
+dEQP-VK.rasterization.conservative.overestimate.samples_8.triangles.normal.2_00
+dEQP-VK.rasterization.conservative.overestimate.samples_8.triangles.normal.4_00
+dEQP-VK.rasterization.conservative.overestimate.samples_8.triangles.normal.min
+dEQP-VK.rasterization.conservative.overestimate.samples_8.triangles.normal.max
+dEQP-VK.rasterization.conservative.overestimate.samples_8.triangles.degenerate.0_00
+dEQP-VK.rasterization.conservative.overestimate.samples_8.triangles.degenerate.0_25
+dEQP-VK.rasterization.conservative.overestimate.samples_8.triangles.degenerate.min
+dEQP-VK.rasterization.conservative.overestimate.samples_8.triangles.degenerate.max
+dEQP-VK.rasterization.conservative.overestimate.samples_8.lines.normal.0_00
+dEQP-VK.rasterization.conservative.overestimate.samples_8.lines.normal.0_25
+dEQP-VK.rasterization.conservative.overestimate.samples_8.lines.normal.0_50
+dEQP-VK.rasterization.conservative.overestimate.samples_8.lines.normal.0_75
+dEQP-VK.rasterization.conservative.overestimate.samples_8.lines.normal.1_00
+dEQP-VK.rasterization.conservative.overestimate.samples_8.lines.normal.2_00
+dEQP-VK.rasterization.conservative.overestimate.samples_8.lines.normal.4_00
+dEQP-VK.rasterization.conservative.overestimate.samples_8.lines.normal.min
+dEQP-VK.rasterization.conservative.overestimate.samples_8.lines.normal.max
+dEQP-VK.rasterization.conservative.overestimate.samples_8.lines.degenerate.0_00
+dEQP-VK.rasterization.conservative.overestimate.samples_8.lines.degenerate.0_25
+dEQP-VK.rasterization.conservative.overestimate.samples_8.lines.degenerate.min
+dEQP-VK.rasterization.conservative.overestimate.samples_8.lines.degenerate.max
+dEQP-VK.rasterization.conservative.overestimate.samples_8.points.normal.0_00
+dEQP-VK.rasterization.conservative.overestimate.samples_8.points.normal.0_25
+dEQP-VK.rasterization.conservative.overestimate.samples_8.points.normal.0_50
+dEQP-VK.rasterization.conservative.overestimate.samples_8.points.normal.0_75
+dEQP-VK.rasterization.conservative.overestimate.samples_8.points.normal.1_00
+dEQP-VK.rasterization.conservative.overestimate.samples_8.points.normal.2_00
+dEQP-VK.rasterization.conservative.overestimate.samples_8.points.normal.4_00
+dEQP-VK.rasterization.conservative.overestimate.samples_8.points.normal.min
+dEQP-VK.rasterization.conservative.overestimate.samples_8.points.normal.max
+dEQP-VK.rasterization.conservative.overestimate.samples_16.triangles.normal.0_00
+dEQP-VK.rasterization.conservative.overestimate.samples_16.triangles.normal.0_25
+dEQP-VK.rasterization.conservative.overestimate.samples_16.triangles.normal.0_50
+dEQP-VK.rasterization.conservative.overestimate.samples_16.triangles.normal.0_75
+dEQP-VK.rasterization.conservative.overestimate.samples_16.triangles.normal.1_00
+dEQP-VK.rasterization.conservative.overestimate.samples_16.triangles.normal.2_00
+dEQP-VK.rasterization.conservative.overestimate.samples_16.triangles.normal.4_00
+dEQP-VK.rasterization.conservative.overestimate.samples_16.triangles.normal.min
+dEQP-VK.rasterization.conservative.overestimate.samples_16.triangles.normal.max
+dEQP-VK.rasterization.conservative.overestimate.samples_16.triangles.degenerate.0_00
+dEQP-VK.rasterization.conservative.overestimate.samples_16.triangles.degenerate.0_25
+dEQP-VK.rasterization.conservative.overestimate.samples_16.triangles.degenerate.min
+dEQP-VK.rasterization.conservative.overestimate.samples_16.triangles.degenerate.max
+dEQP-VK.rasterization.conservative.overestimate.samples_16.lines.normal.0_00
+dEQP-VK.rasterization.conservative.overestimate.samples_16.lines.normal.0_25
+dEQP-VK.rasterization.conservative.overestimate.samples_16.lines.normal.0_50
+dEQP-VK.rasterization.conservative.overestimate.samples_16.lines.normal.0_75
+dEQP-VK.rasterization.conservative.overestimate.samples_16.lines.normal.1_00
+dEQP-VK.rasterization.conservative.overestimate.samples_16.lines.normal.2_00
+dEQP-VK.rasterization.conservative.overestimate.samples_16.lines.normal.4_00
+dEQP-VK.rasterization.conservative.overestimate.samples_16.lines.normal.min
+dEQP-VK.rasterization.conservative.overestimate.samples_16.lines.normal.max
+dEQP-VK.rasterization.conservative.overestimate.samples_16.lines.degenerate.0_00
+dEQP-VK.rasterization.conservative.overestimate.samples_16.lines.degenerate.0_25
+dEQP-VK.rasterization.conservative.overestimate.samples_16.lines.degenerate.min
+dEQP-VK.rasterization.conservative.overestimate.samples_16.lines.degenerate.max
+dEQP-VK.rasterization.conservative.overestimate.samples_16.points.normal.0_00
+dEQP-VK.rasterization.conservative.overestimate.samples_16.points.normal.0_25
+dEQP-VK.rasterization.conservative.overestimate.samples_16.points.normal.0_50
+dEQP-VK.rasterization.conservative.overestimate.samples_16.points.normal.0_75
+dEQP-VK.rasterization.conservative.overestimate.samples_16.points.normal.1_00
+dEQP-VK.rasterization.conservative.overestimate.samples_16.points.normal.2_00
+dEQP-VK.rasterization.conservative.overestimate.samples_16.points.normal.4_00
+dEQP-VK.rasterization.conservative.overestimate.samples_16.points.normal.min
+dEQP-VK.rasterization.conservative.overestimate.samples_16.points.normal.max
+dEQP-VK.rasterization.conservative.overestimate.samples_32.triangles.normal.0_00
+dEQP-VK.rasterization.conservative.overestimate.samples_32.triangles.normal.0_25
+dEQP-VK.rasterization.conservative.overestimate.samples_32.triangles.normal.0_50
+dEQP-VK.rasterization.conservative.overestimate.samples_32.triangles.normal.0_75
+dEQP-VK.rasterization.conservative.overestimate.samples_32.triangles.normal.1_00
+dEQP-VK.rasterization.conservative.overestimate.samples_32.triangles.normal.2_00
+dEQP-VK.rasterization.conservative.overestimate.samples_32.triangles.normal.4_00
+dEQP-VK.rasterization.conservative.overestimate.samples_32.triangles.normal.min
+dEQP-VK.rasterization.conservative.overestimate.samples_32.triangles.normal.max
+dEQP-VK.rasterization.conservative.overestimate.samples_32.triangles.degenerate.0_00
+dEQP-VK.rasterization.conservative.overestimate.samples_32.triangles.degenerate.0_25
+dEQP-VK.rasterization.conservative.overestimate.samples_32.triangles.degenerate.min
+dEQP-VK.rasterization.conservative.overestimate.samples_32.triangles.degenerate.max
+dEQP-VK.rasterization.conservative.overestimate.samples_32.lines.normal.0_00
+dEQP-VK.rasterization.conservative.overestimate.samples_32.lines.normal.0_25
+dEQP-VK.rasterization.conservative.overestimate.samples_32.lines.normal.0_50
+dEQP-VK.rasterization.conservative.overestimate.samples_32.lines.normal.0_75
+dEQP-VK.rasterization.conservative.overestimate.samples_32.lines.normal.1_00
+dEQP-VK.rasterization.conservative.overestimate.samples_32.lines.normal.2_00
+dEQP-VK.rasterization.conservative.overestimate.samples_32.lines.normal.4_00
+dEQP-VK.rasterization.conservative.overestimate.samples_32.lines.normal.min
+dEQP-VK.rasterization.conservative.overestimate.samples_32.lines.normal.max
+dEQP-VK.rasterization.conservative.overestimate.samples_32.lines.degenerate.0_00
+dEQP-VK.rasterization.conservative.overestimate.samples_32.lines.degenerate.0_25
+dEQP-VK.rasterization.conservative.overestimate.samples_32.lines.degenerate.min
+dEQP-VK.rasterization.conservative.overestimate.samples_32.lines.degenerate.max
+dEQP-VK.rasterization.conservative.overestimate.samples_32.points.normal.0_00
+dEQP-VK.rasterization.conservative.overestimate.samples_32.points.normal.0_25
+dEQP-VK.rasterization.conservative.overestimate.samples_32.points.normal.0_50
+dEQP-VK.rasterization.conservative.overestimate.samples_32.points.normal.0_75
+dEQP-VK.rasterization.conservative.overestimate.samples_32.points.normal.1_00
+dEQP-VK.rasterization.conservative.overestimate.samples_32.points.normal.2_00
+dEQP-VK.rasterization.conservative.overestimate.samples_32.points.normal.4_00
+dEQP-VK.rasterization.conservative.overestimate.samples_32.points.normal.min
+dEQP-VK.rasterization.conservative.overestimate.samples_32.points.normal.max
+dEQP-VK.rasterization.conservative.overestimate.samples_64.triangles.normal.0_00
+dEQP-VK.rasterization.conservative.overestimate.samples_64.triangles.normal.0_25
+dEQP-VK.rasterization.conservative.overestimate.samples_64.triangles.normal.0_50
+dEQP-VK.rasterization.conservative.overestimate.samples_64.triangles.normal.0_75
+dEQP-VK.rasterization.conservative.overestimate.samples_64.triangles.normal.1_00
+dEQP-VK.rasterization.conservative.overestimate.samples_64.triangles.normal.2_00
+dEQP-VK.rasterization.conservative.overestimate.samples_64.triangles.normal.4_00
+dEQP-VK.rasterization.conservative.overestimate.samples_64.triangles.normal.min
+dEQP-VK.rasterization.conservative.overestimate.samples_64.triangles.normal.max
+dEQP-VK.rasterization.conservative.overestimate.samples_64.triangles.degenerate.0_00
+dEQP-VK.rasterization.conservative.overestimate.samples_64.triangles.degenerate.0_25
+dEQP-VK.rasterization.conservative.overestimate.samples_64.triangles.degenerate.min
+dEQP-VK.rasterization.conservative.overestimate.samples_64.triangles.degenerate.max
+dEQP-VK.rasterization.conservative.overestimate.samples_64.lines.normal.0_00
+dEQP-VK.rasterization.conservative.overestimate.samples_64.lines.normal.0_25
+dEQP-VK.rasterization.conservative.overestimate.samples_64.lines.normal.0_50
+dEQP-VK.rasterization.conservative.overestimate.samples_64.lines.normal.0_75
+dEQP-VK.rasterization.conservative.overestimate.samples_64.lines.normal.1_00
+dEQP-VK.rasterization.conservative.overestimate.samples_64.lines.normal.2_00
+dEQP-VK.rasterization.conservative.overestimate.samples_64.lines.normal.4_00
+dEQP-VK.rasterization.conservative.overestimate.samples_64.lines.normal.min
+dEQP-VK.rasterization.conservative.overestimate.samples_64.lines.normal.max
+dEQP-VK.rasterization.conservative.overestimate.samples_64.lines.degenerate.0_00
+dEQP-VK.rasterization.conservative.overestimate.samples_64.lines.degenerate.0_25
+dEQP-VK.rasterization.conservative.overestimate.samples_64.lines.degenerate.min
+dEQP-VK.rasterization.conservative.overestimate.samples_64.lines.degenerate.max
+dEQP-VK.rasterization.conservative.overestimate.samples_64.points.normal.0_00
+dEQP-VK.rasterization.conservative.overestimate.samples_64.points.normal.0_25
+dEQP-VK.rasterization.conservative.overestimate.samples_64.points.normal.0_50
+dEQP-VK.rasterization.conservative.overestimate.samples_64.points.normal.0_75
+dEQP-VK.rasterization.conservative.overestimate.samples_64.points.normal.1_00
+dEQP-VK.rasterization.conservative.overestimate.samples_64.points.normal.2_00
+dEQP-VK.rasterization.conservative.overestimate.samples_64.points.normal.4_00
+dEQP-VK.rasterization.conservative.overestimate.samples_64.points.normal.min
+dEQP-VK.rasterization.conservative.overestimate.samples_64.points.normal.max
+dEQP-VK.rasterization.conservative.underestimate.samples_1.triangles.normal.test
+dEQP-VK.rasterization.conservative.underestimate.samples_1.triangles.degenerate.test
+dEQP-VK.rasterization.conservative.underestimate.samples_1.lines.normal.0_50
+dEQP-VK.rasterization.conservative.underestimate.samples_1.lines.normal.1_00
+dEQP-VK.rasterization.conservative.underestimate.samples_1.lines.normal.1_50
+dEQP-VK.rasterization.conservative.underestimate.samples_1.lines.degenerate.0_50
+dEQP-VK.rasterization.conservative.underestimate.samples_1.lines.degenerate.1_00
+dEQP-VK.rasterization.conservative.underestimate.samples_1.lines.degenerate.1_50
+dEQP-VK.rasterization.conservative.underestimate.samples_1.points.normal.1_00
+dEQP-VK.rasterization.conservative.underestimate.samples_1.points.normal.1_50
+dEQP-VK.rasterization.conservative.underestimate.samples_1.points.normal.2_00
+dEQP-VK.rasterization.conservative.underestimate.samples_1.points.normal.3_00
+dEQP-VK.rasterization.conservative.underestimate.samples_1.points.normal.4_00
+dEQP-VK.rasterization.conservative.underestimate.samples_1.points.normal.8_00
+dEQP-VK.rasterization.conservative.underestimate.samples_2.triangles.normal.test
+dEQP-VK.rasterization.conservative.underestimate.samples_2.triangles.degenerate.test
+dEQP-VK.rasterization.conservative.underestimate.samples_2.lines.normal.0_50
+dEQP-VK.rasterization.conservative.underestimate.samples_2.lines.normal.1_00
+dEQP-VK.rasterization.conservative.underestimate.samples_2.lines.normal.1_50
+dEQP-VK.rasterization.conservative.underestimate.samples_2.lines.degenerate.0_50
+dEQP-VK.rasterization.conservative.underestimate.samples_2.lines.degenerate.1_00
+dEQP-VK.rasterization.conservative.underestimate.samples_2.lines.degenerate.1_50
+dEQP-VK.rasterization.conservative.underestimate.samples_2.points.normal.1_00
+dEQP-VK.rasterization.conservative.underestimate.samples_2.points.normal.1_50
+dEQP-VK.rasterization.conservative.underestimate.samples_2.points.normal.2_00
+dEQP-VK.rasterization.conservative.underestimate.samples_2.points.normal.3_00
+dEQP-VK.rasterization.conservative.underestimate.samples_2.points.normal.4_00
+dEQP-VK.rasterization.conservative.underestimate.samples_2.points.normal.8_00
+dEQP-VK.rasterization.conservative.underestimate.samples_4.triangles.normal.test
+dEQP-VK.rasterization.conservative.underestimate.samples_4.triangles.degenerate.test
+dEQP-VK.rasterization.conservative.underestimate.samples_4.lines.normal.0_50
+dEQP-VK.rasterization.conservative.underestimate.samples_4.lines.normal.1_00
+dEQP-VK.rasterization.conservative.underestimate.samples_4.lines.normal.1_50
+dEQP-VK.rasterization.conservative.underestimate.samples_4.lines.degenerate.0_50
+dEQP-VK.rasterization.conservative.underestimate.samples_4.lines.degenerate.1_00
+dEQP-VK.rasterization.conservative.underestimate.samples_4.lines.degenerate.1_50
+dEQP-VK.rasterization.conservative.underestimate.samples_4.points.normal.1_00
+dEQP-VK.rasterization.conservative.underestimate.samples_4.points.normal.1_50
+dEQP-VK.rasterization.conservative.underestimate.samples_4.points.normal.2_00
+dEQP-VK.rasterization.conservative.underestimate.samples_4.points.normal.3_00
+dEQP-VK.rasterization.conservative.underestimate.samples_4.points.normal.4_00
+dEQP-VK.rasterization.conservative.underestimate.samples_4.points.normal.8_00
+dEQP-VK.rasterization.conservative.underestimate.samples_8.triangles.normal.test
+dEQP-VK.rasterization.conservative.underestimate.samples_8.triangles.degenerate.test
+dEQP-VK.rasterization.conservative.underestimate.samples_8.lines.normal.0_50
+dEQP-VK.rasterization.conservative.underestimate.samples_8.lines.normal.1_00
+dEQP-VK.rasterization.conservative.underestimate.samples_8.lines.normal.1_50
+dEQP-VK.rasterization.conservative.underestimate.samples_8.lines.degenerate.0_50
+dEQP-VK.rasterization.conservative.underestimate.samples_8.lines.degenerate.1_00
+dEQP-VK.rasterization.conservative.underestimate.samples_8.lines.degenerate.1_50
+dEQP-VK.rasterization.conservative.underestimate.samples_8.points.normal.1_00
+dEQP-VK.rasterization.conservative.underestimate.samples_8.points.normal.1_50
+dEQP-VK.rasterization.conservative.underestimate.samples_8.points.normal.2_00
+dEQP-VK.rasterization.conservative.underestimate.samples_8.points.normal.3_00
+dEQP-VK.rasterization.conservative.underestimate.samples_8.points.normal.4_00
+dEQP-VK.rasterization.conservative.underestimate.samples_8.points.normal.8_00
+dEQP-VK.rasterization.conservative.underestimate.samples_16.triangles.normal.test
+dEQP-VK.rasterization.conservative.underestimate.samples_16.triangles.degenerate.test
+dEQP-VK.rasterization.conservative.underestimate.samples_16.lines.normal.0_50
+dEQP-VK.rasterization.conservative.underestimate.samples_16.lines.normal.1_00
+dEQP-VK.rasterization.conservative.underestimate.samples_16.lines.normal.1_50
+dEQP-VK.rasterization.conservative.underestimate.samples_16.lines.degenerate.0_50
+dEQP-VK.rasterization.conservative.underestimate.samples_16.lines.degenerate.1_00
+dEQP-VK.rasterization.conservative.underestimate.samples_16.lines.degenerate.1_50
+dEQP-VK.rasterization.conservative.underestimate.samples_16.points.normal.1_00
+dEQP-VK.rasterization.conservative.underestimate.samples_16.points.normal.1_50
+dEQP-VK.rasterization.conservative.underestimate.samples_16.points.normal.2_00
+dEQP-VK.rasterization.conservative.underestimate.samples_16.points.normal.3_00
+dEQP-VK.rasterization.conservative.underestimate.samples_16.points.normal.4_00
+dEQP-VK.rasterization.conservative.underestimate.samples_16.points.normal.8_00
+dEQP-VK.rasterization.conservative.underestimate.samples_32.triangles.normal.test
+dEQP-VK.rasterization.conservative.underestimate.samples_32.triangles.degenerate.test
+dEQP-VK.rasterization.conservative.underestimate.samples_32.lines.normal.0_50
+dEQP-VK.rasterization.conservative.underestimate.samples_32.lines.normal.1_00
+dEQP-VK.rasterization.conservative.underestimate.samples_32.lines.normal.1_50
+dEQP-VK.rasterization.conservative.underestimate.samples_32.lines.degenerate.0_50
+dEQP-VK.rasterization.conservative.underestimate.samples_32.lines.degenerate.1_00
+dEQP-VK.rasterization.conservative.underestimate.samples_32.lines.degenerate.1_50
+dEQP-VK.rasterization.conservative.underestimate.samples_32.points.normal.1_00
+dEQP-VK.rasterization.conservative.underestimate.samples_32.points.normal.1_50
+dEQP-VK.rasterization.conservative.underestimate.samples_32.points.normal.2_00
+dEQP-VK.rasterization.conservative.underestimate.samples_32.points.normal.3_00
+dEQP-VK.rasterization.conservative.underestimate.samples_32.points.normal.4_00
+dEQP-VK.rasterization.conservative.underestimate.samples_32.points.normal.8_00
+dEQP-VK.rasterization.conservative.underestimate.samples_64.triangles.normal.test
+dEQP-VK.rasterization.conservative.underestimate.samples_64.triangles.degenerate.test
+dEQP-VK.rasterization.conservative.underestimate.samples_64.lines.normal.0_50
+dEQP-VK.rasterization.conservative.underestimate.samples_64.lines.normal.1_00
+dEQP-VK.rasterization.conservative.underestimate.samples_64.lines.normal.1_50
+dEQP-VK.rasterization.conservative.underestimate.samples_64.lines.degenerate.0_50
+dEQP-VK.rasterization.conservative.underestimate.samples_64.lines.degenerate.1_00
+dEQP-VK.rasterization.conservative.underestimate.samples_64.lines.degenerate.1_50
+dEQP-VK.rasterization.conservative.underestimate.samples_64.points.normal.1_00
+dEQP-VK.rasterization.conservative.underestimate.samples_64.points.normal.1_50
+dEQP-VK.rasterization.conservative.underestimate.samples_64.points.normal.2_00
+dEQP-VK.rasterization.conservative.underestimate.samples_64.points.normal.3_00
+dEQP-VK.rasterization.conservative.underestimate.samples_64.points.normal.4_00
+dEQP-VK.rasterization.conservative.underestimate.samples_64.points.normal.8_00
 dEQP-VK.rasterization.interpolation.basic.strict_lines
 dEQP-VK.rasterization.interpolation.basic.strict_line_strip
 dEQP-VK.rasterization.interpolation.basic.strict_lines_wide
@@ -168541,8 +181238,11 @@
 dEQP-VK.rasterization.interpolation_multisample_64_bit.non_strict_lines_wide
 dEQP-VK.rasterization.line_continuity.line-strip
 dEQP-VK.rasterization.line_continuity.polygon-mode-lines
+dEQP-VK.rasterization.depth_bias.d16_unorm
+dEQP-VK.rasterization.depth_bias.d24_unorm
 dEQP-VK.rasterization.frag_side_effects.color_at_beginning.kill
 dEQP-VK.rasterization.frag_side_effects.color_at_beginning.demote
+dEQP-VK.rasterization.frag_side_effects.color_at_beginning.terminate_invocation
 dEQP-VK.rasterization.frag_side_effects.color_at_beginning.sample_mask_before
 dEQP-VK.rasterization.frag_side_effects.color_at_beginning.sample_mask_after
 dEQP-VK.rasterization.frag_side_effects.color_at_beginning.stencil_never
@@ -168552,6 +181252,7 @@
 dEQP-VK.rasterization.frag_side_effects.color_at_beginning.depth_bounds
 dEQP-VK.rasterization.frag_side_effects.color_at_end.kill
 dEQP-VK.rasterization.frag_side_effects.color_at_end.demote
+dEQP-VK.rasterization.frag_side_effects.color_at_end.terminate_invocation
 dEQP-VK.rasterization.frag_side_effects.color_at_end.sample_mask_before
 dEQP-VK.rasterization.frag_side_effects.color_at_end.sample_mask_after
 dEQP-VK.rasterization.frag_side_effects.color_at_end.stencil_never
@@ -228667,10 +241368,6183 @@
 dEQP-VK.subgroups.size_control.framebuffer.geometry_required_subgroup_size_min
 dEQP-VK.subgroups.size_control.framebuffer.fragment_required_subgroup_size_max
 dEQP-VK.subgroups.size_control.framebuffer.fragment_required_subgroup_size_min
+dEQP-VK.ycbcr.format.g8_b8r8_2plane_444_unorm_ext.vertex_optimal
+dEQP-VK.ycbcr.format.g8_b8r8_2plane_444_unorm_ext.vertex_optimal_disjoint
+dEQP-VK.ycbcr.format.g8_b8r8_2plane_444_unorm_ext.vertex_optimal_array
+dEQP-VK.ycbcr.format.g8_b8r8_2plane_444_unorm_ext.vertex_optimal_array_disjoint
+dEQP-VK.ycbcr.format.g8_b8r8_2plane_444_unorm_ext.vertex_linear
+dEQP-VK.ycbcr.format.g8_b8r8_2plane_444_unorm_ext.vertex_linear_disjoint
+dEQP-VK.ycbcr.format.g8_b8r8_2plane_444_unorm_ext.vertex_linear_mapped
+dEQP-VK.ycbcr.format.g8_b8r8_2plane_444_unorm_ext.vertex_linear_disjoint_mapped
+dEQP-VK.ycbcr.format.g8_b8r8_2plane_444_unorm_ext.vertex_linear_array
+dEQP-VK.ycbcr.format.g8_b8r8_2plane_444_unorm_ext.vertex_linear_array_disjoint
+dEQP-VK.ycbcr.format.g8_b8r8_2plane_444_unorm_ext.vertex_linear_array_mapped
+dEQP-VK.ycbcr.format.g8_b8r8_2plane_444_unorm_ext.vertex_linear_array_disjoint_mapped
+dEQP-VK.ycbcr.format.g8_b8r8_2plane_444_unorm_ext.fragment_optimal
+dEQP-VK.ycbcr.format.g8_b8r8_2plane_444_unorm_ext.fragment_optimal_disjoint
+dEQP-VK.ycbcr.format.g8_b8r8_2plane_444_unorm_ext.fragment_optimal_array
+dEQP-VK.ycbcr.format.g8_b8r8_2plane_444_unorm_ext.fragment_optimal_array_disjoint
+dEQP-VK.ycbcr.format.g8_b8r8_2plane_444_unorm_ext.fragment_linear
+dEQP-VK.ycbcr.format.g8_b8r8_2plane_444_unorm_ext.fragment_linear_disjoint
+dEQP-VK.ycbcr.format.g8_b8r8_2plane_444_unorm_ext.fragment_linear_mapped
+dEQP-VK.ycbcr.format.g8_b8r8_2plane_444_unorm_ext.fragment_linear_disjoint_mapped
+dEQP-VK.ycbcr.format.g8_b8r8_2plane_444_unorm_ext.fragment_linear_array
+dEQP-VK.ycbcr.format.g8_b8r8_2plane_444_unorm_ext.fragment_linear_array_disjoint
+dEQP-VK.ycbcr.format.g8_b8r8_2plane_444_unorm_ext.fragment_linear_array_mapped
+dEQP-VK.ycbcr.format.g8_b8r8_2plane_444_unorm_ext.fragment_linear_array_disjoint_mapped
+dEQP-VK.ycbcr.format.g8_b8r8_2plane_444_unorm_ext.geometry_optimal
+dEQP-VK.ycbcr.format.g8_b8r8_2plane_444_unorm_ext.geometry_optimal_disjoint
+dEQP-VK.ycbcr.format.g8_b8r8_2plane_444_unorm_ext.geometry_optimal_array
+dEQP-VK.ycbcr.format.g8_b8r8_2plane_444_unorm_ext.geometry_optimal_array_disjoint
+dEQP-VK.ycbcr.format.g8_b8r8_2plane_444_unorm_ext.geometry_linear
+dEQP-VK.ycbcr.format.g8_b8r8_2plane_444_unorm_ext.geometry_linear_disjoint
+dEQP-VK.ycbcr.format.g8_b8r8_2plane_444_unorm_ext.geometry_linear_mapped
+dEQP-VK.ycbcr.format.g8_b8r8_2plane_444_unorm_ext.geometry_linear_disjoint_mapped
+dEQP-VK.ycbcr.format.g8_b8r8_2plane_444_unorm_ext.geometry_linear_array
+dEQP-VK.ycbcr.format.g8_b8r8_2plane_444_unorm_ext.geometry_linear_array_disjoint
+dEQP-VK.ycbcr.format.g8_b8r8_2plane_444_unorm_ext.geometry_linear_array_mapped
+dEQP-VK.ycbcr.format.g8_b8r8_2plane_444_unorm_ext.geometry_linear_array_disjoint_mapped
+dEQP-VK.ycbcr.format.g8_b8r8_2plane_444_unorm_ext.tess_control_optimal
+dEQP-VK.ycbcr.format.g8_b8r8_2plane_444_unorm_ext.tess_control_optimal_disjoint
+dEQP-VK.ycbcr.format.g8_b8r8_2plane_444_unorm_ext.tess_control_optimal_array
+dEQP-VK.ycbcr.format.g8_b8r8_2plane_444_unorm_ext.tess_control_optimal_array_disjoint
+dEQP-VK.ycbcr.format.g8_b8r8_2plane_444_unorm_ext.tess_control_linear
+dEQP-VK.ycbcr.format.g8_b8r8_2plane_444_unorm_ext.tess_control_linear_disjoint
+dEQP-VK.ycbcr.format.g8_b8r8_2plane_444_unorm_ext.tess_control_linear_mapped
+dEQP-VK.ycbcr.format.g8_b8r8_2plane_444_unorm_ext.tess_control_linear_disjoint_mapped
+dEQP-VK.ycbcr.format.g8_b8r8_2plane_444_unorm_ext.tess_control_linear_array
+dEQP-VK.ycbcr.format.g8_b8r8_2plane_444_unorm_ext.tess_control_linear_array_disjoint
+dEQP-VK.ycbcr.format.g8_b8r8_2plane_444_unorm_ext.tess_control_linear_array_mapped
+dEQP-VK.ycbcr.format.g8_b8r8_2plane_444_unorm_ext.tess_control_linear_array_disjoint_mapped
+dEQP-VK.ycbcr.format.g8_b8r8_2plane_444_unorm_ext.tess_eval_optimal
+dEQP-VK.ycbcr.format.g8_b8r8_2plane_444_unorm_ext.tess_eval_optimal_disjoint
+dEQP-VK.ycbcr.format.g8_b8r8_2plane_444_unorm_ext.tess_eval_optimal_array
+dEQP-VK.ycbcr.format.g8_b8r8_2plane_444_unorm_ext.tess_eval_optimal_array_disjoint
+dEQP-VK.ycbcr.format.g8_b8r8_2plane_444_unorm_ext.tess_eval_linear
+dEQP-VK.ycbcr.format.g8_b8r8_2plane_444_unorm_ext.tess_eval_linear_disjoint
+dEQP-VK.ycbcr.format.g8_b8r8_2plane_444_unorm_ext.tess_eval_linear_mapped
+dEQP-VK.ycbcr.format.g8_b8r8_2plane_444_unorm_ext.tess_eval_linear_disjoint_mapped
+dEQP-VK.ycbcr.format.g8_b8r8_2plane_444_unorm_ext.tess_eval_linear_array
+dEQP-VK.ycbcr.format.g8_b8r8_2plane_444_unorm_ext.tess_eval_linear_array_disjoint
+dEQP-VK.ycbcr.format.g8_b8r8_2plane_444_unorm_ext.tess_eval_linear_array_mapped
+dEQP-VK.ycbcr.format.g8_b8r8_2plane_444_unorm_ext.tess_eval_linear_array_disjoint_mapped
+dEQP-VK.ycbcr.format.g8_b8r8_2plane_444_unorm_ext.compute_optimal
+dEQP-VK.ycbcr.format.g8_b8r8_2plane_444_unorm_ext.compute_optimal_disjoint
+dEQP-VK.ycbcr.format.g8_b8r8_2plane_444_unorm_ext.compute_optimal_array
+dEQP-VK.ycbcr.format.g8_b8r8_2plane_444_unorm_ext.compute_optimal_array_disjoint
+dEQP-VK.ycbcr.format.g8_b8r8_2plane_444_unorm_ext.compute_linear
+dEQP-VK.ycbcr.format.g8_b8r8_2plane_444_unorm_ext.compute_linear_disjoint
+dEQP-VK.ycbcr.format.g8_b8r8_2plane_444_unorm_ext.compute_linear_mapped
+dEQP-VK.ycbcr.format.g8_b8r8_2plane_444_unorm_ext.compute_linear_disjoint_mapped
+dEQP-VK.ycbcr.format.g8_b8r8_2plane_444_unorm_ext.compute_linear_array
+dEQP-VK.ycbcr.format.g8_b8r8_2plane_444_unorm_ext.compute_linear_array_disjoint
+dEQP-VK.ycbcr.format.g8_b8r8_2plane_444_unorm_ext.compute_linear_array_mapped
+dEQP-VK.ycbcr.format.g8_b8r8_2plane_444_unorm_ext.compute_linear_array_disjoint_mapped
+dEQP-VK.ycbcr.format.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.vertex_optimal
+dEQP-VK.ycbcr.format.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.vertex_optimal_disjoint
+dEQP-VK.ycbcr.format.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.vertex_optimal_array
+dEQP-VK.ycbcr.format.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.vertex_optimal_array_disjoint
+dEQP-VK.ycbcr.format.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.vertex_linear
+dEQP-VK.ycbcr.format.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.vertex_linear_disjoint
+dEQP-VK.ycbcr.format.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.vertex_linear_mapped
+dEQP-VK.ycbcr.format.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.vertex_linear_disjoint_mapped
+dEQP-VK.ycbcr.format.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.vertex_linear_array
+dEQP-VK.ycbcr.format.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.vertex_linear_array_disjoint
+dEQP-VK.ycbcr.format.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.vertex_linear_array_mapped
+dEQP-VK.ycbcr.format.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.vertex_linear_array_disjoint_mapped
+dEQP-VK.ycbcr.format.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.fragment_optimal
+dEQP-VK.ycbcr.format.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.fragment_optimal_disjoint
+dEQP-VK.ycbcr.format.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.fragment_optimal_array
+dEQP-VK.ycbcr.format.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.fragment_optimal_array_disjoint
+dEQP-VK.ycbcr.format.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.fragment_linear
+dEQP-VK.ycbcr.format.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.fragment_linear_disjoint
+dEQP-VK.ycbcr.format.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.fragment_linear_mapped
+dEQP-VK.ycbcr.format.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.fragment_linear_disjoint_mapped
+dEQP-VK.ycbcr.format.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.fragment_linear_array
+dEQP-VK.ycbcr.format.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.fragment_linear_array_disjoint
+dEQP-VK.ycbcr.format.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.fragment_linear_array_mapped
+dEQP-VK.ycbcr.format.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.fragment_linear_array_disjoint_mapped
+dEQP-VK.ycbcr.format.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.geometry_optimal
+dEQP-VK.ycbcr.format.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.geometry_optimal_disjoint
+dEQP-VK.ycbcr.format.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.geometry_optimal_array
+dEQP-VK.ycbcr.format.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.geometry_optimal_array_disjoint
+dEQP-VK.ycbcr.format.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.geometry_linear
+dEQP-VK.ycbcr.format.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.geometry_linear_disjoint
+dEQP-VK.ycbcr.format.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.geometry_linear_mapped
+dEQP-VK.ycbcr.format.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.geometry_linear_disjoint_mapped
+dEQP-VK.ycbcr.format.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.geometry_linear_array
+dEQP-VK.ycbcr.format.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.geometry_linear_array_disjoint
+dEQP-VK.ycbcr.format.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.geometry_linear_array_mapped
+dEQP-VK.ycbcr.format.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.geometry_linear_array_disjoint_mapped
+dEQP-VK.ycbcr.format.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.tess_control_optimal
+dEQP-VK.ycbcr.format.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.tess_control_optimal_disjoint
+dEQP-VK.ycbcr.format.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.tess_control_optimal_array
+dEQP-VK.ycbcr.format.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.tess_control_optimal_array_disjoint
+dEQP-VK.ycbcr.format.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.tess_control_linear
+dEQP-VK.ycbcr.format.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.tess_control_linear_disjoint
+dEQP-VK.ycbcr.format.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.tess_control_linear_mapped
+dEQP-VK.ycbcr.format.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.tess_control_linear_disjoint_mapped
+dEQP-VK.ycbcr.format.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.tess_control_linear_array
+dEQP-VK.ycbcr.format.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.tess_control_linear_array_disjoint
+dEQP-VK.ycbcr.format.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.tess_control_linear_array_mapped
+dEQP-VK.ycbcr.format.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.tess_control_linear_array_disjoint_mapped
+dEQP-VK.ycbcr.format.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.tess_eval_optimal
+dEQP-VK.ycbcr.format.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.tess_eval_optimal_disjoint
+dEQP-VK.ycbcr.format.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.tess_eval_optimal_array
+dEQP-VK.ycbcr.format.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.tess_eval_optimal_array_disjoint
+dEQP-VK.ycbcr.format.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.tess_eval_linear
+dEQP-VK.ycbcr.format.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.tess_eval_linear_disjoint
+dEQP-VK.ycbcr.format.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.tess_eval_linear_mapped
+dEQP-VK.ycbcr.format.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.tess_eval_linear_disjoint_mapped
+dEQP-VK.ycbcr.format.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.tess_eval_linear_array
+dEQP-VK.ycbcr.format.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.tess_eval_linear_array_disjoint
+dEQP-VK.ycbcr.format.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.tess_eval_linear_array_mapped
+dEQP-VK.ycbcr.format.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.tess_eval_linear_array_disjoint_mapped
+dEQP-VK.ycbcr.format.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.compute_optimal
+dEQP-VK.ycbcr.format.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.compute_optimal_disjoint
+dEQP-VK.ycbcr.format.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.compute_optimal_array
+dEQP-VK.ycbcr.format.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.compute_optimal_array_disjoint
+dEQP-VK.ycbcr.format.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.compute_linear
+dEQP-VK.ycbcr.format.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.compute_linear_disjoint
+dEQP-VK.ycbcr.format.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.compute_linear_mapped
+dEQP-VK.ycbcr.format.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.compute_linear_disjoint_mapped
+dEQP-VK.ycbcr.format.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.compute_linear_array
+dEQP-VK.ycbcr.format.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.compute_linear_array_disjoint
+dEQP-VK.ycbcr.format.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.compute_linear_array_mapped
+dEQP-VK.ycbcr.format.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.compute_linear_array_disjoint_mapped
+dEQP-VK.ycbcr.format.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.vertex_optimal
+dEQP-VK.ycbcr.format.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.vertex_optimal_disjoint
+dEQP-VK.ycbcr.format.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.vertex_optimal_array
+dEQP-VK.ycbcr.format.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.vertex_optimal_array_disjoint
+dEQP-VK.ycbcr.format.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.vertex_linear
+dEQP-VK.ycbcr.format.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.vertex_linear_disjoint
+dEQP-VK.ycbcr.format.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.vertex_linear_mapped
+dEQP-VK.ycbcr.format.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.vertex_linear_disjoint_mapped
+dEQP-VK.ycbcr.format.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.vertex_linear_array
+dEQP-VK.ycbcr.format.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.vertex_linear_array_disjoint
+dEQP-VK.ycbcr.format.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.vertex_linear_array_mapped
+dEQP-VK.ycbcr.format.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.vertex_linear_array_disjoint_mapped
+dEQP-VK.ycbcr.format.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.fragment_optimal
+dEQP-VK.ycbcr.format.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.fragment_optimal_disjoint
+dEQP-VK.ycbcr.format.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.fragment_optimal_array
+dEQP-VK.ycbcr.format.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.fragment_optimal_array_disjoint
+dEQP-VK.ycbcr.format.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.fragment_linear
+dEQP-VK.ycbcr.format.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.fragment_linear_disjoint
+dEQP-VK.ycbcr.format.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.fragment_linear_mapped
+dEQP-VK.ycbcr.format.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.fragment_linear_disjoint_mapped
+dEQP-VK.ycbcr.format.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.fragment_linear_array
+dEQP-VK.ycbcr.format.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.fragment_linear_array_disjoint
+dEQP-VK.ycbcr.format.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.fragment_linear_array_mapped
+dEQP-VK.ycbcr.format.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.fragment_linear_array_disjoint_mapped
+dEQP-VK.ycbcr.format.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.geometry_optimal
+dEQP-VK.ycbcr.format.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.geometry_optimal_disjoint
+dEQP-VK.ycbcr.format.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.geometry_optimal_array
+dEQP-VK.ycbcr.format.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.geometry_optimal_array_disjoint
+dEQP-VK.ycbcr.format.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.geometry_linear
+dEQP-VK.ycbcr.format.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.geometry_linear_disjoint
+dEQP-VK.ycbcr.format.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.geometry_linear_mapped
+dEQP-VK.ycbcr.format.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.geometry_linear_disjoint_mapped
+dEQP-VK.ycbcr.format.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.geometry_linear_array
+dEQP-VK.ycbcr.format.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.geometry_linear_array_disjoint
+dEQP-VK.ycbcr.format.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.geometry_linear_array_mapped
+dEQP-VK.ycbcr.format.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.geometry_linear_array_disjoint_mapped
+dEQP-VK.ycbcr.format.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.tess_control_optimal
+dEQP-VK.ycbcr.format.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.tess_control_optimal_disjoint
+dEQP-VK.ycbcr.format.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.tess_control_optimal_array
+dEQP-VK.ycbcr.format.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.tess_control_optimal_array_disjoint
+dEQP-VK.ycbcr.format.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.tess_control_linear
+dEQP-VK.ycbcr.format.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.tess_control_linear_disjoint
+dEQP-VK.ycbcr.format.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.tess_control_linear_mapped
+dEQP-VK.ycbcr.format.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.tess_control_linear_disjoint_mapped
+dEQP-VK.ycbcr.format.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.tess_control_linear_array
+dEQP-VK.ycbcr.format.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.tess_control_linear_array_disjoint
+dEQP-VK.ycbcr.format.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.tess_control_linear_array_mapped
+dEQP-VK.ycbcr.format.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.tess_control_linear_array_disjoint_mapped
+dEQP-VK.ycbcr.format.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.tess_eval_optimal
+dEQP-VK.ycbcr.format.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.tess_eval_optimal_disjoint
+dEQP-VK.ycbcr.format.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.tess_eval_optimal_array
+dEQP-VK.ycbcr.format.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.tess_eval_optimal_array_disjoint
+dEQP-VK.ycbcr.format.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.tess_eval_linear
+dEQP-VK.ycbcr.format.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.tess_eval_linear_disjoint
+dEQP-VK.ycbcr.format.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.tess_eval_linear_mapped
+dEQP-VK.ycbcr.format.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.tess_eval_linear_disjoint_mapped
+dEQP-VK.ycbcr.format.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.tess_eval_linear_array
+dEQP-VK.ycbcr.format.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.tess_eval_linear_array_disjoint
+dEQP-VK.ycbcr.format.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.tess_eval_linear_array_mapped
+dEQP-VK.ycbcr.format.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.tess_eval_linear_array_disjoint_mapped
+dEQP-VK.ycbcr.format.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.compute_optimal
+dEQP-VK.ycbcr.format.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.compute_optimal_disjoint
+dEQP-VK.ycbcr.format.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.compute_optimal_array
+dEQP-VK.ycbcr.format.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.compute_optimal_array_disjoint
+dEQP-VK.ycbcr.format.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.compute_linear
+dEQP-VK.ycbcr.format.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.compute_linear_disjoint
+dEQP-VK.ycbcr.format.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.compute_linear_mapped
+dEQP-VK.ycbcr.format.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.compute_linear_disjoint_mapped
+dEQP-VK.ycbcr.format.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.compute_linear_array
+dEQP-VK.ycbcr.format.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.compute_linear_array_disjoint
+dEQP-VK.ycbcr.format.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.compute_linear_array_mapped
+dEQP-VK.ycbcr.format.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.compute_linear_array_disjoint_mapped
+dEQP-VK.ycbcr.format.g16_b16r16_2plane_444_unorm_ext.vertex_optimal
+dEQP-VK.ycbcr.format.g16_b16r16_2plane_444_unorm_ext.vertex_optimal_disjoint
+dEQP-VK.ycbcr.format.g16_b16r16_2plane_444_unorm_ext.vertex_optimal_array
+dEQP-VK.ycbcr.format.g16_b16r16_2plane_444_unorm_ext.vertex_optimal_array_disjoint
+dEQP-VK.ycbcr.format.g16_b16r16_2plane_444_unorm_ext.vertex_linear
+dEQP-VK.ycbcr.format.g16_b16r16_2plane_444_unorm_ext.vertex_linear_disjoint
+dEQP-VK.ycbcr.format.g16_b16r16_2plane_444_unorm_ext.vertex_linear_mapped
+dEQP-VK.ycbcr.format.g16_b16r16_2plane_444_unorm_ext.vertex_linear_disjoint_mapped
+dEQP-VK.ycbcr.format.g16_b16r16_2plane_444_unorm_ext.vertex_linear_array
+dEQP-VK.ycbcr.format.g16_b16r16_2plane_444_unorm_ext.vertex_linear_array_disjoint
+dEQP-VK.ycbcr.format.g16_b16r16_2plane_444_unorm_ext.vertex_linear_array_mapped
+dEQP-VK.ycbcr.format.g16_b16r16_2plane_444_unorm_ext.vertex_linear_array_disjoint_mapped
+dEQP-VK.ycbcr.format.g16_b16r16_2plane_444_unorm_ext.fragment_optimal
+dEQP-VK.ycbcr.format.g16_b16r16_2plane_444_unorm_ext.fragment_optimal_disjoint
+dEQP-VK.ycbcr.format.g16_b16r16_2plane_444_unorm_ext.fragment_optimal_array
+dEQP-VK.ycbcr.format.g16_b16r16_2plane_444_unorm_ext.fragment_optimal_array_disjoint
+dEQP-VK.ycbcr.format.g16_b16r16_2plane_444_unorm_ext.fragment_linear
+dEQP-VK.ycbcr.format.g16_b16r16_2plane_444_unorm_ext.fragment_linear_disjoint
+dEQP-VK.ycbcr.format.g16_b16r16_2plane_444_unorm_ext.fragment_linear_mapped
+dEQP-VK.ycbcr.format.g16_b16r16_2plane_444_unorm_ext.fragment_linear_disjoint_mapped
+dEQP-VK.ycbcr.format.g16_b16r16_2plane_444_unorm_ext.fragment_linear_array
+dEQP-VK.ycbcr.format.g16_b16r16_2plane_444_unorm_ext.fragment_linear_array_disjoint
+dEQP-VK.ycbcr.format.g16_b16r16_2plane_444_unorm_ext.fragment_linear_array_mapped
+dEQP-VK.ycbcr.format.g16_b16r16_2plane_444_unorm_ext.fragment_linear_array_disjoint_mapped
+dEQP-VK.ycbcr.format.g16_b16r16_2plane_444_unorm_ext.geometry_optimal
+dEQP-VK.ycbcr.format.g16_b16r16_2plane_444_unorm_ext.geometry_optimal_disjoint
+dEQP-VK.ycbcr.format.g16_b16r16_2plane_444_unorm_ext.geometry_optimal_array
+dEQP-VK.ycbcr.format.g16_b16r16_2plane_444_unorm_ext.geometry_optimal_array_disjoint
+dEQP-VK.ycbcr.format.g16_b16r16_2plane_444_unorm_ext.geometry_linear
+dEQP-VK.ycbcr.format.g16_b16r16_2plane_444_unorm_ext.geometry_linear_disjoint
+dEQP-VK.ycbcr.format.g16_b16r16_2plane_444_unorm_ext.geometry_linear_mapped
+dEQP-VK.ycbcr.format.g16_b16r16_2plane_444_unorm_ext.geometry_linear_disjoint_mapped
+dEQP-VK.ycbcr.format.g16_b16r16_2plane_444_unorm_ext.geometry_linear_array
+dEQP-VK.ycbcr.format.g16_b16r16_2plane_444_unorm_ext.geometry_linear_array_disjoint
+dEQP-VK.ycbcr.format.g16_b16r16_2plane_444_unorm_ext.geometry_linear_array_mapped
+dEQP-VK.ycbcr.format.g16_b16r16_2plane_444_unorm_ext.geometry_linear_array_disjoint_mapped
+dEQP-VK.ycbcr.format.g16_b16r16_2plane_444_unorm_ext.tess_control_optimal
+dEQP-VK.ycbcr.format.g16_b16r16_2plane_444_unorm_ext.tess_control_optimal_disjoint
+dEQP-VK.ycbcr.format.g16_b16r16_2plane_444_unorm_ext.tess_control_optimal_array
+dEQP-VK.ycbcr.format.g16_b16r16_2plane_444_unorm_ext.tess_control_optimal_array_disjoint
+dEQP-VK.ycbcr.format.g16_b16r16_2plane_444_unorm_ext.tess_control_linear
+dEQP-VK.ycbcr.format.g16_b16r16_2plane_444_unorm_ext.tess_control_linear_disjoint
+dEQP-VK.ycbcr.format.g16_b16r16_2plane_444_unorm_ext.tess_control_linear_mapped
+dEQP-VK.ycbcr.format.g16_b16r16_2plane_444_unorm_ext.tess_control_linear_disjoint_mapped
+dEQP-VK.ycbcr.format.g16_b16r16_2plane_444_unorm_ext.tess_control_linear_array
+dEQP-VK.ycbcr.format.g16_b16r16_2plane_444_unorm_ext.tess_control_linear_array_disjoint
+dEQP-VK.ycbcr.format.g16_b16r16_2plane_444_unorm_ext.tess_control_linear_array_mapped
+dEQP-VK.ycbcr.format.g16_b16r16_2plane_444_unorm_ext.tess_control_linear_array_disjoint_mapped
+dEQP-VK.ycbcr.format.g16_b16r16_2plane_444_unorm_ext.tess_eval_optimal
+dEQP-VK.ycbcr.format.g16_b16r16_2plane_444_unorm_ext.tess_eval_optimal_disjoint
+dEQP-VK.ycbcr.format.g16_b16r16_2plane_444_unorm_ext.tess_eval_optimal_array
+dEQP-VK.ycbcr.format.g16_b16r16_2plane_444_unorm_ext.tess_eval_optimal_array_disjoint
+dEQP-VK.ycbcr.format.g16_b16r16_2plane_444_unorm_ext.tess_eval_linear
+dEQP-VK.ycbcr.format.g16_b16r16_2plane_444_unorm_ext.tess_eval_linear_disjoint
+dEQP-VK.ycbcr.format.g16_b16r16_2plane_444_unorm_ext.tess_eval_linear_mapped
+dEQP-VK.ycbcr.format.g16_b16r16_2plane_444_unorm_ext.tess_eval_linear_disjoint_mapped
+dEQP-VK.ycbcr.format.g16_b16r16_2plane_444_unorm_ext.tess_eval_linear_array
+dEQP-VK.ycbcr.format.g16_b16r16_2plane_444_unorm_ext.tess_eval_linear_array_disjoint
+dEQP-VK.ycbcr.format.g16_b16r16_2plane_444_unorm_ext.tess_eval_linear_array_mapped
+dEQP-VK.ycbcr.format.g16_b16r16_2plane_444_unorm_ext.tess_eval_linear_array_disjoint_mapped
+dEQP-VK.ycbcr.format.g16_b16r16_2plane_444_unorm_ext.compute_optimal
+dEQP-VK.ycbcr.format.g16_b16r16_2plane_444_unorm_ext.compute_optimal_disjoint
+dEQP-VK.ycbcr.format.g16_b16r16_2plane_444_unorm_ext.compute_optimal_array
+dEQP-VK.ycbcr.format.g16_b16r16_2plane_444_unorm_ext.compute_optimal_array_disjoint
+dEQP-VK.ycbcr.format.g16_b16r16_2plane_444_unorm_ext.compute_linear
+dEQP-VK.ycbcr.format.g16_b16r16_2plane_444_unorm_ext.compute_linear_disjoint
+dEQP-VK.ycbcr.format.g16_b16r16_2plane_444_unorm_ext.compute_linear_mapped
+dEQP-VK.ycbcr.format.g16_b16r16_2plane_444_unorm_ext.compute_linear_disjoint_mapped
+dEQP-VK.ycbcr.format.g16_b16r16_2plane_444_unorm_ext.compute_linear_array
+dEQP-VK.ycbcr.format.g16_b16r16_2plane_444_unorm_ext.compute_linear_array_disjoint
+dEQP-VK.ycbcr.format.g16_b16r16_2plane_444_unorm_ext.compute_linear_array_mapped
+dEQP-VK.ycbcr.format.g16_b16r16_2plane_444_unorm_ext.compute_linear_array_disjoint_mapped
 dEQP-VK.ycbcr.filtering.linear_sampler_g8_b8_r8_3plane_420_unorm
 dEQP-VK.ycbcr.filtering.linear_sampler_with_chroma_linear_filtering_g8_b8_r8_3plane_420_unorm
 dEQP-VK.ycbcr.filtering.linear_sampler_g8_b8r8_2plane_420_unorm
 dEQP-VK.ycbcr.filtering.linear_sampler_with_chroma_linear_filtering_g8_b8r8_2plane_420_unorm
+dEQP-VK.ycbcr.plane_view.image_view.g8_b8r8_2plane_444_unorm_ext_plane_0
+dEQP-VK.ycbcr.plane_view.image_view.g8_b8r8_2plane_444_unorm_ext_plane_1
+dEQP-VK.ycbcr.plane_view.image_view.g8_b8r8_2plane_444_unorm_ext_disjoint_plane_0
+dEQP-VK.ycbcr.plane_view.image_view.g8_b8r8_2plane_444_unorm_ext_disjoint_plane_1
+dEQP-VK.ycbcr.plane_view.image_view.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext_plane_0
+dEQP-VK.ycbcr.plane_view.image_view.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext_plane_1
+dEQP-VK.ycbcr.plane_view.image_view.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext_disjoint_plane_0
+dEQP-VK.ycbcr.plane_view.image_view.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext_disjoint_plane_1
+dEQP-VK.ycbcr.plane_view.image_view.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext_plane_0
+dEQP-VK.ycbcr.plane_view.image_view.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext_plane_1
+dEQP-VK.ycbcr.plane_view.image_view.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext_disjoint_plane_0
+dEQP-VK.ycbcr.plane_view.image_view.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext_disjoint_plane_1
+dEQP-VK.ycbcr.plane_view.memory_alias.g8_b8r8_2plane_444_unorm_ext_plane_0
+dEQP-VK.ycbcr.plane_view.memory_alias.g8_b8r8_2plane_444_unorm_ext_plane_1
+dEQP-VK.ycbcr.plane_view.memory_alias.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext_plane_0
+dEQP-VK.ycbcr.plane_view.memory_alias.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext_plane_1
+dEQP-VK.ycbcr.plane_view.memory_alias.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext_plane_0
+dEQP-VK.ycbcr.plane_view.memory_alias.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext_plane_1
+dEQP-VK.ycbcr.query.size_lod.vertex.g8_b8r8_2plane_444_unorm_ext
+dEQP-VK.ycbcr.query.size_lod.vertex.g8_b8r8_2plane_444_unorm_ext_disjoint
+dEQP-VK.ycbcr.query.size_lod.vertex.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext
+dEQP-VK.ycbcr.query.size_lod.vertex.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext_disjoint
+dEQP-VK.ycbcr.query.size_lod.vertex.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext
+dEQP-VK.ycbcr.query.size_lod.vertex.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext_disjoint
+dEQP-VK.ycbcr.query.size_lod.vertex.g16_b16r16_2plane_444_unorm_ext
+dEQP-VK.ycbcr.query.size_lod.vertex.g16_b16r16_2plane_444_unorm_ext_disjoint
+dEQP-VK.ycbcr.query.size_lod.fragment.g8_b8r8_2plane_444_unorm_ext
+dEQP-VK.ycbcr.query.size_lod.fragment.g8_b8r8_2plane_444_unorm_ext_disjoint
+dEQP-VK.ycbcr.query.size_lod.fragment.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext
+dEQP-VK.ycbcr.query.size_lod.fragment.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext_disjoint
+dEQP-VK.ycbcr.query.size_lod.fragment.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext
+dEQP-VK.ycbcr.query.size_lod.fragment.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext_disjoint
+dEQP-VK.ycbcr.query.size_lod.fragment.g16_b16r16_2plane_444_unorm_ext
+dEQP-VK.ycbcr.query.size_lod.fragment.g16_b16r16_2plane_444_unorm_ext_disjoint
+dEQP-VK.ycbcr.query.size_lod.geometry.g8_b8r8_2plane_444_unorm_ext
+dEQP-VK.ycbcr.query.size_lod.geometry.g8_b8r8_2plane_444_unorm_ext_disjoint
+dEQP-VK.ycbcr.query.size_lod.geometry.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext
+dEQP-VK.ycbcr.query.size_lod.geometry.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext_disjoint
+dEQP-VK.ycbcr.query.size_lod.geometry.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext
+dEQP-VK.ycbcr.query.size_lod.geometry.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext_disjoint
+dEQP-VK.ycbcr.query.size_lod.geometry.g16_b16r16_2plane_444_unorm_ext
+dEQP-VK.ycbcr.query.size_lod.geometry.g16_b16r16_2plane_444_unorm_ext_disjoint
+dEQP-VK.ycbcr.query.size_lod.tess_control.g8_b8r8_2plane_444_unorm_ext
+dEQP-VK.ycbcr.query.size_lod.tess_control.g8_b8r8_2plane_444_unorm_ext_disjoint
+dEQP-VK.ycbcr.query.size_lod.tess_control.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext
+dEQP-VK.ycbcr.query.size_lod.tess_control.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext_disjoint
+dEQP-VK.ycbcr.query.size_lod.tess_control.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext
+dEQP-VK.ycbcr.query.size_lod.tess_control.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext_disjoint
+dEQP-VK.ycbcr.query.size_lod.tess_control.g16_b16r16_2plane_444_unorm_ext
+dEQP-VK.ycbcr.query.size_lod.tess_control.g16_b16r16_2plane_444_unorm_ext_disjoint
+dEQP-VK.ycbcr.query.size_lod.tess_eval.g8_b8r8_2plane_444_unorm_ext
+dEQP-VK.ycbcr.query.size_lod.tess_eval.g8_b8r8_2plane_444_unorm_ext_disjoint
+dEQP-VK.ycbcr.query.size_lod.tess_eval.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext
+dEQP-VK.ycbcr.query.size_lod.tess_eval.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext_disjoint
+dEQP-VK.ycbcr.query.size_lod.tess_eval.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext
+dEQP-VK.ycbcr.query.size_lod.tess_eval.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext_disjoint
+dEQP-VK.ycbcr.query.size_lod.tess_eval.g16_b16r16_2plane_444_unorm_ext
+dEQP-VK.ycbcr.query.size_lod.tess_eval.g16_b16r16_2plane_444_unorm_ext_disjoint
+dEQP-VK.ycbcr.query.size_lod.compute.g8_b8r8_2plane_444_unorm_ext
+dEQP-VK.ycbcr.query.size_lod.compute.g8_b8r8_2plane_444_unorm_ext_disjoint
+dEQP-VK.ycbcr.query.size_lod.compute.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext
+dEQP-VK.ycbcr.query.size_lod.compute.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext_disjoint
+dEQP-VK.ycbcr.query.size_lod.compute.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext
+dEQP-VK.ycbcr.query.size_lod.compute.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext_disjoint
+dEQP-VK.ycbcr.query.size_lod.compute.g16_b16r16_2plane_444_unorm_ext
+dEQP-VK.ycbcr.query.size_lod.compute.g16_b16r16_2plane_444_unorm_ext_disjoint
+dEQP-VK.ycbcr.query.lod.fragment.g8_b8r8_2plane_444_unorm_ext
+dEQP-VK.ycbcr.query.lod.fragment.g8_b8r8_2plane_444_unorm_ext_disjoint
+dEQP-VK.ycbcr.query.lod.fragment.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext
+dEQP-VK.ycbcr.query.lod.fragment.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext_disjoint
+dEQP-VK.ycbcr.query.lod.fragment.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext
+dEQP-VK.ycbcr.query.lod.fragment.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext_disjoint
+dEQP-VK.ycbcr.query.lod.fragment.g16_b16r16_2plane_444_unorm_ext
+dEQP-VK.ycbcr.query.lod.fragment.g16_b16r16_2plane_444_unorm_ext_disjoint
+dEQP-VK.ycbcr.query.levels.vertex.g8_b8r8_2plane_444_unorm_ext
+dEQP-VK.ycbcr.query.levels.vertex.g8_b8r8_2plane_444_unorm_ext_disjoint
+dEQP-VK.ycbcr.query.levels.vertex.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext
+dEQP-VK.ycbcr.query.levels.vertex.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext_disjoint
+dEQP-VK.ycbcr.query.levels.vertex.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext
+dEQP-VK.ycbcr.query.levels.vertex.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext_disjoint
+dEQP-VK.ycbcr.query.levels.vertex.g16_b16r16_2plane_444_unorm_ext
+dEQP-VK.ycbcr.query.levels.vertex.g16_b16r16_2plane_444_unorm_ext_disjoint
+dEQP-VK.ycbcr.query.levels.fragment.g8_b8r8_2plane_444_unorm_ext
+dEQP-VK.ycbcr.query.levels.fragment.g8_b8r8_2plane_444_unorm_ext_disjoint
+dEQP-VK.ycbcr.query.levels.fragment.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext
+dEQP-VK.ycbcr.query.levels.fragment.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext_disjoint
+dEQP-VK.ycbcr.query.levels.fragment.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext
+dEQP-VK.ycbcr.query.levels.fragment.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext_disjoint
+dEQP-VK.ycbcr.query.levels.fragment.g16_b16r16_2plane_444_unorm_ext
+dEQP-VK.ycbcr.query.levels.fragment.g16_b16r16_2plane_444_unorm_ext_disjoint
+dEQP-VK.ycbcr.query.levels.geometry.g8_b8r8_2plane_444_unorm_ext
+dEQP-VK.ycbcr.query.levels.geometry.g8_b8r8_2plane_444_unorm_ext_disjoint
+dEQP-VK.ycbcr.query.levels.geometry.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext
+dEQP-VK.ycbcr.query.levels.geometry.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext_disjoint
+dEQP-VK.ycbcr.query.levels.geometry.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext
+dEQP-VK.ycbcr.query.levels.geometry.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext_disjoint
+dEQP-VK.ycbcr.query.levels.geometry.g16_b16r16_2plane_444_unorm_ext
+dEQP-VK.ycbcr.query.levels.geometry.g16_b16r16_2plane_444_unorm_ext_disjoint
+dEQP-VK.ycbcr.query.levels.tess_control.g8_b8r8_2plane_444_unorm_ext
+dEQP-VK.ycbcr.query.levels.tess_control.g8_b8r8_2plane_444_unorm_ext_disjoint
+dEQP-VK.ycbcr.query.levels.tess_control.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext
+dEQP-VK.ycbcr.query.levels.tess_control.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext_disjoint
+dEQP-VK.ycbcr.query.levels.tess_control.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext
+dEQP-VK.ycbcr.query.levels.tess_control.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext_disjoint
+dEQP-VK.ycbcr.query.levels.tess_control.g16_b16r16_2plane_444_unorm_ext
+dEQP-VK.ycbcr.query.levels.tess_control.g16_b16r16_2plane_444_unorm_ext_disjoint
+dEQP-VK.ycbcr.query.levels.tess_eval.g8_b8r8_2plane_444_unorm_ext
+dEQP-VK.ycbcr.query.levels.tess_eval.g8_b8r8_2plane_444_unorm_ext_disjoint
+dEQP-VK.ycbcr.query.levels.tess_eval.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext
+dEQP-VK.ycbcr.query.levels.tess_eval.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext_disjoint
+dEQP-VK.ycbcr.query.levels.tess_eval.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext
+dEQP-VK.ycbcr.query.levels.tess_eval.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext_disjoint
+dEQP-VK.ycbcr.query.levels.tess_eval.g16_b16r16_2plane_444_unorm_ext
+dEQP-VK.ycbcr.query.levels.tess_eval.g16_b16r16_2plane_444_unorm_ext_disjoint
+dEQP-VK.ycbcr.query.levels.compute.g8_b8r8_2plane_444_unorm_ext
+dEQP-VK.ycbcr.query.levels.compute.g8_b8r8_2plane_444_unorm_ext_disjoint
+dEQP-VK.ycbcr.query.levels.compute.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext
+dEQP-VK.ycbcr.query.levels.compute.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext_disjoint
+dEQP-VK.ycbcr.query.levels.compute.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext
+dEQP-VK.ycbcr.query.levels.compute.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext_disjoint
+dEQP-VK.ycbcr.query.levels.compute.g16_b16r16_2plane_444_unorm_ext
+dEQP-VK.ycbcr.query.levels.compute.g16_b16r16_2plane_444_unorm_ext_disjoint
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.rgb_identity.linear_tiling_linear
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.rgb_identity.linear_tiling_linear_binding_7
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.rgb_identity.linear_tiling_linear_binding_15
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.rgb_identity.linear_tiling_linear_binding_31
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.rgb_identity.linear_tiling_optimal
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.rgb_identity.linear_tiling_optimal_binding_7
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.rgb_identity.linear_tiling_optimal_binding_15
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.rgb_identity.linear_tiling_optimal_binding_31
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.rgb_identity.nearest_tiling_linear
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.rgb_identity.nearest_tiling_linear_binding_7
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.rgb_identity.nearest_tiling_linear_binding_15
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.rgb_identity.nearest_tiling_linear_binding_31
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.rgb_identity.nearest_tiling_optimal
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.rgb_identity.nearest_tiling_optimal_binding_7
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.rgb_identity.nearest_tiling_optimal_binding_15
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.rgb_identity.nearest_tiling_optimal_binding_31
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_identity.itu_full.linear_tiling_linear
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_identity.itu_full.linear_tiling_linear_binding_7
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_identity.itu_full.linear_tiling_linear_binding_15
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_identity.itu_full.linear_tiling_linear_binding_31
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_identity.itu_full.linear_tiling_optimal
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_identity.itu_full.linear_tiling_optimal_binding_7
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_identity.itu_full.linear_tiling_optimal_binding_15
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_identity.itu_full.linear_tiling_optimal_binding_31
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_identity.itu_full.nearest_tiling_linear
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_identity.itu_full.nearest_tiling_linear_binding_7
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_identity.itu_full.nearest_tiling_linear_binding_15
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_identity.itu_full.nearest_tiling_linear_binding_31
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_identity.itu_full.nearest_tiling_optimal
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_identity.itu_full.nearest_tiling_optimal_binding_7
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_identity.itu_full.nearest_tiling_optimal_binding_15
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_identity.itu_full.nearest_tiling_optimal_binding_31
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_identity.itu_narrow.linear_tiling_linear
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_identity.itu_narrow.linear_tiling_linear_binding_7
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_identity.itu_narrow.linear_tiling_linear_binding_15
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_identity.itu_narrow.linear_tiling_linear_binding_31
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_identity.itu_narrow.linear_tiling_optimal
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_identity.itu_narrow.linear_tiling_optimal_binding_7
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_identity.itu_narrow.linear_tiling_optimal_binding_15
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_identity.itu_narrow.linear_tiling_optimal_binding_31
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_identity.itu_narrow.nearest_tiling_linear
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_identity.itu_narrow.nearest_tiling_linear_binding_7
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_identity.itu_narrow.nearest_tiling_linear_binding_15
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_identity.itu_narrow.nearest_tiling_linear_binding_31
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_identity.itu_narrow.nearest_tiling_optimal
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_identity.itu_narrow.nearest_tiling_optimal_binding_7
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_identity.itu_narrow.nearest_tiling_optimal_binding_15
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_identity.itu_narrow.nearest_tiling_optimal_binding_31
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_709.itu_full.linear_tiling_linear
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_709.itu_full.linear_tiling_linear_binding_7
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_709.itu_full.linear_tiling_linear_binding_15
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_709.itu_full.linear_tiling_linear_binding_31
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_709.itu_full.linear_tiling_optimal
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_709.itu_full.linear_tiling_optimal_binding_7
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_709.itu_full.linear_tiling_optimal_binding_15
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_709.itu_full.linear_tiling_optimal_binding_31
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_709.itu_full.nearest_tiling_linear
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_709.itu_full.nearest_tiling_linear_binding_7
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_709.itu_full.nearest_tiling_linear_binding_15
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_709.itu_full.nearest_tiling_linear_binding_31
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_709.itu_full.nearest_tiling_optimal
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_709.itu_full.nearest_tiling_optimal_binding_7
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_709.itu_full.nearest_tiling_optimal_binding_15
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_709.itu_full.nearest_tiling_optimal_binding_31
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_709.itu_narrow.linear_tiling_linear
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_709.itu_narrow.linear_tiling_linear_binding_7
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_709.itu_narrow.linear_tiling_linear_binding_15
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_709.itu_narrow.linear_tiling_linear_binding_31
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_709.itu_narrow.linear_tiling_optimal
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_709.itu_narrow.linear_tiling_optimal_binding_7
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_709.itu_narrow.linear_tiling_optimal_binding_15
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_709.itu_narrow.linear_tiling_optimal_binding_31
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_709.itu_narrow.nearest_tiling_linear
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_709.itu_narrow.nearest_tiling_linear_binding_7
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_709.itu_narrow.nearest_tiling_linear_binding_15
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_709.itu_narrow.nearest_tiling_linear_binding_31
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_709.itu_narrow.nearest_tiling_optimal
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_709.itu_narrow.nearest_tiling_optimal_binding_7
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_709.itu_narrow.nearest_tiling_optimal_binding_15
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_709.itu_narrow.nearest_tiling_optimal_binding_31
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_601.itu_full.linear_tiling_linear
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_601.itu_full.linear_tiling_linear_binding_7
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_601.itu_full.linear_tiling_linear_binding_15
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_601.itu_full.linear_tiling_linear_binding_31
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_601.itu_full.linear_tiling_optimal
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_601.itu_full.linear_tiling_optimal_binding_7
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_601.itu_full.linear_tiling_optimal_binding_15
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_601.itu_full.linear_tiling_optimal_binding_31
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_601.itu_full.nearest_tiling_linear
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_601.itu_full.nearest_tiling_linear_binding_7
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_601.itu_full.nearest_tiling_linear_binding_15
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_601.itu_full.nearest_tiling_linear_binding_31
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_601.itu_full.nearest_tiling_optimal
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_601.itu_full.nearest_tiling_optimal_binding_7
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_601.itu_full.nearest_tiling_optimal_binding_15
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_601.itu_full.nearest_tiling_optimal_binding_31
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_601.itu_narrow.linear_tiling_linear
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_601.itu_narrow.linear_tiling_linear_binding_7
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_601.itu_narrow.linear_tiling_linear_binding_15
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_601.itu_narrow.linear_tiling_linear_binding_31
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_601.itu_narrow.linear_tiling_optimal
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_601.itu_narrow.linear_tiling_optimal_binding_7
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_601.itu_narrow.linear_tiling_optimal_binding_15
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_601.itu_narrow.linear_tiling_optimal_binding_31
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_601.itu_narrow.nearest_tiling_linear
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_601.itu_narrow.nearest_tiling_linear_binding_7
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_601.itu_narrow.nearest_tiling_linear_binding_15
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_601.itu_narrow.nearest_tiling_linear_binding_31
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_601.itu_narrow.nearest_tiling_optimal
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_601.itu_narrow.nearest_tiling_optimal_binding_7
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_601.itu_narrow.nearest_tiling_optimal_binding_15
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_601.itu_narrow.nearest_tiling_optimal_binding_31
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_2020.itu_full.linear_tiling_linear
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_2020.itu_full.linear_tiling_linear_binding_7
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_2020.itu_full.linear_tiling_linear_binding_15
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_2020.itu_full.linear_tiling_linear_binding_31
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_2020.itu_full.linear_tiling_optimal
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_2020.itu_full.linear_tiling_optimal_binding_7
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_2020.itu_full.linear_tiling_optimal_binding_15
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_2020.itu_full.linear_tiling_optimal_binding_31
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_2020.itu_full.nearest_tiling_linear
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_2020.itu_full.nearest_tiling_linear_binding_7
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_2020.itu_full.nearest_tiling_linear_binding_15
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_2020.itu_full.nearest_tiling_linear_binding_31
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_2020.itu_full.nearest_tiling_optimal
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_2020.itu_full.nearest_tiling_optimal_binding_7
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_2020.itu_full.nearest_tiling_optimal_binding_15
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_2020.itu_full.nearest_tiling_optimal_binding_31
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_2020.itu_narrow.linear_tiling_linear
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_2020.itu_narrow.linear_tiling_linear_binding_7
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_2020.itu_narrow.linear_tiling_linear_binding_15
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_2020.itu_narrow.linear_tiling_linear_binding_31
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_2020.itu_narrow.linear_tiling_optimal
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_2020.itu_narrow.linear_tiling_optimal_binding_7
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_2020.itu_narrow.linear_tiling_optimal_binding_15
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_2020.itu_narrow.linear_tiling_optimal_binding_31
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_2020.itu_narrow.nearest_tiling_linear
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_2020.itu_narrow.nearest_tiling_linear_binding_7
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_2020.itu_narrow.nearest_tiling_linear_binding_15
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_2020.itu_narrow.nearest_tiling_linear_binding_31
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_2020.itu_narrow.nearest_tiling_optimal
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_2020.itu_narrow.nearest_tiling_optimal_binding_7
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_2020.itu_narrow.nearest_tiling_optimal_binding_15
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.ycbcr_2020.itu_narrow.nearest_tiling_optimal_binding_31
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.sampler_array.linear_tiling_linear
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.sampler_array.linear_tiling_linear_binding_7
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.sampler_array.linear_tiling_linear_binding_15
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.sampler_array.linear_tiling_linear_binding_31
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.sampler_array.linear_tiling_optimal
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.sampler_array.linear_tiling_optimal_binding_7
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.sampler_array.linear_tiling_optimal_binding_15
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.sampler_array.linear_tiling_optimal_binding_31
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.sampler_array.nearest_tiling_linear
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.sampler_array.nearest_tiling_linear_binding_7
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.sampler_array.nearest_tiling_linear_binding_15
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.sampler_array.nearest_tiling_linear_binding_31
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.sampler_array.nearest_tiling_optimal
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.sampler_array.nearest_tiling_optimal_binding_7
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.sampler_array.nearest_tiling_optimal_binding_15
+dEQP-VK.ycbcr.conversion.g8_b8r8_2plane_444_unorm_ext.sampler_array.nearest_tiling_optimal_binding_31
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.rgb_identity.linear_tiling_linear
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.rgb_identity.linear_tiling_linear_binding_7
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.rgb_identity.linear_tiling_linear_binding_15
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.rgb_identity.linear_tiling_linear_binding_31
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.rgb_identity.linear_tiling_optimal
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.rgb_identity.linear_tiling_optimal_binding_7
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.rgb_identity.linear_tiling_optimal_binding_15
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.rgb_identity.linear_tiling_optimal_binding_31
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.rgb_identity.nearest_tiling_linear
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.rgb_identity.nearest_tiling_linear_binding_7
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.rgb_identity.nearest_tiling_linear_binding_15
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.rgb_identity.nearest_tiling_linear_binding_31
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.rgb_identity.nearest_tiling_optimal
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.rgb_identity.nearest_tiling_optimal_binding_7
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.rgb_identity.nearest_tiling_optimal_binding_15
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.rgb_identity.nearest_tiling_optimal_binding_31
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_identity.itu_full.linear_tiling_linear
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_identity.itu_full.linear_tiling_linear_binding_7
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_identity.itu_full.linear_tiling_linear_binding_15
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_identity.itu_full.linear_tiling_linear_binding_31
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_identity.itu_full.linear_tiling_optimal
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_identity.itu_full.linear_tiling_optimal_binding_7
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_identity.itu_full.linear_tiling_optimal_binding_15
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_identity.itu_full.linear_tiling_optimal_binding_31
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_identity.itu_full.nearest_tiling_linear
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_identity.itu_full.nearest_tiling_linear_binding_7
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_identity.itu_full.nearest_tiling_linear_binding_15
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_identity.itu_full.nearest_tiling_linear_binding_31
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_identity.itu_full.nearest_tiling_optimal
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_identity.itu_full.nearest_tiling_optimal_binding_7
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_identity.itu_full.nearest_tiling_optimal_binding_15
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_identity.itu_full.nearest_tiling_optimal_binding_31
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_identity.itu_narrow.linear_tiling_linear
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_identity.itu_narrow.linear_tiling_linear_binding_7
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_identity.itu_narrow.linear_tiling_linear_binding_15
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_identity.itu_narrow.linear_tiling_linear_binding_31
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_identity.itu_narrow.linear_tiling_optimal
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_identity.itu_narrow.linear_tiling_optimal_binding_7
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_identity.itu_narrow.linear_tiling_optimal_binding_15
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_identity.itu_narrow.linear_tiling_optimal_binding_31
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_identity.itu_narrow.nearest_tiling_linear
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_identity.itu_narrow.nearest_tiling_linear_binding_7
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_identity.itu_narrow.nearest_tiling_linear_binding_15
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_identity.itu_narrow.nearest_tiling_linear_binding_31
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_identity.itu_narrow.nearest_tiling_optimal
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_identity.itu_narrow.nearest_tiling_optimal_binding_7
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_identity.itu_narrow.nearest_tiling_optimal_binding_15
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_identity.itu_narrow.nearest_tiling_optimal_binding_31
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_709.itu_full.linear_tiling_linear
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_709.itu_full.linear_tiling_linear_binding_7
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_709.itu_full.linear_tiling_linear_binding_15
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_709.itu_full.linear_tiling_linear_binding_31
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_709.itu_full.linear_tiling_optimal
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_709.itu_full.linear_tiling_optimal_binding_7
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_709.itu_full.linear_tiling_optimal_binding_15
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_709.itu_full.linear_tiling_optimal_binding_31
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_709.itu_full.nearest_tiling_linear
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_709.itu_full.nearest_tiling_linear_binding_7
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_709.itu_full.nearest_tiling_linear_binding_15
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_709.itu_full.nearest_tiling_linear_binding_31
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_709.itu_full.nearest_tiling_optimal
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_709.itu_full.nearest_tiling_optimal_binding_7
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_709.itu_full.nearest_tiling_optimal_binding_15
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_709.itu_full.nearest_tiling_optimal_binding_31
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_709.itu_narrow.linear_tiling_linear
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_709.itu_narrow.linear_tiling_linear_binding_7
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_709.itu_narrow.linear_tiling_linear_binding_15
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_709.itu_narrow.linear_tiling_linear_binding_31
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_709.itu_narrow.linear_tiling_optimal
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_709.itu_narrow.linear_tiling_optimal_binding_7
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_709.itu_narrow.linear_tiling_optimal_binding_15
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_709.itu_narrow.linear_tiling_optimal_binding_31
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_709.itu_narrow.nearest_tiling_linear
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_709.itu_narrow.nearest_tiling_linear_binding_7
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_709.itu_narrow.nearest_tiling_linear_binding_15
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_709.itu_narrow.nearest_tiling_linear_binding_31
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_709.itu_narrow.nearest_tiling_optimal
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_709.itu_narrow.nearest_tiling_optimal_binding_7
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_709.itu_narrow.nearest_tiling_optimal_binding_15
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_709.itu_narrow.nearest_tiling_optimal_binding_31
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_601.itu_full.linear_tiling_linear
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_601.itu_full.linear_tiling_linear_binding_7
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_601.itu_full.linear_tiling_linear_binding_15
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_601.itu_full.linear_tiling_linear_binding_31
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_601.itu_full.linear_tiling_optimal
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_601.itu_full.linear_tiling_optimal_binding_7
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_601.itu_full.linear_tiling_optimal_binding_15
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_601.itu_full.linear_tiling_optimal_binding_31
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_601.itu_full.nearest_tiling_linear
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_601.itu_full.nearest_tiling_linear_binding_7
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_601.itu_full.nearest_tiling_linear_binding_15
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_601.itu_full.nearest_tiling_linear_binding_31
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_601.itu_full.nearest_tiling_optimal
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_601.itu_full.nearest_tiling_optimal_binding_7
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_601.itu_full.nearest_tiling_optimal_binding_15
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_601.itu_full.nearest_tiling_optimal_binding_31
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_601.itu_narrow.linear_tiling_linear
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_601.itu_narrow.linear_tiling_linear_binding_7
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_601.itu_narrow.linear_tiling_linear_binding_15
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_601.itu_narrow.linear_tiling_linear_binding_31
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_601.itu_narrow.linear_tiling_optimal
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_601.itu_narrow.linear_tiling_optimal_binding_7
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_601.itu_narrow.linear_tiling_optimal_binding_15
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_601.itu_narrow.linear_tiling_optimal_binding_31
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_601.itu_narrow.nearest_tiling_linear
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_601.itu_narrow.nearest_tiling_linear_binding_7
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_601.itu_narrow.nearest_tiling_linear_binding_15
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_601.itu_narrow.nearest_tiling_linear_binding_31
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_601.itu_narrow.nearest_tiling_optimal
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_601.itu_narrow.nearest_tiling_optimal_binding_7
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_601.itu_narrow.nearest_tiling_optimal_binding_15
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_601.itu_narrow.nearest_tiling_optimal_binding_31
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_2020.itu_full.linear_tiling_linear
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_2020.itu_full.linear_tiling_linear_binding_7
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_2020.itu_full.linear_tiling_linear_binding_15
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_2020.itu_full.linear_tiling_linear_binding_31
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_2020.itu_full.linear_tiling_optimal
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_2020.itu_full.linear_tiling_optimal_binding_7
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_2020.itu_full.linear_tiling_optimal_binding_15
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_2020.itu_full.linear_tiling_optimal_binding_31
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_2020.itu_full.nearest_tiling_linear
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_2020.itu_full.nearest_tiling_linear_binding_7
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_2020.itu_full.nearest_tiling_linear_binding_15
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_2020.itu_full.nearest_tiling_linear_binding_31
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_2020.itu_full.nearest_tiling_optimal
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_2020.itu_full.nearest_tiling_optimal_binding_7
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_2020.itu_full.nearest_tiling_optimal_binding_15
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_2020.itu_full.nearest_tiling_optimal_binding_31
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_2020.itu_narrow.linear_tiling_linear
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_2020.itu_narrow.linear_tiling_linear_binding_7
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_2020.itu_narrow.linear_tiling_linear_binding_15
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_2020.itu_narrow.linear_tiling_linear_binding_31
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_2020.itu_narrow.linear_tiling_optimal
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_2020.itu_narrow.linear_tiling_optimal_binding_7
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_2020.itu_narrow.linear_tiling_optimal_binding_15
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_2020.itu_narrow.linear_tiling_optimal_binding_31
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_2020.itu_narrow.nearest_tiling_linear
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_2020.itu_narrow.nearest_tiling_linear_binding_7
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_2020.itu_narrow.nearest_tiling_linear_binding_15
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_2020.itu_narrow.nearest_tiling_linear_binding_31
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_2020.itu_narrow.nearest_tiling_optimal
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_2020.itu_narrow.nearest_tiling_optimal_binding_7
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_2020.itu_narrow.nearest_tiling_optimal_binding_15
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.ycbcr_2020.itu_narrow.nearest_tiling_optimal_binding_31
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.sampler_array.linear_tiling_linear
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.sampler_array.linear_tiling_linear_binding_7
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.sampler_array.linear_tiling_linear_binding_15
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.sampler_array.linear_tiling_linear_binding_31
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.sampler_array.linear_tiling_optimal
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.sampler_array.linear_tiling_optimal_binding_7
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.sampler_array.linear_tiling_optimal_binding_15
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.sampler_array.linear_tiling_optimal_binding_31
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.sampler_array.nearest_tiling_linear
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.sampler_array.nearest_tiling_linear_binding_7
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.sampler_array.nearest_tiling_linear_binding_15
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.sampler_array.nearest_tiling_linear_binding_31
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.sampler_array.nearest_tiling_optimal
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.sampler_array.nearest_tiling_optimal_binding_7
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.sampler_array.nearest_tiling_optimal_binding_15
+dEQP-VK.ycbcr.conversion.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.sampler_array.nearest_tiling_optimal_binding_31
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.rgb_identity.linear_tiling_linear
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.rgb_identity.linear_tiling_linear_binding_7
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.rgb_identity.linear_tiling_linear_binding_15
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.rgb_identity.linear_tiling_linear_binding_31
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.rgb_identity.linear_tiling_optimal
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.rgb_identity.linear_tiling_optimal_binding_7
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.rgb_identity.linear_tiling_optimal_binding_15
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.rgb_identity.linear_tiling_optimal_binding_31
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.rgb_identity.nearest_tiling_linear
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.rgb_identity.nearest_tiling_linear_binding_7
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.rgb_identity.nearest_tiling_linear_binding_15
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.rgb_identity.nearest_tiling_linear_binding_31
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.rgb_identity.nearest_tiling_optimal
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.rgb_identity.nearest_tiling_optimal_binding_7
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.rgb_identity.nearest_tiling_optimal_binding_15
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.rgb_identity.nearest_tiling_optimal_binding_31
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_identity.itu_full.linear_tiling_linear
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_identity.itu_full.linear_tiling_linear_binding_7
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_identity.itu_full.linear_tiling_linear_binding_15
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_identity.itu_full.linear_tiling_linear_binding_31
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_identity.itu_full.linear_tiling_optimal
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_identity.itu_full.linear_tiling_optimal_binding_7
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_identity.itu_full.linear_tiling_optimal_binding_15
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_identity.itu_full.linear_tiling_optimal_binding_31
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_identity.itu_full.nearest_tiling_linear
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_identity.itu_full.nearest_tiling_linear_binding_7
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_identity.itu_full.nearest_tiling_linear_binding_15
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_identity.itu_full.nearest_tiling_linear_binding_31
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_identity.itu_full.nearest_tiling_optimal
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_identity.itu_full.nearest_tiling_optimal_binding_7
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_identity.itu_full.nearest_tiling_optimal_binding_15
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_identity.itu_full.nearest_tiling_optimal_binding_31
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_identity.itu_narrow.linear_tiling_linear
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_identity.itu_narrow.linear_tiling_linear_binding_7
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_identity.itu_narrow.linear_tiling_linear_binding_15
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_identity.itu_narrow.linear_tiling_linear_binding_31
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_identity.itu_narrow.linear_tiling_optimal
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_identity.itu_narrow.linear_tiling_optimal_binding_7
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_identity.itu_narrow.linear_tiling_optimal_binding_15
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_identity.itu_narrow.linear_tiling_optimal_binding_31
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_identity.itu_narrow.nearest_tiling_linear
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_identity.itu_narrow.nearest_tiling_linear_binding_7
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_identity.itu_narrow.nearest_tiling_linear_binding_15
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_identity.itu_narrow.nearest_tiling_linear_binding_31
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_identity.itu_narrow.nearest_tiling_optimal
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_identity.itu_narrow.nearest_tiling_optimal_binding_7
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_identity.itu_narrow.nearest_tiling_optimal_binding_15
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_identity.itu_narrow.nearest_tiling_optimal_binding_31
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_709.itu_full.linear_tiling_linear
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_709.itu_full.linear_tiling_linear_binding_7
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_709.itu_full.linear_tiling_linear_binding_15
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_709.itu_full.linear_tiling_linear_binding_31
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_709.itu_full.linear_tiling_optimal
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_709.itu_full.linear_tiling_optimal_binding_7
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_709.itu_full.linear_tiling_optimal_binding_15
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_709.itu_full.linear_tiling_optimal_binding_31
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_709.itu_full.nearest_tiling_linear
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_709.itu_full.nearest_tiling_linear_binding_7
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_709.itu_full.nearest_tiling_linear_binding_15
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_709.itu_full.nearest_tiling_linear_binding_31
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_709.itu_full.nearest_tiling_optimal
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_709.itu_full.nearest_tiling_optimal_binding_7
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_709.itu_full.nearest_tiling_optimal_binding_15
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_709.itu_full.nearest_tiling_optimal_binding_31
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_709.itu_narrow.linear_tiling_linear
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_709.itu_narrow.linear_tiling_linear_binding_7
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_709.itu_narrow.linear_tiling_linear_binding_15
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_709.itu_narrow.linear_tiling_linear_binding_31
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_709.itu_narrow.linear_tiling_optimal
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_709.itu_narrow.linear_tiling_optimal_binding_7
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_709.itu_narrow.linear_tiling_optimal_binding_15
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_709.itu_narrow.linear_tiling_optimal_binding_31
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_709.itu_narrow.nearest_tiling_linear
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_709.itu_narrow.nearest_tiling_linear_binding_7
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_709.itu_narrow.nearest_tiling_linear_binding_15
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_709.itu_narrow.nearest_tiling_linear_binding_31
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_709.itu_narrow.nearest_tiling_optimal
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_709.itu_narrow.nearest_tiling_optimal_binding_7
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_709.itu_narrow.nearest_tiling_optimal_binding_15
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_709.itu_narrow.nearest_tiling_optimal_binding_31
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_601.itu_full.linear_tiling_linear
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_601.itu_full.linear_tiling_linear_binding_7
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_601.itu_full.linear_tiling_linear_binding_15
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_601.itu_full.linear_tiling_linear_binding_31
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_601.itu_full.linear_tiling_optimal
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_601.itu_full.linear_tiling_optimal_binding_7
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_601.itu_full.linear_tiling_optimal_binding_15
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_601.itu_full.linear_tiling_optimal_binding_31
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_601.itu_full.nearest_tiling_linear
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_601.itu_full.nearest_tiling_linear_binding_7
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_601.itu_full.nearest_tiling_linear_binding_15
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_601.itu_full.nearest_tiling_linear_binding_31
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_601.itu_full.nearest_tiling_optimal
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_601.itu_full.nearest_tiling_optimal_binding_7
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_601.itu_full.nearest_tiling_optimal_binding_15
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_601.itu_full.nearest_tiling_optimal_binding_31
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_601.itu_narrow.linear_tiling_linear
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_601.itu_narrow.linear_tiling_linear_binding_7
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_601.itu_narrow.linear_tiling_linear_binding_15
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_601.itu_narrow.linear_tiling_linear_binding_31
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_601.itu_narrow.linear_tiling_optimal
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_601.itu_narrow.linear_tiling_optimal_binding_7
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_601.itu_narrow.linear_tiling_optimal_binding_15
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_601.itu_narrow.linear_tiling_optimal_binding_31
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_601.itu_narrow.nearest_tiling_linear
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_601.itu_narrow.nearest_tiling_linear_binding_7
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_601.itu_narrow.nearest_tiling_linear_binding_15
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_601.itu_narrow.nearest_tiling_linear_binding_31
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_601.itu_narrow.nearest_tiling_optimal
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_601.itu_narrow.nearest_tiling_optimal_binding_7
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_601.itu_narrow.nearest_tiling_optimal_binding_15
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_601.itu_narrow.nearest_tiling_optimal_binding_31
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_2020.itu_full.linear_tiling_linear
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_2020.itu_full.linear_tiling_linear_binding_7
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_2020.itu_full.linear_tiling_linear_binding_15
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_2020.itu_full.linear_tiling_linear_binding_31
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_2020.itu_full.linear_tiling_optimal
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_2020.itu_full.linear_tiling_optimal_binding_7
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_2020.itu_full.linear_tiling_optimal_binding_15
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_2020.itu_full.linear_tiling_optimal_binding_31
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_2020.itu_full.nearest_tiling_linear
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_2020.itu_full.nearest_tiling_linear_binding_7
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_2020.itu_full.nearest_tiling_linear_binding_15
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_2020.itu_full.nearest_tiling_linear_binding_31
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_2020.itu_full.nearest_tiling_optimal
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_2020.itu_full.nearest_tiling_optimal_binding_7
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_2020.itu_full.nearest_tiling_optimal_binding_15
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_2020.itu_full.nearest_tiling_optimal_binding_31
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_2020.itu_narrow.linear_tiling_linear
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_2020.itu_narrow.linear_tiling_linear_binding_7
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_2020.itu_narrow.linear_tiling_linear_binding_15
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_2020.itu_narrow.linear_tiling_linear_binding_31
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_2020.itu_narrow.linear_tiling_optimal
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_2020.itu_narrow.linear_tiling_optimal_binding_7
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_2020.itu_narrow.linear_tiling_optimal_binding_15
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_2020.itu_narrow.linear_tiling_optimal_binding_31
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_2020.itu_narrow.nearest_tiling_linear
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_2020.itu_narrow.nearest_tiling_linear_binding_7
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_2020.itu_narrow.nearest_tiling_linear_binding_15
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_2020.itu_narrow.nearest_tiling_linear_binding_31
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_2020.itu_narrow.nearest_tiling_optimal
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_2020.itu_narrow.nearest_tiling_optimal_binding_7
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_2020.itu_narrow.nearest_tiling_optimal_binding_15
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.ycbcr_2020.itu_narrow.nearest_tiling_optimal_binding_31
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.sampler_array.linear_tiling_linear
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.sampler_array.linear_tiling_linear_binding_7
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.sampler_array.linear_tiling_linear_binding_15
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.sampler_array.linear_tiling_linear_binding_31
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.sampler_array.linear_tiling_optimal
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.sampler_array.linear_tiling_optimal_binding_7
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.sampler_array.linear_tiling_optimal_binding_15
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.sampler_array.linear_tiling_optimal_binding_31
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.sampler_array.nearest_tiling_linear
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.sampler_array.nearest_tiling_linear_binding_7
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.sampler_array.nearest_tiling_linear_binding_15
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.sampler_array.nearest_tiling_linear_binding_31
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.sampler_array.nearest_tiling_optimal
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.sampler_array.nearest_tiling_optimal_binding_7
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.sampler_array.nearest_tiling_optimal_binding_15
+dEQP-VK.ycbcr.conversion.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.sampler_array.nearest_tiling_optimal_binding_31
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.rgb_identity.linear_tiling_linear
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.rgb_identity.linear_tiling_linear_binding_7
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.rgb_identity.linear_tiling_linear_binding_15
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.rgb_identity.linear_tiling_linear_binding_31
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.rgb_identity.linear_tiling_optimal
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.rgb_identity.linear_tiling_optimal_binding_7
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.rgb_identity.linear_tiling_optimal_binding_15
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.rgb_identity.linear_tiling_optimal_binding_31
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.rgb_identity.nearest_tiling_linear
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.rgb_identity.nearest_tiling_linear_binding_7
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.rgb_identity.nearest_tiling_linear_binding_15
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.rgb_identity.nearest_tiling_linear_binding_31
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.rgb_identity.nearest_tiling_optimal
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.rgb_identity.nearest_tiling_optimal_binding_7
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.rgb_identity.nearest_tiling_optimal_binding_15
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.rgb_identity.nearest_tiling_optimal_binding_31
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_identity.itu_full.linear_tiling_linear
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_identity.itu_full.linear_tiling_linear_binding_7
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_identity.itu_full.linear_tiling_linear_binding_15
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_identity.itu_full.linear_tiling_linear_binding_31
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_identity.itu_full.linear_tiling_optimal
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_identity.itu_full.linear_tiling_optimal_binding_7
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_identity.itu_full.linear_tiling_optimal_binding_15
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_identity.itu_full.linear_tiling_optimal_binding_31
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_identity.itu_full.nearest_tiling_linear
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_identity.itu_full.nearest_tiling_linear_binding_7
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_identity.itu_full.nearest_tiling_linear_binding_15
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_identity.itu_full.nearest_tiling_linear_binding_31
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_identity.itu_full.nearest_tiling_optimal
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_identity.itu_full.nearest_tiling_optimal_binding_7
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_identity.itu_full.nearest_tiling_optimal_binding_15
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_identity.itu_full.nearest_tiling_optimal_binding_31
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_identity.itu_narrow.linear_tiling_linear
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_identity.itu_narrow.linear_tiling_linear_binding_7
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_identity.itu_narrow.linear_tiling_linear_binding_15
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_identity.itu_narrow.linear_tiling_linear_binding_31
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_identity.itu_narrow.linear_tiling_optimal
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_identity.itu_narrow.linear_tiling_optimal_binding_7
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_identity.itu_narrow.linear_tiling_optimal_binding_15
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_identity.itu_narrow.linear_tiling_optimal_binding_31
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_identity.itu_narrow.nearest_tiling_linear
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_identity.itu_narrow.nearest_tiling_linear_binding_7
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_identity.itu_narrow.nearest_tiling_linear_binding_15
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_identity.itu_narrow.nearest_tiling_linear_binding_31
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_identity.itu_narrow.nearest_tiling_optimal
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_identity.itu_narrow.nearest_tiling_optimal_binding_7
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_identity.itu_narrow.nearest_tiling_optimal_binding_15
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_identity.itu_narrow.nearest_tiling_optimal_binding_31
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_709.itu_full.linear_tiling_linear
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_709.itu_full.linear_tiling_linear_binding_7
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_709.itu_full.linear_tiling_linear_binding_15
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_709.itu_full.linear_tiling_linear_binding_31
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_709.itu_full.linear_tiling_optimal
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_709.itu_full.linear_tiling_optimal_binding_7
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_709.itu_full.linear_tiling_optimal_binding_15
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_709.itu_full.linear_tiling_optimal_binding_31
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_709.itu_full.nearest_tiling_linear
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_709.itu_full.nearest_tiling_linear_binding_7
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_709.itu_full.nearest_tiling_linear_binding_15
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_709.itu_full.nearest_tiling_linear_binding_31
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_709.itu_full.nearest_tiling_optimal
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_709.itu_full.nearest_tiling_optimal_binding_7
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_709.itu_full.nearest_tiling_optimal_binding_15
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_709.itu_full.nearest_tiling_optimal_binding_31
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_709.itu_narrow.linear_tiling_linear
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_709.itu_narrow.linear_tiling_linear_binding_7
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_709.itu_narrow.linear_tiling_linear_binding_15
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_709.itu_narrow.linear_tiling_linear_binding_31
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_709.itu_narrow.linear_tiling_optimal
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_709.itu_narrow.linear_tiling_optimal_binding_7
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_709.itu_narrow.linear_tiling_optimal_binding_15
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_709.itu_narrow.linear_tiling_optimal_binding_31
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_709.itu_narrow.nearest_tiling_linear
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_709.itu_narrow.nearest_tiling_linear_binding_7
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_709.itu_narrow.nearest_tiling_linear_binding_15
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_709.itu_narrow.nearest_tiling_linear_binding_31
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_709.itu_narrow.nearest_tiling_optimal
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_709.itu_narrow.nearest_tiling_optimal_binding_7
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_709.itu_narrow.nearest_tiling_optimal_binding_15
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_709.itu_narrow.nearest_tiling_optimal_binding_31
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_601.itu_full.linear_tiling_linear
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_601.itu_full.linear_tiling_linear_binding_7
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_601.itu_full.linear_tiling_linear_binding_15
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_601.itu_full.linear_tiling_linear_binding_31
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_601.itu_full.linear_tiling_optimal
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_601.itu_full.linear_tiling_optimal_binding_7
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_601.itu_full.linear_tiling_optimal_binding_15
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_601.itu_full.linear_tiling_optimal_binding_31
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_601.itu_full.nearest_tiling_linear
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_601.itu_full.nearest_tiling_linear_binding_7
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_601.itu_full.nearest_tiling_linear_binding_15
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_601.itu_full.nearest_tiling_linear_binding_31
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_601.itu_full.nearest_tiling_optimal
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_601.itu_full.nearest_tiling_optimal_binding_7
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_601.itu_full.nearest_tiling_optimal_binding_15
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_601.itu_full.nearest_tiling_optimal_binding_31
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_601.itu_narrow.linear_tiling_linear
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_601.itu_narrow.linear_tiling_linear_binding_7
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_601.itu_narrow.linear_tiling_linear_binding_15
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_601.itu_narrow.linear_tiling_linear_binding_31
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_601.itu_narrow.linear_tiling_optimal
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_601.itu_narrow.linear_tiling_optimal_binding_7
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_601.itu_narrow.linear_tiling_optimal_binding_15
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_601.itu_narrow.linear_tiling_optimal_binding_31
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_601.itu_narrow.nearest_tiling_linear
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_601.itu_narrow.nearest_tiling_linear_binding_7
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_601.itu_narrow.nearest_tiling_linear_binding_15
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_601.itu_narrow.nearest_tiling_linear_binding_31
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_601.itu_narrow.nearest_tiling_optimal
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_601.itu_narrow.nearest_tiling_optimal_binding_7
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_601.itu_narrow.nearest_tiling_optimal_binding_15
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_601.itu_narrow.nearest_tiling_optimal_binding_31
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_2020.itu_full.linear_tiling_linear
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_2020.itu_full.linear_tiling_linear_binding_7
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_2020.itu_full.linear_tiling_linear_binding_15
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_2020.itu_full.linear_tiling_linear_binding_31
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_2020.itu_full.linear_tiling_optimal
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_2020.itu_full.linear_tiling_optimal_binding_7
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_2020.itu_full.linear_tiling_optimal_binding_15
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_2020.itu_full.linear_tiling_optimal_binding_31
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_2020.itu_full.nearest_tiling_linear
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_2020.itu_full.nearest_tiling_linear_binding_7
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_2020.itu_full.nearest_tiling_linear_binding_15
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_2020.itu_full.nearest_tiling_linear_binding_31
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_2020.itu_full.nearest_tiling_optimal
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_2020.itu_full.nearest_tiling_optimal_binding_7
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_2020.itu_full.nearest_tiling_optimal_binding_15
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_2020.itu_full.nearest_tiling_optimal_binding_31
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_2020.itu_narrow.linear_tiling_linear
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_2020.itu_narrow.linear_tiling_linear_binding_7
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_2020.itu_narrow.linear_tiling_linear_binding_15
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_2020.itu_narrow.linear_tiling_linear_binding_31
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_2020.itu_narrow.linear_tiling_optimal
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_2020.itu_narrow.linear_tiling_optimal_binding_7
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_2020.itu_narrow.linear_tiling_optimal_binding_15
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_2020.itu_narrow.linear_tiling_optimal_binding_31
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_2020.itu_narrow.nearest_tiling_linear
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_2020.itu_narrow.nearest_tiling_linear_binding_7
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_2020.itu_narrow.nearest_tiling_linear_binding_15
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_2020.itu_narrow.nearest_tiling_linear_binding_31
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_2020.itu_narrow.nearest_tiling_optimal
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_2020.itu_narrow.nearest_tiling_optimal_binding_7
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_2020.itu_narrow.nearest_tiling_optimal_binding_15
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.ycbcr_2020.itu_narrow.nearest_tiling_optimal_binding_31
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.sampler_array.linear_tiling_linear
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.sampler_array.linear_tiling_linear_binding_7
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.sampler_array.linear_tiling_linear_binding_15
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.sampler_array.linear_tiling_linear_binding_31
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.sampler_array.linear_tiling_optimal
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.sampler_array.linear_tiling_optimal_binding_7
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.sampler_array.linear_tiling_optimal_binding_15
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.sampler_array.linear_tiling_optimal_binding_31
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.sampler_array.nearest_tiling_linear
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.sampler_array.nearest_tiling_linear_binding_7
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.sampler_array.nearest_tiling_linear_binding_15
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.sampler_array.nearest_tiling_linear_binding_31
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.sampler_array.nearest_tiling_optimal
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.sampler_array.nearest_tiling_optimal_binding_7
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.sampler_array.nearest_tiling_optimal_binding_15
+dEQP-VK.ycbcr.conversion.g16_b16r16_2plane_444_unorm_ext.sampler_array.nearest_tiling_optimal_binding_31
+dEQP-VK.ycbcr.copy.r4g4_unorm_pack8.g8_b8r8_2plane_444_unorm_ext.linear_linear
+dEQP-VK.ycbcr.copy.r4g4_unorm_pack8.g8_b8r8_2plane_444_unorm_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.r4g4_unorm_pack8.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.r4g4_unorm_pack8.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.r4g4_unorm_pack8.g8_b8r8_2plane_444_unorm_ext.linear_optimal
+dEQP-VK.ycbcr.copy.r4g4_unorm_pack8.g8_b8r8_2plane_444_unorm_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.r4g4_unorm_pack8.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.r4g4_unorm_pack8.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.r4g4_unorm_pack8.g8_b8r8_2plane_444_unorm_ext.optimal_linear
+dEQP-VK.ycbcr.copy.r4g4_unorm_pack8.g8_b8r8_2plane_444_unorm_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.r4g4_unorm_pack8.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.r4g4_unorm_pack8.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.r4g4_unorm_pack8.g8_b8r8_2plane_444_unorm_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.r4g4_unorm_pack8.g8_b8r8_2plane_444_unorm_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.r4g4_unorm_pack8.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.r4g4_unorm_pack8.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.r4g4b4a4_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.linear_linear
+dEQP-VK.ycbcr.copy.r4g4b4a4_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.r4g4b4a4_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.r4g4b4a4_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.r4g4b4a4_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.linear_optimal
+dEQP-VK.ycbcr.copy.r4g4b4a4_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.r4g4b4a4_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.r4g4b4a4_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.r4g4b4a4_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.optimal_linear
+dEQP-VK.ycbcr.copy.r4g4b4a4_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.r4g4b4a4_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.r4g4b4a4_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.r4g4b4a4_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.r4g4b4a4_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.r4g4b4a4_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.r4g4b4a4_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.r4g4b4a4_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_linear
+dEQP-VK.ycbcr.copy.r4g4b4a4_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.r4g4b4a4_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.r4g4b4a4_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.r4g4b4a4_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_optimal
+dEQP-VK.ycbcr.copy.r4g4b4a4_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.r4g4b4a4_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.r4g4b4a4_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.r4g4b4a4_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_linear
+dEQP-VK.ycbcr.copy.r4g4b4a4_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.r4g4b4a4_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.r4g4b4a4_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.r4g4b4a4_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.r4g4b4a4_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.r4g4b4a4_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.r4g4b4a4_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.r4g4b4a4_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_linear
+dEQP-VK.ycbcr.copy.r4g4b4a4_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.r4g4b4a4_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.r4g4b4a4_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.r4g4b4a4_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_optimal
+dEQP-VK.ycbcr.copy.r4g4b4a4_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.r4g4b4a4_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.r4g4b4a4_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.r4g4b4a4_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_linear
+dEQP-VK.ycbcr.copy.r4g4b4a4_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.r4g4b4a4_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.r4g4b4a4_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.r4g4b4a4_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.r4g4b4a4_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.r4g4b4a4_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.r4g4b4a4_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.r4g4b4a4_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.linear_linear
+dEQP-VK.ycbcr.copy.r4g4b4a4_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.r4g4b4a4_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.r4g4b4a4_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.r4g4b4a4_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.linear_optimal
+dEQP-VK.ycbcr.copy.r4g4b4a4_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.r4g4b4a4_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.r4g4b4a4_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.r4g4b4a4_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.optimal_linear
+dEQP-VK.ycbcr.copy.r4g4b4a4_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.r4g4b4a4_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.r4g4b4a4_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.r4g4b4a4_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.r4g4b4a4_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.r4g4b4a4_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.r4g4b4a4_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.b4g4r4a4_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.linear_linear
+dEQP-VK.ycbcr.copy.b4g4r4a4_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.b4g4r4a4_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.b4g4r4a4_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.b4g4r4a4_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.linear_optimal
+dEQP-VK.ycbcr.copy.b4g4r4a4_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.b4g4r4a4_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.b4g4r4a4_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.b4g4r4a4_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.optimal_linear
+dEQP-VK.ycbcr.copy.b4g4r4a4_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.b4g4r4a4_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.b4g4r4a4_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.b4g4r4a4_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.b4g4r4a4_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.b4g4r4a4_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.b4g4r4a4_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.b4g4r4a4_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_linear
+dEQP-VK.ycbcr.copy.b4g4r4a4_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.b4g4r4a4_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.b4g4r4a4_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.b4g4r4a4_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_optimal
+dEQP-VK.ycbcr.copy.b4g4r4a4_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.b4g4r4a4_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.b4g4r4a4_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.b4g4r4a4_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_linear
+dEQP-VK.ycbcr.copy.b4g4r4a4_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.b4g4r4a4_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.b4g4r4a4_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.b4g4r4a4_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.b4g4r4a4_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.b4g4r4a4_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.b4g4r4a4_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.b4g4r4a4_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_linear
+dEQP-VK.ycbcr.copy.b4g4r4a4_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.b4g4r4a4_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.b4g4r4a4_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.b4g4r4a4_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_optimal
+dEQP-VK.ycbcr.copy.b4g4r4a4_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.b4g4r4a4_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.b4g4r4a4_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.b4g4r4a4_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_linear
+dEQP-VK.ycbcr.copy.b4g4r4a4_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.b4g4r4a4_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.b4g4r4a4_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.b4g4r4a4_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.b4g4r4a4_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.b4g4r4a4_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.b4g4r4a4_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.b4g4r4a4_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.linear_linear
+dEQP-VK.ycbcr.copy.b4g4r4a4_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.b4g4r4a4_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.b4g4r4a4_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.b4g4r4a4_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.linear_optimal
+dEQP-VK.ycbcr.copy.b4g4r4a4_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.b4g4r4a4_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.b4g4r4a4_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.b4g4r4a4_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.optimal_linear
+dEQP-VK.ycbcr.copy.b4g4r4a4_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.b4g4r4a4_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.b4g4r4a4_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.b4g4r4a4_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.b4g4r4a4_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.b4g4r4a4_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.b4g4r4a4_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.r5g6b5_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.linear_linear
+dEQP-VK.ycbcr.copy.r5g6b5_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.r5g6b5_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.r5g6b5_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.r5g6b5_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.linear_optimal
+dEQP-VK.ycbcr.copy.r5g6b5_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.r5g6b5_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.r5g6b5_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.r5g6b5_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.optimal_linear
+dEQP-VK.ycbcr.copy.r5g6b5_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.r5g6b5_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.r5g6b5_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.r5g6b5_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.r5g6b5_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.r5g6b5_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.r5g6b5_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.r5g6b5_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_linear
+dEQP-VK.ycbcr.copy.r5g6b5_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.r5g6b5_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.r5g6b5_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.r5g6b5_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_optimal
+dEQP-VK.ycbcr.copy.r5g6b5_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.r5g6b5_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.r5g6b5_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.r5g6b5_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_linear
+dEQP-VK.ycbcr.copy.r5g6b5_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.r5g6b5_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.r5g6b5_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.r5g6b5_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.r5g6b5_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.r5g6b5_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.r5g6b5_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.r5g6b5_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_linear
+dEQP-VK.ycbcr.copy.r5g6b5_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.r5g6b5_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.r5g6b5_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.r5g6b5_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_optimal
+dEQP-VK.ycbcr.copy.r5g6b5_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.r5g6b5_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.r5g6b5_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.r5g6b5_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_linear
+dEQP-VK.ycbcr.copy.r5g6b5_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.r5g6b5_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.r5g6b5_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.r5g6b5_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.r5g6b5_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.r5g6b5_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.r5g6b5_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.r5g6b5_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.linear_linear
+dEQP-VK.ycbcr.copy.r5g6b5_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.r5g6b5_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.r5g6b5_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.r5g6b5_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.linear_optimal
+dEQP-VK.ycbcr.copy.r5g6b5_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.r5g6b5_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.r5g6b5_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.r5g6b5_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.optimal_linear
+dEQP-VK.ycbcr.copy.r5g6b5_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.r5g6b5_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.r5g6b5_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.r5g6b5_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.r5g6b5_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.r5g6b5_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.r5g6b5_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.b5g6r5_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.linear_linear
+dEQP-VK.ycbcr.copy.b5g6r5_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.b5g6r5_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.b5g6r5_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.b5g6r5_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.linear_optimal
+dEQP-VK.ycbcr.copy.b5g6r5_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.b5g6r5_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.b5g6r5_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.b5g6r5_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.optimal_linear
+dEQP-VK.ycbcr.copy.b5g6r5_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.b5g6r5_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.b5g6r5_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.b5g6r5_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.b5g6r5_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.b5g6r5_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.b5g6r5_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.b5g6r5_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_linear
+dEQP-VK.ycbcr.copy.b5g6r5_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.b5g6r5_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.b5g6r5_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.b5g6r5_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_optimal
+dEQP-VK.ycbcr.copy.b5g6r5_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.b5g6r5_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.b5g6r5_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.b5g6r5_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_linear
+dEQP-VK.ycbcr.copy.b5g6r5_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.b5g6r5_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.b5g6r5_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.b5g6r5_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.b5g6r5_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.b5g6r5_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.b5g6r5_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.b5g6r5_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_linear
+dEQP-VK.ycbcr.copy.b5g6r5_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.b5g6r5_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.b5g6r5_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.b5g6r5_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_optimal
+dEQP-VK.ycbcr.copy.b5g6r5_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.b5g6r5_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.b5g6r5_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.b5g6r5_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_linear
+dEQP-VK.ycbcr.copy.b5g6r5_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.b5g6r5_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.b5g6r5_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.b5g6r5_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.b5g6r5_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.b5g6r5_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.b5g6r5_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.b5g6r5_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.linear_linear
+dEQP-VK.ycbcr.copy.b5g6r5_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.b5g6r5_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.b5g6r5_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.b5g6r5_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.linear_optimal
+dEQP-VK.ycbcr.copy.b5g6r5_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.b5g6r5_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.b5g6r5_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.b5g6r5_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.optimal_linear
+dEQP-VK.ycbcr.copy.b5g6r5_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.b5g6r5_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.b5g6r5_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.b5g6r5_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.b5g6r5_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.b5g6r5_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.b5g6r5_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.r5g5b5a1_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.linear_linear
+dEQP-VK.ycbcr.copy.r5g5b5a1_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.r5g5b5a1_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.r5g5b5a1_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.r5g5b5a1_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.linear_optimal
+dEQP-VK.ycbcr.copy.r5g5b5a1_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.r5g5b5a1_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.r5g5b5a1_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.r5g5b5a1_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.optimal_linear
+dEQP-VK.ycbcr.copy.r5g5b5a1_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.r5g5b5a1_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.r5g5b5a1_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.r5g5b5a1_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.r5g5b5a1_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.r5g5b5a1_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.r5g5b5a1_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.r5g5b5a1_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_linear
+dEQP-VK.ycbcr.copy.r5g5b5a1_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.r5g5b5a1_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.r5g5b5a1_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.r5g5b5a1_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_optimal
+dEQP-VK.ycbcr.copy.r5g5b5a1_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.r5g5b5a1_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.r5g5b5a1_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.r5g5b5a1_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_linear
+dEQP-VK.ycbcr.copy.r5g5b5a1_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.r5g5b5a1_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.r5g5b5a1_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.r5g5b5a1_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.r5g5b5a1_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.r5g5b5a1_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.r5g5b5a1_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.r5g5b5a1_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_linear
+dEQP-VK.ycbcr.copy.r5g5b5a1_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.r5g5b5a1_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.r5g5b5a1_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.r5g5b5a1_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_optimal
+dEQP-VK.ycbcr.copy.r5g5b5a1_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.r5g5b5a1_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.r5g5b5a1_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.r5g5b5a1_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_linear
+dEQP-VK.ycbcr.copy.r5g5b5a1_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.r5g5b5a1_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.r5g5b5a1_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.r5g5b5a1_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.r5g5b5a1_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.r5g5b5a1_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.r5g5b5a1_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.r5g5b5a1_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.linear_linear
+dEQP-VK.ycbcr.copy.r5g5b5a1_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.r5g5b5a1_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.r5g5b5a1_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.r5g5b5a1_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.linear_optimal
+dEQP-VK.ycbcr.copy.r5g5b5a1_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.r5g5b5a1_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.r5g5b5a1_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.r5g5b5a1_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.optimal_linear
+dEQP-VK.ycbcr.copy.r5g5b5a1_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.r5g5b5a1_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.r5g5b5a1_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.r5g5b5a1_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.r5g5b5a1_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.r5g5b5a1_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.r5g5b5a1_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.b5g5r5a1_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.linear_linear
+dEQP-VK.ycbcr.copy.b5g5r5a1_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.b5g5r5a1_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.b5g5r5a1_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.b5g5r5a1_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.linear_optimal
+dEQP-VK.ycbcr.copy.b5g5r5a1_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.b5g5r5a1_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.b5g5r5a1_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.b5g5r5a1_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.optimal_linear
+dEQP-VK.ycbcr.copy.b5g5r5a1_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.b5g5r5a1_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.b5g5r5a1_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.b5g5r5a1_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.b5g5r5a1_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.b5g5r5a1_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.b5g5r5a1_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.b5g5r5a1_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_linear
+dEQP-VK.ycbcr.copy.b5g5r5a1_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.b5g5r5a1_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.b5g5r5a1_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.b5g5r5a1_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_optimal
+dEQP-VK.ycbcr.copy.b5g5r5a1_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.b5g5r5a1_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.b5g5r5a1_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.b5g5r5a1_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_linear
+dEQP-VK.ycbcr.copy.b5g5r5a1_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.b5g5r5a1_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.b5g5r5a1_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.b5g5r5a1_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.b5g5r5a1_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.b5g5r5a1_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.b5g5r5a1_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.b5g5r5a1_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_linear
+dEQP-VK.ycbcr.copy.b5g5r5a1_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.b5g5r5a1_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.b5g5r5a1_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.b5g5r5a1_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_optimal
+dEQP-VK.ycbcr.copy.b5g5r5a1_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.b5g5r5a1_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.b5g5r5a1_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.b5g5r5a1_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_linear
+dEQP-VK.ycbcr.copy.b5g5r5a1_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.b5g5r5a1_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.b5g5r5a1_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.b5g5r5a1_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.b5g5r5a1_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.b5g5r5a1_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.b5g5r5a1_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.b5g5r5a1_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.linear_linear
+dEQP-VK.ycbcr.copy.b5g5r5a1_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.b5g5r5a1_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.b5g5r5a1_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.b5g5r5a1_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.linear_optimal
+dEQP-VK.ycbcr.copy.b5g5r5a1_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.b5g5r5a1_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.b5g5r5a1_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.b5g5r5a1_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.optimal_linear
+dEQP-VK.ycbcr.copy.b5g5r5a1_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.b5g5r5a1_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.b5g5r5a1_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.b5g5r5a1_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.b5g5r5a1_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.b5g5r5a1_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.b5g5r5a1_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.a1r5g5b5_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.linear_linear
+dEQP-VK.ycbcr.copy.a1r5g5b5_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.a1r5g5b5_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.a1r5g5b5_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.a1r5g5b5_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.linear_optimal
+dEQP-VK.ycbcr.copy.a1r5g5b5_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.a1r5g5b5_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.a1r5g5b5_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.a1r5g5b5_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.optimal_linear
+dEQP-VK.ycbcr.copy.a1r5g5b5_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.a1r5g5b5_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.a1r5g5b5_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.a1r5g5b5_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.a1r5g5b5_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.a1r5g5b5_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.a1r5g5b5_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.a1r5g5b5_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_linear
+dEQP-VK.ycbcr.copy.a1r5g5b5_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.a1r5g5b5_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.a1r5g5b5_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.a1r5g5b5_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_optimal
+dEQP-VK.ycbcr.copy.a1r5g5b5_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.a1r5g5b5_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.a1r5g5b5_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.a1r5g5b5_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_linear
+dEQP-VK.ycbcr.copy.a1r5g5b5_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.a1r5g5b5_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.a1r5g5b5_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.a1r5g5b5_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.a1r5g5b5_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.a1r5g5b5_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.a1r5g5b5_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.a1r5g5b5_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_linear
+dEQP-VK.ycbcr.copy.a1r5g5b5_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.a1r5g5b5_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.a1r5g5b5_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.a1r5g5b5_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_optimal
+dEQP-VK.ycbcr.copy.a1r5g5b5_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.a1r5g5b5_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.a1r5g5b5_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.a1r5g5b5_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_linear
+dEQP-VK.ycbcr.copy.a1r5g5b5_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.a1r5g5b5_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.a1r5g5b5_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.a1r5g5b5_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.a1r5g5b5_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.a1r5g5b5_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.a1r5g5b5_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.a1r5g5b5_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.linear_linear
+dEQP-VK.ycbcr.copy.a1r5g5b5_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.a1r5g5b5_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.a1r5g5b5_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.a1r5g5b5_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.linear_optimal
+dEQP-VK.ycbcr.copy.a1r5g5b5_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.a1r5g5b5_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.a1r5g5b5_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.a1r5g5b5_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.optimal_linear
+dEQP-VK.ycbcr.copy.a1r5g5b5_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.a1r5g5b5_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.a1r5g5b5_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.a1r5g5b5_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.a1r5g5b5_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.a1r5g5b5_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.a1r5g5b5_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.r8_unorm.g8_b8r8_2plane_444_unorm_ext.linear_linear
+dEQP-VK.ycbcr.copy.r8_unorm.g8_b8r8_2plane_444_unorm_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.r8_unorm.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.r8_unorm.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.r8_unorm.g8_b8r8_2plane_444_unorm_ext.linear_optimal
+dEQP-VK.ycbcr.copy.r8_unorm.g8_b8r8_2plane_444_unorm_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.r8_unorm.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.r8_unorm.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.r8_unorm.g8_b8r8_2plane_444_unorm_ext.optimal_linear
+dEQP-VK.ycbcr.copy.r8_unorm.g8_b8r8_2plane_444_unorm_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.r8_unorm.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.r8_unorm.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.r8_unorm.g8_b8r8_2plane_444_unorm_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.r8_unorm.g8_b8r8_2plane_444_unorm_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.r8_unorm.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.r8_unorm.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.r8g8_unorm.g8_b8r8_2plane_444_unorm_ext.linear_linear
+dEQP-VK.ycbcr.copy.r8g8_unorm.g8_b8r8_2plane_444_unorm_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.r8g8_unorm.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.r8g8_unorm.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.r8g8_unorm.g8_b8r8_2plane_444_unorm_ext.linear_optimal
+dEQP-VK.ycbcr.copy.r8g8_unorm.g8_b8r8_2plane_444_unorm_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.r8g8_unorm.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.r8g8_unorm.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.r8g8_unorm.g8_b8r8_2plane_444_unorm_ext.optimal_linear
+dEQP-VK.ycbcr.copy.r8g8_unorm.g8_b8r8_2plane_444_unorm_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.r8g8_unorm.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.r8g8_unorm.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.r8g8_unorm.g8_b8r8_2plane_444_unorm_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.r8g8_unorm.g8_b8r8_2plane_444_unorm_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.r8g8_unorm.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.r8g8_unorm.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.r8g8_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_linear
+dEQP-VK.ycbcr.copy.r8g8_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.r8g8_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.r8g8_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.r8g8_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_optimal
+dEQP-VK.ycbcr.copy.r8g8_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.r8g8_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.r8g8_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.r8g8_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_linear
+dEQP-VK.ycbcr.copy.r8g8_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.r8g8_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.r8g8_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.r8g8_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.r8g8_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.r8g8_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.r8g8_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.r8g8_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_linear
+dEQP-VK.ycbcr.copy.r8g8_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.r8g8_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.r8g8_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.r8g8_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_optimal
+dEQP-VK.ycbcr.copy.r8g8_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.r8g8_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.r8g8_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.r8g8_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_linear
+dEQP-VK.ycbcr.copy.r8g8_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.r8g8_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.r8g8_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.r8g8_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.r8g8_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.r8g8_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.r8g8_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.r8g8_unorm.g16_b16r16_2plane_444_unorm_ext.linear_linear
+dEQP-VK.ycbcr.copy.r8g8_unorm.g16_b16r16_2plane_444_unorm_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.r8g8_unorm.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.r8g8_unorm.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.r8g8_unorm.g16_b16r16_2plane_444_unorm_ext.linear_optimal
+dEQP-VK.ycbcr.copy.r8g8_unorm.g16_b16r16_2plane_444_unorm_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.r8g8_unorm.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.r8g8_unorm.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.r8g8_unorm.g16_b16r16_2plane_444_unorm_ext.optimal_linear
+dEQP-VK.ycbcr.copy.r8g8_unorm.g16_b16r16_2plane_444_unorm_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.r8g8_unorm.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.r8g8_unorm.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.r8g8_unorm.g16_b16r16_2plane_444_unorm_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.r8g8_unorm.g16_b16r16_2plane_444_unorm_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.r8g8_unorm.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.r8g8_unorm.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.r8g8b8a8_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_linear
+dEQP-VK.ycbcr.copy.r8g8b8a8_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.r8g8b8a8_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.r8g8b8a8_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.r8g8b8a8_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_optimal
+dEQP-VK.ycbcr.copy.r8g8b8a8_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.r8g8b8a8_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.r8g8b8a8_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.r8g8b8a8_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_linear
+dEQP-VK.ycbcr.copy.r8g8b8a8_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.r8g8b8a8_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.r8g8b8a8_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.r8g8b8a8_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.r8g8b8a8_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.r8g8b8a8_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.r8g8b8a8_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.r8g8b8a8_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_linear
+dEQP-VK.ycbcr.copy.r8g8b8a8_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.r8g8b8a8_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.r8g8b8a8_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.r8g8b8a8_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_optimal
+dEQP-VK.ycbcr.copy.r8g8b8a8_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.r8g8b8a8_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.r8g8b8a8_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.r8g8b8a8_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_linear
+dEQP-VK.ycbcr.copy.r8g8b8a8_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.r8g8b8a8_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.r8g8b8a8_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.r8g8b8a8_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.r8g8b8a8_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.r8g8b8a8_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.r8g8b8a8_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.r8g8b8a8_unorm.g16_b16r16_2plane_444_unorm_ext.linear_linear
+dEQP-VK.ycbcr.copy.r8g8b8a8_unorm.g16_b16r16_2plane_444_unorm_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.r8g8b8a8_unorm.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.r8g8b8a8_unorm.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.r8g8b8a8_unorm.g16_b16r16_2plane_444_unorm_ext.linear_optimal
+dEQP-VK.ycbcr.copy.r8g8b8a8_unorm.g16_b16r16_2plane_444_unorm_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.r8g8b8a8_unorm.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.r8g8b8a8_unorm.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.r8g8b8a8_unorm.g16_b16r16_2plane_444_unorm_ext.optimal_linear
+dEQP-VK.ycbcr.copy.r8g8b8a8_unorm.g16_b16r16_2plane_444_unorm_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.r8g8b8a8_unorm.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.r8g8b8a8_unorm.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.r8g8b8a8_unorm.g16_b16r16_2plane_444_unorm_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.r8g8b8a8_unorm.g16_b16r16_2plane_444_unorm_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.r8g8b8a8_unorm.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.r8g8b8a8_unorm.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.b8g8r8a8_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_linear
+dEQP-VK.ycbcr.copy.b8g8r8a8_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.b8g8r8a8_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.b8g8r8a8_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.b8g8r8a8_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_optimal
+dEQP-VK.ycbcr.copy.b8g8r8a8_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.b8g8r8a8_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.b8g8r8a8_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.b8g8r8a8_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_linear
+dEQP-VK.ycbcr.copy.b8g8r8a8_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.b8g8r8a8_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.b8g8r8a8_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.b8g8r8a8_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.b8g8r8a8_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.b8g8r8a8_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.b8g8r8a8_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.b8g8r8a8_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_linear
+dEQP-VK.ycbcr.copy.b8g8r8a8_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.b8g8r8a8_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.b8g8r8a8_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.b8g8r8a8_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_optimal
+dEQP-VK.ycbcr.copy.b8g8r8a8_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.b8g8r8a8_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.b8g8r8a8_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.b8g8r8a8_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_linear
+dEQP-VK.ycbcr.copy.b8g8r8a8_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.b8g8r8a8_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.b8g8r8a8_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.b8g8r8a8_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.b8g8r8a8_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.b8g8r8a8_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.b8g8r8a8_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.b8g8r8a8_unorm.g16_b16r16_2plane_444_unorm_ext.linear_linear
+dEQP-VK.ycbcr.copy.b8g8r8a8_unorm.g16_b16r16_2plane_444_unorm_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.b8g8r8a8_unorm.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.b8g8r8a8_unorm.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.b8g8r8a8_unorm.g16_b16r16_2plane_444_unorm_ext.linear_optimal
+dEQP-VK.ycbcr.copy.b8g8r8a8_unorm.g16_b16r16_2plane_444_unorm_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.b8g8r8a8_unorm.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.b8g8r8a8_unorm.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.b8g8r8a8_unorm.g16_b16r16_2plane_444_unorm_ext.optimal_linear
+dEQP-VK.ycbcr.copy.b8g8r8a8_unorm.g16_b16r16_2plane_444_unorm_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.b8g8r8a8_unorm.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.b8g8r8a8_unorm.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.b8g8r8a8_unorm.g16_b16r16_2plane_444_unorm_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.b8g8r8a8_unorm.g16_b16r16_2plane_444_unorm_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.b8g8r8a8_unorm.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.b8g8r8a8_unorm.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.a8b8g8r8_unorm_pack32.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_linear
+dEQP-VK.ycbcr.copy.a8b8g8r8_unorm_pack32.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.a8b8g8r8_unorm_pack32.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.a8b8g8r8_unorm_pack32.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.a8b8g8r8_unorm_pack32.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_optimal
+dEQP-VK.ycbcr.copy.a8b8g8r8_unorm_pack32.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.a8b8g8r8_unorm_pack32.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.a8b8g8r8_unorm_pack32.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.a8b8g8r8_unorm_pack32.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_linear
+dEQP-VK.ycbcr.copy.a8b8g8r8_unorm_pack32.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.a8b8g8r8_unorm_pack32.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.a8b8g8r8_unorm_pack32.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.a8b8g8r8_unorm_pack32.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.a8b8g8r8_unorm_pack32.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.a8b8g8r8_unorm_pack32.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.a8b8g8r8_unorm_pack32.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.a8b8g8r8_unorm_pack32.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_linear
+dEQP-VK.ycbcr.copy.a8b8g8r8_unorm_pack32.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.a8b8g8r8_unorm_pack32.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.a8b8g8r8_unorm_pack32.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.a8b8g8r8_unorm_pack32.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_optimal
+dEQP-VK.ycbcr.copy.a8b8g8r8_unorm_pack32.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.a8b8g8r8_unorm_pack32.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.a8b8g8r8_unorm_pack32.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.a8b8g8r8_unorm_pack32.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_linear
+dEQP-VK.ycbcr.copy.a8b8g8r8_unorm_pack32.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.a8b8g8r8_unorm_pack32.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.a8b8g8r8_unorm_pack32.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.a8b8g8r8_unorm_pack32.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.a8b8g8r8_unorm_pack32.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.a8b8g8r8_unorm_pack32.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.a8b8g8r8_unorm_pack32.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.a8b8g8r8_unorm_pack32.g16_b16r16_2plane_444_unorm_ext.linear_linear
+dEQP-VK.ycbcr.copy.a8b8g8r8_unorm_pack32.g16_b16r16_2plane_444_unorm_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.a8b8g8r8_unorm_pack32.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.a8b8g8r8_unorm_pack32.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.a8b8g8r8_unorm_pack32.g16_b16r16_2plane_444_unorm_ext.linear_optimal
+dEQP-VK.ycbcr.copy.a8b8g8r8_unorm_pack32.g16_b16r16_2plane_444_unorm_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.a8b8g8r8_unorm_pack32.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.a8b8g8r8_unorm_pack32.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.a8b8g8r8_unorm_pack32.g16_b16r16_2plane_444_unorm_ext.optimal_linear
+dEQP-VK.ycbcr.copy.a8b8g8r8_unorm_pack32.g16_b16r16_2plane_444_unorm_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.a8b8g8r8_unorm_pack32.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.a8b8g8r8_unorm_pack32.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.a8b8g8r8_unorm_pack32.g16_b16r16_2plane_444_unorm_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.a8b8g8r8_unorm_pack32.g16_b16r16_2plane_444_unorm_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.a8b8g8r8_unorm_pack32.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.a8b8g8r8_unorm_pack32.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.a2r10g10b10_unorm_pack32.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_linear
+dEQP-VK.ycbcr.copy.a2r10g10b10_unorm_pack32.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.a2r10g10b10_unorm_pack32.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.a2r10g10b10_unorm_pack32.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.a2r10g10b10_unorm_pack32.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_optimal
+dEQP-VK.ycbcr.copy.a2r10g10b10_unorm_pack32.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.a2r10g10b10_unorm_pack32.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.a2r10g10b10_unorm_pack32.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.a2r10g10b10_unorm_pack32.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_linear
+dEQP-VK.ycbcr.copy.a2r10g10b10_unorm_pack32.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.a2r10g10b10_unorm_pack32.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.a2r10g10b10_unorm_pack32.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.a2r10g10b10_unorm_pack32.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.a2r10g10b10_unorm_pack32.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.a2r10g10b10_unorm_pack32.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.a2r10g10b10_unorm_pack32.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.a2r10g10b10_unorm_pack32.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_linear
+dEQP-VK.ycbcr.copy.a2r10g10b10_unorm_pack32.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.a2r10g10b10_unorm_pack32.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.a2r10g10b10_unorm_pack32.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.a2r10g10b10_unorm_pack32.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_optimal
+dEQP-VK.ycbcr.copy.a2r10g10b10_unorm_pack32.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.a2r10g10b10_unorm_pack32.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.a2r10g10b10_unorm_pack32.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.a2r10g10b10_unorm_pack32.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_linear
+dEQP-VK.ycbcr.copy.a2r10g10b10_unorm_pack32.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.a2r10g10b10_unorm_pack32.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.a2r10g10b10_unorm_pack32.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.a2r10g10b10_unorm_pack32.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.a2r10g10b10_unorm_pack32.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.a2r10g10b10_unorm_pack32.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.a2r10g10b10_unorm_pack32.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.a2r10g10b10_unorm_pack32.g16_b16r16_2plane_444_unorm_ext.linear_linear
+dEQP-VK.ycbcr.copy.a2r10g10b10_unorm_pack32.g16_b16r16_2plane_444_unorm_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.a2r10g10b10_unorm_pack32.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.a2r10g10b10_unorm_pack32.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.a2r10g10b10_unorm_pack32.g16_b16r16_2plane_444_unorm_ext.linear_optimal
+dEQP-VK.ycbcr.copy.a2r10g10b10_unorm_pack32.g16_b16r16_2plane_444_unorm_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.a2r10g10b10_unorm_pack32.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.a2r10g10b10_unorm_pack32.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.a2r10g10b10_unorm_pack32.g16_b16r16_2plane_444_unorm_ext.optimal_linear
+dEQP-VK.ycbcr.copy.a2r10g10b10_unorm_pack32.g16_b16r16_2plane_444_unorm_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.a2r10g10b10_unorm_pack32.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.a2r10g10b10_unorm_pack32.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.a2r10g10b10_unorm_pack32.g16_b16r16_2plane_444_unorm_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.a2r10g10b10_unorm_pack32.g16_b16r16_2plane_444_unorm_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.a2r10g10b10_unorm_pack32.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.a2r10g10b10_unorm_pack32.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.r16_unorm.g8_b8r8_2plane_444_unorm_ext.linear_linear
+dEQP-VK.ycbcr.copy.r16_unorm.g8_b8r8_2plane_444_unorm_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.r16_unorm.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.r16_unorm.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.r16_unorm.g8_b8r8_2plane_444_unorm_ext.linear_optimal
+dEQP-VK.ycbcr.copy.r16_unorm.g8_b8r8_2plane_444_unorm_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.r16_unorm.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.r16_unorm.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.r16_unorm.g8_b8r8_2plane_444_unorm_ext.optimal_linear
+dEQP-VK.ycbcr.copy.r16_unorm.g8_b8r8_2plane_444_unorm_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.r16_unorm.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.r16_unorm.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.r16_unorm.g8_b8r8_2plane_444_unorm_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.r16_unorm.g8_b8r8_2plane_444_unorm_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.r16_unorm.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.r16_unorm.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.r16_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_linear
+dEQP-VK.ycbcr.copy.r16_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.r16_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.r16_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.r16_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_optimal
+dEQP-VK.ycbcr.copy.r16_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.r16_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.r16_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.r16_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_linear
+dEQP-VK.ycbcr.copy.r16_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.r16_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.r16_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.r16_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.r16_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.r16_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.r16_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.r16_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_linear
+dEQP-VK.ycbcr.copy.r16_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.r16_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.r16_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.r16_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_optimal
+dEQP-VK.ycbcr.copy.r16_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.r16_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.r16_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.r16_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_linear
+dEQP-VK.ycbcr.copy.r16_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.r16_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.r16_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.r16_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.r16_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.r16_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.r16_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.r16_unorm.g16_b16r16_2plane_444_unorm_ext.linear_linear
+dEQP-VK.ycbcr.copy.r16_unorm.g16_b16r16_2plane_444_unorm_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.r16_unorm.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.r16_unorm.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.r16_unorm.g16_b16r16_2plane_444_unorm_ext.linear_optimal
+dEQP-VK.ycbcr.copy.r16_unorm.g16_b16r16_2plane_444_unorm_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.r16_unorm.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.r16_unorm.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.r16_unorm.g16_b16r16_2plane_444_unorm_ext.optimal_linear
+dEQP-VK.ycbcr.copy.r16_unorm.g16_b16r16_2plane_444_unorm_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.r16_unorm.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.r16_unorm.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.r16_unorm.g16_b16r16_2plane_444_unorm_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.r16_unorm.g16_b16r16_2plane_444_unorm_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.r16_unorm.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.r16_unorm.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.r16g16_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_linear
+dEQP-VK.ycbcr.copy.r16g16_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.r16g16_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.r16g16_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.r16g16_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_optimal
+dEQP-VK.ycbcr.copy.r16g16_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.r16g16_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.r16g16_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.r16g16_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_linear
+dEQP-VK.ycbcr.copy.r16g16_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.r16g16_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.r16g16_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.r16g16_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.r16g16_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.r16g16_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.r16g16_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.r16g16_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_linear
+dEQP-VK.ycbcr.copy.r16g16_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.r16g16_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.r16g16_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.r16g16_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_optimal
+dEQP-VK.ycbcr.copy.r16g16_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.r16g16_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.r16g16_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.r16g16_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_linear
+dEQP-VK.ycbcr.copy.r16g16_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.r16g16_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.r16g16_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.r16g16_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.r16g16_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.r16g16_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.r16g16_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.r16g16_unorm.g16_b16r16_2plane_444_unorm_ext.linear_linear
+dEQP-VK.ycbcr.copy.r16g16_unorm.g16_b16r16_2plane_444_unorm_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.r16g16_unorm.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.r16g16_unorm.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.r16g16_unorm.g16_b16r16_2plane_444_unorm_ext.linear_optimal
+dEQP-VK.ycbcr.copy.r16g16_unorm.g16_b16r16_2plane_444_unorm_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.r16g16_unorm.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.r16g16_unorm.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.r16g16_unorm.g16_b16r16_2plane_444_unorm_ext.optimal_linear
+dEQP-VK.ycbcr.copy.r16g16_unorm.g16_b16r16_2plane_444_unorm_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.r16g16_unorm.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.r16g16_unorm.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.r16g16_unorm.g16_b16r16_2plane_444_unorm_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.r16g16_unorm.g16_b16r16_2plane_444_unorm_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.r16g16_unorm.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.r16g16_unorm.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.b10g11r11_ufloat_pack32.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_linear
+dEQP-VK.ycbcr.copy.b10g11r11_ufloat_pack32.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.b10g11r11_ufloat_pack32.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.b10g11r11_ufloat_pack32.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.b10g11r11_ufloat_pack32.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_optimal
+dEQP-VK.ycbcr.copy.b10g11r11_ufloat_pack32.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.b10g11r11_ufloat_pack32.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.b10g11r11_ufloat_pack32.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.b10g11r11_ufloat_pack32.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_linear
+dEQP-VK.ycbcr.copy.b10g11r11_ufloat_pack32.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.b10g11r11_ufloat_pack32.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.b10g11r11_ufloat_pack32.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.b10g11r11_ufloat_pack32.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.b10g11r11_ufloat_pack32.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.b10g11r11_ufloat_pack32.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.b10g11r11_ufloat_pack32.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.b10g11r11_ufloat_pack32.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_linear
+dEQP-VK.ycbcr.copy.b10g11r11_ufloat_pack32.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.b10g11r11_ufloat_pack32.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.b10g11r11_ufloat_pack32.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.b10g11r11_ufloat_pack32.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_optimal
+dEQP-VK.ycbcr.copy.b10g11r11_ufloat_pack32.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.b10g11r11_ufloat_pack32.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.b10g11r11_ufloat_pack32.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.b10g11r11_ufloat_pack32.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_linear
+dEQP-VK.ycbcr.copy.b10g11r11_ufloat_pack32.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.b10g11r11_ufloat_pack32.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.b10g11r11_ufloat_pack32.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.b10g11r11_ufloat_pack32.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.b10g11r11_ufloat_pack32.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.b10g11r11_ufloat_pack32.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.b10g11r11_ufloat_pack32.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.b10g11r11_ufloat_pack32.g16_b16r16_2plane_444_unorm_ext.linear_linear
+dEQP-VK.ycbcr.copy.b10g11r11_ufloat_pack32.g16_b16r16_2plane_444_unorm_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.b10g11r11_ufloat_pack32.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.b10g11r11_ufloat_pack32.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.b10g11r11_ufloat_pack32.g16_b16r16_2plane_444_unorm_ext.linear_optimal
+dEQP-VK.ycbcr.copy.b10g11r11_ufloat_pack32.g16_b16r16_2plane_444_unorm_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.b10g11r11_ufloat_pack32.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.b10g11r11_ufloat_pack32.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.b10g11r11_ufloat_pack32.g16_b16r16_2plane_444_unorm_ext.optimal_linear
+dEQP-VK.ycbcr.copy.b10g11r11_ufloat_pack32.g16_b16r16_2plane_444_unorm_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.b10g11r11_ufloat_pack32.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.b10g11r11_ufloat_pack32.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.b10g11r11_ufloat_pack32.g16_b16r16_2plane_444_unorm_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.b10g11r11_ufloat_pack32.g16_b16r16_2plane_444_unorm_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.b10g11r11_ufloat_pack32.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.b10g11r11_ufloat_pack32.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8_r8_3plane_420_unorm.g8_b8r8_2plane_444_unorm_ext.linear_linear
+dEQP-VK.ycbcr.copy.g8_b8_r8_3plane_420_unorm.g8_b8r8_2plane_444_unorm_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8_r8_3plane_420_unorm.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g8_b8_r8_3plane_420_unorm.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8_r8_3plane_420_unorm.g8_b8r8_2plane_444_unorm_ext.linear_optimal
+dEQP-VK.ycbcr.copy.g8_b8_r8_3plane_420_unorm.g8_b8r8_2plane_444_unorm_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8_r8_3plane_420_unorm.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g8_b8_r8_3plane_420_unorm.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8_r8_3plane_420_unorm.g8_b8r8_2plane_444_unorm_ext.optimal_linear
+dEQP-VK.ycbcr.copy.g8_b8_r8_3plane_420_unorm.g8_b8r8_2plane_444_unorm_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8_r8_3plane_420_unorm.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g8_b8_r8_3plane_420_unorm.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8_r8_3plane_420_unorm.g8_b8r8_2plane_444_unorm_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.g8_b8_r8_3plane_420_unorm.g8_b8r8_2plane_444_unorm_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8_r8_3plane_420_unorm.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g8_b8_r8_3plane_420_unorm.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_420_unorm.g8_b8r8_2plane_444_unorm_ext.linear_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_420_unorm.g8_b8r8_2plane_444_unorm_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_420_unorm.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_420_unorm.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_420_unorm.g8_b8r8_2plane_444_unorm_ext.linear_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_420_unorm.g8_b8r8_2plane_444_unorm_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_420_unorm.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_420_unorm.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_420_unorm.g8_b8r8_2plane_444_unorm_ext.optimal_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_420_unorm.g8_b8r8_2plane_444_unorm_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_420_unorm.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_420_unorm.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_420_unorm.g8_b8r8_2plane_444_unorm_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_420_unorm.g8_b8r8_2plane_444_unorm_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_420_unorm.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_420_unorm.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_420_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_420_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_420_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_420_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_420_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_420_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_420_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_420_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_420_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_420_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_420_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_420_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_420_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_420_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_420_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_420_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_420_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_420_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_420_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_420_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_420_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_420_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_420_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_420_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_420_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_420_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_420_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_420_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_420_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_420_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_420_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_420_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_420_unorm.g16_b16r16_2plane_444_unorm_ext.linear_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_420_unorm.g16_b16r16_2plane_444_unorm_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_420_unorm.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_420_unorm.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_420_unorm.g16_b16r16_2plane_444_unorm_ext.linear_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_420_unorm.g16_b16r16_2plane_444_unorm_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_420_unorm.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_420_unorm.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_420_unorm.g16_b16r16_2plane_444_unorm_ext.optimal_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_420_unorm.g16_b16r16_2plane_444_unorm_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_420_unorm.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_420_unorm.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_420_unorm.g16_b16r16_2plane_444_unorm_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_420_unorm.g16_b16r16_2plane_444_unorm_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_420_unorm.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_420_unorm.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8_r8_3plane_422_unorm.g8_b8r8_2plane_444_unorm_ext.linear_linear
+dEQP-VK.ycbcr.copy.g8_b8_r8_3plane_422_unorm.g8_b8r8_2plane_444_unorm_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8_r8_3plane_422_unorm.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g8_b8_r8_3plane_422_unorm.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8_r8_3plane_422_unorm.g8_b8r8_2plane_444_unorm_ext.linear_optimal
+dEQP-VK.ycbcr.copy.g8_b8_r8_3plane_422_unorm.g8_b8r8_2plane_444_unorm_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8_r8_3plane_422_unorm.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g8_b8_r8_3plane_422_unorm.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8_r8_3plane_422_unorm.g8_b8r8_2plane_444_unorm_ext.optimal_linear
+dEQP-VK.ycbcr.copy.g8_b8_r8_3plane_422_unorm.g8_b8r8_2plane_444_unorm_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8_r8_3plane_422_unorm.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g8_b8_r8_3plane_422_unorm.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8_r8_3plane_422_unorm.g8_b8r8_2plane_444_unorm_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.g8_b8_r8_3plane_422_unorm.g8_b8r8_2plane_444_unorm_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8_r8_3plane_422_unorm.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g8_b8_r8_3plane_422_unorm.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_422_unorm.g8_b8r8_2plane_444_unorm_ext.linear_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_422_unorm.g8_b8r8_2plane_444_unorm_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_422_unorm.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_422_unorm.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_422_unorm.g8_b8r8_2plane_444_unorm_ext.linear_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_422_unorm.g8_b8r8_2plane_444_unorm_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_422_unorm.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_422_unorm.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_422_unorm.g8_b8r8_2plane_444_unorm_ext.optimal_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_422_unorm.g8_b8r8_2plane_444_unorm_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_422_unorm.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_422_unorm.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_422_unorm.g8_b8r8_2plane_444_unorm_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_422_unorm.g8_b8r8_2plane_444_unorm_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_422_unorm.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_422_unorm.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_422_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_422_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_422_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_422_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_422_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_422_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_422_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_422_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_422_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_422_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_422_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_422_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_422_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_422_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_422_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_422_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_422_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_422_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_422_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_422_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_422_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_422_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_422_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_422_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_422_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_422_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_422_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_422_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_422_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_422_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_422_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_422_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_422_unorm.g16_b16r16_2plane_444_unorm_ext.linear_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_422_unorm.g16_b16r16_2plane_444_unorm_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_422_unorm.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_422_unorm.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_422_unorm.g16_b16r16_2plane_444_unorm_ext.linear_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_422_unorm.g16_b16r16_2plane_444_unorm_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_422_unorm.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_422_unorm.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_422_unorm.g16_b16r16_2plane_444_unorm_ext.optimal_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_422_unorm.g16_b16r16_2plane_444_unorm_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_422_unorm.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_422_unorm.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_422_unorm.g16_b16r16_2plane_444_unorm_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_422_unorm.g16_b16r16_2plane_444_unorm_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_422_unorm.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_422_unorm.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8_r8_3plane_444_unorm.g8_b8r8_2plane_444_unorm_ext.linear_linear
+dEQP-VK.ycbcr.copy.g8_b8_r8_3plane_444_unorm.g8_b8r8_2plane_444_unorm_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8_r8_3plane_444_unorm.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g8_b8_r8_3plane_444_unorm.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8_r8_3plane_444_unorm.g8_b8r8_2plane_444_unorm_ext.linear_optimal
+dEQP-VK.ycbcr.copy.g8_b8_r8_3plane_444_unorm.g8_b8r8_2plane_444_unorm_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8_r8_3plane_444_unorm.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g8_b8_r8_3plane_444_unorm.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8_r8_3plane_444_unorm.g8_b8r8_2plane_444_unorm_ext.optimal_linear
+dEQP-VK.ycbcr.copy.g8_b8_r8_3plane_444_unorm.g8_b8r8_2plane_444_unorm_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8_r8_3plane_444_unorm.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g8_b8_r8_3plane_444_unorm.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8_r8_3plane_444_unorm.g8_b8r8_2plane_444_unorm_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.g8_b8_r8_3plane_444_unorm.g8_b8r8_2plane_444_unorm_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8_r8_3plane_444_unorm.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g8_b8_r8_3plane_444_unorm.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.r10x6_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.linear_linear
+dEQP-VK.ycbcr.copy.r10x6_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.r10x6_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.r10x6_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.r10x6_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.linear_optimal
+dEQP-VK.ycbcr.copy.r10x6_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.r10x6_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.r10x6_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.r10x6_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.optimal_linear
+dEQP-VK.ycbcr.copy.r10x6_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.r10x6_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.r10x6_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.r10x6_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.r10x6_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.r10x6_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.r10x6_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.r10x6_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_linear
+dEQP-VK.ycbcr.copy.r10x6_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.r10x6_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.r10x6_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.r10x6_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_optimal
+dEQP-VK.ycbcr.copy.r10x6_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.r10x6_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.r10x6_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.r10x6_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_linear
+dEQP-VK.ycbcr.copy.r10x6_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.r10x6_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.r10x6_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.r10x6_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.r10x6_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.r10x6_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.r10x6_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.r10x6_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_linear
+dEQP-VK.ycbcr.copy.r10x6_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.r10x6_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.r10x6_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.r10x6_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_optimal
+dEQP-VK.ycbcr.copy.r10x6_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.r10x6_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.r10x6_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.r10x6_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_linear
+dEQP-VK.ycbcr.copy.r10x6_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.r10x6_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.r10x6_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.r10x6_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.r10x6_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.r10x6_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.r10x6_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.r10x6_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.linear_linear
+dEQP-VK.ycbcr.copy.r10x6_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.r10x6_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.r10x6_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.r10x6_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.linear_optimal
+dEQP-VK.ycbcr.copy.r10x6_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.r10x6_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.r10x6_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.r10x6_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.optimal_linear
+dEQP-VK.ycbcr.copy.r10x6_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.r10x6_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.r10x6_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.r10x6_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.r10x6_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.r10x6_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.r10x6_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.r10x6g10x6_unorm_2pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_linear
+dEQP-VK.ycbcr.copy.r10x6g10x6_unorm_2pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.r10x6g10x6_unorm_2pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.r10x6g10x6_unorm_2pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.r10x6g10x6_unorm_2pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_optimal
+dEQP-VK.ycbcr.copy.r10x6g10x6_unorm_2pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.r10x6g10x6_unorm_2pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.r10x6g10x6_unorm_2pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.r10x6g10x6_unorm_2pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_linear
+dEQP-VK.ycbcr.copy.r10x6g10x6_unorm_2pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.r10x6g10x6_unorm_2pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.r10x6g10x6_unorm_2pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.r10x6g10x6_unorm_2pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.r10x6g10x6_unorm_2pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.r10x6g10x6_unorm_2pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.r10x6g10x6_unorm_2pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.r10x6g10x6_unorm_2pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_linear
+dEQP-VK.ycbcr.copy.r10x6g10x6_unorm_2pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.r10x6g10x6_unorm_2pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.r10x6g10x6_unorm_2pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.r10x6g10x6_unorm_2pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_optimal
+dEQP-VK.ycbcr.copy.r10x6g10x6_unorm_2pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.r10x6g10x6_unorm_2pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.r10x6g10x6_unorm_2pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.r10x6g10x6_unorm_2pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_linear
+dEQP-VK.ycbcr.copy.r10x6g10x6_unorm_2pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.r10x6g10x6_unorm_2pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.r10x6g10x6_unorm_2pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.r10x6g10x6_unorm_2pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.r10x6g10x6_unorm_2pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.r10x6g10x6_unorm_2pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.r10x6g10x6_unorm_2pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.r10x6g10x6_unorm_2pack16.g16_b16r16_2plane_444_unorm_ext.linear_linear
+dEQP-VK.ycbcr.copy.r10x6g10x6_unorm_2pack16.g16_b16r16_2plane_444_unorm_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.r10x6g10x6_unorm_2pack16.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.r10x6g10x6_unorm_2pack16.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.r10x6g10x6_unorm_2pack16.g16_b16r16_2plane_444_unorm_ext.linear_optimal
+dEQP-VK.ycbcr.copy.r10x6g10x6_unorm_2pack16.g16_b16r16_2plane_444_unorm_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.r10x6g10x6_unorm_2pack16.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.r10x6g10x6_unorm_2pack16.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.r10x6g10x6_unorm_2pack16.g16_b16r16_2plane_444_unorm_ext.optimal_linear
+dEQP-VK.ycbcr.copy.r10x6g10x6_unorm_2pack16.g16_b16r16_2plane_444_unorm_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.r10x6g10x6_unorm_2pack16.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.r10x6g10x6_unorm_2pack16.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.r10x6g10x6_unorm_2pack16.g16_b16r16_2plane_444_unorm_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.r10x6g10x6_unorm_2pack16.g16_b16r16_2plane_444_unorm_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.r10x6g10x6_unorm_2pack16.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.r10x6g10x6_unorm_2pack16.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.linear_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.linear_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.optimal_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.linear_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.linear_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.optimal_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.linear_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.linear_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.optimal_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.linear_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.linear_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.optimal_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.linear_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.linear_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.optimal_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.linear_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.linear_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.optimal_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.linear_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.linear_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.optimal_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.linear_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.linear_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.optimal_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.linear_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.linear_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.optimal_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.linear_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.linear_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.optimal_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.r12x4_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.linear_linear
+dEQP-VK.ycbcr.copy.r12x4_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.r12x4_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.r12x4_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.r12x4_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.linear_optimal
+dEQP-VK.ycbcr.copy.r12x4_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.r12x4_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.r12x4_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.r12x4_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.optimal_linear
+dEQP-VK.ycbcr.copy.r12x4_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.r12x4_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.r12x4_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.r12x4_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.r12x4_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.r12x4_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.r12x4_unorm_pack16.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.r12x4_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_linear
+dEQP-VK.ycbcr.copy.r12x4_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.r12x4_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.r12x4_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.r12x4_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_optimal
+dEQP-VK.ycbcr.copy.r12x4_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.r12x4_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.r12x4_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.r12x4_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_linear
+dEQP-VK.ycbcr.copy.r12x4_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.r12x4_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.r12x4_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.r12x4_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.r12x4_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.r12x4_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.r12x4_unorm_pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.r12x4_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_linear
+dEQP-VK.ycbcr.copy.r12x4_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.r12x4_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.r12x4_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.r12x4_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_optimal
+dEQP-VK.ycbcr.copy.r12x4_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.r12x4_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.r12x4_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.r12x4_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_linear
+dEQP-VK.ycbcr.copy.r12x4_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.r12x4_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.r12x4_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.r12x4_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.r12x4_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.r12x4_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.r12x4_unorm_pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.r12x4_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.linear_linear
+dEQP-VK.ycbcr.copy.r12x4_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.r12x4_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.r12x4_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.r12x4_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.linear_optimal
+dEQP-VK.ycbcr.copy.r12x4_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.r12x4_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.r12x4_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.r12x4_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.optimal_linear
+dEQP-VK.ycbcr.copy.r12x4_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.r12x4_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.r12x4_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.r12x4_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.r12x4_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.r12x4_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.r12x4_unorm_pack16.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.r12x4g12x4_unorm_2pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_linear
+dEQP-VK.ycbcr.copy.r12x4g12x4_unorm_2pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.r12x4g12x4_unorm_2pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.r12x4g12x4_unorm_2pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.r12x4g12x4_unorm_2pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_optimal
+dEQP-VK.ycbcr.copy.r12x4g12x4_unorm_2pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.r12x4g12x4_unorm_2pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.r12x4g12x4_unorm_2pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.r12x4g12x4_unorm_2pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_linear
+dEQP-VK.ycbcr.copy.r12x4g12x4_unorm_2pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.r12x4g12x4_unorm_2pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.r12x4g12x4_unorm_2pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.r12x4g12x4_unorm_2pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.r12x4g12x4_unorm_2pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.r12x4g12x4_unorm_2pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.r12x4g12x4_unorm_2pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.r12x4g12x4_unorm_2pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_linear
+dEQP-VK.ycbcr.copy.r12x4g12x4_unorm_2pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.r12x4g12x4_unorm_2pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.r12x4g12x4_unorm_2pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.r12x4g12x4_unorm_2pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_optimal
+dEQP-VK.ycbcr.copy.r12x4g12x4_unorm_2pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.r12x4g12x4_unorm_2pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.r12x4g12x4_unorm_2pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.r12x4g12x4_unorm_2pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_linear
+dEQP-VK.ycbcr.copy.r12x4g12x4_unorm_2pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.r12x4g12x4_unorm_2pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.r12x4g12x4_unorm_2pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.r12x4g12x4_unorm_2pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.r12x4g12x4_unorm_2pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.r12x4g12x4_unorm_2pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.r12x4g12x4_unorm_2pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.r12x4g12x4_unorm_2pack16.g16_b16r16_2plane_444_unorm_ext.linear_linear
+dEQP-VK.ycbcr.copy.r12x4g12x4_unorm_2pack16.g16_b16r16_2plane_444_unorm_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.r12x4g12x4_unorm_2pack16.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.r12x4g12x4_unorm_2pack16.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.r12x4g12x4_unorm_2pack16.g16_b16r16_2plane_444_unorm_ext.linear_optimal
+dEQP-VK.ycbcr.copy.r12x4g12x4_unorm_2pack16.g16_b16r16_2plane_444_unorm_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.r12x4g12x4_unorm_2pack16.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.r12x4g12x4_unorm_2pack16.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.r12x4g12x4_unorm_2pack16.g16_b16r16_2plane_444_unorm_ext.optimal_linear
+dEQP-VK.ycbcr.copy.r12x4g12x4_unorm_2pack16.g16_b16r16_2plane_444_unorm_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.r12x4g12x4_unorm_2pack16.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.r12x4g12x4_unorm_2pack16.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.r12x4g12x4_unorm_2pack16.g16_b16r16_2plane_444_unorm_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.r12x4g12x4_unorm_2pack16.g16_b16r16_2plane_444_unorm_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.r12x4g12x4_unorm_2pack16.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.r12x4g12x4_unorm_2pack16.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.linear_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.linear_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.optimal_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.linear_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.linear_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.optimal_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.linear_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.linear_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.optimal_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.linear_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.linear_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.optimal_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.linear_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.linear_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.optimal_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.linear_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.linear_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.optimal_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.linear_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.linear_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.optimal_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.linear_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.linear_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.optimal_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.linear_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.linear_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.optimal_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.linear_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.linear_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.optimal_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_420_unorm.g8_b8r8_2plane_444_unorm_ext.linear_linear
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_420_unorm.g8_b8r8_2plane_444_unorm_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_420_unorm.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_420_unorm.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_420_unorm.g8_b8r8_2plane_444_unorm_ext.linear_optimal
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_420_unorm.g8_b8r8_2plane_444_unorm_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_420_unorm.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_420_unorm.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_420_unorm.g8_b8r8_2plane_444_unorm_ext.optimal_linear
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_420_unorm.g8_b8r8_2plane_444_unorm_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_420_unorm.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_420_unorm.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_420_unorm.g8_b8r8_2plane_444_unorm_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_420_unorm.g8_b8r8_2plane_444_unorm_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_420_unorm.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_420_unorm.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_420_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_linear
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_420_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_420_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_420_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_420_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_optimal
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_420_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_420_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_420_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_420_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_linear
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_420_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_420_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_420_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_420_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_420_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_420_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_420_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_420_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_linear
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_420_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_420_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_420_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_420_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_optimal
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_420_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_420_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_420_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_420_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_linear
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_420_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_420_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_420_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_420_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_420_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_420_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_420_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_420_unorm.g16_b16r16_2plane_444_unorm_ext.linear_linear
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_420_unorm.g16_b16r16_2plane_444_unorm_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_420_unorm.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_420_unorm.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_420_unorm.g16_b16r16_2plane_444_unorm_ext.linear_optimal
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_420_unorm.g16_b16r16_2plane_444_unorm_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_420_unorm.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_420_unorm.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_420_unorm.g16_b16r16_2plane_444_unorm_ext.optimal_linear
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_420_unorm.g16_b16r16_2plane_444_unorm_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_420_unorm.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_420_unorm.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_420_unorm.g16_b16r16_2plane_444_unorm_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_420_unorm.g16_b16r16_2plane_444_unorm_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_420_unorm.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_420_unorm.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_420_unorm.g8_b8r8_2plane_444_unorm_ext.linear_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_420_unorm.g8_b8r8_2plane_444_unorm_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_420_unorm.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_420_unorm.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_420_unorm.g8_b8r8_2plane_444_unorm_ext.linear_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_420_unorm.g8_b8r8_2plane_444_unorm_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_420_unorm.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_420_unorm.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_420_unorm.g8_b8r8_2plane_444_unorm_ext.optimal_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_420_unorm.g8_b8r8_2plane_444_unorm_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_420_unorm.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_420_unorm.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_420_unorm.g8_b8r8_2plane_444_unorm_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_420_unorm.g8_b8r8_2plane_444_unorm_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_420_unorm.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_420_unorm.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_420_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_420_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_420_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_420_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_420_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_420_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_420_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_420_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_420_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_420_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_420_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_420_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_420_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_420_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_420_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_420_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_420_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_420_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_420_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_420_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_420_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_420_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_420_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_420_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_420_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_420_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_420_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_420_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_420_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_420_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_420_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_420_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_420_unorm.g16_b16r16_2plane_444_unorm_ext.linear_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_420_unorm.g16_b16r16_2plane_444_unorm_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_420_unorm.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_420_unorm.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_420_unorm.g16_b16r16_2plane_444_unorm_ext.linear_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_420_unorm.g16_b16r16_2plane_444_unorm_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_420_unorm.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_420_unorm.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_420_unorm.g16_b16r16_2plane_444_unorm_ext.optimal_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_420_unorm.g16_b16r16_2plane_444_unorm_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_420_unorm.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_420_unorm.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_420_unorm.g16_b16r16_2plane_444_unorm_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_420_unorm.g16_b16r16_2plane_444_unorm_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_420_unorm.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_420_unorm.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_422_unorm.g8_b8r8_2plane_444_unorm_ext.linear_linear
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_422_unorm.g8_b8r8_2plane_444_unorm_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_422_unorm.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_422_unorm.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_422_unorm.g8_b8r8_2plane_444_unorm_ext.linear_optimal
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_422_unorm.g8_b8r8_2plane_444_unorm_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_422_unorm.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_422_unorm.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_422_unorm.g8_b8r8_2plane_444_unorm_ext.optimal_linear
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_422_unorm.g8_b8r8_2plane_444_unorm_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_422_unorm.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_422_unorm.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_422_unorm.g8_b8r8_2plane_444_unorm_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_422_unorm.g8_b8r8_2plane_444_unorm_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_422_unorm.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_422_unorm.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_422_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_linear
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_422_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_422_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_422_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_422_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_optimal
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_422_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_422_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_422_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_422_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_linear
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_422_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_422_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_422_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_422_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_422_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_422_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_422_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_422_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_linear
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_422_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_422_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_422_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_422_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_optimal
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_422_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_422_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_422_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_422_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_linear
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_422_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_422_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_422_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_422_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_422_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_422_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_422_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_422_unorm.g16_b16r16_2plane_444_unorm_ext.linear_linear
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_422_unorm.g16_b16r16_2plane_444_unorm_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_422_unorm.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_422_unorm.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_422_unorm.g16_b16r16_2plane_444_unorm_ext.linear_optimal
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_422_unorm.g16_b16r16_2plane_444_unorm_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_422_unorm.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_422_unorm.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_422_unorm.g16_b16r16_2plane_444_unorm_ext.optimal_linear
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_422_unorm.g16_b16r16_2plane_444_unorm_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_422_unorm.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_422_unorm.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_422_unorm.g16_b16r16_2plane_444_unorm_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_422_unorm.g16_b16r16_2plane_444_unorm_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_422_unorm.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_422_unorm.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_422_unorm.g8_b8r8_2plane_444_unorm_ext.linear_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_422_unorm.g8_b8r8_2plane_444_unorm_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_422_unorm.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_422_unorm.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_422_unorm.g8_b8r8_2plane_444_unorm_ext.linear_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_422_unorm.g8_b8r8_2plane_444_unorm_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_422_unorm.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_422_unorm.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_422_unorm.g8_b8r8_2plane_444_unorm_ext.optimal_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_422_unorm.g8_b8r8_2plane_444_unorm_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_422_unorm.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_422_unorm.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_422_unorm.g8_b8r8_2plane_444_unorm_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_422_unorm.g8_b8r8_2plane_444_unorm_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_422_unorm.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_422_unorm.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_422_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_422_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_422_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_422_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_422_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_422_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_422_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_422_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_422_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_422_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_422_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_422_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_422_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_422_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_422_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_422_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_422_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_422_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_422_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_422_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_422_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_422_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_422_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_422_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_422_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_422_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_422_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_422_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_422_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_422_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_422_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_422_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_422_unorm.g16_b16r16_2plane_444_unorm_ext.linear_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_422_unorm.g16_b16r16_2plane_444_unorm_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_422_unorm.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_422_unorm.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_422_unorm.g16_b16r16_2plane_444_unorm_ext.linear_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_422_unorm.g16_b16r16_2plane_444_unorm_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_422_unorm.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_422_unorm.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_422_unorm.g16_b16r16_2plane_444_unorm_ext.optimal_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_422_unorm.g16_b16r16_2plane_444_unorm_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_422_unorm.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_422_unorm.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_422_unorm.g16_b16r16_2plane_444_unorm_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_422_unorm.g16_b16r16_2plane_444_unorm_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_422_unorm.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_422_unorm.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_444_unorm.g8_b8r8_2plane_444_unorm_ext.linear_linear
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_444_unorm.g8_b8r8_2plane_444_unorm_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_444_unorm.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_444_unorm.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_444_unorm.g8_b8r8_2plane_444_unorm_ext.linear_optimal
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_444_unorm.g8_b8r8_2plane_444_unorm_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_444_unorm.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_444_unorm.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_444_unorm.g8_b8r8_2plane_444_unorm_ext.optimal_linear
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_444_unorm.g8_b8r8_2plane_444_unorm_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_444_unorm.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_444_unorm.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_444_unorm.g8_b8r8_2plane_444_unorm_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_444_unorm.g8_b8r8_2plane_444_unorm_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_444_unorm.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_444_unorm.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_444_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_linear
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_444_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_444_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_444_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_444_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_optimal
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_444_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_444_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_444_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_444_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_linear
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_444_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_444_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_444_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_444_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_444_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_444_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_444_unorm.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_444_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_linear
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_444_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_444_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_444_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_444_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_optimal
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_444_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_444_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_444_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_444_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_linear
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_444_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_444_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_444_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_444_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_444_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_444_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_444_unorm.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_444_unorm.g16_b16r16_2plane_444_unorm_ext.linear_linear
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_444_unorm.g16_b16r16_2plane_444_unorm_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_444_unorm.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_444_unorm.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_444_unorm.g16_b16r16_2plane_444_unorm_ext.linear_optimal
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_444_unorm.g16_b16r16_2plane_444_unorm_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_444_unorm.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_444_unorm.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_444_unorm.g16_b16r16_2plane_444_unorm_ext.optimal_linear
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_444_unorm.g16_b16r16_2plane_444_unorm_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_444_unorm.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_444_unorm.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_444_unorm.g16_b16r16_2plane_444_unorm_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_444_unorm.g16_b16r16_2plane_444_unorm_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_444_unorm.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16_r16_3plane_444_unorm.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r4g4_unorm_pack8.linear_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r4g4_unorm_pack8.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r4g4_unorm_pack8.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r4g4_unorm_pack8.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r4g4_unorm_pack8.linear_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r4g4_unorm_pack8.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r4g4_unorm_pack8.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r4g4_unorm_pack8.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r4g4_unorm_pack8.optimal_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r4g4_unorm_pack8.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r4g4_unorm_pack8.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r4g4_unorm_pack8.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r4g4_unorm_pack8.optimal_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r4g4_unorm_pack8.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r4g4_unorm_pack8.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r4g4_unorm_pack8.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r4g4b4a4_unorm_pack16.linear_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r4g4b4a4_unorm_pack16.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r4g4b4a4_unorm_pack16.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r4g4b4a4_unorm_pack16.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r4g4b4a4_unorm_pack16.linear_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r4g4b4a4_unorm_pack16.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r4g4b4a4_unorm_pack16.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r4g4b4a4_unorm_pack16.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r4g4b4a4_unorm_pack16.optimal_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r4g4b4a4_unorm_pack16.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r4g4b4a4_unorm_pack16.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r4g4b4a4_unorm_pack16.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r4g4b4a4_unorm_pack16.optimal_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r4g4b4a4_unorm_pack16.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r4g4b4a4_unorm_pack16.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r4g4b4a4_unorm_pack16.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.b4g4r4a4_unorm_pack16.linear_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.b4g4r4a4_unorm_pack16.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.b4g4r4a4_unorm_pack16.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.b4g4r4a4_unorm_pack16.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.b4g4r4a4_unorm_pack16.linear_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.b4g4r4a4_unorm_pack16.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.b4g4r4a4_unorm_pack16.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.b4g4r4a4_unorm_pack16.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.b4g4r4a4_unorm_pack16.optimal_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.b4g4r4a4_unorm_pack16.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.b4g4r4a4_unorm_pack16.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.b4g4r4a4_unorm_pack16.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.b4g4r4a4_unorm_pack16.optimal_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.b4g4r4a4_unorm_pack16.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.b4g4r4a4_unorm_pack16.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.b4g4r4a4_unorm_pack16.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r5g6b5_unorm_pack16.linear_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r5g6b5_unorm_pack16.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r5g6b5_unorm_pack16.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r5g6b5_unorm_pack16.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r5g6b5_unorm_pack16.linear_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r5g6b5_unorm_pack16.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r5g6b5_unorm_pack16.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r5g6b5_unorm_pack16.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r5g6b5_unorm_pack16.optimal_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r5g6b5_unorm_pack16.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r5g6b5_unorm_pack16.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r5g6b5_unorm_pack16.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r5g6b5_unorm_pack16.optimal_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r5g6b5_unorm_pack16.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r5g6b5_unorm_pack16.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r5g6b5_unorm_pack16.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.b5g6r5_unorm_pack16.linear_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.b5g6r5_unorm_pack16.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.b5g6r5_unorm_pack16.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.b5g6r5_unorm_pack16.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.b5g6r5_unorm_pack16.linear_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.b5g6r5_unorm_pack16.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.b5g6r5_unorm_pack16.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.b5g6r5_unorm_pack16.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.b5g6r5_unorm_pack16.optimal_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.b5g6r5_unorm_pack16.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.b5g6r5_unorm_pack16.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.b5g6r5_unorm_pack16.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.b5g6r5_unorm_pack16.optimal_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.b5g6r5_unorm_pack16.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.b5g6r5_unorm_pack16.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.b5g6r5_unorm_pack16.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r5g5b5a1_unorm_pack16.linear_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r5g5b5a1_unorm_pack16.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r5g5b5a1_unorm_pack16.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r5g5b5a1_unorm_pack16.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r5g5b5a1_unorm_pack16.linear_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r5g5b5a1_unorm_pack16.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r5g5b5a1_unorm_pack16.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r5g5b5a1_unorm_pack16.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r5g5b5a1_unorm_pack16.optimal_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r5g5b5a1_unorm_pack16.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r5g5b5a1_unorm_pack16.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r5g5b5a1_unorm_pack16.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r5g5b5a1_unorm_pack16.optimal_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r5g5b5a1_unorm_pack16.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r5g5b5a1_unorm_pack16.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r5g5b5a1_unorm_pack16.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.b5g5r5a1_unorm_pack16.linear_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.b5g5r5a1_unorm_pack16.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.b5g5r5a1_unorm_pack16.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.b5g5r5a1_unorm_pack16.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.b5g5r5a1_unorm_pack16.linear_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.b5g5r5a1_unorm_pack16.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.b5g5r5a1_unorm_pack16.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.b5g5r5a1_unorm_pack16.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.b5g5r5a1_unorm_pack16.optimal_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.b5g5r5a1_unorm_pack16.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.b5g5r5a1_unorm_pack16.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.b5g5r5a1_unorm_pack16.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.b5g5r5a1_unorm_pack16.optimal_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.b5g5r5a1_unorm_pack16.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.b5g5r5a1_unorm_pack16.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.b5g5r5a1_unorm_pack16.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.a1r5g5b5_unorm_pack16.linear_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.a1r5g5b5_unorm_pack16.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.a1r5g5b5_unorm_pack16.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.a1r5g5b5_unorm_pack16.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.a1r5g5b5_unorm_pack16.linear_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.a1r5g5b5_unorm_pack16.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.a1r5g5b5_unorm_pack16.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.a1r5g5b5_unorm_pack16.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.a1r5g5b5_unorm_pack16.optimal_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.a1r5g5b5_unorm_pack16.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.a1r5g5b5_unorm_pack16.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.a1r5g5b5_unorm_pack16.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.a1r5g5b5_unorm_pack16.optimal_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.a1r5g5b5_unorm_pack16.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.a1r5g5b5_unorm_pack16.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.a1r5g5b5_unorm_pack16.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r8_unorm.linear_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r8_unorm.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r8_unorm.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r8_unorm.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r8_unorm.linear_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r8_unorm.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r8_unorm.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r8_unorm.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r8_unorm.optimal_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r8_unorm.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r8_unorm.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r8_unorm.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r8_unorm.optimal_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r8_unorm.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r8_unorm.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r8_unorm.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r8g8_unorm.linear_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r8g8_unorm.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r8g8_unorm.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r8g8_unorm.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r8g8_unorm.linear_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r8g8_unorm.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r8g8_unorm.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r8g8_unorm.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r8g8_unorm.optimal_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r8g8_unorm.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r8g8_unorm.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r8g8_unorm.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r8g8_unorm.optimal_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r8g8_unorm.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r8g8_unorm.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r8g8_unorm.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r16_unorm.linear_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r16_unorm.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r16_unorm.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r16_unorm.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r16_unorm.linear_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r16_unorm.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r16_unorm.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r16_unorm.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r16_unorm.optimal_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r16_unorm.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r16_unorm.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r16_unorm.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r16_unorm.optimal_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r16_unorm.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r16_unorm.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r16_unorm.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g8_b8_r8_3plane_420_unorm.linear_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g8_b8_r8_3plane_420_unorm.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g8_b8_r8_3plane_420_unorm.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g8_b8_r8_3plane_420_unorm.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g8_b8_r8_3plane_420_unorm.linear_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g8_b8_r8_3plane_420_unorm.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g8_b8_r8_3plane_420_unorm.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g8_b8_r8_3plane_420_unorm.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g8_b8_r8_3plane_420_unorm.optimal_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g8_b8_r8_3plane_420_unorm.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g8_b8_r8_3plane_420_unorm.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g8_b8_r8_3plane_420_unorm.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g8_b8_r8_3plane_420_unorm.optimal_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g8_b8_r8_3plane_420_unorm.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g8_b8_r8_3plane_420_unorm.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g8_b8_r8_3plane_420_unorm.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g8_b8r8_2plane_420_unorm.linear_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g8_b8r8_2plane_420_unorm.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g8_b8r8_2plane_420_unorm.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g8_b8r8_2plane_420_unorm.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g8_b8r8_2plane_420_unorm.linear_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g8_b8r8_2plane_420_unorm.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g8_b8r8_2plane_420_unorm.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g8_b8r8_2plane_420_unorm.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g8_b8r8_2plane_420_unorm.optimal_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g8_b8r8_2plane_420_unorm.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g8_b8r8_2plane_420_unorm.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g8_b8r8_2plane_420_unorm.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g8_b8r8_2plane_420_unorm.optimal_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g8_b8r8_2plane_420_unorm.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g8_b8r8_2plane_420_unorm.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g8_b8r8_2plane_420_unorm.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g8_b8_r8_3plane_422_unorm.linear_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g8_b8_r8_3plane_422_unorm.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g8_b8_r8_3plane_422_unorm.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g8_b8_r8_3plane_422_unorm.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g8_b8_r8_3plane_422_unorm.linear_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g8_b8_r8_3plane_422_unorm.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g8_b8_r8_3plane_422_unorm.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g8_b8_r8_3plane_422_unorm.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g8_b8_r8_3plane_422_unorm.optimal_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g8_b8_r8_3plane_422_unorm.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g8_b8_r8_3plane_422_unorm.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g8_b8_r8_3plane_422_unorm.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g8_b8_r8_3plane_422_unorm.optimal_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g8_b8_r8_3plane_422_unorm.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g8_b8_r8_3plane_422_unorm.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g8_b8_r8_3plane_422_unorm.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g8_b8r8_2plane_422_unorm.linear_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g8_b8r8_2plane_422_unorm.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g8_b8r8_2plane_422_unorm.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g8_b8r8_2plane_422_unorm.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g8_b8r8_2plane_422_unorm.linear_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g8_b8r8_2plane_422_unorm.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g8_b8r8_2plane_422_unorm.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g8_b8r8_2plane_422_unorm.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g8_b8r8_2plane_422_unorm.optimal_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g8_b8r8_2plane_422_unorm.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g8_b8r8_2plane_422_unorm.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g8_b8r8_2plane_422_unorm.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g8_b8r8_2plane_422_unorm.optimal_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g8_b8r8_2plane_422_unorm.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g8_b8r8_2plane_422_unorm.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g8_b8r8_2plane_422_unorm.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g8_b8_r8_3plane_444_unorm.linear_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g8_b8_r8_3plane_444_unorm.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g8_b8_r8_3plane_444_unorm.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g8_b8_r8_3plane_444_unorm.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g8_b8_r8_3plane_444_unorm.linear_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g8_b8_r8_3plane_444_unorm.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g8_b8_r8_3plane_444_unorm.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g8_b8_r8_3plane_444_unorm.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g8_b8_r8_3plane_444_unorm.optimal_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g8_b8_r8_3plane_444_unorm.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g8_b8_r8_3plane_444_unorm.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g8_b8_r8_3plane_444_unorm.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g8_b8_r8_3plane_444_unorm.optimal_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g8_b8_r8_3plane_444_unorm.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g8_b8_r8_3plane_444_unorm.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g8_b8_r8_3plane_444_unorm.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r10x6_unorm_pack16.linear_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r10x6_unorm_pack16.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r10x6_unorm_pack16.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r10x6_unorm_pack16.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r10x6_unorm_pack16.linear_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r10x6_unorm_pack16.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r10x6_unorm_pack16.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r10x6_unorm_pack16.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r10x6_unorm_pack16.optimal_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r10x6_unorm_pack16.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r10x6_unorm_pack16.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r10x6_unorm_pack16.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r10x6_unorm_pack16.optimal_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r10x6_unorm_pack16.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r10x6_unorm_pack16.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r10x6_unorm_pack16.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.linear_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.linear_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.optimal_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.optimal_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.linear_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.linear_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.optimal_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.optimal_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.linear_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.linear_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.optimal_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.optimal_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.linear_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.linear_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.optimal_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.optimal_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.linear_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.linear_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.optimal_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.optimal_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r12x4_unorm_pack16.linear_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r12x4_unorm_pack16.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r12x4_unorm_pack16.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r12x4_unorm_pack16.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r12x4_unorm_pack16.linear_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r12x4_unorm_pack16.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r12x4_unorm_pack16.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r12x4_unorm_pack16.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r12x4_unorm_pack16.optimal_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r12x4_unorm_pack16.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r12x4_unorm_pack16.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r12x4_unorm_pack16.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r12x4_unorm_pack16.optimal_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r12x4_unorm_pack16.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r12x4_unorm_pack16.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.r12x4_unorm_pack16.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.linear_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.linear_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.optimal_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.optimal_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.linear_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.linear_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.optimal_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.optimal_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.linear_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.linear_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.optimal_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.optimal_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.linear_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.linear_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.optimal_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.optimal_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.linear_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.linear_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.optimal_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.optimal_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g16_b16_r16_3plane_420_unorm.linear_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g16_b16_r16_3plane_420_unorm.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g16_b16_r16_3plane_420_unorm.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g16_b16_r16_3plane_420_unorm.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g16_b16_r16_3plane_420_unorm.linear_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g16_b16_r16_3plane_420_unorm.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g16_b16_r16_3plane_420_unorm.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g16_b16_r16_3plane_420_unorm.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g16_b16_r16_3plane_420_unorm.optimal_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g16_b16_r16_3plane_420_unorm.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g16_b16_r16_3plane_420_unorm.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g16_b16_r16_3plane_420_unorm.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g16_b16_r16_3plane_420_unorm.optimal_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g16_b16_r16_3plane_420_unorm.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g16_b16_r16_3plane_420_unorm.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g16_b16_r16_3plane_420_unorm.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g16_b16r16_2plane_420_unorm.linear_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g16_b16r16_2plane_420_unorm.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g16_b16r16_2plane_420_unorm.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g16_b16r16_2plane_420_unorm.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g16_b16r16_2plane_420_unorm.linear_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g16_b16r16_2plane_420_unorm.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g16_b16r16_2plane_420_unorm.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g16_b16r16_2plane_420_unorm.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g16_b16r16_2plane_420_unorm.optimal_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g16_b16r16_2plane_420_unorm.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g16_b16r16_2plane_420_unorm.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g16_b16r16_2plane_420_unorm.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g16_b16r16_2plane_420_unorm.optimal_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g16_b16r16_2plane_420_unorm.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g16_b16r16_2plane_420_unorm.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g16_b16r16_2plane_420_unorm.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g16_b16_r16_3plane_422_unorm.linear_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g16_b16_r16_3plane_422_unorm.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g16_b16_r16_3plane_422_unorm.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g16_b16_r16_3plane_422_unorm.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g16_b16_r16_3plane_422_unorm.linear_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g16_b16_r16_3plane_422_unorm.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g16_b16_r16_3plane_422_unorm.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g16_b16_r16_3plane_422_unorm.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g16_b16_r16_3plane_422_unorm.optimal_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g16_b16_r16_3plane_422_unorm.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g16_b16_r16_3plane_422_unorm.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g16_b16_r16_3plane_422_unorm.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g16_b16_r16_3plane_422_unorm.optimal_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g16_b16_r16_3plane_422_unorm.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g16_b16_r16_3plane_422_unorm.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g16_b16_r16_3plane_422_unorm.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g16_b16r16_2plane_422_unorm.linear_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g16_b16r16_2plane_422_unorm.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g16_b16r16_2plane_422_unorm.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g16_b16r16_2plane_422_unorm.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g16_b16r16_2plane_422_unorm.linear_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g16_b16r16_2plane_422_unorm.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g16_b16r16_2plane_422_unorm.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g16_b16r16_2plane_422_unorm.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g16_b16r16_2plane_422_unorm.optimal_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g16_b16r16_2plane_422_unorm.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g16_b16r16_2plane_422_unorm.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g16_b16r16_2plane_422_unorm.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g16_b16r16_2plane_422_unorm.optimal_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g16_b16r16_2plane_422_unorm.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g16_b16r16_2plane_422_unorm.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g16_b16r16_2plane_422_unorm.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g16_b16_r16_3plane_444_unorm.linear_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g16_b16_r16_3plane_444_unorm.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g16_b16_r16_3plane_444_unorm.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g16_b16_r16_3plane_444_unorm.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g16_b16_r16_3plane_444_unorm.linear_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g16_b16_r16_3plane_444_unorm.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g16_b16_r16_3plane_444_unorm.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g16_b16_r16_3plane_444_unorm.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g16_b16_r16_3plane_444_unorm.optimal_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g16_b16_r16_3plane_444_unorm.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g16_b16_r16_3plane_444_unorm.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g16_b16_r16_3plane_444_unorm.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g16_b16_r16_3plane_444_unorm.optimal_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g16_b16_r16_3plane_444_unorm.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g16_b16_r16_3plane_444_unorm.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g16_b16_r16_3plane_444_unorm.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g8_b8r8_2plane_444_unorm_ext.linear_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g8_b8r8_2plane_444_unorm_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g8_b8r8_2plane_444_unorm_ext.linear_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g8_b8r8_2plane_444_unorm_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g8_b8r8_2plane_444_unorm_ext.optimal_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g8_b8r8_2plane_444_unorm_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g8_b8r8_2plane_444_unorm_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g8_b8r8_2plane_444_unorm_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g16_b16r16_2plane_444_unorm_ext.linear_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g16_b16r16_2plane_444_unorm_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g16_b16r16_2plane_444_unorm_ext.linear_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g16_b16r16_2plane_444_unorm_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g16_b16r16_2plane_444_unorm_ext.optimal_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g16_b16r16_2plane_444_unorm_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g16_b16r16_2plane_444_unorm_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g16_b16r16_2plane_444_unorm_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g8_b8r8_2plane_444_unorm_ext.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r4g4b4a4_unorm_pack16.linear_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r4g4b4a4_unorm_pack16.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r4g4b4a4_unorm_pack16.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r4g4b4a4_unorm_pack16.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r4g4b4a4_unorm_pack16.linear_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r4g4b4a4_unorm_pack16.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r4g4b4a4_unorm_pack16.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r4g4b4a4_unorm_pack16.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r4g4b4a4_unorm_pack16.optimal_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r4g4b4a4_unorm_pack16.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r4g4b4a4_unorm_pack16.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r4g4b4a4_unorm_pack16.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r4g4b4a4_unorm_pack16.optimal_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r4g4b4a4_unorm_pack16.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r4g4b4a4_unorm_pack16.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r4g4b4a4_unorm_pack16.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.b4g4r4a4_unorm_pack16.linear_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.b4g4r4a4_unorm_pack16.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.b4g4r4a4_unorm_pack16.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.b4g4r4a4_unorm_pack16.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.b4g4r4a4_unorm_pack16.linear_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.b4g4r4a4_unorm_pack16.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.b4g4r4a4_unorm_pack16.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.b4g4r4a4_unorm_pack16.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.b4g4r4a4_unorm_pack16.optimal_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.b4g4r4a4_unorm_pack16.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.b4g4r4a4_unorm_pack16.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.b4g4r4a4_unorm_pack16.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.b4g4r4a4_unorm_pack16.optimal_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.b4g4r4a4_unorm_pack16.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.b4g4r4a4_unorm_pack16.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.b4g4r4a4_unorm_pack16.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r5g6b5_unorm_pack16.linear_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r5g6b5_unorm_pack16.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r5g6b5_unorm_pack16.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r5g6b5_unorm_pack16.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r5g6b5_unorm_pack16.linear_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r5g6b5_unorm_pack16.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r5g6b5_unorm_pack16.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r5g6b5_unorm_pack16.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r5g6b5_unorm_pack16.optimal_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r5g6b5_unorm_pack16.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r5g6b5_unorm_pack16.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r5g6b5_unorm_pack16.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r5g6b5_unorm_pack16.optimal_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r5g6b5_unorm_pack16.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r5g6b5_unorm_pack16.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r5g6b5_unorm_pack16.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.b5g6r5_unorm_pack16.linear_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.b5g6r5_unorm_pack16.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.b5g6r5_unorm_pack16.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.b5g6r5_unorm_pack16.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.b5g6r5_unorm_pack16.linear_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.b5g6r5_unorm_pack16.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.b5g6r5_unorm_pack16.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.b5g6r5_unorm_pack16.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.b5g6r5_unorm_pack16.optimal_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.b5g6r5_unorm_pack16.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.b5g6r5_unorm_pack16.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.b5g6r5_unorm_pack16.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.b5g6r5_unorm_pack16.optimal_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.b5g6r5_unorm_pack16.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.b5g6r5_unorm_pack16.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.b5g6r5_unorm_pack16.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r5g5b5a1_unorm_pack16.linear_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r5g5b5a1_unorm_pack16.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r5g5b5a1_unorm_pack16.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r5g5b5a1_unorm_pack16.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r5g5b5a1_unorm_pack16.linear_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r5g5b5a1_unorm_pack16.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r5g5b5a1_unorm_pack16.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r5g5b5a1_unorm_pack16.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r5g5b5a1_unorm_pack16.optimal_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r5g5b5a1_unorm_pack16.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r5g5b5a1_unorm_pack16.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r5g5b5a1_unorm_pack16.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r5g5b5a1_unorm_pack16.optimal_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r5g5b5a1_unorm_pack16.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r5g5b5a1_unorm_pack16.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r5g5b5a1_unorm_pack16.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.b5g5r5a1_unorm_pack16.linear_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.b5g5r5a1_unorm_pack16.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.b5g5r5a1_unorm_pack16.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.b5g5r5a1_unorm_pack16.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.b5g5r5a1_unorm_pack16.linear_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.b5g5r5a1_unorm_pack16.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.b5g5r5a1_unorm_pack16.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.b5g5r5a1_unorm_pack16.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.b5g5r5a1_unorm_pack16.optimal_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.b5g5r5a1_unorm_pack16.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.b5g5r5a1_unorm_pack16.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.b5g5r5a1_unorm_pack16.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.b5g5r5a1_unorm_pack16.optimal_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.b5g5r5a1_unorm_pack16.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.b5g5r5a1_unorm_pack16.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.b5g5r5a1_unorm_pack16.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.a1r5g5b5_unorm_pack16.linear_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.a1r5g5b5_unorm_pack16.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.a1r5g5b5_unorm_pack16.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.a1r5g5b5_unorm_pack16.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.a1r5g5b5_unorm_pack16.linear_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.a1r5g5b5_unorm_pack16.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.a1r5g5b5_unorm_pack16.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.a1r5g5b5_unorm_pack16.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.a1r5g5b5_unorm_pack16.optimal_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.a1r5g5b5_unorm_pack16.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.a1r5g5b5_unorm_pack16.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.a1r5g5b5_unorm_pack16.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.a1r5g5b5_unorm_pack16.optimal_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.a1r5g5b5_unorm_pack16.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.a1r5g5b5_unorm_pack16.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.a1r5g5b5_unorm_pack16.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r8g8_unorm.linear_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r8g8_unorm.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r8g8_unorm.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r8g8_unorm.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r8g8_unorm.linear_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r8g8_unorm.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r8g8_unorm.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r8g8_unorm.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r8g8_unorm.optimal_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r8g8_unorm.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r8g8_unorm.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r8g8_unorm.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r8g8_unorm.optimal_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r8g8_unorm.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r8g8_unorm.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r8g8_unorm.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r8g8b8a8_unorm.linear_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r8g8b8a8_unorm.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r8g8b8a8_unorm.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r8g8b8a8_unorm.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r8g8b8a8_unorm.linear_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r8g8b8a8_unorm.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r8g8b8a8_unorm.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r8g8b8a8_unorm.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r8g8b8a8_unorm.optimal_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r8g8b8a8_unorm.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r8g8b8a8_unorm.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r8g8b8a8_unorm.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r8g8b8a8_unorm.optimal_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r8g8b8a8_unorm.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r8g8b8a8_unorm.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r8g8b8a8_unorm.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.b8g8r8a8_unorm.linear_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.b8g8r8a8_unorm.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.b8g8r8a8_unorm.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.b8g8r8a8_unorm.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.b8g8r8a8_unorm.linear_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.b8g8r8a8_unorm.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.b8g8r8a8_unorm.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.b8g8r8a8_unorm.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.b8g8r8a8_unorm.optimal_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.b8g8r8a8_unorm.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.b8g8r8a8_unorm.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.b8g8r8a8_unorm.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.b8g8r8a8_unorm.optimal_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.b8g8r8a8_unorm.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.b8g8r8a8_unorm.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.b8g8r8a8_unorm.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.a8b8g8r8_unorm_pack32.linear_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.a8b8g8r8_unorm_pack32.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.a8b8g8r8_unorm_pack32.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.a8b8g8r8_unorm_pack32.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.a8b8g8r8_unorm_pack32.linear_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.a8b8g8r8_unorm_pack32.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.a8b8g8r8_unorm_pack32.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.a8b8g8r8_unorm_pack32.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.a8b8g8r8_unorm_pack32.optimal_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.a8b8g8r8_unorm_pack32.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.a8b8g8r8_unorm_pack32.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.a8b8g8r8_unorm_pack32.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.a8b8g8r8_unorm_pack32.optimal_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.a8b8g8r8_unorm_pack32.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.a8b8g8r8_unorm_pack32.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.a8b8g8r8_unorm_pack32.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.a2r10g10b10_unorm_pack32.linear_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.a2r10g10b10_unorm_pack32.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.a2r10g10b10_unorm_pack32.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.a2r10g10b10_unorm_pack32.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.a2r10g10b10_unorm_pack32.linear_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.a2r10g10b10_unorm_pack32.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.a2r10g10b10_unorm_pack32.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.a2r10g10b10_unorm_pack32.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.a2r10g10b10_unorm_pack32.optimal_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.a2r10g10b10_unorm_pack32.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.a2r10g10b10_unorm_pack32.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.a2r10g10b10_unorm_pack32.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.a2r10g10b10_unorm_pack32.optimal_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.a2r10g10b10_unorm_pack32.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.a2r10g10b10_unorm_pack32.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.a2r10g10b10_unorm_pack32.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r16_unorm.linear_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r16_unorm.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r16_unorm.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r16_unorm.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r16_unorm.linear_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r16_unorm.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r16_unorm.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r16_unorm.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r16_unorm.optimal_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r16_unorm.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r16_unorm.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r16_unorm.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r16_unorm.optimal_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r16_unorm.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r16_unorm.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r16_unorm.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r16g16_unorm.linear_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r16g16_unorm.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r16g16_unorm.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r16g16_unorm.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r16g16_unorm.linear_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r16g16_unorm.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r16g16_unorm.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r16g16_unorm.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r16g16_unorm.optimal_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r16g16_unorm.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r16g16_unorm.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r16g16_unorm.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r16g16_unorm.optimal_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r16g16_unorm.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r16g16_unorm.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r16g16_unorm.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.b10g11r11_ufloat_pack32.linear_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.b10g11r11_ufloat_pack32.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.b10g11r11_ufloat_pack32.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.b10g11r11_ufloat_pack32.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.b10g11r11_ufloat_pack32.linear_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.b10g11r11_ufloat_pack32.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.b10g11r11_ufloat_pack32.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.b10g11r11_ufloat_pack32.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.b10g11r11_ufloat_pack32.optimal_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.b10g11r11_ufloat_pack32.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.b10g11r11_ufloat_pack32.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.b10g11r11_ufloat_pack32.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.b10g11r11_ufloat_pack32.optimal_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.b10g11r11_ufloat_pack32.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.b10g11r11_ufloat_pack32.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.b10g11r11_ufloat_pack32.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g8_b8r8_2plane_420_unorm.linear_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g8_b8r8_2plane_420_unorm.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g8_b8r8_2plane_420_unorm.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g8_b8r8_2plane_420_unorm.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g8_b8r8_2plane_420_unorm.linear_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g8_b8r8_2plane_420_unorm.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g8_b8r8_2plane_420_unorm.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g8_b8r8_2plane_420_unorm.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g8_b8r8_2plane_420_unorm.optimal_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g8_b8r8_2plane_420_unorm.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g8_b8r8_2plane_420_unorm.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g8_b8r8_2plane_420_unorm.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g8_b8r8_2plane_420_unorm.optimal_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g8_b8r8_2plane_420_unorm.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g8_b8r8_2plane_420_unorm.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g8_b8r8_2plane_420_unorm.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g8_b8r8_2plane_422_unorm.linear_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g8_b8r8_2plane_422_unorm.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g8_b8r8_2plane_422_unorm.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g8_b8r8_2plane_422_unorm.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g8_b8r8_2plane_422_unorm.linear_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g8_b8r8_2plane_422_unorm.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g8_b8r8_2plane_422_unorm.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g8_b8r8_2plane_422_unorm.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g8_b8r8_2plane_422_unorm.optimal_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g8_b8r8_2plane_422_unorm.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g8_b8r8_2plane_422_unorm.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g8_b8r8_2plane_422_unorm.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g8_b8r8_2plane_422_unorm.optimal_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g8_b8r8_2plane_422_unorm.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g8_b8r8_2plane_422_unorm.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g8_b8r8_2plane_422_unorm.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r10x6_unorm_pack16.linear_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r10x6_unorm_pack16.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r10x6_unorm_pack16.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r10x6_unorm_pack16.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r10x6_unorm_pack16.linear_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r10x6_unorm_pack16.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r10x6_unorm_pack16.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r10x6_unorm_pack16.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r10x6_unorm_pack16.optimal_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r10x6_unorm_pack16.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r10x6_unorm_pack16.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r10x6_unorm_pack16.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r10x6_unorm_pack16.optimal_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r10x6_unorm_pack16.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r10x6_unorm_pack16.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r10x6_unorm_pack16.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r10x6g10x6_unorm_2pack16.linear_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r10x6g10x6_unorm_2pack16.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r10x6g10x6_unorm_2pack16.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r10x6g10x6_unorm_2pack16.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r10x6g10x6_unorm_2pack16.linear_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r10x6g10x6_unorm_2pack16.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r10x6g10x6_unorm_2pack16.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r10x6g10x6_unorm_2pack16.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r10x6g10x6_unorm_2pack16.optimal_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r10x6g10x6_unorm_2pack16.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r10x6g10x6_unorm_2pack16.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r10x6g10x6_unorm_2pack16.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r10x6g10x6_unorm_2pack16.optimal_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r10x6g10x6_unorm_2pack16.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r10x6g10x6_unorm_2pack16.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r10x6g10x6_unorm_2pack16.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.linear_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.linear_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.optimal_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.optimal_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.linear_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.linear_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.optimal_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.optimal_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.linear_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.linear_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.optimal_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.optimal_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.linear_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.linear_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.optimal_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.optimal_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.linear_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.linear_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.optimal_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.optimal_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r12x4_unorm_pack16.linear_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r12x4_unorm_pack16.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r12x4_unorm_pack16.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r12x4_unorm_pack16.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r12x4_unorm_pack16.linear_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r12x4_unorm_pack16.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r12x4_unorm_pack16.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r12x4_unorm_pack16.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r12x4_unorm_pack16.optimal_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r12x4_unorm_pack16.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r12x4_unorm_pack16.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r12x4_unorm_pack16.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r12x4_unorm_pack16.optimal_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r12x4_unorm_pack16.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r12x4_unorm_pack16.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r12x4_unorm_pack16.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r12x4g12x4_unorm_2pack16.linear_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r12x4g12x4_unorm_2pack16.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r12x4g12x4_unorm_2pack16.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r12x4g12x4_unorm_2pack16.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r12x4g12x4_unorm_2pack16.linear_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r12x4g12x4_unorm_2pack16.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r12x4g12x4_unorm_2pack16.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r12x4g12x4_unorm_2pack16.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r12x4g12x4_unorm_2pack16.optimal_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r12x4g12x4_unorm_2pack16.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r12x4g12x4_unorm_2pack16.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r12x4g12x4_unorm_2pack16.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r12x4g12x4_unorm_2pack16.optimal_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r12x4g12x4_unorm_2pack16.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r12x4g12x4_unorm_2pack16.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.r12x4g12x4_unorm_2pack16.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.linear_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.linear_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.optimal_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.optimal_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.linear_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.linear_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.optimal_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.optimal_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.linear_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.linear_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.optimal_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.optimal_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.linear_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.linear_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.optimal_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.optimal_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.linear_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.linear_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.optimal_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.optimal_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g16_b16_r16_3plane_420_unorm.linear_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g16_b16_r16_3plane_420_unorm.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g16_b16_r16_3plane_420_unorm.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g16_b16_r16_3plane_420_unorm.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g16_b16_r16_3plane_420_unorm.linear_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g16_b16_r16_3plane_420_unorm.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g16_b16_r16_3plane_420_unorm.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g16_b16_r16_3plane_420_unorm.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g16_b16_r16_3plane_420_unorm.optimal_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g16_b16_r16_3plane_420_unorm.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g16_b16_r16_3plane_420_unorm.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g16_b16_r16_3plane_420_unorm.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g16_b16_r16_3plane_420_unorm.optimal_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g16_b16_r16_3plane_420_unorm.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g16_b16_r16_3plane_420_unorm.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g16_b16_r16_3plane_420_unorm.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g16_b16r16_2plane_420_unorm.linear_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g16_b16r16_2plane_420_unorm.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g16_b16r16_2plane_420_unorm.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g16_b16r16_2plane_420_unorm.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g16_b16r16_2plane_420_unorm.linear_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g16_b16r16_2plane_420_unorm.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g16_b16r16_2plane_420_unorm.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g16_b16r16_2plane_420_unorm.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g16_b16r16_2plane_420_unorm.optimal_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g16_b16r16_2plane_420_unorm.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g16_b16r16_2plane_420_unorm.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g16_b16r16_2plane_420_unorm.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g16_b16r16_2plane_420_unorm.optimal_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g16_b16r16_2plane_420_unorm.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g16_b16r16_2plane_420_unorm.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g16_b16r16_2plane_420_unorm.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g16_b16_r16_3plane_422_unorm.linear_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g16_b16_r16_3plane_422_unorm.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g16_b16_r16_3plane_422_unorm.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g16_b16_r16_3plane_422_unorm.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g16_b16_r16_3plane_422_unorm.linear_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g16_b16_r16_3plane_422_unorm.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g16_b16_r16_3plane_422_unorm.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g16_b16_r16_3plane_422_unorm.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g16_b16_r16_3plane_422_unorm.optimal_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g16_b16_r16_3plane_422_unorm.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g16_b16_r16_3plane_422_unorm.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g16_b16_r16_3plane_422_unorm.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g16_b16_r16_3plane_422_unorm.optimal_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g16_b16_r16_3plane_422_unorm.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g16_b16_r16_3plane_422_unorm.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g16_b16_r16_3plane_422_unorm.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g16_b16r16_2plane_422_unorm.linear_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g16_b16r16_2plane_422_unorm.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g16_b16r16_2plane_422_unorm.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g16_b16r16_2plane_422_unorm.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g16_b16r16_2plane_422_unorm.linear_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g16_b16r16_2plane_422_unorm.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g16_b16r16_2plane_422_unorm.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g16_b16r16_2plane_422_unorm.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g16_b16r16_2plane_422_unorm.optimal_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g16_b16r16_2plane_422_unorm.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g16_b16r16_2plane_422_unorm.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g16_b16r16_2plane_422_unorm.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g16_b16r16_2plane_422_unorm.optimal_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g16_b16r16_2plane_422_unorm.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g16_b16r16_2plane_422_unorm.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g16_b16r16_2plane_422_unorm.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g16_b16_r16_3plane_444_unorm.linear_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g16_b16_r16_3plane_444_unorm.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g16_b16_r16_3plane_444_unorm.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g16_b16_r16_3plane_444_unorm.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g16_b16_r16_3plane_444_unorm.linear_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g16_b16_r16_3plane_444_unorm.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g16_b16_r16_3plane_444_unorm.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g16_b16_r16_3plane_444_unorm.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g16_b16_r16_3plane_444_unorm.optimal_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g16_b16_r16_3plane_444_unorm.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g16_b16_r16_3plane_444_unorm.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g16_b16_r16_3plane_444_unorm.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g16_b16_r16_3plane_444_unorm.optimal_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g16_b16_r16_3plane_444_unorm.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g16_b16_r16_3plane_444_unorm.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g16_b16_r16_3plane_444_unorm.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g8_b8r8_2plane_444_unorm_ext.linear_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g8_b8r8_2plane_444_unorm_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g8_b8r8_2plane_444_unorm_ext.linear_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g8_b8r8_2plane_444_unorm_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g8_b8r8_2plane_444_unorm_ext.optimal_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g8_b8r8_2plane_444_unorm_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g8_b8r8_2plane_444_unorm_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g8_b8r8_2plane_444_unorm_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g16_b16r16_2plane_444_unorm_ext.linear_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g16_b16r16_2plane_444_unorm_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g16_b16r16_2plane_444_unorm_ext.linear_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g16_b16r16_2plane_444_unorm_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g16_b16r16_2plane_444_unorm_ext.optimal_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g16_b16r16_2plane_444_unorm_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g16_b16r16_2plane_444_unorm_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g16_b16r16_2plane_444_unorm_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r4g4b4a4_unorm_pack16.linear_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r4g4b4a4_unorm_pack16.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r4g4b4a4_unorm_pack16.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r4g4b4a4_unorm_pack16.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r4g4b4a4_unorm_pack16.linear_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r4g4b4a4_unorm_pack16.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r4g4b4a4_unorm_pack16.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r4g4b4a4_unorm_pack16.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r4g4b4a4_unorm_pack16.optimal_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r4g4b4a4_unorm_pack16.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r4g4b4a4_unorm_pack16.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r4g4b4a4_unorm_pack16.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r4g4b4a4_unorm_pack16.optimal_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r4g4b4a4_unorm_pack16.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r4g4b4a4_unorm_pack16.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r4g4b4a4_unorm_pack16.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.b4g4r4a4_unorm_pack16.linear_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.b4g4r4a4_unorm_pack16.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.b4g4r4a4_unorm_pack16.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.b4g4r4a4_unorm_pack16.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.b4g4r4a4_unorm_pack16.linear_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.b4g4r4a4_unorm_pack16.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.b4g4r4a4_unorm_pack16.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.b4g4r4a4_unorm_pack16.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.b4g4r4a4_unorm_pack16.optimal_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.b4g4r4a4_unorm_pack16.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.b4g4r4a4_unorm_pack16.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.b4g4r4a4_unorm_pack16.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.b4g4r4a4_unorm_pack16.optimal_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.b4g4r4a4_unorm_pack16.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.b4g4r4a4_unorm_pack16.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.b4g4r4a4_unorm_pack16.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r5g6b5_unorm_pack16.linear_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r5g6b5_unorm_pack16.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r5g6b5_unorm_pack16.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r5g6b5_unorm_pack16.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r5g6b5_unorm_pack16.linear_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r5g6b5_unorm_pack16.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r5g6b5_unorm_pack16.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r5g6b5_unorm_pack16.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r5g6b5_unorm_pack16.optimal_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r5g6b5_unorm_pack16.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r5g6b5_unorm_pack16.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r5g6b5_unorm_pack16.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r5g6b5_unorm_pack16.optimal_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r5g6b5_unorm_pack16.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r5g6b5_unorm_pack16.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r5g6b5_unorm_pack16.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.b5g6r5_unorm_pack16.linear_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.b5g6r5_unorm_pack16.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.b5g6r5_unorm_pack16.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.b5g6r5_unorm_pack16.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.b5g6r5_unorm_pack16.linear_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.b5g6r5_unorm_pack16.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.b5g6r5_unorm_pack16.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.b5g6r5_unorm_pack16.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.b5g6r5_unorm_pack16.optimal_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.b5g6r5_unorm_pack16.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.b5g6r5_unorm_pack16.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.b5g6r5_unorm_pack16.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.b5g6r5_unorm_pack16.optimal_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.b5g6r5_unorm_pack16.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.b5g6r5_unorm_pack16.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.b5g6r5_unorm_pack16.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r5g5b5a1_unorm_pack16.linear_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r5g5b5a1_unorm_pack16.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r5g5b5a1_unorm_pack16.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r5g5b5a1_unorm_pack16.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r5g5b5a1_unorm_pack16.linear_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r5g5b5a1_unorm_pack16.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r5g5b5a1_unorm_pack16.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r5g5b5a1_unorm_pack16.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r5g5b5a1_unorm_pack16.optimal_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r5g5b5a1_unorm_pack16.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r5g5b5a1_unorm_pack16.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r5g5b5a1_unorm_pack16.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r5g5b5a1_unorm_pack16.optimal_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r5g5b5a1_unorm_pack16.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r5g5b5a1_unorm_pack16.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r5g5b5a1_unorm_pack16.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.b5g5r5a1_unorm_pack16.linear_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.b5g5r5a1_unorm_pack16.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.b5g5r5a1_unorm_pack16.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.b5g5r5a1_unorm_pack16.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.b5g5r5a1_unorm_pack16.linear_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.b5g5r5a1_unorm_pack16.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.b5g5r5a1_unorm_pack16.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.b5g5r5a1_unorm_pack16.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.b5g5r5a1_unorm_pack16.optimal_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.b5g5r5a1_unorm_pack16.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.b5g5r5a1_unorm_pack16.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.b5g5r5a1_unorm_pack16.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.b5g5r5a1_unorm_pack16.optimal_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.b5g5r5a1_unorm_pack16.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.b5g5r5a1_unorm_pack16.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.b5g5r5a1_unorm_pack16.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.a1r5g5b5_unorm_pack16.linear_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.a1r5g5b5_unorm_pack16.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.a1r5g5b5_unorm_pack16.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.a1r5g5b5_unorm_pack16.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.a1r5g5b5_unorm_pack16.linear_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.a1r5g5b5_unorm_pack16.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.a1r5g5b5_unorm_pack16.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.a1r5g5b5_unorm_pack16.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.a1r5g5b5_unorm_pack16.optimal_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.a1r5g5b5_unorm_pack16.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.a1r5g5b5_unorm_pack16.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.a1r5g5b5_unorm_pack16.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.a1r5g5b5_unorm_pack16.optimal_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.a1r5g5b5_unorm_pack16.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.a1r5g5b5_unorm_pack16.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.a1r5g5b5_unorm_pack16.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r8g8_unorm.linear_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r8g8_unorm.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r8g8_unorm.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r8g8_unorm.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r8g8_unorm.linear_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r8g8_unorm.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r8g8_unorm.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r8g8_unorm.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r8g8_unorm.optimal_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r8g8_unorm.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r8g8_unorm.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r8g8_unorm.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r8g8_unorm.optimal_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r8g8_unorm.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r8g8_unorm.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r8g8_unorm.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r8g8b8a8_unorm.linear_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r8g8b8a8_unorm.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r8g8b8a8_unorm.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r8g8b8a8_unorm.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r8g8b8a8_unorm.linear_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r8g8b8a8_unorm.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r8g8b8a8_unorm.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r8g8b8a8_unorm.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r8g8b8a8_unorm.optimal_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r8g8b8a8_unorm.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r8g8b8a8_unorm.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r8g8b8a8_unorm.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r8g8b8a8_unorm.optimal_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r8g8b8a8_unorm.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r8g8b8a8_unorm.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r8g8b8a8_unorm.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.b8g8r8a8_unorm.linear_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.b8g8r8a8_unorm.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.b8g8r8a8_unorm.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.b8g8r8a8_unorm.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.b8g8r8a8_unorm.linear_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.b8g8r8a8_unorm.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.b8g8r8a8_unorm.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.b8g8r8a8_unorm.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.b8g8r8a8_unorm.optimal_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.b8g8r8a8_unorm.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.b8g8r8a8_unorm.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.b8g8r8a8_unorm.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.b8g8r8a8_unorm.optimal_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.b8g8r8a8_unorm.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.b8g8r8a8_unorm.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.b8g8r8a8_unorm.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.a8b8g8r8_unorm_pack32.linear_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.a8b8g8r8_unorm_pack32.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.a8b8g8r8_unorm_pack32.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.a8b8g8r8_unorm_pack32.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.a8b8g8r8_unorm_pack32.linear_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.a8b8g8r8_unorm_pack32.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.a8b8g8r8_unorm_pack32.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.a8b8g8r8_unorm_pack32.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.a8b8g8r8_unorm_pack32.optimal_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.a8b8g8r8_unorm_pack32.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.a8b8g8r8_unorm_pack32.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.a8b8g8r8_unorm_pack32.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.a8b8g8r8_unorm_pack32.optimal_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.a8b8g8r8_unorm_pack32.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.a8b8g8r8_unorm_pack32.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.a8b8g8r8_unorm_pack32.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.a2r10g10b10_unorm_pack32.linear_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.a2r10g10b10_unorm_pack32.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.a2r10g10b10_unorm_pack32.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.a2r10g10b10_unorm_pack32.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.a2r10g10b10_unorm_pack32.linear_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.a2r10g10b10_unorm_pack32.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.a2r10g10b10_unorm_pack32.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.a2r10g10b10_unorm_pack32.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.a2r10g10b10_unorm_pack32.optimal_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.a2r10g10b10_unorm_pack32.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.a2r10g10b10_unorm_pack32.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.a2r10g10b10_unorm_pack32.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.a2r10g10b10_unorm_pack32.optimal_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.a2r10g10b10_unorm_pack32.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.a2r10g10b10_unorm_pack32.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.a2r10g10b10_unorm_pack32.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r16_unorm.linear_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r16_unorm.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r16_unorm.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r16_unorm.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r16_unorm.linear_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r16_unorm.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r16_unorm.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r16_unorm.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r16_unorm.optimal_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r16_unorm.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r16_unorm.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r16_unorm.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r16_unorm.optimal_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r16_unorm.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r16_unorm.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r16_unorm.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r16g16_unorm.linear_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r16g16_unorm.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r16g16_unorm.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r16g16_unorm.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r16g16_unorm.linear_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r16g16_unorm.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r16g16_unorm.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r16g16_unorm.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r16g16_unorm.optimal_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r16g16_unorm.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r16g16_unorm.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r16g16_unorm.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r16g16_unorm.optimal_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r16g16_unorm.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r16g16_unorm.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r16g16_unorm.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.b10g11r11_ufloat_pack32.linear_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.b10g11r11_ufloat_pack32.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.b10g11r11_ufloat_pack32.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.b10g11r11_ufloat_pack32.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.b10g11r11_ufloat_pack32.linear_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.b10g11r11_ufloat_pack32.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.b10g11r11_ufloat_pack32.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.b10g11r11_ufloat_pack32.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.b10g11r11_ufloat_pack32.optimal_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.b10g11r11_ufloat_pack32.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.b10g11r11_ufloat_pack32.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.b10g11r11_ufloat_pack32.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.b10g11r11_ufloat_pack32.optimal_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.b10g11r11_ufloat_pack32.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.b10g11r11_ufloat_pack32.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.b10g11r11_ufloat_pack32.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g8_b8r8_2plane_420_unorm.linear_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g8_b8r8_2plane_420_unorm.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g8_b8r8_2plane_420_unorm.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g8_b8r8_2plane_420_unorm.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g8_b8r8_2plane_420_unorm.linear_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g8_b8r8_2plane_420_unorm.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g8_b8r8_2plane_420_unorm.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g8_b8r8_2plane_420_unorm.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g8_b8r8_2plane_420_unorm.optimal_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g8_b8r8_2plane_420_unorm.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g8_b8r8_2plane_420_unorm.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g8_b8r8_2plane_420_unorm.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g8_b8r8_2plane_420_unorm.optimal_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g8_b8r8_2plane_420_unorm.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g8_b8r8_2plane_420_unorm.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g8_b8r8_2plane_420_unorm.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g8_b8r8_2plane_422_unorm.linear_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g8_b8r8_2plane_422_unorm.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g8_b8r8_2plane_422_unorm.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g8_b8r8_2plane_422_unorm.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g8_b8r8_2plane_422_unorm.linear_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g8_b8r8_2plane_422_unorm.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g8_b8r8_2plane_422_unorm.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g8_b8r8_2plane_422_unorm.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g8_b8r8_2plane_422_unorm.optimal_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g8_b8r8_2plane_422_unorm.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g8_b8r8_2plane_422_unorm.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g8_b8r8_2plane_422_unorm.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g8_b8r8_2plane_422_unorm.optimal_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g8_b8r8_2plane_422_unorm.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g8_b8r8_2plane_422_unorm.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g8_b8r8_2plane_422_unorm.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r10x6_unorm_pack16.linear_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r10x6_unorm_pack16.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r10x6_unorm_pack16.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r10x6_unorm_pack16.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r10x6_unorm_pack16.linear_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r10x6_unorm_pack16.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r10x6_unorm_pack16.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r10x6_unorm_pack16.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r10x6_unorm_pack16.optimal_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r10x6_unorm_pack16.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r10x6_unorm_pack16.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r10x6_unorm_pack16.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r10x6_unorm_pack16.optimal_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r10x6_unorm_pack16.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r10x6_unorm_pack16.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r10x6_unorm_pack16.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r10x6g10x6_unorm_2pack16.linear_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r10x6g10x6_unorm_2pack16.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r10x6g10x6_unorm_2pack16.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r10x6g10x6_unorm_2pack16.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r10x6g10x6_unorm_2pack16.linear_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r10x6g10x6_unorm_2pack16.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r10x6g10x6_unorm_2pack16.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r10x6g10x6_unorm_2pack16.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r10x6g10x6_unorm_2pack16.optimal_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r10x6g10x6_unorm_2pack16.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r10x6g10x6_unorm_2pack16.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r10x6g10x6_unorm_2pack16.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r10x6g10x6_unorm_2pack16.optimal_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r10x6g10x6_unorm_2pack16.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r10x6g10x6_unorm_2pack16.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r10x6g10x6_unorm_2pack16.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.linear_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.linear_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.optimal_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.optimal_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.linear_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.linear_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.optimal_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.optimal_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.linear_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.linear_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.optimal_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.optimal_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.linear_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.linear_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.optimal_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.optimal_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.linear_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.linear_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.optimal_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.optimal_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r12x4_unorm_pack16.linear_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r12x4_unorm_pack16.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r12x4_unorm_pack16.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r12x4_unorm_pack16.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r12x4_unorm_pack16.linear_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r12x4_unorm_pack16.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r12x4_unorm_pack16.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r12x4_unorm_pack16.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r12x4_unorm_pack16.optimal_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r12x4_unorm_pack16.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r12x4_unorm_pack16.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r12x4_unorm_pack16.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r12x4_unorm_pack16.optimal_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r12x4_unorm_pack16.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r12x4_unorm_pack16.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r12x4_unorm_pack16.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r12x4g12x4_unorm_2pack16.linear_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r12x4g12x4_unorm_2pack16.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r12x4g12x4_unorm_2pack16.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r12x4g12x4_unorm_2pack16.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r12x4g12x4_unorm_2pack16.linear_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r12x4g12x4_unorm_2pack16.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r12x4g12x4_unorm_2pack16.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r12x4g12x4_unorm_2pack16.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r12x4g12x4_unorm_2pack16.optimal_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r12x4g12x4_unorm_2pack16.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r12x4g12x4_unorm_2pack16.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r12x4g12x4_unorm_2pack16.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r12x4g12x4_unorm_2pack16.optimal_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r12x4g12x4_unorm_2pack16.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r12x4g12x4_unorm_2pack16.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.r12x4g12x4_unorm_2pack16.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.linear_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.linear_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.optimal_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.optimal_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.linear_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.linear_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.optimal_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.optimal_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.linear_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.linear_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.optimal_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.optimal_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.linear_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.linear_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.optimal_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.optimal_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.linear_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.linear_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.optimal_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.optimal_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g16_b16_r16_3plane_420_unorm.linear_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g16_b16_r16_3plane_420_unorm.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g16_b16_r16_3plane_420_unorm.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g16_b16_r16_3plane_420_unorm.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g16_b16_r16_3plane_420_unorm.linear_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g16_b16_r16_3plane_420_unorm.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g16_b16_r16_3plane_420_unorm.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g16_b16_r16_3plane_420_unorm.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g16_b16_r16_3plane_420_unorm.optimal_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g16_b16_r16_3plane_420_unorm.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g16_b16_r16_3plane_420_unorm.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g16_b16_r16_3plane_420_unorm.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g16_b16_r16_3plane_420_unorm.optimal_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g16_b16_r16_3plane_420_unorm.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g16_b16_r16_3plane_420_unorm.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g16_b16_r16_3plane_420_unorm.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g16_b16r16_2plane_420_unorm.linear_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g16_b16r16_2plane_420_unorm.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g16_b16r16_2plane_420_unorm.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g16_b16r16_2plane_420_unorm.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g16_b16r16_2plane_420_unorm.linear_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g16_b16r16_2plane_420_unorm.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g16_b16r16_2plane_420_unorm.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g16_b16r16_2plane_420_unorm.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g16_b16r16_2plane_420_unorm.optimal_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g16_b16r16_2plane_420_unorm.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g16_b16r16_2plane_420_unorm.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g16_b16r16_2plane_420_unorm.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g16_b16r16_2plane_420_unorm.optimal_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g16_b16r16_2plane_420_unorm.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g16_b16r16_2plane_420_unorm.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g16_b16r16_2plane_420_unorm.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g16_b16_r16_3plane_422_unorm.linear_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g16_b16_r16_3plane_422_unorm.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g16_b16_r16_3plane_422_unorm.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g16_b16_r16_3plane_422_unorm.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g16_b16_r16_3plane_422_unorm.linear_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g16_b16_r16_3plane_422_unorm.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g16_b16_r16_3plane_422_unorm.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g16_b16_r16_3plane_422_unorm.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g16_b16_r16_3plane_422_unorm.optimal_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g16_b16_r16_3plane_422_unorm.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g16_b16_r16_3plane_422_unorm.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g16_b16_r16_3plane_422_unorm.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g16_b16_r16_3plane_422_unorm.optimal_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g16_b16_r16_3plane_422_unorm.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g16_b16_r16_3plane_422_unorm.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g16_b16_r16_3plane_422_unorm.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g16_b16r16_2plane_422_unorm.linear_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g16_b16r16_2plane_422_unorm.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g16_b16r16_2plane_422_unorm.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g16_b16r16_2plane_422_unorm.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g16_b16r16_2plane_422_unorm.linear_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g16_b16r16_2plane_422_unorm.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g16_b16r16_2plane_422_unorm.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g16_b16r16_2plane_422_unorm.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g16_b16r16_2plane_422_unorm.optimal_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g16_b16r16_2plane_422_unorm.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g16_b16r16_2plane_422_unorm.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g16_b16r16_2plane_422_unorm.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g16_b16r16_2plane_422_unorm.optimal_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g16_b16r16_2plane_422_unorm.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g16_b16r16_2plane_422_unorm.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g16_b16r16_2plane_422_unorm.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g16_b16_r16_3plane_444_unorm.linear_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g16_b16_r16_3plane_444_unorm.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g16_b16_r16_3plane_444_unorm.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g16_b16_r16_3plane_444_unorm.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g16_b16_r16_3plane_444_unorm.linear_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g16_b16_r16_3plane_444_unorm.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g16_b16_r16_3plane_444_unorm.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g16_b16_r16_3plane_444_unorm.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g16_b16_r16_3plane_444_unorm.optimal_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g16_b16_r16_3plane_444_unorm.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g16_b16_r16_3plane_444_unorm.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g16_b16_r16_3plane_444_unorm.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g16_b16_r16_3plane_444_unorm.optimal_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g16_b16_r16_3plane_444_unorm.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g16_b16_r16_3plane_444_unorm.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g16_b16_r16_3plane_444_unorm.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g8_b8r8_2plane_444_unorm_ext.linear_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g8_b8r8_2plane_444_unorm_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g8_b8r8_2plane_444_unorm_ext.linear_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g8_b8r8_2plane_444_unorm_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g8_b8r8_2plane_444_unorm_ext.optimal_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g8_b8r8_2plane_444_unorm_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g8_b8r8_2plane_444_unorm_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g8_b8r8_2plane_444_unorm_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g16_b16r16_2plane_444_unorm_ext.linear_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g16_b16r16_2plane_444_unorm_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g16_b16r16_2plane_444_unorm_ext.linear_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g16_b16r16_2plane_444_unorm_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g16_b16r16_2plane_444_unorm_ext.optimal_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g16_b16r16_2plane_444_unorm_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g16_b16r16_2plane_444_unorm_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g16_b16r16_2plane_444_unorm_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r4g4b4a4_unorm_pack16.linear_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r4g4b4a4_unorm_pack16.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r4g4b4a4_unorm_pack16.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r4g4b4a4_unorm_pack16.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r4g4b4a4_unorm_pack16.linear_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r4g4b4a4_unorm_pack16.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r4g4b4a4_unorm_pack16.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r4g4b4a4_unorm_pack16.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r4g4b4a4_unorm_pack16.optimal_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r4g4b4a4_unorm_pack16.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r4g4b4a4_unorm_pack16.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r4g4b4a4_unorm_pack16.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r4g4b4a4_unorm_pack16.optimal_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r4g4b4a4_unorm_pack16.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r4g4b4a4_unorm_pack16.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r4g4b4a4_unorm_pack16.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.b4g4r4a4_unorm_pack16.linear_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.b4g4r4a4_unorm_pack16.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.b4g4r4a4_unorm_pack16.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.b4g4r4a4_unorm_pack16.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.b4g4r4a4_unorm_pack16.linear_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.b4g4r4a4_unorm_pack16.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.b4g4r4a4_unorm_pack16.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.b4g4r4a4_unorm_pack16.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.b4g4r4a4_unorm_pack16.optimal_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.b4g4r4a4_unorm_pack16.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.b4g4r4a4_unorm_pack16.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.b4g4r4a4_unorm_pack16.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.b4g4r4a4_unorm_pack16.optimal_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.b4g4r4a4_unorm_pack16.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.b4g4r4a4_unorm_pack16.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.b4g4r4a4_unorm_pack16.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r5g6b5_unorm_pack16.linear_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r5g6b5_unorm_pack16.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r5g6b5_unorm_pack16.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r5g6b5_unorm_pack16.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r5g6b5_unorm_pack16.linear_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r5g6b5_unorm_pack16.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r5g6b5_unorm_pack16.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r5g6b5_unorm_pack16.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r5g6b5_unorm_pack16.optimal_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r5g6b5_unorm_pack16.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r5g6b5_unorm_pack16.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r5g6b5_unorm_pack16.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r5g6b5_unorm_pack16.optimal_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r5g6b5_unorm_pack16.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r5g6b5_unorm_pack16.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r5g6b5_unorm_pack16.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.b5g6r5_unorm_pack16.linear_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.b5g6r5_unorm_pack16.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.b5g6r5_unorm_pack16.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.b5g6r5_unorm_pack16.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.b5g6r5_unorm_pack16.linear_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.b5g6r5_unorm_pack16.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.b5g6r5_unorm_pack16.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.b5g6r5_unorm_pack16.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.b5g6r5_unorm_pack16.optimal_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.b5g6r5_unorm_pack16.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.b5g6r5_unorm_pack16.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.b5g6r5_unorm_pack16.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.b5g6r5_unorm_pack16.optimal_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.b5g6r5_unorm_pack16.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.b5g6r5_unorm_pack16.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.b5g6r5_unorm_pack16.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r5g5b5a1_unorm_pack16.linear_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r5g5b5a1_unorm_pack16.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r5g5b5a1_unorm_pack16.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r5g5b5a1_unorm_pack16.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r5g5b5a1_unorm_pack16.linear_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r5g5b5a1_unorm_pack16.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r5g5b5a1_unorm_pack16.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r5g5b5a1_unorm_pack16.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r5g5b5a1_unorm_pack16.optimal_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r5g5b5a1_unorm_pack16.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r5g5b5a1_unorm_pack16.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r5g5b5a1_unorm_pack16.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r5g5b5a1_unorm_pack16.optimal_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r5g5b5a1_unorm_pack16.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r5g5b5a1_unorm_pack16.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r5g5b5a1_unorm_pack16.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.b5g5r5a1_unorm_pack16.linear_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.b5g5r5a1_unorm_pack16.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.b5g5r5a1_unorm_pack16.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.b5g5r5a1_unorm_pack16.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.b5g5r5a1_unorm_pack16.linear_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.b5g5r5a1_unorm_pack16.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.b5g5r5a1_unorm_pack16.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.b5g5r5a1_unorm_pack16.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.b5g5r5a1_unorm_pack16.optimal_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.b5g5r5a1_unorm_pack16.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.b5g5r5a1_unorm_pack16.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.b5g5r5a1_unorm_pack16.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.b5g5r5a1_unorm_pack16.optimal_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.b5g5r5a1_unorm_pack16.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.b5g5r5a1_unorm_pack16.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.b5g5r5a1_unorm_pack16.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.a1r5g5b5_unorm_pack16.linear_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.a1r5g5b5_unorm_pack16.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.a1r5g5b5_unorm_pack16.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.a1r5g5b5_unorm_pack16.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.a1r5g5b5_unorm_pack16.linear_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.a1r5g5b5_unorm_pack16.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.a1r5g5b5_unorm_pack16.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.a1r5g5b5_unorm_pack16.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.a1r5g5b5_unorm_pack16.optimal_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.a1r5g5b5_unorm_pack16.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.a1r5g5b5_unorm_pack16.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.a1r5g5b5_unorm_pack16.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.a1r5g5b5_unorm_pack16.optimal_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.a1r5g5b5_unorm_pack16.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.a1r5g5b5_unorm_pack16.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.a1r5g5b5_unorm_pack16.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r8g8_unorm.linear_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r8g8_unorm.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r8g8_unorm.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r8g8_unorm.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r8g8_unorm.linear_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r8g8_unorm.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r8g8_unorm.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r8g8_unorm.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r8g8_unorm.optimal_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r8g8_unorm.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r8g8_unorm.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r8g8_unorm.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r8g8_unorm.optimal_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r8g8_unorm.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r8g8_unorm.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r8g8_unorm.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r8g8b8a8_unorm.linear_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r8g8b8a8_unorm.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r8g8b8a8_unorm.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r8g8b8a8_unorm.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r8g8b8a8_unorm.linear_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r8g8b8a8_unorm.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r8g8b8a8_unorm.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r8g8b8a8_unorm.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r8g8b8a8_unorm.optimal_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r8g8b8a8_unorm.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r8g8b8a8_unorm.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r8g8b8a8_unorm.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r8g8b8a8_unorm.optimal_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r8g8b8a8_unorm.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r8g8b8a8_unorm.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r8g8b8a8_unorm.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.b8g8r8a8_unorm.linear_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.b8g8r8a8_unorm.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.b8g8r8a8_unorm.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.b8g8r8a8_unorm.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.b8g8r8a8_unorm.linear_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.b8g8r8a8_unorm.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.b8g8r8a8_unorm.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.b8g8r8a8_unorm.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.b8g8r8a8_unorm.optimal_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.b8g8r8a8_unorm.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.b8g8r8a8_unorm.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.b8g8r8a8_unorm.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.b8g8r8a8_unorm.optimal_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.b8g8r8a8_unorm.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.b8g8r8a8_unorm.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.b8g8r8a8_unorm.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.a8b8g8r8_unorm_pack32.linear_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.a8b8g8r8_unorm_pack32.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.a8b8g8r8_unorm_pack32.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.a8b8g8r8_unorm_pack32.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.a8b8g8r8_unorm_pack32.linear_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.a8b8g8r8_unorm_pack32.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.a8b8g8r8_unorm_pack32.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.a8b8g8r8_unorm_pack32.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.a8b8g8r8_unorm_pack32.optimal_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.a8b8g8r8_unorm_pack32.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.a8b8g8r8_unorm_pack32.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.a8b8g8r8_unorm_pack32.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.a8b8g8r8_unorm_pack32.optimal_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.a8b8g8r8_unorm_pack32.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.a8b8g8r8_unorm_pack32.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.a8b8g8r8_unorm_pack32.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.a2r10g10b10_unorm_pack32.linear_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.a2r10g10b10_unorm_pack32.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.a2r10g10b10_unorm_pack32.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.a2r10g10b10_unorm_pack32.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.a2r10g10b10_unorm_pack32.linear_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.a2r10g10b10_unorm_pack32.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.a2r10g10b10_unorm_pack32.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.a2r10g10b10_unorm_pack32.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.a2r10g10b10_unorm_pack32.optimal_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.a2r10g10b10_unorm_pack32.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.a2r10g10b10_unorm_pack32.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.a2r10g10b10_unorm_pack32.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.a2r10g10b10_unorm_pack32.optimal_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.a2r10g10b10_unorm_pack32.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.a2r10g10b10_unorm_pack32.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.a2r10g10b10_unorm_pack32.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r16_unorm.linear_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r16_unorm.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r16_unorm.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r16_unorm.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r16_unorm.linear_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r16_unorm.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r16_unorm.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r16_unorm.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r16_unorm.optimal_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r16_unorm.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r16_unorm.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r16_unorm.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r16_unorm.optimal_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r16_unorm.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r16_unorm.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r16_unorm.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r16g16_unorm.linear_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r16g16_unorm.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r16g16_unorm.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r16g16_unorm.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r16g16_unorm.linear_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r16g16_unorm.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r16g16_unorm.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r16g16_unorm.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r16g16_unorm.optimal_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r16g16_unorm.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r16g16_unorm.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r16g16_unorm.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r16g16_unorm.optimal_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r16g16_unorm.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r16g16_unorm.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r16g16_unorm.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.b10g11r11_ufloat_pack32.linear_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.b10g11r11_ufloat_pack32.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.b10g11r11_ufloat_pack32.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.b10g11r11_ufloat_pack32.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.b10g11r11_ufloat_pack32.linear_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.b10g11r11_ufloat_pack32.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.b10g11r11_ufloat_pack32.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.b10g11r11_ufloat_pack32.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.b10g11r11_ufloat_pack32.optimal_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.b10g11r11_ufloat_pack32.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.b10g11r11_ufloat_pack32.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.b10g11r11_ufloat_pack32.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.b10g11r11_ufloat_pack32.optimal_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.b10g11r11_ufloat_pack32.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.b10g11r11_ufloat_pack32.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.b10g11r11_ufloat_pack32.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g8_b8r8_2plane_420_unorm.linear_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g8_b8r8_2plane_420_unorm.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g8_b8r8_2plane_420_unorm.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g8_b8r8_2plane_420_unorm.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g8_b8r8_2plane_420_unorm.linear_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g8_b8r8_2plane_420_unorm.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g8_b8r8_2plane_420_unorm.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g8_b8r8_2plane_420_unorm.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g8_b8r8_2plane_420_unorm.optimal_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g8_b8r8_2plane_420_unorm.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g8_b8r8_2plane_420_unorm.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g8_b8r8_2plane_420_unorm.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g8_b8r8_2plane_420_unorm.optimal_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g8_b8r8_2plane_420_unorm.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g8_b8r8_2plane_420_unorm.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g8_b8r8_2plane_420_unorm.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g8_b8r8_2plane_422_unorm.linear_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g8_b8r8_2plane_422_unorm.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g8_b8r8_2plane_422_unorm.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g8_b8r8_2plane_422_unorm.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g8_b8r8_2plane_422_unorm.linear_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g8_b8r8_2plane_422_unorm.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g8_b8r8_2plane_422_unorm.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g8_b8r8_2plane_422_unorm.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g8_b8r8_2plane_422_unorm.optimal_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g8_b8r8_2plane_422_unorm.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g8_b8r8_2plane_422_unorm.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g8_b8r8_2plane_422_unorm.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g8_b8r8_2plane_422_unorm.optimal_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g8_b8r8_2plane_422_unorm.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g8_b8r8_2plane_422_unorm.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g8_b8r8_2plane_422_unorm.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r10x6_unorm_pack16.linear_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r10x6_unorm_pack16.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r10x6_unorm_pack16.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r10x6_unorm_pack16.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r10x6_unorm_pack16.linear_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r10x6_unorm_pack16.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r10x6_unorm_pack16.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r10x6_unorm_pack16.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r10x6_unorm_pack16.optimal_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r10x6_unorm_pack16.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r10x6_unorm_pack16.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r10x6_unorm_pack16.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r10x6_unorm_pack16.optimal_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r10x6_unorm_pack16.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r10x6_unorm_pack16.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r10x6_unorm_pack16.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r10x6g10x6_unorm_2pack16.linear_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r10x6g10x6_unorm_2pack16.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r10x6g10x6_unorm_2pack16.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r10x6g10x6_unorm_2pack16.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r10x6g10x6_unorm_2pack16.linear_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r10x6g10x6_unorm_2pack16.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r10x6g10x6_unorm_2pack16.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r10x6g10x6_unorm_2pack16.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r10x6g10x6_unorm_2pack16.optimal_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r10x6g10x6_unorm_2pack16.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r10x6g10x6_unorm_2pack16.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r10x6g10x6_unorm_2pack16.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r10x6g10x6_unorm_2pack16.optimal_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r10x6g10x6_unorm_2pack16.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r10x6g10x6_unorm_2pack16.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r10x6g10x6_unorm_2pack16.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.linear_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.linear_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.optimal_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.optimal_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g10x6_b10x6_r10x6_3plane_420_unorm_3pack16.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.linear_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.linear_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.optimal_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.optimal_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g10x6_b10x6r10x6_2plane_420_unorm_3pack16.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.linear_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.linear_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.optimal_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.optimal_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g10x6_b10x6_r10x6_3plane_422_unorm_3pack16.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.linear_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.linear_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.optimal_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.optimal_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g10x6_b10x6r10x6_2plane_422_unorm_3pack16.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.linear_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.linear_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.optimal_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.optimal_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g10x6_b10x6_r10x6_3plane_444_unorm_3pack16.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r12x4_unorm_pack16.linear_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r12x4_unorm_pack16.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r12x4_unorm_pack16.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r12x4_unorm_pack16.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r12x4_unorm_pack16.linear_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r12x4_unorm_pack16.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r12x4_unorm_pack16.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r12x4_unorm_pack16.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r12x4_unorm_pack16.optimal_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r12x4_unorm_pack16.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r12x4_unorm_pack16.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r12x4_unorm_pack16.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r12x4_unorm_pack16.optimal_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r12x4_unorm_pack16.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r12x4_unorm_pack16.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r12x4_unorm_pack16.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r12x4g12x4_unorm_2pack16.linear_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r12x4g12x4_unorm_2pack16.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r12x4g12x4_unorm_2pack16.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r12x4g12x4_unorm_2pack16.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r12x4g12x4_unorm_2pack16.linear_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r12x4g12x4_unorm_2pack16.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r12x4g12x4_unorm_2pack16.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r12x4g12x4_unorm_2pack16.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r12x4g12x4_unorm_2pack16.optimal_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r12x4g12x4_unorm_2pack16.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r12x4g12x4_unorm_2pack16.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r12x4g12x4_unorm_2pack16.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r12x4g12x4_unorm_2pack16.optimal_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r12x4g12x4_unorm_2pack16.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r12x4g12x4_unorm_2pack16.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.r12x4g12x4_unorm_2pack16.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.linear_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.linear_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.optimal_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.optimal_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g12x4_b12x4_r12x4_3plane_420_unorm_3pack16.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.linear_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.linear_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.optimal_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.optimal_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g12x4_b12x4r12x4_2plane_420_unorm_3pack16.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.linear_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.linear_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.optimal_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.optimal_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g12x4_b12x4_r12x4_3plane_422_unorm_3pack16.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.linear_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.linear_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.optimal_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.optimal_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g12x4_b12x4r12x4_2plane_422_unorm_3pack16.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.linear_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.linear_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.optimal_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.optimal_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g12x4_b12x4_r12x4_3plane_444_unorm_3pack16.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g16_b16_r16_3plane_420_unorm.linear_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g16_b16_r16_3plane_420_unorm.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g16_b16_r16_3plane_420_unorm.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g16_b16_r16_3plane_420_unorm.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g16_b16_r16_3plane_420_unorm.linear_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g16_b16_r16_3plane_420_unorm.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g16_b16_r16_3plane_420_unorm.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g16_b16_r16_3plane_420_unorm.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g16_b16_r16_3plane_420_unorm.optimal_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g16_b16_r16_3plane_420_unorm.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g16_b16_r16_3plane_420_unorm.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g16_b16_r16_3plane_420_unorm.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g16_b16_r16_3plane_420_unorm.optimal_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g16_b16_r16_3plane_420_unorm.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g16_b16_r16_3plane_420_unorm.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g16_b16_r16_3plane_420_unorm.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g16_b16r16_2plane_420_unorm.linear_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g16_b16r16_2plane_420_unorm.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g16_b16r16_2plane_420_unorm.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g16_b16r16_2plane_420_unorm.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g16_b16r16_2plane_420_unorm.linear_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g16_b16r16_2plane_420_unorm.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g16_b16r16_2plane_420_unorm.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g16_b16r16_2plane_420_unorm.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g16_b16r16_2plane_420_unorm.optimal_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g16_b16r16_2plane_420_unorm.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g16_b16r16_2plane_420_unorm.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g16_b16r16_2plane_420_unorm.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g16_b16r16_2plane_420_unorm.optimal_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g16_b16r16_2plane_420_unorm.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g16_b16r16_2plane_420_unorm.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g16_b16r16_2plane_420_unorm.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g16_b16_r16_3plane_422_unorm.linear_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g16_b16_r16_3plane_422_unorm.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g16_b16_r16_3plane_422_unorm.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g16_b16_r16_3plane_422_unorm.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g16_b16_r16_3plane_422_unorm.linear_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g16_b16_r16_3plane_422_unorm.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g16_b16_r16_3plane_422_unorm.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g16_b16_r16_3plane_422_unorm.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g16_b16_r16_3plane_422_unorm.optimal_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g16_b16_r16_3plane_422_unorm.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g16_b16_r16_3plane_422_unorm.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g16_b16_r16_3plane_422_unorm.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g16_b16_r16_3plane_422_unorm.optimal_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g16_b16_r16_3plane_422_unorm.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g16_b16_r16_3plane_422_unorm.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g16_b16_r16_3plane_422_unorm.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g16_b16r16_2plane_422_unorm.linear_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g16_b16r16_2plane_422_unorm.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g16_b16r16_2plane_422_unorm.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g16_b16r16_2plane_422_unorm.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g16_b16r16_2plane_422_unorm.linear_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g16_b16r16_2plane_422_unorm.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g16_b16r16_2plane_422_unorm.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g16_b16r16_2plane_422_unorm.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g16_b16r16_2plane_422_unorm.optimal_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g16_b16r16_2plane_422_unorm.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g16_b16r16_2plane_422_unorm.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g16_b16r16_2plane_422_unorm.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g16_b16r16_2plane_422_unorm.optimal_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g16_b16r16_2plane_422_unorm.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g16_b16r16_2plane_422_unorm.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g16_b16r16_2plane_422_unorm.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g16_b16_r16_3plane_444_unorm.linear_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g16_b16_r16_3plane_444_unorm.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g16_b16_r16_3plane_444_unorm.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g16_b16_r16_3plane_444_unorm.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g16_b16_r16_3plane_444_unorm.linear_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g16_b16_r16_3plane_444_unorm.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g16_b16_r16_3plane_444_unorm.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g16_b16_r16_3plane_444_unorm.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g16_b16_r16_3plane_444_unorm.optimal_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g16_b16_r16_3plane_444_unorm.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g16_b16_r16_3plane_444_unorm.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g16_b16_r16_3plane_444_unorm.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g16_b16_r16_3plane_444_unorm.optimal_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g16_b16_r16_3plane_444_unorm.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g16_b16_r16_3plane_444_unorm.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g16_b16_r16_3plane_444_unorm.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g8_b8r8_2plane_444_unorm_ext.linear_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g8_b8r8_2plane_444_unorm_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g8_b8r8_2plane_444_unorm_ext.linear_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g8_b8r8_2plane_444_unorm_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g8_b8r8_2plane_444_unorm_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g8_b8r8_2plane_444_unorm_ext.optimal_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g8_b8r8_2plane_444_unorm_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g8_b8r8_2plane_444_unorm_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g8_b8r8_2plane_444_unorm_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g8_b8r8_2plane_444_unorm_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g16_b16r16_2plane_444_unorm_ext.linear_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g16_b16r16_2plane_444_unorm_ext.linear_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g16_b16r16_2plane_444_unorm_ext.linear_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g16_b16r16_2plane_444_unorm_ext.linear_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g16_b16r16_2plane_444_unorm_ext.linear_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g16_b16r16_2plane_444_unorm_ext.optimal_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g16_b16r16_2plane_444_unorm_ext.optimal_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_linear
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_linear_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g16_b16r16_2plane_444_unorm_ext.optimal_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g16_b16r16_2plane_444_unorm_ext.optimal_optimal_disjoint
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_optimal
+dEQP-VK.ycbcr.copy.g16_b16r16_2plane_444_unorm_ext.g16_b16r16_2plane_444_unorm_ext.optimal_disjoint_optimal_disjoint
+dEQP-VK.ycbcr.storage_image_write.g8_b8r8_2plane_444_unorm_ext.512_512_1.joint
+dEQP-VK.ycbcr.storage_image_write.g8_b8r8_2plane_444_unorm_ext.512_512_1.disjoint
+dEQP-VK.ycbcr.storage_image_write.g8_b8r8_2plane_444_unorm_ext.1024_128_1.joint
+dEQP-VK.ycbcr.storage_image_write.g8_b8r8_2plane_444_unorm_ext.1024_128_1.disjoint
+dEQP-VK.ycbcr.storage_image_write.g8_b8r8_2plane_444_unorm_ext.66_32_1.joint
+dEQP-VK.ycbcr.storage_image_write.g8_b8r8_2plane_444_unorm_ext.66_32_1.disjoint
+dEQP-VK.ycbcr.storage_image_write.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.512_512_1.joint
+dEQP-VK.ycbcr.storage_image_write.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.512_512_1.disjoint
+dEQP-VK.ycbcr.storage_image_write.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.1024_128_1.joint
+dEQP-VK.ycbcr.storage_image_write.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.1024_128_1.disjoint
+dEQP-VK.ycbcr.storage_image_write.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.66_32_1.joint
+dEQP-VK.ycbcr.storage_image_write.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.66_32_1.disjoint
+dEQP-VK.ycbcr.storage_image_write.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.512_512_1.joint
+dEQP-VK.ycbcr.storage_image_write.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.512_512_1.disjoint
+dEQP-VK.ycbcr.storage_image_write.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.1024_128_1.joint
+dEQP-VK.ycbcr.storage_image_write.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.1024_128_1.disjoint
+dEQP-VK.ycbcr.storage_image_write.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.66_32_1.joint
+dEQP-VK.ycbcr.storage_image_write.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.66_32_1.disjoint
+dEQP-VK.ycbcr.storage_image_write.g16_b16r16_2plane_444_unorm_ext.512_512_1.joint
+dEQP-VK.ycbcr.storage_image_write.g16_b16r16_2plane_444_unorm_ext.512_512_1.disjoint
+dEQP-VK.ycbcr.storage_image_write.g16_b16r16_2plane_444_unorm_ext.1024_128_1.joint
+dEQP-VK.ycbcr.storage_image_write.g16_b16r16_2plane_444_unorm_ext.1024_128_1.disjoint
+dEQP-VK.ycbcr.storage_image_write.g16_b16r16_2plane_444_unorm_ext.66_32_1.joint
+dEQP-VK.ycbcr.storage_image_write.g16_b16r16_2plane_444_unorm_ext.66_32_1.disjoint
+dEQP-VK.protected_memory.interaction.wsi.headless.swapchain.create.min_image_count
+dEQP-VK.protected_memory.interaction.wsi.headless.swapchain.create.image_format
+dEQP-VK.protected_memory.interaction.wsi.headless.swapchain.create.image_extent
+dEQP-VK.protected_memory.interaction.wsi.headless.swapchain.create.image_array_layers
+dEQP-VK.protected_memory.interaction.wsi.headless.swapchain.create.image_usage
+dEQP-VK.protected_memory.interaction.wsi.headless.swapchain.create.image_sharing_mode
+dEQP-VK.protected_memory.interaction.wsi.headless.swapchain.create.pre_transform
+dEQP-VK.protected_memory.interaction.wsi.headless.swapchain.create.composite_alpha
+dEQP-VK.protected_memory.interaction.wsi.headless.swapchain.create.present_mode
+dEQP-VK.protected_memory.interaction.wsi.headless.swapchain.create.clipped
+dEQP-VK.protected_memory.interaction.wsi.headless.swapchain.render.basic
+dEQP-VK.protected_memory.interaction.ycbcr.g8_b8r8_2plane_444_unorm_ext.fragment.rgb_identity.itu_full.tiling_optimal_cosited
+dEQP-VK.protected_memory.interaction.ycbcr.g8_b8r8_2plane_444_unorm_ext.fragment.rgb_identity.itu_full.tiling_optimal_cosited_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g8_b8r8_2plane_444_unorm_ext.fragment.rgb_identity.itu_full.tiling_optimal_midpoint
+dEQP-VK.protected_memory.interaction.ycbcr.g8_b8r8_2plane_444_unorm_ext.fragment.rgb_identity.itu_full.tiling_optimal_midpoint_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g8_b8r8_2plane_444_unorm_ext.fragment.rgb_identity.itu_narrow.tiling_optimal_cosited
+dEQP-VK.protected_memory.interaction.ycbcr.g8_b8r8_2plane_444_unorm_ext.fragment.rgb_identity.itu_narrow.tiling_optimal_cosited_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g8_b8r8_2plane_444_unorm_ext.fragment.rgb_identity.itu_narrow.tiling_optimal_midpoint
+dEQP-VK.protected_memory.interaction.ycbcr.g8_b8r8_2plane_444_unorm_ext.fragment.rgb_identity.itu_narrow.tiling_optimal_midpoint_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g8_b8r8_2plane_444_unorm_ext.fragment.ycbcr_identity.itu_full.tiling_optimal_cosited
+dEQP-VK.protected_memory.interaction.ycbcr.g8_b8r8_2plane_444_unorm_ext.fragment.ycbcr_identity.itu_full.tiling_optimal_cosited_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g8_b8r8_2plane_444_unorm_ext.fragment.ycbcr_identity.itu_full.tiling_optimal_midpoint
+dEQP-VK.protected_memory.interaction.ycbcr.g8_b8r8_2plane_444_unorm_ext.fragment.ycbcr_identity.itu_full.tiling_optimal_midpoint_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g8_b8r8_2plane_444_unorm_ext.fragment.ycbcr_identity.itu_narrow.tiling_optimal_cosited
+dEQP-VK.protected_memory.interaction.ycbcr.g8_b8r8_2plane_444_unorm_ext.fragment.ycbcr_identity.itu_narrow.tiling_optimal_cosited_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g8_b8r8_2plane_444_unorm_ext.fragment.ycbcr_identity.itu_narrow.tiling_optimal_midpoint
+dEQP-VK.protected_memory.interaction.ycbcr.g8_b8r8_2plane_444_unorm_ext.fragment.ycbcr_identity.itu_narrow.tiling_optimal_midpoint_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g8_b8r8_2plane_444_unorm_ext.fragment.ycbcr_709.itu_full.tiling_optimal_cosited
+dEQP-VK.protected_memory.interaction.ycbcr.g8_b8r8_2plane_444_unorm_ext.fragment.ycbcr_709.itu_full.tiling_optimal_cosited_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g8_b8r8_2plane_444_unorm_ext.fragment.ycbcr_709.itu_full.tiling_optimal_midpoint
+dEQP-VK.protected_memory.interaction.ycbcr.g8_b8r8_2plane_444_unorm_ext.fragment.ycbcr_709.itu_full.tiling_optimal_midpoint_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g8_b8r8_2plane_444_unorm_ext.fragment.ycbcr_709.itu_narrow.tiling_optimal_cosited
+dEQP-VK.protected_memory.interaction.ycbcr.g8_b8r8_2plane_444_unorm_ext.fragment.ycbcr_709.itu_narrow.tiling_optimal_cosited_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g8_b8r8_2plane_444_unorm_ext.fragment.ycbcr_709.itu_narrow.tiling_optimal_midpoint
+dEQP-VK.protected_memory.interaction.ycbcr.g8_b8r8_2plane_444_unorm_ext.fragment.ycbcr_709.itu_narrow.tiling_optimal_midpoint_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g8_b8r8_2plane_444_unorm_ext.fragment.ycbcr_601.itu_full.tiling_optimal_cosited
+dEQP-VK.protected_memory.interaction.ycbcr.g8_b8r8_2plane_444_unorm_ext.fragment.ycbcr_601.itu_full.tiling_optimal_cosited_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g8_b8r8_2plane_444_unorm_ext.fragment.ycbcr_601.itu_full.tiling_optimal_midpoint
+dEQP-VK.protected_memory.interaction.ycbcr.g8_b8r8_2plane_444_unorm_ext.fragment.ycbcr_601.itu_full.tiling_optimal_midpoint_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g8_b8r8_2plane_444_unorm_ext.fragment.ycbcr_601.itu_narrow.tiling_optimal_cosited
+dEQP-VK.protected_memory.interaction.ycbcr.g8_b8r8_2plane_444_unorm_ext.fragment.ycbcr_601.itu_narrow.tiling_optimal_cosited_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g8_b8r8_2plane_444_unorm_ext.fragment.ycbcr_601.itu_narrow.tiling_optimal_midpoint
+dEQP-VK.protected_memory.interaction.ycbcr.g8_b8r8_2plane_444_unorm_ext.fragment.ycbcr_601.itu_narrow.tiling_optimal_midpoint_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g8_b8r8_2plane_444_unorm_ext.fragment.ycbcr_2020.itu_full.tiling_optimal_cosited
+dEQP-VK.protected_memory.interaction.ycbcr.g8_b8r8_2plane_444_unorm_ext.fragment.ycbcr_2020.itu_full.tiling_optimal_cosited_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g8_b8r8_2plane_444_unorm_ext.fragment.ycbcr_2020.itu_full.tiling_optimal_midpoint
+dEQP-VK.protected_memory.interaction.ycbcr.g8_b8r8_2plane_444_unorm_ext.fragment.ycbcr_2020.itu_full.tiling_optimal_midpoint_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g8_b8r8_2plane_444_unorm_ext.fragment.ycbcr_2020.itu_narrow.tiling_optimal_cosited
+dEQP-VK.protected_memory.interaction.ycbcr.g8_b8r8_2plane_444_unorm_ext.fragment.ycbcr_2020.itu_narrow.tiling_optimal_cosited_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g8_b8r8_2plane_444_unorm_ext.fragment.ycbcr_2020.itu_narrow.tiling_optimal_midpoint
+dEQP-VK.protected_memory.interaction.ycbcr.g8_b8r8_2plane_444_unorm_ext.fragment.ycbcr_2020.itu_narrow.tiling_optimal_midpoint_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g8_b8r8_2plane_444_unorm_ext.compute.rgb_identity.itu_full.tiling_optimal_cosited
+dEQP-VK.protected_memory.interaction.ycbcr.g8_b8r8_2plane_444_unorm_ext.compute.rgb_identity.itu_full.tiling_optimal_cosited_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g8_b8r8_2plane_444_unorm_ext.compute.rgb_identity.itu_full.tiling_optimal_midpoint
+dEQP-VK.protected_memory.interaction.ycbcr.g8_b8r8_2plane_444_unorm_ext.compute.rgb_identity.itu_full.tiling_optimal_midpoint_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g8_b8r8_2plane_444_unorm_ext.compute.rgb_identity.itu_narrow.tiling_optimal_cosited
+dEQP-VK.protected_memory.interaction.ycbcr.g8_b8r8_2plane_444_unorm_ext.compute.rgb_identity.itu_narrow.tiling_optimal_cosited_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g8_b8r8_2plane_444_unorm_ext.compute.rgb_identity.itu_narrow.tiling_optimal_midpoint
+dEQP-VK.protected_memory.interaction.ycbcr.g8_b8r8_2plane_444_unorm_ext.compute.rgb_identity.itu_narrow.tiling_optimal_midpoint_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g8_b8r8_2plane_444_unorm_ext.compute.ycbcr_identity.itu_full.tiling_optimal_cosited
+dEQP-VK.protected_memory.interaction.ycbcr.g8_b8r8_2plane_444_unorm_ext.compute.ycbcr_identity.itu_full.tiling_optimal_cosited_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g8_b8r8_2plane_444_unorm_ext.compute.ycbcr_identity.itu_full.tiling_optimal_midpoint
+dEQP-VK.protected_memory.interaction.ycbcr.g8_b8r8_2plane_444_unorm_ext.compute.ycbcr_identity.itu_full.tiling_optimal_midpoint_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g8_b8r8_2plane_444_unorm_ext.compute.ycbcr_identity.itu_narrow.tiling_optimal_cosited
+dEQP-VK.protected_memory.interaction.ycbcr.g8_b8r8_2plane_444_unorm_ext.compute.ycbcr_identity.itu_narrow.tiling_optimal_cosited_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g8_b8r8_2plane_444_unorm_ext.compute.ycbcr_identity.itu_narrow.tiling_optimal_midpoint
+dEQP-VK.protected_memory.interaction.ycbcr.g8_b8r8_2plane_444_unorm_ext.compute.ycbcr_identity.itu_narrow.tiling_optimal_midpoint_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g8_b8r8_2plane_444_unorm_ext.compute.ycbcr_709.itu_full.tiling_optimal_cosited
+dEQP-VK.protected_memory.interaction.ycbcr.g8_b8r8_2plane_444_unorm_ext.compute.ycbcr_709.itu_full.tiling_optimal_cosited_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g8_b8r8_2plane_444_unorm_ext.compute.ycbcr_709.itu_full.tiling_optimal_midpoint
+dEQP-VK.protected_memory.interaction.ycbcr.g8_b8r8_2plane_444_unorm_ext.compute.ycbcr_709.itu_full.tiling_optimal_midpoint_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g8_b8r8_2plane_444_unorm_ext.compute.ycbcr_709.itu_narrow.tiling_optimal_cosited
+dEQP-VK.protected_memory.interaction.ycbcr.g8_b8r8_2plane_444_unorm_ext.compute.ycbcr_709.itu_narrow.tiling_optimal_cosited_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g8_b8r8_2plane_444_unorm_ext.compute.ycbcr_709.itu_narrow.tiling_optimal_midpoint
+dEQP-VK.protected_memory.interaction.ycbcr.g8_b8r8_2plane_444_unorm_ext.compute.ycbcr_709.itu_narrow.tiling_optimal_midpoint_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g8_b8r8_2plane_444_unorm_ext.compute.ycbcr_601.itu_full.tiling_optimal_cosited
+dEQP-VK.protected_memory.interaction.ycbcr.g8_b8r8_2plane_444_unorm_ext.compute.ycbcr_601.itu_full.tiling_optimal_cosited_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g8_b8r8_2plane_444_unorm_ext.compute.ycbcr_601.itu_full.tiling_optimal_midpoint
+dEQP-VK.protected_memory.interaction.ycbcr.g8_b8r8_2plane_444_unorm_ext.compute.ycbcr_601.itu_full.tiling_optimal_midpoint_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g8_b8r8_2plane_444_unorm_ext.compute.ycbcr_601.itu_narrow.tiling_optimal_cosited
+dEQP-VK.protected_memory.interaction.ycbcr.g8_b8r8_2plane_444_unorm_ext.compute.ycbcr_601.itu_narrow.tiling_optimal_cosited_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g8_b8r8_2plane_444_unorm_ext.compute.ycbcr_601.itu_narrow.tiling_optimal_midpoint
+dEQP-VK.protected_memory.interaction.ycbcr.g8_b8r8_2plane_444_unorm_ext.compute.ycbcr_601.itu_narrow.tiling_optimal_midpoint_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g8_b8r8_2plane_444_unorm_ext.compute.ycbcr_2020.itu_full.tiling_optimal_cosited
+dEQP-VK.protected_memory.interaction.ycbcr.g8_b8r8_2plane_444_unorm_ext.compute.ycbcr_2020.itu_full.tiling_optimal_cosited_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g8_b8r8_2plane_444_unorm_ext.compute.ycbcr_2020.itu_full.tiling_optimal_midpoint
+dEQP-VK.protected_memory.interaction.ycbcr.g8_b8r8_2plane_444_unorm_ext.compute.ycbcr_2020.itu_full.tiling_optimal_midpoint_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g8_b8r8_2plane_444_unorm_ext.compute.ycbcr_2020.itu_narrow.tiling_optimal_cosited
+dEQP-VK.protected_memory.interaction.ycbcr.g8_b8r8_2plane_444_unorm_ext.compute.ycbcr_2020.itu_narrow.tiling_optimal_cosited_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g8_b8r8_2plane_444_unorm_ext.compute.ycbcr_2020.itu_narrow.tiling_optimal_midpoint
+dEQP-VK.protected_memory.interaction.ycbcr.g8_b8r8_2plane_444_unorm_ext.compute.ycbcr_2020.itu_narrow.tiling_optimal_midpoint_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.fragment.rgb_identity.itu_full.tiling_optimal_cosited
+dEQP-VK.protected_memory.interaction.ycbcr.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.fragment.rgb_identity.itu_full.tiling_optimal_cosited_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.fragment.rgb_identity.itu_full.tiling_optimal_midpoint
+dEQP-VK.protected_memory.interaction.ycbcr.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.fragment.rgb_identity.itu_full.tiling_optimal_midpoint_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.fragment.rgb_identity.itu_narrow.tiling_optimal_cosited
+dEQP-VK.protected_memory.interaction.ycbcr.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.fragment.rgb_identity.itu_narrow.tiling_optimal_cosited_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.fragment.rgb_identity.itu_narrow.tiling_optimal_midpoint
+dEQP-VK.protected_memory.interaction.ycbcr.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.fragment.rgb_identity.itu_narrow.tiling_optimal_midpoint_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.fragment.ycbcr_identity.itu_full.tiling_optimal_cosited
+dEQP-VK.protected_memory.interaction.ycbcr.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.fragment.ycbcr_identity.itu_full.tiling_optimal_cosited_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.fragment.ycbcr_identity.itu_full.tiling_optimal_midpoint
+dEQP-VK.protected_memory.interaction.ycbcr.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.fragment.ycbcr_identity.itu_full.tiling_optimal_midpoint_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.fragment.ycbcr_identity.itu_narrow.tiling_optimal_cosited
+dEQP-VK.protected_memory.interaction.ycbcr.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.fragment.ycbcr_identity.itu_narrow.tiling_optimal_cosited_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.fragment.ycbcr_identity.itu_narrow.tiling_optimal_midpoint
+dEQP-VK.protected_memory.interaction.ycbcr.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.fragment.ycbcr_identity.itu_narrow.tiling_optimal_midpoint_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.fragment.ycbcr_709.itu_full.tiling_optimal_cosited
+dEQP-VK.protected_memory.interaction.ycbcr.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.fragment.ycbcr_709.itu_full.tiling_optimal_cosited_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.fragment.ycbcr_709.itu_full.tiling_optimal_midpoint
+dEQP-VK.protected_memory.interaction.ycbcr.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.fragment.ycbcr_709.itu_full.tiling_optimal_midpoint_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.fragment.ycbcr_709.itu_narrow.tiling_optimal_cosited
+dEQP-VK.protected_memory.interaction.ycbcr.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.fragment.ycbcr_709.itu_narrow.tiling_optimal_cosited_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.fragment.ycbcr_709.itu_narrow.tiling_optimal_midpoint
+dEQP-VK.protected_memory.interaction.ycbcr.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.fragment.ycbcr_709.itu_narrow.tiling_optimal_midpoint_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.fragment.ycbcr_601.itu_full.tiling_optimal_cosited
+dEQP-VK.protected_memory.interaction.ycbcr.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.fragment.ycbcr_601.itu_full.tiling_optimal_cosited_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.fragment.ycbcr_601.itu_full.tiling_optimal_midpoint
+dEQP-VK.protected_memory.interaction.ycbcr.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.fragment.ycbcr_601.itu_full.tiling_optimal_midpoint_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.fragment.ycbcr_601.itu_narrow.tiling_optimal_cosited
+dEQP-VK.protected_memory.interaction.ycbcr.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.fragment.ycbcr_601.itu_narrow.tiling_optimal_cosited_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.fragment.ycbcr_601.itu_narrow.tiling_optimal_midpoint
+dEQP-VK.protected_memory.interaction.ycbcr.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.fragment.ycbcr_601.itu_narrow.tiling_optimal_midpoint_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.fragment.ycbcr_2020.itu_full.tiling_optimal_cosited
+dEQP-VK.protected_memory.interaction.ycbcr.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.fragment.ycbcr_2020.itu_full.tiling_optimal_cosited_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.fragment.ycbcr_2020.itu_full.tiling_optimal_midpoint
+dEQP-VK.protected_memory.interaction.ycbcr.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.fragment.ycbcr_2020.itu_full.tiling_optimal_midpoint_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.fragment.ycbcr_2020.itu_narrow.tiling_optimal_cosited
+dEQP-VK.protected_memory.interaction.ycbcr.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.fragment.ycbcr_2020.itu_narrow.tiling_optimal_cosited_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.fragment.ycbcr_2020.itu_narrow.tiling_optimal_midpoint
+dEQP-VK.protected_memory.interaction.ycbcr.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.fragment.ycbcr_2020.itu_narrow.tiling_optimal_midpoint_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.compute.rgb_identity.itu_full.tiling_optimal_cosited
+dEQP-VK.protected_memory.interaction.ycbcr.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.compute.rgb_identity.itu_full.tiling_optimal_cosited_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.compute.rgb_identity.itu_full.tiling_optimal_midpoint
+dEQP-VK.protected_memory.interaction.ycbcr.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.compute.rgb_identity.itu_full.tiling_optimal_midpoint_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.compute.rgb_identity.itu_narrow.tiling_optimal_cosited
+dEQP-VK.protected_memory.interaction.ycbcr.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.compute.rgb_identity.itu_narrow.tiling_optimal_cosited_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.compute.rgb_identity.itu_narrow.tiling_optimal_midpoint
+dEQP-VK.protected_memory.interaction.ycbcr.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.compute.rgb_identity.itu_narrow.tiling_optimal_midpoint_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.compute.ycbcr_identity.itu_full.tiling_optimal_cosited
+dEQP-VK.protected_memory.interaction.ycbcr.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.compute.ycbcr_identity.itu_full.tiling_optimal_cosited_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.compute.ycbcr_identity.itu_full.tiling_optimal_midpoint
+dEQP-VK.protected_memory.interaction.ycbcr.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.compute.ycbcr_identity.itu_full.tiling_optimal_midpoint_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.compute.ycbcr_identity.itu_narrow.tiling_optimal_cosited
+dEQP-VK.protected_memory.interaction.ycbcr.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.compute.ycbcr_identity.itu_narrow.tiling_optimal_cosited_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.compute.ycbcr_identity.itu_narrow.tiling_optimal_midpoint
+dEQP-VK.protected_memory.interaction.ycbcr.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.compute.ycbcr_identity.itu_narrow.tiling_optimal_midpoint_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.compute.ycbcr_709.itu_full.tiling_optimal_cosited
+dEQP-VK.protected_memory.interaction.ycbcr.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.compute.ycbcr_709.itu_full.tiling_optimal_cosited_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.compute.ycbcr_709.itu_full.tiling_optimal_midpoint
+dEQP-VK.protected_memory.interaction.ycbcr.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.compute.ycbcr_709.itu_full.tiling_optimal_midpoint_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.compute.ycbcr_709.itu_narrow.tiling_optimal_cosited
+dEQP-VK.protected_memory.interaction.ycbcr.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.compute.ycbcr_709.itu_narrow.tiling_optimal_cosited_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.compute.ycbcr_709.itu_narrow.tiling_optimal_midpoint
+dEQP-VK.protected_memory.interaction.ycbcr.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.compute.ycbcr_709.itu_narrow.tiling_optimal_midpoint_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.compute.ycbcr_601.itu_full.tiling_optimal_cosited
+dEQP-VK.protected_memory.interaction.ycbcr.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.compute.ycbcr_601.itu_full.tiling_optimal_cosited_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.compute.ycbcr_601.itu_full.tiling_optimal_midpoint
+dEQP-VK.protected_memory.interaction.ycbcr.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.compute.ycbcr_601.itu_full.tiling_optimal_midpoint_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.compute.ycbcr_601.itu_narrow.tiling_optimal_cosited
+dEQP-VK.protected_memory.interaction.ycbcr.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.compute.ycbcr_601.itu_narrow.tiling_optimal_cosited_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.compute.ycbcr_601.itu_narrow.tiling_optimal_midpoint
+dEQP-VK.protected_memory.interaction.ycbcr.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.compute.ycbcr_601.itu_narrow.tiling_optimal_midpoint_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.compute.ycbcr_2020.itu_full.tiling_optimal_cosited
+dEQP-VK.protected_memory.interaction.ycbcr.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.compute.ycbcr_2020.itu_full.tiling_optimal_cosited_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.compute.ycbcr_2020.itu_full.tiling_optimal_midpoint
+dEQP-VK.protected_memory.interaction.ycbcr.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.compute.ycbcr_2020.itu_full.tiling_optimal_midpoint_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.compute.ycbcr_2020.itu_narrow.tiling_optimal_cosited
+dEQP-VK.protected_memory.interaction.ycbcr.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.compute.ycbcr_2020.itu_narrow.tiling_optimal_cosited_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.compute.ycbcr_2020.itu_narrow.tiling_optimal_midpoint
+dEQP-VK.protected_memory.interaction.ycbcr.g10x6_b10x6r10x6_2plane_444_unorm_3pack16_ext.compute.ycbcr_2020.itu_narrow.tiling_optimal_midpoint_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.fragment.rgb_identity.itu_full.tiling_optimal_cosited
+dEQP-VK.protected_memory.interaction.ycbcr.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.fragment.rgb_identity.itu_full.tiling_optimal_cosited_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.fragment.rgb_identity.itu_full.tiling_optimal_midpoint
+dEQP-VK.protected_memory.interaction.ycbcr.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.fragment.rgb_identity.itu_full.tiling_optimal_midpoint_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.fragment.rgb_identity.itu_narrow.tiling_optimal_cosited
+dEQP-VK.protected_memory.interaction.ycbcr.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.fragment.rgb_identity.itu_narrow.tiling_optimal_cosited_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.fragment.rgb_identity.itu_narrow.tiling_optimal_midpoint
+dEQP-VK.protected_memory.interaction.ycbcr.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.fragment.rgb_identity.itu_narrow.tiling_optimal_midpoint_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.fragment.ycbcr_identity.itu_full.tiling_optimal_cosited
+dEQP-VK.protected_memory.interaction.ycbcr.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.fragment.ycbcr_identity.itu_full.tiling_optimal_cosited_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.fragment.ycbcr_identity.itu_full.tiling_optimal_midpoint
+dEQP-VK.protected_memory.interaction.ycbcr.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.fragment.ycbcr_identity.itu_full.tiling_optimal_midpoint_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.fragment.ycbcr_identity.itu_narrow.tiling_optimal_cosited
+dEQP-VK.protected_memory.interaction.ycbcr.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.fragment.ycbcr_identity.itu_narrow.tiling_optimal_cosited_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.fragment.ycbcr_identity.itu_narrow.tiling_optimal_midpoint
+dEQP-VK.protected_memory.interaction.ycbcr.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.fragment.ycbcr_identity.itu_narrow.tiling_optimal_midpoint_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.fragment.ycbcr_709.itu_full.tiling_optimal_cosited
+dEQP-VK.protected_memory.interaction.ycbcr.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.fragment.ycbcr_709.itu_full.tiling_optimal_cosited_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.fragment.ycbcr_709.itu_full.tiling_optimal_midpoint
+dEQP-VK.protected_memory.interaction.ycbcr.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.fragment.ycbcr_709.itu_full.tiling_optimal_midpoint_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.fragment.ycbcr_709.itu_narrow.tiling_optimal_cosited
+dEQP-VK.protected_memory.interaction.ycbcr.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.fragment.ycbcr_709.itu_narrow.tiling_optimal_cosited_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.fragment.ycbcr_709.itu_narrow.tiling_optimal_midpoint
+dEQP-VK.protected_memory.interaction.ycbcr.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.fragment.ycbcr_709.itu_narrow.tiling_optimal_midpoint_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.fragment.ycbcr_601.itu_full.tiling_optimal_cosited
+dEQP-VK.protected_memory.interaction.ycbcr.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.fragment.ycbcr_601.itu_full.tiling_optimal_cosited_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.fragment.ycbcr_601.itu_full.tiling_optimal_midpoint
+dEQP-VK.protected_memory.interaction.ycbcr.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.fragment.ycbcr_601.itu_full.tiling_optimal_midpoint_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.fragment.ycbcr_601.itu_narrow.tiling_optimal_cosited
+dEQP-VK.protected_memory.interaction.ycbcr.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.fragment.ycbcr_601.itu_narrow.tiling_optimal_cosited_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.fragment.ycbcr_601.itu_narrow.tiling_optimal_midpoint
+dEQP-VK.protected_memory.interaction.ycbcr.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.fragment.ycbcr_601.itu_narrow.tiling_optimal_midpoint_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.fragment.ycbcr_2020.itu_full.tiling_optimal_cosited
+dEQP-VK.protected_memory.interaction.ycbcr.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.fragment.ycbcr_2020.itu_full.tiling_optimal_cosited_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.fragment.ycbcr_2020.itu_full.tiling_optimal_midpoint
+dEQP-VK.protected_memory.interaction.ycbcr.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.fragment.ycbcr_2020.itu_full.tiling_optimal_midpoint_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.fragment.ycbcr_2020.itu_narrow.tiling_optimal_cosited
+dEQP-VK.protected_memory.interaction.ycbcr.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.fragment.ycbcr_2020.itu_narrow.tiling_optimal_cosited_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.fragment.ycbcr_2020.itu_narrow.tiling_optimal_midpoint
+dEQP-VK.protected_memory.interaction.ycbcr.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.fragment.ycbcr_2020.itu_narrow.tiling_optimal_midpoint_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.compute.rgb_identity.itu_full.tiling_optimal_cosited
+dEQP-VK.protected_memory.interaction.ycbcr.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.compute.rgb_identity.itu_full.tiling_optimal_cosited_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.compute.rgb_identity.itu_full.tiling_optimal_midpoint
+dEQP-VK.protected_memory.interaction.ycbcr.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.compute.rgb_identity.itu_full.tiling_optimal_midpoint_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.compute.rgb_identity.itu_narrow.tiling_optimal_cosited
+dEQP-VK.protected_memory.interaction.ycbcr.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.compute.rgb_identity.itu_narrow.tiling_optimal_cosited_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.compute.rgb_identity.itu_narrow.tiling_optimal_midpoint
+dEQP-VK.protected_memory.interaction.ycbcr.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.compute.rgb_identity.itu_narrow.tiling_optimal_midpoint_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.compute.ycbcr_identity.itu_full.tiling_optimal_cosited
+dEQP-VK.protected_memory.interaction.ycbcr.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.compute.ycbcr_identity.itu_full.tiling_optimal_cosited_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.compute.ycbcr_identity.itu_full.tiling_optimal_midpoint
+dEQP-VK.protected_memory.interaction.ycbcr.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.compute.ycbcr_identity.itu_full.tiling_optimal_midpoint_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.compute.ycbcr_identity.itu_narrow.tiling_optimal_cosited
+dEQP-VK.protected_memory.interaction.ycbcr.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.compute.ycbcr_identity.itu_narrow.tiling_optimal_cosited_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.compute.ycbcr_identity.itu_narrow.tiling_optimal_midpoint
+dEQP-VK.protected_memory.interaction.ycbcr.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.compute.ycbcr_identity.itu_narrow.tiling_optimal_midpoint_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.compute.ycbcr_709.itu_full.tiling_optimal_cosited
+dEQP-VK.protected_memory.interaction.ycbcr.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.compute.ycbcr_709.itu_full.tiling_optimal_cosited_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.compute.ycbcr_709.itu_full.tiling_optimal_midpoint
+dEQP-VK.protected_memory.interaction.ycbcr.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.compute.ycbcr_709.itu_full.tiling_optimal_midpoint_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.compute.ycbcr_709.itu_narrow.tiling_optimal_cosited
+dEQP-VK.protected_memory.interaction.ycbcr.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.compute.ycbcr_709.itu_narrow.tiling_optimal_cosited_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.compute.ycbcr_709.itu_narrow.tiling_optimal_midpoint
+dEQP-VK.protected_memory.interaction.ycbcr.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.compute.ycbcr_709.itu_narrow.tiling_optimal_midpoint_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.compute.ycbcr_601.itu_full.tiling_optimal_cosited
+dEQP-VK.protected_memory.interaction.ycbcr.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.compute.ycbcr_601.itu_full.tiling_optimal_cosited_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.compute.ycbcr_601.itu_full.tiling_optimal_midpoint
+dEQP-VK.protected_memory.interaction.ycbcr.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.compute.ycbcr_601.itu_full.tiling_optimal_midpoint_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.compute.ycbcr_601.itu_narrow.tiling_optimal_cosited
+dEQP-VK.protected_memory.interaction.ycbcr.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.compute.ycbcr_601.itu_narrow.tiling_optimal_cosited_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.compute.ycbcr_601.itu_narrow.tiling_optimal_midpoint
+dEQP-VK.protected_memory.interaction.ycbcr.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.compute.ycbcr_601.itu_narrow.tiling_optimal_midpoint_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.compute.ycbcr_2020.itu_full.tiling_optimal_cosited
+dEQP-VK.protected_memory.interaction.ycbcr.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.compute.ycbcr_2020.itu_full.tiling_optimal_cosited_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.compute.ycbcr_2020.itu_full.tiling_optimal_midpoint
+dEQP-VK.protected_memory.interaction.ycbcr.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.compute.ycbcr_2020.itu_full.tiling_optimal_midpoint_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.compute.ycbcr_2020.itu_narrow.tiling_optimal_cosited
+dEQP-VK.protected_memory.interaction.ycbcr.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.compute.ycbcr_2020.itu_narrow.tiling_optimal_cosited_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.compute.ycbcr_2020.itu_narrow.tiling_optimal_midpoint
+dEQP-VK.protected_memory.interaction.ycbcr.g12x4_b12x4r12x4_2plane_444_unorm_3pack16_ext.compute.ycbcr_2020.itu_narrow.tiling_optimal_midpoint_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g16_b16r16_2plane_444_unorm_ext.fragment.rgb_identity.itu_full.tiling_optimal_cosited
+dEQP-VK.protected_memory.interaction.ycbcr.g16_b16r16_2plane_444_unorm_ext.fragment.rgb_identity.itu_full.tiling_optimal_cosited_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g16_b16r16_2plane_444_unorm_ext.fragment.rgb_identity.itu_full.tiling_optimal_midpoint
+dEQP-VK.protected_memory.interaction.ycbcr.g16_b16r16_2plane_444_unorm_ext.fragment.rgb_identity.itu_full.tiling_optimal_midpoint_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g16_b16r16_2plane_444_unorm_ext.fragment.rgb_identity.itu_narrow.tiling_optimal_cosited
+dEQP-VK.protected_memory.interaction.ycbcr.g16_b16r16_2plane_444_unorm_ext.fragment.rgb_identity.itu_narrow.tiling_optimal_cosited_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g16_b16r16_2plane_444_unorm_ext.fragment.rgb_identity.itu_narrow.tiling_optimal_midpoint
+dEQP-VK.protected_memory.interaction.ycbcr.g16_b16r16_2plane_444_unorm_ext.fragment.rgb_identity.itu_narrow.tiling_optimal_midpoint_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g16_b16r16_2plane_444_unorm_ext.fragment.ycbcr_identity.itu_full.tiling_optimal_cosited
+dEQP-VK.protected_memory.interaction.ycbcr.g16_b16r16_2plane_444_unorm_ext.fragment.ycbcr_identity.itu_full.tiling_optimal_cosited_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g16_b16r16_2plane_444_unorm_ext.fragment.ycbcr_identity.itu_full.tiling_optimal_midpoint
+dEQP-VK.protected_memory.interaction.ycbcr.g16_b16r16_2plane_444_unorm_ext.fragment.ycbcr_identity.itu_full.tiling_optimal_midpoint_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g16_b16r16_2plane_444_unorm_ext.fragment.ycbcr_identity.itu_narrow.tiling_optimal_cosited
+dEQP-VK.protected_memory.interaction.ycbcr.g16_b16r16_2plane_444_unorm_ext.fragment.ycbcr_identity.itu_narrow.tiling_optimal_cosited_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g16_b16r16_2plane_444_unorm_ext.fragment.ycbcr_identity.itu_narrow.tiling_optimal_midpoint
+dEQP-VK.protected_memory.interaction.ycbcr.g16_b16r16_2plane_444_unorm_ext.fragment.ycbcr_identity.itu_narrow.tiling_optimal_midpoint_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g16_b16r16_2plane_444_unorm_ext.fragment.ycbcr_709.itu_full.tiling_optimal_cosited
+dEQP-VK.protected_memory.interaction.ycbcr.g16_b16r16_2plane_444_unorm_ext.fragment.ycbcr_709.itu_full.tiling_optimal_cosited_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g16_b16r16_2plane_444_unorm_ext.fragment.ycbcr_709.itu_full.tiling_optimal_midpoint
+dEQP-VK.protected_memory.interaction.ycbcr.g16_b16r16_2plane_444_unorm_ext.fragment.ycbcr_709.itu_full.tiling_optimal_midpoint_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g16_b16r16_2plane_444_unorm_ext.fragment.ycbcr_709.itu_narrow.tiling_optimal_cosited
+dEQP-VK.protected_memory.interaction.ycbcr.g16_b16r16_2plane_444_unorm_ext.fragment.ycbcr_709.itu_narrow.tiling_optimal_cosited_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g16_b16r16_2plane_444_unorm_ext.fragment.ycbcr_709.itu_narrow.tiling_optimal_midpoint
+dEQP-VK.protected_memory.interaction.ycbcr.g16_b16r16_2plane_444_unorm_ext.fragment.ycbcr_709.itu_narrow.tiling_optimal_midpoint_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g16_b16r16_2plane_444_unorm_ext.fragment.ycbcr_601.itu_full.tiling_optimal_cosited
+dEQP-VK.protected_memory.interaction.ycbcr.g16_b16r16_2plane_444_unorm_ext.fragment.ycbcr_601.itu_full.tiling_optimal_cosited_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g16_b16r16_2plane_444_unorm_ext.fragment.ycbcr_601.itu_full.tiling_optimal_midpoint
+dEQP-VK.protected_memory.interaction.ycbcr.g16_b16r16_2plane_444_unorm_ext.fragment.ycbcr_601.itu_full.tiling_optimal_midpoint_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g16_b16r16_2plane_444_unorm_ext.fragment.ycbcr_601.itu_narrow.tiling_optimal_cosited
+dEQP-VK.protected_memory.interaction.ycbcr.g16_b16r16_2plane_444_unorm_ext.fragment.ycbcr_601.itu_narrow.tiling_optimal_cosited_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g16_b16r16_2plane_444_unorm_ext.fragment.ycbcr_601.itu_narrow.tiling_optimal_midpoint
+dEQP-VK.protected_memory.interaction.ycbcr.g16_b16r16_2plane_444_unorm_ext.fragment.ycbcr_601.itu_narrow.tiling_optimal_midpoint_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g16_b16r16_2plane_444_unorm_ext.fragment.ycbcr_2020.itu_full.tiling_optimal_cosited
+dEQP-VK.protected_memory.interaction.ycbcr.g16_b16r16_2plane_444_unorm_ext.fragment.ycbcr_2020.itu_full.tiling_optimal_cosited_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g16_b16r16_2plane_444_unorm_ext.fragment.ycbcr_2020.itu_full.tiling_optimal_midpoint
+dEQP-VK.protected_memory.interaction.ycbcr.g16_b16r16_2plane_444_unorm_ext.fragment.ycbcr_2020.itu_full.tiling_optimal_midpoint_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g16_b16r16_2plane_444_unorm_ext.fragment.ycbcr_2020.itu_narrow.tiling_optimal_cosited
+dEQP-VK.protected_memory.interaction.ycbcr.g16_b16r16_2plane_444_unorm_ext.fragment.ycbcr_2020.itu_narrow.tiling_optimal_cosited_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g16_b16r16_2plane_444_unorm_ext.fragment.ycbcr_2020.itu_narrow.tiling_optimal_midpoint
+dEQP-VK.protected_memory.interaction.ycbcr.g16_b16r16_2plane_444_unorm_ext.fragment.ycbcr_2020.itu_narrow.tiling_optimal_midpoint_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g16_b16r16_2plane_444_unorm_ext.compute.rgb_identity.itu_full.tiling_optimal_cosited
+dEQP-VK.protected_memory.interaction.ycbcr.g16_b16r16_2plane_444_unorm_ext.compute.rgb_identity.itu_full.tiling_optimal_cosited_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g16_b16r16_2plane_444_unorm_ext.compute.rgb_identity.itu_full.tiling_optimal_midpoint
+dEQP-VK.protected_memory.interaction.ycbcr.g16_b16r16_2plane_444_unorm_ext.compute.rgb_identity.itu_full.tiling_optimal_midpoint_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g16_b16r16_2plane_444_unorm_ext.compute.rgb_identity.itu_narrow.tiling_optimal_cosited
+dEQP-VK.protected_memory.interaction.ycbcr.g16_b16r16_2plane_444_unorm_ext.compute.rgb_identity.itu_narrow.tiling_optimal_cosited_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g16_b16r16_2plane_444_unorm_ext.compute.rgb_identity.itu_narrow.tiling_optimal_midpoint
+dEQP-VK.protected_memory.interaction.ycbcr.g16_b16r16_2plane_444_unorm_ext.compute.rgb_identity.itu_narrow.tiling_optimal_midpoint_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g16_b16r16_2plane_444_unorm_ext.compute.ycbcr_identity.itu_full.tiling_optimal_cosited
+dEQP-VK.protected_memory.interaction.ycbcr.g16_b16r16_2plane_444_unorm_ext.compute.ycbcr_identity.itu_full.tiling_optimal_cosited_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g16_b16r16_2plane_444_unorm_ext.compute.ycbcr_identity.itu_full.tiling_optimal_midpoint
+dEQP-VK.protected_memory.interaction.ycbcr.g16_b16r16_2plane_444_unorm_ext.compute.ycbcr_identity.itu_full.tiling_optimal_midpoint_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g16_b16r16_2plane_444_unorm_ext.compute.ycbcr_identity.itu_narrow.tiling_optimal_cosited
+dEQP-VK.protected_memory.interaction.ycbcr.g16_b16r16_2plane_444_unorm_ext.compute.ycbcr_identity.itu_narrow.tiling_optimal_cosited_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g16_b16r16_2plane_444_unorm_ext.compute.ycbcr_identity.itu_narrow.tiling_optimal_midpoint
+dEQP-VK.protected_memory.interaction.ycbcr.g16_b16r16_2plane_444_unorm_ext.compute.ycbcr_identity.itu_narrow.tiling_optimal_midpoint_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g16_b16r16_2plane_444_unorm_ext.compute.ycbcr_709.itu_full.tiling_optimal_cosited
+dEQP-VK.protected_memory.interaction.ycbcr.g16_b16r16_2plane_444_unorm_ext.compute.ycbcr_709.itu_full.tiling_optimal_cosited_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g16_b16r16_2plane_444_unorm_ext.compute.ycbcr_709.itu_full.tiling_optimal_midpoint
+dEQP-VK.protected_memory.interaction.ycbcr.g16_b16r16_2plane_444_unorm_ext.compute.ycbcr_709.itu_full.tiling_optimal_midpoint_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g16_b16r16_2plane_444_unorm_ext.compute.ycbcr_709.itu_narrow.tiling_optimal_cosited
+dEQP-VK.protected_memory.interaction.ycbcr.g16_b16r16_2plane_444_unorm_ext.compute.ycbcr_709.itu_narrow.tiling_optimal_cosited_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g16_b16r16_2plane_444_unorm_ext.compute.ycbcr_709.itu_narrow.tiling_optimal_midpoint
+dEQP-VK.protected_memory.interaction.ycbcr.g16_b16r16_2plane_444_unorm_ext.compute.ycbcr_709.itu_narrow.tiling_optimal_midpoint_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g16_b16r16_2plane_444_unorm_ext.compute.ycbcr_601.itu_full.tiling_optimal_cosited
+dEQP-VK.protected_memory.interaction.ycbcr.g16_b16r16_2plane_444_unorm_ext.compute.ycbcr_601.itu_full.tiling_optimal_cosited_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g16_b16r16_2plane_444_unorm_ext.compute.ycbcr_601.itu_full.tiling_optimal_midpoint
+dEQP-VK.protected_memory.interaction.ycbcr.g16_b16r16_2plane_444_unorm_ext.compute.ycbcr_601.itu_full.tiling_optimal_midpoint_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g16_b16r16_2plane_444_unorm_ext.compute.ycbcr_601.itu_narrow.tiling_optimal_cosited
+dEQP-VK.protected_memory.interaction.ycbcr.g16_b16r16_2plane_444_unorm_ext.compute.ycbcr_601.itu_narrow.tiling_optimal_cosited_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g16_b16r16_2plane_444_unorm_ext.compute.ycbcr_601.itu_narrow.tiling_optimal_midpoint
+dEQP-VK.protected_memory.interaction.ycbcr.g16_b16r16_2plane_444_unorm_ext.compute.ycbcr_601.itu_narrow.tiling_optimal_midpoint_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g16_b16r16_2plane_444_unorm_ext.compute.ycbcr_2020.itu_full.tiling_optimal_cosited
+dEQP-VK.protected_memory.interaction.ycbcr.g16_b16r16_2plane_444_unorm_ext.compute.ycbcr_2020.itu_full.tiling_optimal_cosited_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g16_b16r16_2plane_444_unorm_ext.compute.ycbcr_2020.itu_full.tiling_optimal_midpoint
+dEQP-VK.protected_memory.interaction.ycbcr.g16_b16r16_2plane_444_unorm_ext.compute.ycbcr_2020.itu_full.tiling_optimal_midpoint_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g16_b16r16_2plane_444_unorm_ext.compute.ycbcr_2020.itu_narrow.tiling_optimal_cosited
+dEQP-VK.protected_memory.interaction.ycbcr.g16_b16r16_2plane_444_unorm_ext.compute.ycbcr_2020.itu_narrow.tiling_optimal_cosited_disjoint
+dEQP-VK.protected_memory.interaction.ycbcr.g16_b16r16_2plane_444_unorm_ext.compute.ycbcr_2020.itu_narrow.tiling_optimal_midpoint
+dEQP-VK.protected_memory.interaction.ycbcr.g16_b16r16_2plane_444_unorm_ext.compute.ycbcr_2020.itu_narrow.tiling_optimal_midpoint_disjoint
 dEQP-VK.memory_model.message_passing.ext.f32.coherent.atomic_atomic.atomicwrite.device.payload_nonlocal.buffer.guard_nonlocal.buffer.comp
 dEQP-VK.memory_model.message_passing.ext.f32.coherent.atomic_atomic.atomicwrite.device.payload_nonlocal.buffer.guard_nonlocal.buffer.vert
 dEQP-VK.memory_model.message_passing.ext.f32.coherent.atomic_atomic.atomicwrite.device.payload_nonlocal.buffer.guard_nonlocal.buffer.frag
@@ -233535,6 +252409,66 @@
 dEQP-VK.memory_model.write_after_read.ext.f64.noncoherent.atomic_atomic.atomicrmw.subgroup.payload_local.physbuffer.guard_local.physbuffer.comp
 dEQP-VK.memory_model.write_after_read.ext.f64.noncoherent.atomic_atomic.atomicrmw.subgroup.payload_local.physbuffer.guard_local.physbuffer.vert
 dEQP-VK.memory_model.write_after_read.ext.f64.noncoherent.atomic_atomic.atomicrmw.subgroup.payload_local.physbuffer.guard_local.physbuffer.frag
+dEQP-VK.conditional_rendering.draw.condition_secondary_buffer_inherited_expect_execution.draw
+dEQP-VK.conditional_rendering.draw.condition_secondary_buffer_inherited_expect_execution.draw_indexed
+dEQP-VK.conditional_rendering.draw.condition_secondary_buffer_inherited_expect_execution.draw_indirect
+dEQP-VK.conditional_rendering.draw.condition_secondary_buffer_inherited_expect_execution.draw_indexed_indirect
+dEQP-VK.conditional_rendering.draw.condition_secondary_buffer_inherited_expect_execution.draw_indirect_count
+dEQP-VK.conditional_rendering.draw.condition_secondary_buffer_inherited_expect_execution.draw_indexed_indirect_count
+dEQP-VK.conditional_rendering.draw.condition_secondary_buffer_inherited_expect_noop.draw
+dEQP-VK.conditional_rendering.draw.condition_secondary_buffer_inherited_expect_noop.draw_indexed
+dEQP-VK.conditional_rendering.draw.condition_secondary_buffer_inherited_expect_noop.draw_indirect
+dEQP-VK.conditional_rendering.draw.condition_secondary_buffer_inherited_expect_noop.draw_indexed_indirect
+dEQP-VK.conditional_rendering.draw.condition_secondary_buffer_inherited_expect_noop.draw_indirect_count
+dEQP-VK.conditional_rendering.draw.condition_secondary_buffer_inherited_expect_noop.draw_indexed_indirect_count
+dEQP-VK.conditional_rendering.draw.condition_secondary_buffer_inherited_expect_noop_inverted.draw
+dEQP-VK.conditional_rendering.draw.condition_secondary_buffer_inherited_expect_noop_inverted.draw_indexed
+dEQP-VK.conditional_rendering.draw.condition_secondary_buffer_inherited_expect_noop_inverted.draw_indirect
+dEQP-VK.conditional_rendering.draw.condition_secondary_buffer_inherited_expect_noop_inverted.draw_indexed_indirect
+dEQP-VK.conditional_rendering.draw.condition_secondary_buffer_inherited_expect_noop_inverted.draw_indirect_count
+dEQP-VK.conditional_rendering.draw.condition_secondary_buffer_inherited_expect_noop_inverted.draw_indexed_indirect_count
+dEQP-VK.conditional_rendering.draw.condition_secondary_buffer_inherited_expect_execution_inverted.draw
+dEQP-VK.conditional_rendering.draw.condition_secondary_buffer_inherited_expect_execution_inverted.draw_indexed
+dEQP-VK.conditional_rendering.draw.condition_secondary_buffer_inherited_expect_execution_inverted.draw_indirect
+dEQP-VK.conditional_rendering.draw.condition_secondary_buffer_inherited_expect_execution_inverted.draw_indexed_indirect
+dEQP-VK.conditional_rendering.draw.condition_secondary_buffer_inherited_expect_execution_inverted.draw_indirect_count
+dEQP-VK.conditional_rendering.draw.condition_secondary_buffer_inherited_expect_execution_inverted.draw_indexed_indirect_count
+dEQP-VK.conditional_rendering.dispatch.condition_secondary_buffer_inherited_expect_execution.dispatch
+dEQP-VK.conditional_rendering.dispatch.condition_secondary_buffer_inherited_expect_execution.dispatch_indirect
+dEQP-VK.conditional_rendering.dispatch.condition_secondary_buffer_inherited_expect_execution.dispatch_base
+dEQP-VK.conditional_rendering.dispatch.condition_secondary_buffer_inherited_expect_noop.dispatch
+dEQP-VK.conditional_rendering.dispatch.condition_secondary_buffer_inherited_expect_noop.dispatch_indirect
+dEQP-VK.conditional_rendering.dispatch.condition_secondary_buffer_inherited_expect_noop.dispatch_base
+dEQP-VK.conditional_rendering.dispatch.condition_secondary_buffer_inherited_expect_noop_inverted.dispatch
+dEQP-VK.conditional_rendering.dispatch.condition_secondary_buffer_inherited_expect_noop_inverted.dispatch_indirect
+dEQP-VK.conditional_rendering.dispatch.condition_secondary_buffer_inherited_expect_noop_inverted.dispatch_base
+dEQP-VK.conditional_rendering.dispatch.condition_secondary_buffer_inherited_expect_execution_inverted.dispatch
+dEQP-VK.conditional_rendering.dispatch.condition_secondary_buffer_inherited_expect_execution_inverted.dispatch_indirect
+dEQP-VK.conditional_rendering.dispatch.condition_secondary_buffer_inherited_expect_execution_inverted.dispatch_base
+dEQP-VK.conditional_rendering.dispatch.condition_size.primary.first_byte
+dEQP-VK.conditional_rendering.dispatch.condition_size.primary.second_byte
+dEQP-VK.conditional_rendering.dispatch.condition_size.primary.third_byte
+dEQP-VK.conditional_rendering.dispatch.condition_size.primary.fourth_byte
+dEQP-VK.conditional_rendering.dispatch.condition_size.primary.padded_zero
+dEQP-VK.conditional_rendering.dispatch.condition_size.inherited.first_byte
+dEQP-VK.conditional_rendering.dispatch.condition_size.inherited.second_byte
+dEQP-VK.conditional_rendering.dispatch.condition_size.inherited.third_byte
+dEQP-VK.conditional_rendering.dispatch.condition_size.inherited.fourth_byte
+dEQP-VK.conditional_rendering.dispatch.condition_size.inherited.padded_zero
+dEQP-VK.conditional_rendering.dispatch.condition_size.secondary.first_byte
+dEQP-VK.conditional_rendering.dispatch.condition_size.secondary.second_byte
+dEQP-VK.conditional_rendering.dispatch.condition_size.secondary.third_byte
+dEQP-VK.conditional_rendering.dispatch.condition_size.secondary.fourth_byte
+dEQP-VK.conditional_rendering.dispatch.condition_size.secondary.padded_zero
+dEQP-VK.conditional_rendering.dispatch.condition_size.secondary_inherited.first_byte
+dEQP-VK.conditional_rendering.dispatch.condition_size.secondary_inherited.second_byte
+dEQP-VK.conditional_rendering.dispatch.condition_size.secondary_inherited.third_byte
+dEQP-VK.conditional_rendering.dispatch.condition_size.secondary_inherited.fourth_byte
+dEQP-VK.conditional_rendering.dispatch.condition_size.secondary_inherited.padded_zero
+dEQP-VK.conditional_rendering.clear_attachments.condition_secondary_buffer_inherited_expect_execution.clear_attachments
+dEQP-VK.conditional_rendering.clear_attachments.condition_secondary_buffer_inherited_expect_noop.clear_attachments
+dEQP-VK.conditional_rendering.clear_attachments.condition_secondary_buffer_inherited_expect_noop_inverted.clear_attachments
+dEQP-VK.conditional_rendering.clear_attachments.condition_secondary_buffer_inherited_expect_execution_inverted.clear_attachments
 dEQP-VK.graphicsfuzz.always-discarding-function
 dEQP-VK.graphicsfuzz.arr-value-set-to-arr-value-squared
 dEQP-VK.graphicsfuzz.array-idx-multiplied-by-for-loop-idx
@@ -233543,14 +252477,29 @@
 dEQP-VK.graphicsfuzz.call-function-with-discard
 dEQP-VK.graphicsfuzz.color-set-in-for-loop
 dEQP-VK.graphicsfuzz.cosh-return-inf-unused
+dEQP-VK.graphicsfuzz.cov-access-array-dot
 dEQP-VK.graphicsfuzz.cov-analysis-reachable-from-many
 dEQP-VK.graphicsfuzz.cov-apfloat-acos-ldexp
 dEQP-VK.graphicsfuzz.cov-apfloat-determinant
+dEQP-VK.graphicsfuzz.cov-apfloat-mix-nan
+dEQP-VK.graphicsfuzz.cov-apfloat-mod-zero
+dEQP-VK.graphicsfuzz.cov-apfloat-negative-step-func
+dEQP-VK.graphicsfuzz.cov-apfloat-sinh-negative-log2
 dEQP-VK.graphicsfuzz.cov-apfloat-tanh
+dEQP-VK.graphicsfuzz.cov-apfloat-undefined-matrix-mul
+dEQP-VK.graphicsfuzz.cov-apfloat-determinant-for-if
+dEQP-VK.graphicsfuzz.cov-apfloat-reflect-denorm
+dEQP-VK.graphicsfuzz.cov-apfloat-unpackunorm-loop
+dEQP-VK.graphicsfuzz.cov-asin-undefined-smoothstep
 dEQP-VK.graphicsfuzz.cov-basic-block-discard-in-function
+dEQP-VK.graphicsfuzz.cov-bitfieldExtract-undefined
+dEQP-VK.graphicsfuzz.cov-bitfieldinsert-undefined
+dEQP-VK.graphicsfuzz.cov-bitfieldreverse-left-shift-findmsb
 dEQP-VK.graphicsfuzz.cov-blockfrequency-several-for-loops
 dEQP-VK.graphicsfuzz.cov-branch-probability-identity-matrix
 dEQP-VK.graphicsfuzz.cov-combine-and-or-xor-gt-lt
+dEQP-VK.graphicsfuzz.cov-const-folding-bitfieldinsert-div-one
+dEQP-VK.graphicsfuzz.cov-color-overwrite-identity-matrix-multiply
 dEQP-VK.graphicsfuzz.cov-const-folding-ceil-vec4
 dEQP-VK.graphicsfuzz.cov-const-folding-clamp
 dEQP-VK.graphicsfuzz.cov-const-folding-clamp-inside-while
@@ -233562,21 +252511,28 @@
 dEQP-VK.graphicsfuzz.cov-const-folding-dot-determinant
 dEQP-VK.graphicsfuzz.cov-const-folding-gte-const-first
 dEQP-VK.graphicsfuzz.cov-const-folding-min-as-loop-range
+dEQP-VK.graphicsfuzz.cov-const-folding-mod-one-one-lte
+dEQP-VK.graphicsfuzz.cov-const-folding-pow-large-exp
 dEQP-VK.graphicsfuzz.cov-const-folding-same-condition
 dEQP-VK.graphicsfuzz.cov-const-folding-sinh-inf
 dEQP-VK.graphicsfuzz.cov-const-folding-vector-shuffle
 dEQP-VK.graphicsfuzz.cov-constant-folding-atan-over-tanh
+dEQP-VK.graphicsfuzz.cov-constants-combine-add-sub
 dEQP-VK.graphicsfuzz.cov-constants-mix-uniform
 dEQP-VK.graphicsfuzz.cov-copy-prop-arrays-func-argument
 dEQP-VK.graphicsfuzz.cov-copy-prop-arrays-no-stores
 dEQP-VK.graphicsfuzz.cov-copy-prop-arrays-param-uniform
+dEQP-VK.graphicsfuzz.cov-dag-combiner-clamp-undefined-access-array
 dEQP-VK.graphicsfuzz.cov-dag-combiner-combine-casts-legalize-vector-types-xyz-swizzle-for-loop
 dEQP-VK.graphicsfuzz.cov-dag-combiner-findmsb-loop
 dEQP-VK.graphicsfuzz.cov-dag-combiner-increment-color
+dEQP-VK.graphicsfuzz.cov-dag-combiner-glf_color
+dEQP-VK.graphicsfuzz.cov-dag-combiner-loop-bitfieldreverse
 dEQP-VK.graphicsfuzz.cov-dag-combiner-neg-div-pow2
 dEQP-VK.graphicsfuzz.cov-dag-combiner-same-cond-nested
 dEQP-VK.graphicsfuzz.cov-dead-branch-func-return-arg
 dEQP-VK.graphicsfuzz.cov-dead-code-unreachable-merge
+dEQP-VK.graphicsfuzz.cov-findlsb-division-by-zero
 dEQP-VK.graphicsfuzz.cov-fold-and-in-for-loop-range
 dEQP-VK.graphicsfuzz.cov-fold-bitwise-and-zero
 dEQP-VK.graphicsfuzz.cov-fold-bitwise-or-full-mask
@@ -233609,7 +252565,10 @@
 dEQP-VK.graphicsfuzz.cov-folding-rules-shuffle-mix
 dEQP-VK.graphicsfuzz.cov-folding-rules-split-vector-init
 dEQP-VK.graphicsfuzz.cov-folding-rules-vec-mix-uniform
+dEQP-VK.graphicsfuzz.cov-fract-smoothstep-undefined
+dEQP-VK.graphicsfuzz.cov-fragcoord-clamp-array-access
 dEQP-VK.graphicsfuzz.cov-if-conversion-identical-branches
+dEQP-VK.graphicsfuzz.cov-inc-array-element-loop-lsb
 dEQP-VK.graphicsfuzz.cov-inc-inside-switch-and-for
 dEQP-VK.graphicsfuzz.cov-increment-inside-clamp
 dEQP-VK.graphicsfuzz.cov-inline-pass-empty-block
@@ -233628,46 +252587,91 @@
 dEQP-VK.graphicsfuzz.cov-instruction-simplify-mod-sqrt-undefined
 dEQP-VK.graphicsfuzz.cov-instruction-simplify-sqrt
 dEQP-VK.graphicsfuzz.cov-instructions-first-value-phi
+dEQP-VK.graphicsfuzz.cov-inst-combine-add-sub-determinant
+dEQP-VK.graphicsfuzz.cov-inst-combine-add-sub-increase-negative
+dEQP-VK.graphicsfuzz.cov-inst-combine-add-sub-neg-func-arg
+dEQP-VK.graphicsfuzz.cov-inst-combine-and-or-xor-pack-unpack
+dEQP-VK.graphicsfuzz.cov-inst-combine-and-or-xor-switch
+dEQP-VK.graphicsfuzz.cov-inst-combine-and-or-xor-xor-add
+dEQP-VK.graphicsfuzz.cov-inst-combine-compares-combine-select-uaddcarry
+dEQP-VK.graphicsfuzz.cov-inst-combine-compares-isnan
+dEQP-VK.graphicsfuzz.cov-inst-combine-compares-ldexp
+dEQP-VK.graphicsfuzz.cov-inst-combine-compares-ternary-vector-access
+dEQP-VK.graphicsfuzz.cov-inst-combine-shifts-bitfield-bitcount
+dEQP-VK.graphicsfuzz.cov-inst-combine-shifts-mix-mix-clamp
+dEQP-VK.graphicsfuzz.cov-instr-info-det-mat-min
+dEQP-VK.graphicsfuzz.cov-instructions-for-if-less-than-equal
+dEQP-VK.graphicsfuzz.cov-inst-combine-and-or-xor-for-bitfieldinsert
+dEQP-VK.graphicsfuzz.cov-inst-combine-compares-pre-increment-clamp
+dEQP-VK.graphicsfuzz.cov-inst-combine-mul-div-rem-if-undefined-divide-mix
+dEQP-VK.graphicsfuzz.cov-inst-combine-pack-unpack
+dEQP-VK.graphicsfuzz.cov-inst-combine-select-findlsb-uaddcarry
+dEQP-VK.graphicsfuzz.cov-inst-combine-simplify-demanded-pack-unpack
+dEQP-VK.graphicsfuzz.cov-inst-combine-simplify-demanded-packsnorm-unpackunorm
+dEQP-VK.graphicsfuzz.cov-inst-combine-simplify-demanded-switch-or-xor
+dEQP-VK.graphicsfuzz.cov-inst-combine-vector-ops-asin
+dEQP-VK.graphicsfuzz.cov-integer-modulo-negative
 dEQP-VK.graphicsfuzz.cov-intervalmap-set-stop
 dEQP-VK.graphicsfuzz.cov-ir-builder-constant-fold-inst-combine-calls-value-tracking-findmsb-incr-if
 dEQP-VK.graphicsfuzz.cov-irbuilder-matrix-cell-uniform
+dEQP-VK.graphicsfuzz.cov-ldexp-undefined-mat-vec-multiply
 dEQP-VK.graphicsfuzz.cov-liveinterval-different-dest
 dEQP-VK.graphicsfuzz.cov-loop-findmsb-findlsb
+dEQP-VK.graphicsfuzz.cov-machine-scheduler-for-if-pow
+dEQP-VK.graphicsfuzz.cov-machine-basic-block-for-for-for-less-than
 dEQP-VK.graphicsfuzz.cov-machinevaluetype-one-iter-loop
 dEQP-VK.graphicsfuzz.cov-max-clamp-same-minval
 dEQP-VK.graphicsfuzz.cov-mem-pass-sum-struct-members
 dEQP-VK.graphicsfuzz.cov-mem-pass-unused-component
 dEQP-VK.graphicsfuzz.cov-merge-return-condition-twice
+dEQP-VK.graphicsfuzz.cov-mod-acosh
+dEQP-VK.graphicsfuzz.cov-modf-clamp-for
 dEQP-VK.graphicsfuzz.cov-modf-integer-to-private
 dEQP-VK.graphicsfuzz.cov-optimize-phis-for
 dEQP-VK.graphicsfuzz.cov-optimize-phis-for-for-do-while-if-if
+dEQP-VK.graphicsfuzz.cov-not-clamp-matrix-access
 dEQP-VK.graphicsfuzz.cov-pattern-match-signum
 dEQP-VK.graphicsfuzz.cov-pattern-match-single-bit
 dEQP-VK.graphicsfuzz.cov-peephole-optimizer-target-instr-info-for-if-if-if
+dEQP-VK.graphicsfuzz.cov-pow-undefined
 dEQP-VK.graphicsfuzz.cov-reduce-load-replace-extract
+dEQP-VK.graphicsfuzz.cov-register-coalescer-live-intervals-target-instr-info-for-discard-for-discard
 dEQP-VK.graphicsfuzz.cov-replace-copy-object
+dEQP-VK.graphicsfuzz.cov-return-after-do-while
 dEQP-VK.graphicsfuzz.cov-scaled-number-nested-loops
 dEQP-VK.graphicsfuzz.cov-selection-dag-assign-back-and-forth
 dEQP-VK.graphicsfuzz.cov-selection-dag-lt-gt
+dEQP-VK.graphicsfuzz.cov-scaled-number-nested-loops-array-access
+dEQP-VK.graphicsfuzz.cov-schedule-dag-rrlist-mix-log-cos
+dEQP-VK.graphicsfuzz.cov-selection-dag-inverse-clamp
 dEQP-VK.graphicsfuzz.cov-selection-dag-same-cond-twice
 dEQP-VK.graphicsfuzz.cov-set-vector-cos-fragcoord
 dEQP-VK.graphicsfuzz.cov-simplification-unused-struct
 dEQP-VK.graphicsfuzz.cov-simplification-while-inside-for
 dEQP-VK.graphicsfuzz.cov-simplify-clamp-max-itself
+dEQP-VK.graphicsfuzz.cov-simplify-combine-compares-max-max-one
 dEQP-VK.graphicsfuzz.cov-simplify-component-uniform-idx
 dEQP-VK.graphicsfuzz.cov-simplify-div-by-uint-one
+dEQP-VK.graphicsfuzz.cov-simplify-for-bitwise-condition
 dEQP-VK.graphicsfuzz.cov-simplify-ldexp-exponent-zero
+dEQP-VK.graphicsfuzz.cov-simplify-max-multiplied-values
+dEQP-VK.graphicsfuzz.cov-simplify-modulo-1
 dEQP-VK.graphicsfuzz.cov-simplify-mul-identity
 dEQP-VK.graphicsfuzz.cov-simplify-not-less-than-neg
+dEQP-VK.graphicsfuzz.cov-simplify-right-shift-greater-than-zero
 dEQP-VK.graphicsfuzz.cov-simplify-select-fragcoord
 dEQP-VK.graphicsfuzz.cov-simplify-sign-cosh
 dEQP-VK.graphicsfuzz.cov-simplify-smoothstep-undef
 dEQP-VK.graphicsfuzz.cov-single-block-elim-self-assign
 dEQP-VK.graphicsfuzz.cov-single-store-elim-assume-store
+dEQP-VK.graphicsfuzz.cov-sinh-ldexp
 dEQP-VK.graphicsfuzz.cov-ssa-rewrite-case-with-default
+dEQP-VK.graphicsfuzz.cov-tail-duplicator-for-for-for
+dEQP-VK.graphicsfuzz.cov-tail-duplicator-infinite-loops
 dEQP-VK.graphicsfuzz.cov-target-lowering-dfdx-cos
 dEQP-VK.graphicsfuzz.cov-target-lowering-inst-combine-compares-struct-array-clamp-function-cal
 dEQP-VK.graphicsfuzz.cov-types-return-in-main-never-hit
+dEQP-VK.graphicsfuzz.cov-undefined-inversesqrt-reflect
 dEQP-VK.graphicsfuzz.cov-val-cfg-case-fallthrough
 dEQP-VK.graphicsfuzz.cov-value-inst-combine-select-value-tracking-flip-bits
 dEQP-VK.graphicsfuzz.cov-value-tracking-apint-inst-combine-simplify-one-mod-loop-iterator
@@ -233683,10 +252687,17 @@
 dEQP-VK.graphicsfuzz.cov-vector-log2-cosh
 dEQP-VK.graphicsfuzz.cov-wrap-op-kill-for-loop
 dEQP-VK.graphicsfuzz.cov-wrap-op-kill-two-branches
+dEQP-VK.graphicsfuzz.cov-x86-isel-lowering-determinant-exp-acos
+dEQP-VK.graphicsfuzz.cov-x86-isel-lowering-machine-value-type-uint-to-float
+dEQP-VK.graphicsfuzz.cov-x86-isel-lowering-selection-dag-struct-array-clamp-index
+dEQP-VK.graphicsfuzz.cov-x86-isel-lowering-apfloat-nan-cos-cos
+dEQP-VK.graphicsfuzz.cov-x86-isel-lowering-negative-left-shift
 dEQP-VK.graphicsfuzz.create-color-in-do-while-for-loop
 dEQP-VK.graphicsfuzz.do-while-false-loops
+dEQP-VK.graphicsfuzz.do-while-if-return
 dEQP-VK.graphicsfuzz.do-while-with-if-condition
 dEQP-VK.graphicsfuzz.find-msb-from-lsb
+dEQP-VK.graphicsfuzz.flag-always-false-if
 dEQP-VK.graphicsfuzz.frag-coord-func-call-and-ifs
 dEQP-VK.graphicsfuzz.function-with-float-comparison
 dEQP-VK.graphicsfuzz.function-with-uniform-return
@@ -233711,14 +252722,35 @@
 dEQP-VK.graphicsfuzz.spv-double-branch-to-same-block3
 dEQP-VK.graphicsfuzz.spv-load-from-frag-color
 dEQP-VK.graphicsfuzz.spv-null-in-phi-and-unroll
+dEQP-VK.graphicsfuzz.spv-stable-bifurcation-Os-mutate-var-vector-shuffle
+dEQP-VK.graphicsfuzz.spv-stable-collatz-O-mutate-composite-construct-extract
+dEQP-VK.graphicsfuzz.spv-stable-colorgrid-modulo-O-move-block-down
+dEQP-VK.graphicsfuzz.spv-stable-maze-flatten-copy-composite
+dEQP-VK.graphicsfuzz.spv-stable-mergesort-O-prop-up-mutate-var
+dEQP-VK.graphicsfuzz.spv-stable-mergesort-flatten-selection-dead-continues
+dEQP-VK.graphicsfuzz.spv-stable-mergesort-func-inline-mutate-var
+dEQP-VK.graphicsfuzz.spv-stable-orbit-O-mutate-variable
+dEQP-VK.graphicsfuzz.spv-stable-orbit-Os-access-chain-mutate-pointer
+dEQP-VK.graphicsfuzz.spv-stable-pillars-O-op-select-to-op-phi
+dEQP-VK.graphicsfuzz.spv-stable-quicksort-mat-func-param
+dEQP-VK.graphicsfuzz.spv-stable-rects-Os-mutate-var-push-through-var
+dEQP-VK.graphicsfuzz.stable-binarysearch-tree-false-if-discard-loop
+dEQP-VK.graphicsfuzz.stable-binarysearch-tree-fragcoord-less-than-zero
+dEQP-VK.graphicsfuzz.stable-binarysearch-tree-nested-if-and-conditional
 dEQP-VK.graphicsfuzz.stable-binarysearch-tree-with-loop-read-write-global
+dEQP-VK.graphicsfuzz.stable-collatz-push-constant-with-nested-min-max
+dEQP-VK.graphicsfuzz.stable-colorgrid-modulo-double-always-false-discard
 dEQP-VK.graphicsfuzz.stable-colorgrid-modulo-injected-conditional-true
 dEQP-VK.graphicsfuzz.stable-colorgrid-modulo-true-conditional-simple-loop
 dEQP-VK.graphicsfuzz.stable-colorgrid-modulo-vec3-values-from-matrix
+dEQP-VK.graphicsfuzz.stable-mergesort-for-always-false-if-discard
+dEQP-VK.graphicsfuzz.stable-mergesort-reversed-for-loop
 dEQP-VK.graphicsfuzz.stable-quicksort-for-loop-with-injection
 dEQP-VK.graphicsfuzz.stable-quicksort-if-false-else-return
 dEQP-VK.graphicsfuzz.stable-quicksort-max-value-as-index
 dEQP-VK.graphicsfuzz.stable-rects-vec4-clamp-conditional-min-mix
+dEQP-VK.graphicsfuzz.stable-triangle-array-nested-loop
+dEQP-VK.graphicsfuzz.stable-triangle-nested-for-loop-and-true-if
 dEQP-VK.graphicsfuzz.struct-array-data-as-loop-iterator
 dEQP-VK.graphicsfuzz.switch-case-with-undefined-expression
 dEQP-VK.graphicsfuzz.switch-inside-while-always-return
@@ -233726,6 +252758,7 @@
 dEQP-VK.graphicsfuzz.switch-with-fall-through-cases
 dEQP-VK.graphicsfuzz.two-loops-mat-add
 dEQP-VK.graphicsfuzz.uv-value-comparison-as-boolean
+dEQP-VK.graphicsfuzz.vec2-modf
 dEQP-VK.graphicsfuzz.vector-values-multiplied-by-fragcoord
 dEQP-VK.graphicsfuzz.vectors-and-discard-in-function
 dEQP-VK.transform_feedback.simple.winding_line_list_6
@@ -233765,6 +252798,17 @@
 dEQP-VK.transform_feedback.simple.winding_patch_list_10
 dEQP-VK.transform_feedback.simple.winding_patch_list_12
 dEQP-VK.transform_feedback.simple.backward_dependency_no_offset_array
+dEQP-VK.transform_feedback.simple.multiquery_1
+dEQP-VK.transform_feedback.simple.multiquery_3
+dEQP-VK.transform_feedback.simple.multiquery_6
+dEQP-VK.transform_feedback.simple.multiquery_14
+dEQP-VK.descriptor_indexing.storage_buffer_minNonUniform
+dEQP-VK.descriptor_indexing.storage_texel_buffer_minNonUniform
+dEQP-VK.descriptor_indexing.uniform_texel_buffer_minNonUniform
+dEQP-VK.descriptor_indexing.uniform_buffer_minNonUniform
+dEQP-VK.descriptor_indexing.combined_image_sampler_minNonUniform
+dEQP-VK.descriptor_indexing.combined_image_sampler_with_lod_minNonUniform
+dEQP-VK.descriptor_indexing.storage_image_minNonUniform
 dEQP-VK.drm_format_modifiers.list_modifiers.r4g4_unorm_pack8
 dEQP-VK.drm_format_modifiers.list_modifiers.r4g4b4a4_unorm_pack16
 dEQP-VK.drm_format_modifiers.list_modifiers.b4g4r4a4_unorm_pack16
@@ -242162,6 +261206,7 @@
 dEQP-VK.ray_tracing_pipeline.acceleration_structures.instance_triangle_culling.gpu_built.index_uint32.notransform_ccw
 dEQP-VK.ray_tracing_pipeline.acceleration_structures.instance_triangle_culling.gpu_built.index_uint32.notransform_nocull
 dEQP-VK.ray_tracing_pipeline.acceleration_structures.instance_triangle_culling.gpu_built.index_uint32.notransform_ccw_nocull
+dEQP-VK.ray_tracing_pipeline.acceleration_structures.dynamic_indexing.dynamic_indexing
 dEQP-VK.ray_tracing_pipeline.acceleration_structures.empty.cpu_built.index_none.inactive_triangles
 dEQP-VK.ray_tracing_pipeline.acceleration_structures.empty.cpu_built.index_none.inactive_instances
 dEQP-VK.ray_tracing_pipeline.acceleration_structures.empty.cpu_built.index_none.no_geometries_bottom
@@ -242200,6 +261245,8 @@
 dEQP-VK.ray_tracing_pipeline.acceleration_structures.instance_index.gpu_built.ahit
 dEQP-VK.ray_tracing_pipeline.acceleration_structures.instance_index.gpu_built.chit
 dEQP-VK.ray_tracing_pipeline.acceleration_structures.instance_index.gpu_built.isec
+dEQP-VK.ray_tracing_pipeline.procedural_geometry.object_behind_bounding_boxes
+dEQP-VK.ray_tracing_pipeline.procedural_geometry.triangle_in_between
 dEQP-VK.ray_tracing_pipeline.indirect.build_structure
 dEQP-VK.ray_tracing_pipeline.watertightness.0.4
 dEQP-VK.ray_tracing_pipeline.watertightness.0.16
@@ -242437,6 +261484,7 @@
 dEQP-VK.ray_tracing_pipeline.misc.shaderRecordExplicitSTD430Offset_4
 dEQP-VK.ray_tracing_pipeline.misc.shaderRecordExplicitSTD430Offset_5
 dEQP-VK.ray_tracing_pipeline.misc.shaderRecordExplicitSTD430Offset_6
+dEQP-VK.ray_tracing_pipeline.misc.recursiveTraces_AABB_0
 dEQP-VK.ray_tracing_pipeline.misc.recursiveTraces_AABB_1
 dEQP-VK.ray_tracing_pipeline.misc.recursiveTraces_AABB_2
 dEQP-VK.ray_tracing_pipeline.misc.recursiveTraces_AABB_3
@@ -242452,6 +261500,7 @@
 dEQP-VK.ray_tracing_pipeline.misc.recursiveTraces_AABB_13
 dEQP-VK.ray_tracing_pipeline.misc.recursiveTraces_AABB_14
 dEQP-VK.ray_tracing_pipeline.misc.recursiveTraces_AABB_15
+dEQP-VK.ray_tracing_pipeline.misc.recursiveTraces_tri_0
 dEQP-VK.ray_tracing_pipeline.misc.recursiveTraces_tri_1
 dEQP-VK.ray_tracing_pipeline.misc.recursiveTraces_tri_2
 dEQP-VK.ray_tracing_pipeline.misc.recursiveTraces_tri_3
@@ -242467,6 +261516,12 @@
 dEQP-VK.ray_tracing_pipeline.misc.recursiveTraces_tri_13
 dEQP-VK.ray_tracing_pipeline.misc.recursiveTraces_tri_14
 dEQP-VK.ray_tracing_pipeline.misc.recursiveTraces_tri_15
+dEQP-VK.ray_tracing_pipeline.misc.OpIgnoreIntersectionKHR_AnyHitStatically
+dEQP-VK.ray_tracing_pipeline.misc.OpIgnoreIntersectionKHR_AnyHitDynamically
+dEQP-VK.ray_tracing_pipeline.misc.OpTerminateRayKHR_AnyHitStatically
+dEQP-VK.ray_tracing_pipeline.misc.OpTerminateRayKHR_AnyHitDynamically
+dEQP-VK.ray_tracing_pipeline.misc.OpTerminateRayKHR_IntersectionStatically
+dEQP-VK.ray_tracing_pipeline.misc.OpTerminateRayKHR_IntersectionDynamically
 dEQP-VK.ray_tracing_pipeline.complexcontrolflow.if.execute_callable.rgen
 dEQP-VK.ray_tracing_pipeline.complexcontrolflow.if.execute_callable.chit
 dEQP-VK.ray_tracing_pipeline.complexcontrolflow.if.execute_callable.miss
@@ -242883,6 +261938,360 @@
 dEQP-VK.ray_tracing_pipeline.barrier.simg.specific_barrier.from_frag_to_chit
 dEQP-VK.ray_tracing_pipeline.barrier.simg.specific_barrier.from_frag_to_miss
 dEQP-VK.ray_tracing_pipeline.barrier.simg.specific_barrier.from_frag_to_call
+dEQP-VK.ray_tracing_pipeline.data_spill.execute_callable.int32
+dEQP-VK.ray_tracing_pipeline.data_spill.execute_callable.v2int32
+dEQP-VK.ray_tracing_pipeline.data_spill.execute_callable.v3int32
+dEQP-VK.ray_tracing_pipeline.data_spill.execute_callable.v4int32
+dEQP-VK.ray_tracing_pipeline.data_spill.execute_callable.a5int32
+dEQP-VK.ray_tracing_pipeline.data_spill.execute_callable.uint32
+dEQP-VK.ray_tracing_pipeline.data_spill.execute_callable.v2uint32
+dEQP-VK.ray_tracing_pipeline.data_spill.execute_callable.v3uint32
+dEQP-VK.ray_tracing_pipeline.data_spill.execute_callable.v4uint32
+dEQP-VK.ray_tracing_pipeline.data_spill.execute_callable.a5uint32
+dEQP-VK.ray_tracing_pipeline.data_spill.execute_callable.int64
+dEQP-VK.ray_tracing_pipeline.data_spill.execute_callable.v2int64
+dEQP-VK.ray_tracing_pipeline.data_spill.execute_callable.v3int64
+dEQP-VK.ray_tracing_pipeline.data_spill.execute_callable.v4int64
+dEQP-VK.ray_tracing_pipeline.data_spill.execute_callable.a5int64
+dEQP-VK.ray_tracing_pipeline.data_spill.execute_callable.uint64
+dEQP-VK.ray_tracing_pipeline.data_spill.execute_callable.v2uint64
+dEQP-VK.ray_tracing_pipeline.data_spill.execute_callable.v3uint64
+dEQP-VK.ray_tracing_pipeline.data_spill.execute_callable.v4uint64
+dEQP-VK.ray_tracing_pipeline.data_spill.execute_callable.a5uint64
+dEQP-VK.ray_tracing_pipeline.data_spill.execute_callable.int16
+dEQP-VK.ray_tracing_pipeline.data_spill.execute_callable.v2int16
+dEQP-VK.ray_tracing_pipeline.data_spill.execute_callable.v3int16
+dEQP-VK.ray_tracing_pipeline.data_spill.execute_callable.v4int16
+dEQP-VK.ray_tracing_pipeline.data_spill.execute_callable.a5int16
+dEQP-VK.ray_tracing_pipeline.data_spill.execute_callable.uint16
+dEQP-VK.ray_tracing_pipeline.data_spill.execute_callable.v2uint16
+dEQP-VK.ray_tracing_pipeline.data_spill.execute_callable.v3uint16
+dEQP-VK.ray_tracing_pipeline.data_spill.execute_callable.v4uint16
+dEQP-VK.ray_tracing_pipeline.data_spill.execute_callable.a5uint16
+dEQP-VK.ray_tracing_pipeline.data_spill.execute_callable.int8
+dEQP-VK.ray_tracing_pipeline.data_spill.execute_callable.v2int8
+dEQP-VK.ray_tracing_pipeline.data_spill.execute_callable.v3int8
+dEQP-VK.ray_tracing_pipeline.data_spill.execute_callable.v4int8
+dEQP-VK.ray_tracing_pipeline.data_spill.execute_callable.a5int8
+dEQP-VK.ray_tracing_pipeline.data_spill.execute_callable.uint8
+dEQP-VK.ray_tracing_pipeline.data_spill.execute_callable.v2uint8
+dEQP-VK.ray_tracing_pipeline.data_spill.execute_callable.v3uint8
+dEQP-VK.ray_tracing_pipeline.data_spill.execute_callable.v4uint8
+dEQP-VK.ray_tracing_pipeline.data_spill.execute_callable.a5uint8
+dEQP-VK.ray_tracing_pipeline.data_spill.execute_callable.float32
+dEQP-VK.ray_tracing_pipeline.data_spill.execute_callable.v2float32
+dEQP-VK.ray_tracing_pipeline.data_spill.execute_callable.v3float32
+dEQP-VK.ray_tracing_pipeline.data_spill.execute_callable.v4float32
+dEQP-VK.ray_tracing_pipeline.data_spill.execute_callable.a5float32
+dEQP-VK.ray_tracing_pipeline.data_spill.execute_callable.float64
+dEQP-VK.ray_tracing_pipeline.data_spill.execute_callable.v2float64
+dEQP-VK.ray_tracing_pipeline.data_spill.execute_callable.v3float64
+dEQP-VK.ray_tracing_pipeline.data_spill.execute_callable.v4float64
+dEQP-VK.ray_tracing_pipeline.data_spill.execute_callable.a5float64
+dEQP-VK.ray_tracing_pipeline.data_spill.execute_callable.float16
+dEQP-VK.ray_tracing_pipeline.data_spill.execute_callable.v2float16
+dEQP-VK.ray_tracing_pipeline.data_spill.execute_callable.v3float16
+dEQP-VK.ray_tracing_pipeline.data_spill.execute_callable.v4float16
+dEQP-VK.ray_tracing_pipeline.data_spill.execute_callable.a5float16
+dEQP-VK.ray_tracing_pipeline.data_spill.execute_callable.struct
+dEQP-VK.ray_tracing_pipeline.data_spill.execute_callable.sampler
+dEQP-VK.ray_tracing_pipeline.data_spill.execute_callable.image
+dEQP-VK.ray_tracing_pipeline.data_spill.execute_callable.combined
+dEQP-VK.ray_tracing_pipeline.data_spill.execute_callable.ptr_image
+dEQP-VK.ray_tracing_pipeline.data_spill.execute_callable.ptr_sampler
+dEQP-VK.ray_tracing_pipeline.data_spill.execute_callable.ptr_combined
+dEQP-VK.ray_tracing_pipeline.data_spill.execute_callable.ptr_texel
+dEQP-VK.ray_tracing_pipeline.data_spill.execute_callable.op_null
+dEQP-VK.ray_tracing_pipeline.data_spill.execute_callable.op_undef
+dEQP-VK.ray_tracing_pipeline.data_spill.trace_ray.int32
+dEQP-VK.ray_tracing_pipeline.data_spill.trace_ray.v2int32
+dEQP-VK.ray_tracing_pipeline.data_spill.trace_ray.v3int32
+dEQP-VK.ray_tracing_pipeline.data_spill.trace_ray.v4int32
+dEQP-VK.ray_tracing_pipeline.data_spill.trace_ray.a5int32
+dEQP-VK.ray_tracing_pipeline.data_spill.trace_ray.uint32
+dEQP-VK.ray_tracing_pipeline.data_spill.trace_ray.v2uint32
+dEQP-VK.ray_tracing_pipeline.data_spill.trace_ray.v3uint32
+dEQP-VK.ray_tracing_pipeline.data_spill.trace_ray.v4uint32
+dEQP-VK.ray_tracing_pipeline.data_spill.trace_ray.a5uint32
+dEQP-VK.ray_tracing_pipeline.data_spill.trace_ray.int64
+dEQP-VK.ray_tracing_pipeline.data_spill.trace_ray.v2int64
+dEQP-VK.ray_tracing_pipeline.data_spill.trace_ray.v3int64
+dEQP-VK.ray_tracing_pipeline.data_spill.trace_ray.v4int64
+dEQP-VK.ray_tracing_pipeline.data_spill.trace_ray.a5int64
+dEQP-VK.ray_tracing_pipeline.data_spill.trace_ray.uint64
+dEQP-VK.ray_tracing_pipeline.data_spill.trace_ray.v2uint64
+dEQP-VK.ray_tracing_pipeline.data_spill.trace_ray.v3uint64
+dEQP-VK.ray_tracing_pipeline.data_spill.trace_ray.v4uint64
+dEQP-VK.ray_tracing_pipeline.data_spill.trace_ray.a5uint64
+dEQP-VK.ray_tracing_pipeline.data_spill.trace_ray.int16
+dEQP-VK.ray_tracing_pipeline.data_spill.trace_ray.v2int16
+dEQP-VK.ray_tracing_pipeline.data_spill.trace_ray.v3int16
+dEQP-VK.ray_tracing_pipeline.data_spill.trace_ray.v4int16
+dEQP-VK.ray_tracing_pipeline.data_spill.trace_ray.a5int16
+dEQP-VK.ray_tracing_pipeline.data_spill.trace_ray.uint16
+dEQP-VK.ray_tracing_pipeline.data_spill.trace_ray.v2uint16
+dEQP-VK.ray_tracing_pipeline.data_spill.trace_ray.v3uint16
+dEQP-VK.ray_tracing_pipeline.data_spill.trace_ray.v4uint16
+dEQP-VK.ray_tracing_pipeline.data_spill.trace_ray.a5uint16
+dEQP-VK.ray_tracing_pipeline.data_spill.trace_ray.int8
+dEQP-VK.ray_tracing_pipeline.data_spill.trace_ray.v2int8
+dEQP-VK.ray_tracing_pipeline.data_spill.trace_ray.v3int8
+dEQP-VK.ray_tracing_pipeline.data_spill.trace_ray.v4int8
+dEQP-VK.ray_tracing_pipeline.data_spill.trace_ray.a5int8
+dEQP-VK.ray_tracing_pipeline.data_spill.trace_ray.uint8
+dEQP-VK.ray_tracing_pipeline.data_spill.trace_ray.v2uint8
+dEQP-VK.ray_tracing_pipeline.data_spill.trace_ray.v3uint8
+dEQP-VK.ray_tracing_pipeline.data_spill.trace_ray.v4uint8
+dEQP-VK.ray_tracing_pipeline.data_spill.trace_ray.a5uint8
+dEQP-VK.ray_tracing_pipeline.data_spill.trace_ray.float32
+dEQP-VK.ray_tracing_pipeline.data_spill.trace_ray.v2float32
+dEQP-VK.ray_tracing_pipeline.data_spill.trace_ray.v3float32
+dEQP-VK.ray_tracing_pipeline.data_spill.trace_ray.v4float32
+dEQP-VK.ray_tracing_pipeline.data_spill.trace_ray.a5float32
+dEQP-VK.ray_tracing_pipeline.data_spill.trace_ray.float64
+dEQP-VK.ray_tracing_pipeline.data_spill.trace_ray.v2float64
+dEQP-VK.ray_tracing_pipeline.data_spill.trace_ray.v3float64
+dEQP-VK.ray_tracing_pipeline.data_spill.trace_ray.v4float64
+dEQP-VK.ray_tracing_pipeline.data_spill.trace_ray.a5float64
+dEQP-VK.ray_tracing_pipeline.data_spill.trace_ray.float16
+dEQP-VK.ray_tracing_pipeline.data_spill.trace_ray.v2float16
+dEQP-VK.ray_tracing_pipeline.data_spill.trace_ray.v3float16
+dEQP-VK.ray_tracing_pipeline.data_spill.trace_ray.v4float16
+dEQP-VK.ray_tracing_pipeline.data_spill.trace_ray.a5float16
+dEQP-VK.ray_tracing_pipeline.data_spill.trace_ray.struct
+dEQP-VK.ray_tracing_pipeline.data_spill.trace_ray.sampler
+dEQP-VK.ray_tracing_pipeline.data_spill.trace_ray.image
+dEQP-VK.ray_tracing_pipeline.data_spill.trace_ray.combined
+dEQP-VK.ray_tracing_pipeline.data_spill.trace_ray.ptr_image
+dEQP-VK.ray_tracing_pipeline.data_spill.trace_ray.ptr_sampler
+dEQP-VK.ray_tracing_pipeline.data_spill.trace_ray.ptr_combined
+dEQP-VK.ray_tracing_pipeline.data_spill.trace_ray.ptr_texel
+dEQP-VK.ray_tracing_pipeline.data_spill.trace_ray.op_null
+dEQP-VK.ray_tracing_pipeline.data_spill.trace_ray.op_undef
+dEQP-VK.ray_tracing_pipeline.data_spill.report_intersection.int32
+dEQP-VK.ray_tracing_pipeline.data_spill.report_intersection.v2int32
+dEQP-VK.ray_tracing_pipeline.data_spill.report_intersection.v3int32
+dEQP-VK.ray_tracing_pipeline.data_spill.report_intersection.v4int32
+dEQP-VK.ray_tracing_pipeline.data_spill.report_intersection.a5int32
+dEQP-VK.ray_tracing_pipeline.data_spill.report_intersection.uint32
+dEQP-VK.ray_tracing_pipeline.data_spill.report_intersection.v2uint32
+dEQP-VK.ray_tracing_pipeline.data_spill.report_intersection.v3uint32
+dEQP-VK.ray_tracing_pipeline.data_spill.report_intersection.v4uint32
+dEQP-VK.ray_tracing_pipeline.data_spill.report_intersection.a5uint32
+dEQP-VK.ray_tracing_pipeline.data_spill.report_intersection.int64
+dEQP-VK.ray_tracing_pipeline.data_spill.report_intersection.v2int64
+dEQP-VK.ray_tracing_pipeline.data_spill.report_intersection.v3int64
+dEQP-VK.ray_tracing_pipeline.data_spill.report_intersection.v4int64
+dEQP-VK.ray_tracing_pipeline.data_spill.report_intersection.a5int64
+dEQP-VK.ray_tracing_pipeline.data_spill.report_intersection.uint64
+dEQP-VK.ray_tracing_pipeline.data_spill.report_intersection.v2uint64
+dEQP-VK.ray_tracing_pipeline.data_spill.report_intersection.v3uint64
+dEQP-VK.ray_tracing_pipeline.data_spill.report_intersection.v4uint64
+dEQP-VK.ray_tracing_pipeline.data_spill.report_intersection.a5uint64
+dEQP-VK.ray_tracing_pipeline.data_spill.report_intersection.int16
+dEQP-VK.ray_tracing_pipeline.data_spill.report_intersection.v2int16
+dEQP-VK.ray_tracing_pipeline.data_spill.report_intersection.v3int16
+dEQP-VK.ray_tracing_pipeline.data_spill.report_intersection.v4int16
+dEQP-VK.ray_tracing_pipeline.data_spill.report_intersection.a5int16
+dEQP-VK.ray_tracing_pipeline.data_spill.report_intersection.uint16
+dEQP-VK.ray_tracing_pipeline.data_spill.report_intersection.v2uint16
+dEQP-VK.ray_tracing_pipeline.data_spill.report_intersection.v3uint16
+dEQP-VK.ray_tracing_pipeline.data_spill.report_intersection.v4uint16
+dEQP-VK.ray_tracing_pipeline.data_spill.report_intersection.a5uint16
+dEQP-VK.ray_tracing_pipeline.data_spill.report_intersection.int8
+dEQP-VK.ray_tracing_pipeline.data_spill.report_intersection.v2int8
+dEQP-VK.ray_tracing_pipeline.data_spill.report_intersection.v3int8
+dEQP-VK.ray_tracing_pipeline.data_spill.report_intersection.v4int8
+dEQP-VK.ray_tracing_pipeline.data_spill.report_intersection.a5int8
+dEQP-VK.ray_tracing_pipeline.data_spill.report_intersection.uint8
+dEQP-VK.ray_tracing_pipeline.data_spill.report_intersection.v2uint8
+dEQP-VK.ray_tracing_pipeline.data_spill.report_intersection.v3uint8
+dEQP-VK.ray_tracing_pipeline.data_spill.report_intersection.v4uint8
+dEQP-VK.ray_tracing_pipeline.data_spill.report_intersection.a5uint8
+dEQP-VK.ray_tracing_pipeline.data_spill.report_intersection.float32
+dEQP-VK.ray_tracing_pipeline.data_spill.report_intersection.v2float32
+dEQP-VK.ray_tracing_pipeline.data_spill.report_intersection.v3float32
+dEQP-VK.ray_tracing_pipeline.data_spill.report_intersection.v4float32
+dEQP-VK.ray_tracing_pipeline.data_spill.report_intersection.a5float32
+dEQP-VK.ray_tracing_pipeline.data_spill.report_intersection.float64
+dEQP-VK.ray_tracing_pipeline.data_spill.report_intersection.v2float64
+dEQP-VK.ray_tracing_pipeline.data_spill.report_intersection.v3float64
+dEQP-VK.ray_tracing_pipeline.data_spill.report_intersection.v4float64
+dEQP-VK.ray_tracing_pipeline.data_spill.report_intersection.a5float64
+dEQP-VK.ray_tracing_pipeline.data_spill.report_intersection.float16
+dEQP-VK.ray_tracing_pipeline.data_spill.report_intersection.v2float16
+dEQP-VK.ray_tracing_pipeline.data_spill.report_intersection.v3float16
+dEQP-VK.ray_tracing_pipeline.data_spill.report_intersection.v4float16
+dEQP-VK.ray_tracing_pipeline.data_spill.report_intersection.a5float16
+dEQP-VK.ray_tracing_pipeline.data_spill.report_intersection.struct
+dEQP-VK.ray_tracing_pipeline.data_spill.report_intersection.sampler
+dEQP-VK.ray_tracing_pipeline.data_spill.report_intersection.image
+dEQP-VK.ray_tracing_pipeline.data_spill.report_intersection.combined
+dEQP-VK.ray_tracing_pipeline.data_spill.report_intersection.ptr_image
+dEQP-VK.ray_tracing_pipeline.data_spill.report_intersection.ptr_sampler
+dEQP-VK.ray_tracing_pipeline.data_spill.report_intersection.ptr_combined
+dEQP-VK.ray_tracing_pipeline.data_spill.report_intersection.ptr_texel
+dEQP-VK.ray_tracing_pipeline.data_spill.report_intersection.op_null
+dEQP-VK.ray_tracing_pipeline.data_spill.report_intersection.op_undef
+dEQP-VK.ray_tracing_pipeline.data_spill.pipeline_interface.ray_payload
+dEQP-VK.ray_tracing_pipeline.data_spill.pipeline_interface.callable_data
+dEQP-VK.ray_tracing_pipeline.data_spill.pipeline_interface.hit_attributes
+dEQP-VK.ray_tracing_pipeline.data_spill.pipeline_interface.shader_record_buffer_rgen
+dEQP-VK.ray_tracing_pipeline.data_spill.pipeline_interface.shader_record_buffer_call
+dEQP-VK.ray_tracing_pipeline.data_spill.pipeline_interface.shader_record_buffer_miss
+dEQP-VK.ray_tracing_pipeline.data_spill.pipeline_interface.shader_record_buffer_hit
+dEQP-VK.ray_tracing_pipeline.direction_length.chit.triangles.scaling_factor_0.rotation_0
+dEQP-VK.ray_tracing_pipeline.direction_length.chit.triangles.scaling_factor_0.rotation_1
+dEQP-VK.ray_tracing_pipeline.direction_length.chit.triangles.scaling_factor_0.rotation_2
+dEQP-VK.ray_tracing_pipeline.direction_length.chit.triangles.scaling_factor_0.rotation_3
+dEQP-VK.ray_tracing_pipeline.direction_length.chit.triangles.scaling_factor_0.rotation_4
+dEQP-VK.ray_tracing_pipeline.direction_length.chit.triangles.scaling_factor_1.rotation_0
+dEQP-VK.ray_tracing_pipeline.direction_length.chit.triangles.scaling_factor_1.rotation_1
+dEQP-VK.ray_tracing_pipeline.direction_length.chit.triangles.scaling_factor_1.rotation_2
+dEQP-VK.ray_tracing_pipeline.direction_length.chit.triangles.scaling_factor_1.rotation_3
+dEQP-VK.ray_tracing_pipeline.direction_length.chit.triangles.scaling_factor_1.rotation_4
+dEQP-VK.ray_tracing_pipeline.direction_length.chit.triangles.scaling_factor_2.rotation_0
+dEQP-VK.ray_tracing_pipeline.direction_length.chit.triangles.scaling_factor_2.rotation_1
+dEQP-VK.ray_tracing_pipeline.direction_length.chit.triangles.scaling_factor_2.rotation_2
+dEQP-VK.ray_tracing_pipeline.direction_length.chit.triangles.scaling_factor_2.rotation_3
+dEQP-VK.ray_tracing_pipeline.direction_length.chit.triangles.scaling_factor_2.rotation_4
+dEQP-VK.ray_tracing_pipeline.direction_length.chit.triangles.scaling_factor_3.rotation_0
+dEQP-VK.ray_tracing_pipeline.direction_length.chit.triangles.scaling_factor_3.rotation_1
+dEQP-VK.ray_tracing_pipeline.direction_length.chit.triangles.scaling_factor_3.rotation_2
+dEQP-VK.ray_tracing_pipeline.direction_length.chit.triangles.scaling_factor_3.rotation_3
+dEQP-VK.ray_tracing_pipeline.direction_length.chit.triangles.scaling_factor_3.rotation_4
+dEQP-VK.ray_tracing_pipeline.direction_length.chit.triangles.scaling_factor_4.rotation_0
+dEQP-VK.ray_tracing_pipeline.direction_length.chit.triangles.scaling_factor_4.rotation_1
+dEQP-VK.ray_tracing_pipeline.direction_length.chit.triangles.scaling_factor_4.rotation_2
+dEQP-VK.ray_tracing_pipeline.direction_length.chit.triangles.scaling_factor_4.rotation_3
+dEQP-VK.ray_tracing_pipeline.direction_length.chit.triangles.scaling_factor_4.rotation_4
+dEQP-VK.ray_tracing_pipeline.direction_length.chit.triangles.scaling_factor_5.rotation_0
+dEQP-VK.ray_tracing_pipeline.direction_length.chit.triangles.scaling_factor_5.rotation_1
+dEQP-VK.ray_tracing_pipeline.direction_length.chit.triangles.scaling_factor_5.rotation_2
+dEQP-VK.ray_tracing_pipeline.direction_length.chit.triangles.scaling_factor_5.rotation_3
+dEQP-VK.ray_tracing_pipeline.direction_length.chit.triangles.scaling_factor_5.rotation_4
+dEQP-VK.ray_tracing_pipeline.direction_length.chit.aabbs.scaling_factor_0.rotation_0
+dEQP-VK.ray_tracing_pipeline.direction_length.chit.aabbs.scaling_factor_0.rotation_1
+dEQP-VK.ray_tracing_pipeline.direction_length.chit.aabbs.scaling_factor_0.rotation_2
+dEQP-VK.ray_tracing_pipeline.direction_length.chit.aabbs.scaling_factor_0.rotation_3
+dEQP-VK.ray_tracing_pipeline.direction_length.chit.aabbs.scaling_factor_0.rotation_4
+dEQP-VK.ray_tracing_pipeline.direction_length.chit.aabbs.scaling_factor_1.rotation_0
+dEQP-VK.ray_tracing_pipeline.direction_length.chit.aabbs.scaling_factor_1.rotation_1
+dEQP-VK.ray_tracing_pipeline.direction_length.chit.aabbs.scaling_factor_1.rotation_2
+dEQP-VK.ray_tracing_pipeline.direction_length.chit.aabbs.scaling_factor_1.rotation_3
+dEQP-VK.ray_tracing_pipeline.direction_length.chit.aabbs.scaling_factor_1.rotation_4
+dEQP-VK.ray_tracing_pipeline.direction_length.chit.aabbs.scaling_factor_2.rotation_0
+dEQP-VK.ray_tracing_pipeline.direction_length.chit.aabbs.scaling_factor_2.rotation_1
+dEQP-VK.ray_tracing_pipeline.direction_length.chit.aabbs.scaling_factor_2.rotation_2
+dEQP-VK.ray_tracing_pipeline.direction_length.chit.aabbs.scaling_factor_2.rotation_3
+dEQP-VK.ray_tracing_pipeline.direction_length.chit.aabbs.scaling_factor_2.rotation_4
+dEQP-VK.ray_tracing_pipeline.direction_length.chit.aabbs.scaling_factor_3.rotation_0
+dEQP-VK.ray_tracing_pipeline.direction_length.chit.aabbs.scaling_factor_3.rotation_1
+dEQP-VK.ray_tracing_pipeline.direction_length.chit.aabbs.scaling_factor_3.rotation_2
+dEQP-VK.ray_tracing_pipeline.direction_length.chit.aabbs.scaling_factor_3.rotation_3
+dEQP-VK.ray_tracing_pipeline.direction_length.chit.aabbs.scaling_factor_3.rotation_4
+dEQP-VK.ray_tracing_pipeline.direction_length.chit.aabbs.scaling_factor_4.rotation_0
+dEQP-VK.ray_tracing_pipeline.direction_length.chit.aabbs.scaling_factor_4.rotation_1
+dEQP-VK.ray_tracing_pipeline.direction_length.chit.aabbs.scaling_factor_4.rotation_2
+dEQP-VK.ray_tracing_pipeline.direction_length.chit.aabbs.scaling_factor_4.rotation_3
+dEQP-VK.ray_tracing_pipeline.direction_length.chit.aabbs.scaling_factor_4.rotation_4
+dEQP-VK.ray_tracing_pipeline.direction_length.chit.aabbs.scaling_factor_5.rotation_0
+dEQP-VK.ray_tracing_pipeline.direction_length.chit.aabbs.scaling_factor_5.rotation_1
+dEQP-VK.ray_tracing_pipeline.direction_length.chit.aabbs.scaling_factor_5.rotation_2
+dEQP-VK.ray_tracing_pipeline.direction_length.chit.aabbs.scaling_factor_5.rotation_3
+dEQP-VK.ray_tracing_pipeline.direction_length.chit.aabbs.scaling_factor_5.rotation_4
+dEQP-VK.ray_tracing_pipeline.direction_length.ahit.triangles.scaling_factor_0.rotation_0
+dEQP-VK.ray_tracing_pipeline.direction_length.ahit.triangles.scaling_factor_0.rotation_1
+dEQP-VK.ray_tracing_pipeline.direction_length.ahit.triangles.scaling_factor_0.rotation_2
+dEQP-VK.ray_tracing_pipeline.direction_length.ahit.triangles.scaling_factor_0.rotation_3
+dEQP-VK.ray_tracing_pipeline.direction_length.ahit.triangles.scaling_factor_0.rotation_4
+dEQP-VK.ray_tracing_pipeline.direction_length.ahit.triangles.scaling_factor_1.rotation_0
+dEQP-VK.ray_tracing_pipeline.direction_length.ahit.triangles.scaling_factor_1.rotation_1
+dEQP-VK.ray_tracing_pipeline.direction_length.ahit.triangles.scaling_factor_1.rotation_2
+dEQP-VK.ray_tracing_pipeline.direction_length.ahit.triangles.scaling_factor_1.rotation_3
+dEQP-VK.ray_tracing_pipeline.direction_length.ahit.triangles.scaling_factor_1.rotation_4
+dEQP-VK.ray_tracing_pipeline.direction_length.ahit.triangles.scaling_factor_2.rotation_0
+dEQP-VK.ray_tracing_pipeline.direction_length.ahit.triangles.scaling_factor_2.rotation_1
+dEQP-VK.ray_tracing_pipeline.direction_length.ahit.triangles.scaling_factor_2.rotation_2
+dEQP-VK.ray_tracing_pipeline.direction_length.ahit.triangles.scaling_factor_2.rotation_3
+dEQP-VK.ray_tracing_pipeline.direction_length.ahit.triangles.scaling_factor_2.rotation_4
+dEQP-VK.ray_tracing_pipeline.direction_length.ahit.triangles.scaling_factor_3.rotation_0
+dEQP-VK.ray_tracing_pipeline.direction_length.ahit.triangles.scaling_factor_3.rotation_1
+dEQP-VK.ray_tracing_pipeline.direction_length.ahit.triangles.scaling_factor_3.rotation_2
+dEQP-VK.ray_tracing_pipeline.direction_length.ahit.triangles.scaling_factor_3.rotation_3
+dEQP-VK.ray_tracing_pipeline.direction_length.ahit.triangles.scaling_factor_3.rotation_4
+dEQP-VK.ray_tracing_pipeline.direction_length.ahit.triangles.scaling_factor_4.rotation_0
+dEQP-VK.ray_tracing_pipeline.direction_length.ahit.triangles.scaling_factor_4.rotation_1
+dEQP-VK.ray_tracing_pipeline.direction_length.ahit.triangles.scaling_factor_4.rotation_2
+dEQP-VK.ray_tracing_pipeline.direction_length.ahit.triangles.scaling_factor_4.rotation_3
+dEQP-VK.ray_tracing_pipeline.direction_length.ahit.triangles.scaling_factor_4.rotation_4
+dEQP-VK.ray_tracing_pipeline.direction_length.ahit.triangles.scaling_factor_5.rotation_0
+dEQP-VK.ray_tracing_pipeline.direction_length.ahit.triangles.scaling_factor_5.rotation_1
+dEQP-VK.ray_tracing_pipeline.direction_length.ahit.triangles.scaling_factor_5.rotation_2
+dEQP-VK.ray_tracing_pipeline.direction_length.ahit.triangles.scaling_factor_5.rotation_3
+dEQP-VK.ray_tracing_pipeline.direction_length.ahit.triangles.scaling_factor_5.rotation_4
+dEQP-VK.ray_tracing_pipeline.direction_length.ahit.aabbs.scaling_factor_0.rotation_0
+dEQP-VK.ray_tracing_pipeline.direction_length.ahit.aabbs.scaling_factor_0.rotation_1
+dEQP-VK.ray_tracing_pipeline.direction_length.ahit.aabbs.scaling_factor_0.rotation_2
+dEQP-VK.ray_tracing_pipeline.direction_length.ahit.aabbs.scaling_factor_0.rotation_3
+dEQP-VK.ray_tracing_pipeline.direction_length.ahit.aabbs.scaling_factor_0.rotation_4
+dEQP-VK.ray_tracing_pipeline.direction_length.ahit.aabbs.scaling_factor_1.rotation_0
+dEQP-VK.ray_tracing_pipeline.direction_length.ahit.aabbs.scaling_factor_1.rotation_1
+dEQP-VK.ray_tracing_pipeline.direction_length.ahit.aabbs.scaling_factor_1.rotation_2
+dEQP-VK.ray_tracing_pipeline.direction_length.ahit.aabbs.scaling_factor_1.rotation_3
+dEQP-VK.ray_tracing_pipeline.direction_length.ahit.aabbs.scaling_factor_1.rotation_4
+dEQP-VK.ray_tracing_pipeline.direction_length.ahit.aabbs.scaling_factor_2.rotation_0
+dEQP-VK.ray_tracing_pipeline.direction_length.ahit.aabbs.scaling_factor_2.rotation_1
+dEQP-VK.ray_tracing_pipeline.direction_length.ahit.aabbs.scaling_factor_2.rotation_2
+dEQP-VK.ray_tracing_pipeline.direction_length.ahit.aabbs.scaling_factor_2.rotation_3
+dEQP-VK.ray_tracing_pipeline.direction_length.ahit.aabbs.scaling_factor_2.rotation_4
+dEQP-VK.ray_tracing_pipeline.direction_length.ahit.aabbs.scaling_factor_3.rotation_0
+dEQP-VK.ray_tracing_pipeline.direction_length.ahit.aabbs.scaling_factor_3.rotation_1
+dEQP-VK.ray_tracing_pipeline.direction_length.ahit.aabbs.scaling_factor_3.rotation_2
+dEQP-VK.ray_tracing_pipeline.direction_length.ahit.aabbs.scaling_factor_3.rotation_3
+dEQP-VK.ray_tracing_pipeline.direction_length.ahit.aabbs.scaling_factor_3.rotation_4
+dEQP-VK.ray_tracing_pipeline.direction_length.ahit.aabbs.scaling_factor_4.rotation_0
+dEQP-VK.ray_tracing_pipeline.direction_length.ahit.aabbs.scaling_factor_4.rotation_1
+dEQP-VK.ray_tracing_pipeline.direction_length.ahit.aabbs.scaling_factor_4.rotation_2
+dEQP-VK.ray_tracing_pipeline.direction_length.ahit.aabbs.scaling_factor_4.rotation_3
+dEQP-VK.ray_tracing_pipeline.direction_length.ahit.aabbs.scaling_factor_4.rotation_4
+dEQP-VK.ray_tracing_pipeline.direction_length.ahit.aabbs.scaling_factor_5.rotation_0
+dEQP-VK.ray_tracing_pipeline.direction_length.ahit.aabbs.scaling_factor_5.rotation_1
+dEQP-VK.ray_tracing_pipeline.direction_length.ahit.aabbs.scaling_factor_5.rotation_2
+dEQP-VK.ray_tracing_pipeline.direction_length.ahit.aabbs.scaling_factor_5.rotation_3
+dEQP-VK.ray_tracing_pipeline.direction_length.ahit.aabbs.scaling_factor_5.rotation_4
+dEQP-VK.ray_tracing_pipeline.direction_length.isec.aabbs.scaling_factor_0.rotation_0
+dEQP-VK.ray_tracing_pipeline.direction_length.isec.aabbs.scaling_factor_0.rotation_1
+dEQP-VK.ray_tracing_pipeline.direction_length.isec.aabbs.scaling_factor_0.rotation_2
+dEQP-VK.ray_tracing_pipeline.direction_length.isec.aabbs.scaling_factor_0.rotation_3
+dEQP-VK.ray_tracing_pipeline.direction_length.isec.aabbs.scaling_factor_0.rotation_4
+dEQP-VK.ray_tracing_pipeline.direction_length.isec.aabbs.scaling_factor_1.rotation_0
+dEQP-VK.ray_tracing_pipeline.direction_length.isec.aabbs.scaling_factor_1.rotation_1
+dEQP-VK.ray_tracing_pipeline.direction_length.isec.aabbs.scaling_factor_1.rotation_2
+dEQP-VK.ray_tracing_pipeline.direction_length.isec.aabbs.scaling_factor_1.rotation_3
+dEQP-VK.ray_tracing_pipeline.direction_length.isec.aabbs.scaling_factor_1.rotation_4
+dEQP-VK.ray_tracing_pipeline.direction_length.isec.aabbs.scaling_factor_2.rotation_0
+dEQP-VK.ray_tracing_pipeline.direction_length.isec.aabbs.scaling_factor_2.rotation_1
+dEQP-VK.ray_tracing_pipeline.direction_length.isec.aabbs.scaling_factor_2.rotation_2
+dEQP-VK.ray_tracing_pipeline.direction_length.isec.aabbs.scaling_factor_2.rotation_3
+dEQP-VK.ray_tracing_pipeline.direction_length.isec.aabbs.scaling_factor_2.rotation_4
+dEQP-VK.ray_tracing_pipeline.direction_length.isec.aabbs.scaling_factor_3.rotation_0
+dEQP-VK.ray_tracing_pipeline.direction_length.isec.aabbs.scaling_factor_3.rotation_1
+dEQP-VK.ray_tracing_pipeline.direction_length.isec.aabbs.scaling_factor_3.rotation_2
+dEQP-VK.ray_tracing_pipeline.direction_length.isec.aabbs.scaling_factor_3.rotation_3
+dEQP-VK.ray_tracing_pipeline.direction_length.isec.aabbs.scaling_factor_3.rotation_4
+dEQP-VK.ray_tracing_pipeline.direction_length.isec.aabbs.scaling_factor_4.rotation_0
+dEQP-VK.ray_tracing_pipeline.direction_length.isec.aabbs.scaling_factor_4.rotation_1
+dEQP-VK.ray_tracing_pipeline.direction_length.isec.aabbs.scaling_factor_4.rotation_2
+dEQP-VK.ray_tracing_pipeline.direction_length.isec.aabbs.scaling_factor_4.rotation_3
+dEQP-VK.ray_tracing_pipeline.direction_length.isec.aabbs.scaling_factor_4.rotation_4
+dEQP-VK.ray_tracing_pipeline.direction_length.isec.aabbs.scaling_factor_5.rotation_0
+dEQP-VK.ray_tracing_pipeline.direction_length.isec.aabbs.scaling_factor_5.rotation_1
+dEQP-VK.ray_tracing_pipeline.direction_length.isec.aabbs.scaling_factor_5.rotation_2
+dEQP-VK.ray_tracing_pipeline.direction_length.isec.aabbs.scaling_factor_5.rotation_3
+dEQP-VK.ray_tracing_pipeline.direction_length.isec.aabbs.scaling_factor_5.rotation_4
+dEQP-VK.ray_tracing_pipeline.barycentric_coordinates.ahit
+dEQP-VK.ray_tracing_pipeline.barycentric_coordinates.chit
 dEQP-VK.ray_query.builtin.flow.vert.triangles
 dEQP-VK.ray_query.builtin.flow.vert.aabbs
 dEQP-VK.ray_query.builtin.flow.tesc.triangles
@@ -265481,6 +284890,7 @@
 dEQP-VK.ray_query.acceleration_structures.instance_triangle_culling.call_shader.gpu_built.index_uint32.notransform_ccw
 dEQP-VK.ray_query.acceleration_structures.instance_triangle_culling.call_shader.gpu_built.index_uint32.notransform_nocull
 dEQP-VK.ray_query.acceleration_structures.instance_triangle_culling.call_shader.gpu_built.index_uint32.notransform_ccw_nocull
+dEQP-VK.ray_query.acceleration_structures.dynamic_indexing.dynamic_indexing
 dEQP-VK.ray_query.acceleration_structures.empty.vertex_shader.cpu_built.index_none.inactive_triangles
 dEQP-VK.ray_query.acceleration_structures.empty.vertex_shader.cpu_built.index_none.inactive_instances
 dEQP-VK.ray_query.acceleration_structures.empty.vertex_shader.cpu_built.index_none.no_geometries_bottom
@@ -265841,6 +285251,8 @@
 dEQP-VK.ray_query.acceleration_structures.empty.call_shader.gpu_built.index_uint32.no_geometries_bottom
 dEQP-VK.ray_query.acceleration_structures.empty.call_shader.gpu_built.index_uint32.no_primitives_top
 dEQP-VK.ray_query.acceleration_structures.empty.call_shader.gpu_built.index_uint32.no_primitives_bottom
+dEQP-VK.ray_query.procedural_geometry.object_behind_bounding_boxes
+dEQP-VK.ray_query.procedural_geometry.triangle_in_between
 dEQP-VK.ray_query.advanced.null_as.vert.triangles
 dEQP-VK.ray_query.advanced.null_as.vert.aabbs
 dEQP-VK.ray_query.advanced.null_as.tesc.triangles
@@ -266119,6 +285531,68 @@
 dEQP-VK.ray_query.ray_flags.call_shader.skip_geometry.triangles.skipaabb
 dEQP-VK.ray_query.ray_flags.call_shader.skip_geometry.aabbs.skiptriangles
 dEQP-VK.ray_query.ray_flags.call_shader.skip_geometry.aabbs.skipaabb
+dEQP-VK.ray_query.misc.dynamic_indexing
+dEQP-VK.ray_query.direction_length.triangles.scaling_factor_0.rotation_0
+dEQP-VK.ray_query.direction_length.triangles.scaling_factor_0.rotation_1
+dEQP-VK.ray_query.direction_length.triangles.scaling_factor_0.rotation_2
+dEQP-VK.ray_query.direction_length.triangles.scaling_factor_0.rotation_3
+dEQP-VK.ray_query.direction_length.triangles.scaling_factor_0.rotation_4
+dEQP-VK.ray_query.direction_length.triangles.scaling_factor_1.rotation_0
+dEQP-VK.ray_query.direction_length.triangles.scaling_factor_1.rotation_1
+dEQP-VK.ray_query.direction_length.triangles.scaling_factor_1.rotation_2
+dEQP-VK.ray_query.direction_length.triangles.scaling_factor_1.rotation_3
+dEQP-VK.ray_query.direction_length.triangles.scaling_factor_1.rotation_4
+dEQP-VK.ray_query.direction_length.triangles.scaling_factor_2.rotation_0
+dEQP-VK.ray_query.direction_length.triangles.scaling_factor_2.rotation_1
+dEQP-VK.ray_query.direction_length.triangles.scaling_factor_2.rotation_2
+dEQP-VK.ray_query.direction_length.triangles.scaling_factor_2.rotation_3
+dEQP-VK.ray_query.direction_length.triangles.scaling_factor_2.rotation_4
+dEQP-VK.ray_query.direction_length.triangles.scaling_factor_3.rotation_0
+dEQP-VK.ray_query.direction_length.triangles.scaling_factor_3.rotation_1
+dEQP-VK.ray_query.direction_length.triangles.scaling_factor_3.rotation_2
+dEQP-VK.ray_query.direction_length.triangles.scaling_factor_3.rotation_3
+dEQP-VK.ray_query.direction_length.triangles.scaling_factor_3.rotation_4
+dEQP-VK.ray_query.direction_length.triangles.scaling_factor_4.rotation_0
+dEQP-VK.ray_query.direction_length.triangles.scaling_factor_4.rotation_1
+dEQP-VK.ray_query.direction_length.triangles.scaling_factor_4.rotation_2
+dEQP-VK.ray_query.direction_length.triangles.scaling_factor_4.rotation_3
+dEQP-VK.ray_query.direction_length.triangles.scaling_factor_4.rotation_4
+dEQP-VK.ray_query.direction_length.triangles.scaling_factor_5.rotation_0
+dEQP-VK.ray_query.direction_length.triangles.scaling_factor_5.rotation_1
+dEQP-VK.ray_query.direction_length.triangles.scaling_factor_5.rotation_2
+dEQP-VK.ray_query.direction_length.triangles.scaling_factor_5.rotation_3
+dEQP-VK.ray_query.direction_length.triangles.scaling_factor_5.rotation_4
+dEQP-VK.ray_query.direction_length.aabbs.scaling_factor_0.rotation_0
+dEQP-VK.ray_query.direction_length.aabbs.scaling_factor_0.rotation_1
+dEQP-VK.ray_query.direction_length.aabbs.scaling_factor_0.rotation_2
+dEQP-VK.ray_query.direction_length.aabbs.scaling_factor_0.rotation_3
+dEQP-VK.ray_query.direction_length.aabbs.scaling_factor_0.rotation_4
+dEQP-VK.ray_query.direction_length.aabbs.scaling_factor_1.rotation_0
+dEQP-VK.ray_query.direction_length.aabbs.scaling_factor_1.rotation_1
+dEQP-VK.ray_query.direction_length.aabbs.scaling_factor_1.rotation_2
+dEQP-VK.ray_query.direction_length.aabbs.scaling_factor_1.rotation_3
+dEQP-VK.ray_query.direction_length.aabbs.scaling_factor_1.rotation_4
+dEQP-VK.ray_query.direction_length.aabbs.scaling_factor_2.rotation_0
+dEQP-VK.ray_query.direction_length.aabbs.scaling_factor_2.rotation_1
+dEQP-VK.ray_query.direction_length.aabbs.scaling_factor_2.rotation_2
+dEQP-VK.ray_query.direction_length.aabbs.scaling_factor_2.rotation_3
+dEQP-VK.ray_query.direction_length.aabbs.scaling_factor_2.rotation_4
+dEQP-VK.ray_query.direction_length.aabbs.scaling_factor_3.rotation_0
+dEQP-VK.ray_query.direction_length.aabbs.scaling_factor_3.rotation_1
+dEQP-VK.ray_query.direction_length.aabbs.scaling_factor_3.rotation_2
+dEQP-VK.ray_query.direction_length.aabbs.scaling_factor_3.rotation_3
+dEQP-VK.ray_query.direction_length.aabbs.scaling_factor_3.rotation_4
+dEQP-VK.ray_query.direction_length.aabbs.scaling_factor_4.rotation_0
+dEQP-VK.ray_query.direction_length.aabbs.scaling_factor_4.rotation_1
+dEQP-VK.ray_query.direction_length.aabbs.scaling_factor_4.rotation_2
+dEQP-VK.ray_query.direction_length.aabbs.scaling_factor_4.rotation_3
+dEQP-VK.ray_query.direction_length.aabbs.scaling_factor_4.rotation_4
+dEQP-VK.ray_query.direction_length.aabbs.scaling_factor_5.rotation_0
+dEQP-VK.ray_query.direction_length.aabbs.scaling_factor_5.rotation_1
+dEQP-VK.ray_query.direction_length.aabbs.scaling_factor_5.rotation_2
+dEQP-VK.ray_query.direction_length.aabbs.scaling_factor_5.rotation_3
+dEQP-VK.ray_query.direction_length.aabbs.scaling_factor_5.rotation_4
+dEQP-VK.ray_query.barycentric_coordinates.compute
 dEQP-VK.fragment_shading_rate.basic.dynamic.noattachment.noshaderrate.keep.keep.1x1.samples1.vs
 dEQP-VK.fragment_shading_rate.basic.dynamic.noattachment.noshaderrate.keep.keep.1x1.samples2.vs
 dEQP-VK.fragment_shading_rate.basic.dynamic.noattachment.noshaderrate.keep.keep.1x1.samples4.vs
@@ -279069,3 +298543,228 @@
 dEQP-VK.fragment_shading_rate.sampleshadinginput.dynamic.attachment.shaderrate.replace.replace.256x256.samples8.gs
 dEQP-VK.fragment_shading_rate.sampleshadinginput.dynamic.attachment.shaderrate.replace.replace.256x256.samples16.vs
 dEQP-VK.fragment_shading_rate.sampleshadinginput.dynamic.attachment.shaderrate.replace.replace.256x256.samples16.gs
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_1x1.samples_1.extent_1x1
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_1x1.samples_1.extent_4x4
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_1x1.samples_1.extent_33x35
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_1x1.samples_1.extent_151x431
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_1x1.samples_1.extent_256x256
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_1x1.samples_2.extent_1x1
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_1x1.samples_2.extent_4x4
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_1x1.samples_2.extent_33x35
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_1x1.samples_2.extent_151x431
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_1x1.samples_2.extent_256x256
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_1x1.samples_4.extent_1x1
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_1x1.samples_4.extent_4x4
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_1x1.samples_4.extent_33x35
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_1x1.samples_4.extent_151x431
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_1x1.samples_4.extent_256x256
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_1x1.samples_8.extent_1x1
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_1x1.samples_8.extent_4x4
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_1x1.samples_8.extent_33x35
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_1x1.samples_8.extent_151x431
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_1x1.samples_8.extent_256x256
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_1x1.samples_16.extent_1x1
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_1x1.samples_16.extent_4x4
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_1x1.samples_16.extent_33x35
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_1x1.samples_16.extent_151x431
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_1x1.samples_16.extent_256x256
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_1x2.samples_1.extent_1x1
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_1x2.samples_1.extent_4x4
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_1x2.samples_1.extent_33x35
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_1x2.samples_1.extent_151x431
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_1x2.samples_1.extent_256x256
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_1x2.samples_2.extent_1x1
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_1x2.samples_2.extent_4x4
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_1x2.samples_2.extent_33x35
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_1x2.samples_2.extent_151x431
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_1x2.samples_2.extent_256x256
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_1x2.samples_4.extent_1x1
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_1x2.samples_4.extent_4x4
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_1x2.samples_4.extent_33x35
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_1x2.samples_4.extent_151x431
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_1x2.samples_4.extent_256x256
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_1x2.samples_8.extent_1x1
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_1x2.samples_8.extent_4x4
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_1x2.samples_8.extent_33x35
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_1x2.samples_8.extent_151x431
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_1x2.samples_8.extent_256x256
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_1x2.samples_16.extent_1x1
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_1x2.samples_16.extent_4x4
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_1x2.samples_16.extent_33x35
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_1x2.samples_16.extent_151x431
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_1x2.samples_16.extent_256x256
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_1x4.samples_1.extent_1x1
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_1x4.samples_1.extent_4x4
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_1x4.samples_1.extent_33x35
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_1x4.samples_1.extent_151x431
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_1x4.samples_1.extent_256x256
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_1x4.samples_2.extent_1x1
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_1x4.samples_2.extent_4x4
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_1x4.samples_2.extent_33x35
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_1x4.samples_2.extent_151x431
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_1x4.samples_2.extent_256x256
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_1x4.samples_4.extent_1x1
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_1x4.samples_4.extent_4x4
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_1x4.samples_4.extent_33x35
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_1x4.samples_4.extent_151x431
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_1x4.samples_4.extent_256x256
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_1x4.samples_8.extent_1x1
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_1x4.samples_8.extent_4x4
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_1x4.samples_8.extent_33x35
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_1x4.samples_8.extent_151x431
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_1x4.samples_8.extent_256x256
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_1x4.samples_16.extent_1x1
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_1x4.samples_16.extent_4x4
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_1x4.samples_16.extent_33x35
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_1x4.samples_16.extent_151x431
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_1x4.samples_16.extent_256x256
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_2x1.samples_1.extent_1x1
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_2x1.samples_1.extent_4x4
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_2x1.samples_1.extent_33x35
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_2x1.samples_1.extent_151x431
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_2x1.samples_1.extent_256x256
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_2x1.samples_2.extent_1x1
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_2x1.samples_2.extent_4x4
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_2x1.samples_2.extent_33x35
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_2x1.samples_2.extent_151x431
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_2x1.samples_2.extent_256x256
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_2x1.samples_4.extent_1x1
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_2x1.samples_4.extent_4x4
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_2x1.samples_4.extent_33x35
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_2x1.samples_4.extent_151x431
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_2x1.samples_4.extent_256x256
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_2x1.samples_8.extent_1x1
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_2x1.samples_8.extent_4x4
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_2x1.samples_8.extent_33x35
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_2x1.samples_8.extent_151x431
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_2x1.samples_8.extent_256x256
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_2x1.samples_16.extent_1x1
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_2x1.samples_16.extent_4x4
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_2x1.samples_16.extent_33x35
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_2x1.samples_16.extent_151x431
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_2x1.samples_16.extent_256x256
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_2x2.samples_1.extent_1x1
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_2x2.samples_1.extent_4x4
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_2x2.samples_1.extent_33x35
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_2x2.samples_1.extent_151x431
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_2x2.samples_1.extent_256x256
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_2x2.samples_2.extent_1x1
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_2x2.samples_2.extent_4x4
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_2x2.samples_2.extent_33x35
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_2x2.samples_2.extent_151x431
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_2x2.samples_2.extent_256x256
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_2x2.samples_4.extent_1x1
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_2x2.samples_4.extent_4x4
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_2x2.samples_4.extent_33x35
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_2x2.samples_4.extent_151x431
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_2x2.samples_4.extent_256x256
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_2x2.samples_8.extent_1x1
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_2x2.samples_8.extent_4x4
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_2x2.samples_8.extent_33x35
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_2x2.samples_8.extent_151x431
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_2x2.samples_8.extent_256x256
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_2x2.samples_16.extent_1x1
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_2x2.samples_16.extent_4x4
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_2x2.samples_16.extent_33x35
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_2x2.samples_16.extent_151x431
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_2x2.samples_16.extent_256x256
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_2x4.samples_1.extent_1x1
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_2x4.samples_1.extent_4x4
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_2x4.samples_1.extent_33x35
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_2x4.samples_1.extent_151x431
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_2x4.samples_1.extent_256x256
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_2x4.samples_2.extent_1x1
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_2x4.samples_2.extent_4x4
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_2x4.samples_2.extent_33x35
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_2x4.samples_2.extent_151x431
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_2x4.samples_2.extent_256x256
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_2x4.samples_4.extent_1x1
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_2x4.samples_4.extent_4x4
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_2x4.samples_4.extent_33x35
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_2x4.samples_4.extent_151x431
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_2x4.samples_4.extent_256x256
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_2x4.samples_8.extent_1x1
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_2x4.samples_8.extent_4x4
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_2x4.samples_8.extent_33x35
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_2x4.samples_8.extent_151x431
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_2x4.samples_8.extent_256x256
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_2x4.samples_16.extent_1x1
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_2x4.samples_16.extent_4x4
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_2x4.samples_16.extent_33x35
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_2x4.samples_16.extent_151x431
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_2x4.samples_16.extent_256x256
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_4x1.samples_1.extent_1x1
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_4x1.samples_1.extent_4x4
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_4x1.samples_1.extent_33x35
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_4x1.samples_1.extent_151x431
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_4x1.samples_1.extent_256x256
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_4x1.samples_2.extent_1x1
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_4x1.samples_2.extent_4x4
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_4x1.samples_2.extent_33x35
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_4x1.samples_2.extent_151x431
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_4x1.samples_2.extent_256x256
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_4x1.samples_4.extent_1x1
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_4x1.samples_4.extent_4x4
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_4x1.samples_4.extent_33x35
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_4x1.samples_4.extent_151x431
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_4x1.samples_4.extent_256x256
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_4x1.samples_8.extent_1x1
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_4x1.samples_8.extent_4x4
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_4x1.samples_8.extent_33x35
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_4x1.samples_8.extent_151x431
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_4x1.samples_8.extent_256x256
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_4x1.samples_16.extent_1x1
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_4x1.samples_16.extent_4x4
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_4x1.samples_16.extent_33x35
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_4x1.samples_16.extent_151x431
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_4x1.samples_16.extent_256x256
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_4x2.samples_1.extent_1x1
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_4x2.samples_1.extent_4x4
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_4x2.samples_1.extent_33x35
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_4x2.samples_1.extent_151x431
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_4x2.samples_1.extent_256x256
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_4x2.samples_2.extent_1x1
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_4x2.samples_2.extent_4x4
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_4x2.samples_2.extent_33x35
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_4x2.samples_2.extent_151x431
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_4x2.samples_2.extent_256x256
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_4x2.samples_4.extent_1x1
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_4x2.samples_4.extent_4x4
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_4x2.samples_4.extent_33x35
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_4x2.samples_4.extent_151x431
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_4x2.samples_4.extent_256x256
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_4x2.samples_8.extent_1x1
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_4x2.samples_8.extent_4x4
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_4x2.samples_8.extent_33x35
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_4x2.samples_8.extent_151x431
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_4x2.samples_8.extent_256x256
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_4x2.samples_16.extent_1x1
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_4x2.samples_16.extent_4x4
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_4x2.samples_16.extent_33x35
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_4x2.samples_16.extent_151x431
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_4x2.samples_16.extent_256x256
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_4x4.samples_1.extent_1x1
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_4x4.samples_1.extent_4x4
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_4x4.samples_1.extent_33x35
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_4x4.samples_1.extent_151x431
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_4x4.samples_1.extent_256x256
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_4x4.samples_2.extent_1x1
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_4x4.samples_2.extent_4x4
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_4x4.samples_2.extent_33x35
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_4x4.samples_2.extent_151x431
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_4x4.samples_2.extent_256x256
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_4x4.samples_4.extent_1x1
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_4x4.samples_4.extent_4x4
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_4x4.samples_4.extent_33x35
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_4x4.samples_4.extent_151x431
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_4x4.samples_4.extent_256x256
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_4x4.samples_8.extent_1x1
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_4x4.samples_8.extent_4x4
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_4x4.samples_8.extent_33x35
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_4x4.samples_8.extent_151x431
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_4x4.samples_8.extent_256x256
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_4x4.samples_16.extent_1x1
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_4x4.samples_16.extent_4x4
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_4x4.samples_16.extent_33x35
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_4x4.samples_16.extent_151x431
+dEQP-VK.fragment_shading_rate.pixel_consistency.rate_4x4.samples_16.extent_256x256
diff --git a/android/cts/master/vk-master.txt b/android/cts/master/vk-master.txt
index de982ee..50d8001 100644
--- a/android/cts/master/vk-master.txt
+++ b/android/cts/master/vk-master.txt
Binary files differ
diff --git a/android/cts/runner/src/com/drawelements/deqp/runner/DeqpTestRunner.java b/android/cts/runner/src/com/drawelements/deqp/runner/DeqpTestRunner.java
index f994692..00c108b 100644
--- a/android/cts/runner/src/com/drawelements/deqp/runner/DeqpTestRunner.java
+++ b/android/cts/runner/src/com/drawelements/deqp/runner/DeqpTestRunner.java
@@ -25,6 +25,7 @@
 import com.android.tradefed.config.Option;
 import com.android.tradefed.config.OptionClass;
 import com.android.tradefed.device.DeviceNotAvailableException;
+import com.android.tradefed.device.IManagedTestDevice;
 import com.android.tradefed.device.ITestDevice;
 import com.android.tradefed.log.LogUtil.CLog;
 import com.android.tradefed.metrics.proto.MetricMeasurement.Metric;
@@ -42,6 +43,7 @@
 import com.android.tradefed.testtype.ITestCollector;
 import com.android.tradefed.testtype.ITestFilterReceiver;
 import com.android.tradefed.util.AbiUtils;
+import com.android.tradefed.util.FileUtil;
 import com.android.tradefed.util.IRunUtil;
 import com.android.tradefed.util.RunInterruptedException;
 import com.android.tradefed.util.RunUtil;
@@ -52,11 +54,8 @@
 import java.io.FileReader;
 import java.io.IOException;
 import java.io.Reader;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
 import java.util.ArrayList;
 import java.util.Collection;
-import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
@@ -85,8 +84,9 @@
     private static final String INCOMPLETE_LOG_MESSAGE = "Crash: Incomplete test log";
     private static final String SKIPPED_INSTANCE_LOG_MESSAGE = "Configuration skipped";
     private static final String NOT_EXECUTABLE_LOG_MESSAGE = "Abort: Test cannot be executed";
-    private static final String CASE_LIST_FILE_NAME = "/sdcard/dEQP-TestCaseList.txt";
-    private static final String LOG_FILE_NAME = "/sdcard/TestLog.qpa";
+    private static final String APP_DIR = "/sdcard/";
+    private static final String CASE_LIST_FILE_NAME = "dEQP-TestCaseList.txt";
+    private static final String LOG_FILE_NAME = "TestLog.qpa";
     public static final String FEATURE_LANDSCAPE = "android.hardware.screen.landscape";
     public static final String FEATURE_PORTRAIT = "android.hardware.screen.portrait";
     public static final String FEATURE_VULKAN_LEVEL = "android.hardware.vulkan.level";
@@ -96,6 +96,10 @@
     private static final int TESTCASE_BATCH_LIMIT = 1000;
     private static final int UNRESPONSIVE_CMD_TIMEOUT_MS = 10 * 60 * 1000; // 10min
 
+    private static final String ANGLE_NONE = "none";
+    private static final String ANGLE_VULKAN = "vulkan";
+    private static final String ANGLE_OPENGLES = "opengles";
+
     // !NOTE: There's a static method copyOptions() for copying options during split.
     // If you add state update copyOptions() as appropriate!
 
@@ -145,6 +149,17 @@
             description="The estimated config runtime. Defaults to 200ms x num tests.")
     private long mRuntimeHint = -1;
 
+    @Option(name="deqp-use-angle",
+            description="ANGLE backend ('none', 'vulkan', 'opengles'). Defaults to 'none' (don't use ANGLE)",
+            importance=Option.Importance.NEVER)
+    private String mAngle = "none";
+
+    @Option(
+            name = "disable-watchdog",
+            description =
+                    "Disable the native testrunner's per-test watchdog.")
+    private boolean mDisableWatchdog = false;
+
     private Collection<TestDescription> mRemainingTests = null;
     private Map<TestDescription, Set<BatchRunConfiguration>> mTestInstances = null;
     private final TestInstanceResultListener mInstanceListerner = new TestInstanceResultListener();
@@ -992,31 +1007,7 @@
         }
 
         public void recoverDevice() throws DeviceNotAvailableException {
-            // Work around the API. We need to call recoverDevice() on the test device and
-            // we know that mDevice is a TestDevice. However even though the recoverDevice()
-            // method is public suggesting it should be publicly accessible, the class itself
-            // and its super-interface (IManagedTestDevice) are package-private.
-            final Method recoverDeviceMethod;
-            try {
-                recoverDeviceMethod = mDevice.getClass().getMethod("recoverDevice");
-                recoverDeviceMethod.setAccessible(true);
-            } catch (NoSuchMethodException ex) {
-                throw new AssertionError("Test device must have recoverDevice()");
-            }
-
-            try {
-                recoverDeviceMethod.invoke(mDevice);
-            } catch (InvocationTargetException ex) {
-                if (ex.getCause() instanceof DeviceNotAvailableException) {
-                    throw (DeviceNotAvailableException)ex.getCause();
-                } else if (ex.getCause() instanceof RuntimeException) {
-                    throw (RuntimeException)ex.getCause();
-                } else {
-                    throw new AssertionError("unexpected throw", ex);
-                }
-            } catch (IllegalAccessException ex) {
-                throw new AssertionError("unexpected throw", ex);
-            }
+            ((IManagedTestDevice) mDevice).recoverDevice();
         }
 
         private void rebootDevice() throws DeviceNotAvailableException {
@@ -1424,17 +1415,19 @@
         checkInterrupted(); // throws if interrupted
 
         final String testCases = generateTestCaseTrie(batch.tests);
-
-        mDevice.executeShellCommand("rm " + CASE_LIST_FILE_NAME);
-        mDevice.executeShellCommand("rm " + LOG_FILE_NAME);
-        mDevice.pushString(testCases + "\n", CASE_LIST_FILE_NAME);
+        final String testCaseFilename = APP_DIR + CASE_LIST_FILE_NAME;
+        mDevice.executeShellCommand("rm " + testCaseFilename);
+        mDevice.executeShellCommand("rm " + APP_DIR + LOG_FILE_NAME);
+        if (!mDevice.pushString(testCases + "\n", testCaseFilename)) {
+            throw new RuntimeException("Failed to write test cases to " + testCaseFilename);
+        }
 
         final String instrumentationName =
                 "com.drawelements.deqp/com.drawelements.deqp.testercore.DeqpInstrumentation";
 
         final StringBuilder deqpCmdLine = new StringBuilder();
         deqpCmdLine.append("--deqp-caselist-file=");
-        deqpCmdLine.append(CASE_LIST_FILE_NAME);
+        deqpCmdLine.append(APP_DIR + CASE_LIST_FILE_NAME);
         deqpCmdLine.append(" ");
         deqpCmdLine.append(getRunConfigDisplayCmdLine(batch.config));
 
@@ -1443,13 +1436,15 @@
             deqpCmdLine.append(" --deqp-log-images=disable");
         }
 
-        deqpCmdLine.append(" --deqp-watchdog=enable");
+        if (!mDisableWatchdog) {
+            deqpCmdLine.append(" --deqp-watchdog=enable");
+        }
 
         final String command = String.format(
                 "am instrument %s -w -e deqpLogFilename \"%s\" -e deqpCmdLine \"%s\""
                     + " -e deqpLogData \"%s\" %s",
-                AbiUtils.createAbiFlag(mAbi.getName()), LOG_FILE_NAME, deqpCmdLine.toString(),
-                mLogData, instrumentationName);
+                AbiUtils.createAbiFlag(mAbi.getName()), APP_DIR + LOG_FILE_NAME,
+                deqpCmdLine.toString(), mLogData, instrumentationName);
 
         final int numRemainingInstancesBefore = getNumRemainingInstances();
         final InstrumentationParser parser = new InstrumentationParser(mInstanceListerner);
@@ -1939,6 +1934,10 @@
     private static Set<String> getNonPatternFilters(List<String> filters) {
         Set<String> nonPatternFilters = new HashSet<String>();
         for (String filter : filters) {
+            if (filter.startsWith("#") || filter.isEmpty()) {
+                // Skip comments and empty lines
+                continue;
+            }
             if (!filter.contains("*")) {
                 // Deqp usesly only dots for separating between parts of the names
                 // Convert last dot to hash if needed.
@@ -2052,7 +2051,13 @@
             if (reader == null) {
                 File testlist = new File(mBuildHelper.getTestsDir(), mCaselistFile);
                 if (!testlist.isFile()) {
-                    throw new FileNotFoundException();
+                    // Finding file in sub directory if no matching file in the first layer of
+                    // testdir.
+                    testlist = FileUtil.findFile(mBuildHelper.getTestsDir(), mCaselistFile);
+                    if (testlist == null || !testlist.isFile()) {
+                        throw new FileNotFoundException("Cannot find deqp test list file: "
+                            + mCaselistFile);
+                    }
                 }
                 reader = new FileReader(testlist);
             }
@@ -2103,11 +2108,67 @@
     }
 
     /**
+     * Set up the test environment.
+     */
+    private void setupTestEnvironment() throws DeviceNotAvailableException {
+        try {
+            // Get the system into a known state.
+            // Clear ANGLE Global.Settings values
+            mDevice.executeShellCommand("settings delete global angle_gl_driver_selection_pkgs");
+            mDevice.executeShellCommand("settings delete global angle_gl_driver_selection_values");
+
+            // ANGLE
+            if (mAngle.equals(ANGLE_VULKAN)) {
+                CLog.i("Configuring ANGLE to use: " + mAngle);
+                // Force dEQP to use ANGLE
+                mDevice.executeShellCommand(
+                    "settings put global angle_gl_driver_selection_pkgs " + DEQP_ONDEVICE_PKG);
+                mDevice.executeShellCommand(
+                    "settings put global angle_gl_driver_selection_values angle");
+                // Configure ANGLE to use Vulkan
+                mDevice.executeShellCommand("setprop debug.angle.backend 2");
+            } else if (mAngle.equals(ANGLE_OPENGLES)) {
+                CLog.i("Configuring ANGLE to use: " + mAngle);
+                // Force dEQP to use ANGLE
+                mDevice.executeShellCommand(
+                    "settings put global angle_gl_driver_selection_pkgs " + DEQP_ONDEVICE_PKG);
+                mDevice.executeShellCommand(
+                    "settings put global angle_gl_driver_selection_values angle");
+                // Configure ANGLE to use Vulkan
+                mDevice.executeShellCommand("setprop debug.angle.backend 0");
+            }
+        } catch (DeviceNotAvailableException ex) {
+            // chain forward
+            CLog.e("Failed to set up ANGLE correctly.");
+            throw new DeviceNotAvailableException("Device not available", ex,
+                mDevice.getSerialNumber());
+        }
+    }
+
+    /**
+     * Clean up the test environment.
+     */
+    private void teardownTestEnvironment() throws DeviceNotAvailableException {
+        // ANGLE
+        try {
+            CLog.i("Cleaning up ANGLE");
+            // Stop forcing dEQP to use ANGLE
+            mDevice.executeShellCommand("settings delete global angle_gl_driver_selection_pkgs");
+            mDevice.executeShellCommand("settings delete global angle_gl_driver_selection_values");
+        } catch (DeviceNotAvailableException ex) {
+            // chain forward
+            CLog.e("Failed to clean up ANGLE correctly.");
+            throw new DeviceNotAvailableException("Device not available", ex,
+                mDevice.getSerialNumber());
+        }
+    }
+
+    /**
      * {@inheritDoc}
      */
     @Override
     public void run(ITestInvocationListener listener) throws DeviceNotAvailableException {
-        final Map<String, String> emptyMap = Collections.emptyMap();
+        final HashMap<String, Metric> emptyMap = new HashMap<>();
         // If sharded, split() will load the tests.
         if (mTestInstances == null) {
             loadTests();
@@ -2136,11 +2197,13 @@
             } else if (!mRemainingTests.isEmpty()) {
                 mInstanceListerner.setSink(listener);
                 mDeviceRecovery.setDevice(mDevice);
+                setupTestEnvironment();
                 runTests();
+                teardownTestEnvironment();
             }
         } catch (CapabilityQueryFailureException ex) {
             // Platform is not behaving correctly, for example crashing when trying to create
-            // a window. Instead of silenty failing, signal failure by leaving the rest of the
+            // a window. Instead of silently failing, signal failure by leaving the rest of the
             // test cases in "NotExecuted" state
             CLog.e("Capability query failed - leaving tests unexecuted.");
         } finally {
@@ -2234,6 +2297,8 @@
         destination.mAbi = source.mAbi;
         destination.mLogData = source.mLogData;
         destination.mCollectTestsOnly = source.mCollectTestsOnly;
+        destination.mAngle = source.mAngle;
+        destination.mDisableWatchdog = source.mDisableWatchdog;
     }
 
     /**
diff --git a/android/cts/runner/tests/src/com/drawelements/deqp/runner/DeqpTestRunnerTest.java b/android/cts/runner/tests/src/com/drawelements/deqp/runner/DeqpTestRunnerTest.java
index 06e5b0c..18729d7 100644
--- a/android/cts/runner/tests/src/com/drawelements/deqp/runner/DeqpTestRunnerTest.java
+++ b/android/cts/runner/tests/src/com/drawelements/deqp/runner/DeqpTestRunnerTest.java
@@ -22,10 +22,12 @@
 import com.android.tradefed.config.ConfigurationException;
 import com.android.tradefed.config.OptionSetter;
 import com.android.tradefed.device.DeviceNotAvailableException;
+import com.android.tradefed.device.IManagedTestDevice;
 import com.android.tradefed.device.ITestDevice;
 import com.android.tradefed.metrics.proto.MetricMeasurement.Metric;
 import com.android.tradefed.result.ITestInvocationListener;
 import com.android.tradefed.result.TestDescription;
+import com.android.tradefed.result.error.InfraErrorIdentifier;
 import com.android.tradefed.testtype.Abi;
 import com.android.tradefed.testtype.IAbi;
 import com.android.tradefed.testtype.IRemoteTest;
@@ -63,8 +65,9 @@
 public class DeqpTestRunnerTest extends TestCase {
     private static final String NAME = "dEQP-GLES3";
     private static final IAbi ABI = new Abi("armeabi-v7a", "32");
-    private static final String CASE_LIST_FILE_NAME = "/sdcard/dEQP-TestCaseList.txt";
-    private static final String LOG_FILE_NAME = "/sdcard/TestLog.qpa";
+    private static final String APP_DIR = "/sdcard/";
+    private static final String CASE_LIST_FILE_NAME = "dEQP-TestCaseList.txt";
+    private static final String LOG_FILE_NAME = "TestLog.qpa";
     private static final String INSTRUMENTATION_NAME =
             "com.drawelements.deqp/com.drawelements.deqp.testercore.DeqpInstrumentation";
     private static final String QUERY_INSTRUMENTATION_NAME =
@@ -121,7 +124,7 @@
     private static DeqpTestRunner buildGlesTestRunner(int majorVersion,
                                                       int minorVersion,
                                                       Collection<TestDescription> tests,
-                                                      File testsDir) throws ConfigurationException, FileNotFoundException {
+                                                      File testsDir) throws ConfigurationException {
         StringWriter testlist = new StringWriter();
         for (TestDescription test : tests) {
             testlist.write(test.getClassName() + "." + test.getTestName() + "\n");
@@ -224,6 +227,16 @@
         if (majorVersion > requiredMajorVersion
                 || (majorVersion == requiredMajorVersion && minorVersion >= requiredMinorVersion)) {
 
+            // Expect the calls twice: setupTestEnvironment() and teardownTestEnvironment()
+            EasyMock.expect(mockDevice.executeShellCommand(EasyMock.eq("settings delete global angle_gl_driver_selection_pkgs"))).
+                andReturn("").once();
+            EasyMock.expect(mockDevice.executeShellCommand(EasyMock.eq("settings delete global angle_gl_driver_selection_values"))).
+                andReturn("").once();
+            EasyMock.expect(mockDevice.executeShellCommand(EasyMock.eq("settings delete global angle_gl_driver_selection_pkgs"))).
+                andReturn("").once();
+            EasyMock.expect(mockDevice.executeShellCommand(EasyMock.eq("settings delete global angle_gl_driver_selection_values"))).
+                andReturn("").once();
+
             expectRenderConfigQuery(mockDevice, requiredMajorVersion,
                     requiredMinorVersion);
 
@@ -233,7 +246,7 @@
                     + "--deqp-surface-type=window "
                     + "--deqp-log-images=disable "
                     + "--deqp-watchdog=enable",
-                    CASE_LIST_FILE_NAME);
+                    APP_DIR + CASE_LIST_FILE_NAME);
 
             runInstrumentationLineAndAnswer(mockDevice, mockIDevice, testTrie, commandLine,
                     output);
@@ -248,7 +261,7 @@
         mockListener.testEnded(EasyMock.eq(testId), EasyMock.<HashMap<String, Metric>>notNull());
         EasyMock.expectLastCall().once();
 
-        mockListener.testRunEnded(EasyMock.anyLong(), EasyMock.<Map<String, String>>notNull());
+        mockListener.testRunEnded(EasyMock.anyLong(), EasyMock.<HashMap<String, Metric>>notNull());
         EasyMock.expectLastCall().once();
 
         EasyMock.replay(mockDevice, mockIDevice);
@@ -361,13 +374,23 @@
                 + "--deqp-surface-type=window "
                 + "--deqp-log-images=disable "
                 + "--deqp-watchdog=enable",
-                CASE_LIST_FILE_NAME);
+                APP_DIR + CASE_LIST_FILE_NAME);
 
         runInstrumentationLineAndAnswer(mockDevice, mockIDevice, testTrie, commandLine, output);
 
         mockListener.testRunStarted(getTestId(deqpTest), 1);
         EasyMock.expectLastCall().once();
 
+        // Expect the calls twice: setupTestEnvironment() and teardownTestEnvironment()
+        EasyMock.expect(mockDevice.executeShellCommand(EasyMock.eq("settings delete global angle_gl_driver_selection_pkgs"))).
+            andReturn("").once();
+        EasyMock.expect(mockDevice.executeShellCommand(EasyMock.eq("settings delete global angle_gl_driver_selection_values"))).
+            andReturn("").once();
+        EasyMock.expect(mockDevice.executeShellCommand(EasyMock.eq("settings delete global angle_gl_driver_selection_pkgs"))).
+            andReturn("").once();
+        EasyMock.expect(mockDevice.executeShellCommand(EasyMock.eq("settings delete global angle_gl_driver_selection_values"))).
+            andReturn("").once();
+
         mockListener.testStarted(EasyMock.eq(testId));
         EasyMock.expectLastCall().once();
 
@@ -382,7 +405,7 @@
         mockListener.testEnded(EasyMock.eq(testId), EasyMock.<HashMap<String, Metric>>notNull());
         EasyMock.expectLastCall().once();
 
-        mockListener.testRunEnded(EasyMock.anyLong(), EasyMock.<Map<String, String>>notNull());
+        mockListener.testRunEnded(EasyMock.anyLong(), EasyMock.<HashMap<String, Metric>>notNull());
         EasyMock.expectLastCall().once();
 
         EasyMock.replay(mockDevice, mockIDevice);
@@ -518,13 +541,23 @@
                 + "--deqp-surface-type=window "
                 + "--deqp-log-images=disable "
                 + "--deqp-watchdog=enable",
-                CASE_LIST_FILE_NAME);
+                APP_DIR + CASE_LIST_FILE_NAME);
 
         runInstrumentationLineAndAnswer(mockDevice, mockIDevice, testTrie, commandLine, output);
 
         mockListener.testRunStarted(getTestId(deqpTest), testPaths.length);
         EasyMock.expectLastCall().once();
 
+        // Expect the calls twice: setupTestEnvironment() and teardownTestEnvironment()
+        EasyMock.expect(mockDevice.executeShellCommand(EasyMock.eq("settings delete global angle_gl_driver_selection_pkgs"))).
+            andReturn("").once();
+        EasyMock.expect(mockDevice.executeShellCommand(EasyMock.eq("settings delete global angle_gl_driver_selection_values"))).
+            andReturn("").once();
+        EasyMock.expect(mockDevice.executeShellCommand(EasyMock.eq("settings delete global angle_gl_driver_selection_pkgs"))).
+            andReturn("").once();
+        EasyMock.expect(mockDevice.executeShellCommand(EasyMock.eq("settings delete global angle_gl_driver_selection_values"))).
+            andReturn("").once();
+
         for (int i = 0; i < testPaths.length; i++) {
             mockListener.testStarted(EasyMock.eq(testIds[i]));
             EasyMock.expectLastCall().once();
@@ -535,7 +568,7 @@
             EasyMock.expectLastCall().once();
         }
 
-        mockListener.testRunEnded(EasyMock.anyLong(), EasyMock.<Map<String, String>>notNull());
+        mockListener.testRunEnded(EasyMock.anyLong(), EasyMock.<HashMap<String, Metric>>notNull());
         EasyMock.expectLastCall().once();
 
         EasyMock.replay(mockDevice, mockIDevice);
@@ -605,6 +638,16 @@
         mockListener.testRunStarted(getTestId(deqpTest), expectedTests.size());
         EasyMock.expectLastCall().once();
 
+        // Expect the calls twice: setupTestEnvironment() and teardownTestEnvironment()
+        EasyMock.expect(mockDevice.executeShellCommand(EasyMock.eq("settings delete global angle_gl_driver_selection_pkgs"))).
+            andReturn("").once();
+        EasyMock.expect(mockDevice.executeShellCommand(EasyMock.eq("settings delete global angle_gl_driver_selection_values"))).
+            andReturn("").once();
+        EasyMock.expect(mockDevice.executeShellCommand(EasyMock.eq("settings delete global angle_gl_driver_selection_pkgs"))).
+            andReturn("").once();
+        EasyMock.expect(mockDevice.executeShellCommand(EasyMock.eq("settings delete global angle_gl_driver_selection_values"))).
+            andReturn("").once();
+
         IDevice mockIDevice = EasyMock.createMock(IDevice.class);
         if (thereAreTests)
         {
@@ -624,7 +667,7 @@
             }
         }
 
-        mockListener.testRunEnded(EasyMock.anyLong(), EasyMock.<Map<String, String>>notNull());
+        mockListener.testRunEnded(EasyMock.anyLong(), EasyMock.<HashMap<String, Metric>>notNull());
         EasyMock.expectLastCall().once();
 
         EasyMock.replay(mockDevice, mockIDevice);
@@ -767,7 +810,7 @@
                 = EasyMock.createStrictMock(ITestInvocationListener.class);
         mockListener.testRunStarted(getTestId(deqpTest), 0);
         EasyMock.expectLastCall().once();
-        mockListener.testRunEnded(EasyMock.anyLong(), EasyMock.<Map<String, String>>notNull());
+        mockListener.testRunEnded(EasyMock.anyLong(), EasyMock.<HashMap<String, Metric>>notNull());
         EasyMock.expectLastCall().once();
 
         EasyMock.replay(mockListener);
@@ -835,7 +878,7 @@
                 + "--deqp-surface-type=window "
                 + "--deqp-log-images=disable "
                 + "--deqp-watchdog=enable",
-                CASE_LIST_FILE_NAME);
+                APP_DIR + CASE_LIST_FILE_NAME);
 
         // first try
         runInstrumentationLineAndAnswer(mockDevice, mockIDevice,
@@ -854,6 +897,16 @@
         mockListener.testRunStarted(getTestId(deqpTest), testPaths.length);
         EasyMock.expectLastCall().once();
 
+        // Expect the calls twice: setupTestEnvironment() and teardownTestEnvironment()
+        EasyMock.expect(mockDevice.executeShellCommand(EasyMock.eq("settings delete global angle_gl_driver_selection_pkgs"))).
+            andReturn("").once();
+        EasyMock.expect(mockDevice.executeShellCommand(EasyMock.eq("settings delete global angle_gl_driver_selection_values"))).
+            andReturn("").once();
+        EasyMock.expect(mockDevice.executeShellCommand(EasyMock.eq("settings delete global angle_gl_driver_selection_pkgs"))).
+            andReturn("").once();
+        EasyMock.expect(mockDevice.executeShellCommand(EasyMock.eq("settings delete global angle_gl_driver_selection_values"))).
+            andReturn("").once();
+
         for (int i = 0; i < testPaths.length; i++) {
             mockListener.testStarted(EasyMock.eq(testIds[i]));
             EasyMock.expectLastCall().once();
@@ -868,7 +921,7 @@
             EasyMock.expectLastCall().once();
         }
 
-        mockListener.testRunEnded(EasyMock.anyLong(), EasyMock.<Map<String, String>>notNull());
+        mockListener.testRunEnded(EasyMock.anyLong(), EasyMock.<HashMap<String, Metric>>notNull());
         EasyMock.expectLastCall().once();
 
         EasyMock.replay(mockDevice, mockIDevice);
@@ -910,8 +963,12 @@
 
         mockListener.testRunStarted(getTestId(deqpTest), 1);
         EasyMock.expectLastCall().once();
+        EasyMock.expect(mockDevice.executeShellCommand(EasyMock.eq("settings delete global angle_gl_driver_selection_pkgs"))).
+            andReturn("").once();
+        EasyMock.expect(mockDevice.executeShellCommand(EasyMock.eq("settings delete global angle_gl_driver_selection_values"))).
+            andReturn("").once();
 
-        mockListener.testRunEnded(EasyMock.anyLong(), EasyMock.<Map<String, String>>notNull());
+        mockListener.testRunEnded(EasyMock.anyLong(), EasyMock.<HashMap<String, Metric>>notNull());
         EasyMock.expectLastCall().once();
 
         EasyMock.replay(mockDevice);
@@ -953,7 +1010,11 @@
         mockListener.testRunStarted(getTestId(deqpTest), 1);
         EasyMock.expectLastCall().once();
 
-        mockListener.testRunEnded(EasyMock.anyLong(), EasyMock.<Map<String, String>>notNull());
+        EasyMock.expect(mockDevice.executeShellCommand(EasyMock.eq("settings delete global angle_gl_driver_selection_pkgs"))).
+            andReturn("").once();
+        EasyMock.expect(mockDevice.executeShellCommand(EasyMock.eq("settings delete global angle_gl_driver_selection_values"))).
+            andReturn("").once();
+        mockListener.testRunEnded(EasyMock.anyLong(), EasyMock.<HashMap<String, Metric>>notNull());
         EasyMock.expectLastCall().once();
 
         EasyMock.replay(mockDevice);
@@ -1046,7 +1107,7 @@
                     + "--deqp-surface-type=window "
                     + "--deqp-log-images=disable "
                     + "--deqp-watchdog=enable",
-                    CASE_LIST_FILE_NAME, rotation);
+                    APP_DIR + CASE_LIST_FILE_NAME, rotation);
 
             runInstrumentationLineAndAnswer(mockDevice, mockIDevice, testTrie, commandLine,
                     output);
@@ -1055,13 +1116,23 @@
         mockListener.testRunStarted(getTestId(deqpTest), 1);
         EasyMock.expectLastCall().once();
 
+        // Expect the calls twice: setupTestEnvironment() and teardownTestEnvironment()
+        EasyMock.expect(mockDevice.executeShellCommand(EasyMock.eq("settings delete global angle_gl_driver_selection_pkgs"))).
+            andReturn("").once();
+        EasyMock.expect(mockDevice.executeShellCommand(EasyMock.eq("settings delete global angle_gl_driver_selection_values"))).
+            andReturn("").once();
+        EasyMock.expect(mockDevice.executeShellCommand(EasyMock.eq("settings delete global angle_gl_driver_selection_pkgs"))).
+            andReturn("").once();
+        EasyMock.expect(mockDevice.executeShellCommand(EasyMock.eq("settings delete global angle_gl_driver_selection_values"))).
+            andReturn("").once();
+
         mockListener.testStarted(EasyMock.eq(testId));
         EasyMock.expectLastCall().once();
 
         mockListener.testEnded(EasyMock.eq(testId), EasyMock.<HashMap<String, Metric>>notNull());
         EasyMock.expectLastCall().once();
 
-        mockListener.testRunEnded(EasyMock.anyLong(), EasyMock.<Map<String, String>>notNull());
+        mockListener.testRunEnded(EasyMock.anyLong(), EasyMock.<HashMap<String, Metric>>notNull());
         EasyMock.expectLastCall().once();
 
         EasyMock.replay(mockDevice, mockIDevice);
@@ -1264,13 +1335,23 @@
         mockListener.testRunStarted(getTestId(deqpTest), 1);
         EasyMock.expectLastCall().once();
 
+        // Expect the calls twice: setupTestEnvironment() and teardownTestEnvironment()
+        EasyMock.expect(mockDevice.executeShellCommand(EasyMock.eq("settings delete global angle_gl_driver_selection_pkgs"))).
+            andReturn("").once();
+        EasyMock.expect(mockDevice.executeShellCommand(EasyMock.eq("settings delete global angle_gl_driver_selection_values"))).
+            andReturn("").once();
+        EasyMock.expect(mockDevice.executeShellCommand(EasyMock.eq("settings delete global angle_gl_driver_selection_pkgs"))).
+            andReturn("").once();
+        EasyMock.expect(mockDevice.executeShellCommand(EasyMock.eq("settings delete global angle_gl_driver_selection_values"))).
+            andReturn("").once();
+
         mockListener.testStarted(EasyMock.eq(testId));
         EasyMock.expectLastCall().once();
 
         mockListener.testEnded(EasyMock.eq(testId), EasyMock.<HashMap<String, Metric>>notNull());
         EasyMock.expectLastCall().once();
 
-        mockListener.testRunEnded(EasyMock.anyLong(), EasyMock.<Map<String, String>>notNull());
+        mockListener.testRunEnded(EasyMock.anyLong(), EasyMock.<HashMap<String, Metric>>notNull());
         EasyMock.expectLastCall().once();
 
         EasyMock.replay(mockDevice);
@@ -1280,8 +1361,10 @@
         EasyMock.verify(mockDevice);
     }
 
-    public static interface RecoverableTestDevice extends ITestDevice {
-        public void recoverDevice() throws DeviceNotAvailableException;
+    /**
+     * Test interface to mock Tradefed device types.
+     */
+    public static interface RecoverableTestDevice extends ITestDevice, IManagedTestDevice {
     }
 
     private static enum RecoveryEvent {
@@ -1617,11 +1700,16 @@
                 + "--deqp-gl-minor-version=0");
 
         mockRunUtil.sleep(0);
-        EasyMock.expectLastCall().andThrow(new RunInterruptedException());
+        EasyMock.expectLastCall().andThrow(new RunInterruptedException(
+                "message", InfraErrorIdentifier.TRADEFED_SHUTTING_DOWN));
 
         mockListener.testRunStarted(getTestId(deqpTest), 1);
         EasyMock.expectLastCall().once();
-        mockListener.testRunEnded(EasyMock.anyLong(), (Map<String, String>) EasyMock.anyObject());
+        EasyMock.expect(mockDevice.executeShellCommand(EasyMock.eq("settings delete global angle_gl_driver_selection_pkgs"))).
+            andReturn("").once();
+        EasyMock.expect(mockDevice.executeShellCommand(EasyMock.eq("settings delete global angle_gl_driver_selection_values"))).
+            andReturn("").once();
+        mockListener.testRunEnded(EasyMock.anyLong(), EasyMock.<HashMap<String, Metric>>anyObject());
         EasyMock.expectLastCall().once();
 
         EasyMock.replay(mockDevice, mockIDevice);
@@ -1663,6 +1751,16 @@
             mockListener.testRunStarted(getTestId(shard), shardTests.size());
             EasyMock.expectLastCall().once();
 
+            // Expect the calls twice: setupTestEnvironment() and teardownTestEnvironment()
+            EasyMock.expect(mockDevice.executeShellCommand(EasyMock.eq("settings delete global angle_gl_driver_selection_pkgs"))).
+                andReturn("").once();
+            EasyMock.expect(mockDevice.executeShellCommand(EasyMock.eq("settings delete global angle_gl_driver_selection_values"))).
+                andReturn("").once();
+            EasyMock.expect(mockDevice.executeShellCommand(EasyMock.eq("settings delete global angle_gl_driver_selection_pkgs"))).
+                andReturn("").once();
+            EasyMock.expect(mockDevice.executeShellCommand(EasyMock.eq("settings delete global angle_gl_driver_selection_values"))).
+                andReturn("").once();
+
             expectRenderConfigQuery(mockDevice, 3, 0);
 
             String testOut = buildTestProcessOutput(shardTests);
@@ -1679,7 +1777,7 @@
                 EasyMock.expectLastCall().once();
             }
 
-            mockListener.testRunEnded(EasyMock.anyLong(), EasyMock.<Map<String, String>>notNull());
+            mockListener.testRunEnded(EasyMock.anyLong(), EasyMock.<HashMap<String, Metric>>notNull());
             EasyMock.expectLastCall().once();
 
             EasyMock.replay(mockDevice, mockIDevice);
@@ -1806,7 +1904,7 @@
                 + "--deqp-surface-type=window "
                 + "--deqp-log-images=disable "
                 + "--deqp-watchdog=enable",
-                CASE_LIST_FILE_NAME);
+                APP_DIR + CASE_LIST_FILE_NAME);
 
         runInstrumentationLineAndAnswer(mockDevice, mockIDevice, testTrie, commandLine,
                 output);
@@ -1814,13 +1912,19 @@
         mockListener.testRunStarted(getTestId(deqpTest), 1);
         EasyMock.expectLastCall().once();
 
+        EasyMock.expect(mockDevice.executeShellCommand(EasyMock.eq("settings delete global angle_gl_driver_selection_pkgs"))).
+            andReturn("").once();
+        EasyMock.expect(mockDevice.executeShellCommand(EasyMock.eq("settings delete global angle_gl_driver_selection_values"))).
+            andReturn("").once();
+
         mockListener.testStarted(EasyMock.eq(testId));
         EasyMock.expectLastCall().once();
 
         mockListener.testFailed(EasyMock.eq(testId), EasyMock.<String>notNull());
-        EasyMock.expectLastCall().andThrow(new RunInterruptedException());
+        EasyMock.expectLastCall().andThrow(new RunInterruptedException(
+                "message", InfraErrorIdentifier.TRADEFED_SHUTTING_DOWN));
 
-        mockListener.testRunEnded(EasyMock.anyLong(), (Map<String, String>) EasyMock.anyObject());
+        mockListener.testRunEnded(EasyMock.anyLong(), EasyMock.<HashMap<String, Metric>>anyObject());
         EasyMock.expectLastCall().once();
         EasyMock.replay(mockDevice, mockIDevice);
         EasyMock.replay(mockListener);
@@ -1963,13 +2067,23 @@
                 + "--deqp-surface-type=window "
                 + "--deqp-log-images=disable "
                 + "--deqp-watchdog=enable",
-                CASE_LIST_FILE_NAME);
+                APP_DIR + CASE_LIST_FILE_NAME);
 
         runInstrumentationLineAndAnswer(mockDevice, mockIDevice, testTrie, commandLine, output);
 
         mockListener.testRunStarted(getTestId(deqpTest), testPaths.length);
         EasyMock.expectLastCall().once();
 
+        // Expect the calls twice: setupTestEnvironment() and teardownTestEnvironment()
+        EasyMock.expect(mockDevice.executeShellCommand(EasyMock.eq("settings delete global angle_gl_driver_selection_pkgs"))).
+            andReturn("").once();
+        EasyMock.expect(mockDevice.executeShellCommand(EasyMock.eq("settings delete global angle_gl_driver_selection_values"))).
+            andReturn("").once();
+        EasyMock.expect(mockDevice.executeShellCommand(EasyMock.eq("settings delete global angle_gl_driver_selection_pkgs"))).
+            andReturn("").once();
+        EasyMock.expect(mockDevice.executeShellCommand(EasyMock.eq("settings delete global angle_gl_driver_selection_values"))).
+            andReturn("").once();
+
         for (int i = 0; i < testPaths.length; i++) {
             mockListener.testStarted(EasyMock.eq(testIds[i]));
             EasyMock.expectLastCall().once();
@@ -1980,7 +2094,7 @@
             EasyMock.expectLastCall().once();
         }
 
-        mockListener.testRunEnded(EasyMock.anyLong(), EasyMock.<Map<String, String>>notNull());
+        mockListener.testRunEnded(EasyMock.anyLong(), EasyMock.<HashMap<String, Metric>>notNull());
         EasyMock.expectLastCall().once();
 
         EasyMock.replay(mockDevice, mockIDevice);
@@ -2047,30 +2161,30 @@
             + "--deqp-surface-type=window "
             + "--deqp-log-images=disable "
             + "--deqp-watchdog=enable",
-            CASE_LIST_FILE_NAME);
+            APP_DIR + CASE_LIST_FILE_NAME);
         runInstrumentationLineAndAnswer(mockDevice, mockIDevice, null, cmd, output);
     }
 
     private void runInstrumentationLineAndAnswer(ITestDevice mockDevice, IDevice mockIDevice,
             final String testTrie, final String cmd, final String output) throws Exception {
-        EasyMock.expect(mockDevice.executeShellCommand(EasyMock.eq("rm " + CASE_LIST_FILE_NAME)))
+        EasyMock.expect(mockDevice.executeShellCommand(EasyMock.eq("rm " + APP_DIR + CASE_LIST_FILE_NAME)))
                 .andReturn("").once();
 
-        EasyMock.expect(mockDevice.executeShellCommand(EasyMock.eq("rm " + LOG_FILE_NAME)))
+        EasyMock.expect(mockDevice.executeShellCommand(EasyMock.eq("rm " + APP_DIR + LOG_FILE_NAME)))
                 .andReturn("").once();
 
         if (testTrie == null) {
-            mockDevice.pushString((String)EasyMock.anyObject(), EasyMock.eq(CASE_LIST_FILE_NAME));
+            mockDevice.pushString((String)EasyMock.anyObject(), EasyMock.eq(APP_DIR + CASE_LIST_FILE_NAME));
         }
         else {
-            mockDevice.pushString(testTrie + "\n", CASE_LIST_FILE_NAME);
+            mockDevice.pushString(testTrie + "\n", APP_DIR + CASE_LIST_FILE_NAME);
         }
         EasyMock.expectLastCall().andReturn(true).once();
 
         String command = String.format(
                 "am instrument %s -w -e deqpLogFileName \"%s\" -e deqpCmdLine \"%s\" "
                     + "-e deqpLogData \"%s\" %s",
-                AbiUtils.createAbiFlag(ABI.getName()), LOG_FILE_NAME, cmd, false,
+                AbiUtils.createAbiFlag(ABI.getName()), APP_DIR + LOG_FILE_NAME, cmd, false,
                 INSTRUMENTATION_NAME);
 
         EasyMock.expect(mockDevice.getIDevice()).andReturn(mockIDevice);
diff --git a/external/fetch_sources.py b/external/fetch_sources.py
index 7933780..f5556d0 100644
--- a/external/fetch_sources.py
+++ b/external/fetch_sources.py
@@ -70,7 +70,7 @@
 		Source.clean(self)
 		self.removeArchives()
 
-	def update (self, cmdProtocol = None):
+	def update (self, cmdProtocol = None, force = False):
 		if not self.isArchiveUpToDate():
 			self.fetchAndVerifyArchive()
 
@@ -182,7 +182,7 @@
 		self.filename		= filename
 		self.checksum		= checksum
 
-	def update (self, cmdProtocol = None):
+	def update (self, cmdProtocol = None, force = False):
 		if not self.isFileUpToDate():
 			Source.clean(self)
 			self.fetchAndVerifyFile()
@@ -273,7 +273,7 @@
 		assert url != None
 		return url
 
-	def update (self, cmdProtocol = None):
+	def update (self, cmdProtocol = None, force = False):
 		fullDstPath = os.path.join(EXTERNAL_DIR, self.baseDir, self.extractDir)
 
 		url = self.selectUrl(cmdProtocol)
@@ -287,8 +287,9 @@
 				(stdout, stderr) = proc.communicate()
 				if proc.returncode == 0:
 					execute(["git", "tag", "-d",tag])
-			execute(["git", "fetch", "--tags", url, "+refs/heads/*:refs/remotes/origin/*"])
-			execute(["git", "checkout", self.revision])
+			force_arg = ['--force'] if force else []
+			execute(["git", "fetch"] + force_arg + ["--tags", url, "+refs/heads/*:refs/remotes/origin/*"])
+			execute(["git", "checkout"] + force_arg + [self.revision])
 		finally:
 			popWorkingDir()
 
@@ -316,7 +317,7 @@
 	GitRepo(
 		"https://github.com/KhronosGroup/SPIRV-Tools.git",
 		None,
-		"c91a25af13e112729be7272d58b0df25e772c3e0",
+		"e065c482c6c98ef22900822d32a21df8c5473054",
 		"spirv-tools"),
 	GitRepo(
 		"https://github.com/KhronosGroup/glslang.git",
@@ -327,7 +328,7 @@
 	GitRepo(
 		"https://github.com/KhronosGroup/SPIRV-Headers.git",
 		None,
-		"faa570afbc91ac73d594d787486bcf8f2df1ace0",
+		"449bc986ba6f4c5e10e32828783f9daef2a77644",
 		"spirv-headers"),
 	GitRepo(
 		"https://github.com/google/amber.git",
@@ -348,6 +349,8 @@
 						" Minimum python version required " + versionsForInsecureStr)
 	parser.add_argument('--protocol', dest='protocol', default=None, choices=['ssh', 'https'],
 						help="Select protocol to checkout git repositories.")
+	parser.add_argument('--force', dest='force', action='store_true', default=False,
+						help="Pass --force to git fetch and checkout commands")
 
 	args = parser.parse_args()
 
@@ -368,4 +371,4 @@
 		if args.clean:
 			pkg.clean()
 		else:
-			pkg.update(args.protocol)
+			pkg.update(args.protocol, args.force)
diff --git a/external/openglcts/README.md b/external/openglcts/README.md
index d748ffb..81665fa 100644
--- a/external/openglcts/README.md
+++ b/external/openglcts/README.md
@@ -247,7 +247,7 @@
 
 Requirements:
 - Visual Studio (2015 or newer recommended) or Windows SDK
-- CMake 2.8.x Windows native version (i.e. not Cygwin version)
+- CMake 3.10.2 Windows native version (i.e. not Cygwin version)
 - For GL/ES2/ES3.x tests: OpengGL, OpenGL ES 2 or ES 3.x libraries and headers
 
 To choose the backend build system for CMake, choose one of the following Generator Names for the
@@ -294,7 +294,7 @@
 
 Required tools:
 - Standard build utilities (make, gcc, etc.)
-- CMake 2.8.x
+- CMake 3.10.2
 - Necessary API libraries (OpenGL, GLES, EGL depending on configuration)
 
 Building ES2 or ES3.x conformance tests:
diff --git a/external/openglcts/data/mustpass/egl/aosp_mustpass/3.2.3.x/src/egl-master.txt b/external/openglcts/data/mustpass/egl/aosp_mustpass/3.2.3.x/src/egl-master.txt
index 7161f70..750e15e 100644
--- a/external/openglcts/data/mustpass/egl/aosp_mustpass/3.2.3.x/src/egl-master.txt
+++ b/external/openglcts/data/mustpass/egl/aosp_mustpass/3.2.3.x/src/egl-master.txt
@@ -3663,26 +3663,6 @@
 dEQP-EGL.functional.robustness.create_context.query_robust_access
 dEQP-EGL.functional.robustness.create_context.no_reset_notification
 dEQP-EGL.functional.robustness.create_context.lose_context_on_reset
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.reset_status.vertex
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.reset_status.fragment
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.reset_status.vertex_and_fragment
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.reset_status.compute
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.sync_status.vertex
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.sync_status.fragment
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.sync_status.vertex_and_fragment
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.sync_status.compute
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.query_status.vertex
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.query_status.fragment
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.query_status.vertex_and_fragment
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.query_status.compute
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.shared_context_status.vertex
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.shared_context_status.fragment
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.shared_context_status.vertex_and_fragment
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.shared_context_status.compute
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.recover_from_reset.vertex
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.recover_from_reset.fragment
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.recover_from_reset.vertex_and_fragment
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.recover_from_reset.compute
 dEQP-EGL.functional.robustness.reset_context.shaders.out_of_bounds.reset_status.reads.uniform_block.vertex
 dEQP-EGL.functional.robustness.reset_context.shaders.out_of_bounds.reset_status.reads.uniform_block.fragment
 dEQP-EGL.functional.robustness.reset_context.shaders.out_of_bounds.reset_status.reads.uniform_block.vertex_and_fragment
diff --git a/external/openglcts/data/mustpass/egl/aosp_mustpass/3.2.3.x/src/egl-test-issues.txt b/external/openglcts/data/mustpass/egl/aosp_mustpass/3.2.3.x/src/egl-test-issues.txt
index 53e5eaf..7ce0644 100644
--- a/external/openglcts/data/mustpass/egl/aosp_mustpass/3.2.3.x/src/egl-test-issues.txt
+++ b/external/openglcts/data/mustpass/egl/aosp_mustpass/3.2.3.x/src/egl-test-issues.txt
@@ -27,25 +27,3 @@
 # Bug: 30909609
 dEQP-EGL.functional.image.modify.tex_rgba4_renderbuffer_clear_color
 dEQP-EGL.functional.image.modify.renderbuffer_rgba4_renderbuffer_clear_color
-
-#VK-GL-CTS 257
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.reset_status.vertex
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.reset_status.fragment
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.reset_status.vertex_and_fragment
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.reset_status.compute
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.sync_status.vertex
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.sync_status.fragment
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.sync_status.vertex_and_fragment
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.sync_status.compute
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.query_status.vertex
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.query_status.fragment
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.query_status.vertex_and_fragment
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.query_status.compute
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.shared_context_status.vertex
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.shared_context_status.fragment
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.shared_context_status.vertex_and_fragment
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.shared_context_status.compute
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.recover_from_reset.vertex
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.recover_from_reset.fragment
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.recover_from_reset.vertex_and_fragment
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.recover_from_reset.compute
diff --git a/external/openglcts/data/mustpass/egl/aosp_mustpass/3.2.4.x/src/egl-master.txt b/external/openglcts/data/mustpass/egl/aosp_mustpass/3.2.4.x/src/egl-master.txt
index 88611fc..e0d205c 100644
--- a/external/openglcts/data/mustpass/egl/aosp_mustpass/3.2.4.x/src/egl-master.txt
+++ b/external/openglcts/data/mustpass/egl/aosp_mustpass/3.2.4.x/src/egl-master.txt
@@ -3675,26 +3675,6 @@
 dEQP-EGL.functional.robustness.create_context.query_robust_access
 dEQP-EGL.functional.robustness.create_context.no_reset_notification
 dEQP-EGL.functional.robustness.create_context.lose_context_on_reset
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.reset_status.vertex
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.reset_status.fragment
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.reset_status.vertex_and_fragment
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.reset_status.compute
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.sync_status.vertex
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.sync_status.fragment
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.sync_status.vertex_and_fragment
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.sync_status.compute
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.query_status.vertex
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.query_status.fragment
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.query_status.vertex_and_fragment
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.query_status.compute
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.shared_context_status.vertex
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.shared_context_status.fragment
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.shared_context_status.vertex_and_fragment
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.shared_context_status.compute
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.recover_from_reset.vertex
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.recover_from_reset.fragment
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.recover_from_reset.vertex_and_fragment
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.recover_from_reset.compute
 dEQP-EGL.functional.robustness.reset_context.shaders.out_of_bounds.reset_status.reads.uniform_block.vertex
 dEQP-EGL.functional.robustness.reset_context.shaders.out_of_bounds.reset_status.reads.uniform_block.fragment
 dEQP-EGL.functional.robustness.reset_context.shaders.out_of_bounds.reset_status.reads.uniform_block.vertex_and_fragment
diff --git a/external/openglcts/data/mustpass/egl/aosp_mustpass/3.2.4.x/src/egl-test-issues.txt b/external/openglcts/data/mustpass/egl/aosp_mustpass/3.2.4.x/src/egl-test-issues.txt
index 53e5eaf..7ce0644 100644
--- a/external/openglcts/data/mustpass/egl/aosp_mustpass/3.2.4.x/src/egl-test-issues.txt
+++ b/external/openglcts/data/mustpass/egl/aosp_mustpass/3.2.4.x/src/egl-test-issues.txt
@@ -27,25 +27,3 @@
 # Bug: 30909609
 dEQP-EGL.functional.image.modify.tex_rgba4_renderbuffer_clear_color
 dEQP-EGL.functional.image.modify.renderbuffer_rgba4_renderbuffer_clear_color
-
-#VK-GL-CTS 257
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.reset_status.vertex
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.reset_status.fragment
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.reset_status.vertex_and_fragment
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.reset_status.compute
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.sync_status.vertex
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.sync_status.fragment
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.sync_status.vertex_and_fragment
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.sync_status.compute
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.query_status.vertex
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.query_status.fragment
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.query_status.vertex_and_fragment
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.query_status.compute
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.shared_context_status.vertex
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.shared_context_status.fragment
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.shared_context_status.vertex_and_fragment
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.shared_context_status.compute
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.recover_from_reset.vertex
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.recover_from_reset.fragment
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.recover_from_reset.vertex_and_fragment
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.recover_from_reset.compute
diff --git a/external/openglcts/data/mustpass/egl/aosp_mustpass/3.2.5.x/src/egl-test-issues.txt b/external/openglcts/data/mustpass/egl/aosp_mustpass/3.2.5.x/src/egl-test-issues.txt
index 53e5eaf..7ce0644 100644
--- a/external/openglcts/data/mustpass/egl/aosp_mustpass/3.2.5.x/src/egl-test-issues.txt
+++ b/external/openglcts/data/mustpass/egl/aosp_mustpass/3.2.5.x/src/egl-test-issues.txt
@@ -27,25 +27,3 @@
 # Bug: 30909609
 dEQP-EGL.functional.image.modify.tex_rgba4_renderbuffer_clear_color
 dEQP-EGL.functional.image.modify.renderbuffer_rgba4_renderbuffer_clear_color
-
-#VK-GL-CTS 257
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.reset_status.vertex
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.reset_status.fragment
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.reset_status.vertex_and_fragment
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.reset_status.compute
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.sync_status.vertex
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.sync_status.fragment
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.sync_status.vertex_and_fragment
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.sync_status.compute
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.query_status.vertex
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.query_status.fragment
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.query_status.vertex_and_fragment
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.query_status.compute
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.shared_context_status.vertex
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.shared_context_status.fragment
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.shared_context_status.vertex_and_fragment
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.shared_context_status.compute
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.recover_from_reset.vertex
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.recover_from_reset.fragment
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.recover_from_reset.vertex_and_fragment
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.recover_from_reset.compute
diff --git a/external/openglcts/data/mustpass/egl/aosp_mustpass/3.2.6.x/egl-master.txt b/external/openglcts/data/mustpass/egl/aosp_mustpass/3.2.6.x/egl-master.txt
index 6d0c0a1..837891c 100644
--- a/external/openglcts/data/mustpass/egl/aosp_mustpass/3.2.6.x/egl-master.txt
+++ b/external/openglcts/data/mustpass/egl/aosp_mustpass/3.2.6.x/egl-master.txt
@@ -3654,26 +3654,6 @@
 dEQP-EGL.functional.robustness.create_context.query_robust_access
 dEQP-EGL.functional.robustness.create_context.no_reset_notification
 dEQP-EGL.functional.robustness.create_context.lose_context_on_reset
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.reset_status.vertex
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.reset_status.fragment
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.reset_status.vertex_and_fragment
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.reset_status.compute
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.sync_status.vertex
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.sync_status.fragment
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.sync_status.vertex_and_fragment
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.sync_status.compute
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.query_status.vertex
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.query_status.fragment
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.query_status.vertex_and_fragment
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.query_status.compute
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.shared_context_status.vertex
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.shared_context_status.fragment
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.shared_context_status.vertex_and_fragment
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.shared_context_status.compute
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.recover_from_reset.vertex
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.recover_from_reset.fragment
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.recover_from_reset.vertex_and_fragment
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.recover_from_reset.compute
 dEQP-EGL.functional.robustness.reset_context.shaders.out_of_bounds.reset_status.reads.uniform_block.vertex
 dEQP-EGL.functional.robustness.reset_context.shaders.out_of_bounds.reset_status.reads.uniform_block.fragment
 dEQP-EGL.functional.robustness.reset_context.shaders.out_of_bounds.reset_status.reads.uniform_block.vertex_and_fragment
diff --git a/external/openglcts/data/mustpass/egl/aosp_mustpass/master/egl-master.txt b/external/openglcts/data/mustpass/egl/aosp_mustpass/master/egl-master.txt
index 6d0c0a1..837891c 100644
--- a/external/openglcts/data/mustpass/egl/aosp_mustpass/master/egl-master.txt
+++ b/external/openglcts/data/mustpass/egl/aosp_mustpass/master/egl-master.txt
@@ -3654,26 +3654,6 @@
 dEQP-EGL.functional.robustness.create_context.query_robust_access
 dEQP-EGL.functional.robustness.create_context.no_reset_notification
 dEQP-EGL.functional.robustness.create_context.lose_context_on_reset
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.reset_status.vertex
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.reset_status.fragment
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.reset_status.vertex_and_fragment
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.reset_status.compute
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.sync_status.vertex
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.sync_status.fragment
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.sync_status.vertex_and_fragment
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.sync_status.compute
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.query_status.vertex
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.query_status.fragment
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.query_status.vertex_and_fragment
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.query_status.compute
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.shared_context_status.vertex
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.shared_context_status.fragment
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.shared_context_status.vertex_and_fragment
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.shared_context_status.compute
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.recover_from_reset.vertex
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.recover_from_reset.fragment
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.recover_from_reset.vertex_and_fragment
-dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.recover_from_reset.compute
 dEQP-EGL.functional.robustness.reset_context.shaders.out_of_bounds.reset_status.reads.uniform_block.vertex
 dEQP-EGL.functional.robustness.reset_context.shaders.out_of_bounds.reset_status.reads.uniform_block.fragment
 dEQP-EGL.functional.robustness.reset_context.shaders.out_of_bounds.reset_status.reads.uniform_block.vertex_and_fragment
diff --git a/external/openglcts/data/mustpass/egl/aosp_mustpass/master/src/egl-driver-issues.txt b/external/openglcts/data/mustpass/egl/aosp_mustpass/master/src/egl-driver-issues.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/external/openglcts/data/mustpass/egl/aosp_mustpass/master/src/egl-driver-issues.txt
diff --git a/external/openglcts/data/mustpass/gl/khronos_mustpass/4.6.1.x/gl30-master.txt b/external/openglcts/data/mustpass/gl/khronos_mustpass/4.6.1.x/gl30-master.txt
index 232f2c1..68db298 100644
--- a/external/openglcts/data/mustpass/gl/khronos_mustpass/4.6.1.x/gl30-master.txt
+++ b/external/openglcts/data/mustpass/gl/khronos_mustpass/4.6.1.x/gl30-master.txt
@@ -192,6 +192,654 @@
 KHR-GL30.texture_repeat_mode.depth24_stencil8_11x131_2_mirrored_repeat
 KHR-GL30.shaders30.declarations.declarations.redeclare_gl_FragColor
 KHR-GL30.shaders30.declarations.declarations.redeclare_gl_FragData
+KHR-GL30.shaders30.glsl_constructors.vec2_from_mat2_vs
+KHR-GL30.shaders30.glsl_constructors.vec2_from_mat2_fs
+KHR-GL30.shaders30.glsl_constructors.vec2_from_mat2_mat2_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.vec2_from_mat2_mat2_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.vec2_from_mat2x3_vs
+KHR-GL30.shaders30.glsl_constructors.vec2_from_mat2x3_fs
+KHR-GL30.shaders30.glsl_constructors.vec2_from_mat2x3_mat2x3_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.vec2_from_mat2x3_mat2x3_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.vec2_from_mat2x4_vs
+KHR-GL30.shaders30.glsl_constructors.vec2_from_mat2x4_fs
+KHR-GL30.shaders30.glsl_constructors.vec2_from_mat2x4_mat2x4_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.vec2_from_mat2x4_mat2x4_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.vec2_from_mat3_vs
+KHR-GL30.shaders30.glsl_constructors.vec2_from_mat3_fs
+KHR-GL30.shaders30.glsl_constructors.vec2_from_mat3_mat3_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.vec2_from_mat3_mat3_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.vec2_from_mat3x2_vs
+KHR-GL30.shaders30.glsl_constructors.vec2_from_mat3x2_fs
+KHR-GL30.shaders30.glsl_constructors.vec2_from_mat3x2_mat3x2_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.vec2_from_mat3x2_mat3x2_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.vec2_from_mat3x4_vs
+KHR-GL30.shaders30.glsl_constructors.vec2_from_mat3x4_fs
+KHR-GL30.shaders30.glsl_constructors.vec2_from_mat3x4_mat3x4_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.vec2_from_mat3x4_mat3x4_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.vec2_from_mat4_vs
+KHR-GL30.shaders30.glsl_constructors.vec2_from_mat4_fs
+KHR-GL30.shaders30.glsl_constructors.vec2_from_mat4_mat4_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.vec2_from_mat4_mat4_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.vec2_from_mat4x2_vs
+KHR-GL30.shaders30.glsl_constructors.vec2_from_mat4x2_fs
+KHR-GL30.shaders30.glsl_constructors.vec2_from_mat4x2_mat4x2_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.vec2_from_mat4x2_mat4x2_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.vec2_from_mat4x3_vs
+KHR-GL30.shaders30.glsl_constructors.vec2_from_mat4x3_fs
+KHR-GL30.shaders30.glsl_constructors.vec2_from_mat4x3_mat4x3_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.vec2_from_mat4x3_mat4x3_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.vec2_from_float_mat2_vs
+KHR-GL30.shaders30.glsl_constructors.vec2_from_float_mat2_fs
+KHR-GL30.shaders30.glsl_constructors.vec2_from_float_mat2_float_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.vec2_from_float_mat2_float_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.vec2_from_float_mat2x3_vs
+KHR-GL30.shaders30.glsl_constructors.vec2_from_float_mat2x3_fs
+KHR-GL30.shaders30.glsl_constructors.vec2_from_float_mat2x3_float_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.vec2_from_float_mat2x3_float_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.vec2_from_float_mat2x4_vs
+KHR-GL30.shaders30.glsl_constructors.vec2_from_float_mat2x4_fs
+KHR-GL30.shaders30.glsl_constructors.vec2_from_float_mat2x4_float_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.vec2_from_float_mat2x4_float_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.vec2_from_float_mat3_vs
+KHR-GL30.shaders30.glsl_constructors.vec2_from_float_mat3_fs
+KHR-GL30.shaders30.glsl_constructors.vec2_from_float_mat3_float_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.vec2_from_float_mat3_float_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.vec2_from_float_mat3x2_vs
+KHR-GL30.shaders30.glsl_constructors.vec2_from_float_mat3x2_fs
+KHR-GL30.shaders30.glsl_constructors.vec2_from_float_mat3x2_float_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.vec2_from_float_mat3x2_float_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.vec2_from_float_mat3x4_vs
+KHR-GL30.shaders30.glsl_constructors.vec2_from_float_mat3x4_fs
+KHR-GL30.shaders30.glsl_constructors.vec2_from_float_mat3x4_float_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.vec2_from_float_mat3x4_float_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.vec2_from_float_mat4_vs
+KHR-GL30.shaders30.glsl_constructors.vec2_from_float_mat4_fs
+KHR-GL30.shaders30.glsl_constructors.vec2_from_float_mat4_float_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.vec2_from_float_mat4_float_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.vec2_from_float_mat4x2_vs
+KHR-GL30.shaders30.glsl_constructors.vec2_from_float_mat4x2_fs
+KHR-GL30.shaders30.glsl_constructors.vec2_from_float_mat4x2_float_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.vec2_from_float_mat4x2_float_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.vec2_from_float_mat4x3_vs
+KHR-GL30.shaders30.glsl_constructors.vec2_from_float_mat4x3_fs
+KHR-GL30.shaders30.glsl_constructors.vec2_from_float_mat4x3_float_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.vec2_from_float_mat4x3_float_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.vec3_from_mat2_vs
+KHR-GL30.shaders30.glsl_constructors.vec3_from_mat2_fs
+KHR-GL30.shaders30.glsl_constructors.vec3_from_mat2_mat2_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.vec3_from_mat2_mat2_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.vec3_from_mat2x3_vs
+KHR-GL30.shaders30.glsl_constructors.vec3_from_mat2x3_fs
+KHR-GL30.shaders30.glsl_constructors.vec3_from_mat2x3_mat2x3_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.vec3_from_mat2x3_mat2x3_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.vec3_from_mat2x4_vs
+KHR-GL30.shaders30.glsl_constructors.vec3_from_mat2x4_fs
+KHR-GL30.shaders30.glsl_constructors.vec3_from_mat2x4_mat2x4_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.vec3_from_mat2x4_mat2x4_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.vec3_from_mat3_vs
+KHR-GL30.shaders30.glsl_constructors.vec3_from_mat3_fs
+KHR-GL30.shaders30.glsl_constructors.vec3_from_mat3_mat3_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.vec3_from_mat3_mat3_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.vec3_from_mat3x2_vs
+KHR-GL30.shaders30.glsl_constructors.vec3_from_mat3x2_fs
+KHR-GL30.shaders30.glsl_constructors.vec3_from_mat3x2_mat3x2_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.vec3_from_mat3x2_mat3x2_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.vec3_from_mat3x4_vs
+KHR-GL30.shaders30.glsl_constructors.vec3_from_mat3x4_fs
+KHR-GL30.shaders30.glsl_constructors.vec3_from_mat3x4_mat3x4_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.vec3_from_mat3x4_mat3x4_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.vec3_from_mat4_vs
+KHR-GL30.shaders30.glsl_constructors.vec3_from_mat4_fs
+KHR-GL30.shaders30.glsl_constructors.vec3_from_mat4_mat4_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.vec3_from_mat4_mat4_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.vec3_from_mat4x2_vs
+KHR-GL30.shaders30.glsl_constructors.vec3_from_mat4x2_fs
+KHR-GL30.shaders30.glsl_constructors.vec3_from_mat4x2_mat4x2_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.vec3_from_mat4x2_mat4x2_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.vec3_from_mat4x3_vs
+KHR-GL30.shaders30.glsl_constructors.vec3_from_mat4x3_fs
+KHR-GL30.shaders30.glsl_constructors.vec3_from_mat4x3_mat4x3_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.vec3_from_mat4x3_mat4x3_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.vec3_from_float_mat2_vs
+KHR-GL30.shaders30.glsl_constructors.vec3_from_float_mat2_fs
+KHR-GL30.shaders30.glsl_constructors.vec3_from_float_mat2_float_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.vec3_from_float_mat2_float_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.vec3_from_float_mat2x3_vs
+KHR-GL30.shaders30.glsl_constructors.vec3_from_float_mat2x3_fs
+KHR-GL30.shaders30.glsl_constructors.vec3_from_float_mat2x3_float_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.vec3_from_float_mat2x3_float_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.vec3_from_float_mat2x4_vs
+KHR-GL30.shaders30.glsl_constructors.vec3_from_float_mat2x4_fs
+KHR-GL30.shaders30.glsl_constructors.vec3_from_float_mat2x4_float_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.vec3_from_float_mat2x4_float_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.vec3_from_float_mat3_vs
+KHR-GL30.shaders30.glsl_constructors.vec3_from_float_mat3_fs
+KHR-GL30.shaders30.glsl_constructors.vec3_from_float_mat3_float_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.vec3_from_float_mat3_float_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.vec3_from_float_mat3x2_vs
+KHR-GL30.shaders30.glsl_constructors.vec3_from_float_mat3x2_fs
+KHR-GL30.shaders30.glsl_constructors.vec3_from_float_mat3x2_float_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.vec3_from_float_mat3x2_float_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.vec3_from_float_mat3x4_vs
+KHR-GL30.shaders30.glsl_constructors.vec3_from_float_mat3x4_fs
+KHR-GL30.shaders30.glsl_constructors.vec3_from_float_mat3x4_float_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.vec3_from_float_mat3x4_float_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.vec3_from_float_mat4_vs
+KHR-GL30.shaders30.glsl_constructors.vec3_from_float_mat4_fs
+KHR-GL30.shaders30.glsl_constructors.vec3_from_float_mat4_float_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.vec3_from_float_mat4_float_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.vec3_from_float_mat4x2_vs
+KHR-GL30.shaders30.glsl_constructors.vec3_from_float_mat4x2_fs
+KHR-GL30.shaders30.glsl_constructors.vec3_from_float_mat4x2_float_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.vec3_from_float_mat4x2_float_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.vec3_from_float_mat4x3_vs
+KHR-GL30.shaders30.glsl_constructors.vec3_from_float_mat4x3_fs
+KHR-GL30.shaders30.glsl_constructors.vec3_from_float_mat4x3_float_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.vec3_from_float_mat4x3_float_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.vec4_from_mat2_vs
+KHR-GL30.shaders30.glsl_constructors.vec4_from_mat2_fs
+KHR-GL30.shaders30.glsl_constructors.vec4_from_mat2_mat2_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.vec4_from_mat2_mat2_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.vec4_from_mat2x3_vs
+KHR-GL30.shaders30.glsl_constructors.vec4_from_mat2x3_fs
+KHR-GL30.shaders30.glsl_constructors.vec4_from_mat2x3_mat2x3_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.vec4_from_mat2x3_mat2x3_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.vec4_from_mat2x4_vs
+KHR-GL30.shaders30.glsl_constructors.vec4_from_mat2x4_fs
+KHR-GL30.shaders30.glsl_constructors.vec4_from_mat2x4_mat2x4_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.vec4_from_mat2x4_mat2x4_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.vec4_from_mat3_vs
+KHR-GL30.shaders30.glsl_constructors.vec4_from_mat3_fs
+KHR-GL30.shaders30.glsl_constructors.vec4_from_mat3_mat3_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.vec4_from_mat3_mat3_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.vec4_from_mat3x2_vs
+KHR-GL30.shaders30.glsl_constructors.vec4_from_mat3x2_fs
+KHR-GL30.shaders30.glsl_constructors.vec4_from_mat3x2_mat3x2_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.vec4_from_mat3x2_mat3x2_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.vec4_from_mat3x4_vs
+KHR-GL30.shaders30.glsl_constructors.vec4_from_mat3x4_fs
+KHR-GL30.shaders30.glsl_constructors.vec4_from_mat3x4_mat3x4_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.vec4_from_mat3x4_mat3x4_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.vec4_from_mat4_vs
+KHR-GL30.shaders30.glsl_constructors.vec4_from_mat4_fs
+KHR-GL30.shaders30.glsl_constructors.vec4_from_mat4_mat4_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.vec4_from_mat4_mat4_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.vec4_from_mat4x2_vs
+KHR-GL30.shaders30.glsl_constructors.vec4_from_mat4x2_fs
+KHR-GL30.shaders30.glsl_constructors.vec4_from_mat4x2_mat4x2_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.vec4_from_mat4x2_mat4x2_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.vec4_from_mat4x3_vs
+KHR-GL30.shaders30.glsl_constructors.vec4_from_mat4x3_fs
+KHR-GL30.shaders30.glsl_constructors.vec4_from_mat4x3_mat4x3_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.vec4_from_mat4x3_mat4x3_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.vec4_from_float_mat2_vs
+KHR-GL30.shaders30.glsl_constructors.vec4_from_float_mat2_fs
+KHR-GL30.shaders30.glsl_constructors.vec4_from_float_mat2_float_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.vec4_from_float_mat2_float_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.vec4_from_float_mat2x3_vs
+KHR-GL30.shaders30.glsl_constructors.vec4_from_float_mat2x3_fs
+KHR-GL30.shaders30.glsl_constructors.vec4_from_float_mat2x3_float_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.vec4_from_float_mat2x3_float_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.vec4_from_float_mat2x4_vs
+KHR-GL30.shaders30.glsl_constructors.vec4_from_float_mat2x4_fs
+KHR-GL30.shaders30.glsl_constructors.vec4_from_float_mat2x4_float_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.vec4_from_float_mat2x4_float_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.vec4_from_float_mat3_vs
+KHR-GL30.shaders30.glsl_constructors.vec4_from_float_mat3_fs
+KHR-GL30.shaders30.glsl_constructors.vec4_from_float_mat3_float_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.vec4_from_float_mat3_float_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.vec4_from_float_mat3x2_vs
+KHR-GL30.shaders30.glsl_constructors.vec4_from_float_mat3x2_fs
+KHR-GL30.shaders30.glsl_constructors.vec4_from_float_mat3x2_float_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.vec4_from_float_mat3x2_float_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.vec4_from_float_mat3x4_vs
+KHR-GL30.shaders30.glsl_constructors.vec4_from_float_mat3x4_fs
+KHR-GL30.shaders30.glsl_constructors.vec4_from_float_mat3x4_float_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.vec4_from_float_mat3x4_float_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.vec4_from_float_mat4_vs
+KHR-GL30.shaders30.glsl_constructors.vec4_from_float_mat4_fs
+KHR-GL30.shaders30.glsl_constructors.vec4_from_float_mat4_float_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.vec4_from_float_mat4_float_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.vec4_from_float_mat4x2_vs
+KHR-GL30.shaders30.glsl_constructors.vec4_from_float_mat4x2_fs
+KHR-GL30.shaders30.glsl_constructors.vec4_from_float_mat4x2_float_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.vec4_from_float_mat4x2_float_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.vec4_from_float_mat4x3_vs
+KHR-GL30.shaders30.glsl_constructors.vec4_from_float_mat4x3_fs
+KHR-GL30.shaders30.glsl_constructors.vec4_from_float_mat4x3_float_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.vec4_from_float_mat4x3_float_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.ivec2_from_mat2_vs
+KHR-GL30.shaders30.glsl_constructors.ivec2_from_mat2_fs
+KHR-GL30.shaders30.glsl_constructors.ivec2_from_mat2_mat2_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.ivec2_from_mat2_mat2_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.ivec2_from_mat2x3_vs
+KHR-GL30.shaders30.glsl_constructors.ivec2_from_mat2x3_fs
+KHR-GL30.shaders30.glsl_constructors.ivec2_from_mat2x3_mat2x3_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.ivec2_from_mat2x3_mat2x3_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.ivec2_from_mat2x4_vs
+KHR-GL30.shaders30.glsl_constructors.ivec2_from_mat2x4_fs
+KHR-GL30.shaders30.glsl_constructors.ivec2_from_mat2x4_mat2x4_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.ivec2_from_mat2x4_mat2x4_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.ivec2_from_mat3_vs
+KHR-GL30.shaders30.glsl_constructors.ivec2_from_mat3_fs
+KHR-GL30.shaders30.glsl_constructors.ivec2_from_mat3_mat3_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.ivec2_from_mat3_mat3_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.ivec2_from_mat3x2_vs
+KHR-GL30.shaders30.glsl_constructors.ivec2_from_mat3x2_fs
+KHR-GL30.shaders30.glsl_constructors.ivec2_from_mat3x2_mat3x2_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.ivec2_from_mat3x2_mat3x2_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.ivec2_from_mat3x4_vs
+KHR-GL30.shaders30.glsl_constructors.ivec2_from_mat3x4_fs
+KHR-GL30.shaders30.glsl_constructors.ivec2_from_mat3x4_mat3x4_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.ivec2_from_mat3x4_mat3x4_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.ivec2_from_mat4_vs
+KHR-GL30.shaders30.glsl_constructors.ivec2_from_mat4_fs
+KHR-GL30.shaders30.glsl_constructors.ivec2_from_mat4_mat4_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.ivec2_from_mat4_mat4_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.ivec2_from_mat4x2_vs
+KHR-GL30.shaders30.glsl_constructors.ivec2_from_mat4x2_fs
+KHR-GL30.shaders30.glsl_constructors.ivec2_from_mat4x2_mat4x2_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.ivec2_from_mat4x2_mat4x2_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.ivec2_from_mat4x3_vs
+KHR-GL30.shaders30.glsl_constructors.ivec2_from_mat4x3_fs
+KHR-GL30.shaders30.glsl_constructors.ivec2_from_mat4x3_mat4x3_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.ivec2_from_mat4x3_mat4x3_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.ivec2_from_int_mat2_vs
+KHR-GL30.shaders30.glsl_constructors.ivec2_from_int_mat2_fs
+KHR-GL30.shaders30.glsl_constructors.ivec2_from_int_mat2_int_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.ivec2_from_int_mat2_int_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.ivec2_from_int_mat2x3_vs
+KHR-GL30.shaders30.glsl_constructors.ivec2_from_int_mat2x3_fs
+KHR-GL30.shaders30.glsl_constructors.ivec2_from_int_mat2x3_int_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.ivec2_from_int_mat2x3_int_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.ivec2_from_int_mat2x4_vs
+KHR-GL30.shaders30.glsl_constructors.ivec2_from_int_mat2x4_fs
+KHR-GL30.shaders30.glsl_constructors.ivec2_from_int_mat2x4_int_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.ivec2_from_int_mat2x4_int_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.ivec2_from_int_mat3_vs
+KHR-GL30.shaders30.glsl_constructors.ivec2_from_int_mat3_fs
+KHR-GL30.shaders30.glsl_constructors.ivec2_from_int_mat3_int_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.ivec2_from_int_mat3_int_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.ivec2_from_int_mat3x2_vs
+KHR-GL30.shaders30.glsl_constructors.ivec2_from_int_mat3x2_fs
+KHR-GL30.shaders30.glsl_constructors.ivec2_from_int_mat3x2_int_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.ivec2_from_int_mat3x2_int_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.ivec2_from_int_mat3x4_vs
+KHR-GL30.shaders30.glsl_constructors.ivec2_from_int_mat3x4_fs
+KHR-GL30.shaders30.glsl_constructors.ivec2_from_int_mat3x4_int_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.ivec2_from_int_mat3x4_int_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.ivec2_from_int_mat4_vs
+KHR-GL30.shaders30.glsl_constructors.ivec2_from_int_mat4_fs
+KHR-GL30.shaders30.glsl_constructors.ivec2_from_int_mat4_int_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.ivec2_from_int_mat4_int_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.ivec2_from_int_mat4x2_vs
+KHR-GL30.shaders30.glsl_constructors.ivec2_from_int_mat4x2_fs
+KHR-GL30.shaders30.glsl_constructors.ivec2_from_int_mat4x2_int_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.ivec2_from_int_mat4x2_int_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.ivec2_from_int_mat4x3_vs
+KHR-GL30.shaders30.glsl_constructors.ivec2_from_int_mat4x3_fs
+KHR-GL30.shaders30.glsl_constructors.ivec2_from_int_mat4x3_int_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.ivec2_from_int_mat4x3_int_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.ivec3_from_mat2_vs
+KHR-GL30.shaders30.glsl_constructors.ivec3_from_mat2_fs
+KHR-GL30.shaders30.glsl_constructors.ivec3_from_mat2_mat2_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.ivec3_from_mat2_mat2_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.ivec3_from_mat2x3_vs
+KHR-GL30.shaders30.glsl_constructors.ivec3_from_mat2x3_fs
+KHR-GL30.shaders30.glsl_constructors.ivec3_from_mat2x3_mat2x3_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.ivec3_from_mat2x3_mat2x3_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.ivec3_from_mat2x4_vs
+KHR-GL30.shaders30.glsl_constructors.ivec3_from_mat2x4_fs
+KHR-GL30.shaders30.glsl_constructors.ivec3_from_mat2x4_mat2x4_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.ivec3_from_mat2x4_mat2x4_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.ivec3_from_mat3_vs
+KHR-GL30.shaders30.glsl_constructors.ivec3_from_mat3_fs
+KHR-GL30.shaders30.glsl_constructors.ivec3_from_mat3_mat3_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.ivec3_from_mat3_mat3_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.ivec3_from_mat3x2_vs
+KHR-GL30.shaders30.glsl_constructors.ivec3_from_mat3x2_fs
+KHR-GL30.shaders30.glsl_constructors.ivec3_from_mat3x2_mat3x2_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.ivec3_from_mat3x2_mat3x2_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.ivec3_from_mat3x4_vs
+KHR-GL30.shaders30.glsl_constructors.ivec3_from_mat3x4_fs
+KHR-GL30.shaders30.glsl_constructors.ivec3_from_mat3x4_mat3x4_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.ivec3_from_mat3x4_mat3x4_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.ivec3_from_mat4_vs
+KHR-GL30.shaders30.glsl_constructors.ivec3_from_mat4_fs
+KHR-GL30.shaders30.glsl_constructors.ivec3_from_mat4_mat4_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.ivec3_from_mat4_mat4_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.ivec3_from_mat4x2_vs
+KHR-GL30.shaders30.glsl_constructors.ivec3_from_mat4x2_fs
+KHR-GL30.shaders30.glsl_constructors.ivec3_from_mat4x2_mat4x2_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.ivec3_from_mat4x2_mat4x2_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.ivec3_from_mat4x3_vs
+KHR-GL30.shaders30.glsl_constructors.ivec3_from_mat4x3_fs
+KHR-GL30.shaders30.glsl_constructors.ivec3_from_mat4x3_mat4x3_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.ivec3_from_mat4x3_mat4x3_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.ivec3_from_int_mat2_vs
+KHR-GL30.shaders30.glsl_constructors.ivec3_from_int_mat2_fs
+KHR-GL30.shaders30.glsl_constructors.ivec3_from_int_mat2_int_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.ivec3_from_int_mat2_int_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.ivec3_from_int_mat2x3_vs
+KHR-GL30.shaders30.glsl_constructors.ivec3_from_int_mat2x3_fs
+KHR-GL30.shaders30.glsl_constructors.ivec3_from_int_mat2x3_int_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.ivec3_from_int_mat2x3_int_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.ivec3_from_int_mat2x4_vs
+KHR-GL30.shaders30.glsl_constructors.ivec3_from_int_mat2x4_fs
+KHR-GL30.shaders30.glsl_constructors.ivec3_from_int_mat2x4_int_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.ivec3_from_int_mat2x4_int_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.ivec3_from_int_mat3_vs
+KHR-GL30.shaders30.glsl_constructors.ivec3_from_int_mat3_fs
+KHR-GL30.shaders30.glsl_constructors.ivec3_from_int_mat3_int_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.ivec3_from_int_mat3_int_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.ivec3_from_int_mat3x2_vs
+KHR-GL30.shaders30.glsl_constructors.ivec3_from_int_mat3x2_fs
+KHR-GL30.shaders30.glsl_constructors.ivec3_from_int_mat3x2_int_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.ivec3_from_int_mat3x2_int_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.ivec3_from_int_mat3x4_vs
+KHR-GL30.shaders30.glsl_constructors.ivec3_from_int_mat3x4_fs
+KHR-GL30.shaders30.glsl_constructors.ivec3_from_int_mat3x4_int_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.ivec3_from_int_mat3x4_int_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.ivec3_from_int_mat4_vs
+KHR-GL30.shaders30.glsl_constructors.ivec3_from_int_mat4_fs
+KHR-GL30.shaders30.glsl_constructors.ivec3_from_int_mat4_int_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.ivec3_from_int_mat4_int_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.ivec3_from_int_mat4x2_vs
+KHR-GL30.shaders30.glsl_constructors.ivec3_from_int_mat4x2_fs
+KHR-GL30.shaders30.glsl_constructors.ivec3_from_int_mat4x2_int_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.ivec3_from_int_mat4x2_int_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.ivec3_from_int_mat4x3_vs
+KHR-GL30.shaders30.glsl_constructors.ivec3_from_int_mat4x3_fs
+KHR-GL30.shaders30.glsl_constructors.ivec3_from_int_mat4x3_int_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.ivec3_from_int_mat4x3_int_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.ivec4_from_mat2_vs
+KHR-GL30.shaders30.glsl_constructors.ivec4_from_mat2_fs
+KHR-GL30.shaders30.glsl_constructors.ivec4_from_mat2_mat2_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.ivec4_from_mat2_mat2_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.ivec4_from_mat2x3_vs
+KHR-GL30.shaders30.glsl_constructors.ivec4_from_mat2x3_fs
+KHR-GL30.shaders30.glsl_constructors.ivec4_from_mat2x3_mat2x3_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.ivec4_from_mat2x3_mat2x3_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.ivec4_from_mat2x4_vs
+KHR-GL30.shaders30.glsl_constructors.ivec4_from_mat2x4_fs
+KHR-GL30.shaders30.glsl_constructors.ivec4_from_mat2x4_mat2x4_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.ivec4_from_mat2x4_mat2x4_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.ivec4_from_mat3_vs
+KHR-GL30.shaders30.glsl_constructors.ivec4_from_mat3_fs
+KHR-GL30.shaders30.glsl_constructors.ivec4_from_mat3_mat3_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.ivec4_from_mat3_mat3_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.ivec4_from_mat3x2_vs
+KHR-GL30.shaders30.glsl_constructors.ivec4_from_mat3x2_fs
+KHR-GL30.shaders30.glsl_constructors.ivec4_from_mat3x2_mat3x2_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.ivec4_from_mat3x2_mat3x2_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.ivec4_from_mat3x4_vs
+KHR-GL30.shaders30.glsl_constructors.ivec4_from_mat3x4_fs
+KHR-GL30.shaders30.glsl_constructors.ivec4_from_mat3x4_mat3x4_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.ivec4_from_mat3x4_mat3x4_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.ivec4_from_mat4_vs
+KHR-GL30.shaders30.glsl_constructors.ivec4_from_mat4_fs
+KHR-GL30.shaders30.glsl_constructors.ivec4_from_mat4_mat4_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.ivec4_from_mat4_mat4_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.ivec4_from_mat4x2_vs
+KHR-GL30.shaders30.glsl_constructors.ivec4_from_mat4x2_fs
+KHR-GL30.shaders30.glsl_constructors.ivec4_from_mat4x2_mat4x2_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.ivec4_from_mat4x2_mat4x2_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.ivec4_from_mat4x3_vs
+KHR-GL30.shaders30.glsl_constructors.ivec4_from_mat4x3_fs
+KHR-GL30.shaders30.glsl_constructors.ivec4_from_mat4x3_mat4x3_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.ivec4_from_mat4x3_mat4x3_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.ivec4_from_int_mat2_vs
+KHR-GL30.shaders30.glsl_constructors.ivec4_from_int_mat2_fs
+KHR-GL30.shaders30.glsl_constructors.ivec4_from_int_mat2_int_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.ivec4_from_int_mat2_int_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.ivec4_from_int_mat2x3_vs
+KHR-GL30.shaders30.glsl_constructors.ivec4_from_int_mat2x3_fs
+KHR-GL30.shaders30.glsl_constructors.ivec4_from_int_mat2x3_int_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.ivec4_from_int_mat2x3_int_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.ivec4_from_int_mat2x4_vs
+KHR-GL30.shaders30.glsl_constructors.ivec4_from_int_mat2x4_fs
+KHR-GL30.shaders30.glsl_constructors.ivec4_from_int_mat2x4_int_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.ivec4_from_int_mat2x4_int_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.ivec4_from_int_mat3_vs
+KHR-GL30.shaders30.glsl_constructors.ivec4_from_int_mat3_fs
+KHR-GL30.shaders30.glsl_constructors.ivec4_from_int_mat3_int_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.ivec4_from_int_mat3_int_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.ivec4_from_int_mat3x2_vs
+KHR-GL30.shaders30.glsl_constructors.ivec4_from_int_mat3x2_fs
+KHR-GL30.shaders30.glsl_constructors.ivec4_from_int_mat3x2_int_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.ivec4_from_int_mat3x2_int_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.ivec4_from_int_mat3x4_vs
+KHR-GL30.shaders30.glsl_constructors.ivec4_from_int_mat3x4_fs
+KHR-GL30.shaders30.glsl_constructors.ivec4_from_int_mat3x4_int_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.ivec4_from_int_mat3x4_int_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.ivec4_from_int_mat4_vs
+KHR-GL30.shaders30.glsl_constructors.ivec4_from_int_mat4_fs
+KHR-GL30.shaders30.glsl_constructors.ivec4_from_int_mat4_int_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.ivec4_from_int_mat4_int_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.ivec4_from_int_mat4x2_vs
+KHR-GL30.shaders30.glsl_constructors.ivec4_from_int_mat4x2_fs
+KHR-GL30.shaders30.glsl_constructors.ivec4_from_int_mat4x2_int_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.ivec4_from_int_mat4x2_int_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.ivec4_from_int_mat4x3_vs
+KHR-GL30.shaders30.glsl_constructors.ivec4_from_int_mat4x3_fs
+KHR-GL30.shaders30.glsl_constructors.ivec4_from_int_mat4x3_int_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.ivec4_from_int_mat4x3_int_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.bvec2_from_mat2_vs
+KHR-GL30.shaders30.glsl_constructors.bvec2_from_mat2_fs
+KHR-GL30.shaders30.glsl_constructors.bvec2_from_mat2_mat2_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.bvec2_from_mat2_mat2_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.bvec2_from_mat2x3_vs
+KHR-GL30.shaders30.glsl_constructors.bvec2_from_mat2x3_fs
+KHR-GL30.shaders30.glsl_constructors.bvec2_from_mat2x3_mat2x3_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.bvec2_from_mat2x3_mat2x3_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.bvec2_from_mat2x4_vs
+KHR-GL30.shaders30.glsl_constructors.bvec2_from_mat2x4_fs
+KHR-GL30.shaders30.glsl_constructors.bvec2_from_mat2x4_mat2x4_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.bvec2_from_mat2x4_mat2x4_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.bvec2_from_mat3_vs
+KHR-GL30.shaders30.glsl_constructors.bvec2_from_mat3_fs
+KHR-GL30.shaders30.glsl_constructors.bvec2_from_mat3_mat3_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.bvec2_from_mat3_mat3_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.bvec2_from_mat3x2_vs
+KHR-GL30.shaders30.glsl_constructors.bvec2_from_mat3x2_fs
+KHR-GL30.shaders30.glsl_constructors.bvec2_from_mat3x2_mat3x2_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.bvec2_from_mat3x2_mat3x2_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.bvec2_from_mat3x4_vs
+KHR-GL30.shaders30.glsl_constructors.bvec2_from_mat3x4_fs
+KHR-GL30.shaders30.glsl_constructors.bvec2_from_mat3x4_mat3x4_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.bvec2_from_mat3x4_mat3x4_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.bvec2_from_mat4_vs
+KHR-GL30.shaders30.glsl_constructors.bvec2_from_mat4_fs
+KHR-GL30.shaders30.glsl_constructors.bvec2_from_mat4_mat4_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.bvec2_from_mat4_mat4_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.bvec2_from_mat4x2_vs
+KHR-GL30.shaders30.glsl_constructors.bvec2_from_mat4x2_fs
+KHR-GL30.shaders30.glsl_constructors.bvec2_from_mat4x2_mat4x2_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.bvec2_from_mat4x2_mat4x2_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.bvec2_from_mat4x3_vs
+KHR-GL30.shaders30.glsl_constructors.bvec2_from_mat4x3_fs
+KHR-GL30.shaders30.glsl_constructors.bvec2_from_mat4x3_mat4x3_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.bvec2_from_mat4x3_mat4x3_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.bvec2_from_bool_mat2_vs
+KHR-GL30.shaders30.glsl_constructors.bvec2_from_bool_mat2_fs
+KHR-GL30.shaders30.glsl_constructors.bvec2_from_bool_mat2_bool_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.bvec2_from_bool_mat2_bool_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.bvec2_from_bool_mat2x3_vs
+KHR-GL30.shaders30.glsl_constructors.bvec2_from_bool_mat2x3_fs
+KHR-GL30.shaders30.glsl_constructors.bvec2_from_bool_mat2x3_bool_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.bvec2_from_bool_mat2x3_bool_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.bvec2_from_bool_mat2x4_vs
+KHR-GL30.shaders30.glsl_constructors.bvec2_from_bool_mat2x4_fs
+KHR-GL30.shaders30.glsl_constructors.bvec2_from_bool_mat2x4_bool_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.bvec2_from_bool_mat2x4_bool_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.bvec2_from_bool_mat3_vs
+KHR-GL30.shaders30.glsl_constructors.bvec2_from_bool_mat3_fs
+KHR-GL30.shaders30.glsl_constructors.bvec2_from_bool_mat3_bool_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.bvec2_from_bool_mat3_bool_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.bvec2_from_bool_mat3x2_vs
+KHR-GL30.shaders30.glsl_constructors.bvec2_from_bool_mat3x2_fs
+KHR-GL30.shaders30.glsl_constructors.bvec2_from_bool_mat3x2_bool_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.bvec2_from_bool_mat3x2_bool_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.bvec2_from_bool_mat3x4_vs
+KHR-GL30.shaders30.glsl_constructors.bvec2_from_bool_mat3x4_fs
+KHR-GL30.shaders30.glsl_constructors.bvec2_from_bool_mat3x4_bool_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.bvec2_from_bool_mat3x4_bool_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.bvec2_from_bool_mat4_vs
+KHR-GL30.shaders30.glsl_constructors.bvec2_from_bool_mat4_fs
+KHR-GL30.shaders30.glsl_constructors.bvec2_from_bool_mat4_bool_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.bvec2_from_bool_mat4_bool_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.bvec2_from_bool_mat4x2_vs
+KHR-GL30.shaders30.glsl_constructors.bvec2_from_bool_mat4x2_fs
+KHR-GL30.shaders30.glsl_constructors.bvec2_from_bool_mat4x2_bool_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.bvec2_from_bool_mat4x2_bool_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.bvec2_from_bool_mat4x3_vs
+KHR-GL30.shaders30.glsl_constructors.bvec2_from_bool_mat4x3_fs
+KHR-GL30.shaders30.glsl_constructors.bvec2_from_bool_mat4x3_bool_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.bvec2_from_bool_mat4x3_bool_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.bvec3_from_mat2_vs
+KHR-GL30.shaders30.glsl_constructors.bvec3_from_mat2_fs
+KHR-GL30.shaders30.glsl_constructors.bvec3_from_mat2_mat2_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.bvec3_from_mat2_mat2_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.bvec3_from_mat2x3_vs
+KHR-GL30.shaders30.glsl_constructors.bvec3_from_mat2x3_fs
+KHR-GL30.shaders30.glsl_constructors.bvec3_from_mat2x3_mat2x3_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.bvec3_from_mat2x3_mat2x3_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.bvec3_from_mat2x4_vs
+KHR-GL30.shaders30.glsl_constructors.bvec3_from_mat2x4_fs
+KHR-GL30.shaders30.glsl_constructors.bvec3_from_mat2x4_mat2x4_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.bvec3_from_mat2x4_mat2x4_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.bvec3_from_mat3_vs
+KHR-GL30.shaders30.glsl_constructors.bvec3_from_mat3_fs
+KHR-GL30.shaders30.glsl_constructors.bvec3_from_mat3_mat3_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.bvec3_from_mat3_mat3_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.bvec3_from_mat3x2_vs
+KHR-GL30.shaders30.glsl_constructors.bvec3_from_mat3x2_fs
+KHR-GL30.shaders30.glsl_constructors.bvec3_from_mat3x2_mat3x2_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.bvec3_from_mat3x2_mat3x2_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.bvec3_from_mat3x4_vs
+KHR-GL30.shaders30.glsl_constructors.bvec3_from_mat3x4_fs
+KHR-GL30.shaders30.glsl_constructors.bvec3_from_mat3x4_mat3x4_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.bvec3_from_mat3x4_mat3x4_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.bvec3_from_mat4_vs
+KHR-GL30.shaders30.glsl_constructors.bvec3_from_mat4_fs
+KHR-GL30.shaders30.glsl_constructors.bvec3_from_mat4_mat4_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.bvec3_from_mat4_mat4_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.bvec3_from_mat4x2_vs
+KHR-GL30.shaders30.glsl_constructors.bvec3_from_mat4x2_fs
+KHR-GL30.shaders30.glsl_constructors.bvec3_from_mat4x2_mat4x2_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.bvec3_from_mat4x2_mat4x2_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.bvec3_from_mat4x3_vs
+KHR-GL30.shaders30.glsl_constructors.bvec3_from_mat4x3_fs
+KHR-GL30.shaders30.glsl_constructors.bvec3_from_mat4x3_mat4x3_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.bvec3_from_mat4x3_mat4x3_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.bvec3_from_bool_mat2_vs
+KHR-GL30.shaders30.glsl_constructors.bvec3_from_bool_mat2_fs
+KHR-GL30.shaders30.glsl_constructors.bvec3_from_bool_mat2_bool_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.bvec3_from_bool_mat2_bool_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.bvec3_from_bool_mat2x3_vs
+KHR-GL30.shaders30.glsl_constructors.bvec3_from_bool_mat2x3_fs
+KHR-GL30.shaders30.glsl_constructors.bvec3_from_bool_mat2x3_bool_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.bvec3_from_bool_mat2x3_bool_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.bvec3_from_bool_mat2x4_vs
+KHR-GL30.shaders30.glsl_constructors.bvec3_from_bool_mat2x4_fs
+KHR-GL30.shaders30.glsl_constructors.bvec3_from_bool_mat2x4_bool_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.bvec3_from_bool_mat2x4_bool_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.bvec3_from_bool_mat3_vs
+KHR-GL30.shaders30.glsl_constructors.bvec3_from_bool_mat3_fs
+KHR-GL30.shaders30.glsl_constructors.bvec3_from_bool_mat3_bool_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.bvec3_from_bool_mat3_bool_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.bvec3_from_bool_mat3x2_vs
+KHR-GL30.shaders30.glsl_constructors.bvec3_from_bool_mat3x2_fs
+KHR-GL30.shaders30.glsl_constructors.bvec3_from_bool_mat3x2_bool_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.bvec3_from_bool_mat3x2_bool_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.bvec3_from_bool_mat3x4_vs
+KHR-GL30.shaders30.glsl_constructors.bvec3_from_bool_mat3x4_fs
+KHR-GL30.shaders30.glsl_constructors.bvec3_from_bool_mat3x4_bool_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.bvec3_from_bool_mat3x4_bool_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.bvec3_from_bool_mat4_vs
+KHR-GL30.shaders30.glsl_constructors.bvec3_from_bool_mat4_fs
+KHR-GL30.shaders30.glsl_constructors.bvec3_from_bool_mat4_bool_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.bvec3_from_bool_mat4_bool_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.bvec3_from_bool_mat4x2_vs
+KHR-GL30.shaders30.glsl_constructors.bvec3_from_bool_mat4x2_fs
+KHR-GL30.shaders30.glsl_constructors.bvec3_from_bool_mat4x2_bool_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.bvec3_from_bool_mat4x2_bool_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.bvec3_from_bool_mat4x3_vs
+KHR-GL30.shaders30.glsl_constructors.bvec3_from_bool_mat4x3_fs
+KHR-GL30.shaders30.glsl_constructors.bvec3_from_bool_mat4x3_bool_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.bvec3_from_bool_mat4x3_bool_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.bvec4_from_mat2_vs
+KHR-GL30.shaders30.glsl_constructors.bvec4_from_mat2_fs
+KHR-GL30.shaders30.glsl_constructors.bvec4_from_mat2_mat2_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.bvec4_from_mat2_mat2_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.bvec4_from_mat2x3_vs
+KHR-GL30.shaders30.glsl_constructors.bvec4_from_mat2x3_fs
+KHR-GL30.shaders30.glsl_constructors.bvec4_from_mat2x3_mat2x3_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.bvec4_from_mat2x3_mat2x3_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.bvec4_from_mat2x4_vs
+KHR-GL30.shaders30.glsl_constructors.bvec4_from_mat2x4_fs
+KHR-GL30.shaders30.glsl_constructors.bvec4_from_mat2x4_mat2x4_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.bvec4_from_mat2x4_mat2x4_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.bvec4_from_mat3_vs
+KHR-GL30.shaders30.glsl_constructors.bvec4_from_mat3_fs
+KHR-GL30.shaders30.glsl_constructors.bvec4_from_mat3_mat3_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.bvec4_from_mat3_mat3_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.bvec4_from_mat3x2_vs
+KHR-GL30.shaders30.glsl_constructors.bvec4_from_mat3x2_fs
+KHR-GL30.shaders30.glsl_constructors.bvec4_from_mat3x2_mat3x2_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.bvec4_from_mat3x2_mat3x2_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.bvec4_from_mat3x4_vs
+KHR-GL30.shaders30.glsl_constructors.bvec4_from_mat3x4_fs
+KHR-GL30.shaders30.glsl_constructors.bvec4_from_mat3x4_mat3x4_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.bvec4_from_mat3x4_mat3x4_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.bvec4_from_mat4_vs
+KHR-GL30.shaders30.glsl_constructors.bvec4_from_mat4_fs
+KHR-GL30.shaders30.glsl_constructors.bvec4_from_mat4_mat4_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.bvec4_from_mat4_mat4_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.bvec4_from_mat4x2_vs
+KHR-GL30.shaders30.glsl_constructors.bvec4_from_mat4x2_fs
+KHR-GL30.shaders30.glsl_constructors.bvec4_from_mat4x2_mat4x2_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.bvec4_from_mat4x2_mat4x2_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.bvec4_from_mat4x3_vs
+KHR-GL30.shaders30.glsl_constructors.bvec4_from_mat4x3_fs
+KHR-GL30.shaders30.glsl_constructors.bvec4_from_mat4x3_mat4x3_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.bvec4_from_mat4x3_mat4x3_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.bvec4_from_bool_mat2_vs
+KHR-GL30.shaders30.glsl_constructors.bvec4_from_bool_mat2_fs
+KHR-GL30.shaders30.glsl_constructors.bvec4_from_bool_mat2_bool_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.bvec4_from_bool_mat2_bool_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.bvec4_from_bool_mat2x3_vs
+KHR-GL30.shaders30.glsl_constructors.bvec4_from_bool_mat2x3_fs
+KHR-GL30.shaders30.glsl_constructors.bvec4_from_bool_mat2x3_bool_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.bvec4_from_bool_mat2x3_bool_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.bvec4_from_bool_mat2x4_vs
+KHR-GL30.shaders30.glsl_constructors.bvec4_from_bool_mat2x4_fs
+KHR-GL30.shaders30.glsl_constructors.bvec4_from_bool_mat2x4_bool_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.bvec4_from_bool_mat2x4_bool_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.bvec4_from_bool_mat3_vs
+KHR-GL30.shaders30.glsl_constructors.bvec4_from_bool_mat3_fs
+KHR-GL30.shaders30.glsl_constructors.bvec4_from_bool_mat3_bool_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.bvec4_from_bool_mat3_bool_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.bvec4_from_bool_mat3x2_vs
+KHR-GL30.shaders30.glsl_constructors.bvec4_from_bool_mat3x2_fs
+KHR-GL30.shaders30.glsl_constructors.bvec4_from_bool_mat3x2_bool_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.bvec4_from_bool_mat3x2_bool_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.bvec4_from_bool_mat3x4_vs
+KHR-GL30.shaders30.glsl_constructors.bvec4_from_bool_mat3x4_fs
+KHR-GL30.shaders30.glsl_constructors.bvec4_from_bool_mat3x4_bool_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.bvec4_from_bool_mat3x4_bool_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.bvec4_from_bool_mat4_vs
+KHR-GL30.shaders30.glsl_constructors.bvec4_from_bool_mat4_fs
+KHR-GL30.shaders30.glsl_constructors.bvec4_from_bool_mat4_bool_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.bvec4_from_bool_mat4_bool_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.bvec4_from_bool_mat4x2_vs
+KHR-GL30.shaders30.glsl_constructors.bvec4_from_bool_mat4x2_fs
+KHR-GL30.shaders30.glsl_constructors.bvec4_from_bool_mat4x2_bool_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.bvec4_from_bool_mat4x2_bool_invalid_fs
+KHR-GL30.shaders30.glsl_constructors.bvec4_from_bool_mat4x3_vs
+KHR-GL30.shaders30.glsl_constructors.bvec4_from_bool_mat4x3_fs
+KHR-GL30.shaders30.glsl_constructors.bvec4_from_bool_mat4x3_bool_invalid_vs
+KHR-GL30.shaders30.glsl_constructors.bvec4_from_bool_mat4x3_bool_invalid_fs
 KHR-GL30.ext_texture_shadow_lod.texture.sampler2darrayshadow_fragment
 KHR-GL30.ext_texture_shadow_lod.texture.sampler2darrayshadow_bias_fragment
 KHR-GL30.ext_texture_shadow_lod.texture.samplercubearrayshadow_vertex
diff --git a/external/openglcts/data/mustpass/gl/khronos_mustpass/4.6.1.x/gl31-master.txt b/external/openglcts/data/mustpass/gl/khronos_mustpass/4.6.1.x/gl31-master.txt
index 71e3fe0..6e3536e 100644
--- a/external/openglcts/data/mustpass/gl/khronos_mustpass/4.6.1.x/gl31-master.txt
+++ b/external/openglcts/data/mustpass/gl/khronos_mustpass/4.6.1.x/gl31-master.txt
@@ -192,6 +192,654 @@
 KHR-GL31.texture_repeat_mode.depth24_stencil8_11x131_2_mirrored_repeat
 KHR-GL31.shaders30.declarations.declarations.redeclare_gl_FragColor
 KHR-GL31.shaders30.declarations.declarations.redeclare_gl_FragData
+KHR-GL31.shaders30.glsl_constructors.vec2_from_mat2_vs
+KHR-GL31.shaders30.glsl_constructors.vec2_from_mat2_fs
+KHR-GL31.shaders30.glsl_constructors.vec2_from_mat2_mat2_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.vec2_from_mat2_mat2_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.vec2_from_mat2x3_vs
+KHR-GL31.shaders30.glsl_constructors.vec2_from_mat2x3_fs
+KHR-GL31.shaders30.glsl_constructors.vec2_from_mat2x3_mat2x3_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.vec2_from_mat2x3_mat2x3_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.vec2_from_mat2x4_vs
+KHR-GL31.shaders30.glsl_constructors.vec2_from_mat2x4_fs
+KHR-GL31.shaders30.glsl_constructors.vec2_from_mat2x4_mat2x4_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.vec2_from_mat2x4_mat2x4_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.vec2_from_mat3_vs
+KHR-GL31.shaders30.glsl_constructors.vec2_from_mat3_fs
+KHR-GL31.shaders30.glsl_constructors.vec2_from_mat3_mat3_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.vec2_from_mat3_mat3_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.vec2_from_mat3x2_vs
+KHR-GL31.shaders30.glsl_constructors.vec2_from_mat3x2_fs
+KHR-GL31.shaders30.glsl_constructors.vec2_from_mat3x2_mat3x2_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.vec2_from_mat3x2_mat3x2_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.vec2_from_mat3x4_vs
+KHR-GL31.shaders30.glsl_constructors.vec2_from_mat3x4_fs
+KHR-GL31.shaders30.glsl_constructors.vec2_from_mat3x4_mat3x4_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.vec2_from_mat3x4_mat3x4_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.vec2_from_mat4_vs
+KHR-GL31.shaders30.glsl_constructors.vec2_from_mat4_fs
+KHR-GL31.shaders30.glsl_constructors.vec2_from_mat4_mat4_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.vec2_from_mat4_mat4_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.vec2_from_mat4x2_vs
+KHR-GL31.shaders30.glsl_constructors.vec2_from_mat4x2_fs
+KHR-GL31.shaders30.glsl_constructors.vec2_from_mat4x2_mat4x2_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.vec2_from_mat4x2_mat4x2_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.vec2_from_mat4x3_vs
+KHR-GL31.shaders30.glsl_constructors.vec2_from_mat4x3_fs
+KHR-GL31.shaders30.glsl_constructors.vec2_from_mat4x3_mat4x3_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.vec2_from_mat4x3_mat4x3_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.vec2_from_float_mat2_vs
+KHR-GL31.shaders30.glsl_constructors.vec2_from_float_mat2_fs
+KHR-GL31.shaders30.glsl_constructors.vec2_from_float_mat2_float_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.vec2_from_float_mat2_float_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.vec2_from_float_mat2x3_vs
+KHR-GL31.shaders30.glsl_constructors.vec2_from_float_mat2x3_fs
+KHR-GL31.shaders30.glsl_constructors.vec2_from_float_mat2x3_float_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.vec2_from_float_mat2x3_float_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.vec2_from_float_mat2x4_vs
+KHR-GL31.shaders30.glsl_constructors.vec2_from_float_mat2x4_fs
+KHR-GL31.shaders30.glsl_constructors.vec2_from_float_mat2x4_float_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.vec2_from_float_mat2x4_float_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.vec2_from_float_mat3_vs
+KHR-GL31.shaders30.glsl_constructors.vec2_from_float_mat3_fs
+KHR-GL31.shaders30.glsl_constructors.vec2_from_float_mat3_float_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.vec2_from_float_mat3_float_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.vec2_from_float_mat3x2_vs
+KHR-GL31.shaders30.glsl_constructors.vec2_from_float_mat3x2_fs
+KHR-GL31.shaders30.glsl_constructors.vec2_from_float_mat3x2_float_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.vec2_from_float_mat3x2_float_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.vec2_from_float_mat3x4_vs
+KHR-GL31.shaders30.glsl_constructors.vec2_from_float_mat3x4_fs
+KHR-GL31.shaders30.glsl_constructors.vec2_from_float_mat3x4_float_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.vec2_from_float_mat3x4_float_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.vec2_from_float_mat4_vs
+KHR-GL31.shaders30.glsl_constructors.vec2_from_float_mat4_fs
+KHR-GL31.shaders30.glsl_constructors.vec2_from_float_mat4_float_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.vec2_from_float_mat4_float_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.vec2_from_float_mat4x2_vs
+KHR-GL31.shaders30.glsl_constructors.vec2_from_float_mat4x2_fs
+KHR-GL31.shaders30.glsl_constructors.vec2_from_float_mat4x2_float_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.vec2_from_float_mat4x2_float_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.vec2_from_float_mat4x3_vs
+KHR-GL31.shaders30.glsl_constructors.vec2_from_float_mat4x3_fs
+KHR-GL31.shaders30.glsl_constructors.vec2_from_float_mat4x3_float_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.vec2_from_float_mat4x3_float_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.vec3_from_mat2_vs
+KHR-GL31.shaders30.glsl_constructors.vec3_from_mat2_fs
+KHR-GL31.shaders30.glsl_constructors.vec3_from_mat2_mat2_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.vec3_from_mat2_mat2_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.vec3_from_mat2x3_vs
+KHR-GL31.shaders30.glsl_constructors.vec3_from_mat2x3_fs
+KHR-GL31.shaders30.glsl_constructors.vec3_from_mat2x3_mat2x3_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.vec3_from_mat2x3_mat2x3_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.vec3_from_mat2x4_vs
+KHR-GL31.shaders30.glsl_constructors.vec3_from_mat2x4_fs
+KHR-GL31.shaders30.glsl_constructors.vec3_from_mat2x4_mat2x4_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.vec3_from_mat2x4_mat2x4_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.vec3_from_mat3_vs
+KHR-GL31.shaders30.glsl_constructors.vec3_from_mat3_fs
+KHR-GL31.shaders30.glsl_constructors.vec3_from_mat3_mat3_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.vec3_from_mat3_mat3_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.vec3_from_mat3x2_vs
+KHR-GL31.shaders30.glsl_constructors.vec3_from_mat3x2_fs
+KHR-GL31.shaders30.glsl_constructors.vec3_from_mat3x2_mat3x2_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.vec3_from_mat3x2_mat3x2_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.vec3_from_mat3x4_vs
+KHR-GL31.shaders30.glsl_constructors.vec3_from_mat3x4_fs
+KHR-GL31.shaders30.glsl_constructors.vec3_from_mat3x4_mat3x4_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.vec3_from_mat3x4_mat3x4_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.vec3_from_mat4_vs
+KHR-GL31.shaders30.glsl_constructors.vec3_from_mat4_fs
+KHR-GL31.shaders30.glsl_constructors.vec3_from_mat4_mat4_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.vec3_from_mat4_mat4_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.vec3_from_mat4x2_vs
+KHR-GL31.shaders30.glsl_constructors.vec3_from_mat4x2_fs
+KHR-GL31.shaders30.glsl_constructors.vec3_from_mat4x2_mat4x2_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.vec3_from_mat4x2_mat4x2_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.vec3_from_mat4x3_vs
+KHR-GL31.shaders30.glsl_constructors.vec3_from_mat4x3_fs
+KHR-GL31.shaders30.glsl_constructors.vec3_from_mat4x3_mat4x3_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.vec3_from_mat4x3_mat4x3_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.vec3_from_float_mat2_vs
+KHR-GL31.shaders30.glsl_constructors.vec3_from_float_mat2_fs
+KHR-GL31.shaders30.glsl_constructors.vec3_from_float_mat2_float_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.vec3_from_float_mat2_float_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.vec3_from_float_mat2x3_vs
+KHR-GL31.shaders30.glsl_constructors.vec3_from_float_mat2x3_fs
+KHR-GL31.shaders30.glsl_constructors.vec3_from_float_mat2x3_float_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.vec3_from_float_mat2x3_float_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.vec3_from_float_mat2x4_vs
+KHR-GL31.shaders30.glsl_constructors.vec3_from_float_mat2x4_fs
+KHR-GL31.shaders30.glsl_constructors.vec3_from_float_mat2x4_float_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.vec3_from_float_mat2x4_float_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.vec3_from_float_mat3_vs
+KHR-GL31.shaders30.glsl_constructors.vec3_from_float_mat3_fs
+KHR-GL31.shaders30.glsl_constructors.vec3_from_float_mat3_float_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.vec3_from_float_mat3_float_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.vec3_from_float_mat3x2_vs
+KHR-GL31.shaders30.glsl_constructors.vec3_from_float_mat3x2_fs
+KHR-GL31.shaders30.glsl_constructors.vec3_from_float_mat3x2_float_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.vec3_from_float_mat3x2_float_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.vec3_from_float_mat3x4_vs
+KHR-GL31.shaders30.glsl_constructors.vec3_from_float_mat3x4_fs
+KHR-GL31.shaders30.glsl_constructors.vec3_from_float_mat3x4_float_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.vec3_from_float_mat3x4_float_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.vec3_from_float_mat4_vs
+KHR-GL31.shaders30.glsl_constructors.vec3_from_float_mat4_fs
+KHR-GL31.shaders30.glsl_constructors.vec3_from_float_mat4_float_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.vec3_from_float_mat4_float_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.vec3_from_float_mat4x2_vs
+KHR-GL31.shaders30.glsl_constructors.vec3_from_float_mat4x2_fs
+KHR-GL31.shaders30.glsl_constructors.vec3_from_float_mat4x2_float_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.vec3_from_float_mat4x2_float_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.vec3_from_float_mat4x3_vs
+KHR-GL31.shaders30.glsl_constructors.vec3_from_float_mat4x3_fs
+KHR-GL31.shaders30.glsl_constructors.vec3_from_float_mat4x3_float_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.vec3_from_float_mat4x3_float_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.vec4_from_mat2_vs
+KHR-GL31.shaders30.glsl_constructors.vec4_from_mat2_fs
+KHR-GL31.shaders30.glsl_constructors.vec4_from_mat2_mat2_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.vec4_from_mat2_mat2_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.vec4_from_mat2x3_vs
+KHR-GL31.shaders30.glsl_constructors.vec4_from_mat2x3_fs
+KHR-GL31.shaders30.glsl_constructors.vec4_from_mat2x3_mat2x3_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.vec4_from_mat2x3_mat2x3_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.vec4_from_mat2x4_vs
+KHR-GL31.shaders30.glsl_constructors.vec4_from_mat2x4_fs
+KHR-GL31.shaders30.glsl_constructors.vec4_from_mat2x4_mat2x4_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.vec4_from_mat2x4_mat2x4_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.vec4_from_mat3_vs
+KHR-GL31.shaders30.glsl_constructors.vec4_from_mat3_fs
+KHR-GL31.shaders30.glsl_constructors.vec4_from_mat3_mat3_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.vec4_from_mat3_mat3_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.vec4_from_mat3x2_vs
+KHR-GL31.shaders30.glsl_constructors.vec4_from_mat3x2_fs
+KHR-GL31.shaders30.glsl_constructors.vec4_from_mat3x2_mat3x2_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.vec4_from_mat3x2_mat3x2_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.vec4_from_mat3x4_vs
+KHR-GL31.shaders30.glsl_constructors.vec4_from_mat3x4_fs
+KHR-GL31.shaders30.glsl_constructors.vec4_from_mat3x4_mat3x4_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.vec4_from_mat3x4_mat3x4_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.vec4_from_mat4_vs
+KHR-GL31.shaders30.glsl_constructors.vec4_from_mat4_fs
+KHR-GL31.shaders30.glsl_constructors.vec4_from_mat4_mat4_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.vec4_from_mat4_mat4_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.vec4_from_mat4x2_vs
+KHR-GL31.shaders30.glsl_constructors.vec4_from_mat4x2_fs
+KHR-GL31.shaders30.glsl_constructors.vec4_from_mat4x2_mat4x2_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.vec4_from_mat4x2_mat4x2_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.vec4_from_mat4x3_vs
+KHR-GL31.shaders30.glsl_constructors.vec4_from_mat4x3_fs
+KHR-GL31.shaders30.glsl_constructors.vec4_from_mat4x3_mat4x3_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.vec4_from_mat4x3_mat4x3_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.vec4_from_float_mat2_vs
+KHR-GL31.shaders30.glsl_constructors.vec4_from_float_mat2_fs
+KHR-GL31.shaders30.glsl_constructors.vec4_from_float_mat2_float_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.vec4_from_float_mat2_float_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.vec4_from_float_mat2x3_vs
+KHR-GL31.shaders30.glsl_constructors.vec4_from_float_mat2x3_fs
+KHR-GL31.shaders30.glsl_constructors.vec4_from_float_mat2x3_float_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.vec4_from_float_mat2x3_float_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.vec4_from_float_mat2x4_vs
+KHR-GL31.shaders30.glsl_constructors.vec4_from_float_mat2x4_fs
+KHR-GL31.shaders30.glsl_constructors.vec4_from_float_mat2x4_float_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.vec4_from_float_mat2x4_float_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.vec4_from_float_mat3_vs
+KHR-GL31.shaders30.glsl_constructors.vec4_from_float_mat3_fs
+KHR-GL31.shaders30.glsl_constructors.vec4_from_float_mat3_float_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.vec4_from_float_mat3_float_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.vec4_from_float_mat3x2_vs
+KHR-GL31.shaders30.glsl_constructors.vec4_from_float_mat3x2_fs
+KHR-GL31.shaders30.glsl_constructors.vec4_from_float_mat3x2_float_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.vec4_from_float_mat3x2_float_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.vec4_from_float_mat3x4_vs
+KHR-GL31.shaders30.glsl_constructors.vec4_from_float_mat3x4_fs
+KHR-GL31.shaders30.glsl_constructors.vec4_from_float_mat3x4_float_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.vec4_from_float_mat3x4_float_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.vec4_from_float_mat4_vs
+KHR-GL31.shaders30.glsl_constructors.vec4_from_float_mat4_fs
+KHR-GL31.shaders30.glsl_constructors.vec4_from_float_mat4_float_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.vec4_from_float_mat4_float_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.vec4_from_float_mat4x2_vs
+KHR-GL31.shaders30.glsl_constructors.vec4_from_float_mat4x2_fs
+KHR-GL31.shaders30.glsl_constructors.vec4_from_float_mat4x2_float_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.vec4_from_float_mat4x2_float_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.vec4_from_float_mat4x3_vs
+KHR-GL31.shaders30.glsl_constructors.vec4_from_float_mat4x3_fs
+KHR-GL31.shaders30.glsl_constructors.vec4_from_float_mat4x3_float_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.vec4_from_float_mat4x3_float_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.ivec2_from_mat2_vs
+KHR-GL31.shaders30.glsl_constructors.ivec2_from_mat2_fs
+KHR-GL31.shaders30.glsl_constructors.ivec2_from_mat2_mat2_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.ivec2_from_mat2_mat2_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.ivec2_from_mat2x3_vs
+KHR-GL31.shaders30.glsl_constructors.ivec2_from_mat2x3_fs
+KHR-GL31.shaders30.glsl_constructors.ivec2_from_mat2x3_mat2x3_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.ivec2_from_mat2x3_mat2x3_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.ivec2_from_mat2x4_vs
+KHR-GL31.shaders30.glsl_constructors.ivec2_from_mat2x4_fs
+KHR-GL31.shaders30.glsl_constructors.ivec2_from_mat2x4_mat2x4_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.ivec2_from_mat2x4_mat2x4_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.ivec2_from_mat3_vs
+KHR-GL31.shaders30.glsl_constructors.ivec2_from_mat3_fs
+KHR-GL31.shaders30.glsl_constructors.ivec2_from_mat3_mat3_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.ivec2_from_mat3_mat3_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.ivec2_from_mat3x2_vs
+KHR-GL31.shaders30.glsl_constructors.ivec2_from_mat3x2_fs
+KHR-GL31.shaders30.glsl_constructors.ivec2_from_mat3x2_mat3x2_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.ivec2_from_mat3x2_mat3x2_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.ivec2_from_mat3x4_vs
+KHR-GL31.shaders30.glsl_constructors.ivec2_from_mat3x4_fs
+KHR-GL31.shaders30.glsl_constructors.ivec2_from_mat3x4_mat3x4_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.ivec2_from_mat3x4_mat3x4_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.ivec2_from_mat4_vs
+KHR-GL31.shaders30.glsl_constructors.ivec2_from_mat4_fs
+KHR-GL31.shaders30.glsl_constructors.ivec2_from_mat4_mat4_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.ivec2_from_mat4_mat4_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.ivec2_from_mat4x2_vs
+KHR-GL31.shaders30.glsl_constructors.ivec2_from_mat4x2_fs
+KHR-GL31.shaders30.glsl_constructors.ivec2_from_mat4x2_mat4x2_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.ivec2_from_mat4x2_mat4x2_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.ivec2_from_mat4x3_vs
+KHR-GL31.shaders30.glsl_constructors.ivec2_from_mat4x3_fs
+KHR-GL31.shaders30.glsl_constructors.ivec2_from_mat4x3_mat4x3_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.ivec2_from_mat4x3_mat4x3_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.ivec2_from_int_mat2_vs
+KHR-GL31.shaders30.glsl_constructors.ivec2_from_int_mat2_fs
+KHR-GL31.shaders30.glsl_constructors.ivec2_from_int_mat2_int_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.ivec2_from_int_mat2_int_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.ivec2_from_int_mat2x3_vs
+KHR-GL31.shaders30.glsl_constructors.ivec2_from_int_mat2x3_fs
+KHR-GL31.shaders30.glsl_constructors.ivec2_from_int_mat2x3_int_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.ivec2_from_int_mat2x3_int_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.ivec2_from_int_mat2x4_vs
+KHR-GL31.shaders30.glsl_constructors.ivec2_from_int_mat2x4_fs
+KHR-GL31.shaders30.glsl_constructors.ivec2_from_int_mat2x4_int_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.ivec2_from_int_mat2x4_int_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.ivec2_from_int_mat3_vs
+KHR-GL31.shaders30.glsl_constructors.ivec2_from_int_mat3_fs
+KHR-GL31.shaders30.glsl_constructors.ivec2_from_int_mat3_int_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.ivec2_from_int_mat3_int_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.ivec2_from_int_mat3x2_vs
+KHR-GL31.shaders30.glsl_constructors.ivec2_from_int_mat3x2_fs
+KHR-GL31.shaders30.glsl_constructors.ivec2_from_int_mat3x2_int_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.ivec2_from_int_mat3x2_int_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.ivec2_from_int_mat3x4_vs
+KHR-GL31.shaders30.glsl_constructors.ivec2_from_int_mat3x4_fs
+KHR-GL31.shaders30.glsl_constructors.ivec2_from_int_mat3x4_int_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.ivec2_from_int_mat3x4_int_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.ivec2_from_int_mat4_vs
+KHR-GL31.shaders30.glsl_constructors.ivec2_from_int_mat4_fs
+KHR-GL31.shaders30.glsl_constructors.ivec2_from_int_mat4_int_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.ivec2_from_int_mat4_int_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.ivec2_from_int_mat4x2_vs
+KHR-GL31.shaders30.glsl_constructors.ivec2_from_int_mat4x2_fs
+KHR-GL31.shaders30.glsl_constructors.ivec2_from_int_mat4x2_int_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.ivec2_from_int_mat4x2_int_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.ivec2_from_int_mat4x3_vs
+KHR-GL31.shaders30.glsl_constructors.ivec2_from_int_mat4x3_fs
+KHR-GL31.shaders30.glsl_constructors.ivec2_from_int_mat4x3_int_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.ivec2_from_int_mat4x3_int_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.ivec3_from_mat2_vs
+KHR-GL31.shaders30.glsl_constructors.ivec3_from_mat2_fs
+KHR-GL31.shaders30.glsl_constructors.ivec3_from_mat2_mat2_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.ivec3_from_mat2_mat2_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.ivec3_from_mat2x3_vs
+KHR-GL31.shaders30.glsl_constructors.ivec3_from_mat2x3_fs
+KHR-GL31.shaders30.glsl_constructors.ivec3_from_mat2x3_mat2x3_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.ivec3_from_mat2x3_mat2x3_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.ivec3_from_mat2x4_vs
+KHR-GL31.shaders30.glsl_constructors.ivec3_from_mat2x4_fs
+KHR-GL31.shaders30.glsl_constructors.ivec3_from_mat2x4_mat2x4_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.ivec3_from_mat2x4_mat2x4_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.ivec3_from_mat3_vs
+KHR-GL31.shaders30.glsl_constructors.ivec3_from_mat3_fs
+KHR-GL31.shaders30.glsl_constructors.ivec3_from_mat3_mat3_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.ivec3_from_mat3_mat3_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.ivec3_from_mat3x2_vs
+KHR-GL31.shaders30.glsl_constructors.ivec3_from_mat3x2_fs
+KHR-GL31.shaders30.glsl_constructors.ivec3_from_mat3x2_mat3x2_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.ivec3_from_mat3x2_mat3x2_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.ivec3_from_mat3x4_vs
+KHR-GL31.shaders30.glsl_constructors.ivec3_from_mat3x4_fs
+KHR-GL31.shaders30.glsl_constructors.ivec3_from_mat3x4_mat3x4_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.ivec3_from_mat3x4_mat3x4_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.ivec3_from_mat4_vs
+KHR-GL31.shaders30.glsl_constructors.ivec3_from_mat4_fs
+KHR-GL31.shaders30.glsl_constructors.ivec3_from_mat4_mat4_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.ivec3_from_mat4_mat4_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.ivec3_from_mat4x2_vs
+KHR-GL31.shaders30.glsl_constructors.ivec3_from_mat4x2_fs
+KHR-GL31.shaders30.glsl_constructors.ivec3_from_mat4x2_mat4x2_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.ivec3_from_mat4x2_mat4x2_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.ivec3_from_mat4x3_vs
+KHR-GL31.shaders30.glsl_constructors.ivec3_from_mat4x3_fs
+KHR-GL31.shaders30.glsl_constructors.ivec3_from_mat4x3_mat4x3_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.ivec3_from_mat4x3_mat4x3_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.ivec3_from_int_mat2_vs
+KHR-GL31.shaders30.glsl_constructors.ivec3_from_int_mat2_fs
+KHR-GL31.shaders30.glsl_constructors.ivec3_from_int_mat2_int_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.ivec3_from_int_mat2_int_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.ivec3_from_int_mat2x3_vs
+KHR-GL31.shaders30.glsl_constructors.ivec3_from_int_mat2x3_fs
+KHR-GL31.shaders30.glsl_constructors.ivec3_from_int_mat2x3_int_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.ivec3_from_int_mat2x3_int_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.ivec3_from_int_mat2x4_vs
+KHR-GL31.shaders30.glsl_constructors.ivec3_from_int_mat2x4_fs
+KHR-GL31.shaders30.glsl_constructors.ivec3_from_int_mat2x4_int_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.ivec3_from_int_mat2x4_int_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.ivec3_from_int_mat3_vs
+KHR-GL31.shaders30.glsl_constructors.ivec3_from_int_mat3_fs
+KHR-GL31.shaders30.glsl_constructors.ivec3_from_int_mat3_int_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.ivec3_from_int_mat3_int_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.ivec3_from_int_mat3x2_vs
+KHR-GL31.shaders30.glsl_constructors.ivec3_from_int_mat3x2_fs
+KHR-GL31.shaders30.glsl_constructors.ivec3_from_int_mat3x2_int_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.ivec3_from_int_mat3x2_int_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.ivec3_from_int_mat3x4_vs
+KHR-GL31.shaders30.glsl_constructors.ivec3_from_int_mat3x4_fs
+KHR-GL31.shaders30.glsl_constructors.ivec3_from_int_mat3x4_int_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.ivec3_from_int_mat3x4_int_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.ivec3_from_int_mat4_vs
+KHR-GL31.shaders30.glsl_constructors.ivec3_from_int_mat4_fs
+KHR-GL31.shaders30.glsl_constructors.ivec3_from_int_mat4_int_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.ivec3_from_int_mat4_int_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.ivec3_from_int_mat4x2_vs
+KHR-GL31.shaders30.glsl_constructors.ivec3_from_int_mat4x2_fs
+KHR-GL31.shaders30.glsl_constructors.ivec3_from_int_mat4x2_int_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.ivec3_from_int_mat4x2_int_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.ivec3_from_int_mat4x3_vs
+KHR-GL31.shaders30.glsl_constructors.ivec3_from_int_mat4x3_fs
+KHR-GL31.shaders30.glsl_constructors.ivec3_from_int_mat4x3_int_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.ivec3_from_int_mat4x3_int_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.ivec4_from_mat2_vs
+KHR-GL31.shaders30.glsl_constructors.ivec4_from_mat2_fs
+KHR-GL31.shaders30.glsl_constructors.ivec4_from_mat2_mat2_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.ivec4_from_mat2_mat2_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.ivec4_from_mat2x3_vs
+KHR-GL31.shaders30.glsl_constructors.ivec4_from_mat2x3_fs
+KHR-GL31.shaders30.glsl_constructors.ivec4_from_mat2x3_mat2x3_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.ivec4_from_mat2x3_mat2x3_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.ivec4_from_mat2x4_vs
+KHR-GL31.shaders30.glsl_constructors.ivec4_from_mat2x4_fs
+KHR-GL31.shaders30.glsl_constructors.ivec4_from_mat2x4_mat2x4_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.ivec4_from_mat2x4_mat2x4_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.ivec4_from_mat3_vs
+KHR-GL31.shaders30.glsl_constructors.ivec4_from_mat3_fs
+KHR-GL31.shaders30.glsl_constructors.ivec4_from_mat3_mat3_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.ivec4_from_mat3_mat3_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.ivec4_from_mat3x2_vs
+KHR-GL31.shaders30.glsl_constructors.ivec4_from_mat3x2_fs
+KHR-GL31.shaders30.glsl_constructors.ivec4_from_mat3x2_mat3x2_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.ivec4_from_mat3x2_mat3x2_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.ivec4_from_mat3x4_vs
+KHR-GL31.shaders30.glsl_constructors.ivec4_from_mat3x4_fs
+KHR-GL31.shaders30.glsl_constructors.ivec4_from_mat3x4_mat3x4_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.ivec4_from_mat3x4_mat3x4_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.ivec4_from_mat4_vs
+KHR-GL31.shaders30.glsl_constructors.ivec4_from_mat4_fs
+KHR-GL31.shaders30.glsl_constructors.ivec4_from_mat4_mat4_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.ivec4_from_mat4_mat4_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.ivec4_from_mat4x2_vs
+KHR-GL31.shaders30.glsl_constructors.ivec4_from_mat4x2_fs
+KHR-GL31.shaders30.glsl_constructors.ivec4_from_mat4x2_mat4x2_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.ivec4_from_mat4x2_mat4x2_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.ivec4_from_mat4x3_vs
+KHR-GL31.shaders30.glsl_constructors.ivec4_from_mat4x3_fs
+KHR-GL31.shaders30.glsl_constructors.ivec4_from_mat4x3_mat4x3_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.ivec4_from_mat4x3_mat4x3_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.ivec4_from_int_mat2_vs
+KHR-GL31.shaders30.glsl_constructors.ivec4_from_int_mat2_fs
+KHR-GL31.shaders30.glsl_constructors.ivec4_from_int_mat2_int_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.ivec4_from_int_mat2_int_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.ivec4_from_int_mat2x3_vs
+KHR-GL31.shaders30.glsl_constructors.ivec4_from_int_mat2x3_fs
+KHR-GL31.shaders30.glsl_constructors.ivec4_from_int_mat2x3_int_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.ivec4_from_int_mat2x3_int_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.ivec4_from_int_mat2x4_vs
+KHR-GL31.shaders30.glsl_constructors.ivec4_from_int_mat2x4_fs
+KHR-GL31.shaders30.glsl_constructors.ivec4_from_int_mat2x4_int_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.ivec4_from_int_mat2x4_int_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.ivec4_from_int_mat3_vs
+KHR-GL31.shaders30.glsl_constructors.ivec4_from_int_mat3_fs
+KHR-GL31.shaders30.glsl_constructors.ivec4_from_int_mat3_int_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.ivec4_from_int_mat3_int_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.ivec4_from_int_mat3x2_vs
+KHR-GL31.shaders30.glsl_constructors.ivec4_from_int_mat3x2_fs
+KHR-GL31.shaders30.glsl_constructors.ivec4_from_int_mat3x2_int_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.ivec4_from_int_mat3x2_int_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.ivec4_from_int_mat3x4_vs
+KHR-GL31.shaders30.glsl_constructors.ivec4_from_int_mat3x4_fs
+KHR-GL31.shaders30.glsl_constructors.ivec4_from_int_mat3x4_int_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.ivec4_from_int_mat3x4_int_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.ivec4_from_int_mat4_vs
+KHR-GL31.shaders30.glsl_constructors.ivec4_from_int_mat4_fs
+KHR-GL31.shaders30.glsl_constructors.ivec4_from_int_mat4_int_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.ivec4_from_int_mat4_int_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.ivec4_from_int_mat4x2_vs
+KHR-GL31.shaders30.glsl_constructors.ivec4_from_int_mat4x2_fs
+KHR-GL31.shaders30.glsl_constructors.ivec4_from_int_mat4x2_int_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.ivec4_from_int_mat4x2_int_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.ivec4_from_int_mat4x3_vs
+KHR-GL31.shaders30.glsl_constructors.ivec4_from_int_mat4x3_fs
+KHR-GL31.shaders30.glsl_constructors.ivec4_from_int_mat4x3_int_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.ivec4_from_int_mat4x3_int_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.bvec2_from_mat2_vs
+KHR-GL31.shaders30.glsl_constructors.bvec2_from_mat2_fs
+KHR-GL31.shaders30.glsl_constructors.bvec2_from_mat2_mat2_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.bvec2_from_mat2_mat2_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.bvec2_from_mat2x3_vs
+KHR-GL31.shaders30.glsl_constructors.bvec2_from_mat2x3_fs
+KHR-GL31.shaders30.glsl_constructors.bvec2_from_mat2x3_mat2x3_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.bvec2_from_mat2x3_mat2x3_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.bvec2_from_mat2x4_vs
+KHR-GL31.shaders30.glsl_constructors.bvec2_from_mat2x4_fs
+KHR-GL31.shaders30.glsl_constructors.bvec2_from_mat2x4_mat2x4_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.bvec2_from_mat2x4_mat2x4_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.bvec2_from_mat3_vs
+KHR-GL31.shaders30.glsl_constructors.bvec2_from_mat3_fs
+KHR-GL31.shaders30.glsl_constructors.bvec2_from_mat3_mat3_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.bvec2_from_mat3_mat3_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.bvec2_from_mat3x2_vs
+KHR-GL31.shaders30.glsl_constructors.bvec2_from_mat3x2_fs
+KHR-GL31.shaders30.glsl_constructors.bvec2_from_mat3x2_mat3x2_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.bvec2_from_mat3x2_mat3x2_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.bvec2_from_mat3x4_vs
+KHR-GL31.shaders30.glsl_constructors.bvec2_from_mat3x4_fs
+KHR-GL31.shaders30.glsl_constructors.bvec2_from_mat3x4_mat3x4_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.bvec2_from_mat3x4_mat3x4_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.bvec2_from_mat4_vs
+KHR-GL31.shaders30.glsl_constructors.bvec2_from_mat4_fs
+KHR-GL31.shaders30.glsl_constructors.bvec2_from_mat4_mat4_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.bvec2_from_mat4_mat4_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.bvec2_from_mat4x2_vs
+KHR-GL31.shaders30.glsl_constructors.bvec2_from_mat4x2_fs
+KHR-GL31.shaders30.glsl_constructors.bvec2_from_mat4x2_mat4x2_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.bvec2_from_mat4x2_mat4x2_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.bvec2_from_mat4x3_vs
+KHR-GL31.shaders30.glsl_constructors.bvec2_from_mat4x3_fs
+KHR-GL31.shaders30.glsl_constructors.bvec2_from_mat4x3_mat4x3_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.bvec2_from_mat4x3_mat4x3_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.bvec2_from_bool_mat2_vs
+KHR-GL31.shaders30.glsl_constructors.bvec2_from_bool_mat2_fs
+KHR-GL31.shaders30.glsl_constructors.bvec2_from_bool_mat2_bool_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.bvec2_from_bool_mat2_bool_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.bvec2_from_bool_mat2x3_vs
+KHR-GL31.shaders30.glsl_constructors.bvec2_from_bool_mat2x3_fs
+KHR-GL31.shaders30.glsl_constructors.bvec2_from_bool_mat2x3_bool_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.bvec2_from_bool_mat2x3_bool_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.bvec2_from_bool_mat2x4_vs
+KHR-GL31.shaders30.glsl_constructors.bvec2_from_bool_mat2x4_fs
+KHR-GL31.shaders30.glsl_constructors.bvec2_from_bool_mat2x4_bool_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.bvec2_from_bool_mat2x4_bool_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.bvec2_from_bool_mat3_vs
+KHR-GL31.shaders30.glsl_constructors.bvec2_from_bool_mat3_fs
+KHR-GL31.shaders30.glsl_constructors.bvec2_from_bool_mat3_bool_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.bvec2_from_bool_mat3_bool_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.bvec2_from_bool_mat3x2_vs
+KHR-GL31.shaders30.glsl_constructors.bvec2_from_bool_mat3x2_fs
+KHR-GL31.shaders30.glsl_constructors.bvec2_from_bool_mat3x2_bool_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.bvec2_from_bool_mat3x2_bool_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.bvec2_from_bool_mat3x4_vs
+KHR-GL31.shaders30.glsl_constructors.bvec2_from_bool_mat3x4_fs
+KHR-GL31.shaders30.glsl_constructors.bvec2_from_bool_mat3x4_bool_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.bvec2_from_bool_mat3x4_bool_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.bvec2_from_bool_mat4_vs
+KHR-GL31.shaders30.glsl_constructors.bvec2_from_bool_mat4_fs
+KHR-GL31.shaders30.glsl_constructors.bvec2_from_bool_mat4_bool_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.bvec2_from_bool_mat4_bool_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.bvec2_from_bool_mat4x2_vs
+KHR-GL31.shaders30.glsl_constructors.bvec2_from_bool_mat4x2_fs
+KHR-GL31.shaders30.glsl_constructors.bvec2_from_bool_mat4x2_bool_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.bvec2_from_bool_mat4x2_bool_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.bvec2_from_bool_mat4x3_vs
+KHR-GL31.shaders30.glsl_constructors.bvec2_from_bool_mat4x3_fs
+KHR-GL31.shaders30.glsl_constructors.bvec2_from_bool_mat4x3_bool_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.bvec2_from_bool_mat4x3_bool_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.bvec3_from_mat2_vs
+KHR-GL31.shaders30.glsl_constructors.bvec3_from_mat2_fs
+KHR-GL31.shaders30.glsl_constructors.bvec3_from_mat2_mat2_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.bvec3_from_mat2_mat2_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.bvec3_from_mat2x3_vs
+KHR-GL31.shaders30.glsl_constructors.bvec3_from_mat2x3_fs
+KHR-GL31.shaders30.glsl_constructors.bvec3_from_mat2x3_mat2x3_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.bvec3_from_mat2x3_mat2x3_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.bvec3_from_mat2x4_vs
+KHR-GL31.shaders30.glsl_constructors.bvec3_from_mat2x4_fs
+KHR-GL31.shaders30.glsl_constructors.bvec3_from_mat2x4_mat2x4_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.bvec3_from_mat2x4_mat2x4_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.bvec3_from_mat3_vs
+KHR-GL31.shaders30.glsl_constructors.bvec3_from_mat3_fs
+KHR-GL31.shaders30.glsl_constructors.bvec3_from_mat3_mat3_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.bvec3_from_mat3_mat3_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.bvec3_from_mat3x2_vs
+KHR-GL31.shaders30.glsl_constructors.bvec3_from_mat3x2_fs
+KHR-GL31.shaders30.glsl_constructors.bvec3_from_mat3x2_mat3x2_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.bvec3_from_mat3x2_mat3x2_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.bvec3_from_mat3x4_vs
+KHR-GL31.shaders30.glsl_constructors.bvec3_from_mat3x4_fs
+KHR-GL31.shaders30.glsl_constructors.bvec3_from_mat3x4_mat3x4_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.bvec3_from_mat3x4_mat3x4_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.bvec3_from_mat4_vs
+KHR-GL31.shaders30.glsl_constructors.bvec3_from_mat4_fs
+KHR-GL31.shaders30.glsl_constructors.bvec3_from_mat4_mat4_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.bvec3_from_mat4_mat4_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.bvec3_from_mat4x2_vs
+KHR-GL31.shaders30.glsl_constructors.bvec3_from_mat4x2_fs
+KHR-GL31.shaders30.glsl_constructors.bvec3_from_mat4x2_mat4x2_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.bvec3_from_mat4x2_mat4x2_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.bvec3_from_mat4x3_vs
+KHR-GL31.shaders30.glsl_constructors.bvec3_from_mat4x3_fs
+KHR-GL31.shaders30.glsl_constructors.bvec3_from_mat4x3_mat4x3_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.bvec3_from_mat4x3_mat4x3_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.bvec3_from_bool_mat2_vs
+KHR-GL31.shaders30.glsl_constructors.bvec3_from_bool_mat2_fs
+KHR-GL31.shaders30.glsl_constructors.bvec3_from_bool_mat2_bool_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.bvec3_from_bool_mat2_bool_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.bvec3_from_bool_mat2x3_vs
+KHR-GL31.shaders30.glsl_constructors.bvec3_from_bool_mat2x3_fs
+KHR-GL31.shaders30.glsl_constructors.bvec3_from_bool_mat2x3_bool_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.bvec3_from_bool_mat2x3_bool_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.bvec3_from_bool_mat2x4_vs
+KHR-GL31.shaders30.glsl_constructors.bvec3_from_bool_mat2x4_fs
+KHR-GL31.shaders30.glsl_constructors.bvec3_from_bool_mat2x4_bool_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.bvec3_from_bool_mat2x4_bool_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.bvec3_from_bool_mat3_vs
+KHR-GL31.shaders30.glsl_constructors.bvec3_from_bool_mat3_fs
+KHR-GL31.shaders30.glsl_constructors.bvec3_from_bool_mat3_bool_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.bvec3_from_bool_mat3_bool_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.bvec3_from_bool_mat3x2_vs
+KHR-GL31.shaders30.glsl_constructors.bvec3_from_bool_mat3x2_fs
+KHR-GL31.shaders30.glsl_constructors.bvec3_from_bool_mat3x2_bool_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.bvec3_from_bool_mat3x2_bool_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.bvec3_from_bool_mat3x4_vs
+KHR-GL31.shaders30.glsl_constructors.bvec3_from_bool_mat3x4_fs
+KHR-GL31.shaders30.glsl_constructors.bvec3_from_bool_mat3x4_bool_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.bvec3_from_bool_mat3x4_bool_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.bvec3_from_bool_mat4_vs
+KHR-GL31.shaders30.glsl_constructors.bvec3_from_bool_mat4_fs
+KHR-GL31.shaders30.glsl_constructors.bvec3_from_bool_mat4_bool_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.bvec3_from_bool_mat4_bool_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.bvec3_from_bool_mat4x2_vs
+KHR-GL31.shaders30.glsl_constructors.bvec3_from_bool_mat4x2_fs
+KHR-GL31.shaders30.glsl_constructors.bvec3_from_bool_mat4x2_bool_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.bvec3_from_bool_mat4x2_bool_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.bvec3_from_bool_mat4x3_vs
+KHR-GL31.shaders30.glsl_constructors.bvec3_from_bool_mat4x3_fs
+KHR-GL31.shaders30.glsl_constructors.bvec3_from_bool_mat4x3_bool_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.bvec3_from_bool_mat4x3_bool_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.bvec4_from_mat2_vs
+KHR-GL31.shaders30.glsl_constructors.bvec4_from_mat2_fs
+KHR-GL31.shaders30.glsl_constructors.bvec4_from_mat2_mat2_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.bvec4_from_mat2_mat2_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.bvec4_from_mat2x3_vs
+KHR-GL31.shaders30.glsl_constructors.bvec4_from_mat2x3_fs
+KHR-GL31.shaders30.glsl_constructors.bvec4_from_mat2x3_mat2x3_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.bvec4_from_mat2x3_mat2x3_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.bvec4_from_mat2x4_vs
+KHR-GL31.shaders30.glsl_constructors.bvec4_from_mat2x4_fs
+KHR-GL31.shaders30.glsl_constructors.bvec4_from_mat2x4_mat2x4_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.bvec4_from_mat2x4_mat2x4_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.bvec4_from_mat3_vs
+KHR-GL31.shaders30.glsl_constructors.bvec4_from_mat3_fs
+KHR-GL31.shaders30.glsl_constructors.bvec4_from_mat3_mat3_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.bvec4_from_mat3_mat3_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.bvec4_from_mat3x2_vs
+KHR-GL31.shaders30.glsl_constructors.bvec4_from_mat3x2_fs
+KHR-GL31.shaders30.glsl_constructors.bvec4_from_mat3x2_mat3x2_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.bvec4_from_mat3x2_mat3x2_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.bvec4_from_mat3x4_vs
+KHR-GL31.shaders30.glsl_constructors.bvec4_from_mat3x4_fs
+KHR-GL31.shaders30.glsl_constructors.bvec4_from_mat3x4_mat3x4_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.bvec4_from_mat3x4_mat3x4_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.bvec4_from_mat4_vs
+KHR-GL31.shaders30.glsl_constructors.bvec4_from_mat4_fs
+KHR-GL31.shaders30.glsl_constructors.bvec4_from_mat4_mat4_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.bvec4_from_mat4_mat4_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.bvec4_from_mat4x2_vs
+KHR-GL31.shaders30.glsl_constructors.bvec4_from_mat4x2_fs
+KHR-GL31.shaders30.glsl_constructors.bvec4_from_mat4x2_mat4x2_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.bvec4_from_mat4x2_mat4x2_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.bvec4_from_mat4x3_vs
+KHR-GL31.shaders30.glsl_constructors.bvec4_from_mat4x3_fs
+KHR-GL31.shaders30.glsl_constructors.bvec4_from_mat4x3_mat4x3_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.bvec4_from_mat4x3_mat4x3_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.bvec4_from_bool_mat2_vs
+KHR-GL31.shaders30.glsl_constructors.bvec4_from_bool_mat2_fs
+KHR-GL31.shaders30.glsl_constructors.bvec4_from_bool_mat2_bool_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.bvec4_from_bool_mat2_bool_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.bvec4_from_bool_mat2x3_vs
+KHR-GL31.shaders30.glsl_constructors.bvec4_from_bool_mat2x3_fs
+KHR-GL31.shaders30.glsl_constructors.bvec4_from_bool_mat2x3_bool_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.bvec4_from_bool_mat2x3_bool_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.bvec4_from_bool_mat2x4_vs
+KHR-GL31.shaders30.glsl_constructors.bvec4_from_bool_mat2x4_fs
+KHR-GL31.shaders30.glsl_constructors.bvec4_from_bool_mat2x4_bool_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.bvec4_from_bool_mat2x4_bool_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.bvec4_from_bool_mat3_vs
+KHR-GL31.shaders30.glsl_constructors.bvec4_from_bool_mat3_fs
+KHR-GL31.shaders30.glsl_constructors.bvec4_from_bool_mat3_bool_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.bvec4_from_bool_mat3_bool_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.bvec4_from_bool_mat3x2_vs
+KHR-GL31.shaders30.glsl_constructors.bvec4_from_bool_mat3x2_fs
+KHR-GL31.shaders30.glsl_constructors.bvec4_from_bool_mat3x2_bool_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.bvec4_from_bool_mat3x2_bool_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.bvec4_from_bool_mat3x4_vs
+KHR-GL31.shaders30.glsl_constructors.bvec4_from_bool_mat3x4_fs
+KHR-GL31.shaders30.glsl_constructors.bvec4_from_bool_mat3x4_bool_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.bvec4_from_bool_mat3x4_bool_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.bvec4_from_bool_mat4_vs
+KHR-GL31.shaders30.glsl_constructors.bvec4_from_bool_mat4_fs
+KHR-GL31.shaders30.glsl_constructors.bvec4_from_bool_mat4_bool_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.bvec4_from_bool_mat4_bool_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.bvec4_from_bool_mat4x2_vs
+KHR-GL31.shaders30.glsl_constructors.bvec4_from_bool_mat4x2_fs
+KHR-GL31.shaders30.glsl_constructors.bvec4_from_bool_mat4x2_bool_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.bvec4_from_bool_mat4x2_bool_invalid_fs
+KHR-GL31.shaders30.glsl_constructors.bvec4_from_bool_mat4x3_vs
+KHR-GL31.shaders30.glsl_constructors.bvec4_from_bool_mat4x3_fs
+KHR-GL31.shaders30.glsl_constructors.bvec4_from_bool_mat4x3_bool_invalid_vs
+KHR-GL31.shaders30.glsl_constructors.bvec4_from_bool_mat4x3_bool_invalid_fs
 KHR-GL31.ext_texture_shadow_lod.texture.sampler2darrayshadow_fragment
 KHR-GL31.ext_texture_shadow_lod.texture.sampler2darrayshadow_bias_fragment
 KHR-GL31.ext_texture_shadow_lod.texture.samplercubearrayshadow_vertex
diff --git a/external/openglcts/data/mustpass/gl/khronos_mustpass/4.6.1.x/gl32-master.txt b/external/openglcts/data/mustpass/gl/khronos_mustpass/4.6.1.x/gl32-master.txt
index a02f65f..bb66176 100644
--- a/external/openglcts/data/mustpass/gl/khronos_mustpass/4.6.1.x/gl32-master.txt
+++ b/external/openglcts/data/mustpass/gl/khronos_mustpass/4.6.1.x/gl32-master.txt
@@ -192,6 +192,654 @@
 KHR-GL32.texture_repeat_mode.depth24_stencil8_11x131_2_mirrored_repeat
 KHR-GL32.shaders30.declarations.declarations.redeclare_gl_FragColor
 KHR-GL32.shaders30.declarations.declarations.redeclare_gl_FragData
+KHR-GL32.shaders30.glsl_constructors.vec2_from_mat2_vs
+KHR-GL32.shaders30.glsl_constructors.vec2_from_mat2_fs
+KHR-GL32.shaders30.glsl_constructors.vec2_from_mat2_mat2_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.vec2_from_mat2_mat2_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.vec2_from_mat2x3_vs
+KHR-GL32.shaders30.glsl_constructors.vec2_from_mat2x3_fs
+KHR-GL32.shaders30.glsl_constructors.vec2_from_mat2x3_mat2x3_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.vec2_from_mat2x3_mat2x3_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.vec2_from_mat2x4_vs
+KHR-GL32.shaders30.glsl_constructors.vec2_from_mat2x4_fs
+KHR-GL32.shaders30.glsl_constructors.vec2_from_mat2x4_mat2x4_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.vec2_from_mat2x4_mat2x4_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.vec2_from_mat3_vs
+KHR-GL32.shaders30.glsl_constructors.vec2_from_mat3_fs
+KHR-GL32.shaders30.glsl_constructors.vec2_from_mat3_mat3_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.vec2_from_mat3_mat3_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.vec2_from_mat3x2_vs
+KHR-GL32.shaders30.glsl_constructors.vec2_from_mat3x2_fs
+KHR-GL32.shaders30.glsl_constructors.vec2_from_mat3x2_mat3x2_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.vec2_from_mat3x2_mat3x2_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.vec2_from_mat3x4_vs
+KHR-GL32.shaders30.glsl_constructors.vec2_from_mat3x4_fs
+KHR-GL32.shaders30.glsl_constructors.vec2_from_mat3x4_mat3x4_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.vec2_from_mat3x4_mat3x4_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.vec2_from_mat4_vs
+KHR-GL32.shaders30.glsl_constructors.vec2_from_mat4_fs
+KHR-GL32.shaders30.glsl_constructors.vec2_from_mat4_mat4_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.vec2_from_mat4_mat4_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.vec2_from_mat4x2_vs
+KHR-GL32.shaders30.glsl_constructors.vec2_from_mat4x2_fs
+KHR-GL32.shaders30.glsl_constructors.vec2_from_mat4x2_mat4x2_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.vec2_from_mat4x2_mat4x2_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.vec2_from_mat4x3_vs
+KHR-GL32.shaders30.glsl_constructors.vec2_from_mat4x3_fs
+KHR-GL32.shaders30.glsl_constructors.vec2_from_mat4x3_mat4x3_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.vec2_from_mat4x3_mat4x3_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.vec2_from_float_mat2_vs
+KHR-GL32.shaders30.glsl_constructors.vec2_from_float_mat2_fs
+KHR-GL32.shaders30.glsl_constructors.vec2_from_float_mat2_float_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.vec2_from_float_mat2_float_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.vec2_from_float_mat2x3_vs
+KHR-GL32.shaders30.glsl_constructors.vec2_from_float_mat2x3_fs
+KHR-GL32.shaders30.glsl_constructors.vec2_from_float_mat2x3_float_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.vec2_from_float_mat2x3_float_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.vec2_from_float_mat2x4_vs
+KHR-GL32.shaders30.glsl_constructors.vec2_from_float_mat2x4_fs
+KHR-GL32.shaders30.glsl_constructors.vec2_from_float_mat2x4_float_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.vec2_from_float_mat2x4_float_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.vec2_from_float_mat3_vs
+KHR-GL32.shaders30.glsl_constructors.vec2_from_float_mat3_fs
+KHR-GL32.shaders30.glsl_constructors.vec2_from_float_mat3_float_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.vec2_from_float_mat3_float_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.vec2_from_float_mat3x2_vs
+KHR-GL32.shaders30.glsl_constructors.vec2_from_float_mat3x2_fs
+KHR-GL32.shaders30.glsl_constructors.vec2_from_float_mat3x2_float_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.vec2_from_float_mat3x2_float_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.vec2_from_float_mat3x4_vs
+KHR-GL32.shaders30.glsl_constructors.vec2_from_float_mat3x4_fs
+KHR-GL32.shaders30.glsl_constructors.vec2_from_float_mat3x4_float_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.vec2_from_float_mat3x4_float_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.vec2_from_float_mat4_vs
+KHR-GL32.shaders30.glsl_constructors.vec2_from_float_mat4_fs
+KHR-GL32.shaders30.glsl_constructors.vec2_from_float_mat4_float_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.vec2_from_float_mat4_float_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.vec2_from_float_mat4x2_vs
+KHR-GL32.shaders30.glsl_constructors.vec2_from_float_mat4x2_fs
+KHR-GL32.shaders30.glsl_constructors.vec2_from_float_mat4x2_float_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.vec2_from_float_mat4x2_float_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.vec2_from_float_mat4x3_vs
+KHR-GL32.shaders30.glsl_constructors.vec2_from_float_mat4x3_fs
+KHR-GL32.shaders30.glsl_constructors.vec2_from_float_mat4x3_float_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.vec2_from_float_mat4x3_float_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.vec3_from_mat2_vs
+KHR-GL32.shaders30.glsl_constructors.vec3_from_mat2_fs
+KHR-GL32.shaders30.glsl_constructors.vec3_from_mat2_mat2_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.vec3_from_mat2_mat2_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.vec3_from_mat2x3_vs
+KHR-GL32.shaders30.glsl_constructors.vec3_from_mat2x3_fs
+KHR-GL32.shaders30.glsl_constructors.vec3_from_mat2x3_mat2x3_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.vec3_from_mat2x3_mat2x3_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.vec3_from_mat2x4_vs
+KHR-GL32.shaders30.glsl_constructors.vec3_from_mat2x4_fs
+KHR-GL32.shaders30.glsl_constructors.vec3_from_mat2x4_mat2x4_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.vec3_from_mat2x4_mat2x4_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.vec3_from_mat3_vs
+KHR-GL32.shaders30.glsl_constructors.vec3_from_mat3_fs
+KHR-GL32.shaders30.glsl_constructors.vec3_from_mat3_mat3_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.vec3_from_mat3_mat3_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.vec3_from_mat3x2_vs
+KHR-GL32.shaders30.glsl_constructors.vec3_from_mat3x2_fs
+KHR-GL32.shaders30.glsl_constructors.vec3_from_mat3x2_mat3x2_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.vec3_from_mat3x2_mat3x2_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.vec3_from_mat3x4_vs
+KHR-GL32.shaders30.glsl_constructors.vec3_from_mat3x4_fs
+KHR-GL32.shaders30.glsl_constructors.vec3_from_mat3x4_mat3x4_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.vec3_from_mat3x4_mat3x4_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.vec3_from_mat4_vs
+KHR-GL32.shaders30.glsl_constructors.vec3_from_mat4_fs
+KHR-GL32.shaders30.glsl_constructors.vec3_from_mat4_mat4_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.vec3_from_mat4_mat4_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.vec3_from_mat4x2_vs
+KHR-GL32.shaders30.glsl_constructors.vec3_from_mat4x2_fs
+KHR-GL32.shaders30.glsl_constructors.vec3_from_mat4x2_mat4x2_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.vec3_from_mat4x2_mat4x2_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.vec3_from_mat4x3_vs
+KHR-GL32.shaders30.glsl_constructors.vec3_from_mat4x3_fs
+KHR-GL32.shaders30.glsl_constructors.vec3_from_mat4x3_mat4x3_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.vec3_from_mat4x3_mat4x3_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.vec3_from_float_mat2_vs
+KHR-GL32.shaders30.glsl_constructors.vec3_from_float_mat2_fs
+KHR-GL32.shaders30.glsl_constructors.vec3_from_float_mat2_float_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.vec3_from_float_mat2_float_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.vec3_from_float_mat2x3_vs
+KHR-GL32.shaders30.glsl_constructors.vec3_from_float_mat2x3_fs
+KHR-GL32.shaders30.glsl_constructors.vec3_from_float_mat2x3_float_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.vec3_from_float_mat2x3_float_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.vec3_from_float_mat2x4_vs
+KHR-GL32.shaders30.glsl_constructors.vec3_from_float_mat2x4_fs
+KHR-GL32.shaders30.glsl_constructors.vec3_from_float_mat2x4_float_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.vec3_from_float_mat2x4_float_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.vec3_from_float_mat3_vs
+KHR-GL32.shaders30.glsl_constructors.vec3_from_float_mat3_fs
+KHR-GL32.shaders30.glsl_constructors.vec3_from_float_mat3_float_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.vec3_from_float_mat3_float_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.vec3_from_float_mat3x2_vs
+KHR-GL32.shaders30.glsl_constructors.vec3_from_float_mat3x2_fs
+KHR-GL32.shaders30.glsl_constructors.vec3_from_float_mat3x2_float_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.vec3_from_float_mat3x2_float_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.vec3_from_float_mat3x4_vs
+KHR-GL32.shaders30.glsl_constructors.vec3_from_float_mat3x4_fs
+KHR-GL32.shaders30.glsl_constructors.vec3_from_float_mat3x4_float_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.vec3_from_float_mat3x4_float_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.vec3_from_float_mat4_vs
+KHR-GL32.shaders30.glsl_constructors.vec3_from_float_mat4_fs
+KHR-GL32.shaders30.glsl_constructors.vec3_from_float_mat4_float_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.vec3_from_float_mat4_float_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.vec3_from_float_mat4x2_vs
+KHR-GL32.shaders30.glsl_constructors.vec3_from_float_mat4x2_fs
+KHR-GL32.shaders30.glsl_constructors.vec3_from_float_mat4x2_float_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.vec3_from_float_mat4x2_float_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.vec3_from_float_mat4x3_vs
+KHR-GL32.shaders30.glsl_constructors.vec3_from_float_mat4x3_fs
+KHR-GL32.shaders30.glsl_constructors.vec3_from_float_mat4x3_float_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.vec3_from_float_mat4x3_float_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.vec4_from_mat2_vs
+KHR-GL32.shaders30.glsl_constructors.vec4_from_mat2_fs
+KHR-GL32.shaders30.glsl_constructors.vec4_from_mat2_mat2_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.vec4_from_mat2_mat2_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.vec4_from_mat2x3_vs
+KHR-GL32.shaders30.glsl_constructors.vec4_from_mat2x3_fs
+KHR-GL32.shaders30.glsl_constructors.vec4_from_mat2x3_mat2x3_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.vec4_from_mat2x3_mat2x3_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.vec4_from_mat2x4_vs
+KHR-GL32.shaders30.glsl_constructors.vec4_from_mat2x4_fs
+KHR-GL32.shaders30.glsl_constructors.vec4_from_mat2x4_mat2x4_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.vec4_from_mat2x4_mat2x4_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.vec4_from_mat3_vs
+KHR-GL32.shaders30.glsl_constructors.vec4_from_mat3_fs
+KHR-GL32.shaders30.glsl_constructors.vec4_from_mat3_mat3_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.vec4_from_mat3_mat3_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.vec4_from_mat3x2_vs
+KHR-GL32.shaders30.glsl_constructors.vec4_from_mat3x2_fs
+KHR-GL32.shaders30.glsl_constructors.vec4_from_mat3x2_mat3x2_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.vec4_from_mat3x2_mat3x2_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.vec4_from_mat3x4_vs
+KHR-GL32.shaders30.glsl_constructors.vec4_from_mat3x4_fs
+KHR-GL32.shaders30.glsl_constructors.vec4_from_mat3x4_mat3x4_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.vec4_from_mat3x4_mat3x4_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.vec4_from_mat4_vs
+KHR-GL32.shaders30.glsl_constructors.vec4_from_mat4_fs
+KHR-GL32.shaders30.glsl_constructors.vec4_from_mat4_mat4_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.vec4_from_mat4_mat4_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.vec4_from_mat4x2_vs
+KHR-GL32.shaders30.glsl_constructors.vec4_from_mat4x2_fs
+KHR-GL32.shaders30.glsl_constructors.vec4_from_mat4x2_mat4x2_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.vec4_from_mat4x2_mat4x2_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.vec4_from_mat4x3_vs
+KHR-GL32.shaders30.glsl_constructors.vec4_from_mat4x3_fs
+KHR-GL32.shaders30.glsl_constructors.vec4_from_mat4x3_mat4x3_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.vec4_from_mat4x3_mat4x3_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.vec4_from_float_mat2_vs
+KHR-GL32.shaders30.glsl_constructors.vec4_from_float_mat2_fs
+KHR-GL32.shaders30.glsl_constructors.vec4_from_float_mat2_float_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.vec4_from_float_mat2_float_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.vec4_from_float_mat2x3_vs
+KHR-GL32.shaders30.glsl_constructors.vec4_from_float_mat2x3_fs
+KHR-GL32.shaders30.glsl_constructors.vec4_from_float_mat2x3_float_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.vec4_from_float_mat2x3_float_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.vec4_from_float_mat2x4_vs
+KHR-GL32.shaders30.glsl_constructors.vec4_from_float_mat2x4_fs
+KHR-GL32.shaders30.glsl_constructors.vec4_from_float_mat2x4_float_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.vec4_from_float_mat2x4_float_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.vec4_from_float_mat3_vs
+KHR-GL32.shaders30.glsl_constructors.vec4_from_float_mat3_fs
+KHR-GL32.shaders30.glsl_constructors.vec4_from_float_mat3_float_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.vec4_from_float_mat3_float_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.vec4_from_float_mat3x2_vs
+KHR-GL32.shaders30.glsl_constructors.vec4_from_float_mat3x2_fs
+KHR-GL32.shaders30.glsl_constructors.vec4_from_float_mat3x2_float_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.vec4_from_float_mat3x2_float_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.vec4_from_float_mat3x4_vs
+KHR-GL32.shaders30.glsl_constructors.vec4_from_float_mat3x4_fs
+KHR-GL32.shaders30.glsl_constructors.vec4_from_float_mat3x4_float_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.vec4_from_float_mat3x4_float_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.vec4_from_float_mat4_vs
+KHR-GL32.shaders30.glsl_constructors.vec4_from_float_mat4_fs
+KHR-GL32.shaders30.glsl_constructors.vec4_from_float_mat4_float_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.vec4_from_float_mat4_float_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.vec4_from_float_mat4x2_vs
+KHR-GL32.shaders30.glsl_constructors.vec4_from_float_mat4x2_fs
+KHR-GL32.shaders30.glsl_constructors.vec4_from_float_mat4x2_float_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.vec4_from_float_mat4x2_float_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.vec4_from_float_mat4x3_vs
+KHR-GL32.shaders30.glsl_constructors.vec4_from_float_mat4x3_fs
+KHR-GL32.shaders30.glsl_constructors.vec4_from_float_mat4x3_float_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.vec4_from_float_mat4x3_float_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.ivec2_from_mat2_vs
+KHR-GL32.shaders30.glsl_constructors.ivec2_from_mat2_fs
+KHR-GL32.shaders30.glsl_constructors.ivec2_from_mat2_mat2_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.ivec2_from_mat2_mat2_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.ivec2_from_mat2x3_vs
+KHR-GL32.shaders30.glsl_constructors.ivec2_from_mat2x3_fs
+KHR-GL32.shaders30.glsl_constructors.ivec2_from_mat2x3_mat2x3_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.ivec2_from_mat2x3_mat2x3_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.ivec2_from_mat2x4_vs
+KHR-GL32.shaders30.glsl_constructors.ivec2_from_mat2x4_fs
+KHR-GL32.shaders30.glsl_constructors.ivec2_from_mat2x4_mat2x4_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.ivec2_from_mat2x4_mat2x4_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.ivec2_from_mat3_vs
+KHR-GL32.shaders30.glsl_constructors.ivec2_from_mat3_fs
+KHR-GL32.shaders30.glsl_constructors.ivec2_from_mat3_mat3_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.ivec2_from_mat3_mat3_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.ivec2_from_mat3x2_vs
+KHR-GL32.shaders30.glsl_constructors.ivec2_from_mat3x2_fs
+KHR-GL32.shaders30.glsl_constructors.ivec2_from_mat3x2_mat3x2_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.ivec2_from_mat3x2_mat3x2_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.ivec2_from_mat3x4_vs
+KHR-GL32.shaders30.glsl_constructors.ivec2_from_mat3x4_fs
+KHR-GL32.shaders30.glsl_constructors.ivec2_from_mat3x4_mat3x4_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.ivec2_from_mat3x4_mat3x4_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.ivec2_from_mat4_vs
+KHR-GL32.shaders30.glsl_constructors.ivec2_from_mat4_fs
+KHR-GL32.shaders30.glsl_constructors.ivec2_from_mat4_mat4_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.ivec2_from_mat4_mat4_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.ivec2_from_mat4x2_vs
+KHR-GL32.shaders30.glsl_constructors.ivec2_from_mat4x2_fs
+KHR-GL32.shaders30.glsl_constructors.ivec2_from_mat4x2_mat4x2_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.ivec2_from_mat4x2_mat4x2_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.ivec2_from_mat4x3_vs
+KHR-GL32.shaders30.glsl_constructors.ivec2_from_mat4x3_fs
+KHR-GL32.shaders30.glsl_constructors.ivec2_from_mat4x3_mat4x3_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.ivec2_from_mat4x3_mat4x3_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.ivec2_from_int_mat2_vs
+KHR-GL32.shaders30.glsl_constructors.ivec2_from_int_mat2_fs
+KHR-GL32.shaders30.glsl_constructors.ivec2_from_int_mat2_int_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.ivec2_from_int_mat2_int_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.ivec2_from_int_mat2x3_vs
+KHR-GL32.shaders30.glsl_constructors.ivec2_from_int_mat2x3_fs
+KHR-GL32.shaders30.glsl_constructors.ivec2_from_int_mat2x3_int_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.ivec2_from_int_mat2x3_int_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.ivec2_from_int_mat2x4_vs
+KHR-GL32.shaders30.glsl_constructors.ivec2_from_int_mat2x4_fs
+KHR-GL32.shaders30.glsl_constructors.ivec2_from_int_mat2x4_int_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.ivec2_from_int_mat2x4_int_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.ivec2_from_int_mat3_vs
+KHR-GL32.shaders30.glsl_constructors.ivec2_from_int_mat3_fs
+KHR-GL32.shaders30.glsl_constructors.ivec2_from_int_mat3_int_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.ivec2_from_int_mat3_int_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.ivec2_from_int_mat3x2_vs
+KHR-GL32.shaders30.glsl_constructors.ivec2_from_int_mat3x2_fs
+KHR-GL32.shaders30.glsl_constructors.ivec2_from_int_mat3x2_int_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.ivec2_from_int_mat3x2_int_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.ivec2_from_int_mat3x4_vs
+KHR-GL32.shaders30.glsl_constructors.ivec2_from_int_mat3x4_fs
+KHR-GL32.shaders30.glsl_constructors.ivec2_from_int_mat3x4_int_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.ivec2_from_int_mat3x4_int_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.ivec2_from_int_mat4_vs
+KHR-GL32.shaders30.glsl_constructors.ivec2_from_int_mat4_fs
+KHR-GL32.shaders30.glsl_constructors.ivec2_from_int_mat4_int_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.ivec2_from_int_mat4_int_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.ivec2_from_int_mat4x2_vs
+KHR-GL32.shaders30.glsl_constructors.ivec2_from_int_mat4x2_fs
+KHR-GL32.shaders30.glsl_constructors.ivec2_from_int_mat4x2_int_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.ivec2_from_int_mat4x2_int_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.ivec2_from_int_mat4x3_vs
+KHR-GL32.shaders30.glsl_constructors.ivec2_from_int_mat4x3_fs
+KHR-GL32.shaders30.glsl_constructors.ivec2_from_int_mat4x3_int_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.ivec2_from_int_mat4x3_int_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.ivec3_from_mat2_vs
+KHR-GL32.shaders30.glsl_constructors.ivec3_from_mat2_fs
+KHR-GL32.shaders30.glsl_constructors.ivec3_from_mat2_mat2_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.ivec3_from_mat2_mat2_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.ivec3_from_mat2x3_vs
+KHR-GL32.shaders30.glsl_constructors.ivec3_from_mat2x3_fs
+KHR-GL32.shaders30.glsl_constructors.ivec3_from_mat2x3_mat2x3_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.ivec3_from_mat2x3_mat2x3_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.ivec3_from_mat2x4_vs
+KHR-GL32.shaders30.glsl_constructors.ivec3_from_mat2x4_fs
+KHR-GL32.shaders30.glsl_constructors.ivec3_from_mat2x4_mat2x4_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.ivec3_from_mat2x4_mat2x4_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.ivec3_from_mat3_vs
+KHR-GL32.shaders30.glsl_constructors.ivec3_from_mat3_fs
+KHR-GL32.shaders30.glsl_constructors.ivec3_from_mat3_mat3_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.ivec3_from_mat3_mat3_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.ivec3_from_mat3x2_vs
+KHR-GL32.shaders30.glsl_constructors.ivec3_from_mat3x2_fs
+KHR-GL32.shaders30.glsl_constructors.ivec3_from_mat3x2_mat3x2_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.ivec3_from_mat3x2_mat3x2_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.ivec3_from_mat3x4_vs
+KHR-GL32.shaders30.glsl_constructors.ivec3_from_mat3x4_fs
+KHR-GL32.shaders30.glsl_constructors.ivec3_from_mat3x4_mat3x4_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.ivec3_from_mat3x4_mat3x4_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.ivec3_from_mat4_vs
+KHR-GL32.shaders30.glsl_constructors.ivec3_from_mat4_fs
+KHR-GL32.shaders30.glsl_constructors.ivec3_from_mat4_mat4_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.ivec3_from_mat4_mat4_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.ivec3_from_mat4x2_vs
+KHR-GL32.shaders30.glsl_constructors.ivec3_from_mat4x2_fs
+KHR-GL32.shaders30.glsl_constructors.ivec3_from_mat4x2_mat4x2_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.ivec3_from_mat4x2_mat4x2_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.ivec3_from_mat4x3_vs
+KHR-GL32.shaders30.glsl_constructors.ivec3_from_mat4x3_fs
+KHR-GL32.shaders30.glsl_constructors.ivec3_from_mat4x3_mat4x3_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.ivec3_from_mat4x3_mat4x3_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.ivec3_from_int_mat2_vs
+KHR-GL32.shaders30.glsl_constructors.ivec3_from_int_mat2_fs
+KHR-GL32.shaders30.glsl_constructors.ivec3_from_int_mat2_int_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.ivec3_from_int_mat2_int_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.ivec3_from_int_mat2x3_vs
+KHR-GL32.shaders30.glsl_constructors.ivec3_from_int_mat2x3_fs
+KHR-GL32.shaders30.glsl_constructors.ivec3_from_int_mat2x3_int_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.ivec3_from_int_mat2x3_int_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.ivec3_from_int_mat2x4_vs
+KHR-GL32.shaders30.glsl_constructors.ivec3_from_int_mat2x4_fs
+KHR-GL32.shaders30.glsl_constructors.ivec3_from_int_mat2x4_int_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.ivec3_from_int_mat2x4_int_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.ivec3_from_int_mat3_vs
+KHR-GL32.shaders30.glsl_constructors.ivec3_from_int_mat3_fs
+KHR-GL32.shaders30.glsl_constructors.ivec3_from_int_mat3_int_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.ivec3_from_int_mat3_int_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.ivec3_from_int_mat3x2_vs
+KHR-GL32.shaders30.glsl_constructors.ivec3_from_int_mat3x2_fs
+KHR-GL32.shaders30.glsl_constructors.ivec3_from_int_mat3x2_int_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.ivec3_from_int_mat3x2_int_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.ivec3_from_int_mat3x4_vs
+KHR-GL32.shaders30.glsl_constructors.ivec3_from_int_mat3x4_fs
+KHR-GL32.shaders30.glsl_constructors.ivec3_from_int_mat3x4_int_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.ivec3_from_int_mat3x4_int_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.ivec3_from_int_mat4_vs
+KHR-GL32.shaders30.glsl_constructors.ivec3_from_int_mat4_fs
+KHR-GL32.shaders30.glsl_constructors.ivec3_from_int_mat4_int_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.ivec3_from_int_mat4_int_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.ivec3_from_int_mat4x2_vs
+KHR-GL32.shaders30.glsl_constructors.ivec3_from_int_mat4x2_fs
+KHR-GL32.shaders30.glsl_constructors.ivec3_from_int_mat4x2_int_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.ivec3_from_int_mat4x2_int_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.ivec3_from_int_mat4x3_vs
+KHR-GL32.shaders30.glsl_constructors.ivec3_from_int_mat4x3_fs
+KHR-GL32.shaders30.glsl_constructors.ivec3_from_int_mat4x3_int_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.ivec3_from_int_mat4x3_int_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.ivec4_from_mat2_vs
+KHR-GL32.shaders30.glsl_constructors.ivec4_from_mat2_fs
+KHR-GL32.shaders30.glsl_constructors.ivec4_from_mat2_mat2_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.ivec4_from_mat2_mat2_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.ivec4_from_mat2x3_vs
+KHR-GL32.shaders30.glsl_constructors.ivec4_from_mat2x3_fs
+KHR-GL32.shaders30.glsl_constructors.ivec4_from_mat2x3_mat2x3_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.ivec4_from_mat2x3_mat2x3_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.ivec4_from_mat2x4_vs
+KHR-GL32.shaders30.glsl_constructors.ivec4_from_mat2x4_fs
+KHR-GL32.shaders30.glsl_constructors.ivec4_from_mat2x4_mat2x4_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.ivec4_from_mat2x4_mat2x4_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.ivec4_from_mat3_vs
+KHR-GL32.shaders30.glsl_constructors.ivec4_from_mat3_fs
+KHR-GL32.shaders30.glsl_constructors.ivec4_from_mat3_mat3_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.ivec4_from_mat3_mat3_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.ivec4_from_mat3x2_vs
+KHR-GL32.shaders30.glsl_constructors.ivec4_from_mat3x2_fs
+KHR-GL32.shaders30.glsl_constructors.ivec4_from_mat3x2_mat3x2_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.ivec4_from_mat3x2_mat3x2_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.ivec4_from_mat3x4_vs
+KHR-GL32.shaders30.glsl_constructors.ivec4_from_mat3x4_fs
+KHR-GL32.shaders30.glsl_constructors.ivec4_from_mat3x4_mat3x4_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.ivec4_from_mat3x4_mat3x4_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.ivec4_from_mat4_vs
+KHR-GL32.shaders30.glsl_constructors.ivec4_from_mat4_fs
+KHR-GL32.shaders30.glsl_constructors.ivec4_from_mat4_mat4_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.ivec4_from_mat4_mat4_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.ivec4_from_mat4x2_vs
+KHR-GL32.shaders30.glsl_constructors.ivec4_from_mat4x2_fs
+KHR-GL32.shaders30.glsl_constructors.ivec4_from_mat4x2_mat4x2_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.ivec4_from_mat4x2_mat4x2_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.ivec4_from_mat4x3_vs
+KHR-GL32.shaders30.glsl_constructors.ivec4_from_mat4x3_fs
+KHR-GL32.shaders30.glsl_constructors.ivec4_from_mat4x3_mat4x3_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.ivec4_from_mat4x3_mat4x3_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.ivec4_from_int_mat2_vs
+KHR-GL32.shaders30.glsl_constructors.ivec4_from_int_mat2_fs
+KHR-GL32.shaders30.glsl_constructors.ivec4_from_int_mat2_int_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.ivec4_from_int_mat2_int_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.ivec4_from_int_mat2x3_vs
+KHR-GL32.shaders30.glsl_constructors.ivec4_from_int_mat2x3_fs
+KHR-GL32.shaders30.glsl_constructors.ivec4_from_int_mat2x3_int_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.ivec4_from_int_mat2x3_int_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.ivec4_from_int_mat2x4_vs
+KHR-GL32.shaders30.glsl_constructors.ivec4_from_int_mat2x4_fs
+KHR-GL32.shaders30.glsl_constructors.ivec4_from_int_mat2x4_int_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.ivec4_from_int_mat2x4_int_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.ivec4_from_int_mat3_vs
+KHR-GL32.shaders30.glsl_constructors.ivec4_from_int_mat3_fs
+KHR-GL32.shaders30.glsl_constructors.ivec4_from_int_mat3_int_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.ivec4_from_int_mat3_int_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.ivec4_from_int_mat3x2_vs
+KHR-GL32.shaders30.glsl_constructors.ivec4_from_int_mat3x2_fs
+KHR-GL32.shaders30.glsl_constructors.ivec4_from_int_mat3x2_int_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.ivec4_from_int_mat3x2_int_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.ivec4_from_int_mat3x4_vs
+KHR-GL32.shaders30.glsl_constructors.ivec4_from_int_mat3x4_fs
+KHR-GL32.shaders30.glsl_constructors.ivec4_from_int_mat3x4_int_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.ivec4_from_int_mat3x4_int_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.ivec4_from_int_mat4_vs
+KHR-GL32.shaders30.glsl_constructors.ivec4_from_int_mat4_fs
+KHR-GL32.shaders30.glsl_constructors.ivec4_from_int_mat4_int_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.ivec4_from_int_mat4_int_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.ivec4_from_int_mat4x2_vs
+KHR-GL32.shaders30.glsl_constructors.ivec4_from_int_mat4x2_fs
+KHR-GL32.shaders30.glsl_constructors.ivec4_from_int_mat4x2_int_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.ivec4_from_int_mat4x2_int_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.ivec4_from_int_mat4x3_vs
+KHR-GL32.shaders30.glsl_constructors.ivec4_from_int_mat4x3_fs
+KHR-GL32.shaders30.glsl_constructors.ivec4_from_int_mat4x3_int_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.ivec4_from_int_mat4x3_int_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.bvec2_from_mat2_vs
+KHR-GL32.shaders30.glsl_constructors.bvec2_from_mat2_fs
+KHR-GL32.shaders30.glsl_constructors.bvec2_from_mat2_mat2_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.bvec2_from_mat2_mat2_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.bvec2_from_mat2x3_vs
+KHR-GL32.shaders30.glsl_constructors.bvec2_from_mat2x3_fs
+KHR-GL32.shaders30.glsl_constructors.bvec2_from_mat2x3_mat2x3_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.bvec2_from_mat2x3_mat2x3_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.bvec2_from_mat2x4_vs
+KHR-GL32.shaders30.glsl_constructors.bvec2_from_mat2x4_fs
+KHR-GL32.shaders30.glsl_constructors.bvec2_from_mat2x4_mat2x4_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.bvec2_from_mat2x4_mat2x4_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.bvec2_from_mat3_vs
+KHR-GL32.shaders30.glsl_constructors.bvec2_from_mat3_fs
+KHR-GL32.shaders30.glsl_constructors.bvec2_from_mat3_mat3_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.bvec2_from_mat3_mat3_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.bvec2_from_mat3x2_vs
+KHR-GL32.shaders30.glsl_constructors.bvec2_from_mat3x2_fs
+KHR-GL32.shaders30.glsl_constructors.bvec2_from_mat3x2_mat3x2_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.bvec2_from_mat3x2_mat3x2_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.bvec2_from_mat3x4_vs
+KHR-GL32.shaders30.glsl_constructors.bvec2_from_mat3x4_fs
+KHR-GL32.shaders30.glsl_constructors.bvec2_from_mat3x4_mat3x4_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.bvec2_from_mat3x4_mat3x4_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.bvec2_from_mat4_vs
+KHR-GL32.shaders30.glsl_constructors.bvec2_from_mat4_fs
+KHR-GL32.shaders30.glsl_constructors.bvec2_from_mat4_mat4_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.bvec2_from_mat4_mat4_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.bvec2_from_mat4x2_vs
+KHR-GL32.shaders30.glsl_constructors.bvec2_from_mat4x2_fs
+KHR-GL32.shaders30.glsl_constructors.bvec2_from_mat4x2_mat4x2_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.bvec2_from_mat4x2_mat4x2_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.bvec2_from_mat4x3_vs
+KHR-GL32.shaders30.glsl_constructors.bvec2_from_mat4x3_fs
+KHR-GL32.shaders30.glsl_constructors.bvec2_from_mat4x3_mat4x3_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.bvec2_from_mat4x3_mat4x3_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.bvec2_from_bool_mat2_vs
+KHR-GL32.shaders30.glsl_constructors.bvec2_from_bool_mat2_fs
+KHR-GL32.shaders30.glsl_constructors.bvec2_from_bool_mat2_bool_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.bvec2_from_bool_mat2_bool_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.bvec2_from_bool_mat2x3_vs
+KHR-GL32.shaders30.glsl_constructors.bvec2_from_bool_mat2x3_fs
+KHR-GL32.shaders30.glsl_constructors.bvec2_from_bool_mat2x3_bool_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.bvec2_from_bool_mat2x3_bool_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.bvec2_from_bool_mat2x4_vs
+KHR-GL32.shaders30.glsl_constructors.bvec2_from_bool_mat2x4_fs
+KHR-GL32.shaders30.glsl_constructors.bvec2_from_bool_mat2x4_bool_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.bvec2_from_bool_mat2x4_bool_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.bvec2_from_bool_mat3_vs
+KHR-GL32.shaders30.glsl_constructors.bvec2_from_bool_mat3_fs
+KHR-GL32.shaders30.glsl_constructors.bvec2_from_bool_mat3_bool_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.bvec2_from_bool_mat3_bool_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.bvec2_from_bool_mat3x2_vs
+KHR-GL32.shaders30.glsl_constructors.bvec2_from_bool_mat3x2_fs
+KHR-GL32.shaders30.glsl_constructors.bvec2_from_bool_mat3x2_bool_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.bvec2_from_bool_mat3x2_bool_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.bvec2_from_bool_mat3x4_vs
+KHR-GL32.shaders30.glsl_constructors.bvec2_from_bool_mat3x4_fs
+KHR-GL32.shaders30.glsl_constructors.bvec2_from_bool_mat3x4_bool_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.bvec2_from_bool_mat3x4_bool_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.bvec2_from_bool_mat4_vs
+KHR-GL32.shaders30.glsl_constructors.bvec2_from_bool_mat4_fs
+KHR-GL32.shaders30.glsl_constructors.bvec2_from_bool_mat4_bool_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.bvec2_from_bool_mat4_bool_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.bvec2_from_bool_mat4x2_vs
+KHR-GL32.shaders30.glsl_constructors.bvec2_from_bool_mat4x2_fs
+KHR-GL32.shaders30.glsl_constructors.bvec2_from_bool_mat4x2_bool_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.bvec2_from_bool_mat4x2_bool_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.bvec2_from_bool_mat4x3_vs
+KHR-GL32.shaders30.glsl_constructors.bvec2_from_bool_mat4x3_fs
+KHR-GL32.shaders30.glsl_constructors.bvec2_from_bool_mat4x3_bool_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.bvec2_from_bool_mat4x3_bool_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.bvec3_from_mat2_vs
+KHR-GL32.shaders30.glsl_constructors.bvec3_from_mat2_fs
+KHR-GL32.shaders30.glsl_constructors.bvec3_from_mat2_mat2_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.bvec3_from_mat2_mat2_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.bvec3_from_mat2x3_vs
+KHR-GL32.shaders30.glsl_constructors.bvec3_from_mat2x3_fs
+KHR-GL32.shaders30.glsl_constructors.bvec3_from_mat2x3_mat2x3_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.bvec3_from_mat2x3_mat2x3_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.bvec3_from_mat2x4_vs
+KHR-GL32.shaders30.glsl_constructors.bvec3_from_mat2x4_fs
+KHR-GL32.shaders30.glsl_constructors.bvec3_from_mat2x4_mat2x4_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.bvec3_from_mat2x4_mat2x4_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.bvec3_from_mat3_vs
+KHR-GL32.shaders30.glsl_constructors.bvec3_from_mat3_fs
+KHR-GL32.shaders30.glsl_constructors.bvec3_from_mat3_mat3_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.bvec3_from_mat3_mat3_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.bvec3_from_mat3x2_vs
+KHR-GL32.shaders30.glsl_constructors.bvec3_from_mat3x2_fs
+KHR-GL32.shaders30.glsl_constructors.bvec3_from_mat3x2_mat3x2_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.bvec3_from_mat3x2_mat3x2_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.bvec3_from_mat3x4_vs
+KHR-GL32.shaders30.glsl_constructors.bvec3_from_mat3x4_fs
+KHR-GL32.shaders30.glsl_constructors.bvec3_from_mat3x4_mat3x4_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.bvec3_from_mat3x4_mat3x4_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.bvec3_from_mat4_vs
+KHR-GL32.shaders30.glsl_constructors.bvec3_from_mat4_fs
+KHR-GL32.shaders30.glsl_constructors.bvec3_from_mat4_mat4_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.bvec3_from_mat4_mat4_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.bvec3_from_mat4x2_vs
+KHR-GL32.shaders30.glsl_constructors.bvec3_from_mat4x2_fs
+KHR-GL32.shaders30.glsl_constructors.bvec3_from_mat4x2_mat4x2_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.bvec3_from_mat4x2_mat4x2_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.bvec3_from_mat4x3_vs
+KHR-GL32.shaders30.glsl_constructors.bvec3_from_mat4x3_fs
+KHR-GL32.shaders30.glsl_constructors.bvec3_from_mat4x3_mat4x3_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.bvec3_from_mat4x3_mat4x3_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.bvec3_from_bool_mat2_vs
+KHR-GL32.shaders30.glsl_constructors.bvec3_from_bool_mat2_fs
+KHR-GL32.shaders30.glsl_constructors.bvec3_from_bool_mat2_bool_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.bvec3_from_bool_mat2_bool_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.bvec3_from_bool_mat2x3_vs
+KHR-GL32.shaders30.glsl_constructors.bvec3_from_bool_mat2x3_fs
+KHR-GL32.shaders30.glsl_constructors.bvec3_from_bool_mat2x3_bool_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.bvec3_from_bool_mat2x3_bool_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.bvec3_from_bool_mat2x4_vs
+KHR-GL32.shaders30.glsl_constructors.bvec3_from_bool_mat2x4_fs
+KHR-GL32.shaders30.glsl_constructors.bvec3_from_bool_mat2x4_bool_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.bvec3_from_bool_mat2x4_bool_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.bvec3_from_bool_mat3_vs
+KHR-GL32.shaders30.glsl_constructors.bvec3_from_bool_mat3_fs
+KHR-GL32.shaders30.glsl_constructors.bvec3_from_bool_mat3_bool_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.bvec3_from_bool_mat3_bool_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.bvec3_from_bool_mat3x2_vs
+KHR-GL32.shaders30.glsl_constructors.bvec3_from_bool_mat3x2_fs
+KHR-GL32.shaders30.glsl_constructors.bvec3_from_bool_mat3x2_bool_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.bvec3_from_bool_mat3x2_bool_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.bvec3_from_bool_mat3x4_vs
+KHR-GL32.shaders30.glsl_constructors.bvec3_from_bool_mat3x4_fs
+KHR-GL32.shaders30.glsl_constructors.bvec3_from_bool_mat3x4_bool_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.bvec3_from_bool_mat3x4_bool_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.bvec3_from_bool_mat4_vs
+KHR-GL32.shaders30.glsl_constructors.bvec3_from_bool_mat4_fs
+KHR-GL32.shaders30.glsl_constructors.bvec3_from_bool_mat4_bool_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.bvec3_from_bool_mat4_bool_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.bvec3_from_bool_mat4x2_vs
+KHR-GL32.shaders30.glsl_constructors.bvec3_from_bool_mat4x2_fs
+KHR-GL32.shaders30.glsl_constructors.bvec3_from_bool_mat4x2_bool_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.bvec3_from_bool_mat4x2_bool_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.bvec3_from_bool_mat4x3_vs
+KHR-GL32.shaders30.glsl_constructors.bvec3_from_bool_mat4x3_fs
+KHR-GL32.shaders30.glsl_constructors.bvec3_from_bool_mat4x3_bool_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.bvec3_from_bool_mat4x3_bool_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.bvec4_from_mat2_vs
+KHR-GL32.shaders30.glsl_constructors.bvec4_from_mat2_fs
+KHR-GL32.shaders30.glsl_constructors.bvec4_from_mat2_mat2_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.bvec4_from_mat2_mat2_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.bvec4_from_mat2x3_vs
+KHR-GL32.shaders30.glsl_constructors.bvec4_from_mat2x3_fs
+KHR-GL32.shaders30.glsl_constructors.bvec4_from_mat2x3_mat2x3_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.bvec4_from_mat2x3_mat2x3_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.bvec4_from_mat2x4_vs
+KHR-GL32.shaders30.glsl_constructors.bvec4_from_mat2x4_fs
+KHR-GL32.shaders30.glsl_constructors.bvec4_from_mat2x4_mat2x4_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.bvec4_from_mat2x4_mat2x4_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.bvec4_from_mat3_vs
+KHR-GL32.shaders30.glsl_constructors.bvec4_from_mat3_fs
+KHR-GL32.shaders30.glsl_constructors.bvec4_from_mat3_mat3_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.bvec4_from_mat3_mat3_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.bvec4_from_mat3x2_vs
+KHR-GL32.shaders30.glsl_constructors.bvec4_from_mat3x2_fs
+KHR-GL32.shaders30.glsl_constructors.bvec4_from_mat3x2_mat3x2_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.bvec4_from_mat3x2_mat3x2_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.bvec4_from_mat3x4_vs
+KHR-GL32.shaders30.glsl_constructors.bvec4_from_mat3x4_fs
+KHR-GL32.shaders30.glsl_constructors.bvec4_from_mat3x4_mat3x4_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.bvec4_from_mat3x4_mat3x4_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.bvec4_from_mat4_vs
+KHR-GL32.shaders30.glsl_constructors.bvec4_from_mat4_fs
+KHR-GL32.shaders30.glsl_constructors.bvec4_from_mat4_mat4_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.bvec4_from_mat4_mat4_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.bvec4_from_mat4x2_vs
+KHR-GL32.shaders30.glsl_constructors.bvec4_from_mat4x2_fs
+KHR-GL32.shaders30.glsl_constructors.bvec4_from_mat4x2_mat4x2_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.bvec4_from_mat4x2_mat4x2_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.bvec4_from_mat4x3_vs
+KHR-GL32.shaders30.glsl_constructors.bvec4_from_mat4x3_fs
+KHR-GL32.shaders30.glsl_constructors.bvec4_from_mat4x3_mat4x3_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.bvec4_from_mat4x3_mat4x3_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.bvec4_from_bool_mat2_vs
+KHR-GL32.shaders30.glsl_constructors.bvec4_from_bool_mat2_fs
+KHR-GL32.shaders30.glsl_constructors.bvec4_from_bool_mat2_bool_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.bvec4_from_bool_mat2_bool_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.bvec4_from_bool_mat2x3_vs
+KHR-GL32.shaders30.glsl_constructors.bvec4_from_bool_mat2x3_fs
+KHR-GL32.shaders30.glsl_constructors.bvec4_from_bool_mat2x3_bool_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.bvec4_from_bool_mat2x3_bool_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.bvec4_from_bool_mat2x4_vs
+KHR-GL32.shaders30.glsl_constructors.bvec4_from_bool_mat2x4_fs
+KHR-GL32.shaders30.glsl_constructors.bvec4_from_bool_mat2x4_bool_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.bvec4_from_bool_mat2x4_bool_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.bvec4_from_bool_mat3_vs
+KHR-GL32.shaders30.glsl_constructors.bvec4_from_bool_mat3_fs
+KHR-GL32.shaders30.glsl_constructors.bvec4_from_bool_mat3_bool_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.bvec4_from_bool_mat3_bool_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.bvec4_from_bool_mat3x2_vs
+KHR-GL32.shaders30.glsl_constructors.bvec4_from_bool_mat3x2_fs
+KHR-GL32.shaders30.glsl_constructors.bvec4_from_bool_mat3x2_bool_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.bvec4_from_bool_mat3x2_bool_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.bvec4_from_bool_mat3x4_vs
+KHR-GL32.shaders30.glsl_constructors.bvec4_from_bool_mat3x4_fs
+KHR-GL32.shaders30.glsl_constructors.bvec4_from_bool_mat3x4_bool_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.bvec4_from_bool_mat3x4_bool_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.bvec4_from_bool_mat4_vs
+KHR-GL32.shaders30.glsl_constructors.bvec4_from_bool_mat4_fs
+KHR-GL32.shaders30.glsl_constructors.bvec4_from_bool_mat4_bool_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.bvec4_from_bool_mat4_bool_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.bvec4_from_bool_mat4x2_vs
+KHR-GL32.shaders30.glsl_constructors.bvec4_from_bool_mat4x2_fs
+KHR-GL32.shaders30.glsl_constructors.bvec4_from_bool_mat4x2_bool_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.bvec4_from_bool_mat4x2_bool_invalid_fs
+KHR-GL32.shaders30.glsl_constructors.bvec4_from_bool_mat4x3_vs
+KHR-GL32.shaders30.glsl_constructors.bvec4_from_bool_mat4x3_fs
+KHR-GL32.shaders30.glsl_constructors.bvec4_from_bool_mat4x3_bool_invalid_vs
+KHR-GL32.shaders30.glsl_constructors.bvec4_from_bool_mat4x3_bool_invalid_fs
 KHR-GL32.ext_texture_shadow_lod.texture.sampler2darrayshadow_fragment
 KHR-GL32.ext_texture_shadow_lod.texture.sampler2darrayshadow_bias_fragment
 KHR-GL32.ext_texture_shadow_lod.texture.samplercubearrayshadow_vertex
diff --git a/external/openglcts/data/mustpass/gl/khronos_mustpass/4.6.1.x/gl33-master.txt b/external/openglcts/data/mustpass/gl/khronos_mustpass/4.6.1.x/gl33-master.txt
index 716d41e..e78436b 100644
--- a/external/openglcts/data/mustpass/gl/khronos_mustpass/4.6.1.x/gl33-master.txt
+++ b/external/openglcts/data/mustpass/gl/khronos_mustpass/4.6.1.x/gl33-master.txt
@@ -192,6 +192,654 @@
 KHR-GL33.texture_repeat_mode.depth24_stencil8_11x131_2_mirrored_repeat
 KHR-GL33.shaders30.declarations.declarations.redeclare_gl_FragColor
 KHR-GL33.shaders30.declarations.declarations.redeclare_gl_FragData
+KHR-GL33.shaders30.glsl_constructors.vec2_from_mat2_vs
+KHR-GL33.shaders30.glsl_constructors.vec2_from_mat2_fs
+KHR-GL33.shaders30.glsl_constructors.vec2_from_mat2_mat2_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.vec2_from_mat2_mat2_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.vec2_from_mat2x3_vs
+KHR-GL33.shaders30.glsl_constructors.vec2_from_mat2x3_fs
+KHR-GL33.shaders30.glsl_constructors.vec2_from_mat2x3_mat2x3_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.vec2_from_mat2x3_mat2x3_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.vec2_from_mat2x4_vs
+KHR-GL33.shaders30.glsl_constructors.vec2_from_mat2x4_fs
+KHR-GL33.shaders30.glsl_constructors.vec2_from_mat2x4_mat2x4_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.vec2_from_mat2x4_mat2x4_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.vec2_from_mat3_vs
+KHR-GL33.shaders30.glsl_constructors.vec2_from_mat3_fs
+KHR-GL33.shaders30.glsl_constructors.vec2_from_mat3_mat3_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.vec2_from_mat3_mat3_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.vec2_from_mat3x2_vs
+KHR-GL33.shaders30.glsl_constructors.vec2_from_mat3x2_fs
+KHR-GL33.shaders30.glsl_constructors.vec2_from_mat3x2_mat3x2_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.vec2_from_mat3x2_mat3x2_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.vec2_from_mat3x4_vs
+KHR-GL33.shaders30.glsl_constructors.vec2_from_mat3x4_fs
+KHR-GL33.shaders30.glsl_constructors.vec2_from_mat3x4_mat3x4_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.vec2_from_mat3x4_mat3x4_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.vec2_from_mat4_vs
+KHR-GL33.shaders30.glsl_constructors.vec2_from_mat4_fs
+KHR-GL33.shaders30.glsl_constructors.vec2_from_mat4_mat4_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.vec2_from_mat4_mat4_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.vec2_from_mat4x2_vs
+KHR-GL33.shaders30.glsl_constructors.vec2_from_mat4x2_fs
+KHR-GL33.shaders30.glsl_constructors.vec2_from_mat4x2_mat4x2_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.vec2_from_mat4x2_mat4x2_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.vec2_from_mat4x3_vs
+KHR-GL33.shaders30.glsl_constructors.vec2_from_mat4x3_fs
+KHR-GL33.shaders30.glsl_constructors.vec2_from_mat4x3_mat4x3_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.vec2_from_mat4x3_mat4x3_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.vec2_from_float_mat2_vs
+KHR-GL33.shaders30.glsl_constructors.vec2_from_float_mat2_fs
+KHR-GL33.shaders30.glsl_constructors.vec2_from_float_mat2_float_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.vec2_from_float_mat2_float_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.vec2_from_float_mat2x3_vs
+KHR-GL33.shaders30.glsl_constructors.vec2_from_float_mat2x3_fs
+KHR-GL33.shaders30.glsl_constructors.vec2_from_float_mat2x3_float_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.vec2_from_float_mat2x3_float_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.vec2_from_float_mat2x4_vs
+KHR-GL33.shaders30.glsl_constructors.vec2_from_float_mat2x4_fs
+KHR-GL33.shaders30.glsl_constructors.vec2_from_float_mat2x4_float_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.vec2_from_float_mat2x4_float_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.vec2_from_float_mat3_vs
+KHR-GL33.shaders30.glsl_constructors.vec2_from_float_mat3_fs
+KHR-GL33.shaders30.glsl_constructors.vec2_from_float_mat3_float_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.vec2_from_float_mat3_float_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.vec2_from_float_mat3x2_vs
+KHR-GL33.shaders30.glsl_constructors.vec2_from_float_mat3x2_fs
+KHR-GL33.shaders30.glsl_constructors.vec2_from_float_mat3x2_float_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.vec2_from_float_mat3x2_float_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.vec2_from_float_mat3x4_vs
+KHR-GL33.shaders30.glsl_constructors.vec2_from_float_mat3x4_fs
+KHR-GL33.shaders30.glsl_constructors.vec2_from_float_mat3x4_float_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.vec2_from_float_mat3x4_float_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.vec2_from_float_mat4_vs
+KHR-GL33.shaders30.glsl_constructors.vec2_from_float_mat4_fs
+KHR-GL33.shaders30.glsl_constructors.vec2_from_float_mat4_float_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.vec2_from_float_mat4_float_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.vec2_from_float_mat4x2_vs
+KHR-GL33.shaders30.glsl_constructors.vec2_from_float_mat4x2_fs
+KHR-GL33.shaders30.glsl_constructors.vec2_from_float_mat4x2_float_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.vec2_from_float_mat4x2_float_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.vec2_from_float_mat4x3_vs
+KHR-GL33.shaders30.glsl_constructors.vec2_from_float_mat4x3_fs
+KHR-GL33.shaders30.glsl_constructors.vec2_from_float_mat4x3_float_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.vec2_from_float_mat4x3_float_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.vec3_from_mat2_vs
+KHR-GL33.shaders30.glsl_constructors.vec3_from_mat2_fs
+KHR-GL33.shaders30.glsl_constructors.vec3_from_mat2_mat2_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.vec3_from_mat2_mat2_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.vec3_from_mat2x3_vs
+KHR-GL33.shaders30.glsl_constructors.vec3_from_mat2x3_fs
+KHR-GL33.shaders30.glsl_constructors.vec3_from_mat2x3_mat2x3_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.vec3_from_mat2x3_mat2x3_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.vec3_from_mat2x4_vs
+KHR-GL33.shaders30.glsl_constructors.vec3_from_mat2x4_fs
+KHR-GL33.shaders30.glsl_constructors.vec3_from_mat2x4_mat2x4_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.vec3_from_mat2x4_mat2x4_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.vec3_from_mat3_vs
+KHR-GL33.shaders30.glsl_constructors.vec3_from_mat3_fs
+KHR-GL33.shaders30.glsl_constructors.vec3_from_mat3_mat3_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.vec3_from_mat3_mat3_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.vec3_from_mat3x2_vs
+KHR-GL33.shaders30.glsl_constructors.vec3_from_mat3x2_fs
+KHR-GL33.shaders30.glsl_constructors.vec3_from_mat3x2_mat3x2_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.vec3_from_mat3x2_mat3x2_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.vec3_from_mat3x4_vs
+KHR-GL33.shaders30.glsl_constructors.vec3_from_mat3x4_fs
+KHR-GL33.shaders30.glsl_constructors.vec3_from_mat3x4_mat3x4_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.vec3_from_mat3x4_mat3x4_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.vec3_from_mat4_vs
+KHR-GL33.shaders30.glsl_constructors.vec3_from_mat4_fs
+KHR-GL33.shaders30.glsl_constructors.vec3_from_mat4_mat4_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.vec3_from_mat4_mat4_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.vec3_from_mat4x2_vs
+KHR-GL33.shaders30.glsl_constructors.vec3_from_mat4x2_fs
+KHR-GL33.shaders30.glsl_constructors.vec3_from_mat4x2_mat4x2_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.vec3_from_mat4x2_mat4x2_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.vec3_from_mat4x3_vs
+KHR-GL33.shaders30.glsl_constructors.vec3_from_mat4x3_fs
+KHR-GL33.shaders30.glsl_constructors.vec3_from_mat4x3_mat4x3_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.vec3_from_mat4x3_mat4x3_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.vec3_from_float_mat2_vs
+KHR-GL33.shaders30.glsl_constructors.vec3_from_float_mat2_fs
+KHR-GL33.shaders30.glsl_constructors.vec3_from_float_mat2_float_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.vec3_from_float_mat2_float_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.vec3_from_float_mat2x3_vs
+KHR-GL33.shaders30.glsl_constructors.vec3_from_float_mat2x3_fs
+KHR-GL33.shaders30.glsl_constructors.vec3_from_float_mat2x3_float_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.vec3_from_float_mat2x3_float_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.vec3_from_float_mat2x4_vs
+KHR-GL33.shaders30.glsl_constructors.vec3_from_float_mat2x4_fs
+KHR-GL33.shaders30.glsl_constructors.vec3_from_float_mat2x4_float_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.vec3_from_float_mat2x4_float_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.vec3_from_float_mat3_vs
+KHR-GL33.shaders30.glsl_constructors.vec3_from_float_mat3_fs
+KHR-GL33.shaders30.glsl_constructors.vec3_from_float_mat3_float_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.vec3_from_float_mat3_float_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.vec3_from_float_mat3x2_vs
+KHR-GL33.shaders30.glsl_constructors.vec3_from_float_mat3x2_fs
+KHR-GL33.shaders30.glsl_constructors.vec3_from_float_mat3x2_float_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.vec3_from_float_mat3x2_float_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.vec3_from_float_mat3x4_vs
+KHR-GL33.shaders30.glsl_constructors.vec3_from_float_mat3x4_fs
+KHR-GL33.shaders30.glsl_constructors.vec3_from_float_mat3x4_float_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.vec3_from_float_mat3x4_float_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.vec3_from_float_mat4_vs
+KHR-GL33.shaders30.glsl_constructors.vec3_from_float_mat4_fs
+KHR-GL33.shaders30.glsl_constructors.vec3_from_float_mat4_float_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.vec3_from_float_mat4_float_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.vec3_from_float_mat4x2_vs
+KHR-GL33.shaders30.glsl_constructors.vec3_from_float_mat4x2_fs
+KHR-GL33.shaders30.glsl_constructors.vec3_from_float_mat4x2_float_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.vec3_from_float_mat4x2_float_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.vec3_from_float_mat4x3_vs
+KHR-GL33.shaders30.glsl_constructors.vec3_from_float_mat4x3_fs
+KHR-GL33.shaders30.glsl_constructors.vec3_from_float_mat4x3_float_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.vec3_from_float_mat4x3_float_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.vec4_from_mat2_vs
+KHR-GL33.shaders30.glsl_constructors.vec4_from_mat2_fs
+KHR-GL33.shaders30.glsl_constructors.vec4_from_mat2_mat2_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.vec4_from_mat2_mat2_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.vec4_from_mat2x3_vs
+KHR-GL33.shaders30.glsl_constructors.vec4_from_mat2x3_fs
+KHR-GL33.shaders30.glsl_constructors.vec4_from_mat2x3_mat2x3_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.vec4_from_mat2x3_mat2x3_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.vec4_from_mat2x4_vs
+KHR-GL33.shaders30.glsl_constructors.vec4_from_mat2x4_fs
+KHR-GL33.shaders30.glsl_constructors.vec4_from_mat2x4_mat2x4_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.vec4_from_mat2x4_mat2x4_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.vec4_from_mat3_vs
+KHR-GL33.shaders30.glsl_constructors.vec4_from_mat3_fs
+KHR-GL33.shaders30.glsl_constructors.vec4_from_mat3_mat3_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.vec4_from_mat3_mat3_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.vec4_from_mat3x2_vs
+KHR-GL33.shaders30.glsl_constructors.vec4_from_mat3x2_fs
+KHR-GL33.shaders30.glsl_constructors.vec4_from_mat3x2_mat3x2_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.vec4_from_mat3x2_mat3x2_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.vec4_from_mat3x4_vs
+KHR-GL33.shaders30.glsl_constructors.vec4_from_mat3x4_fs
+KHR-GL33.shaders30.glsl_constructors.vec4_from_mat3x4_mat3x4_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.vec4_from_mat3x4_mat3x4_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.vec4_from_mat4_vs
+KHR-GL33.shaders30.glsl_constructors.vec4_from_mat4_fs
+KHR-GL33.shaders30.glsl_constructors.vec4_from_mat4_mat4_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.vec4_from_mat4_mat4_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.vec4_from_mat4x2_vs
+KHR-GL33.shaders30.glsl_constructors.vec4_from_mat4x2_fs
+KHR-GL33.shaders30.glsl_constructors.vec4_from_mat4x2_mat4x2_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.vec4_from_mat4x2_mat4x2_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.vec4_from_mat4x3_vs
+KHR-GL33.shaders30.glsl_constructors.vec4_from_mat4x3_fs
+KHR-GL33.shaders30.glsl_constructors.vec4_from_mat4x3_mat4x3_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.vec4_from_mat4x3_mat4x3_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.vec4_from_float_mat2_vs
+KHR-GL33.shaders30.glsl_constructors.vec4_from_float_mat2_fs
+KHR-GL33.shaders30.glsl_constructors.vec4_from_float_mat2_float_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.vec4_from_float_mat2_float_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.vec4_from_float_mat2x3_vs
+KHR-GL33.shaders30.glsl_constructors.vec4_from_float_mat2x3_fs
+KHR-GL33.shaders30.glsl_constructors.vec4_from_float_mat2x3_float_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.vec4_from_float_mat2x3_float_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.vec4_from_float_mat2x4_vs
+KHR-GL33.shaders30.glsl_constructors.vec4_from_float_mat2x4_fs
+KHR-GL33.shaders30.glsl_constructors.vec4_from_float_mat2x4_float_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.vec4_from_float_mat2x4_float_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.vec4_from_float_mat3_vs
+KHR-GL33.shaders30.glsl_constructors.vec4_from_float_mat3_fs
+KHR-GL33.shaders30.glsl_constructors.vec4_from_float_mat3_float_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.vec4_from_float_mat3_float_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.vec4_from_float_mat3x2_vs
+KHR-GL33.shaders30.glsl_constructors.vec4_from_float_mat3x2_fs
+KHR-GL33.shaders30.glsl_constructors.vec4_from_float_mat3x2_float_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.vec4_from_float_mat3x2_float_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.vec4_from_float_mat3x4_vs
+KHR-GL33.shaders30.glsl_constructors.vec4_from_float_mat3x4_fs
+KHR-GL33.shaders30.glsl_constructors.vec4_from_float_mat3x4_float_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.vec4_from_float_mat3x4_float_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.vec4_from_float_mat4_vs
+KHR-GL33.shaders30.glsl_constructors.vec4_from_float_mat4_fs
+KHR-GL33.shaders30.glsl_constructors.vec4_from_float_mat4_float_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.vec4_from_float_mat4_float_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.vec4_from_float_mat4x2_vs
+KHR-GL33.shaders30.glsl_constructors.vec4_from_float_mat4x2_fs
+KHR-GL33.shaders30.glsl_constructors.vec4_from_float_mat4x2_float_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.vec4_from_float_mat4x2_float_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.vec4_from_float_mat4x3_vs
+KHR-GL33.shaders30.glsl_constructors.vec4_from_float_mat4x3_fs
+KHR-GL33.shaders30.glsl_constructors.vec4_from_float_mat4x3_float_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.vec4_from_float_mat4x3_float_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.ivec2_from_mat2_vs
+KHR-GL33.shaders30.glsl_constructors.ivec2_from_mat2_fs
+KHR-GL33.shaders30.glsl_constructors.ivec2_from_mat2_mat2_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.ivec2_from_mat2_mat2_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.ivec2_from_mat2x3_vs
+KHR-GL33.shaders30.glsl_constructors.ivec2_from_mat2x3_fs
+KHR-GL33.shaders30.glsl_constructors.ivec2_from_mat2x3_mat2x3_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.ivec2_from_mat2x3_mat2x3_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.ivec2_from_mat2x4_vs
+KHR-GL33.shaders30.glsl_constructors.ivec2_from_mat2x4_fs
+KHR-GL33.shaders30.glsl_constructors.ivec2_from_mat2x4_mat2x4_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.ivec2_from_mat2x4_mat2x4_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.ivec2_from_mat3_vs
+KHR-GL33.shaders30.glsl_constructors.ivec2_from_mat3_fs
+KHR-GL33.shaders30.glsl_constructors.ivec2_from_mat3_mat3_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.ivec2_from_mat3_mat3_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.ivec2_from_mat3x2_vs
+KHR-GL33.shaders30.glsl_constructors.ivec2_from_mat3x2_fs
+KHR-GL33.shaders30.glsl_constructors.ivec2_from_mat3x2_mat3x2_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.ivec2_from_mat3x2_mat3x2_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.ivec2_from_mat3x4_vs
+KHR-GL33.shaders30.glsl_constructors.ivec2_from_mat3x4_fs
+KHR-GL33.shaders30.glsl_constructors.ivec2_from_mat3x4_mat3x4_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.ivec2_from_mat3x4_mat3x4_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.ivec2_from_mat4_vs
+KHR-GL33.shaders30.glsl_constructors.ivec2_from_mat4_fs
+KHR-GL33.shaders30.glsl_constructors.ivec2_from_mat4_mat4_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.ivec2_from_mat4_mat4_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.ivec2_from_mat4x2_vs
+KHR-GL33.shaders30.glsl_constructors.ivec2_from_mat4x2_fs
+KHR-GL33.shaders30.glsl_constructors.ivec2_from_mat4x2_mat4x2_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.ivec2_from_mat4x2_mat4x2_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.ivec2_from_mat4x3_vs
+KHR-GL33.shaders30.glsl_constructors.ivec2_from_mat4x3_fs
+KHR-GL33.shaders30.glsl_constructors.ivec2_from_mat4x3_mat4x3_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.ivec2_from_mat4x3_mat4x3_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.ivec2_from_int_mat2_vs
+KHR-GL33.shaders30.glsl_constructors.ivec2_from_int_mat2_fs
+KHR-GL33.shaders30.glsl_constructors.ivec2_from_int_mat2_int_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.ivec2_from_int_mat2_int_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.ivec2_from_int_mat2x3_vs
+KHR-GL33.shaders30.glsl_constructors.ivec2_from_int_mat2x3_fs
+KHR-GL33.shaders30.glsl_constructors.ivec2_from_int_mat2x3_int_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.ivec2_from_int_mat2x3_int_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.ivec2_from_int_mat2x4_vs
+KHR-GL33.shaders30.glsl_constructors.ivec2_from_int_mat2x4_fs
+KHR-GL33.shaders30.glsl_constructors.ivec2_from_int_mat2x4_int_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.ivec2_from_int_mat2x4_int_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.ivec2_from_int_mat3_vs
+KHR-GL33.shaders30.glsl_constructors.ivec2_from_int_mat3_fs
+KHR-GL33.shaders30.glsl_constructors.ivec2_from_int_mat3_int_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.ivec2_from_int_mat3_int_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.ivec2_from_int_mat3x2_vs
+KHR-GL33.shaders30.glsl_constructors.ivec2_from_int_mat3x2_fs
+KHR-GL33.shaders30.glsl_constructors.ivec2_from_int_mat3x2_int_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.ivec2_from_int_mat3x2_int_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.ivec2_from_int_mat3x4_vs
+KHR-GL33.shaders30.glsl_constructors.ivec2_from_int_mat3x4_fs
+KHR-GL33.shaders30.glsl_constructors.ivec2_from_int_mat3x4_int_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.ivec2_from_int_mat3x4_int_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.ivec2_from_int_mat4_vs
+KHR-GL33.shaders30.glsl_constructors.ivec2_from_int_mat4_fs
+KHR-GL33.shaders30.glsl_constructors.ivec2_from_int_mat4_int_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.ivec2_from_int_mat4_int_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.ivec2_from_int_mat4x2_vs
+KHR-GL33.shaders30.glsl_constructors.ivec2_from_int_mat4x2_fs
+KHR-GL33.shaders30.glsl_constructors.ivec2_from_int_mat4x2_int_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.ivec2_from_int_mat4x2_int_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.ivec2_from_int_mat4x3_vs
+KHR-GL33.shaders30.glsl_constructors.ivec2_from_int_mat4x3_fs
+KHR-GL33.shaders30.glsl_constructors.ivec2_from_int_mat4x3_int_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.ivec2_from_int_mat4x3_int_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.ivec3_from_mat2_vs
+KHR-GL33.shaders30.glsl_constructors.ivec3_from_mat2_fs
+KHR-GL33.shaders30.glsl_constructors.ivec3_from_mat2_mat2_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.ivec3_from_mat2_mat2_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.ivec3_from_mat2x3_vs
+KHR-GL33.shaders30.glsl_constructors.ivec3_from_mat2x3_fs
+KHR-GL33.shaders30.glsl_constructors.ivec3_from_mat2x3_mat2x3_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.ivec3_from_mat2x3_mat2x3_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.ivec3_from_mat2x4_vs
+KHR-GL33.shaders30.glsl_constructors.ivec3_from_mat2x4_fs
+KHR-GL33.shaders30.glsl_constructors.ivec3_from_mat2x4_mat2x4_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.ivec3_from_mat2x4_mat2x4_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.ivec3_from_mat3_vs
+KHR-GL33.shaders30.glsl_constructors.ivec3_from_mat3_fs
+KHR-GL33.shaders30.glsl_constructors.ivec3_from_mat3_mat3_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.ivec3_from_mat3_mat3_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.ivec3_from_mat3x2_vs
+KHR-GL33.shaders30.glsl_constructors.ivec3_from_mat3x2_fs
+KHR-GL33.shaders30.glsl_constructors.ivec3_from_mat3x2_mat3x2_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.ivec3_from_mat3x2_mat3x2_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.ivec3_from_mat3x4_vs
+KHR-GL33.shaders30.glsl_constructors.ivec3_from_mat3x4_fs
+KHR-GL33.shaders30.glsl_constructors.ivec3_from_mat3x4_mat3x4_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.ivec3_from_mat3x4_mat3x4_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.ivec3_from_mat4_vs
+KHR-GL33.shaders30.glsl_constructors.ivec3_from_mat4_fs
+KHR-GL33.shaders30.glsl_constructors.ivec3_from_mat4_mat4_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.ivec3_from_mat4_mat4_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.ivec3_from_mat4x2_vs
+KHR-GL33.shaders30.glsl_constructors.ivec3_from_mat4x2_fs
+KHR-GL33.shaders30.glsl_constructors.ivec3_from_mat4x2_mat4x2_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.ivec3_from_mat4x2_mat4x2_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.ivec3_from_mat4x3_vs
+KHR-GL33.shaders30.glsl_constructors.ivec3_from_mat4x3_fs
+KHR-GL33.shaders30.glsl_constructors.ivec3_from_mat4x3_mat4x3_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.ivec3_from_mat4x3_mat4x3_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.ivec3_from_int_mat2_vs
+KHR-GL33.shaders30.glsl_constructors.ivec3_from_int_mat2_fs
+KHR-GL33.shaders30.glsl_constructors.ivec3_from_int_mat2_int_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.ivec3_from_int_mat2_int_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.ivec3_from_int_mat2x3_vs
+KHR-GL33.shaders30.glsl_constructors.ivec3_from_int_mat2x3_fs
+KHR-GL33.shaders30.glsl_constructors.ivec3_from_int_mat2x3_int_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.ivec3_from_int_mat2x3_int_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.ivec3_from_int_mat2x4_vs
+KHR-GL33.shaders30.glsl_constructors.ivec3_from_int_mat2x4_fs
+KHR-GL33.shaders30.glsl_constructors.ivec3_from_int_mat2x4_int_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.ivec3_from_int_mat2x4_int_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.ivec3_from_int_mat3_vs
+KHR-GL33.shaders30.glsl_constructors.ivec3_from_int_mat3_fs
+KHR-GL33.shaders30.glsl_constructors.ivec3_from_int_mat3_int_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.ivec3_from_int_mat3_int_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.ivec3_from_int_mat3x2_vs
+KHR-GL33.shaders30.glsl_constructors.ivec3_from_int_mat3x2_fs
+KHR-GL33.shaders30.glsl_constructors.ivec3_from_int_mat3x2_int_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.ivec3_from_int_mat3x2_int_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.ivec3_from_int_mat3x4_vs
+KHR-GL33.shaders30.glsl_constructors.ivec3_from_int_mat3x4_fs
+KHR-GL33.shaders30.glsl_constructors.ivec3_from_int_mat3x4_int_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.ivec3_from_int_mat3x4_int_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.ivec3_from_int_mat4_vs
+KHR-GL33.shaders30.glsl_constructors.ivec3_from_int_mat4_fs
+KHR-GL33.shaders30.glsl_constructors.ivec3_from_int_mat4_int_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.ivec3_from_int_mat4_int_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.ivec3_from_int_mat4x2_vs
+KHR-GL33.shaders30.glsl_constructors.ivec3_from_int_mat4x2_fs
+KHR-GL33.shaders30.glsl_constructors.ivec3_from_int_mat4x2_int_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.ivec3_from_int_mat4x2_int_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.ivec3_from_int_mat4x3_vs
+KHR-GL33.shaders30.glsl_constructors.ivec3_from_int_mat4x3_fs
+KHR-GL33.shaders30.glsl_constructors.ivec3_from_int_mat4x3_int_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.ivec3_from_int_mat4x3_int_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.ivec4_from_mat2_vs
+KHR-GL33.shaders30.glsl_constructors.ivec4_from_mat2_fs
+KHR-GL33.shaders30.glsl_constructors.ivec4_from_mat2_mat2_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.ivec4_from_mat2_mat2_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.ivec4_from_mat2x3_vs
+KHR-GL33.shaders30.glsl_constructors.ivec4_from_mat2x3_fs
+KHR-GL33.shaders30.glsl_constructors.ivec4_from_mat2x3_mat2x3_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.ivec4_from_mat2x3_mat2x3_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.ivec4_from_mat2x4_vs
+KHR-GL33.shaders30.glsl_constructors.ivec4_from_mat2x4_fs
+KHR-GL33.shaders30.glsl_constructors.ivec4_from_mat2x4_mat2x4_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.ivec4_from_mat2x4_mat2x4_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.ivec4_from_mat3_vs
+KHR-GL33.shaders30.glsl_constructors.ivec4_from_mat3_fs
+KHR-GL33.shaders30.glsl_constructors.ivec4_from_mat3_mat3_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.ivec4_from_mat3_mat3_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.ivec4_from_mat3x2_vs
+KHR-GL33.shaders30.glsl_constructors.ivec4_from_mat3x2_fs
+KHR-GL33.shaders30.glsl_constructors.ivec4_from_mat3x2_mat3x2_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.ivec4_from_mat3x2_mat3x2_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.ivec4_from_mat3x4_vs
+KHR-GL33.shaders30.glsl_constructors.ivec4_from_mat3x4_fs
+KHR-GL33.shaders30.glsl_constructors.ivec4_from_mat3x4_mat3x4_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.ivec4_from_mat3x4_mat3x4_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.ivec4_from_mat4_vs
+KHR-GL33.shaders30.glsl_constructors.ivec4_from_mat4_fs
+KHR-GL33.shaders30.glsl_constructors.ivec4_from_mat4_mat4_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.ivec4_from_mat4_mat4_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.ivec4_from_mat4x2_vs
+KHR-GL33.shaders30.glsl_constructors.ivec4_from_mat4x2_fs
+KHR-GL33.shaders30.glsl_constructors.ivec4_from_mat4x2_mat4x2_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.ivec4_from_mat4x2_mat4x2_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.ivec4_from_mat4x3_vs
+KHR-GL33.shaders30.glsl_constructors.ivec4_from_mat4x3_fs
+KHR-GL33.shaders30.glsl_constructors.ivec4_from_mat4x3_mat4x3_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.ivec4_from_mat4x3_mat4x3_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.ivec4_from_int_mat2_vs
+KHR-GL33.shaders30.glsl_constructors.ivec4_from_int_mat2_fs
+KHR-GL33.shaders30.glsl_constructors.ivec4_from_int_mat2_int_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.ivec4_from_int_mat2_int_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.ivec4_from_int_mat2x3_vs
+KHR-GL33.shaders30.glsl_constructors.ivec4_from_int_mat2x3_fs
+KHR-GL33.shaders30.glsl_constructors.ivec4_from_int_mat2x3_int_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.ivec4_from_int_mat2x3_int_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.ivec4_from_int_mat2x4_vs
+KHR-GL33.shaders30.glsl_constructors.ivec4_from_int_mat2x4_fs
+KHR-GL33.shaders30.glsl_constructors.ivec4_from_int_mat2x4_int_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.ivec4_from_int_mat2x4_int_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.ivec4_from_int_mat3_vs
+KHR-GL33.shaders30.glsl_constructors.ivec4_from_int_mat3_fs
+KHR-GL33.shaders30.glsl_constructors.ivec4_from_int_mat3_int_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.ivec4_from_int_mat3_int_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.ivec4_from_int_mat3x2_vs
+KHR-GL33.shaders30.glsl_constructors.ivec4_from_int_mat3x2_fs
+KHR-GL33.shaders30.glsl_constructors.ivec4_from_int_mat3x2_int_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.ivec4_from_int_mat3x2_int_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.ivec4_from_int_mat3x4_vs
+KHR-GL33.shaders30.glsl_constructors.ivec4_from_int_mat3x4_fs
+KHR-GL33.shaders30.glsl_constructors.ivec4_from_int_mat3x4_int_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.ivec4_from_int_mat3x4_int_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.ivec4_from_int_mat4_vs
+KHR-GL33.shaders30.glsl_constructors.ivec4_from_int_mat4_fs
+KHR-GL33.shaders30.glsl_constructors.ivec4_from_int_mat4_int_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.ivec4_from_int_mat4_int_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.ivec4_from_int_mat4x2_vs
+KHR-GL33.shaders30.glsl_constructors.ivec4_from_int_mat4x2_fs
+KHR-GL33.shaders30.glsl_constructors.ivec4_from_int_mat4x2_int_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.ivec4_from_int_mat4x2_int_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.ivec4_from_int_mat4x3_vs
+KHR-GL33.shaders30.glsl_constructors.ivec4_from_int_mat4x3_fs
+KHR-GL33.shaders30.glsl_constructors.ivec4_from_int_mat4x3_int_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.ivec4_from_int_mat4x3_int_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.bvec2_from_mat2_vs
+KHR-GL33.shaders30.glsl_constructors.bvec2_from_mat2_fs
+KHR-GL33.shaders30.glsl_constructors.bvec2_from_mat2_mat2_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.bvec2_from_mat2_mat2_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.bvec2_from_mat2x3_vs
+KHR-GL33.shaders30.glsl_constructors.bvec2_from_mat2x3_fs
+KHR-GL33.shaders30.glsl_constructors.bvec2_from_mat2x3_mat2x3_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.bvec2_from_mat2x3_mat2x3_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.bvec2_from_mat2x4_vs
+KHR-GL33.shaders30.glsl_constructors.bvec2_from_mat2x4_fs
+KHR-GL33.shaders30.glsl_constructors.bvec2_from_mat2x4_mat2x4_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.bvec2_from_mat2x4_mat2x4_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.bvec2_from_mat3_vs
+KHR-GL33.shaders30.glsl_constructors.bvec2_from_mat3_fs
+KHR-GL33.shaders30.glsl_constructors.bvec2_from_mat3_mat3_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.bvec2_from_mat3_mat3_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.bvec2_from_mat3x2_vs
+KHR-GL33.shaders30.glsl_constructors.bvec2_from_mat3x2_fs
+KHR-GL33.shaders30.glsl_constructors.bvec2_from_mat3x2_mat3x2_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.bvec2_from_mat3x2_mat3x2_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.bvec2_from_mat3x4_vs
+KHR-GL33.shaders30.glsl_constructors.bvec2_from_mat3x4_fs
+KHR-GL33.shaders30.glsl_constructors.bvec2_from_mat3x4_mat3x4_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.bvec2_from_mat3x4_mat3x4_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.bvec2_from_mat4_vs
+KHR-GL33.shaders30.glsl_constructors.bvec2_from_mat4_fs
+KHR-GL33.shaders30.glsl_constructors.bvec2_from_mat4_mat4_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.bvec2_from_mat4_mat4_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.bvec2_from_mat4x2_vs
+KHR-GL33.shaders30.glsl_constructors.bvec2_from_mat4x2_fs
+KHR-GL33.shaders30.glsl_constructors.bvec2_from_mat4x2_mat4x2_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.bvec2_from_mat4x2_mat4x2_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.bvec2_from_mat4x3_vs
+KHR-GL33.shaders30.glsl_constructors.bvec2_from_mat4x3_fs
+KHR-GL33.shaders30.glsl_constructors.bvec2_from_mat4x3_mat4x3_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.bvec2_from_mat4x3_mat4x3_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.bvec2_from_bool_mat2_vs
+KHR-GL33.shaders30.glsl_constructors.bvec2_from_bool_mat2_fs
+KHR-GL33.shaders30.glsl_constructors.bvec2_from_bool_mat2_bool_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.bvec2_from_bool_mat2_bool_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.bvec2_from_bool_mat2x3_vs
+KHR-GL33.shaders30.glsl_constructors.bvec2_from_bool_mat2x3_fs
+KHR-GL33.shaders30.glsl_constructors.bvec2_from_bool_mat2x3_bool_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.bvec2_from_bool_mat2x3_bool_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.bvec2_from_bool_mat2x4_vs
+KHR-GL33.shaders30.glsl_constructors.bvec2_from_bool_mat2x4_fs
+KHR-GL33.shaders30.glsl_constructors.bvec2_from_bool_mat2x4_bool_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.bvec2_from_bool_mat2x4_bool_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.bvec2_from_bool_mat3_vs
+KHR-GL33.shaders30.glsl_constructors.bvec2_from_bool_mat3_fs
+KHR-GL33.shaders30.glsl_constructors.bvec2_from_bool_mat3_bool_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.bvec2_from_bool_mat3_bool_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.bvec2_from_bool_mat3x2_vs
+KHR-GL33.shaders30.glsl_constructors.bvec2_from_bool_mat3x2_fs
+KHR-GL33.shaders30.glsl_constructors.bvec2_from_bool_mat3x2_bool_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.bvec2_from_bool_mat3x2_bool_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.bvec2_from_bool_mat3x4_vs
+KHR-GL33.shaders30.glsl_constructors.bvec2_from_bool_mat3x4_fs
+KHR-GL33.shaders30.glsl_constructors.bvec2_from_bool_mat3x4_bool_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.bvec2_from_bool_mat3x4_bool_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.bvec2_from_bool_mat4_vs
+KHR-GL33.shaders30.glsl_constructors.bvec2_from_bool_mat4_fs
+KHR-GL33.shaders30.glsl_constructors.bvec2_from_bool_mat4_bool_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.bvec2_from_bool_mat4_bool_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.bvec2_from_bool_mat4x2_vs
+KHR-GL33.shaders30.glsl_constructors.bvec2_from_bool_mat4x2_fs
+KHR-GL33.shaders30.glsl_constructors.bvec2_from_bool_mat4x2_bool_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.bvec2_from_bool_mat4x2_bool_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.bvec2_from_bool_mat4x3_vs
+KHR-GL33.shaders30.glsl_constructors.bvec2_from_bool_mat4x3_fs
+KHR-GL33.shaders30.glsl_constructors.bvec2_from_bool_mat4x3_bool_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.bvec2_from_bool_mat4x3_bool_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.bvec3_from_mat2_vs
+KHR-GL33.shaders30.glsl_constructors.bvec3_from_mat2_fs
+KHR-GL33.shaders30.glsl_constructors.bvec3_from_mat2_mat2_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.bvec3_from_mat2_mat2_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.bvec3_from_mat2x3_vs
+KHR-GL33.shaders30.glsl_constructors.bvec3_from_mat2x3_fs
+KHR-GL33.shaders30.glsl_constructors.bvec3_from_mat2x3_mat2x3_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.bvec3_from_mat2x3_mat2x3_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.bvec3_from_mat2x4_vs
+KHR-GL33.shaders30.glsl_constructors.bvec3_from_mat2x4_fs
+KHR-GL33.shaders30.glsl_constructors.bvec3_from_mat2x4_mat2x4_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.bvec3_from_mat2x4_mat2x4_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.bvec3_from_mat3_vs
+KHR-GL33.shaders30.glsl_constructors.bvec3_from_mat3_fs
+KHR-GL33.shaders30.glsl_constructors.bvec3_from_mat3_mat3_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.bvec3_from_mat3_mat3_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.bvec3_from_mat3x2_vs
+KHR-GL33.shaders30.glsl_constructors.bvec3_from_mat3x2_fs
+KHR-GL33.shaders30.glsl_constructors.bvec3_from_mat3x2_mat3x2_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.bvec3_from_mat3x2_mat3x2_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.bvec3_from_mat3x4_vs
+KHR-GL33.shaders30.glsl_constructors.bvec3_from_mat3x4_fs
+KHR-GL33.shaders30.glsl_constructors.bvec3_from_mat3x4_mat3x4_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.bvec3_from_mat3x4_mat3x4_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.bvec3_from_mat4_vs
+KHR-GL33.shaders30.glsl_constructors.bvec3_from_mat4_fs
+KHR-GL33.shaders30.glsl_constructors.bvec3_from_mat4_mat4_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.bvec3_from_mat4_mat4_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.bvec3_from_mat4x2_vs
+KHR-GL33.shaders30.glsl_constructors.bvec3_from_mat4x2_fs
+KHR-GL33.shaders30.glsl_constructors.bvec3_from_mat4x2_mat4x2_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.bvec3_from_mat4x2_mat4x2_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.bvec3_from_mat4x3_vs
+KHR-GL33.shaders30.glsl_constructors.bvec3_from_mat4x3_fs
+KHR-GL33.shaders30.glsl_constructors.bvec3_from_mat4x3_mat4x3_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.bvec3_from_mat4x3_mat4x3_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.bvec3_from_bool_mat2_vs
+KHR-GL33.shaders30.glsl_constructors.bvec3_from_bool_mat2_fs
+KHR-GL33.shaders30.glsl_constructors.bvec3_from_bool_mat2_bool_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.bvec3_from_bool_mat2_bool_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.bvec3_from_bool_mat2x3_vs
+KHR-GL33.shaders30.glsl_constructors.bvec3_from_bool_mat2x3_fs
+KHR-GL33.shaders30.glsl_constructors.bvec3_from_bool_mat2x3_bool_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.bvec3_from_bool_mat2x3_bool_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.bvec3_from_bool_mat2x4_vs
+KHR-GL33.shaders30.glsl_constructors.bvec3_from_bool_mat2x4_fs
+KHR-GL33.shaders30.glsl_constructors.bvec3_from_bool_mat2x4_bool_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.bvec3_from_bool_mat2x4_bool_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.bvec3_from_bool_mat3_vs
+KHR-GL33.shaders30.glsl_constructors.bvec3_from_bool_mat3_fs
+KHR-GL33.shaders30.glsl_constructors.bvec3_from_bool_mat3_bool_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.bvec3_from_bool_mat3_bool_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.bvec3_from_bool_mat3x2_vs
+KHR-GL33.shaders30.glsl_constructors.bvec3_from_bool_mat3x2_fs
+KHR-GL33.shaders30.glsl_constructors.bvec3_from_bool_mat3x2_bool_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.bvec3_from_bool_mat3x2_bool_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.bvec3_from_bool_mat3x4_vs
+KHR-GL33.shaders30.glsl_constructors.bvec3_from_bool_mat3x4_fs
+KHR-GL33.shaders30.glsl_constructors.bvec3_from_bool_mat3x4_bool_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.bvec3_from_bool_mat3x4_bool_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.bvec3_from_bool_mat4_vs
+KHR-GL33.shaders30.glsl_constructors.bvec3_from_bool_mat4_fs
+KHR-GL33.shaders30.glsl_constructors.bvec3_from_bool_mat4_bool_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.bvec3_from_bool_mat4_bool_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.bvec3_from_bool_mat4x2_vs
+KHR-GL33.shaders30.glsl_constructors.bvec3_from_bool_mat4x2_fs
+KHR-GL33.shaders30.glsl_constructors.bvec3_from_bool_mat4x2_bool_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.bvec3_from_bool_mat4x2_bool_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.bvec3_from_bool_mat4x3_vs
+KHR-GL33.shaders30.glsl_constructors.bvec3_from_bool_mat4x3_fs
+KHR-GL33.shaders30.glsl_constructors.bvec3_from_bool_mat4x3_bool_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.bvec3_from_bool_mat4x3_bool_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.bvec4_from_mat2_vs
+KHR-GL33.shaders30.glsl_constructors.bvec4_from_mat2_fs
+KHR-GL33.shaders30.glsl_constructors.bvec4_from_mat2_mat2_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.bvec4_from_mat2_mat2_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.bvec4_from_mat2x3_vs
+KHR-GL33.shaders30.glsl_constructors.bvec4_from_mat2x3_fs
+KHR-GL33.shaders30.glsl_constructors.bvec4_from_mat2x3_mat2x3_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.bvec4_from_mat2x3_mat2x3_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.bvec4_from_mat2x4_vs
+KHR-GL33.shaders30.glsl_constructors.bvec4_from_mat2x4_fs
+KHR-GL33.shaders30.glsl_constructors.bvec4_from_mat2x4_mat2x4_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.bvec4_from_mat2x4_mat2x4_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.bvec4_from_mat3_vs
+KHR-GL33.shaders30.glsl_constructors.bvec4_from_mat3_fs
+KHR-GL33.shaders30.glsl_constructors.bvec4_from_mat3_mat3_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.bvec4_from_mat3_mat3_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.bvec4_from_mat3x2_vs
+KHR-GL33.shaders30.glsl_constructors.bvec4_from_mat3x2_fs
+KHR-GL33.shaders30.glsl_constructors.bvec4_from_mat3x2_mat3x2_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.bvec4_from_mat3x2_mat3x2_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.bvec4_from_mat3x4_vs
+KHR-GL33.shaders30.glsl_constructors.bvec4_from_mat3x4_fs
+KHR-GL33.shaders30.glsl_constructors.bvec4_from_mat3x4_mat3x4_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.bvec4_from_mat3x4_mat3x4_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.bvec4_from_mat4_vs
+KHR-GL33.shaders30.glsl_constructors.bvec4_from_mat4_fs
+KHR-GL33.shaders30.glsl_constructors.bvec4_from_mat4_mat4_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.bvec4_from_mat4_mat4_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.bvec4_from_mat4x2_vs
+KHR-GL33.shaders30.glsl_constructors.bvec4_from_mat4x2_fs
+KHR-GL33.shaders30.glsl_constructors.bvec4_from_mat4x2_mat4x2_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.bvec4_from_mat4x2_mat4x2_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.bvec4_from_mat4x3_vs
+KHR-GL33.shaders30.glsl_constructors.bvec4_from_mat4x3_fs
+KHR-GL33.shaders30.glsl_constructors.bvec4_from_mat4x3_mat4x3_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.bvec4_from_mat4x3_mat4x3_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.bvec4_from_bool_mat2_vs
+KHR-GL33.shaders30.glsl_constructors.bvec4_from_bool_mat2_fs
+KHR-GL33.shaders30.glsl_constructors.bvec4_from_bool_mat2_bool_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.bvec4_from_bool_mat2_bool_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.bvec4_from_bool_mat2x3_vs
+KHR-GL33.shaders30.glsl_constructors.bvec4_from_bool_mat2x3_fs
+KHR-GL33.shaders30.glsl_constructors.bvec4_from_bool_mat2x3_bool_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.bvec4_from_bool_mat2x3_bool_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.bvec4_from_bool_mat2x4_vs
+KHR-GL33.shaders30.glsl_constructors.bvec4_from_bool_mat2x4_fs
+KHR-GL33.shaders30.glsl_constructors.bvec4_from_bool_mat2x4_bool_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.bvec4_from_bool_mat2x4_bool_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.bvec4_from_bool_mat3_vs
+KHR-GL33.shaders30.glsl_constructors.bvec4_from_bool_mat3_fs
+KHR-GL33.shaders30.glsl_constructors.bvec4_from_bool_mat3_bool_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.bvec4_from_bool_mat3_bool_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.bvec4_from_bool_mat3x2_vs
+KHR-GL33.shaders30.glsl_constructors.bvec4_from_bool_mat3x2_fs
+KHR-GL33.shaders30.glsl_constructors.bvec4_from_bool_mat3x2_bool_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.bvec4_from_bool_mat3x2_bool_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.bvec4_from_bool_mat3x4_vs
+KHR-GL33.shaders30.glsl_constructors.bvec4_from_bool_mat3x4_fs
+KHR-GL33.shaders30.glsl_constructors.bvec4_from_bool_mat3x4_bool_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.bvec4_from_bool_mat3x4_bool_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.bvec4_from_bool_mat4_vs
+KHR-GL33.shaders30.glsl_constructors.bvec4_from_bool_mat4_fs
+KHR-GL33.shaders30.glsl_constructors.bvec4_from_bool_mat4_bool_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.bvec4_from_bool_mat4_bool_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.bvec4_from_bool_mat4x2_vs
+KHR-GL33.shaders30.glsl_constructors.bvec4_from_bool_mat4x2_fs
+KHR-GL33.shaders30.glsl_constructors.bvec4_from_bool_mat4x2_bool_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.bvec4_from_bool_mat4x2_bool_invalid_fs
+KHR-GL33.shaders30.glsl_constructors.bvec4_from_bool_mat4x3_vs
+KHR-GL33.shaders30.glsl_constructors.bvec4_from_bool_mat4x3_fs
+KHR-GL33.shaders30.glsl_constructors.bvec4_from_bool_mat4x3_bool_invalid_vs
+KHR-GL33.shaders30.glsl_constructors.bvec4_from_bool_mat4x3_bool_invalid_fs
 KHR-GL33.ext_texture_shadow_lod.texture.sampler2darrayshadow_fragment
 KHR-GL33.ext_texture_shadow_lod.texture.sampler2darrayshadow_bias_fragment
 KHR-GL33.ext_texture_shadow_lod.texture.samplercubearrayshadow_vertex
diff --git a/external/openglcts/data/mustpass/gl/khronos_mustpass/4.6.1.x/gl40-master.txt b/external/openglcts/data/mustpass/gl/khronos_mustpass/4.6.1.x/gl40-master.txt
index 1e10f49..436bb39 100644
--- a/external/openglcts/data/mustpass/gl/khronos_mustpass/4.6.1.x/gl40-master.txt
+++ b/external/openglcts/data/mustpass/gl/khronos_mustpass/4.6.1.x/gl40-master.txt
@@ -192,6 +192,654 @@
 KHR-GL40.texture_repeat_mode.depth24_stencil8_11x131_2_mirrored_repeat
 KHR-GL40.shaders30.declarations.declarations.redeclare_gl_FragColor
 KHR-GL40.shaders30.declarations.declarations.redeclare_gl_FragData
+KHR-GL40.shaders30.glsl_constructors.vec2_from_mat2_vs
+KHR-GL40.shaders30.glsl_constructors.vec2_from_mat2_fs
+KHR-GL40.shaders30.glsl_constructors.vec2_from_mat2_mat2_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.vec2_from_mat2_mat2_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.vec2_from_mat2x3_vs
+KHR-GL40.shaders30.glsl_constructors.vec2_from_mat2x3_fs
+KHR-GL40.shaders30.glsl_constructors.vec2_from_mat2x3_mat2x3_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.vec2_from_mat2x3_mat2x3_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.vec2_from_mat2x4_vs
+KHR-GL40.shaders30.glsl_constructors.vec2_from_mat2x4_fs
+KHR-GL40.shaders30.glsl_constructors.vec2_from_mat2x4_mat2x4_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.vec2_from_mat2x4_mat2x4_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.vec2_from_mat3_vs
+KHR-GL40.shaders30.glsl_constructors.vec2_from_mat3_fs
+KHR-GL40.shaders30.glsl_constructors.vec2_from_mat3_mat3_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.vec2_from_mat3_mat3_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.vec2_from_mat3x2_vs
+KHR-GL40.shaders30.glsl_constructors.vec2_from_mat3x2_fs
+KHR-GL40.shaders30.glsl_constructors.vec2_from_mat3x2_mat3x2_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.vec2_from_mat3x2_mat3x2_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.vec2_from_mat3x4_vs
+KHR-GL40.shaders30.glsl_constructors.vec2_from_mat3x4_fs
+KHR-GL40.shaders30.glsl_constructors.vec2_from_mat3x4_mat3x4_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.vec2_from_mat3x4_mat3x4_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.vec2_from_mat4_vs
+KHR-GL40.shaders30.glsl_constructors.vec2_from_mat4_fs
+KHR-GL40.shaders30.glsl_constructors.vec2_from_mat4_mat4_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.vec2_from_mat4_mat4_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.vec2_from_mat4x2_vs
+KHR-GL40.shaders30.glsl_constructors.vec2_from_mat4x2_fs
+KHR-GL40.shaders30.glsl_constructors.vec2_from_mat4x2_mat4x2_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.vec2_from_mat4x2_mat4x2_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.vec2_from_mat4x3_vs
+KHR-GL40.shaders30.glsl_constructors.vec2_from_mat4x3_fs
+KHR-GL40.shaders30.glsl_constructors.vec2_from_mat4x3_mat4x3_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.vec2_from_mat4x3_mat4x3_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.vec2_from_float_mat2_vs
+KHR-GL40.shaders30.glsl_constructors.vec2_from_float_mat2_fs
+KHR-GL40.shaders30.glsl_constructors.vec2_from_float_mat2_float_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.vec2_from_float_mat2_float_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.vec2_from_float_mat2x3_vs
+KHR-GL40.shaders30.glsl_constructors.vec2_from_float_mat2x3_fs
+KHR-GL40.shaders30.glsl_constructors.vec2_from_float_mat2x3_float_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.vec2_from_float_mat2x3_float_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.vec2_from_float_mat2x4_vs
+KHR-GL40.shaders30.glsl_constructors.vec2_from_float_mat2x4_fs
+KHR-GL40.shaders30.glsl_constructors.vec2_from_float_mat2x4_float_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.vec2_from_float_mat2x4_float_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.vec2_from_float_mat3_vs
+KHR-GL40.shaders30.glsl_constructors.vec2_from_float_mat3_fs
+KHR-GL40.shaders30.glsl_constructors.vec2_from_float_mat3_float_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.vec2_from_float_mat3_float_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.vec2_from_float_mat3x2_vs
+KHR-GL40.shaders30.glsl_constructors.vec2_from_float_mat3x2_fs
+KHR-GL40.shaders30.glsl_constructors.vec2_from_float_mat3x2_float_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.vec2_from_float_mat3x2_float_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.vec2_from_float_mat3x4_vs
+KHR-GL40.shaders30.glsl_constructors.vec2_from_float_mat3x4_fs
+KHR-GL40.shaders30.glsl_constructors.vec2_from_float_mat3x4_float_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.vec2_from_float_mat3x4_float_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.vec2_from_float_mat4_vs
+KHR-GL40.shaders30.glsl_constructors.vec2_from_float_mat4_fs
+KHR-GL40.shaders30.glsl_constructors.vec2_from_float_mat4_float_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.vec2_from_float_mat4_float_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.vec2_from_float_mat4x2_vs
+KHR-GL40.shaders30.glsl_constructors.vec2_from_float_mat4x2_fs
+KHR-GL40.shaders30.glsl_constructors.vec2_from_float_mat4x2_float_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.vec2_from_float_mat4x2_float_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.vec2_from_float_mat4x3_vs
+KHR-GL40.shaders30.glsl_constructors.vec2_from_float_mat4x3_fs
+KHR-GL40.shaders30.glsl_constructors.vec2_from_float_mat4x3_float_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.vec2_from_float_mat4x3_float_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.vec3_from_mat2_vs
+KHR-GL40.shaders30.glsl_constructors.vec3_from_mat2_fs
+KHR-GL40.shaders30.glsl_constructors.vec3_from_mat2_mat2_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.vec3_from_mat2_mat2_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.vec3_from_mat2x3_vs
+KHR-GL40.shaders30.glsl_constructors.vec3_from_mat2x3_fs
+KHR-GL40.shaders30.glsl_constructors.vec3_from_mat2x3_mat2x3_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.vec3_from_mat2x3_mat2x3_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.vec3_from_mat2x4_vs
+KHR-GL40.shaders30.glsl_constructors.vec3_from_mat2x4_fs
+KHR-GL40.shaders30.glsl_constructors.vec3_from_mat2x4_mat2x4_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.vec3_from_mat2x4_mat2x4_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.vec3_from_mat3_vs
+KHR-GL40.shaders30.glsl_constructors.vec3_from_mat3_fs
+KHR-GL40.shaders30.glsl_constructors.vec3_from_mat3_mat3_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.vec3_from_mat3_mat3_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.vec3_from_mat3x2_vs
+KHR-GL40.shaders30.glsl_constructors.vec3_from_mat3x2_fs
+KHR-GL40.shaders30.glsl_constructors.vec3_from_mat3x2_mat3x2_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.vec3_from_mat3x2_mat3x2_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.vec3_from_mat3x4_vs
+KHR-GL40.shaders30.glsl_constructors.vec3_from_mat3x4_fs
+KHR-GL40.shaders30.glsl_constructors.vec3_from_mat3x4_mat3x4_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.vec3_from_mat3x4_mat3x4_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.vec3_from_mat4_vs
+KHR-GL40.shaders30.glsl_constructors.vec3_from_mat4_fs
+KHR-GL40.shaders30.glsl_constructors.vec3_from_mat4_mat4_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.vec3_from_mat4_mat4_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.vec3_from_mat4x2_vs
+KHR-GL40.shaders30.glsl_constructors.vec3_from_mat4x2_fs
+KHR-GL40.shaders30.glsl_constructors.vec3_from_mat4x2_mat4x2_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.vec3_from_mat4x2_mat4x2_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.vec3_from_mat4x3_vs
+KHR-GL40.shaders30.glsl_constructors.vec3_from_mat4x3_fs
+KHR-GL40.shaders30.glsl_constructors.vec3_from_mat4x3_mat4x3_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.vec3_from_mat4x3_mat4x3_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.vec3_from_float_mat2_vs
+KHR-GL40.shaders30.glsl_constructors.vec3_from_float_mat2_fs
+KHR-GL40.shaders30.glsl_constructors.vec3_from_float_mat2_float_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.vec3_from_float_mat2_float_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.vec3_from_float_mat2x3_vs
+KHR-GL40.shaders30.glsl_constructors.vec3_from_float_mat2x3_fs
+KHR-GL40.shaders30.glsl_constructors.vec3_from_float_mat2x3_float_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.vec3_from_float_mat2x3_float_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.vec3_from_float_mat2x4_vs
+KHR-GL40.shaders30.glsl_constructors.vec3_from_float_mat2x4_fs
+KHR-GL40.shaders30.glsl_constructors.vec3_from_float_mat2x4_float_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.vec3_from_float_mat2x4_float_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.vec3_from_float_mat3_vs
+KHR-GL40.shaders30.glsl_constructors.vec3_from_float_mat3_fs
+KHR-GL40.shaders30.glsl_constructors.vec3_from_float_mat3_float_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.vec3_from_float_mat3_float_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.vec3_from_float_mat3x2_vs
+KHR-GL40.shaders30.glsl_constructors.vec3_from_float_mat3x2_fs
+KHR-GL40.shaders30.glsl_constructors.vec3_from_float_mat3x2_float_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.vec3_from_float_mat3x2_float_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.vec3_from_float_mat3x4_vs
+KHR-GL40.shaders30.glsl_constructors.vec3_from_float_mat3x4_fs
+KHR-GL40.shaders30.glsl_constructors.vec3_from_float_mat3x4_float_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.vec3_from_float_mat3x4_float_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.vec3_from_float_mat4_vs
+KHR-GL40.shaders30.glsl_constructors.vec3_from_float_mat4_fs
+KHR-GL40.shaders30.glsl_constructors.vec3_from_float_mat4_float_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.vec3_from_float_mat4_float_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.vec3_from_float_mat4x2_vs
+KHR-GL40.shaders30.glsl_constructors.vec3_from_float_mat4x2_fs
+KHR-GL40.shaders30.glsl_constructors.vec3_from_float_mat4x2_float_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.vec3_from_float_mat4x2_float_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.vec3_from_float_mat4x3_vs
+KHR-GL40.shaders30.glsl_constructors.vec3_from_float_mat4x3_fs
+KHR-GL40.shaders30.glsl_constructors.vec3_from_float_mat4x3_float_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.vec3_from_float_mat4x3_float_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.vec4_from_mat2_vs
+KHR-GL40.shaders30.glsl_constructors.vec4_from_mat2_fs
+KHR-GL40.shaders30.glsl_constructors.vec4_from_mat2_mat2_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.vec4_from_mat2_mat2_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.vec4_from_mat2x3_vs
+KHR-GL40.shaders30.glsl_constructors.vec4_from_mat2x3_fs
+KHR-GL40.shaders30.glsl_constructors.vec4_from_mat2x3_mat2x3_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.vec4_from_mat2x3_mat2x3_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.vec4_from_mat2x4_vs
+KHR-GL40.shaders30.glsl_constructors.vec4_from_mat2x4_fs
+KHR-GL40.shaders30.glsl_constructors.vec4_from_mat2x4_mat2x4_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.vec4_from_mat2x4_mat2x4_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.vec4_from_mat3_vs
+KHR-GL40.shaders30.glsl_constructors.vec4_from_mat3_fs
+KHR-GL40.shaders30.glsl_constructors.vec4_from_mat3_mat3_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.vec4_from_mat3_mat3_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.vec4_from_mat3x2_vs
+KHR-GL40.shaders30.glsl_constructors.vec4_from_mat3x2_fs
+KHR-GL40.shaders30.glsl_constructors.vec4_from_mat3x2_mat3x2_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.vec4_from_mat3x2_mat3x2_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.vec4_from_mat3x4_vs
+KHR-GL40.shaders30.glsl_constructors.vec4_from_mat3x4_fs
+KHR-GL40.shaders30.glsl_constructors.vec4_from_mat3x4_mat3x4_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.vec4_from_mat3x4_mat3x4_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.vec4_from_mat4_vs
+KHR-GL40.shaders30.glsl_constructors.vec4_from_mat4_fs
+KHR-GL40.shaders30.glsl_constructors.vec4_from_mat4_mat4_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.vec4_from_mat4_mat4_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.vec4_from_mat4x2_vs
+KHR-GL40.shaders30.glsl_constructors.vec4_from_mat4x2_fs
+KHR-GL40.shaders30.glsl_constructors.vec4_from_mat4x2_mat4x2_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.vec4_from_mat4x2_mat4x2_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.vec4_from_mat4x3_vs
+KHR-GL40.shaders30.glsl_constructors.vec4_from_mat4x3_fs
+KHR-GL40.shaders30.glsl_constructors.vec4_from_mat4x3_mat4x3_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.vec4_from_mat4x3_mat4x3_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.vec4_from_float_mat2_vs
+KHR-GL40.shaders30.glsl_constructors.vec4_from_float_mat2_fs
+KHR-GL40.shaders30.glsl_constructors.vec4_from_float_mat2_float_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.vec4_from_float_mat2_float_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.vec4_from_float_mat2x3_vs
+KHR-GL40.shaders30.glsl_constructors.vec4_from_float_mat2x3_fs
+KHR-GL40.shaders30.glsl_constructors.vec4_from_float_mat2x3_float_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.vec4_from_float_mat2x3_float_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.vec4_from_float_mat2x4_vs
+KHR-GL40.shaders30.glsl_constructors.vec4_from_float_mat2x4_fs
+KHR-GL40.shaders30.glsl_constructors.vec4_from_float_mat2x4_float_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.vec4_from_float_mat2x4_float_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.vec4_from_float_mat3_vs
+KHR-GL40.shaders30.glsl_constructors.vec4_from_float_mat3_fs
+KHR-GL40.shaders30.glsl_constructors.vec4_from_float_mat3_float_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.vec4_from_float_mat3_float_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.vec4_from_float_mat3x2_vs
+KHR-GL40.shaders30.glsl_constructors.vec4_from_float_mat3x2_fs
+KHR-GL40.shaders30.glsl_constructors.vec4_from_float_mat3x2_float_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.vec4_from_float_mat3x2_float_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.vec4_from_float_mat3x4_vs
+KHR-GL40.shaders30.glsl_constructors.vec4_from_float_mat3x4_fs
+KHR-GL40.shaders30.glsl_constructors.vec4_from_float_mat3x4_float_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.vec4_from_float_mat3x4_float_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.vec4_from_float_mat4_vs
+KHR-GL40.shaders30.glsl_constructors.vec4_from_float_mat4_fs
+KHR-GL40.shaders30.glsl_constructors.vec4_from_float_mat4_float_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.vec4_from_float_mat4_float_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.vec4_from_float_mat4x2_vs
+KHR-GL40.shaders30.glsl_constructors.vec4_from_float_mat4x2_fs
+KHR-GL40.shaders30.glsl_constructors.vec4_from_float_mat4x2_float_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.vec4_from_float_mat4x2_float_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.vec4_from_float_mat4x3_vs
+KHR-GL40.shaders30.glsl_constructors.vec4_from_float_mat4x3_fs
+KHR-GL40.shaders30.glsl_constructors.vec4_from_float_mat4x3_float_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.vec4_from_float_mat4x3_float_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.ivec2_from_mat2_vs
+KHR-GL40.shaders30.glsl_constructors.ivec2_from_mat2_fs
+KHR-GL40.shaders30.glsl_constructors.ivec2_from_mat2_mat2_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.ivec2_from_mat2_mat2_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.ivec2_from_mat2x3_vs
+KHR-GL40.shaders30.glsl_constructors.ivec2_from_mat2x3_fs
+KHR-GL40.shaders30.glsl_constructors.ivec2_from_mat2x3_mat2x3_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.ivec2_from_mat2x3_mat2x3_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.ivec2_from_mat2x4_vs
+KHR-GL40.shaders30.glsl_constructors.ivec2_from_mat2x4_fs
+KHR-GL40.shaders30.glsl_constructors.ivec2_from_mat2x4_mat2x4_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.ivec2_from_mat2x4_mat2x4_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.ivec2_from_mat3_vs
+KHR-GL40.shaders30.glsl_constructors.ivec2_from_mat3_fs
+KHR-GL40.shaders30.glsl_constructors.ivec2_from_mat3_mat3_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.ivec2_from_mat3_mat3_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.ivec2_from_mat3x2_vs
+KHR-GL40.shaders30.glsl_constructors.ivec2_from_mat3x2_fs
+KHR-GL40.shaders30.glsl_constructors.ivec2_from_mat3x2_mat3x2_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.ivec2_from_mat3x2_mat3x2_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.ivec2_from_mat3x4_vs
+KHR-GL40.shaders30.glsl_constructors.ivec2_from_mat3x4_fs
+KHR-GL40.shaders30.glsl_constructors.ivec2_from_mat3x4_mat3x4_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.ivec2_from_mat3x4_mat3x4_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.ivec2_from_mat4_vs
+KHR-GL40.shaders30.glsl_constructors.ivec2_from_mat4_fs
+KHR-GL40.shaders30.glsl_constructors.ivec2_from_mat4_mat4_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.ivec2_from_mat4_mat4_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.ivec2_from_mat4x2_vs
+KHR-GL40.shaders30.glsl_constructors.ivec2_from_mat4x2_fs
+KHR-GL40.shaders30.glsl_constructors.ivec2_from_mat4x2_mat4x2_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.ivec2_from_mat4x2_mat4x2_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.ivec2_from_mat4x3_vs
+KHR-GL40.shaders30.glsl_constructors.ivec2_from_mat4x3_fs
+KHR-GL40.shaders30.glsl_constructors.ivec2_from_mat4x3_mat4x3_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.ivec2_from_mat4x3_mat4x3_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.ivec2_from_int_mat2_vs
+KHR-GL40.shaders30.glsl_constructors.ivec2_from_int_mat2_fs
+KHR-GL40.shaders30.glsl_constructors.ivec2_from_int_mat2_int_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.ivec2_from_int_mat2_int_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.ivec2_from_int_mat2x3_vs
+KHR-GL40.shaders30.glsl_constructors.ivec2_from_int_mat2x3_fs
+KHR-GL40.shaders30.glsl_constructors.ivec2_from_int_mat2x3_int_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.ivec2_from_int_mat2x3_int_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.ivec2_from_int_mat2x4_vs
+KHR-GL40.shaders30.glsl_constructors.ivec2_from_int_mat2x4_fs
+KHR-GL40.shaders30.glsl_constructors.ivec2_from_int_mat2x4_int_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.ivec2_from_int_mat2x4_int_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.ivec2_from_int_mat3_vs
+KHR-GL40.shaders30.glsl_constructors.ivec2_from_int_mat3_fs
+KHR-GL40.shaders30.glsl_constructors.ivec2_from_int_mat3_int_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.ivec2_from_int_mat3_int_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.ivec2_from_int_mat3x2_vs
+KHR-GL40.shaders30.glsl_constructors.ivec2_from_int_mat3x2_fs
+KHR-GL40.shaders30.glsl_constructors.ivec2_from_int_mat3x2_int_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.ivec2_from_int_mat3x2_int_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.ivec2_from_int_mat3x4_vs
+KHR-GL40.shaders30.glsl_constructors.ivec2_from_int_mat3x4_fs
+KHR-GL40.shaders30.glsl_constructors.ivec2_from_int_mat3x4_int_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.ivec2_from_int_mat3x4_int_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.ivec2_from_int_mat4_vs
+KHR-GL40.shaders30.glsl_constructors.ivec2_from_int_mat4_fs
+KHR-GL40.shaders30.glsl_constructors.ivec2_from_int_mat4_int_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.ivec2_from_int_mat4_int_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.ivec2_from_int_mat4x2_vs
+KHR-GL40.shaders30.glsl_constructors.ivec2_from_int_mat4x2_fs
+KHR-GL40.shaders30.glsl_constructors.ivec2_from_int_mat4x2_int_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.ivec2_from_int_mat4x2_int_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.ivec2_from_int_mat4x3_vs
+KHR-GL40.shaders30.glsl_constructors.ivec2_from_int_mat4x3_fs
+KHR-GL40.shaders30.glsl_constructors.ivec2_from_int_mat4x3_int_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.ivec2_from_int_mat4x3_int_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.ivec3_from_mat2_vs
+KHR-GL40.shaders30.glsl_constructors.ivec3_from_mat2_fs
+KHR-GL40.shaders30.glsl_constructors.ivec3_from_mat2_mat2_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.ivec3_from_mat2_mat2_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.ivec3_from_mat2x3_vs
+KHR-GL40.shaders30.glsl_constructors.ivec3_from_mat2x3_fs
+KHR-GL40.shaders30.glsl_constructors.ivec3_from_mat2x3_mat2x3_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.ivec3_from_mat2x3_mat2x3_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.ivec3_from_mat2x4_vs
+KHR-GL40.shaders30.glsl_constructors.ivec3_from_mat2x4_fs
+KHR-GL40.shaders30.glsl_constructors.ivec3_from_mat2x4_mat2x4_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.ivec3_from_mat2x4_mat2x4_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.ivec3_from_mat3_vs
+KHR-GL40.shaders30.glsl_constructors.ivec3_from_mat3_fs
+KHR-GL40.shaders30.glsl_constructors.ivec3_from_mat3_mat3_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.ivec3_from_mat3_mat3_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.ivec3_from_mat3x2_vs
+KHR-GL40.shaders30.glsl_constructors.ivec3_from_mat3x2_fs
+KHR-GL40.shaders30.glsl_constructors.ivec3_from_mat3x2_mat3x2_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.ivec3_from_mat3x2_mat3x2_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.ivec3_from_mat3x4_vs
+KHR-GL40.shaders30.glsl_constructors.ivec3_from_mat3x4_fs
+KHR-GL40.shaders30.glsl_constructors.ivec3_from_mat3x4_mat3x4_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.ivec3_from_mat3x4_mat3x4_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.ivec3_from_mat4_vs
+KHR-GL40.shaders30.glsl_constructors.ivec3_from_mat4_fs
+KHR-GL40.shaders30.glsl_constructors.ivec3_from_mat4_mat4_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.ivec3_from_mat4_mat4_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.ivec3_from_mat4x2_vs
+KHR-GL40.shaders30.glsl_constructors.ivec3_from_mat4x2_fs
+KHR-GL40.shaders30.glsl_constructors.ivec3_from_mat4x2_mat4x2_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.ivec3_from_mat4x2_mat4x2_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.ivec3_from_mat4x3_vs
+KHR-GL40.shaders30.glsl_constructors.ivec3_from_mat4x3_fs
+KHR-GL40.shaders30.glsl_constructors.ivec3_from_mat4x3_mat4x3_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.ivec3_from_mat4x3_mat4x3_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.ivec3_from_int_mat2_vs
+KHR-GL40.shaders30.glsl_constructors.ivec3_from_int_mat2_fs
+KHR-GL40.shaders30.glsl_constructors.ivec3_from_int_mat2_int_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.ivec3_from_int_mat2_int_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.ivec3_from_int_mat2x3_vs
+KHR-GL40.shaders30.glsl_constructors.ivec3_from_int_mat2x3_fs
+KHR-GL40.shaders30.glsl_constructors.ivec3_from_int_mat2x3_int_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.ivec3_from_int_mat2x3_int_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.ivec3_from_int_mat2x4_vs
+KHR-GL40.shaders30.glsl_constructors.ivec3_from_int_mat2x4_fs
+KHR-GL40.shaders30.glsl_constructors.ivec3_from_int_mat2x4_int_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.ivec3_from_int_mat2x4_int_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.ivec3_from_int_mat3_vs
+KHR-GL40.shaders30.glsl_constructors.ivec3_from_int_mat3_fs
+KHR-GL40.shaders30.glsl_constructors.ivec3_from_int_mat3_int_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.ivec3_from_int_mat3_int_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.ivec3_from_int_mat3x2_vs
+KHR-GL40.shaders30.glsl_constructors.ivec3_from_int_mat3x2_fs
+KHR-GL40.shaders30.glsl_constructors.ivec3_from_int_mat3x2_int_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.ivec3_from_int_mat3x2_int_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.ivec3_from_int_mat3x4_vs
+KHR-GL40.shaders30.glsl_constructors.ivec3_from_int_mat3x4_fs
+KHR-GL40.shaders30.glsl_constructors.ivec3_from_int_mat3x4_int_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.ivec3_from_int_mat3x4_int_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.ivec3_from_int_mat4_vs
+KHR-GL40.shaders30.glsl_constructors.ivec3_from_int_mat4_fs
+KHR-GL40.shaders30.glsl_constructors.ivec3_from_int_mat4_int_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.ivec3_from_int_mat4_int_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.ivec3_from_int_mat4x2_vs
+KHR-GL40.shaders30.glsl_constructors.ivec3_from_int_mat4x2_fs
+KHR-GL40.shaders30.glsl_constructors.ivec3_from_int_mat4x2_int_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.ivec3_from_int_mat4x2_int_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.ivec3_from_int_mat4x3_vs
+KHR-GL40.shaders30.glsl_constructors.ivec3_from_int_mat4x3_fs
+KHR-GL40.shaders30.glsl_constructors.ivec3_from_int_mat4x3_int_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.ivec3_from_int_mat4x3_int_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.ivec4_from_mat2_vs
+KHR-GL40.shaders30.glsl_constructors.ivec4_from_mat2_fs
+KHR-GL40.shaders30.glsl_constructors.ivec4_from_mat2_mat2_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.ivec4_from_mat2_mat2_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.ivec4_from_mat2x3_vs
+KHR-GL40.shaders30.glsl_constructors.ivec4_from_mat2x3_fs
+KHR-GL40.shaders30.glsl_constructors.ivec4_from_mat2x3_mat2x3_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.ivec4_from_mat2x3_mat2x3_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.ivec4_from_mat2x4_vs
+KHR-GL40.shaders30.glsl_constructors.ivec4_from_mat2x4_fs
+KHR-GL40.shaders30.glsl_constructors.ivec4_from_mat2x4_mat2x4_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.ivec4_from_mat2x4_mat2x4_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.ivec4_from_mat3_vs
+KHR-GL40.shaders30.glsl_constructors.ivec4_from_mat3_fs
+KHR-GL40.shaders30.glsl_constructors.ivec4_from_mat3_mat3_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.ivec4_from_mat3_mat3_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.ivec4_from_mat3x2_vs
+KHR-GL40.shaders30.glsl_constructors.ivec4_from_mat3x2_fs
+KHR-GL40.shaders30.glsl_constructors.ivec4_from_mat3x2_mat3x2_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.ivec4_from_mat3x2_mat3x2_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.ivec4_from_mat3x4_vs
+KHR-GL40.shaders30.glsl_constructors.ivec4_from_mat3x4_fs
+KHR-GL40.shaders30.glsl_constructors.ivec4_from_mat3x4_mat3x4_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.ivec4_from_mat3x4_mat3x4_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.ivec4_from_mat4_vs
+KHR-GL40.shaders30.glsl_constructors.ivec4_from_mat4_fs
+KHR-GL40.shaders30.glsl_constructors.ivec4_from_mat4_mat4_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.ivec4_from_mat4_mat4_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.ivec4_from_mat4x2_vs
+KHR-GL40.shaders30.glsl_constructors.ivec4_from_mat4x2_fs
+KHR-GL40.shaders30.glsl_constructors.ivec4_from_mat4x2_mat4x2_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.ivec4_from_mat4x2_mat4x2_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.ivec4_from_mat4x3_vs
+KHR-GL40.shaders30.glsl_constructors.ivec4_from_mat4x3_fs
+KHR-GL40.shaders30.glsl_constructors.ivec4_from_mat4x3_mat4x3_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.ivec4_from_mat4x3_mat4x3_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.ivec4_from_int_mat2_vs
+KHR-GL40.shaders30.glsl_constructors.ivec4_from_int_mat2_fs
+KHR-GL40.shaders30.glsl_constructors.ivec4_from_int_mat2_int_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.ivec4_from_int_mat2_int_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.ivec4_from_int_mat2x3_vs
+KHR-GL40.shaders30.glsl_constructors.ivec4_from_int_mat2x3_fs
+KHR-GL40.shaders30.glsl_constructors.ivec4_from_int_mat2x3_int_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.ivec4_from_int_mat2x3_int_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.ivec4_from_int_mat2x4_vs
+KHR-GL40.shaders30.glsl_constructors.ivec4_from_int_mat2x4_fs
+KHR-GL40.shaders30.glsl_constructors.ivec4_from_int_mat2x4_int_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.ivec4_from_int_mat2x4_int_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.ivec4_from_int_mat3_vs
+KHR-GL40.shaders30.glsl_constructors.ivec4_from_int_mat3_fs
+KHR-GL40.shaders30.glsl_constructors.ivec4_from_int_mat3_int_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.ivec4_from_int_mat3_int_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.ivec4_from_int_mat3x2_vs
+KHR-GL40.shaders30.glsl_constructors.ivec4_from_int_mat3x2_fs
+KHR-GL40.shaders30.glsl_constructors.ivec4_from_int_mat3x2_int_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.ivec4_from_int_mat3x2_int_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.ivec4_from_int_mat3x4_vs
+KHR-GL40.shaders30.glsl_constructors.ivec4_from_int_mat3x4_fs
+KHR-GL40.shaders30.glsl_constructors.ivec4_from_int_mat3x4_int_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.ivec4_from_int_mat3x4_int_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.ivec4_from_int_mat4_vs
+KHR-GL40.shaders30.glsl_constructors.ivec4_from_int_mat4_fs
+KHR-GL40.shaders30.glsl_constructors.ivec4_from_int_mat4_int_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.ivec4_from_int_mat4_int_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.ivec4_from_int_mat4x2_vs
+KHR-GL40.shaders30.glsl_constructors.ivec4_from_int_mat4x2_fs
+KHR-GL40.shaders30.glsl_constructors.ivec4_from_int_mat4x2_int_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.ivec4_from_int_mat4x2_int_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.ivec4_from_int_mat4x3_vs
+KHR-GL40.shaders30.glsl_constructors.ivec4_from_int_mat4x3_fs
+KHR-GL40.shaders30.glsl_constructors.ivec4_from_int_mat4x3_int_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.ivec4_from_int_mat4x3_int_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.bvec2_from_mat2_vs
+KHR-GL40.shaders30.glsl_constructors.bvec2_from_mat2_fs
+KHR-GL40.shaders30.glsl_constructors.bvec2_from_mat2_mat2_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.bvec2_from_mat2_mat2_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.bvec2_from_mat2x3_vs
+KHR-GL40.shaders30.glsl_constructors.bvec2_from_mat2x3_fs
+KHR-GL40.shaders30.glsl_constructors.bvec2_from_mat2x3_mat2x3_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.bvec2_from_mat2x3_mat2x3_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.bvec2_from_mat2x4_vs
+KHR-GL40.shaders30.glsl_constructors.bvec2_from_mat2x4_fs
+KHR-GL40.shaders30.glsl_constructors.bvec2_from_mat2x4_mat2x4_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.bvec2_from_mat2x4_mat2x4_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.bvec2_from_mat3_vs
+KHR-GL40.shaders30.glsl_constructors.bvec2_from_mat3_fs
+KHR-GL40.shaders30.glsl_constructors.bvec2_from_mat3_mat3_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.bvec2_from_mat3_mat3_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.bvec2_from_mat3x2_vs
+KHR-GL40.shaders30.glsl_constructors.bvec2_from_mat3x2_fs
+KHR-GL40.shaders30.glsl_constructors.bvec2_from_mat3x2_mat3x2_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.bvec2_from_mat3x2_mat3x2_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.bvec2_from_mat3x4_vs
+KHR-GL40.shaders30.glsl_constructors.bvec2_from_mat3x4_fs
+KHR-GL40.shaders30.glsl_constructors.bvec2_from_mat3x4_mat3x4_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.bvec2_from_mat3x4_mat3x4_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.bvec2_from_mat4_vs
+KHR-GL40.shaders30.glsl_constructors.bvec2_from_mat4_fs
+KHR-GL40.shaders30.glsl_constructors.bvec2_from_mat4_mat4_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.bvec2_from_mat4_mat4_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.bvec2_from_mat4x2_vs
+KHR-GL40.shaders30.glsl_constructors.bvec2_from_mat4x2_fs
+KHR-GL40.shaders30.glsl_constructors.bvec2_from_mat4x2_mat4x2_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.bvec2_from_mat4x2_mat4x2_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.bvec2_from_mat4x3_vs
+KHR-GL40.shaders30.glsl_constructors.bvec2_from_mat4x3_fs
+KHR-GL40.shaders30.glsl_constructors.bvec2_from_mat4x3_mat4x3_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.bvec2_from_mat4x3_mat4x3_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.bvec2_from_bool_mat2_vs
+KHR-GL40.shaders30.glsl_constructors.bvec2_from_bool_mat2_fs
+KHR-GL40.shaders30.glsl_constructors.bvec2_from_bool_mat2_bool_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.bvec2_from_bool_mat2_bool_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.bvec2_from_bool_mat2x3_vs
+KHR-GL40.shaders30.glsl_constructors.bvec2_from_bool_mat2x3_fs
+KHR-GL40.shaders30.glsl_constructors.bvec2_from_bool_mat2x3_bool_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.bvec2_from_bool_mat2x3_bool_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.bvec2_from_bool_mat2x4_vs
+KHR-GL40.shaders30.glsl_constructors.bvec2_from_bool_mat2x4_fs
+KHR-GL40.shaders30.glsl_constructors.bvec2_from_bool_mat2x4_bool_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.bvec2_from_bool_mat2x4_bool_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.bvec2_from_bool_mat3_vs
+KHR-GL40.shaders30.glsl_constructors.bvec2_from_bool_mat3_fs
+KHR-GL40.shaders30.glsl_constructors.bvec2_from_bool_mat3_bool_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.bvec2_from_bool_mat3_bool_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.bvec2_from_bool_mat3x2_vs
+KHR-GL40.shaders30.glsl_constructors.bvec2_from_bool_mat3x2_fs
+KHR-GL40.shaders30.glsl_constructors.bvec2_from_bool_mat3x2_bool_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.bvec2_from_bool_mat3x2_bool_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.bvec2_from_bool_mat3x4_vs
+KHR-GL40.shaders30.glsl_constructors.bvec2_from_bool_mat3x4_fs
+KHR-GL40.shaders30.glsl_constructors.bvec2_from_bool_mat3x4_bool_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.bvec2_from_bool_mat3x4_bool_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.bvec2_from_bool_mat4_vs
+KHR-GL40.shaders30.glsl_constructors.bvec2_from_bool_mat4_fs
+KHR-GL40.shaders30.glsl_constructors.bvec2_from_bool_mat4_bool_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.bvec2_from_bool_mat4_bool_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.bvec2_from_bool_mat4x2_vs
+KHR-GL40.shaders30.glsl_constructors.bvec2_from_bool_mat4x2_fs
+KHR-GL40.shaders30.glsl_constructors.bvec2_from_bool_mat4x2_bool_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.bvec2_from_bool_mat4x2_bool_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.bvec2_from_bool_mat4x3_vs
+KHR-GL40.shaders30.glsl_constructors.bvec2_from_bool_mat4x3_fs
+KHR-GL40.shaders30.glsl_constructors.bvec2_from_bool_mat4x3_bool_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.bvec2_from_bool_mat4x3_bool_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.bvec3_from_mat2_vs
+KHR-GL40.shaders30.glsl_constructors.bvec3_from_mat2_fs
+KHR-GL40.shaders30.glsl_constructors.bvec3_from_mat2_mat2_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.bvec3_from_mat2_mat2_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.bvec3_from_mat2x3_vs
+KHR-GL40.shaders30.glsl_constructors.bvec3_from_mat2x3_fs
+KHR-GL40.shaders30.glsl_constructors.bvec3_from_mat2x3_mat2x3_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.bvec3_from_mat2x3_mat2x3_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.bvec3_from_mat2x4_vs
+KHR-GL40.shaders30.glsl_constructors.bvec3_from_mat2x4_fs
+KHR-GL40.shaders30.glsl_constructors.bvec3_from_mat2x4_mat2x4_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.bvec3_from_mat2x4_mat2x4_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.bvec3_from_mat3_vs
+KHR-GL40.shaders30.glsl_constructors.bvec3_from_mat3_fs
+KHR-GL40.shaders30.glsl_constructors.bvec3_from_mat3_mat3_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.bvec3_from_mat3_mat3_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.bvec3_from_mat3x2_vs
+KHR-GL40.shaders30.glsl_constructors.bvec3_from_mat3x2_fs
+KHR-GL40.shaders30.glsl_constructors.bvec3_from_mat3x2_mat3x2_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.bvec3_from_mat3x2_mat3x2_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.bvec3_from_mat3x4_vs
+KHR-GL40.shaders30.glsl_constructors.bvec3_from_mat3x4_fs
+KHR-GL40.shaders30.glsl_constructors.bvec3_from_mat3x4_mat3x4_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.bvec3_from_mat3x4_mat3x4_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.bvec3_from_mat4_vs
+KHR-GL40.shaders30.glsl_constructors.bvec3_from_mat4_fs
+KHR-GL40.shaders30.glsl_constructors.bvec3_from_mat4_mat4_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.bvec3_from_mat4_mat4_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.bvec3_from_mat4x2_vs
+KHR-GL40.shaders30.glsl_constructors.bvec3_from_mat4x2_fs
+KHR-GL40.shaders30.glsl_constructors.bvec3_from_mat4x2_mat4x2_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.bvec3_from_mat4x2_mat4x2_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.bvec3_from_mat4x3_vs
+KHR-GL40.shaders30.glsl_constructors.bvec3_from_mat4x3_fs
+KHR-GL40.shaders30.glsl_constructors.bvec3_from_mat4x3_mat4x3_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.bvec3_from_mat4x3_mat4x3_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.bvec3_from_bool_mat2_vs
+KHR-GL40.shaders30.glsl_constructors.bvec3_from_bool_mat2_fs
+KHR-GL40.shaders30.glsl_constructors.bvec3_from_bool_mat2_bool_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.bvec3_from_bool_mat2_bool_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.bvec3_from_bool_mat2x3_vs
+KHR-GL40.shaders30.glsl_constructors.bvec3_from_bool_mat2x3_fs
+KHR-GL40.shaders30.glsl_constructors.bvec3_from_bool_mat2x3_bool_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.bvec3_from_bool_mat2x3_bool_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.bvec3_from_bool_mat2x4_vs
+KHR-GL40.shaders30.glsl_constructors.bvec3_from_bool_mat2x4_fs
+KHR-GL40.shaders30.glsl_constructors.bvec3_from_bool_mat2x4_bool_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.bvec3_from_bool_mat2x4_bool_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.bvec3_from_bool_mat3_vs
+KHR-GL40.shaders30.glsl_constructors.bvec3_from_bool_mat3_fs
+KHR-GL40.shaders30.glsl_constructors.bvec3_from_bool_mat3_bool_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.bvec3_from_bool_mat3_bool_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.bvec3_from_bool_mat3x2_vs
+KHR-GL40.shaders30.glsl_constructors.bvec3_from_bool_mat3x2_fs
+KHR-GL40.shaders30.glsl_constructors.bvec3_from_bool_mat3x2_bool_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.bvec3_from_bool_mat3x2_bool_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.bvec3_from_bool_mat3x4_vs
+KHR-GL40.shaders30.glsl_constructors.bvec3_from_bool_mat3x4_fs
+KHR-GL40.shaders30.glsl_constructors.bvec3_from_bool_mat3x4_bool_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.bvec3_from_bool_mat3x4_bool_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.bvec3_from_bool_mat4_vs
+KHR-GL40.shaders30.glsl_constructors.bvec3_from_bool_mat4_fs
+KHR-GL40.shaders30.glsl_constructors.bvec3_from_bool_mat4_bool_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.bvec3_from_bool_mat4_bool_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.bvec3_from_bool_mat4x2_vs
+KHR-GL40.shaders30.glsl_constructors.bvec3_from_bool_mat4x2_fs
+KHR-GL40.shaders30.glsl_constructors.bvec3_from_bool_mat4x2_bool_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.bvec3_from_bool_mat4x2_bool_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.bvec3_from_bool_mat4x3_vs
+KHR-GL40.shaders30.glsl_constructors.bvec3_from_bool_mat4x3_fs
+KHR-GL40.shaders30.glsl_constructors.bvec3_from_bool_mat4x3_bool_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.bvec3_from_bool_mat4x3_bool_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.bvec4_from_mat2_vs
+KHR-GL40.shaders30.glsl_constructors.bvec4_from_mat2_fs
+KHR-GL40.shaders30.glsl_constructors.bvec4_from_mat2_mat2_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.bvec4_from_mat2_mat2_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.bvec4_from_mat2x3_vs
+KHR-GL40.shaders30.glsl_constructors.bvec4_from_mat2x3_fs
+KHR-GL40.shaders30.glsl_constructors.bvec4_from_mat2x3_mat2x3_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.bvec4_from_mat2x3_mat2x3_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.bvec4_from_mat2x4_vs
+KHR-GL40.shaders30.glsl_constructors.bvec4_from_mat2x4_fs
+KHR-GL40.shaders30.glsl_constructors.bvec4_from_mat2x4_mat2x4_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.bvec4_from_mat2x4_mat2x4_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.bvec4_from_mat3_vs
+KHR-GL40.shaders30.glsl_constructors.bvec4_from_mat3_fs
+KHR-GL40.shaders30.glsl_constructors.bvec4_from_mat3_mat3_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.bvec4_from_mat3_mat3_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.bvec4_from_mat3x2_vs
+KHR-GL40.shaders30.glsl_constructors.bvec4_from_mat3x2_fs
+KHR-GL40.shaders30.glsl_constructors.bvec4_from_mat3x2_mat3x2_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.bvec4_from_mat3x2_mat3x2_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.bvec4_from_mat3x4_vs
+KHR-GL40.shaders30.glsl_constructors.bvec4_from_mat3x4_fs
+KHR-GL40.shaders30.glsl_constructors.bvec4_from_mat3x4_mat3x4_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.bvec4_from_mat3x4_mat3x4_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.bvec4_from_mat4_vs
+KHR-GL40.shaders30.glsl_constructors.bvec4_from_mat4_fs
+KHR-GL40.shaders30.glsl_constructors.bvec4_from_mat4_mat4_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.bvec4_from_mat4_mat4_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.bvec4_from_mat4x2_vs
+KHR-GL40.shaders30.glsl_constructors.bvec4_from_mat4x2_fs
+KHR-GL40.shaders30.glsl_constructors.bvec4_from_mat4x2_mat4x2_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.bvec4_from_mat4x2_mat4x2_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.bvec4_from_mat4x3_vs
+KHR-GL40.shaders30.glsl_constructors.bvec4_from_mat4x3_fs
+KHR-GL40.shaders30.glsl_constructors.bvec4_from_mat4x3_mat4x3_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.bvec4_from_mat4x3_mat4x3_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.bvec4_from_bool_mat2_vs
+KHR-GL40.shaders30.glsl_constructors.bvec4_from_bool_mat2_fs
+KHR-GL40.shaders30.glsl_constructors.bvec4_from_bool_mat2_bool_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.bvec4_from_bool_mat2_bool_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.bvec4_from_bool_mat2x3_vs
+KHR-GL40.shaders30.glsl_constructors.bvec4_from_bool_mat2x3_fs
+KHR-GL40.shaders30.glsl_constructors.bvec4_from_bool_mat2x3_bool_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.bvec4_from_bool_mat2x3_bool_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.bvec4_from_bool_mat2x4_vs
+KHR-GL40.shaders30.glsl_constructors.bvec4_from_bool_mat2x4_fs
+KHR-GL40.shaders30.glsl_constructors.bvec4_from_bool_mat2x4_bool_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.bvec4_from_bool_mat2x4_bool_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.bvec4_from_bool_mat3_vs
+KHR-GL40.shaders30.glsl_constructors.bvec4_from_bool_mat3_fs
+KHR-GL40.shaders30.glsl_constructors.bvec4_from_bool_mat3_bool_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.bvec4_from_bool_mat3_bool_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.bvec4_from_bool_mat3x2_vs
+KHR-GL40.shaders30.glsl_constructors.bvec4_from_bool_mat3x2_fs
+KHR-GL40.shaders30.glsl_constructors.bvec4_from_bool_mat3x2_bool_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.bvec4_from_bool_mat3x2_bool_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.bvec4_from_bool_mat3x4_vs
+KHR-GL40.shaders30.glsl_constructors.bvec4_from_bool_mat3x4_fs
+KHR-GL40.shaders30.glsl_constructors.bvec4_from_bool_mat3x4_bool_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.bvec4_from_bool_mat3x4_bool_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.bvec4_from_bool_mat4_vs
+KHR-GL40.shaders30.glsl_constructors.bvec4_from_bool_mat4_fs
+KHR-GL40.shaders30.glsl_constructors.bvec4_from_bool_mat4_bool_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.bvec4_from_bool_mat4_bool_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.bvec4_from_bool_mat4x2_vs
+KHR-GL40.shaders30.glsl_constructors.bvec4_from_bool_mat4x2_fs
+KHR-GL40.shaders30.glsl_constructors.bvec4_from_bool_mat4x2_bool_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.bvec4_from_bool_mat4x2_bool_invalid_fs
+KHR-GL40.shaders30.glsl_constructors.bvec4_from_bool_mat4x3_vs
+KHR-GL40.shaders30.glsl_constructors.bvec4_from_bool_mat4x3_fs
+KHR-GL40.shaders30.glsl_constructors.bvec4_from_bool_mat4x3_bool_invalid_vs
+KHR-GL40.shaders30.glsl_constructors.bvec4_from_bool_mat4x3_bool_invalid_fs
 KHR-GL40.ext_texture_shadow_lod.texture.sampler2darrayshadow_fragment
 KHR-GL40.ext_texture_shadow_lod.texture.sampler2darrayshadow_bias_fragment
 KHR-GL40.ext_texture_shadow_lod.texture.samplercubearrayshadow_vertex
diff --git a/external/openglcts/data/mustpass/gl/khronos_mustpass/4.6.1.x/gl41-master.txt b/external/openglcts/data/mustpass/gl/khronos_mustpass/4.6.1.x/gl41-master.txt
index 63788f9..4d3a715 100644
--- a/external/openglcts/data/mustpass/gl/khronos_mustpass/4.6.1.x/gl41-master.txt
+++ b/external/openglcts/data/mustpass/gl/khronos_mustpass/4.6.1.x/gl41-master.txt
@@ -192,6 +192,654 @@
 KHR-GL41.texture_repeat_mode.depth24_stencil8_11x131_2_mirrored_repeat
 KHR-GL41.shaders30.declarations.declarations.redeclare_gl_FragColor
 KHR-GL41.shaders30.declarations.declarations.redeclare_gl_FragData
+KHR-GL41.shaders30.glsl_constructors.vec2_from_mat2_vs
+KHR-GL41.shaders30.glsl_constructors.vec2_from_mat2_fs
+KHR-GL41.shaders30.glsl_constructors.vec2_from_mat2_mat2_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.vec2_from_mat2_mat2_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.vec2_from_mat2x3_vs
+KHR-GL41.shaders30.glsl_constructors.vec2_from_mat2x3_fs
+KHR-GL41.shaders30.glsl_constructors.vec2_from_mat2x3_mat2x3_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.vec2_from_mat2x3_mat2x3_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.vec2_from_mat2x4_vs
+KHR-GL41.shaders30.glsl_constructors.vec2_from_mat2x4_fs
+KHR-GL41.shaders30.glsl_constructors.vec2_from_mat2x4_mat2x4_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.vec2_from_mat2x4_mat2x4_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.vec2_from_mat3_vs
+KHR-GL41.shaders30.glsl_constructors.vec2_from_mat3_fs
+KHR-GL41.shaders30.glsl_constructors.vec2_from_mat3_mat3_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.vec2_from_mat3_mat3_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.vec2_from_mat3x2_vs
+KHR-GL41.shaders30.glsl_constructors.vec2_from_mat3x2_fs
+KHR-GL41.shaders30.glsl_constructors.vec2_from_mat3x2_mat3x2_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.vec2_from_mat3x2_mat3x2_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.vec2_from_mat3x4_vs
+KHR-GL41.shaders30.glsl_constructors.vec2_from_mat3x4_fs
+KHR-GL41.shaders30.glsl_constructors.vec2_from_mat3x4_mat3x4_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.vec2_from_mat3x4_mat3x4_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.vec2_from_mat4_vs
+KHR-GL41.shaders30.glsl_constructors.vec2_from_mat4_fs
+KHR-GL41.shaders30.glsl_constructors.vec2_from_mat4_mat4_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.vec2_from_mat4_mat4_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.vec2_from_mat4x2_vs
+KHR-GL41.shaders30.glsl_constructors.vec2_from_mat4x2_fs
+KHR-GL41.shaders30.glsl_constructors.vec2_from_mat4x2_mat4x2_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.vec2_from_mat4x2_mat4x2_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.vec2_from_mat4x3_vs
+KHR-GL41.shaders30.glsl_constructors.vec2_from_mat4x3_fs
+KHR-GL41.shaders30.glsl_constructors.vec2_from_mat4x3_mat4x3_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.vec2_from_mat4x3_mat4x3_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.vec2_from_float_mat2_vs
+KHR-GL41.shaders30.glsl_constructors.vec2_from_float_mat2_fs
+KHR-GL41.shaders30.glsl_constructors.vec2_from_float_mat2_float_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.vec2_from_float_mat2_float_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.vec2_from_float_mat2x3_vs
+KHR-GL41.shaders30.glsl_constructors.vec2_from_float_mat2x3_fs
+KHR-GL41.shaders30.glsl_constructors.vec2_from_float_mat2x3_float_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.vec2_from_float_mat2x3_float_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.vec2_from_float_mat2x4_vs
+KHR-GL41.shaders30.glsl_constructors.vec2_from_float_mat2x4_fs
+KHR-GL41.shaders30.glsl_constructors.vec2_from_float_mat2x4_float_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.vec2_from_float_mat2x4_float_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.vec2_from_float_mat3_vs
+KHR-GL41.shaders30.glsl_constructors.vec2_from_float_mat3_fs
+KHR-GL41.shaders30.glsl_constructors.vec2_from_float_mat3_float_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.vec2_from_float_mat3_float_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.vec2_from_float_mat3x2_vs
+KHR-GL41.shaders30.glsl_constructors.vec2_from_float_mat3x2_fs
+KHR-GL41.shaders30.glsl_constructors.vec2_from_float_mat3x2_float_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.vec2_from_float_mat3x2_float_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.vec2_from_float_mat3x4_vs
+KHR-GL41.shaders30.glsl_constructors.vec2_from_float_mat3x4_fs
+KHR-GL41.shaders30.glsl_constructors.vec2_from_float_mat3x4_float_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.vec2_from_float_mat3x4_float_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.vec2_from_float_mat4_vs
+KHR-GL41.shaders30.glsl_constructors.vec2_from_float_mat4_fs
+KHR-GL41.shaders30.glsl_constructors.vec2_from_float_mat4_float_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.vec2_from_float_mat4_float_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.vec2_from_float_mat4x2_vs
+KHR-GL41.shaders30.glsl_constructors.vec2_from_float_mat4x2_fs
+KHR-GL41.shaders30.glsl_constructors.vec2_from_float_mat4x2_float_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.vec2_from_float_mat4x2_float_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.vec2_from_float_mat4x3_vs
+KHR-GL41.shaders30.glsl_constructors.vec2_from_float_mat4x3_fs
+KHR-GL41.shaders30.glsl_constructors.vec2_from_float_mat4x3_float_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.vec2_from_float_mat4x3_float_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.vec3_from_mat2_vs
+KHR-GL41.shaders30.glsl_constructors.vec3_from_mat2_fs
+KHR-GL41.shaders30.glsl_constructors.vec3_from_mat2_mat2_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.vec3_from_mat2_mat2_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.vec3_from_mat2x3_vs
+KHR-GL41.shaders30.glsl_constructors.vec3_from_mat2x3_fs
+KHR-GL41.shaders30.glsl_constructors.vec3_from_mat2x3_mat2x3_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.vec3_from_mat2x3_mat2x3_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.vec3_from_mat2x4_vs
+KHR-GL41.shaders30.glsl_constructors.vec3_from_mat2x4_fs
+KHR-GL41.shaders30.glsl_constructors.vec3_from_mat2x4_mat2x4_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.vec3_from_mat2x4_mat2x4_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.vec3_from_mat3_vs
+KHR-GL41.shaders30.glsl_constructors.vec3_from_mat3_fs
+KHR-GL41.shaders30.glsl_constructors.vec3_from_mat3_mat3_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.vec3_from_mat3_mat3_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.vec3_from_mat3x2_vs
+KHR-GL41.shaders30.glsl_constructors.vec3_from_mat3x2_fs
+KHR-GL41.shaders30.glsl_constructors.vec3_from_mat3x2_mat3x2_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.vec3_from_mat3x2_mat3x2_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.vec3_from_mat3x4_vs
+KHR-GL41.shaders30.glsl_constructors.vec3_from_mat3x4_fs
+KHR-GL41.shaders30.glsl_constructors.vec3_from_mat3x4_mat3x4_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.vec3_from_mat3x4_mat3x4_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.vec3_from_mat4_vs
+KHR-GL41.shaders30.glsl_constructors.vec3_from_mat4_fs
+KHR-GL41.shaders30.glsl_constructors.vec3_from_mat4_mat4_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.vec3_from_mat4_mat4_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.vec3_from_mat4x2_vs
+KHR-GL41.shaders30.glsl_constructors.vec3_from_mat4x2_fs
+KHR-GL41.shaders30.glsl_constructors.vec3_from_mat4x2_mat4x2_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.vec3_from_mat4x2_mat4x2_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.vec3_from_mat4x3_vs
+KHR-GL41.shaders30.glsl_constructors.vec3_from_mat4x3_fs
+KHR-GL41.shaders30.glsl_constructors.vec3_from_mat4x3_mat4x3_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.vec3_from_mat4x3_mat4x3_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.vec3_from_float_mat2_vs
+KHR-GL41.shaders30.glsl_constructors.vec3_from_float_mat2_fs
+KHR-GL41.shaders30.glsl_constructors.vec3_from_float_mat2_float_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.vec3_from_float_mat2_float_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.vec3_from_float_mat2x3_vs
+KHR-GL41.shaders30.glsl_constructors.vec3_from_float_mat2x3_fs
+KHR-GL41.shaders30.glsl_constructors.vec3_from_float_mat2x3_float_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.vec3_from_float_mat2x3_float_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.vec3_from_float_mat2x4_vs
+KHR-GL41.shaders30.glsl_constructors.vec3_from_float_mat2x4_fs
+KHR-GL41.shaders30.glsl_constructors.vec3_from_float_mat2x4_float_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.vec3_from_float_mat2x4_float_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.vec3_from_float_mat3_vs
+KHR-GL41.shaders30.glsl_constructors.vec3_from_float_mat3_fs
+KHR-GL41.shaders30.glsl_constructors.vec3_from_float_mat3_float_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.vec3_from_float_mat3_float_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.vec3_from_float_mat3x2_vs
+KHR-GL41.shaders30.glsl_constructors.vec3_from_float_mat3x2_fs
+KHR-GL41.shaders30.glsl_constructors.vec3_from_float_mat3x2_float_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.vec3_from_float_mat3x2_float_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.vec3_from_float_mat3x4_vs
+KHR-GL41.shaders30.glsl_constructors.vec3_from_float_mat3x4_fs
+KHR-GL41.shaders30.glsl_constructors.vec3_from_float_mat3x4_float_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.vec3_from_float_mat3x4_float_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.vec3_from_float_mat4_vs
+KHR-GL41.shaders30.glsl_constructors.vec3_from_float_mat4_fs
+KHR-GL41.shaders30.glsl_constructors.vec3_from_float_mat4_float_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.vec3_from_float_mat4_float_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.vec3_from_float_mat4x2_vs
+KHR-GL41.shaders30.glsl_constructors.vec3_from_float_mat4x2_fs
+KHR-GL41.shaders30.glsl_constructors.vec3_from_float_mat4x2_float_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.vec3_from_float_mat4x2_float_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.vec3_from_float_mat4x3_vs
+KHR-GL41.shaders30.glsl_constructors.vec3_from_float_mat4x3_fs
+KHR-GL41.shaders30.glsl_constructors.vec3_from_float_mat4x3_float_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.vec3_from_float_mat4x3_float_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.vec4_from_mat2_vs
+KHR-GL41.shaders30.glsl_constructors.vec4_from_mat2_fs
+KHR-GL41.shaders30.glsl_constructors.vec4_from_mat2_mat2_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.vec4_from_mat2_mat2_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.vec4_from_mat2x3_vs
+KHR-GL41.shaders30.glsl_constructors.vec4_from_mat2x3_fs
+KHR-GL41.shaders30.glsl_constructors.vec4_from_mat2x3_mat2x3_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.vec4_from_mat2x3_mat2x3_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.vec4_from_mat2x4_vs
+KHR-GL41.shaders30.glsl_constructors.vec4_from_mat2x4_fs
+KHR-GL41.shaders30.glsl_constructors.vec4_from_mat2x4_mat2x4_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.vec4_from_mat2x4_mat2x4_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.vec4_from_mat3_vs
+KHR-GL41.shaders30.glsl_constructors.vec4_from_mat3_fs
+KHR-GL41.shaders30.glsl_constructors.vec4_from_mat3_mat3_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.vec4_from_mat3_mat3_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.vec4_from_mat3x2_vs
+KHR-GL41.shaders30.glsl_constructors.vec4_from_mat3x2_fs
+KHR-GL41.shaders30.glsl_constructors.vec4_from_mat3x2_mat3x2_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.vec4_from_mat3x2_mat3x2_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.vec4_from_mat3x4_vs
+KHR-GL41.shaders30.glsl_constructors.vec4_from_mat3x4_fs
+KHR-GL41.shaders30.glsl_constructors.vec4_from_mat3x4_mat3x4_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.vec4_from_mat3x4_mat3x4_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.vec4_from_mat4_vs
+KHR-GL41.shaders30.glsl_constructors.vec4_from_mat4_fs
+KHR-GL41.shaders30.glsl_constructors.vec4_from_mat4_mat4_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.vec4_from_mat4_mat4_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.vec4_from_mat4x2_vs
+KHR-GL41.shaders30.glsl_constructors.vec4_from_mat4x2_fs
+KHR-GL41.shaders30.glsl_constructors.vec4_from_mat4x2_mat4x2_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.vec4_from_mat4x2_mat4x2_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.vec4_from_mat4x3_vs
+KHR-GL41.shaders30.glsl_constructors.vec4_from_mat4x3_fs
+KHR-GL41.shaders30.glsl_constructors.vec4_from_mat4x3_mat4x3_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.vec4_from_mat4x3_mat4x3_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.vec4_from_float_mat2_vs
+KHR-GL41.shaders30.glsl_constructors.vec4_from_float_mat2_fs
+KHR-GL41.shaders30.glsl_constructors.vec4_from_float_mat2_float_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.vec4_from_float_mat2_float_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.vec4_from_float_mat2x3_vs
+KHR-GL41.shaders30.glsl_constructors.vec4_from_float_mat2x3_fs
+KHR-GL41.shaders30.glsl_constructors.vec4_from_float_mat2x3_float_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.vec4_from_float_mat2x3_float_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.vec4_from_float_mat2x4_vs
+KHR-GL41.shaders30.glsl_constructors.vec4_from_float_mat2x4_fs
+KHR-GL41.shaders30.glsl_constructors.vec4_from_float_mat2x4_float_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.vec4_from_float_mat2x4_float_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.vec4_from_float_mat3_vs
+KHR-GL41.shaders30.glsl_constructors.vec4_from_float_mat3_fs
+KHR-GL41.shaders30.glsl_constructors.vec4_from_float_mat3_float_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.vec4_from_float_mat3_float_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.vec4_from_float_mat3x2_vs
+KHR-GL41.shaders30.glsl_constructors.vec4_from_float_mat3x2_fs
+KHR-GL41.shaders30.glsl_constructors.vec4_from_float_mat3x2_float_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.vec4_from_float_mat3x2_float_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.vec4_from_float_mat3x4_vs
+KHR-GL41.shaders30.glsl_constructors.vec4_from_float_mat3x4_fs
+KHR-GL41.shaders30.glsl_constructors.vec4_from_float_mat3x4_float_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.vec4_from_float_mat3x4_float_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.vec4_from_float_mat4_vs
+KHR-GL41.shaders30.glsl_constructors.vec4_from_float_mat4_fs
+KHR-GL41.shaders30.glsl_constructors.vec4_from_float_mat4_float_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.vec4_from_float_mat4_float_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.vec4_from_float_mat4x2_vs
+KHR-GL41.shaders30.glsl_constructors.vec4_from_float_mat4x2_fs
+KHR-GL41.shaders30.glsl_constructors.vec4_from_float_mat4x2_float_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.vec4_from_float_mat4x2_float_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.vec4_from_float_mat4x3_vs
+KHR-GL41.shaders30.glsl_constructors.vec4_from_float_mat4x3_fs
+KHR-GL41.shaders30.glsl_constructors.vec4_from_float_mat4x3_float_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.vec4_from_float_mat4x3_float_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.ivec2_from_mat2_vs
+KHR-GL41.shaders30.glsl_constructors.ivec2_from_mat2_fs
+KHR-GL41.shaders30.glsl_constructors.ivec2_from_mat2_mat2_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.ivec2_from_mat2_mat2_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.ivec2_from_mat2x3_vs
+KHR-GL41.shaders30.glsl_constructors.ivec2_from_mat2x3_fs
+KHR-GL41.shaders30.glsl_constructors.ivec2_from_mat2x3_mat2x3_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.ivec2_from_mat2x3_mat2x3_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.ivec2_from_mat2x4_vs
+KHR-GL41.shaders30.glsl_constructors.ivec2_from_mat2x4_fs
+KHR-GL41.shaders30.glsl_constructors.ivec2_from_mat2x4_mat2x4_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.ivec2_from_mat2x4_mat2x4_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.ivec2_from_mat3_vs
+KHR-GL41.shaders30.glsl_constructors.ivec2_from_mat3_fs
+KHR-GL41.shaders30.glsl_constructors.ivec2_from_mat3_mat3_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.ivec2_from_mat3_mat3_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.ivec2_from_mat3x2_vs
+KHR-GL41.shaders30.glsl_constructors.ivec2_from_mat3x2_fs
+KHR-GL41.shaders30.glsl_constructors.ivec2_from_mat3x2_mat3x2_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.ivec2_from_mat3x2_mat3x2_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.ivec2_from_mat3x4_vs
+KHR-GL41.shaders30.glsl_constructors.ivec2_from_mat3x4_fs
+KHR-GL41.shaders30.glsl_constructors.ivec2_from_mat3x4_mat3x4_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.ivec2_from_mat3x4_mat3x4_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.ivec2_from_mat4_vs
+KHR-GL41.shaders30.glsl_constructors.ivec2_from_mat4_fs
+KHR-GL41.shaders30.glsl_constructors.ivec2_from_mat4_mat4_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.ivec2_from_mat4_mat4_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.ivec2_from_mat4x2_vs
+KHR-GL41.shaders30.glsl_constructors.ivec2_from_mat4x2_fs
+KHR-GL41.shaders30.glsl_constructors.ivec2_from_mat4x2_mat4x2_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.ivec2_from_mat4x2_mat4x2_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.ivec2_from_mat4x3_vs
+KHR-GL41.shaders30.glsl_constructors.ivec2_from_mat4x3_fs
+KHR-GL41.shaders30.glsl_constructors.ivec2_from_mat4x3_mat4x3_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.ivec2_from_mat4x3_mat4x3_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.ivec2_from_int_mat2_vs
+KHR-GL41.shaders30.glsl_constructors.ivec2_from_int_mat2_fs
+KHR-GL41.shaders30.glsl_constructors.ivec2_from_int_mat2_int_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.ivec2_from_int_mat2_int_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.ivec2_from_int_mat2x3_vs
+KHR-GL41.shaders30.glsl_constructors.ivec2_from_int_mat2x3_fs
+KHR-GL41.shaders30.glsl_constructors.ivec2_from_int_mat2x3_int_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.ivec2_from_int_mat2x3_int_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.ivec2_from_int_mat2x4_vs
+KHR-GL41.shaders30.glsl_constructors.ivec2_from_int_mat2x4_fs
+KHR-GL41.shaders30.glsl_constructors.ivec2_from_int_mat2x4_int_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.ivec2_from_int_mat2x4_int_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.ivec2_from_int_mat3_vs
+KHR-GL41.shaders30.glsl_constructors.ivec2_from_int_mat3_fs
+KHR-GL41.shaders30.glsl_constructors.ivec2_from_int_mat3_int_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.ivec2_from_int_mat3_int_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.ivec2_from_int_mat3x2_vs
+KHR-GL41.shaders30.glsl_constructors.ivec2_from_int_mat3x2_fs
+KHR-GL41.shaders30.glsl_constructors.ivec2_from_int_mat3x2_int_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.ivec2_from_int_mat3x2_int_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.ivec2_from_int_mat3x4_vs
+KHR-GL41.shaders30.glsl_constructors.ivec2_from_int_mat3x4_fs
+KHR-GL41.shaders30.glsl_constructors.ivec2_from_int_mat3x4_int_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.ivec2_from_int_mat3x4_int_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.ivec2_from_int_mat4_vs
+KHR-GL41.shaders30.glsl_constructors.ivec2_from_int_mat4_fs
+KHR-GL41.shaders30.glsl_constructors.ivec2_from_int_mat4_int_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.ivec2_from_int_mat4_int_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.ivec2_from_int_mat4x2_vs
+KHR-GL41.shaders30.glsl_constructors.ivec2_from_int_mat4x2_fs
+KHR-GL41.shaders30.glsl_constructors.ivec2_from_int_mat4x2_int_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.ivec2_from_int_mat4x2_int_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.ivec2_from_int_mat4x3_vs
+KHR-GL41.shaders30.glsl_constructors.ivec2_from_int_mat4x3_fs
+KHR-GL41.shaders30.glsl_constructors.ivec2_from_int_mat4x3_int_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.ivec2_from_int_mat4x3_int_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.ivec3_from_mat2_vs
+KHR-GL41.shaders30.glsl_constructors.ivec3_from_mat2_fs
+KHR-GL41.shaders30.glsl_constructors.ivec3_from_mat2_mat2_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.ivec3_from_mat2_mat2_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.ivec3_from_mat2x3_vs
+KHR-GL41.shaders30.glsl_constructors.ivec3_from_mat2x3_fs
+KHR-GL41.shaders30.glsl_constructors.ivec3_from_mat2x3_mat2x3_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.ivec3_from_mat2x3_mat2x3_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.ivec3_from_mat2x4_vs
+KHR-GL41.shaders30.glsl_constructors.ivec3_from_mat2x4_fs
+KHR-GL41.shaders30.glsl_constructors.ivec3_from_mat2x4_mat2x4_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.ivec3_from_mat2x4_mat2x4_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.ivec3_from_mat3_vs
+KHR-GL41.shaders30.glsl_constructors.ivec3_from_mat3_fs
+KHR-GL41.shaders30.glsl_constructors.ivec3_from_mat3_mat3_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.ivec3_from_mat3_mat3_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.ivec3_from_mat3x2_vs
+KHR-GL41.shaders30.glsl_constructors.ivec3_from_mat3x2_fs
+KHR-GL41.shaders30.glsl_constructors.ivec3_from_mat3x2_mat3x2_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.ivec3_from_mat3x2_mat3x2_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.ivec3_from_mat3x4_vs
+KHR-GL41.shaders30.glsl_constructors.ivec3_from_mat3x4_fs
+KHR-GL41.shaders30.glsl_constructors.ivec3_from_mat3x4_mat3x4_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.ivec3_from_mat3x4_mat3x4_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.ivec3_from_mat4_vs
+KHR-GL41.shaders30.glsl_constructors.ivec3_from_mat4_fs
+KHR-GL41.shaders30.glsl_constructors.ivec3_from_mat4_mat4_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.ivec3_from_mat4_mat4_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.ivec3_from_mat4x2_vs
+KHR-GL41.shaders30.glsl_constructors.ivec3_from_mat4x2_fs
+KHR-GL41.shaders30.glsl_constructors.ivec3_from_mat4x2_mat4x2_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.ivec3_from_mat4x2_mat4x2_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.ivec3_from_mat4x3_vs
+KHR-GL41.shaders30.glsl_constructors.ivec3_from_mat4x3_fs
+KHR-GL41.shaders30.glsl_constructors.ivec3_from_mat4x3_mat4x3_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.ivec3_from_mat4x3_mat4x3_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.ivec3_from_int_mat2_vs
+KHR-GL41.shaders30.glsl_constructors.ivec3_from_int_mat2_fs
+KHR-GL41.shaders30.glsl_constructors.ivec3_from_int_mat2_int_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.ivec3_from_int_mat2_int_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.ivec3_from_int_mat2x3_vs
+KHR-GL41.shaders30.glsl_constructors.ivec3_from_int_mat2x3_fs
+KHR-GL41.shaders30.glsl_constructors.ivec3_from_int_mat2x3_int_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.ivec3_from_int_mat2x3_int_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.ivec3_from_int_mat2x4_vs
+KHR-GL41.shaders30.glsl_constructors.ivec3_from_int_mat2x4_fs
+KHR-GL41.shaders30.glsl_constructors.ivec3_from_int_mat2x4_int_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.ivec3_from_int_mat2x4_int_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.ivec3_from_int_mat3_vs
+KHR-GL41.shaders30.glsl_constructors.ivec3_from_int_mat3_fs
+KHR-GL41.shaders30.glsl_constructors.ivec3_from_int_mat3_int_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.ivec3_from_int_mat3_int_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.ivec3_from_int_mat3x2_vs
+KHR-GL41.shaders30.glsl_constructors.ivec3_from_int_mat3x2_fs
+KHR-GL41.shaders30.glsl_constructors.ivec3_from_int_mat3x2_int_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.ivec3_from_int_mat3x2_int_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.ivec3_from_int_mat3x4_vs
+KHR-GL41.shaders30.glsl_constructors.ivec3_from_int_mat3x4_fs
+KHR-GL41.shaders30.glsl_constructors.ivec3_from_int_mat3x4_int_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.ivec3_from_int_mat3x4_int_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.ivec3_from_int_mat4_vs
+KHR-GL41.shaders30.glsl_constructors.ivec3_from_int_mat4_fs
+KHR-GL41.shaders30.glsl_constructors.ivec3_from_int_mat4_int_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.ivec3_from_int_mat4_int_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.ivec3_from_int_mat4x2_vs
+KHR-GL41.shaders30.glsl_constructors.ivec3_from_int_mat4x2_fs
+KHR-GL41.shaders30.glsl_constructors.ivec3_from_int_mat4x2_int_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.ivec3_from_int_mat4x2_int_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.ivec3_from_int_mat4x3_vs
+KHR-GL41.shaders30.glsl_constructors.ivec3_from_int_mat4x3_fs
+KHR-GL41.shaders30.glsl_constructors.ivec3_from_int_mat4x3_int_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.ivec3_from_int_mat4x3_int_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.ivec4_from_mat2_vs
+KHR-GL41.shaders30.glsl_constructors.ivec4_from_mat2_fs
+KHR-GL41.shaders30.glsl_constructors.ivec4_from_mat2_mat2_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.ivec4_from_mat2_mat2_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.ivec4_from_mat2x3_vs
+KHR-GL41.shaders30.glsl_constructors.ivec4_from_mat2x3_fs
+KHR-GL41.shaders30.glsl_constructors.ivec4_from_mat2x3_mat2x3_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.ivec4_from_mat2x3_mat2x3_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.ivec4_from_mat2x4_vs
+KHR-GL41.shaders30.glsl_constructors.ivec4_from_mat2x4_fs
+KHR-GL41.shaders30.glsl_constructors.ivec4_from_mat2x4_mat2x4_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.ivec4_from_mat2x4_mat2x4_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.ivec4_from_mat3_vs
+KHR-GL41.shaders30.glsl_constructors.ivec4_from_mat3_fs
+KHR-GL41.shaders30.glsl_constructors.ivec4_from_mat3_mat3_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.ivec4_from_mat3_mat3_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.ivec4_from_mat3x2_vs
+KHR-GL41.shaders30.glsl_constructors.ivec4_from_mat3x2_fs
+KHR-GL41.shaders30.glsl_constructors.ivec4_from_mat3x2_mat3x2_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.ivec4_from_mat3x2_mat3x2_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.ivec4_from_mat3x4_vs
+KHR-GL41.shaders30.glsl_constructors.ivec4_from_mat3x4_fs
+KHR-GL41.shaders30.glsl_constructors.ivec4_from_mat3x4_mat3x4_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.ivec4_from_mat3x4_mat3x4_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.ivec4_from_mat4_vs
+KHR-GL41.shaders30.glsl_constructors.ivec4_from_mat4_fs
+KHR-GL41.shaders30.glsl_constructors.ivec4_from_mat4_mat4_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.ivec4_from_mat4_mat4_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.ivec4_from_mat4x2_vs
+KHR-GL41.shaders30.glsl_constructors.ivec4_from_mat4x2_fs
+KHR-GL41.shaders30.glsl_constructors.ivec4_from_mat4x2_mat4x2_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.ivec4_from_mat4x2_mat4x2_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.ivec4_from_mat4x3_vs
+KHR-GL41.shaders30.glsl_constructors.ivec4_from_mat4x3_fs
+KHR-GL41.shaders30.glsl_constructors.ivec4_from_mat4x3_mat4x3_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.ivec4_from_mat4x3_mat4x3_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.ivec4_from_int_mat2_vs
+KHR-GL41.shaders30.glsl_constructors.ivec4_from_int_mat2_fs
+KHR-GL41.shaders30.glsl_constructors.ivec4_from_int_mat2_int_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.ivec4_from_int_mat2_int_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.ivec4_from_int_mat2x3_vs
+KHR-GL41.shaders30.glsl_constructors.ivec4_from_int_mat2x3_fs
+KHR-GL41.shaders30.glsl_constructors.ivec4_from_int_mat2x3_int_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.ivec4_from_int_mat2x3_int_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.ivec4_from_int_mat2x4_vs
+KHR-GL41.shaders30.glsl_constructors.ivec4_from_int_mat2x4_fs
+KHR-GL41.shaders30.glsl_constructors.ivec4_from_int_mat2x4_int_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.ivec4_from_int_mat2x4_int_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.ivec4_from_int_mat3_vs
+KHR-GL41.shaders30.glsl_constructors.ivec4_from_int_mat3_fs
+KHR-GL41.shaders30.glsl_constructors.ivec4_from_int_mat3_int_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.ivec4_from_int_mat3_int_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.ivec4_from_int_mat3x2_vs
+KHR-GL41.shaders30.glsl_constructors.ivec4_from_int_mat3x2_fs
+KHR-GL41.shaders30.glsl_constructors.ivec4_from_int_mat3x2_int_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.ivec4_from_int_mat3x2_int_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.ivec4_from_int_mat3x4_vs
+KHR-GL41.shaders30.glsl_constructors.ivec4_from_int_mat3x4_fs
+KHR-GL41.shaders30.glsl_constructors.ivec4_from_int_mat3x4_int_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.ivec4_from_int_mat3x4_int_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.ivec4_from_int_mat4_vs
+KHR-GL41.shaders30.glsl_constructors.ivec4_from_int_mat4_fs
+KHR-GL41.shaders30.glsl_constructors.ivec4_from_int_mat4_int_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.ivec4_from_int_mat4_int_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.ivec4_from_int_mat4x2_vs
+KHR-GL41.shaders30.glsl_constructors.ivec4_from_int_mat4x2_fs
+KHR-GL41.shaders30.glsl_constructors.ivec4_from_int_mat4x2_int_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.ivec4_from_int_mat4x2_int_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.ivec4_from_int_mat4x3_vs
+KHR-GL41.shaders30.glsl_constructors.ivec4_from_int_mat4x3_fs
+KHR-GL41.shaders30.glsl_constructors.ivec4_from_int_mat4x3_int_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.ivec4_from_int_mat4x3_int_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.bvec2_from_mat2_vs
+KHR-GL41.shaders30.glsl_constructors.bvec2_from_mat2_fs
+KHR-GL41.shaders30.glsl_constructors.bvec2_from_mat2_mat2_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.bvec2_from_mat2_mat2_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.bvec2_from_mat2x3_vs
+KHR-GL41.shaders30.glsl_constructors.bvec2_from_mat2x3_fs
+KHR-GL41.shaders30.glsl_constructors.bvec2_from_mat2x3_mat2x3_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.bvec2_from_mat2x3_mat2x3_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.bvec2_from_mat2x4_vs
+KHR-GL41.shaders30.glsl_constructors.bvec2_from_mat2x4_fs
+KHR-GL41.shaders30.glsl_constructors.bvec2_from_mat2x4_mat2x4_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.bvec2_from_mat2x4_mat2x4_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.bvec2_from_mat3_vs
+KHR-GL41.shaders30.glsl_constructors.bvec2_from_mat3_fs
+KHR-GL41.shaders30.glsl_constructors.bvec2_from_mat3_mat3_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.bvec2_from_mat3_mat3_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.bvec2_from_mat3x2_vs
+KHR-GL41.shaders30.glsl_constructors.bvec2_from_mat3x2_fs
+KHR-GL41.shaders30.glsl_constructors.bvec2_from_mat3x2_mat3x2_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.bvec2_from_mat3x2_mat3x2_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.bvec2_from_mat3x4_vs
+KHR-GL41.shaders30.glsl_constructors.bvec2_from_mat3x4_fs
+KHR-GL41.shaders30.glsl_constructors.bvec2_from_mat3x4_mat3x4_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.bvec2_from_mat3x4_mat3x4_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.bvec2_from_mat4_vs
+KHR-GL41.shaders30.glsl_constructors.bvec2_from_mat4_fs
+KHR-GL41.shaders30.glsl_constructors.bvec2_from_mat4_mat4_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.bvec2_from_mat4_mat4_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.bvec2_from_mat4x2_vs
+KHR-GL41.shaders30.glsl_constructors.bvec2_from_mat4x2_fs
+KHR-GL41.shaders30.glsl_constructors.bvec2_from_mat4x2_mat4x2_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.bvec2_from_mat4x2_mat4x2_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.bvec2_from_mat4x3_vs
+KHR-GL41.shaders30.glsl_constructors.bvec2_from_mat4x3_fs
+KHR-GL41.shaders30.glsl_constructors.bvec2_from_mat4x3_mat4x3_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.bvec2_from_mat4x3_mat4x3_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.bvec2_from_bool_mat2_vs
+KHR-GL41.shaders30.glsl_constructors.bvec2_from_bool_mat2_fs
+KHR-GL41.shaders30.glsl_constructors.bvec2_from_bool_mat2_bool_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.bvec2_from_bool_mat2_bool_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.bvec2_from_bool_mat2x3_vs
+KHR-GL41.shaders30.glsl_constructors.bvec2_from_bool_mat2x3_fs
+KHR-GL41.shaders30.glsl_constructors.bvec2_from_bool_mat2x3_bool_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.bvec2_from_bool_mat2x3_bool_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.bvec2_from_bool_mat2x4_vs
+KHR-GL41.shaders30.glsl_constructors.bvec2_from_bool_mat2x4_fs
+KHR-GL41.shaders30.glsl_constructors.bvec2_from_bool_mat2x4_bool_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.bvec2_from_bool_mat2x4_bool_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.bvec2_from_bool_mat3_vs
+KHR-GL41.shaders30.glsl_constructors.bvec2_from_bool_mat3_fs
+KHR-GL41.shaders30.glsl_constructors.bvec2_from_bool_mat3_bool_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.bvec2_from_bool_mat3_bool_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.bvec2_from_bool_mat3x2_vs
+KHR-GL41.shaders30.glsl_constructors.bvec2_from_bool_mat3x2_fs
+KHR-GL41.shaders30.glsl_constructors.bvec2_from_bool_mat3x2_bool_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.bvec2_from_bool_mat3x2_bool_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.bvec2_from_bool_mat3x4_vs
+KHR-GL41.shaders30.glsl_constructors.bvec2_from_bool_mat3x4_fs
+KHR-GL41.shaders30.glsl_constructors.bvec2_from_bool_mat3x4_bool_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.bvec2_from_bool_mat3x4_bool_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.bvec2_from_bool_mat4_vs
+KHR-GL41.shaders30.glsl_constructors.bvec2_from_bool_mat4_fs
+KHR-GL41.shaders30.glsl_constructors.bvec2_from_bool_mat4_bool_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.bvec2_from_bool_mat4_bool_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.bvec2_from_bool_mat4x2_vs
+KHR-GL41.shaders30.glsl_constructors.bvec2_from_bool_mat4x2_fs
+KHR-GL41.shaders30.glsl_constructors.bvec2_from_bool_mat4x2_bool_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.bvec2_from_bool_mat4x2_bool_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.bvec2_from_bool_mat4x3_vs
+KHR-GL41.shaders30.glsl_constructors.bvec2_from_bool_mat4x3_fs
+KHR-GL41.shaders30.glsl_constructors.bvec2_from_bool_mat4x3_bool_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.bvec2_from_bool_mat4x3_bool_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.bvec3_from_mat2_vs
+KHR-GL41.shaders30.glsl_constructors.bvec3_from_mat2_fs
+KHR-GL41.shaders30.glsl_constructors.bvec3_from_mat2_mat2_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.bvec3_from_mat2_mat2_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.bvec3_from_mat2x3_vs
+KHR-GL41.shaders30.glsl_constructors.bvec3_from_mat2x3_fs
+KHR-GL41.shaders30.glsl_constructors.bvec3_from_mat2x3_mat2x3_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.bvec3_from_mat2x3_mat2x3_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.bvec3_from_mat2x4_vs
+KHR-GL41.shaders30.glsl_constructors.bvec3_from_mat2x4_fs
+KHR-GL41.shaders30.glsl_constructors.bvec3_from_mat2x4_mat2x4_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.bvec3_from_mat2x4_mat2x4_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.bvec3_from_mat3_vs
+KHR-GL41.shaders30.glsl_constructors.bvec3_from_mat3_fs
+KHR-GL41.shaders30.glsl_constructors.bvec3_from_mat3_mat3_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.bvec3_from_mat3_mat3_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.bvec3_from_mat3x2_vs
+KHR-GL41.shaders30.glsl_constructors.bvec3_from_mat3x2_fs
+KHR-GL41.shaders30.glsl_constructors.bvec3_from_mat3x2_mat3x2_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.bvec3_from_mat3x2_mat3x2_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.bvec3_from_mat3x4_vs
+KHR-GL41.shaders30.glsl_constructors.bvec3_from_mat3x4_fs
+KHR-GL41.shaders30.glsl_constructors.bvec3_from_mat3x4_mat3x4_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.bvec3_from_mat3x4_mat3x4_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.bvec3_from_mat4_vs
+KHR-GL41.shaders30.glsl_constructors.bvec3_from_mat4_fs
+KHR-GL41.shaders30.glsl_constructors.bvec3_from_mat4_mat4_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.bvec3_from_mat4_mat4_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.bvec3_from_mat4x2_vs
+KHR-GL41.shaders30.glsl_constructors.bvec3_from_mat4x2_fs
+KHR-GL41.shaders30.glsl_constructors.bvec3_from_mat4x2_mat4x2_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.bvec3_from_mat4x2_mat4x2_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.bvec3_from_mat4x3_vs
+KHR-GL41.shaders30.glsl_constructors.bvec3_from_mat4x3_fs
+KHR-GL41.shaders30.glsl_constructors.bvec3_from_mat4x3_mat4x3_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.bvec3_from_mat4x3_mat4x3_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.bvec3_from_bool_mat2_vs
+KHR-GL41.shaders30.glsl_constructors.bvec3_from_bool_mat2_fs
+KHR-GL41.shaders30.glsl_constructors.bvec3_from_bool_mat2_bool_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.bvec3_from_bool_mat2_bool_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.bvec3_from_bool_mat2x3_vs
+KHR-GL41.shaders30.glsl_constructors.bvec3_from_bool_mat2x3_fs
+KHR-GL41.shaders30.glsl_constructors.bvec3_from_bool_mat2x3_bool_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.bvec3_from_bool_mat2x3_bool_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.bvec3_from_bool_mat2x4_vs
+KHR-GL41.shaders30.glsl_constructors.bvec3_from_bool_mat2x4_fs
+KHR-GL41.shaders30.glsl_constructors.bvec3_from_bool_mat2x4_bool_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.bvec3_from_bool_mat2x4_bool_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.bvec3_from_bool_mat3_vs
+KHR-GL41.shaders30.glsl_constructors.bvec3_from_bool_mat3_fs
+KHR-GL41.shaders30.glsl_constructors.bvec3_from_bool_mat3_bool_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.bvec3_from_bool_mat3_bool_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.bvec3_from_bool_mat3x2_vs
+KHR-GL41.shaders30.glsl_constructors.bvec3_from_bool_mat3x2_fs
+KHR-GL41.shaders30.glsl_constructors.bvec3_from_bool_mat3x2_bool_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.bvec3_from_bool_mat3x2_bool_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.bvec3_from_bool_mat3x4_vs
+KHR-GL41.shaders30.glsl_constructors.bvec3_from_bool_mat3x4_fs
+KHR-GL41.shaders30.glsl_constructors.bvec3_from_bool_mat3x4_bool_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.bvec3_from_bool_mat3x4_bool_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.bvec3_from_bool_mat4_vs
+KHR-GL41.shaders30.glsl_constructors.bvec3_from_bool_mat4_fs
+KHR-GL41.shaders30.glsl_constructors.bvec3_from_bool_mat4_bool_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.bvec3_from_bool_mat4_bool_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.bvec3_from_bool_mat4x2_vs
+KHR-GL41.shaders30.glsl_constructors.bvec3_from_bool_mat4x2_fs
+KHR-GL41.shaders30.glsl_constructors.bvec3_from_bool_mat4x2_bool_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.bvec3_from_bool_mat4x2_bool_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.bvec3_from_bool_mat4x3_vs
+KHR-GL41.shaders30.glsl_constructors.bvec3_from_bool_mat4x3_fs
+KHR-GL41.shaders30.glsl_constructors.bvec3_from_bool_mat4x3_bool_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.bvec3_from_bool_mat4x3_bool_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.bvec4_from_mat2_vs
+KHR-GL41.shaders30.glsl_constructors.bvec4_from_mat2_fs
+KHR-GL41.shaders30.glsl_constructors.bvec4_from_mat2_mat2_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.bvec4_from_mat2_mat2_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.bvec4_from_mat2x3_vs
+KHR-GL41.shaders30.glsl_constructors.bvec4_from_mat2x3_fs
+KHR-GL41.shaders30.glsl_constructors.bvec4_from_mat2x3_mat2x3_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.bvec4_from_mat2x3_mat2x3_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.bvec4_from_mat2x4_vs
+KHR-GL41.shaders30.glsl_constructors.bvec4_from_mat2x4_fs
+KHR-GL41.shaders30.glsl_constructors.bvec4_from_mat2x4_mat2x4_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.bvec4_from_mat2x4_mat2x4_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.bvec4_from_mat3_vs
+KHR-GL41.shaders30.glsl_constructors.bvec4_from_mat3_fs
+KHR-GL41.shaders30.glsl_constructors.bvec4_from_mat3_mat3_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.bvec4_from_mat3_mat3_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.bvec4_from_mat3x2_vs
+KHR-GL41.shaders30.glsl_constructors.bvec4_from_mat3x2_fs
+KHR-GL41.shaders30.glsl_constructors.bvec4_from_mat3x2_mat3x2_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.bvec4_from_mat3x2_mat3x2_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.bvec4_from_mat3x4_vs
+KHR-GL41.shaders30.glsl_constructors.bvec4_from_mat3x4_fs
+KHR-GL41.shaders30.glsl_constructors.bvec4_from_mat3x4_mat3x4_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.bvec4_from_mat3x4_mat3x4_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.bvec4_from_mat4_vs
+KHR-GL41.shaders30.glsl_constructors.bvec4_from_mat4_fs
+KHR-GL41.shaders30.glsl_constructors.bvec4_from_mat4_mat4_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.bvec4_from_mat4_mat4_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.bvec4_from_mat4x2_vs
+KHR-GL41.shaders30.glsl_constructors.bvec4_from_mat4x2_fs
+KHR-GL41.shaders30.glsl_constructors.bvec4_from_mat4x2_mat4x2_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.bvec4_from_mat4x2_mat4x2_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.bvec4_from_mat4x3_vs
+KHR-GL41.shaders30.glsl_constructors.bvec4_from_mat4x3_fs
+KHR-GL41.shaders30.glsl_constructors.bvec4_from_mat4x3_mat4x3_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.bvec4_from_mat4x3_mat4x3_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.bvec4_from_bool_mat2_vs
+KHR-GL41.shaders30.glsl_constructors.bvec4_from_bool_mat2_fs
+KHR-GL41.shaders30.glsl_constructors.bvec4_from_bool_mat2_bool_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.bvec4_from_bool_mat2_bool_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.bvec4_from_bool_mat2x3_vs
+KHR-GL41.shaders30.glsl_constructors.bvec4_from_bool_mat2x3_fs
+KHR-GL41.shaders30.glsl_constructors.bvec4_from_bool_mat2x3_bool_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.bvec4_from_bool_mat2x3_bool_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.bvec4_from_bool_mat2x4_vs
+KHR-GL41.shaders30.glsl_constructors.bvec4_from_bool_mat2x4_fs
+KHR-GL41.shaders30.glsl_constructors.bvec4_from_bool_mat2x4_bool_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.bvec4_from_bool_mat2x4_bool_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.bvec4_from_bool_mat3_vs
+KHR-GL41.shaders30.glsl_constructors.bvec4_from_bool_mat3_fs
+KHR-GL41.shaders30.glsl_constructors.bvec4_from_bool_mat3_bool_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.bvec4_from_bool_mat3_bool_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.bvec4_from_bool_mat3x2_vs
+KHR-GL41.shaders30.glsl_constructors.bvec4_from_bool_mat3x2_fs
+KHR-GL41.shaders30.glsl_constructors.bvec4_from_bool_mat3x2_bool_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.bvec4_from_bool_mat3x2_bool_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.bvec4_from_bool_mat3x4_vs
+KHR-GL41.shaders30.glsl_constructors.bvec4_from_bool_mat3x4_fs
+KHR-GL41.shaders30.glsl_constructors.bvec4_from_bool_mat3x4_bool_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.bvec4_from_bool_mat3x4_bool_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.bvec4_from_bool_mat4_vs
+KHR-GL41.shaders30.glsl_constructors.bvec4_from_bool_mat4_fs
+KHR-GL41.shaders30.glsl_constructors.bvec4_from_bool_mat4_bool_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.bvec4_from_bool_mat4_bool_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.bvec4_from_bool_mat4x2_vs
+KHR-GL41.shaders30.glsl_constructors.bvec4_from_bool_mat4x2_fs
+KHR-GL41.shaders30.glsl_constructors.bvec4_from_bool_mat4x2_bool_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.bvec4_from_bool_mat4x2_bool_invalid_fs
+KHR-GL41.shaders30.glsl_constructors.bvec4_from_bool_mat4x3_vs
+KHR-GL41.shaders30.glsl_constructors.bvec4_from_bool_mat4x3_fs
+KHR-GL41.shaders30.glsl_constructors.bvec4_from_bool_mat4x3_bool_invalid_vs
+KHR-GL41.shaders30.glsl_constructors.bvec4_from_bool_mat4x3_bool_invalid_fs
 KHR-GL41.ext_texture_shadow_lod.texture.sampler2darrayshadow_fragment
 KHR-GL41.ext_texture_shadow_lod.texture.sampler2darrayshadow_bias_fragment
 KHR-GL41.ext_texture_shadow_lod.texture.samplercubearrayshadow_vertex
diff --git a/external/openglcts/data/mustpass/gl/khronos_mustpass/4.6.1.x/gl42-master.txt b/external/openglcts/data/mustpass/gl/khronos_mustpass/4.6.1.x/gl42-master.txt
index 3c6a7e0..73d5dc5 100644
--- a/external/openglcts/data/mustpass/gl/khronos_mustpass/4.6.1.x/gl42-master.txt
+++ b/external/openglcts/data/mustpass/gl/khronos_mustpass/4.6.1.x/gl42-master.txt
@@ -192,6 +192,654 @@
 KHR-GL42.texture_repeat_mode.depth24_stencil8_11x131_2_mirrored_repeat
 KHR-GL42.shaders30.declarations.declarations.redeclare_gl_FragColor
 KHR-GL42.shaders30.declarations.declarations.redeclare_gl_FragData
+KHR-GL42.shaders30.glsl_constructors.vec2_from_mat2_vs
+KHR-GL42.shaders30.glsl_constructors.vec2_from_mat2_fs
+KHR-GL42.shaders30.glsl_constructors.vec2_from_mat2_mat2_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.vec2_from_mat2_mat2_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.vec2_from_mat2x3_vs
+KHR-GL42.shaders30.glsl_constructors.vec2_from_mat2x3_fs
+KHR-GL42.shaders30.glsl_constructors.vec2_from_mat2x3_mat2x3_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.vec2_from_mat2x3_mat2x3_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.vec2_from_mat2x4_vs
+KHR-GL42.shaders30.glsl_constructors.vec2_from_mat2x4_fs
+KHR-GL42.shaders30.glsl_constructors.vec2_from_mat2x4_mat2x4_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.vec2_from_mat2x4_mat2x4_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.vec2_from_mat3_vs
+KHR-GL42.shaders30.glsl_constructors.vec2_from_mat3_fs
+KHR-GL42.shaders30.glsl_constructors.vec2_from_mat3_mat3_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.vec2_from_mat3_mat3_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.vec2_from_mat3x2_vs
+KHR-GL42.shaders30.glsl_constructors.vec2_from_mat3x2_fs
+KHR-GL42.shaders30.glsl_constructors.vec2_from_mat3x2_mat3x2_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.vec2_from_mat3x2_mat3x2_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.vec2_from_mat3x4_vs
+KHR-GL42.shaders30.glsl_constructors.vec2_from_mat3x4_fs
+KHR-GL42.shaders30.glsl_constructors.vec2_from_mat3x4_mat3x4_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.vec2_from_mat3x4_mat3x4_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.vec2_from_mat4_vs
+KHR-GL42.shaders30.glsl_constructors.vec2_from_mat4_fs
+KHR-GL42.shaders30.glsl_constructors.vec2_from_mat4_mat4_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.vec2_from_mat4_mat4_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.vec2_from_mat4x2_vs
+KHR-GL42.shaders30.glsl_constructors.vec2_from_mat4x2_fs
+KHR-GL42.shaders30.glsl_constructors.vec2_from_mat4x2_mat4x2_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.vec2_from_mat4x2_mat4x2_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.vec2_from_mat4x3_vs
+KHR-GL42.shaders30.glsl_constructors.vec2_from_mat4x3_fs
+KHR-GL42.shaders30.glsl_constructors.vec2_from_mat4x3_mat4x3_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.vec2_from_mat4x3_mat4x3_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.vec2_from_float_mat2_vs
+KHR-GL42.shaders30.glsl_constructors.vec2_from_float_mat2_fs
+KHR-GL42.shaders30.glsl_constructors.vec2_from_float_mat2_float_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.vec2_from_float_mat2_float_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.vec2_from_float_mat2x3_vs
+KHR-GL42.shaders30.glsl_constructors.vec2_from_float_mat2x3_fs
+KHR-GL42.shaders30.glsl_constructors.vec2_from_float_mat2x3_float_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.vec2_from_float_mat2x3_float_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.vec2_from_float_mat2x4_vs
+KHR-GL42.shaders30.glsl_constructors.vec2_from_float_mat2x4_fs
+KHR-GL42.shaders30.glsl_constructors.vec2_from_float_mat2x4_float_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.vec2_from_float_mat2x4_float_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.vec2_from_float_mat3_vs
+KHR-GL42.shaders30.glsl_constructors.vec2_from_float_mat3_fs
+KHR-GL42.shaders30.glsl_constructors.vec2_from_float_mat3_float_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.vec2_from_float_mat3_float_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.vec2_from_float_mat3x2_vs
+KHR-GL42.shaders30.glsl_constructors.vec2_from_float_mat3x2_fs
+KHR-GL42.shaders30.glsl_constructors.vec2_from_float_mat3x2_float_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.vec2_from_float_mat3x2_float_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.vec2_from_float_mat3x4_vs
+KHR-GL42.shaders30.glsl_constructors.vec2_from_float_mat3x4_fs
+KHR-GL42.shaders30.glsl_constructors.vec2_from_float_mat3x4_float_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.vec2_from_float_mat3x4_float_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.vec2_from_float_mat4_vs
+KHR-GL42.shaders30.glsl_constructors.vec2_from_float_mat4_fs
+KHR-GL42.shaders30.glsl_constructors.vec2_from_float_mat4_float_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.vec2_from_float_mat4_float_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.vec2_from_float_mat4x2_vs
+KHR-GL42.shaders30.glsl_constructors.vec2_from_float_mat4x2_fs
+KHR-GL42.shaders30.glsl_constructors.vec2_from_float_mat4x2_float_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.vec2_from_float_mat4x2_float_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.vec2_from_float_mat4x3_vs
+KHR-GL42.shaders30.glsl_constructors.vec2_from_float_mat4x3_fs
+KHR-GL42.shaders30.glsl_constructors.vec2_from_float_mat4x3_float_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.vec2_from_float_mat4x3_float_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.vec3_from_mat2_vs
+KHR-GL42.shaders30.glsl_constructors.vec3_from_mat2_fs
+KHR-GL42.shaders30.glsl_constructors.vec3_from_mat2_mat2_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.vec3_from_mat2_mat2_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.vec3_from_mat2x3_vs
+KHR-GL42.shaders30.glsl_constructors.vec3_from_mat2x3_fs
+KHR-GL42.shaders30.glsl_constructors.vec3_from_mat2x3_mat2x3_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.vec3_from_mat2x3_mat2x3_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.vec3_from_mat2x4_vs
+KHR-GL42.shaders30.glsl_constructors.vec3_from_mat2x4_fs
+KHR-GL42.shaders30.glsl_constructors.vec3_from_mat2x4_mat2x4_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.vec3_from_mat2x4_mat2x4_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.vec3_from_mat3_vs
+KHR-GL42.shaders30.glsl_constructors.vec3_from_mat3_fs
+KHR-GL42.shaders30.glsl_constructors.vec3_from_mat3_mat3_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.vec3_from_mat3_mat3_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.vec3_from_mat3x2_vs
+KHR-GL42.shaders30.glsl_constructors.vec3_from_mat3x2_fs
+KHR-GL42.shaders30.glsl_constructors.vec3_from_mat3x2_mat3x2_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.vec3_from_mat3x2_mat3x2_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.vec3_from_mat3x4_vs
+KHR-GL42.shaders30.glsl_constructors.vec3_from_mat3x4_fs
+KHR-GL42.shaders30.glsl_constructors.vec3_from_mat3x4_mat3x4_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.vec3_from_mat3x4_mat3x4_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.vec3_from_mat4_vs
+KHR-GL42.shaders30.glsl_constructors.vec3_from_mat4_fs
+KHR-GL42.shaders30.glsl_constructors.vec3_from_mat4_mat4_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.vec3_from_mat4_mat4_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.vec3_from_mat4x2_vs
+KHR-GL42.shaders30.glsl_constructors.vec3_from_mat4x2_fs
+KHR-GL42.shaders30.glsl_constructors.vec3_from_mat4x2_mat4x2_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.vec3_from_mat4x2_mat4x2_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.vec3_from_mat4x3_vs
+KHR-GL42.shaders30.glsl_constructors.vec3_from_mat4x3_fs
+KHR-GL42.shaders30.glsl_constructors.vec3_from_mat4x3_mat4x3_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.vec3_from_mat4x3_mat4x3_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.vec3_from_float_mat2_vs
+KHR-GL42.shaders30.glsl_constructors.vec3_from_float_mat2_fs
+KHR-GL42.shaders30.glsl_constructors.vec3_from_float_mat2_float_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.vec3_from_float_mat2_float_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.vec3_from_float_mat2x3_vs
+KHR-GL42.shaders30.glsl_constructors.vec3_from_float_mat2x3_fs
+KHR-GL42.shaders30.glsl_constructors.vec3_from_float_mat2x3_float_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.vec3_from_float_mat2x3_float_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.vec3_from_float_mat2x4_vs
+KHR-GL42.shaders30.glsl_constructors.vec3_from_float_mat2x4_fs
+KHR-GL42.shaders30.glsl_constructors.vec3_from_float_mat2x4_float_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.vec3_from_float_mat2x4_float_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.vec3_from_float_mat3_vs
+KHR-GL42.shaders30.glsl_constructors.vec3_from_float_mat3_fs
+KHR-GL42.shaders30.glsl_constructors.vec3_from_float_mat3_float_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.vec3_from_float_mat3_float_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.vec3_from_float_mat3x2_vs
+KHR-GL42.shaders30.glsl_constructors.vec3_from_float_mat3x2_fs
+KHR-GL42.shaders30.glsl_constructors.vec3_from_float_mat3x2_float_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.vec3_from_float_mat3x2_float_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.vec3_from_float_mat3x4_vs
+KHR-GL42.shaders30.glsl_constructors.vec3_from_float_mat3x4_fs
+KHR-GL42.shaders30.glsl_constructors.vec3_from_float_mat3x4_float_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.vec3_from_float_mat3x4_float_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.vec3_from_float_mat4_vs
+KHR-GL42.shaders30.glsl_constructors.vec3_from_float_mat4_fs
+KHR-GL42.shaders30.glsl_constructors.vec3_from_float_mat4_float_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.vec3_from_float_mat4_float_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.vec3_from_float_mat4x2_vs
+KHR-GL42.shaders30.glsl_constructors.vec3_from_float_mat4x2_fs
+KHR-GL42.shaders30.glsl_constructors.vec3_from_float_mat4x2_float_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.vec3_from_float_mat4x2_float_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.vec3_from_float_mat4x3_vs
+KHR-GL42.shaders30.glsl_constructors.vec3_from_float_mat4x3_fs
+KHR-GL42.shaders30.glsl_constructors.vec3_from_float_mat4x3_float_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.vec3_from_float_mat4x3_float_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.vec4_from_mat2_vs
+KHR-GL42.shaders30.glsl_constructors.vec4_from_mat2_fs
+KHR-GL42.shaders30.glsl_constructors.vec4_from_mat2_mat2_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.vec4_from_mat2_mat2_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.vec4_from_mat2x3_vs
+KHR-GL42.shaders30.glsl_constructors.vec4_from_mat2x3_fs
+KHR-GL42.shaders30.glsl_constructors.vec4_from_mat2x3_mat2x3_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.vec4_from_mat2x3_mat2x3_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.vec4_from_mat2x4_vs
+KHR-GL42.shaders30.glsl_constructors.vec4_from_mat2x4_fs
+KHR-GL42.shaders30.glsl_constructors.vec4_from_mat2x4_mat2x4_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.vec4_from_mat2x4_mat2x4_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.vec4_from_mat3_vs
+KHR-GL42.shaders30.glsl_constructors.vec4_from_mat3_fs
+KHR-GL42.shaders30.glsl_constructors.vec4_from_mat3_mat3_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.vec4_from_mat3_mat3_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.vec4_from_mat3x2_vs
+KHR-GL42.shaders30.glsl_constructors.vec4_from_mat3x2_fs
+KHR-GL42.shaders30.glsl_constructors.vec4_from_mat3x2_mat3x2_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.vec4_from_mat3x2_mat3x2_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.vec4_from_mat3x4_vs
+KHR-GL42.shaders30.glsl_constructors.vec4_from_mat3x4_fs
+KHR-GL42.shaders30.glsl_constructors.vec4_from_mat3x4_mat3x4_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.vec4_from_mat3x4_mat3x4_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.vec4_from_mat4_vs
+KHR-GL42.shaders30.glsl_constructors.vec4_from_mat4_fs
+KHR-GL42.shaders30.glsl_constructors.vec4_from_mat4_mat4_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.vec4_from_mat4_mat4_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.vec4_from_mat4x2_vs
+KHR-GL42.shaders30.glsl_constructors.vec4_from_mat4x2_fs
+KHR-GL42.shaders30.glsl_constructors.vec4_from_mat4x2_mat4x2_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.vec4_from_mat4x2_mat4x2_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.vec4_from_mat4x3_vs
+KHR-GL42.shaders30.glsl_constructors.vec4_from_mat4x3_fs
+KHR-GL42.shaders30.glsl_constructors.vec4_from_mat4x3_mat4x3_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.vec4_from_mat4x3_mat4x3_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.vec4_from_float_mat2_vs
+KHR-GL42.shaders30.glsl_constructors.vec4_from_float_mat2_fs
+KHR-GL42.shaders30.glsl_constructors.vec4_from_float_mat2_float_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.vec4_from_float_mat2_float_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.vec4_from_float_mat2x3_vs
+KHR-GL42.shaders30.glsl_constructors.vec4_from_float_mat2x3_fs
+KHR-GL42.shaders30.glsl_constructors.vec4_from_float_mat2x3_float_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.vec4_from_float_mat2x3_float_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.vec4_from_float_mat2x4_vs
+KHR-GL42.shaders30.glsl_constructors.vec4_from_float_mat2x4_fs
+KHR-GL42.shaders30.glsl_constructors.vec4_from_float_mat2x4_float_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.vec4_from_float_mat2x4_float_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.vec4_from_float_mat3_vs
+KHR-GL42.shaders30.glsl_constructors.vec4_from_float_mat3_fs
+KHR-GL42.shaders30.glsl_constructors.vec4_from_float_mat3_float_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.vec4_from_float_mat3_float_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.vec4_from_float_mat3x2_vs
+KHR-GL42.shaders30.glsl_constructors.vec4_from_float_mat3x2_fs
+KHR-GL42.shaders30.glsl_constructors.vec4_from_float_mat3x2_float_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.vec4_from_float_mat3x2_float_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.vec4_from_float_mat3x4_vs
+KHR-GL42.shaders30.glsl_constructors.vec4_from_float_mat3x4_fs
+KHR-GL42.shaders30.glsl_constructors.vec4_from_float_mat3x4_float_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.vec4_from_float_mat3x4_float_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.vec4_from_float_mat4_vs
+KHR-GL42.shaders30.glsl_constructors.vec4_from_float_mat4_fs
+KHR-GL42.shaders30.glsl_constructors.vec4_from_float_mat4_float_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.vec4_from_float_mat4_float_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.vec4_from_float_mat4x2_vs
+KHR-GL42.shaders30.glsl_constructors.vec4_from_float_mat4x2_fs
+KHR-GL42.shaders30.glsl_constructors.vec4_from_float_mat4x2_float_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.vec4_from_float_mat4x2_float_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.vec4_from_float_mat4x3_vs
+KHR-GL42.shaders30.glsl_constructors.vec4_from_float_mat4x3_fs
+KHR-GL42.shaders30.glsl_constructors.vec4_from_float_mat4x3_float_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.vec4_from_float_mat4x3_float_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.ivec2_from_mat2_vs
+KHR-GL42.shaders30.glsl_constructors.ivec2_from_mat2_fs
+KHR-GL42.shaders30.glsl_constructors.ivec2_from_mat2_mat2_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.ivec2_from_mat2_mat2_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.ivec2_from_mat2x3_vs
+KHR-GL42.shaders30.glsl_constructors.ivec2_from_mat2x3_fs
+KHR-GL42.shaders30.glsl_constructors.ivec2_from_mat2x3_mat2x3_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.ivec2_from_mat2x3_mat2x3_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.ivec2_from_mat2x4_vs
+KHR-GL42.shaders30.glsl_constructors.ivec2_from_mat2x4_fs
+KHR-GL42.shaders30.glsl_constructors.ivec2_from_mat2x4_mat2x4_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.ivec2_from_mat2x4_mat2x4_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.ivec2_from_mat3_vs
+KHR-GL42.shaders30.glsl_constructors.ivec2_from_mat3_fs
+KHR-GL42.shaders30.glsl_constructors.ivec2_from_mat3_mat3_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.ivec2_from_mat3_mat3_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.ivec2_from_mat3x2_vs
+KHR-GL42.shaders30.glsl_constructors.ivec2_from_mat3x2_fs
+KHR-GL42.shaders30.glsl_constructors.ivec2_from_mat3x2_mat3x2_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.ivec2_from_mat3x2_mat3x2_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.ivec2_from_mat3x4_vs
+KHR-GL42.shaders30.glsl_constructors.ivec2_from_mat3x4_fs
+KHR-GL42.shaders30.glsl_constructors.ivec2_from_mat3x4_mat3x4_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.ivec2_from_mat3x4_mat3x4_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.ivec2_from_mat4_vs
+KHR-GL42.shaders30.glsl_constructors.ivec2_from_mat4_fs
+KHR-GL42.shaders30.glsl_constructors.ivec2_from_mat4_mat4_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.ivec2_from_mat4_mat4_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.ivec2_from_mat4x2_vs
+KHR-GL42.shaders30.glsl_constructors.ivec2_from_mat4x2_fs
+KHR-GL42.shaders30.glsl_constructors.ivec2_from_mat4x2_mat4x2_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.ivec2_from_mat4x2_mat4x2_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.ivec2_from_mat4x3_vs
+KHR-GL42.shaders30.glsl_constructors.ivec2_from_mat4x3_fs
+KHR-GL42.shaders30.glsl_constructors.ivec2_from_mat4x3_mat4x3_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.ivec2_from_mat4x3_mat4x3_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.ivec2_from_int_mat2_vs
+KHR-GL42.shaders30.glsl_constructors.ivec2_from_int_mat2_fs
+KHR-GL42.shaders30.glsl_constructors.ivec2_from_int_mat2_int_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.ivec2_from_int_mat2_int_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.ivec2_from_int_mat2x3_vs
+KHR-GL42.shaders30.glsl_constructors.ivec2_from_int_mat2x3_fs
+KHR-GL42.shaders30.glsl_constructors.ivec2_from_int_mat2x3_int_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.ivec2_from_int_mat2x3_int_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.ivec2_from_int_mat2x4_vs
+KHR-GL42.shaders30.glsl_constructors.ivec2_from_int_mat2x4_fs
+KHR-GL42.shaders30.glsl_constructors.ivec2_from_int_mat2x4_int_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.ivec2_from_int_mat2x4_int_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.ivec2_from_int_mat3_vs
+KHR-GL42.shaders30.glsl_constructors.ivec2_from_int_mat3_fs
+KHR-GL42.shaders30.glsl_constructors.ivec2_from_int_mat3_int_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.ivec2_from_int_mat3_int_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.ivec2_from_int_mat3x2_vs
+KHR-GL42.shaders30.glsl_constructors.ivec2_from_int_mat3x2_fs
+KHR-GL42.shaders30.glsl_constructors.ivec2_from_int_mat3x2_int_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.ivec2_from_int_mat3x2_int_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.ivec2_from_int_mat3x4_vs
+KHR-GL42.shaders30.glsl_constructors.ivec2_from_int_mat3x4_fs
+KHR-GL42.shaders30.glsl_constructors.ivec2_from_int_mat3x4_int_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.ivec2_from_int_mat3x4_int_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.ivec2_from_int_mat4_vs
+KHR-GL42.shaders30.glsl_constructors.ivec2_from_int_mat4_fs
+KHR-GL42.shaders30.glsl_constructors.ivec2_from_int_mat4_int_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.ivec2_from_int_mat4_int_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.ivec2_from_int_mat4x2_vs
+KHR-GL42.shaders30.glsl_constructors.ivec2_from_int_mat4x2_fs
+KHR-GL42.shaders30.glsl_constructors.ivec2_from_int_mat4x2_int_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.ivec2_from_int_mat4x2_int_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.ivec2_from_int_mat4x3_vs
+KHR-GL42.shaders30.glsl_constructors.ivec2_from_int_mat4x3_fs
+KHR-GL42.shaders30.glsl_constructors.ivec2_from_int_mat4x3_int_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.ivec2_from_int_mat4x3_int_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.ivec3_from_mat2_vs
+KHR-GL42.shaders30.glsl_constructors.ivec3_from_mat2_fs
+KHR-GL42.shaders30.glsl_constructors.ivec3_from_mat2_mat2_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.ivec3_from_mat2_mat2_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.ivec3_from_mat2x3_vs
+KHR-GL42.shaders30.glsl_constructors.ivec3_from_mat2x3_fs
+KHR-GL42.shaders30.glsl_constructors.ivec3_from_mat2x3_mat2x3_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.ivec3_from_mat2x3_mat2x3_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.ivec3_from_mat2x4_vs
+KHR-GL42.shaders30.glsl_constructors.ivec3_from_mat2x4_fs
+KHR-GL42.shaders30.glsl_constructors.ivec3_from_mat2x4_mat2x4_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.ivec3_from_mat2x4_mat2x4_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.ivec3_from_mat3_vs
+KHR-GL42.shaders30.glsl_constructors.ivec3_from_mat3_fs
+KHR-GL42.shaders30.glsl_constructors.ivec3_from_mat3_mat3_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.ivec3_from_mat3_mat3_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.ivec3_from_mat3x2_vs
+KHR-GL42.shaders30.glsl_constructors.ivec3_from_mat3x2_fs
+KHR-GL42.shaders30.glsl_constructors.ivec3_from_mat3x2_mat3x2_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.ivec3_from_mat3x2_mat3x2_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.ivec3_from_mat3x4_vs
+KHR-GL42.shaders30.glsl_constructors.ivec3_from_mat3x4_fs
+KHR-GL42.shaders30.glsl_constructors.ivec3_from_mat3x4_mat3x4_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.ivec3_from_mat3x4_mat3x4_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.ivec3_from_mat4_vs
+KHR-GL42.shaders30.glsl_constructors.ivec3_from_mat4_fs
+KHR-GL42.shaders30.glsl_constructors.ivec3_from_mat4_mat4_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.ivec3_from_mat4_mat4_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.ivec3_from_mat4x2_vs
+KHR-GL42.shaders30.glsl_constructors.ivec3_from_mat4x2_fs
+KHR-GL42.shaders30.glsl_constructors.ivec3_from_mat4x2_mat4x2_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.ivec3_from_mat4x2_mat4x2_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.ivec3_from_mat4x3_vs
+KHR-GL42.shaders30.glsl_constructors.ivec3_from_mat4x3_fs
+KHR-GL42.shaders30.glsl_constructors.ivec3_from_mat4x3_mat4x3_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.ivec3_from_mat4x3_mat4x3_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.ivec3_from_int_mat2_vs
+KHR-GL42.shaders30.glsl_constructors.ivec3_from_int_mat2_fs
+KHR-GL42.shaders30.glsl_constructors.ivec3_from_int_mat2_int_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.ivec3_from_int_mat2_int_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.ivec3_from_int_mat2x3_vs
+KHR-GL42.shaders30.glsl_constructors.ivec3_from_int_mat2x3_fs
+KHR-GL42.shaders30.glsl_constructors.ivec3_from_int_mat2x3_int_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.ivec3_from_int_mat2x3_int_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.ivec3_from_int_mat2x4_vs
+KHR-GL42.shaders30.glsl_constructors.ivec3_from_int_mat2x4_fs
+KHR-GL42.shaders30.glsl_constructors.ivec3_from_int_mat2x4_int_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.ivec3_from_int_mat2x4_int_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.ivec3_from_int_mat3_vs
+KHR-GL42.shaders30.glsl_constructors.ivec3_from_int_mat3_fs
+KHR-GL42.shaders30.glsl_constructors.ivec3_from_int_mat3_int_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.ivec3_from_int_mat3_int_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.ivec3_from_int_mat3x2_vs
+KHR-GL42.shaders30.glsl_constructors.ivec3_from_int_mat3x2_fs
+KHR-GL42.shaders30.glsl_constructors.ivec3_from_int_mat3x2_int_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.ivec3_from_int_mat3x2_int_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.ivec3_from_int_mat3x4_vs
+KHR-GL42.shaders30.glsl_constructors.ivec3_from_int_mat3x4_fs
+KHR-GL42.shaders30.glsl_constructors.ivec3_from_int_mat3x4_int_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.ivec3_from_int_mat3x4_int_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.ivec3_from_int_mat4_vs
+KHR-GL42.shaders30.glsl_constructors.ivec3_from_int_mat4_fs
+KHR-GL42.shaders30.glsl_constructors.ivec3_from_int_mat4_int_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.ivec3_from_int_mat4_int_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.ivec3_from_int_mat4x2_vs
+KHR-GL42.shaders30.glsl_constructors.ivec3_from_int_mat4x2_fs
+KHR-GL42.shaders30.glsl_constructors.ivec3_from_int_mat4x2_int_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.ivec3_from_int_mat4x2_int_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.ivec3_from_int_mat4x3_vs
+KHR-GL42.shaders30.glsl_constructors.ivec3_from_int_mat4x3_fs
+KHR-GL42.shaders30.glsl_constructors.ivec3_from_int_mat4x3_int_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.ivec3_from_int_mat4x3_int_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.ivec4_from_mat2_vs
+KHR-GL42.shaders30.glsl_constructors.ivec4_from_mat2_fs
+KHR-GL42.shaders30.glsl_constructors.ivec4_from_mat2_mat2_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.ivec4_from_mat2_mat2_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.ivec4_from_mat2x3_vs
+KHR-GL42.shaders30.glsl_constructors.ivec4_from_mat2x3_fs
+KHR-GL42.shaders30.glsl_constructors.ivec4_from_mat2x3_mat2x3_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.ivec4_from_mat2x3_mat2x3_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.ivec4_from_mat2x4_vs
+KHR-GL42.shaders30.glsl_constructors.ivec4_from_mat2x4_fs
+KHR-GL42.shaders30.glsl_constructors.ivec4_from_mat2x4_mat2x4_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.ivec4_from_mat2x4_mat2x4_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.ivec4_from_mat3_vs
+KHR-GL42.shaders30.glsl_constructors.ivec4_from_mat3_fs
+KHR-GL42.shaders30.glsl_constructors.ivec4_from_mat3_mat3_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.ivec4_from_mat3_mat3_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.ivec4_from_mat3x2_vs
+KHR-GL42.shaders30.glsl_constructors.ivec4_from_mat3x2_fs
+KHR-GL42.shaders30.glsl_constructors.ivec4_from_mat3x2_mat3x2_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.ivec4_from_mat3x2_mat3x2_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.ivec4_from_mat3x4_vs
+KHR-GL42.shaders30.glsl_constructors.ivec4_from_mat3x4_fs
+KHR-GL42.shaders30.glsl_constructors.ivec4_from_mat3x4_mat3x4_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.ivec4_from_mat3x4_mat3x4_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.ivec4_from_mat4_vs
+KHR-GL42.shaders30.glsl_constructors.ivec4_from_mat4_fs
+KHR-GL42.shaders30.glsl_constructors.ivec4_from_mat4_mat4_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.ivec4_from_mat4_mat4_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.ivec4_from_mat4x2_vs
+KHR-GL42.shaders30.glsl_constructors.ivec4_from_mat4x2_fs
+KHR-GL42.shaders30.glsl_constructors.ivec4_from_mat4x2_mat4x2_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.ivec4_from_mat4x2_mat4x2_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.ivec4_from_mat4x3_vs
+KHR-GL42.shaders30.glsl_constructors.ivec4_from_mat4x3_fs
+KHR-GL42.shaders30.glsl_constructors.ivec4_from_mat4x3_mat4x3_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.ivec4_from_mat4x3_mat4x3_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.ivec4_from_int_mat2_vs
+KHR-GL42.shaders30.glsl_constructors.ivec4_from_int_mat2_fs
+KHR-GL42.shaders30.glsl_constructors.ivec4_from_int_mat2_int_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.ivec4_from_int_mat2_int_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.ivec4_from_int_mat2x3_vs
+KHR-GL42.shaders30.glsl_constructors.ivec4_from_int_mat2x3_fs
+KHR-GL42.shaders30.glsl_constructors.ivec4_from_int_mat2x3_int_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.ivec4_from_int_mat2x3_int_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.ivec4_from_int_mat2x4_vs
+KHR-GL42.shaders30.glsl_constructors.ivec4_from_int_mat2x4_fs
+KHR-GL42.shaders30.glsl_constructors.ivec4_from_int_mat2x4_int_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.ivec4_from_int_mat2x4_int_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.ivec4_from_int_mat3_vs
+KHR-GL42.shaders30.glsl_constructors.ivec4_from_int_mat3_fs
+KHR-GL42.shaders30.glsl_constructors.ivec4_from_int_mat3_int_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.ivec4_from_int_mat3_int_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.ivec4_from_int_mat3x2_vs
+KHR-GL42.shaders30.glsl_constructors.ivec4_from_int_mat3x2_fs
+KHR-GL42.shaders30.glsl_constructors.ivec4_from_int_mat3x2_int_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.ivec4_from_int_mat3x2_int_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.ivec4_from_int_mat3x4_vs
+KHR-GL42.shaders30.glsl_constructors.ivec4_from_int_mat3x4_fs
+KHR-GL42.shaders30.glsl_constructors.ivec4_from_int_mat3x4_int_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.ivec4_from_int_mat3x4_int_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.ivec4_from_int_mat4_vs
+KHR-GL42.shaders30.glsl_constructors.ivec4_from_int_mat4_fs
+KHR-GL42.shaders30.glsl_constructors.ivec4_from_int_mat4_int_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.ivec4_from_int_mat4_int_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.ivec4_from_int_mat4x2_vs
+KHR-GL42.shaders30.glsl_constructors.ivec4_from_int_mat4x2_fs
+KHR-GL42.shaders30.glsl_constructors.ivec4_from_int_mat4x2_int_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.ivec4_from_int_mat4x2_int_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.ivec4_from_int_mat4x3_vs
+KHR-GL42.shaders30.glsl_constructors.ivec4_from_int_mat4x3_fs
+KHR-GL42.shaders30.glsl_constructors.ivec4_from_int_mat4x3_int_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.ivec4_from_int_mat4x3_int_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.bvec2_from_mat2_vs
+KHR-GL42.shaders30.glsl_constructors.bvec2_from_mat2_fs
+KHR-GL42.shaders30.glsl_constructors.bvec2_from_mat2_mat2_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.bvec2_from_mat2_mat2_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.bvec2_from_mat2x3_vs
+KHR-GL42.shaders30.glsl_constructors.bvec2_from_mat2x3_fs
+KHR-GL42.shaders30.glsl_constructors.bvec2_from_mat2x3_mat2x3_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.bvec2_from_mat2x3_mat2x3_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.bvec2_from_mat2x4_vs
+KHR-GL42.shaders30.glsl_constructors.bvec2_from_mat2x4_fs
+KHR-GL42.shaders30.glsl_constructors.bvec2_from_mat2x4_mat2x4_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.bvec2_from_mat2x4_mat2x4_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.bvec2_from_mat3_vs
+KHR-GL42.shaders30.glsl_constructors.bvec2_from_mat3_fs
+KHR-GL42.shaders30.glsl_constructors.bvec2_from_mat3_mat3_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.bvec2_from_mat3_mat3_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.bvec2_from_mat3x2_vs
+KHR-GL42.shaders30.glsl_constructors.bvec2_from_mat3x2_fs
+KHR-GL42.shaders30.glsl_constructors.bvec2_from_mat3x2_mat3x2_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.bvec2_from_mat3x2_mat3x2_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.bvec2_from_mat3x4_vs
+KHR-GL42.shaders30.glsl_constructors.bvec2_from_mat3x4_fs
+KHR-GL42.shaders30.glsl_constructors.bvec2_from_mat3x4_mat3x4_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.bvec2_from_mat3x4_mat3x4_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.bvec2_from_mat4_vs
+KHR-GL42.shaders30.glsl_constructors.bvec2_from_mat4_fs
+KHR-GL42.shaders30.glsl_constructors.bvec2_from_mat4_mat4_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.bvec2_from_mat4_mat4_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.bvec2_from_mat4x2_vs
+KHR-GL42.shaders30.glsl_constructors.bvec2_from_mat4x2_fs
+KHR-GL42.shaders30.glsl_constructors.bvec2_from_mat4x2_mat4x2_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.bvec2_from_mat4x2_mat4x2_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.bvec2_from_mat4x3_vs
+KHR-GL42.shaders30.glsl_constructors.bvec2_from_mat4x3_fs
+KHR-GL42.shaders30.glsl_constructors.bvec2_from_mat4x3_mat4x3_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.bvec2_from_mat4x3_mat4x3_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.bvec2_from_bool_mat2_vs
+KHR-GL42.shaders30.glsl_constructors.bvec2_from_bool_mat2_fs
+KHR-GL42.shaders30.glsl_constructors.bvec2_from_bool_mat2_bool_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.bvec2_from_bool_mat2_bool_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.bvec2_from_bool_mat2x3_vs
+KHR-GL42.shaders30.glsl_constructors.bvec2_from_bool_mat2x3_fs
+KHR-GL42.shaders30.glsl_constructors.bvec2_from_bool_mat2x3_bool_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.bvec2_from_bool_mat2x3_bool_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.bvec2_from_bool_mat2x4_vs
+KHR-GL42.shaders30.glsl_constructors.bvec2_from_bool_mat2x4_fs
+KHR-GL42.shaders30.glsl_constructors.bvec2_from_bool_mat2x4_bool_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.bvec2_from_bool_mat2x4_bool_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.bvec2_from_bool_mat3_vs
+KHR-GL42.shaders30.glsl_constructors.bvec2_from_bool_mat3_fs
+KHR-GL42.shaders30.glsl_constructors.bvec2_from_bool_mat3_bool_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.bvec2_from_bool_mat3_bool_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.bvec2_from_bool_mat3x2_vs
+KHR-GL42.shaders30.glsl_constructors.bvec2_from_bool_mat3x2_fs
+KHR-GL42.shaders30.glsl_constructors.bvec2_from_bool_mat3x2_bool_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.bvec2_from_bool_mat3x2_bool_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.bvec2_from_bool_mat3x4_vs
+KHR-GL42.shaders30.glsl_constructors.bvec2_from_bool_mat3x4_fs
+KHR-GL42.shaders30.glsl_constructors.bvec2_from_bool_mat3x4_bool_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.bvec2_from_bool_mat3x4_bool_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.bvec2_from_bool_mat4_vs
+KHR-GL42.shaders30.glsl_constructors.bvec2_from_bool_mat4_fs
+KHR-GL42.shaders30.glsl_constructors.bvec2_from_bool_mat4_bool_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.bvec2_from_bool_mat4_bool_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.bvec2_from_bool_mat4x2_vs
+KHR-GL42.shaders30.glsl_constructors.bvec2_from_bool_mat4x2_fs
+KHR-GL42.shaders30.glsl_constructors.bvec2_from_bool_mat4x2_bool_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.bvec2_from_bool_mat4x2_bool_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.bvec2_from_bool_mat4x3_vs
+KHR-GL42.shaders30.glsl_constructors.bvec2_from_bool_mat4x3_fs
+KHR-GL42.shaders30.glsl_constructors.bvec2_from_bool_mat4x3_bool_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.bvec2_from_bool_mat4x3_bool_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.bvec3_from_mat2_vs
+KHR-GL42.shaders30.glsl_constructors.bvec3_from_mat2_fs
+KHR-GL42.shaders30.glsl_constructors.bvec3_from_mat2_mat2_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.bvec3_from_mat2_mat2_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.bvec3_from_mat2x3_vs
+KHR-GL42.shaders30.glsl_constructors.bvec3_from_mat2x3_fs
+KHR-GL42.shaders30.glsl_constructors.bvec3_from_mat2x3_mat2x3_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.bvec3_from_mat2x3_mat2x3_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.bvec3_from_mat2x4_vs
+KHR-GL42.shaders30.glsl_constructors.bvec3_from_mat2x4_fs
+KHR-GL42.shaders30.glsl_constructors.bvec3_from_mat2x4_mat2x4_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.bvec3_from_mat2x4_mat2x4_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.bvec3_from_mat3_vs
+KHR-GL42.shaders30.glsl_constructors.bvec3_from_mat3_fs
+KHR-GL42.shaders30.glsl_constructors.bvec3_from_mat3_mat3_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.bvec3_from_mat3_mat3_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.bvec3_from_mat3x2_vs
+KHR-GL42.shaders30.glsl_constructors.bvec3_from_mat3x2_fs
+KHR-GL42.shaders30.glsl_constructors.bvec3_from_mat3x2_mat3x2_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.bvec3_from_mat3x2_mat3x2_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.bvec3_from_mat3x4_vs
+KHR-GL42.shaders30.glsl_constructors.bvec3_from_mat3x4_fs
+KHR-GL42.shaders30.glsl_constructors.bvec3_from_mat3x4_mat3x4_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.bvec3_from_mat3x4_mat3x4_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.bvec3_from_mat4_vs
+KHR-GL42.shaders30.glsl_constructors.bvec3_from_mat4_fs
+KHR-GL42.shaders30.glsl_constructors.bvec3_from_mat4_mat4_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.bvec3_from_mat4_mat4_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.bvec3_from_mat4x2_vs
+KHR-GL42.shaders30.glsl_constructors.bvec3_from_mat4x2_fs
+KHR-GL42.shaders30.glsl_constructors.bvec3_from_mat4x2_mat4x2_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.bvec3_from_mat4x2_mat4x2_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.bvec3_from_mat4x3_vs
+KHR-GL42.shaders30.glsl_constructors.bvec3_from_mat4x3_fs
+KHR-GL42.shaders30.glsl_constructors.bvec3_from_mat4x3_mat4x3_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.bvec3_from_mat4x3_mat4x3_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.bvec3_from_bool_mat2_vs
+KHR-GL42.shaders30.glsl_constructors.bvec3_from_bool_mat2_fs
+KHR-GL42.shaders30.glsl_constructors.bvec3_from_bool_mat2_bool_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.bvec3_from_bool_mat2_bool_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.bvec3_from_bool_mat2x3_vs
+KHR-GL42.shaders30.glsl_constructors.bvec3_from_bool_mat2x3_fs
+KHR-GL42.shaders30.glsl_constructors.bvec3_from_bool_mat2x3_bool_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.bvec3_from_bool_mat2x3_bool_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.bvec3_from_bool_mat2x4_vs
+KHR-GL42.shaders30.glsl_constructors.bvec3_from_bool_mat2x4_fs
+KHR-GL42.shaders30.glsl_constructors.bvec3_from_bool_mat2x4_bool_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.bvec3_from_bool_mat2x4_bool_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.bvec3_from_bool_mat3_vs
+KHR-GL42.shaders30.glsl_constructors.bvec3_from_bool_mat3_fs
+KHR-GL42.shaders30.glsl_constructors.bvec3_from_bool_mat3_bool_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.bvec3_from_bool_mat3_bool_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.bvec3_from_bool_mat3x2_vs
+KHR-GL42.shaders30.glsl_constructors.bvec3_from_bool_mat3x2_fs
+KHR-GL42.shaders30.glsl_constructors.bvec3_from_bool_mat3x2_bool_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.bvec3_from_bool_mat3x2_bool_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.bvec3_from_bool_mat3x4_vs
+KHR-GL42.shaders30.glsl_constructors.bvec3_from_bool_mat3x4_fs
+KHR-GL42.shaders30.glsl_constructors.bvec3_from_bool_mat3x4_bool_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.bvec3_from_bool_mat3x4_bool_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.bvec3_from_bool_mat4_vs
+KHR-GL42.shaders30.glsl_constructors.bvec3_from_bool_mat4_fs
+KHR-GL42.shaders30.glsl_constructors.bvec3_from_bool_mat4_bool_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.bvec3_from_bool_mat4_bool_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.bvec3_from_bool_mat4x2_vs
+KHR-GL42.shaders30.glsl_constructors.bvec3_from_bool_mat4x2_fs
+KHR-GL42.shaders30.glsl_constructors.bvec3_from_bool_mat4x2_bool_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.bvec3_from_bool_mat4x2_bool_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.bvec3_from_bool_mat4x3_vs
+KHR-GL42.shaders30.glsl_constructors.bvec3_from_bool_mat4x3_fs
+KHR-GL42.shaders30.glsl_constructors.bvec3_from_bool_mat4x3_bool_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.bvec3_from_bool_mat4x3_bool_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.bvec4_from_mat2_vs
+KHR-GL42.shaders30.glsl_constructors.bvec4_from_mat2_fs
+KHR-GL42.shaders30.glsl_constructors.bvec4_from_mat2_mat2_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.bvec4_from_mat2_mat2_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.bvec4_from_mat2x3_vs
+KHR-GL42.shaders30.glsl_constructors.bvec4_from_mat2x3_fs
+KHR-GL42.shaders30.glsl_constructors.bvec4_from_mat2x3_mat2x3_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.bvec4_from_mat2x3_mat2x3_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.bvec4_from_mat2x4_vs
+KHR-GL42.shaders30.glsl_constructors.bvec4_from_mat2x4_fs
+KHR-GL42.shaders30.glsl_constructors.bvec4_from_mat2x4_mat2x4_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.bvec4_from_mat2x4_mat2x4_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.bvec4_from_mat3_vs
+KHR-GL42.shaders30.glsl_constructors.bvec4_from_mat3_fs
+KHR-GL42.shaders30.glsl_constructors.bvec4_from_mat3_mat3_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.bvec4_from_mat3_mat3_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.bvec4_from_mat3x2_vs
+KHR-GL42.shaders30.glsl_constructors.bvec4_from_mat3x2_fs
+KHR-GL42.shaders30.glsl_constructors.bvec4_from_mat3x2_mat3x2_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.bvec4_from_mat3x2_mat3x2_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.bvec4_from_mat3x4_vs
+KHR-GL42.shaders30.glsl_constructors.bvec4_from_mat3x4_fs
+KHR-GL42.shaders30.glsl_constructors.bvec4_from_mat3x4_mat3x4_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.bvec4_from_mat3x4_mat3x4_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.bvec4_from_mat4_vs
+KHR-GL42.shaders30.glsl_constructors.bvec4_from_mat4_fs
+KHR-GL42.shaders30.glsl_constructors.bvec4_from_mat4_mat4_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.bvec4_from_mat4_mat4_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.bvec4_from_mat4x2_vs
+KHR-GL42.shaders30.glsl_constructors.bvec4_from_mat4x2_fs
+KHR-GL42.shaders30.glsl_constructors.bvec4_from_mat4x2_mat4x2_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.bvec4_from_mat4x2_mat4x2_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.bvec4_from_mat4x3_vs
+KHR-GL42.shaders30.glsl_constructors.bvec4_from_mat4x3_fs
+KHR-GL42.shaders30.glsl_constructors.bvec4_from_mat4x3_mat4x3_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.bvec4_from_mat4x3_mat4x3_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.bvec4_from_bool_mat2_vs
+KHR-GL42.shaders30.glsl_constructors.bvec4_from_bool_mat2_fs
+KHR-GL42.shaders30.glsl_constructors.bvec4_from_bool_mat2_bool_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.bvec4_from_bool_mat2_bool_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.bvec4_from_bool_mat2x3_vs
+KHR-GL42.shaders30.glsl_constructors.bvec4_from_bool_mat2x3_fs
+KHR-GL42.shaders30.glsl_constructors.bvec4_from_bool_mat2x3_bool_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.bvec4_from_bool_mat2x3_bool_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.bvec4_from_bool_mat2x4_vs
+KHR-GL42.shaders30.glsl_constructors.bvec4_from_bool_mat2x4_fs
+KHR-GL42.shaders30.glsl_constructors.bvec4_from_bool_mat2x4_bool_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.bvec4_from_bool_mat2x4_bool_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.bvec4_from_bool_mat3_vs
+KHR-GL42.shaders30.glsl_constructors.bvec4_from_bool_mat3_fs
+KHR-GL42.shaders30.glsl_constructors.bvec4_from_bool_mat3_bool_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.bvec4_from_bool_mat3_bool_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.bvec4_from_bool_mat3x2_vs
+KHR-GL42.shaders30.glsl_constructors.bvec4_from_bool_mat3x2_fs
+KHR-GL42.shaders30.glsl_constructors.bvec4_from_bool_mat3x2_bool_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.bvec4_from_bool_mat3x2_bool_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.bvec4_from_bool_mat3x4_vs
+KHR-GL42.shaders30.glsl_constructors.bvec4_from_bool_mat3x4_fs
+KHR-GL42.shaders30.glsl_constructors.bvec4_from_bool_mat3x4_bool_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.bvec4_from_bool_mat3x4_bool_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.bvec4_from_bool_mat4_vs
+KHR-GL42.shaders30.glsl_constructors.bvec4_from_bool_mat4_fs
+KHR-GL42.shaders30.glsl_constructors.bvec4_from_bool_mat4_bool_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.bvec4_from_bool_mat4_bool_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.bvec4_from_bool_mat4x2_vs
+KHR-GL42.shaders30.glsl_constructors.bvec4_from_bool_mat4x2_fs
+KHR-GL42.shaders30.glsl_constructors.bvec4_from_bool_mat4x2_bool_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.bvec4_from_bool_mat4x2_bool_invalid_fs
+KHR-GL42.shaders30.glsl_constructors.bvec4_from_bool_mat4x3_vs
+KHR-GL42.shaders30.glsl_constructors.bvec4_from_bool_mat4x3_fs
+KHR-GL42.shaders30.glsl_constructors.bvec4_from_bool_mat4x3_bool_invalid_vs
+KHR-GL42.shaders30.glsl_constructors.bvec4_from_bool_mat4x3_bool_invalid_fs
 KHR-GL42.ext_texture_shadow_lod.texture.sampler2darrayshadow_fragment
 KHR-GL42.ext_texture_shadow_lod.texture.sampler2darrayshadow_bias_fragment
 KHR-GL42.ext_texture_shadow_lod.texture.samplercubearrayshadow_vertex
diff --git a/external/openglcts/data/mustpass/gl/khronos_mustpass/4.6.1.x/gl43-master.txt b/external/openglcts/data/mustpass/gl/khronos_mustpass/4.6.1.x/gl43-master.txt
index 6dacc8c..8202342 100644
--- a/external/openglcts/data/mustpass/gl/khronos_mustpass/4.6.1.x/gl43-master.txt
+++ b/external/openglcts/data/mustpass/gl/khronos_mustpass/4.6.1.x/gl43-master.txt
@@ -192,6 +192,654 @@
 KHR-GL43.texture_repeat_mode.depth24_stencil8_11x131_2_mirrored_repeat
 KHR-GL43.shaders30.declarations.declarations.redeclare_gl_FragColor
 KHR-GL43.shaders30.declarations.declarations.redeclare_gl_FragData
+KHR-GL43.shaders30.glsl_constructors.vec2_from_mat2_vs
+KHR-GL43.shaders30.glsl_constructors.vec2_from_mat2_fs
+KHR-GL43.shaders30.glsl_constructors.vec2_from_mat2_mat2_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.vec2_from_mat2_mat2_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.vec2_from_mat2x3_vs
+KHR-GL43.shaders30.glsl_constructors.vec2_from_mat2x3_fs
+KHR-GL43.shaders30.glsl_constructors.vec2_from_mat2x3_mat2x3_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.vec2_from_mat2x3_mat2x3_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.vec2_from_mat2x4_vs
+KHR-GL43.shaders30.glsl_constructors.vec2_from_mat2x4_fs
+KHR-GL43.shaders30.glsl_constructors.vec2_from_mat2x4_mat2x4_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.vec2_from_mat2x4_mat2x4_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.vec2_from_mat3_vs
+KHR-GL43.shaders30.glsl_constructors.vec2_from_mat3_fs
+KHR-GL43.shaders30.glsl_constructors.vec2_from_mat3_mat3_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.vec2_from_mat3_mat3_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.vec2_from_mat3x2_vs
+KHR-GL43.shaders30.glsl_constructors.vec2_from_mat3x2_fs
+KHR-GL43.shaders30.glsl_constructors.vec2_from_mat3x2_mat3x2_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.vec2_from_mat3x2_mat3x2_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.vec2_from_mat3x4_vs
+KHR-GL43.shaders30.glsl_constructors.vec2_from_mat3x4_fs
+KHR-GL43.shaders30.glsl_constructors.vec2_from_mat3x4_mat3x4_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.vec2_from_mat3x4_mat3x4_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.vec2_from_mat4_vs
+KHR-GL43.shaders30.glsl_constructors.vec2_from_mat4_fs
+KHR-GL43.shaders30.glsl_constructors.vec2_from_mat4_mat4_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.vec2_from_mat4_mat4_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.vec2_from_mat4x2_vs
+KHR-GL43.shaders30.glsl_constructors.vec2_from_mat4x2_fs
+KHR-GL43.shaders30.glsl_constructors.vec2_from_mat4x2_mat4x2_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.vec2_from_mat4x2_mat4x2_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.vec2_from_mat4x3_vs
+KHR-GL43.shaders30.glsl_constructors.vec2_from_mat4x3_fs
+KHR-GL43.shaders30.glsl_constructors.vec2_from_mat4x3_mat4x3_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.vec2_from_mat4x3_mat4x3_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.vec2_from_float_mat2_vs
+KHR-GL43.shaders30.glsl_constructors.vec2_from_float_mat2_fs
+KHR-GL43.shaders30.glsl_constructors.vec2_from_float_mat2_float_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.vec2_from_float_mat2_float_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.vec2_from_float_mat2x3_vs
+KHR-GL43.shaders30.glsl_constructors.vec2_from_float_mat2x3_fs
+KHR-GL43.shaders30.glsl_constructors.vec2_from_float_mat2x3_float_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.vec2_from_float_mat2x3_float_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.vec2_from_float_mat2x4_vs
+KHR-GL43.shaders30.glsl_constructors.vec2_from_float_mat2x4_fs
+KHR-GL43.shaders30.glsl_constructors.vec2_from_float_mat2x4_float_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.vec2_from_float_mat2x4_float_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.vec2_from_float_mat3_vs
+KHR-GL43.shaders30.glsl_constructors.vec2_from_float_mat3_fs
+KHR-GL43.shaders30.glsl_constructors.vec2_from_float_mat3_float_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.vec2_from_float_mat3_float_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.vec2_from_float_mat3x2_vs
+KHR-GL43.shaders30.glsl_constructors.vec2_from_float_mat3x2_fs
+KHR-GL43.shaders30.glsl_constructors.vec2_from_float_mat3x2_float_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.vec2_from_float_mat3x2_float_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.vec2_from_float_mat3x4_vs
+KHR-GL43.shaders30.glsl_constructors.vec2_from_float_mat3x4_fs
+KHR-GL43.shaders30.glsl_constructors.vec2_from_float_mat3x4_float_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.vec2_from_float_mat3x4_float_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.vec2_from_float_mat4_vs
+KHR-GL43.shaders30.glsl_constructors.vec2_from_float_mat4_fs
+KHR-GL43.shaders30.glsl_constructors.vec2_from_float_mat4_float_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.vec2_from_float_mat4_float_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.vec2_from_float_mat4x2_vs
+KHR-GL43.shaders30.glsl_constructors.vec2_from_float_mat4x2_fs
+KHR-GL43.shaders30.glsl_constructors.vec2_from_float_mat4x2_float_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.vec2_from_float_mat4x2_float_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.vec2_from_float_mat4x3_vs
+KHR-GL43.shaders30.glsl_constructors.vec2_from_float_mat4x3_fs
+KHR-GL43.shaders30.glsl_constructors.vec2_from_float_mat4x3_float_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.vec2_from_float_mat4x3_float_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.vec3_from_mat2_vs
+KHR-GL43.shaders30.glsl_constructors.vec3_from_mat2_fs
+KHR-GL43.shaders30.glsl_constructors.vec3_from_mat2_mat2_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.vec3_from_mat2_mat2_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.vec3_from_mat2x3_vs
+KHR-GL43.shaders30.glsl_constructors.vec3_from_mat2x3_fs
+KHR-GL43.shaders30.glsl_constructors.vec3_from_mat2x3_mat2x3_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.vec3_from_mat2x3_mat2x3_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.vec3_from_mat2x4_vs
+KHR-GL43.shaders30.glsl_constructors.vec3_from_mat2x4_fs
+KHR-GL43.shaders30.glsl_constructors.vec3_from_mat2x4_mat2x4_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.vec3_from_mat2x4_mat2x4_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.vec3_from_mat3_vs
+KHR-GL43.shaders30.glsl_constructors.vec3_from_mat3_fs
+KHR-GL43.shaders30.glsl_constructors.vec3_from_mat3_mat3_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.vec3_from_mat3_mat3_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.vec3_from_mat3x2_vs
+KHR-GL43.shaders30.glsl_constructors.vec3_from_mat3x2_fs
+KHR-GL43.shaders30.glsl_constructors.vec3_from_mat3x2_mat3x2_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.vec3_from_mat3x2_mat3x2_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.vec3_from_mat3x4_vs
+KHR-GL43.shaders30.glsl_constructors.vec3_from_mat3x4_fs
+KHR-GL43.shaders30.glsl_constructors.vec3_from_mat3x4_mat3x4_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.vec3_from_mat3x4_mat3x4_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.vec3_from_mat4_vs
+KHR-GL43.shaders30.glsl_constructors.vec3_from_mat4_fs
+KHR-GL43.shaders30.glsl_constructors.vec3_from_mat4_mat4_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.vec3_from_mat4_mat4_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.vec3_from_mat4x2_vs
+KHR-GL43.shaders30.glsl_constructors.vec3_from_mat4x2_fs
+KHR-GL43.shaders30.glsl_constructors.vec3_from_mat4x2_mat4x2_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.vec3_from_mat4x2_mat4x2_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.vec3_from_mat4x3_vs
+KHR-GL43.shaders30.glsl_constructors.vec3_from_mat4x3_fs
+KHR-GL43.shaders30.glsl_constructors.vec3_from_mat4x3_mat4x3_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.vec3_from_mat4x3_mat4x3_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.vec3_from_float_mat2_vs
+KHR-GL43.shaders30.glsl_constructors.vec3_from_float_mat2_fs
+KHR-GL43.shaders30.glsl_constructors.vec3_from_float_mat2_float_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.vec3_from_float_mat2_float_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.vec3_from_float_mat2x3_vs
+KHR-GL43.shaders30.glsl_constructors.vec3_from_float_mat2x3_fs
+KHR-GL43.shaders30.glsl_constructors.vec3_from_float_mat2x3_float_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.vec3_from_float_mat2x3_float_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.vec3_from_float_mat2x4_vs
+KHR-GL43.shaders30.glsl_constructors.vec3_from_float_mat2x4_fs
+KHR-GL43.shaders30.glsl_constructors.vec3_from_float_mat2x4_float_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.vec3_from_float_mat2x4_float_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.vec3_from_float_mat3_vs
+KHR-GL43.shaders30.glsl_constructors.vec3_from_float_mat3_fs
+KHR-GL43.shaders30.glsl_constructors.vec3_from_float_mat3_float_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.vec3_from_float_mat3_float_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.vec3_from_float_mat3x2_vs
+KHR-GL43.shaders30.glsl_constructors.vec3_from_float_mat3x2_fs
+KHR-GL43.shaders30.glsl_constructors.vec3_from_float_mat3x2_float_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.vec3_from_float_mat3x2_float_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.vec3_from_float_mat3x4_vs
+KHR-GL43.shaders30.glsl_constructors.vec3_from_float_mat3x4_fs
+KHR-GL43.shaders30.glsl_constructors.vec3_from_float_mat3x4_float_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.vec3_from_float_mat3x4_float_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.vec3_from_float_mat4_vs
+KHR-GL43.shaders30.glsl_constructors.vec3_from_float_mat4_fs
+KHR-GL43.shaders30.glsl_constructors.vec3_from_float_mat4_float_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.vec3_from_float_mat4_float_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.vec3_from_float_mat4x2_vs
+KHR-GL43.shaders30.glsl_constructors.vec3_from_float_mat4x2_fs
+KHR-GL43.shaders30.glsl_constructors.vec3_from_float_mat4x2_float_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.vec3_from_float_mat4x2_float_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.vec3_from_float_mat4x3_vs
+KHR-GL43.shaders30.glsl_constructors.vec3_from_float_mat4x3_fs
+KHR-GL43.shaders30.glsl_constructors.vec3_from_float_mat4x3_float_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.vec3_from_float_mat4x3_float_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.vec4_from_mat2_vs
+KHR-GL43.shaders30.glsl_constructors.vec4_from_mat2_fs
+KHR-GL43.shaders30.glsl_constructors.vec4_from_mat2_mat2_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.vec4_from_mat2_mat2_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.vec4_from_mat2x3_vs
+KHR-GL43.shaders30.glsl_constructors.vec4_from_mat2x3_fs
+KHR-GL43.shaders30.glsl_constructors.vec4_from_mat2x3_mat2x3_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.vec4_from_mat2x3_mat2x3_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.vec4_from_mat2x4_vs
+KHR-GL43.shaders30.glsl_constructors.vec4_from_mat2x4_fs
+KHR-GL43.shaders30.glsl_constructors.vec4_from_mat2x4_mat2x4_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.vec4_from_mat2x4_mat2x4_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.vec4_from_mat3_vs
+KHR-GL43.shaders30.glsl_constructors.vec4_from_mat3_fs
+KHR-GL43.shaders30.glsl_constructors.vec4_from_mat3_mat3_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.vec4_from_mat3_mat3_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.vec4_from_mat3x2_vs
+KHR-GL43.shaders30.glsl_constructors.vec4_from_mat3x2_fs
+KHR-GL43.shaders30.glsl_constructors.vec4_from_mat3x2_mat3x2_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.vec4_from_mat3x2_mat3x2_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.vec4_from_mat3x4_vs
+KHR-GL43.shaders30.glsl_constructors.vec4_from_mat3x4_fs
+KHR-GL43.shaders30.glsl_constructors.vec4_from_mat3x4_mat3x4_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.vec4_from_mat3x4_mat3x4_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.vec4_from_mat4_vs
+KHR-GL43.shaders30.glsl_constructors.vec4_from_mat4_fs
+KHR-GL43.shaders30.glsl_constructors.vec4_from_mat4_mat4_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.vec4_from_mat4_mat4_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.vec4_from_mat4x2_vs
+KHR-GL43.shaders30.glsl_constructors.vec4_from_mat4x2_fs
+KHR-GL43.shaders30.glsl_constructors.vec4_from_mat4x2_mat4x2_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.vec4_from_mat4x2_mat4x2_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.vec4_from_mat4x3_vs
+KHR-GL43.shaders30.glsl_constructors.vec4_from_mat4x3_fs
+KHR-GL43.shaders30.glsl_constructors.vec4_from_mat4x3_mat4x3_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.vec4_from_mat4x3_mat4x3_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.vec4_from_float_mat2_vs
+KHR-GL43.shaders30.glsl_constructors.vec4_from_float_mat2_fs
+KHR-GL43.shaders30.glsl_constructors.vec4_from_float_mat2_float_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.vec4_from_float_mat2_float_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.vec4_from_float_mat2x3_vs
+KHR-GL43.shaders30.glsl_constructors.vec4_from_float_mat2x3_fs
+KHR-GL43.shaders30.glsl_constructors.vec4_from_float_mat2x3_float_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.vec4_from_float_mat2x3_float_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.vec4_from_float_mat2x4_vs
+KHR-GL43.shaders30.glsl_constructors.vec4_from_float_mat2x4_fs
+KHR-GL43.shaders30.glsl_constructors.vec4_from_float_mat2x4_float_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.vec4_from_float_mat2x4_float_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.vec4_from_float_mat3_vs
+KHR-GL43.shaders30.glsl_constructors.vec4_from_float_mat3_fs
+KHR-GL43.shaders30.glsl_constructors.vec4_from_float_mat3_float_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.vec4_from_float_mat3_float_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.vec4_from_float_mat3x2_vs
+KHR-GL43.shaders30.glsl_constructors.vec4_from_float_mat3x2_fs
+KHR-GL43.shaders30.glsl_constructors.vec4_from_float_mat3x2_float_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.vec4_from_float_mat3x2_float_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.vec4_from_float_mat3x4_vs
+KHR-GL43.shaders30.glsl_constructors.vec4_from_float_mat3x4_fs
+KHR-GL43.shaders30.glsl_constructors.vec4_from_float_mat3x4_float_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.vec4_from_float_mat3x4_float_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.vec4_from_float_mat4_vs
+KHR-GL43.shaders30.glsl_constructors.vec4_from_float_mat4_fs
+KHR-GL43.shaders30.glsl_constructors.vec4_from_float_mat4_float_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.vec4_from_float_mat4_float_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.vec4_from_float_mat4x2_vs
+KHR-GL43.shaders30.glsl_constructors.vec4_from_float_mat4x2_fs
+KHR-GL43.shaders30.glsl_constructors.vec4_from_float_mat4x2_float_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.vec4_from_float_mat4x2_float_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.vec4_from_float_mat4x3_vs
+KHR-GL43.shaders30.glsl_constructors.vec4_from_float_mat4x3_fs
+KHR-GL43.shaders30.glsl_constructors.vec4_from_float_mat4x3_float_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.vec4_from_float_mat4x3_float_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.ivec2_from_mat2_vs
+KHR-GL43.shaders30.glsl_constructors.ivec2_from_mat2_fs
+KHR-GL43.shaders30.glsl_constructors.ivec2_from_mat2_mat2_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.ivec2_from_mat2_mat2_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.ivec2_from_mat2x3_vs
+KHR-GL43.shaders30.glsl_constructors.ivec2_from_mat2x3_fs
+KHR-GL43.shaders30.glsl_constructors.ivec2_from_mat2x3_mat2x3_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.ivec2_from_mat2x3_mat2x3_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.ivec2_from_mat2x4_vs
+KHR-GL43.shaders30.glsl_constructors.ivec2_from_mat2x4_fs
+KHR-GL43.shaders30.glsl_constructors.ivec2_from_mat2x4_mat2x4_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.ivec2_from_mat2x4_mat2x4_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.ivec2_from_mat3_vs
+KHR-GL43.shaders30.glsl_constructors.ivec2_from_mat3_fs
+KHR-GL43.shaders30.glsl_constructors.ivec2_from_mat3_mat3_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.ivec2_from_mat3_mat3_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.ivec2_from_mat3x2_vs
+KHR-GL43.shaders30.glsl_constructors.ivec2_from_mat3x2_fs
+KHR-GL43.shaders30.glsl_constructors.ivec2_from_mat3x2_mat3x2_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.ivec2_from_mat3x2_mat3x2_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.ivec2_from_mat3x4_vs
+KHR-GL43.shaders30.glsl_constructors.ivec2_from_mat3x4_fs
+KHR-GL43.shaders30.glsl_constructors.ivec2_from_mat3x4_mat3x4_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.ivec2_from_mat3x4_mat3x4_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.ivec2_from_mat4_vs
+KHR-GL43.shaders30.glsl_constructors.ivec2_from_mat4_fs
+KHR-GL43.shaders30.glsl_constructors.ivec2_from_mat4_mat4_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.ivec2_from_mat4_mat4_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.ivec2_from_mat4x2_vs
+KHR-GL43.shaders30.glsl_constructors.ivec2_from_mat4x2_fs
+KHR-GL43.shaders30.glsl_constructors.ivec2_from_mat4x2_mat4x2_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.ivec2_from_mat4x2_mat4x2_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.ivec2_from_mat4x3_vs
+KHR-GL43.shaders30.glsl_constructors.ivec2_from_mat4x3_fs
+KHR-GL43.shaders30.glsl_constructors.ivec2_from_mat4x3_mat4x3_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.ivec2_from_mat4x3_mat4x3_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.ivec2_from_int_mat2_vs
+KHR-GL43.shaders30.glsl_constructors.ivec2_from_int_mat2_fs
+KHR-GL43.shaders30.glsl_constructors.ivec2_from_int_mat2_int_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.ivec2_from_int_mat2_int_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.ivec2_from_int_mat2x3_vs
+KHR-GL43.shaders30.glsl_constructors.ivec2_from_int_mat2x3_fs
+KHR-GL43.shaders30.glsl_constructors.ivec2_from_int_mat2x3_int_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.ivec2_from_int_mat2x3_int_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.ivec2_from_int_mat2x4_vs
+KHR-GL43.shaders30.glsl_constructors.ivec2_from_int_mat2x4_fs
+KHR-GL43.shaders30.glsl_constructors.ivec2_from_int_mat2x4_int_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.ivec2_from_int_mat2x4_int_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.ivec2_from_int_mat3_vs
+KHR-GL43.shaders30.glsl_constructors.ivec2_from_int_mat3_fs
+KHR-GL43.shaders30.glsl_constructors.ivec2_from_int_mat3_int_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.ivec2_from_int_mat3_int_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.ivec2_from_int_mat3x2_vs
+KHR-GL43.shaders30.glsl_constructors.ivec2_from_int_mat3x2_fs
+KHR-GL43.shaders30.glsl_constructors.ivec2_from_int_mat3x2_int_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.ivec2_from_int_mat3x2_int_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.ivec2_from_int_mat3x4_vs
+KHR-GL43.shaders30.glsl_constructors.ivec2_from_int_mat3x4_fs
+KHR-GL43.shaders30.glsl_constructors.ivec2_from_int_mat3x4_int_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.ivec2_from_int_mat3x4_int_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.ivec2_from_int_mat4_vs
+KHR-GL43.shaders30.glsl_constructors.ivec2_from_int_mat4_fs
+KHR-GL43.shaders30.glsl_constructors.ivec2_from_int_mat4_int_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.ivec2_from_int_mat4_int_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.ivec2_from_int_mat4x2_vs
+KHR-GL43.shaders30.glsl_constructors.ivec2_from_int_mat4x2_fs
+KHR-GL43.shaders30.glsl_constructors.ivec2_from_int_mat4x2_int_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.ivec2_from_int_mat4x2_int_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.ivec2_from_int_mat4x3_vs
+KHR-GL43.shaders30.glsl_constructors.ivec2_from_int_mat4x3_fs
+KHR-GL43.shaders30.glsl_constructors.ivec2_from_int_mat4x3_int_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.ivec2_from_int_mat4x3_int_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.ivec3_from_mat2_vs
+KHR-GL43.shaders30.glsl_constructors.ivec3_from_mat2_fs
+KHR-GL43.shaders30.glsl_constructors.ivec3_from_mat2_mat2_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.ivec3_from_mat2_mat2_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.ivec3_from_mat2x3_vs
+KHR-GL43.shaders30.glsl_constructors.ivec3_from_mat2x3_fs
+KHR-GL43.shaders30.glsl_constructors.ivec3_from_mat2x3_mat2x3_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.ivec3_from_mat2x3_mat2x3_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.ivec3_from_mat2x4_vs
+KHR-GL43.shaders30.glsl_constructors.ivec3_from_mat2x4_fs
+KHR-GL43.shaders30.glsl_constructors.ivec3_from_mat2x4_mat2x4_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.ivec3_from_mat2x4_mat2x4_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.ivec3_from_mat3_vs
+KHR-GL43.shaders30.glsl_constructors.ivec3_from_mat3_fs
+KHR-GL43.shaders30.glsl_constructors.ivec3_from_mat3_mat3_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.ivec3_from_mat3_mat3_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.ivec3_from_mat3x2_vs
+KHR-GL43.shaders30.glsl_constructors.ivec3_from_mat3x2_fs
+KHR-GL43.shaders30.glsl_constructors.ivec3_from_mat3x2_mat3x2_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.ivec3_from_mat3x2_mat3x2_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.ivec3_from_mat3x4_vs
+KHR-GL43.shaders30.glsl_constructors.ivec3_from_mat3x4_fs
+KHR-GL43.shaders30.glsl_constructors.ivec3_from_mat3x4_mat3x4_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.ivec3_from_mat3x4_mat3x4_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.ivec3_from_mat4_vs
+KHR-GL43.shaders30.glsl_constructors.ivec3_from_mat4_fs
+KHR-GL43.shaders30.glsl_constructors.ivec3_from_mat4_mat4_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.ivec3_from_mat4_mat4_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.ivec3_from_mat4x2_vs
+KHR-GL43.shaders30.glsl_constructors.ivec3_from_mat4x2_fs
+KHR-GL43.shaders30.glsl_constructors.ivec3_from_mat4x2_mat4x2_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.ivec3_from_mat4x2_mat4x2_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.ivec3_from_mat4x3_vs
+KHR-GL43.shaders30.glsl_constructors.ivec3_from_mat4x3_fs
+KHR-GL43.shaders30.glsl_constructors.ivec3_from_mat4x3_mat4x3_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.ivec3_from_mat4x3_mat4x3_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.ivec3_from_int_mat2_vs
+KHR-GL43.shaders30.glsl_constructors.ivec3_from_int_mat2_fs
+KHR-GL43.shaders30.glsl_constructors.ivec3_from_int_mat2_int_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.ivec3_from_int_mat2_int_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.ivec3_from_int_mat2x3_vs
+KHR-GL43.shaders30.glsl_constructors.ivec3_from_int_mat2x3_fs
+KHR-GL43.shaders30.glsl_constructors.ivec3_from_int_mat2x3_int_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.ivec3_from_int_mat2x3_int_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.ivec3_from_int_mat2x4_vs
+KHR-GL43.shaders30.glsl_constructors.ivec3_from_int_mat2x4_fs
+KHR-GL43.shaders30.glsl_constructors.ivec3_from_int_mat2x4_int_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.ivec3_from_int_mat2x4_int_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.ivec3_from_int_mat3_vs
+KHR-GL43.shaders30.glsl_constructors.ivec3_from_int_mat3_fs
+KHR-GL43.shaders30.glsl_constructors.ivec3_from_int_mat3_int_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.ivec3_from_int_mat3_int_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.ivec3_from_int_mat3x2_vs
+KHR-GL43.shaders30.glsl_constructors.ivec3_from_int_mat3x2_fs
+KHR-GL43.shaders30.glsl_constructors.ivec3_from_int_mat3x2_int_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.ivec3_from_int_mat3x2_int_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.ivec3_from_int_mat3x4_vs
+KHR-GL43.shaders30.glsl_constructors.ivec3_from_int_mat3x4_fs
+KHR-GL43.shaders30.glsl_constructors.ivec3_from_int_mat3x4_int_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.ivec3_from_int_mat3x4_int_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.ivec3_from_int_mat4_vs
+KHR-GL43.shaders30.glsl_constructors.ivec3_from_int_mat4_fs
+KHR-GL43.shaders30.glsl_constructors.ivec3_from_int_mat4_int_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.ivec3_from_int_mat4_int_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.ivec3_from_int_mat4x2_vs
+KHR-GL43.shaders30.glsl_constructors.ivec3_from_int_mat4x2_fs
+KHR-GL43.shaders30.glsl_constructors.ivec3_from_int_mat4x2_int_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.ivec3_from_int_mat4x2_int_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.ivec3_from_int_mat4x3_vs
+KHR-GL43.shaders30.glsl_constructors.ivec3_from_int_mat4x3_fs
+KHR-GL43.shaders30.glsl_constructors.ivec3_from_int_mat4x3_int_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.ivec3_from_int_mat4x3_int_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.ivec4_from_mat2_vs
+KHR-GL43.shaders30.glsl_constructors.ivec4_from_mat2_fs
+KHR-GL43.shaders30.glsl_constructors.ivec4_from_mat2_mat2_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.ivec4_from_mat2_mat2_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.ivec4_from_mat2x3_vs
+KHR-GL43.shaders30.glsl_constructors.ivec4_from_mat2x3_fs
+KHR-GL43.shaders30.glsl_constructors.ivec4_from_mat2x3_mat2x3_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.ivec4_from_mat2x3_mat2x3_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.ivec4_from_mat2x4_vs
+KHR-GL43.shaders30.glsl_constructors.ivec4_from_mat2x4_fs
+KHR-GL43.shaders30.glsl_constructors.ivec4_from_mat2x4_mat2x4_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.ivec4_from_mat2x4_mat2x4_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.ivec4_from_mat3_vs
+KHR-GL43.shaders30.glsl_constructors.ivec4_from_mat3_fs
+KHR-GL43.shaders30.glsl_constructors.ivec4_from_mat3_mat3_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.ivec4_from_mat3_mat3_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.ivec4_from_mat3x2_vs
+KHR-GL43.shaders30.glsl_constructors.ivec4_from_mat3x2_fs
+KHR-GL43.shaders30.glsl_constructors.ivec4_from_mat3x2_mat3x2_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.ivec4_from_mat3x2_mat3x2_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.ivec4_from_mat3x4_vs
+KHR-GL43.shaders30.glsl_constructors.ivec4_from_mat3x4_fs
+KHR-GL43.shaders30.glsl_constructors.ivec4_from_mat3x4_mat3x4_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.ivec4_from_mat3x4_mat3x4_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.ivec4_from_mat4_vs
+KHR-GL43.shaders30.glsl_constructors.ivec4_from_mat4_fs
+KHR-GL43.shaders30.glsl_constructors.ivec4_from_mat4_mat4_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.ivec4_from_mat4_mat4_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.ivec4_from_mat4x2_vs
+KHR-GL43.shaders30.glsl_constructors.ivec4_from_mat4x2_fs
+KHR-GL43.shaders30.glsl_constructors.ivec4_from_mat4x2_mat4x2_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.ivec4_from_mat4x2_mat4x2_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.ivec4_from_mat4x3_vs
+KHR-GL43.shaders30.glsl_constructors.ivec4_from_mat4x3_fs
+KHR-GL43.shaders30.glsl_constructors.ivec4_from_mat4x3_mat4x3_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.ivec4_from_mat4x3_mat4x3_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.ivec4_from_int_mat2_vs
+KHR-GL43.shaders30.glsl_constructors.ivec4_from_int_mat2_fs
+KHR-GL43.shaders30.glsl_constructors.ivec4_from_int_mat2_int_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.ivec4_from_int_mat2_int_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.ivec4_from_int_mat2x3_vs
+KHR-GL43.shaders30.glsl_constructors.ivec4_from_int_mat2x3_fs
+KHR-GL43.shaders30.glsl_constructors.ivec4_from_int_mat2x3_int_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.ivec4_from_int_mat2x3_int_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.ivec4_from_int_mat2x4_vs
+KHR-GL43.shaders30.glsl_constructors.ivec4_from_int_mat2x4_fs
+KHR-GL43.shaders30.glsl_constructors.ivec4_from_int_mat2x4_int_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.ivec4_from_int_mat2x4_int_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.ivec4_from_int_mat3_vs
+KHR-GL43.shaders30.glsl_constructors.ivec4_from_int_mat3_fs
+KHR-GL43.shaders30.glsl_constructors.ivec4_from_int_mat3_int_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.ivec4_from_int_mat3_int_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.ivec4_from_int_mat3x2_vs
+KHR-GL43.shaders30.glsl_constructors.ivec4_from_int_mat3x2_fs
+KHR-GL43.shaders30.glsl_constructors.ivec4_from_int_mat3x2_int_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.ivec4_from_int_mat3x2_int_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.ivec4_from_int_mat3x4_vs
+KHR-GL43.shaders30.glsl_constructors.ivec4_from_int_mat3x4_fs
+KHR-GL43.shaders30.glsl_constructors.ivec4_from_int_mat3x4_int_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.ivec4_from_int_mat3x4_int_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.ivec4_from_int_mat4_vs
+KHR-GL43.shaders30.glsl_constructors.ivec4_from_int_mat4_fs
+KHR-GL43.shaders30.glsl_constructors.ivec4_from_int_mat4_int_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.ivec4_from_int_mat4_int_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.ivec4_from_int_mat4x2_vs
+KHR-GL43.shaders30.glsl_constructors.ivec4_from_int_mat4x2_fs
+KHR-GL43.shaders30.glsl_constructors.ivec4_from_int_mat4x2_int_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.ivec4_from_int_mat4x2_int_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.ivec4_from_int_mat4x3_vs
+KHR-GL43.shaders30.glsl_constructors.ivec4_from_int_mat4x3_fs
+KHR-GL43.shaders30.glsl_constructors.ivec4_from_int_mat4x3_int_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.ivec4_from_int_mat4x3_int_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.bvec2_from_mat2_vs
+KHR-GL43.shaders30.glsl_constructors.bvec2_from_mat2_fs
+KHR-GL43.shaders30.glsl_constructors.bvec2_from_mat2_mat2_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.bvec2_from_mat2_mat2_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.bvec2_from_mat2x3_vs
+KHR-GL43.shaders30.glsl_constructors.bvec2_from_mat2x3_fs
+KHR-GL43.shaders30.glsl_constructors.bvec2_from_mat2x3_mat2x3_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.bvec2_from_mat2x3_mat2x3_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.bvec2_from_mat2x4_vs
+KHR-GL43.shaders30.glsl_constructors.bvec2_from_mat2x4_fs
+KHR-GL43.shaders30.glsl_constructors.bvec2_from_mat2x4_mat2x4_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.bvec2_from_mat2x4_mat2x4_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.bvec2_from_mat3_vs
+KHR-GL43.shaders30.glsl_constructors.bvec2_from_mat3_fs
+KHR-GL43.shaders30.glsl_constructors.bvec2_from_mat3_mat3_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.bvec2_from_mat3_mat3_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.bvec2_from_mat3x2_vs
+KHR-GL43.shaders30.glsl_constructors.bvec2_from_mat3x2_fs
+KHR-GL43.shaders30.glsl_constructors.bvec2_from_mat3x2_mat3x2_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.bvec2_from_mat3x2_mat3x2_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.bvec2_from_mat3x4_vs
+KHR-GL43.shaders30.glsl_constructors.bvec2_from_mat3x4_fs
+KHR-GL43.shaders30.glsl_constructors.bvec2_from_mat3x4_mat3x4_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.bvec2_from_mat3x4_mat3x4_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.bvec2_from_mat4_vs
+KHR-GL43.shaders30.glsl_constructors.bvec2_from_mat4_fs
+KHR-GL43.shaders30.glsl_constructors.bvec2_from_mat4_mat4_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.bvec2_from_mat4_mat4_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.bvec2_from_mat4x2_vs
+KHR-GL43.shaders30.glsl_constructors.bvec2_from_mat4x2_fs
+KHR-GL43.shaders30.glsl_constructors.bvec2_from_mat4x2_mat4x2_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.bvec2_from_mat4x2_mat4x2_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.bvec2_from_mat4x3_vs
+KHR-GL43.shaders30.glsl_constructors.bvec2_from_mat4x3_fs
+KHR-GL43.shaders30.glsl_constructors.bvec2_from_mat4x3_mat4x3_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.bvec2_from_mat4x3_mat4x3_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.bvec2_from_bool_mat2_vs
+KHR-GL43.shaders30.glsl_constructors.bvec2_from_bool_mat2_fs
+KHR-GL43.shaders30.glsl_constructors.bvec2_from_bool_mat2_bool_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.bvec2_from_bool_mat2_bool_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.bvec2_from_bool_mat2x3_vs
+KHR-GL43.shaders30.glsl_constructors.bvec2_from_bool_mat2x3_fs
+KHR-GL43.shaders30.glsl_constructors.bvec2_from_bool_mat2x3_bool_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.bvec2_from_bool_mat2x3_bool_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.bvec2_from_bool_mat2x4_vs
+KHR-GL43.shaders30.glsl_constructors.bvec2_from_bool_mat2x4_fs
+KHR-GL43.shaders30.glsl_constructors.bvec2_from_bool_mat2x4_bool_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.bvec2_from_bool_mat2x4_bool_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.bvec2_from_bool_mat3_vs
+KHR-GL43.shaders30.glsl_constructors.bvec2_from_bool_mat3_fs
+KHR-GL43.shaders30.glsl_constructors.bvec2_from_bool_mat3_bool_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.bvec2_from_bool_mat3_bool_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.bvec2_from_bool_mat3x2_vs
+KHR-GL43.shaders30.glsl_constructors.bvec2_from_bool_mat3x2_fs
+KHR-GL43.shaders30.glsl_constructors.bvec2_from_bool_mat3x2_bool_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.bvec2_from_bool_mat3x2_bool_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.bvec2_from_bool_mat3x4_vs
+KHR-GL43.shaders30.glsl_constructors.bvec2_from_bool_mat3x4_fs
+KHR-GL43.shaders30.glsl_constructors.bvec2_from_bool_mat3x4_bool_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.bvec2_from_bool_mat3x4_bool_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.bvec2_from_bool_mat4_vs
+KHR-GL43.shaders30.glsl_constructors.bvec2_from_bool_mat4_fs
+KHR-GL43.shaders30.glsl_constructors.bvec2_from_bool_mat4_bool_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.bvec2_from_bool_mat4_bool_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.bvec2_from_bool_mat4x2_vs
+KHR-GL43.shaders30.glsl_constructors.bvec2_from_bool_mat4x2_fs
+KHR-GL43.shaders30.glsl_constructors.bvec2_from_bool_mat4x2_bool_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.bvec2_from_bool_mat4x2_bool_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.bvec2_from_bool_mat4x3_vs
+KHR-GL43.shaders30.glsl_constructors.bvec2_from_bool_mat4x3_fs
+KHR-GL43.shaders30.glsl_constructors.bvec2_from_bool_mat4x3_bool_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.bvec2_from_bool_mat4x3_bool_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.bvec3_from_mat2_vs
+KHR-GL43.shaders30.glsl_constructors.bvec3_from_mat2_fs
+KHR-GL43.shaders30.glsl_constructors.bvec3_from_mat2_mat2_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.bvec3_from_mat2_mat2_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.bvec3_from_mat2x3_vs
+KHR-GL43.shaders30.glsl_constructors.bvec3_from_mat2x3_fs
+KHR-GL43.shaders30.glsl_constructors.bvec3_from_mat2x3_mat2x3_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.bvec3_from_mat2x3_mat2x3_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.bvec3_from_mat2x4_vs
+KHR-GL43.shaders30.glsl_constructors.bvec3_from_mat2x4_fs
+KHR-GL43.shaders30.glsl_constructors.bvec3_from_mat2x4_mat2x4_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.bvec3_from_mat2x4_mat2x4_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.bvec3_from_mat3_vs
+KHR-GL43.shaders30.glsl_constructors.bvec3_from_mat3_fs
+KHR-GL43.shaders30.glsl_constructors.bvec3_from_mat3_mat3_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.bvec3_from_mat3_mat3_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.bvec3_from_mat3x2_vs
+KHR-GL43.shaders30.glsl_constructors.bvec3_from_mat3x2_fs
+KHR-GL43.shaders30.glsl_constructors.bvec3_from_mat3x2_mat3x2_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.bvec3_from_mat3x2_mat3x2_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.bvec3_from_mat3x4_vs
+KHR-GL43.shaders30.glsl_constructors.bvec3_from_mat3x4_fs
+KHR-GL43.shaders30.glsl_constructors.bvec3_from_mat3x4_mat3x4_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.bvec3_from_mat3x4_mat3x4_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.bvec3_from_mat4_vs
+KHR-GL43.shaders30.glsl_constructors.bvec3_from_mat4_fs
+KHR-GL43.shaders30.glsl_constructors.bvec3_from_mat4_mat4_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.bvec3_from_mat4_mat4_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.bvec3_from_mat4x2_vs
+KHR-GL43.shaders30.glsl_constructors.bvec3_from_mat4x2_fs
+KHR-GL43.shaders30.glsl_constructors.bvec3_from_mat4x2_mat4x2_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.bvec3_from_mat4x2_mat4x2_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.bvec3_from_mat4x3_vs
+KHR-GL43.shaders30.glsl_constructors.bvec3_from_mat4x3_fs
+KHR-GL43.shaders30.glsl_constructors.bvec3_from_mat4x3_mat4x3_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.bvec3_from_mat4x3_mat4x3_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.bvec3_from_bool_mat2_vs
+KHR-GL43.shaders30.glsl_constructors.bvec3_from_bool_mat2_fs
+KHR-GL43.shaders30.glsl_constructors.bvec3_from_bool_mat2_bool_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.bvec3_from_bool_mat2_bool_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.bvec3_from_bool_mat2x3_vs
+KHR-GL43.shaders30.glsl_constructors.bvec3_from_bool_mat2x3_fs
+KHR-GL43.shaders30.glsl_constructors.bvec3_from_bool_mat2x3_bool_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.bvec3_from_bool_mat2x3_bool_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.bvec3_from_bool_mat2x4_vs
+KHR-GL43.shaders30.glsl_constructors.bvec3_from_bool_mat2x4_fs
+KHR-GL43.shaders30.glsl_constructors.bvec3_from_bool_mat2x4_bool_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.bvec3_from_bool_mat2x4_bool_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.bvec3_from_bool_mat3_vs
+KHR-GL43.shaders30.glsl_constructors.bvec3_from_bool_mat3_fs
+KHR-GL43.shaders30.glsl_constructors.bvec3_from_bool_mat3_bool_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.bvec3_from_bool_mat3_bool_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.bvec3_from_bool_mat3x2_vs
+KHR-GL43.shaders30.glsl_constructors.bvec3_from_bool_mat3x2_fs
+KHR-GL43.shaders30.glsl_constructors.bvec3_from_bool_mat3x2_bool_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.bvec3_from_bool_mat3x2_bool_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.bvec3_from_bool_mat3x4_vs
+KHR-GL43.shaders30.glsl_constructors.bvec3_from_bool_mat3x4_fs
+KHR-GL43.shaders30.glsl_constructors.bvec3_from_bool_mat3x4_bool_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.bvec3_from_bool_mat3x4_bool_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.bvec3_from_bool_mat4_vs
+KHR-GL43.shaders30.glsl_constructors.bvec3_from_bool_mat4_fs
+KHR-GL43.shaders30.glsl_constructors.bvec3_from_bool_mat4_bool_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.bvec3_from_bool_mat4_bool_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.bvec3_from_bool_mat4x2_vs
+KHR-GL43.shaders30.glsl_constructors.bvec3_from_bool_mat4x2_fs
+KHR-GL43.shaders30.glsl_constructors.bvec3_from_bool_mat4x2_bool_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.bvec3_from_bool_mat4x2_bool_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.bvec3_from_bool_mat4x3_vs
+KHR-GL43.shaders30.glsl_constructors.bvec3_from_bool_mat4x3_fs
+KHR-GL43.shaders30.glsl_constructors.bvec3_from_bool_mat4x3_bool_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.bvec3_from_bool_mat4x3_bool_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.bvec4_from_mat2_vs
+KHR-GL43.shaders30.glsl_constructors.bvec4_from_mat2_fs
+KHR-GL43.shaders30.glsl_constructors.bvec4_from_mat2_mat2_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.bvec4_from_mat2_mat2_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.bvec4_from_mat2x3_vs
+KHR-GL43.shaders30.glsl_constructors.bvec4_from_mat2x3_fs
+KHR-GL43.shaders30.glsl_constructors.bvec4_from_mat2x3_mat2x3_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.bvec4_from_mat2x3_mat2x3_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.bvec4_from_mat2x4_vs
+KHR-GL43.shaders30.glsl_constructors.bvec4_from_mat2x4_fs
+KHR-GL43.shaders30.glsl_constructors.bvec4_from_mat2x4_mat2x4_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.bvec4_from_mat2x4_mat2x4_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.bvec4_from_mat3_vs
+KHR-GL43.shaders30.glsl_constructors.bvec4_from_mat3_fs
+KHR-GL43.shaders30.glsl_constructors.bvec4_from_mat3_mat3_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.bvec4_from_mat3_mat3_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.bvec4_from_mat3x2_vs
+KHR-GL43.shaders30.glsl_constructors.bvec4_from_mat3x2_fs
+KHR-GL43.shaders30.glsl_constructors.bvec4_from_mat3x2_mat3x2_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.bvec4_from_mat3x2_mat3x2_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.bvec4_from_mat3x4_vs
+KHR-GL43.shaders30.glsl_constructors.bvec4_from_mat3x4_fs
+KHR-GL43.shaders30.glsl_constructors.bvec4_from_mat3x4_mat3x4_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.bvec4_from_mat3x4_mat3x4_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.bvec4_from_mat4_vs
+KHR-GL43.shaders30.glsl_constructors.bvec4_from_mat4_fs
+KHR-GL43.shaders30.glsl_constructors.bvec4_from_mat4_mat4_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.bvec4_from_mat4_mat4_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.bvec4_from_mat4x2_vs
+KHR-GL43.shaders30.glsl_constructors.bvec4_from_mat4x2_fs
+KHR-GL43.shaders30.glsl_constructors.bvec4_from_mat4x2_mat4x2_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.bvec4_from_mat4x2_mat4x2_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.bvec4_from_mat4x3_vs
+KHR-GL43.shaders30.glsl_constructors.bvec4_from_mat4x3_fs
+KHR-GL43.shaders30.glsl_constructors.bvec4_from_mat4x3_mat4x3_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.bvec4_from_mat4x3_mat4x3_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.bvec4_from_bool_mat2_vs
+KHR-GL43.shaders30.glsl_constructors.bvec4_from_bool_mat2_fs
+KHR-GL43.shaders30.glsl_constructors.bvec4_from_bool_mat2_bool_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.bvec4_from_bool_mat2_bool_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.bvec4_from_bool_mat2x3_vs
+KHR-GL43.shaders30.glsl_constructors.bvec4_from_bool_mat2x3_fs
+KHR-GL43.shaders30.glsl_constructors.bvec4_from_bool_mat2x3_bool_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.bvec4_from_bool_mat2x3_bool_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.bvec4_from_bool_mat2x4_vs
+KHR-GL43.shaders30.glsl_constructors.bvec4_from_bool_mat2x4_fs
+KHR-GL43.shaders30.glsl_constructors.bvec4_from_bool_mat2x4_bool_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.bvec4_from_bool_mat2x4_bool_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.bvec4_from_bool_mat3_vs
+KHR-GL43.shaders30.glsl_constructors.bvec4_from_bool_mat3_fs
+KHR-GL43.shaders30.glsl_constructors.bvec4_from_bool_mat3_bool_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.bvec4_from_bool_mat3_bool_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.bvec4_from_bool_mat3x2_vs
+KHR-GL43.shaders30.glsl_constructors.bvec4_from_bool_mat3x2_fs
+KHR-GL43.shaders30.glsl_constructors.bvec4_from_bool_mat3x2_bool_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.bvec4_from_bool_mat3x2_bool_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.bvec4_from_bool_mat3x4_vs
+KHR-GL43.shaders30.glsl_constructors.bvec4_from_bool_mat3x4_fs
+KHR-GL43.shaders30.glsl_constructors.bvec4_from_bool_mat3x4_bool_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.bvec4_from_bool_mat3x4_bool_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.bvec4_from_bool_mat4_vs
+KHR-GL43.shaders30.glsl_constructors.bvec4_from_bool_mat4_fs
+KHR-GL43.shaders30.glsl_constructors.bvec4_from_bool_mat4_bool_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.bvec4_from_bool_mat4_bool_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.bvec4_from_bool_mat4x2_vs
+KHR-GL43.shaders30.glsl_constructors.bvec4_from_bool_mat4x2_fs
+KHR-GL43.shaders30.glsl_constructors.bvec4_from_bool_mat4x2_bool_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.bvec4_from_bool_mat4x2_bool_invalid_fs
+KHR-GL43.shaders30.glsl_constructors.bvec4_from_bool_mat4x3_vs
+KHR-GL43.shaders30.glsl_constructors.bvec4_from_bool_mat4x3_fs
+KHR-GL43.shaders30.glsl_constructors.bvec4_from_bool_mat4x3_bool_invalid_vs
+KHR-GL43.shaders30.glsl_constructors.bvec4_from_bool_mat4x3_bool_invalid_fs
 KHR-GL43.ext_texture_shadow_lod.texture.sampler2darrayshadow_fragment
 KHR-GL43.ext_texture_shadow_lod.texture.sampler2darrayshadow_bias_fragment
 KHR-GL43.ext_texture_shadow_lod.texture.samplercubearrayshadow_vertex
diff --git a/external/openglcts/data/mustpass/gl/khronos_mustpass/4.6.1.x/gl44-master.txt b/external/openglcts/data/mustpass/gl/khronos_mustpass/4.6.1.x/gl44-master.txt
index 1c65c05..b570572 100644
--- a/external/openglcts/data/mustpass/gl/khronos_mustpass/4.6.1.x/gl44-master.txt
+++ b/external/openglcts/data/mustpass/gl/khronos_mustpass/4.6.1.x/gl44-master.txt
@@ -192,6 +192,654 @@
 KHR-GL44.texture_repeat_mode.depth24_stencil8_11x131_2_mirrored_repeat
 KHR-GL44.shaders30.declarations.declarations.redeclare_gl_FragColor
 KHR-GL44.shaders30.declarations.declarations.redeclare_gl_FragData
+KHR-GL44.shaders30.glsl_constructors.vec2_from_mat2_vs
+KHR-GL44.shaders30.glsl_constructors.vec2_from_mat2_fs
+KHR-GL44.shaders30.glsl_constructors.vec2_from_mat2_mat2_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.vec2_from_mat2_mat2_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.vec2_from_mat2x3_vs
+KHR-GL44.shaders30.glsl_constructors.vec2_from_mat2x3_fs
+KHR-GL44.shaders30.glsl_constructors.vec2_from_mat2x3_mat2x3_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.vec2_from_mat2x3_mat2x3_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.vec2_from_mat2x4_vs
+KHR-GL44.shaders30.glsl_constructors.vec2_from_mat2x4_fs
+KHR-GL44.shaders30.glsl_constructors.vec2_from_mat2x4_mat2x4_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.vec2_from_mat2x4_mat2x4_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.vec2_from_mat3_vs
+KHR-GL44.shaders30.glsl_constructors.vec2_from_mat3_fs
+KHR-GL44.shaders30.glsl_constructors.vec2_from_mat3_mat3_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.vec2_from_mat3_mat3_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.vec2_from_mat3x2_vs
+KHR-GL44.shaders30.glsl_constructors.vec2_from_mat3x2_fs
+KHR-GL44.shaders30.glsl_constructors.vec2_from_mat3x2_mat3x2_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.vec2_from_mat3x2_mat3x2_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.vec2_from_mat3x4_vs
+KHR-GL44.shaders30.glsl_constructors.vec2_from_mat3x4_fs
+KHR-GL44.shaders30.glsl_constructors.vec2_from_mat3x4_mat3x4_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.vec2_from_mat3x4_mat3x4_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.vec2_from_mat4_vs
+KHR-GL44.shaders30.glsl_constructors.vec2_from_mat4_fs
+KHR-GL44.shaders30.glsl_constructors.vec2_from_mat4_mat4_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.vec2_from_mat4_mat4_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.vec2_from_mat4x2_vs
+KHR-GL44.shaders30.glsl_constructors.vec2_from_mat4x2_fs
+KHR-GL44.shaders30.glsl_constructors.vec2_from_mat4x2_mat4x2_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.vec2_from_mat4x2_mat4x2_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.vec2_from_mat4x3_vs
+KHR-GL44.shaders30.glsl_constructors.vec2_from_mat4x3_fs
+KHR-GL44.shaders30.glsl_constructors.vec2_from_mat4x3_mat4x3_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.vec2_from_mat4x3_mat4x3_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.vec2_from_float_mat2_vs
+KHR-GL44.shaders30.glsl_constructors.vec2_from_float_mat2_fs
+KHR-GL44.shaders30.glsl_constructors.vec2_from_float_mat2_float_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.vec2_from_float_mat2_float_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.vec2_from_float_mat2x3_vs
+KHR-GL44.shaders30.glsl_constructors.vec2_from_float_mat2x3_fs
+KHR-GL44.shaders30.glsl_constructors.vec2_from_float_mat2x3_float_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.vec2_from_float_mat2x3_float_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.vec2_from_float_mat2x4_vs
+KHR-GL44.shaders30.glsl_constructors.vec2_from_float_mat2x4_fs
+KHR-GL44.shaders30.glsl_constructors.vec2_from_float_mat2x4_float_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.vec2_from_float_mat2x4_float_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.vec2_from_float_mat3_vs
+KHR-GL44.shaders30.glsl_constructors.vec2_from_float_mat3_fs
+KHR-GL44.shaders30.glsl_constructors.vec2_from_float_mat3_float_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.vec2_from_float_mat3_float_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.vec2_from_float_mat3x2_vs
+KHR-GL44.shaders30.glsl_constructors.vec2_from_float_mat3x2_fs
+KHR-GL44.shaders30.glsl_constructors.vec2_from_float_mat3x2_float_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.vec2_from_float_mat3x2_float_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.vec2_from_float_mat3x4_vs
+KHR-GL44.shaders30.glsl_constructors.vec2_from_float_mat3x4_fs
+KHR-GL44.shaders30.glsl_constructors.vec2_from_float_mat3x4_float_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.vec2_from_float_mat3x4_float_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.vec2_from_float_mat4_vs
+KHR-GL44.shaders30.glsl_constructors.vec2_from_float_mat4_fs
+KHR-GL44.shaders30.glsl_constructors.vec2_from_float_mat4_float_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.vec2_from_float_mat4_float_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.vec2_from_float_mat4x2_vs
+KHR-GL44.shaders30.glsl_constructors.vec2_from_float_mat4x2_fs
+KHR-GL44.shaders30.glsl_constructors.vec2_from_float_mat4x2_float_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.vec2_from_float_mat4x2_float_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.vec2_from_float_mat4x3_vs
+KHR-GL44.shaders30.glsl_constructors.vec2_from_float_mat4x3_fs
+KHR-GL44.shaders30.glsl_constructors.vec2_from_float_mat4x3_float_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.vec2_from_float_mat4x3_float_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.vec3_from_mat2_vs
+KHR-GL44.shaders30.glsl_constructors.vec3_from_mat2_fs
+KHR-GL44.shaders30.glsl_constructors.vec3_from_mat2_mat2_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.vec3_from_mat2_mat2_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.vec3_from_mat2x3_vs
+KHR-GL44.shaders30.glsl_constructors.vec3_from_mat2x3_fs
+KHR-GL44.shaders30.glsl_constructors.vec3_from_mat2x3_mat2x3_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.vec3_from_mat2x3_mat2x3_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.vec3_from_mat2x4_vs
+KHR-GL44.shaders30.glsl_constructors.vec3_from_mat2x4_fs
+KHR-GL44.shaders30.glsl_constructors.vec3_from_mat2x4_mat2x4_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.vec3_from_mat2x4_mat2x4_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.vec3_from_mat3_vs
+KHR-GL44.shaders30.glsl_constructors.vec3_from_mat3_fs
+KHR-GL44.shaders30.glsl_constructors.vec3_from_mat3_mat3_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.vec3_from_mat3_mat3_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.vec3_from_mat3x2_vs
+KHR-GL44.shaders30.glsl_constructors.vec3_from_mat3x2_fs
+KHR-GL44.shaders30.glsl_constructors.vec3_from_mat3x2_mat3x2_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.vec3_from_mat3x2_mat3x2_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.vec3_from_mat3x4_vs
+KHR-GL44.shaders30.glsl_constructors.vec3_from_mat3x4_fs
+KHR-GL44.shaders30.glsl_constructors.vec3_from_mat3x4_mat3x4_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.vec3_from_mat3x4_mat3x4_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.vec3_from_mat4_vs
+KHR-GL44.shaders30.glsl_constructors.vec3_from_mat4_fs
+KHR-GL44.shaders30.glsl_constructors.vec3_from_mat4_mat4_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.vec3_from_mat4_mat4_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.vec3_from_mat4x2_vs
+KHR-GL44.shaders30.glsl_constructors.vec3_from_mat4x2_fs
+KHR-GL44.shaders30.glsl_constructors.vec3_from_mat4x2_mat4x2_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.vec3_from_mat4x2_mat4x2_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.vec3_from_mat4x3_vs
+KHR-GL44.shaders30.glsl_constructors.vec3_from_mat4x3_fs
+KHR-GL44.shaders30.glsl_constructors.vec3_from_mat4x3_mat4x3_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.vec3_from_mat4x3_mat4x3_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.vec3_from_float_mat2_vs
+KHR-GL44.shaders30.glsl_constructors.vec3_from_float_mat2_fs
+KHR-GL44.shaders30.glsl_constructors.vec3_from_float_mat2_float_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.vec3_from_float_mat2_float_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.vec3_from_float_mat2x3_vs
+KHR-GL44.shaders30.glsl_constructors.vec3_from_float_mat2x3_fs
+KHR-GL44.shaders30.glsl_constructors.vec3_from_float_mat2x3_float_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.vec3_from_float_mat2x3_float_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.vec3_from_float_mat2x4_vs
+KHR-GL44.shaders30.glsl_constructors.vec3_from_float_mat2x4_fs
+KHR-GL44.shaders30.glsl_constructors.vec3_from_float_mat2x4_float_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.vec3_from_float_mat2x4_float_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.vec3_from_float_mat3_vs
+KHR-GL44.shaders30.glsl_constructors.vec3_from_float_mat3_fs
+KHR-GL44.shaders30.glsl_constructors.vec3_from_float_mat3_float_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.vec3_from_float_mat3_float_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.vec3_from_float_mat3x2_vs
+KHR-GL44.shaders30.glsl_constructors.vec3_from_float_mat3x2_fs
+KHR-GL44.shaders30.glsl_constructors.vec3_from_float_mat3x2_float_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.vec3_from_float_mat3x2_float_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.vec3_from_float_mat3x4_vs
+KHR-GL44.shaders30.glsl_constructors.vec3_from_float_mat3x4_fs
+KHR-GL44.shaders30.glsl_constructors.vec3_from_float_mat3x4_float_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.vec3_from_float_mat3x4_float_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.vec3_from_float_mat4_vs
+KHR-GL44.shaders30.glsl_constructors.vec3_from_float_mat4_fs
+KHR-GL44.shaders30.glsl_constructors.vec3_from_float_mat4_float_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.vec3_from_float_mat4_float_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.vec3_from_float_mat4x2_vs
+KHR-GL44.shaders30.glsl_constructors.vec3_from_float_mat4x2_fs
+KHR-GL44.shaders30.glsl_constructors.vec3_from_float_mat4x2_float_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.vec3_from_float_mat4x2_float_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.vec3_from_float_mat4x3_vs
+KHR-GL44.shaders30.glsl_constructors.vec3_from_float_mat4x3_fs
+KHR-GL44.shaders30.glsl_constructors.vec3_from_float_mat4x3_float_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.vec3_from_float_mat4x3_float_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.vec4_from_mat2_vs
+KHR-GL44.shaders30.glsl_constructors.vec4_from_mat2_fs
+KHR-GL44.shaders30.glsl_constructors.vec4_from_mat2_mat2_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.vec4_from_mat2_mat2_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.vec4_from_mat2x3_vs
+KHR-GL44.shaders30.glsl_constructors.vec4_from_mat2x3_fs
+KHR-GL44.shaders30.glsl_constructors.vec4_from_mat2x3_mat2x3_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.vec4_from_mat2x3_mat2x3_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.vec4_from_mat2x4_vs
+KHR-GL44.shaders30.glsl_constructors.vec4_from_mat2x4_fs
+KHR-GL44.shaders30.glsl_constructors.vec4_from_mat2x4_mat2x4_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.vec4_from_mat2x4_mat2x4_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.vec4_from_mat3_vs
+KHR-GL44.shaders30.glsl_constructors.vec4_from_mat3_fs
+KHR-GL44.shaders30.glsl_constructors.vec4_from_mat3_mat3_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.vec4_from_mat3_mat3_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.vec4_from_mat3x2_vs
+KHR-GL44.shaders30.glsl_constructors.vec4_from_mat3x2_fs
+KHR-GL44.shaders30.glsl_constructors.vec4_from_mat3x2_mat3x2_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.vec4_from_mat3x2_mat3x2_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.vec4_from_mat3x4_vs
+KHR-GL44.shaders30.glsl_constructors.vec4_from_mat3x4_fs
+KHR-GL44.shaders30.glsl_constructors.vec4_from_mat3x4_mat3x4_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.vec4_from_mat3x4_mat3x4_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.vec4_from_mat4_vs
+KHR-GL44.shaders30.glsl_constructors.vec4_from_mat4_fs
+KHR-GL44.shaders30.glsl_constructors.vec4_from_mat4_mat4_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.vec4_from_mat4_mat4_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.vec4_from_mat4x2_vs
+KHR-GL44.shaders30.glsl_constructors.vec4_from_mat4x2_fs
+KHR-GL44.shaders30.glsl_constructors.vec4_from_mat4x2_mat4x2_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.vec4_from_mat4x2_mat4x2_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.vec4_from_mat4x3_vs
+KHR-GL44.shaders30.glsl_constructors.vec4_from_mat4x3_fs
+KHR-GL44.shaders30.glsl_constructors.vec4_from_mat4x3_mat4x3_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.vec4_from_mat4x3_mat4x3_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.vec4_from_float_mat2_vs
+KHR-GL44.shaders30.glsl_constructors.vec4_from_float_mat2_fs
+KHR-GL44.shaders30.glsl_constructors.vec4_from_float_mat2_float_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.vec4_from_float_mat2_float_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.vec4_from_float_mat2x3_vs
+KHR-GL44.shaders30.glsl_constructors.vec4_from_float_mat2x3_fs
+KHR-GL44.shaders30.glsl_constructors.vec4_from_float_mat2x3_float_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.vec4_from_float_mat2x3_float_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.vec4_from_float_mat2x4_vs
+KHR-GL44.shaders30.glsl_constructors.vec4_from_float_mat2x4_fs
+KHR-GL44.shaders30.glsl_constructors.vec4_from_float_mat2x4_float_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.vec4_from_float_mat2x4_float_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.vec4_from_float_mat3_vs
+KHR-GL44.shaders30.glsl_constructors.vec4_from_float_mat3_fs
+KHR-GL44.shaders30.glsl_constructors.vec4_from_float_mat3_float_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.vec4_from_float_mat3_float_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.vec4_from_float_mat3x2_vs
+KHR-GL44.shaders30.glsl_constructors.vec4_from_float_mat3x2_fs
+KHR-GL44.shaders30.glsl_constructors.vec4_from_float_mat3x2_float_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.vec4_from_float_mat3x2_float_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.vec4_from_float_mat3x4_vs
+KHR-GL44.shaders30.glsl_constructors.vec4_from_float_mat3x4_fs
+KHR-GL44.shaders30.glsl_constructors.vec4_from_float_mat3x4_float_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.vec4_from_float_mat3x4_float_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.vec4_from_float_mat4_vs
+KHR-GL44.shaders30.glsl_constructors.vec4_from_float_mat4_fs
+KHR-GL44.shaders30.glsl_constructors.vec4_from_float_mat4_float_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.vec4_from_float_mat4_float_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.vec4_from_float_mat4x2_vs
+KHR-GL44.shaders30.glsl_constructors.vec4_from_float_mat4x2_fs
+KHR-GL44.shaders30.glsl_constructors.vec4_from_float_mat4x2_float_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.vec4_from_float_mat4x2_float_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.vec4_from_float_mat4x3_vs
+KHR-GL44.shaders30.glsl_constructors.vec4_from_float_mat4x3_fs
+KHR-GL44.shaders30.glsl_constructors.vec4_from_float_mat4x3_float_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.vec4_from_float_mat4x3_float_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.ivec2_from_mat2_vs
+KHR-GL44.shaders30.glsl_constructors.ivec2_from_mat2_fs
+KHR-GL44.shaders30.glsl_constructors.ivec2_from_mat2_mat2_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.ivec2_from_mat2_mat2_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.ivec2_from_mat2x3_vs
+KHR-GL44.shaders30.glsl_constructors.ivec2_from_mat2x3_fs
+KHR-GL44.shaders30.glsl_constructors.ivec2_from_mat2x3_mat2x3_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.ivec2_from_mat2x3_mat2x3_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.ivec2_from_mat2x4_vs
+KHR-GL44.shaders30.glsl_constructors.ivec2_from_mat2x4_fs
+KHR-GL44.shaders30.glsl_constructors.ivec2_from_mat2x4_mat2x4_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.ivec2_from_mat2x4_mat2x4_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.ivec2_from_mat3_vs
+KHR-GL44.shaders30.glsl_constructors.ivec2_from_mat3_fs
+KHR-GL44.shaders30.glsl_constructors.ivec2_from_mat3_mat3_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.ivec2_from_mat3_mat3_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.ivec2_from_mat3x2_vs
+KHR-GL44.shaders30.glsl_constructors.ivec2_from_mat3x2_fs
+KHR-GL44.shaders30.glsl_constructors.ivec2_from_mat3x2_mat3x2_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.ivec2_from_mat3x2_mat3x2_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.ivec2_from_mat3x4_vs
+KHR-GL44.shaders30.glsl_constructors.ivec2_from_mat3x4_fs
+KHR-GL44.shaders30.glsl_constructors.ivec2_from_mat3x4_mat3x4_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.ivec2_from_mat3x4_mat3x4_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.ivec2_from_mat4_vs
+KHR-GL44.shaders30.glsl_constructors.ivec2_from_mat4_fs
+KHR-GL44.shaders30.glsl_constructors.ivec2_from_mat4_mat4_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.ivec2_from_mat4_mat4_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.ivec2_from_mat4x2_vs
+KHR-GL44.shaders30.glsl_constructors.ivec2_from_mat4x2_fs
+KHR-GL44.shaders30.glsl_constructors.ivec2_from_mat4x2_mat4x2_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.ivec2_from_mat4x2_mat4x2_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.ivec2_from_mat4x3_vs
+KHR-GL44.shaders30.glsl_constructors.ivec2_from_mat4x3_fs
+KHR-GL44.shaders30.glsl_constructors.ivec2_from_mat4x3_mat4x3_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.ivec2_from_mat4x3_mat4x3_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.ivec2_from_int_mat2_vs
+KHR-GL44.shaders30.glsl_constructors.ivec2_from_int_mat2_fs
+KHR-GL44.shaders30.glsl_constructors.ivec2_from_int_mat2_int_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.ivec2_from_int_mat2_int_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.ivec2_from_int_mat2x3_vs
+KHR-GL44.shaders30.glsl_constructors.ivec2_from_int_mat2x3_fs
+KHR-GL44.shaders30.glsl_constructors.ivec2_from_int_mat2x3_int_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.ivec2_from_int_mat2x3_int_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.ivec2_from_int_mat2x4_vs
+KHR-GL44.shaders30.glsl_constructors.ivec2_from_int_mat2x4_fs
+KHR-GL44.shaders30.glsl_constructors.ivec2_from_int_mat2x4_int_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.ivec2_from_int_mat2x4_int_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.ivec2_from_int_mat3_vs
+KHR-GL44.shaders30.glsl_constructors.ivec2_from_int_mat3_fs
+KHR-GL44.shaders30.glsl_constructors.ivec2_from_int_mat3_int_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.ivec2_from_int_mat3_int_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.ivec2_from_int_mat3x2_vs
+KHR-GL44.shaders30.glsl_constructors.ivec2_from_int_mat3x2_fs
+KHR-GL44.shaders30.glsl_constructors.ivec2_from_int_mat3x2_int_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.ivec2_from_int_mat3x2_int_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.ivec2_from_int_mat3x4_vs
+KHR-GL44.shaders30.glsl_constructors.ivec2_from_int_mat3x4_fs
+KHR-GL44.shaders30.glsl_constructors.ivec2_from_int_mat3x4_int_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.ivec2_from_int_mat3x4_int_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.ivec2_from_int_mat4_vs
+KHR-GL44.shaders30.glsl_constructors.ivec2_from_int_mat4_fs
+KHR-GL44.shaders30.glsl_constructors.ivec2_from_int_mat4_int_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.ivec2_from_int_mat4_int_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.ivec2_from_int_mat4x2_vs
+KHR-GL44.shaders30.glsl_constructors.ivec2_from_int_mat4x2_fs
+KHR-GL44.shaders30.glsl_constructors.ivec2_from_int_mat4x2_int_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.ivec2_from_int_mat4x2_int_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.ivec2_from_int_mat4x3_vs
+KHR-GL44.shaders30.glsl_constructors.ivec2_from_int_mat4x3_fs
+KHR-GL44.shaders30.glsl_constructors.ivec2_from_int_mat4x3_int_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.ivec2_from_int_mat4x3_int_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.ivec3_from_mat2_vs
+KHR-GL44.shaders30.glsl_constructors.ivec3_from_mat2_fs
+KHR-GL44.shaders30.glsl_constructors.ivec3_from_mat2_mat2_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.ivec3_from_mat2_mat2_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.ivec3_from_mat2x3_vs
+KHR-GL44.shaders30.glsl_constructors.ivec3_from_mat2x3_fs
+KHR-GL44.shaders30.glsl_constructors.ivec3_from_mat2x3_mat2x3_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.ivec3_from_mat2x3_mat2x3_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.ivec3_from_mat2x4_vs
+KHR-GL44.shaders30.glsl_constructors.ivec3_from_mat2x4_fs
+KHR-GL44.shaders30.glsl_constructors.ivec3_from_mat2x4_mat2x4_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.ivec3_from_mat2x4_mat2x4_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.ivec3_from_mat3_vs
+KHR-GL44.shaders30.glsl_constructors.ivec3_from_mat3_fs
+KHR-GL44.shaders30.glsl_constructors.ivec3_from_mat3_mat3_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.ivec3_from_mat3_mat3_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.ivec3_from_mat3x2_vs
+KHR-GL44.shaders30.glsl_constructors.ivec3_from_mat3x2_fs
+KHR-GL44.shaders30.glsl_constructors.ivec3_from_mat3x2_mat3x2_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.ivec3_from_mat3x2_mat3x2_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.ivec3_from_mat3x4_vs
+KHR-GL44.shaders30.glsl_constructors.ivec3_from_mat3x4_fs
+KHR-GL44.shaders30.glsl_constructors.ivec3_from_mat3x4_mat3x4_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.ivec3_from_mat3x4_mat3x4_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.ivec3_from_mat4_vs
+KHR-GL44.shaders30.glsl_constructors.ivec3_from_mat4_fs
+KHR-GL44.shaders30.glsl_constructors.ivec3_from_mat4_mat4_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.ivec3_from_mat4_mat4_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.ivec3_from_mat4x2_vs
+KHR-GL44.shaders30.glsl_constructors.ivec3_from_mat4x2_fs
+KHR-GL44.shaders30.glsl_constructors.ivec3_from_mat4x2_mat4x2_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.ivec3_from_mat4x2_mat4x2_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.ivec3_from_mat4x3_vs
+KHR-GL44.shaders30.glsl_constructors.ivec3_from_mat4x3_fs
+KHR-GL44.shaders30.glsl_constructors.ivec3_from_mat4x3_mat4x3_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.ivec3_from_mat4x3_mat4x3_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.ivec3_from_int_mat2_vs
+KHR-GL44.shaders30.glsl_constructors.ivec3_from_int_mat2_fs
+KHR-GL44.shaders30.glsl_constructors.ivec3_from_int_mat2_int_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.ivec3_from_int_mat2_int_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.ivec3_from_int_mat2x3_vs
+KHR-GL44.shaders30.glsl_constructors.ivec3_from_int_mat2x3_fs
+KHR-GL44.shaders30.glsl_constructors.ivec3_from_int_mat2x3_int_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.ivec3_from_int_mat2x3_int_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.ivec3_from_int_mat2x4_vs
+KHR-GL44.shaders30.glsl_constructors.ivec3_from_int_mat2x4_fs
+KHR-GL44.shaders30.glsl_constructors.ivec3_from_int_mat2x4_int_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.ivec3_from_int_mat2x4_int_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.ivec3_from_int_mat3_vs
+KHR-GL44.shaders30.glsl_constructors.ivec3_from_int_mat3_fs
+KHR-GL44.shaders30.glsl_constructors.ivec3_from_int_mat3_int_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.ivec3_from_int_mat3_int_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.ivec3_from_int_mat3x2_vs
+KHR-GL44.shaders30.glsl_constructors.ivec3_from_int_mat3x2_fs
+KHR-GL44.shaders30.glsl_constructors.ivec3_from_int_mat3x2_int_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.ivec3_from_int_mat3x2_int_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.ivec3_from_int_mat3x4_vs
+KHR-GL44.shaders30.glsl_constructors.ivec3_from_int_mat3x4_fs
+KHR-GL44.shaders30.glsl_constructors.ivec3_from_int_mat3x4_int_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.ivec3_from_int_mat3x4_int_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.ivec3_from_int_mat4_vs
+KHR-GL44.shaders30.glsl_constructors.ivec3_from_int_mat4_fs
+KHR-GL44.shaders30.glsl_constructors.ivec3_from_int_mat4_int_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.ivec3_from_int_mat4_int_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.ivec3_from_int_mat4x2_vs
+KHR-GL44.shaders30.glsl_constructors.ivec3_from_int_mat4x2_fs
+KHR-GL44.shaders30.glsl_constructors.ivec3_from_int_mat4x2_int_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.ivec3_from_int_mat4x2_int_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.ivec3_from_int_mat4x3_vs
+KHR-GL44.shaders30.glsl_constructors.ivec3_from_int_mat4x3_fs
+KHR-GL44.shaders30.glsl_constructors.ivec3_from_int_mat4x3_int_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.ivec3_from_int_mat4x3_int_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.ivec4_from_mat2_vs
+KHR-GL44.shaders30.glsl_constructors.ivec4_from_mat2_fs
+KHR-GL44.shaders30.glsl_constructors.ivec4_from_mat2_mat2_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.ivec4_from_mat2_mat2_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.ivec4_from_mat2x3_vs
+KHR-GL44.shaders30.glsl_constructors.ivec4_from_mat2x3_fs
+KHR-GL44.shaders30.glsl_constructors.ivec4_from_mat2x3_mat2x3_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.ivec4_from_mat2x3_mat2x3_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.ivec4_from_mat2x4_vs
+KHR-GL44.shaders30.glsl_constructors.ivec4_from_mat2x4_fs
+KHR-GL44.shaders30.glsl_constructors.ivec4_from_mat2x4_mat2x4_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.ivec4_from_mat2x4_mat2x4_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.ivec4_from_mat3_vs
+KHR-GL44.shaders30.glsl_constructors.ivec4_from_mat3_fs
+KHR-GL44.shaders30.glsl_constructors.ivec4_from_mat3_mat3_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.ivec4_from_mat3_mat3_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.ivec4_from_mat3x2_vs
+KHR-GL44.shaders30.glsl_constructors.ivec4_from_mat3x2_fs
+KHR-GL44.shaders30.glsl_constructors.ivec4_from_mat3x2_mat3x2_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.ivec4_from_mat3x2_mat3x2_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.ivec4_from_mat3x4_vs
+KHR-GL44.shaders30.glsl_constructors.ivec4_from_mat3x4_fs
+KHR-GL44.shaders30.glsl_constructors.ivec4_from_mat3x4_mat3x4_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.ivec4_from_mat3x4_mat3x4_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.ivec4_from_mat4_vs
+KHR-GL44.shaders30.glsl_constructors.ivec4_from_mat4_fs
+KHR-GL44.shaders30.glsl_constructors.ivec4_from_mat4_mat4_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.ivec4_from_mat4_mat4_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.ivec4_from_mat4x2_vs
+KHR-GL44.shaders30.glsl_constructors.ivec4_from_mat4x2_fs
+KHR-GL44.shaders30.glsl_constructors.ivec4_from_mat4x2_mat4x2_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.ivec4_from_mat4x2_mat4x2_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.ivec4_from_mat4x3_vs
+KHR-GL44.shaders30.glsl_constructors.ivec4_from_mat4x3_fs
+KHR-GL44.shaders30.glsl_constructors.ivec4_from_mat4x3_mat4x3_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.ivec4_from_mat4x3_mat4x3_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.ivec4_from_int_mat2_vs
+KHR-GL44.shaders30.glsl_constructors.ivec4_from_int_mat2_fs
+KHR-GL44.shaders30.glsl_constructors.ivec4_from_int_mat2_int_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.ivec4_from_int_mat2_int_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.ivec4_from_int_mat2x3_vs
+KHR-GL44.shaders30.glsl_constructors.ivec4_from_int_mat2x3_fs
+KHR-GL44.shaders30.glsl_constructors.ivec4_from_int_mat2x3_int_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.ivec4_from_int_mat2x3_int_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.ivec4_from_int_mat2x4_vs
+KHR-GL44.shaders30.glsl_constructors.ivec4_from_int_mat2x4_fs
+KHR-GL44.shaders30.glsl_constructors.ivec4_from_int_mat2x4_int_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.ivec4_from_int_mat2x4_int_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.ivec4_from_int_mat3_vs
+KHR-GL44.shaders30.glsl_constructors.ivec4_from_int_mat3_fs
+KHR-GL44.shaders30.glsl_constructors.ivec4_from_int_mat3_int_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.ivec4_from_int_mat3_int_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.ivec4_from_int_mat3x2_vs
+KHR-GL44.shaders30.glsl_constructors.ivec4_from_int_mat3x2_fs
+KHR-GL44.shaders30.glsl_constructors.ivec4_from_int_mat3x2_int_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.ivec4_from_int_mat3x2_int_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.ivec4_from_int_mat3x4_vs
+KHR-GL44.shaders30.glsl_constructors.ivec4_from_int_mat3x4_fs
+KHR-GL44.shaders30.glsl_constructors.ivec4_from_int_mat3x4_int_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.ivec4_from_int_mat3x4_int_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.ivec4_from_int_mat4_vs
+KHR-GL44.shaders30.glsl_constructors.ivec4_from_int_mat4_fs
+KHR-GL44.shaders30.glsl_constructors.ivec4_from_int_mat4_int_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.ivec4_from_int_mat4_int_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.ivec4_from_int_mat4x2_vs
+KHR-GL44.shaders30.glsl_constructors.ivec4_from_int_mat4x2_fs
+KHR-GL44.shaders30.glsl_constructors.ivec4_from_int_mat4x2_int_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.ivec4_from_int_mat4x2_int_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.ivec4_from_int_mat4x3_vs
+KHR-GL44.shaders30.glsl_constructors.ivec4_from_int_mat4x3_fs
+KHR-GL44.shaders30.glsl_constructors.ivec4_from_int_mat4x3_int_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.ivec4_from_int_mat4x3_int_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.bvec2_from_mat2_vs
+KHR-GL44.shaders30.glsl_constructors.bvec2_from_mat2_fs
+KHR-GL44.shaders30.glsl_constructors.bvec2_from_mat2_mat2_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.bvec2_from_mat2_mat2_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.bvec2_from_mat2x3_vs
+KHR-GL44.shaders30.glsl_constructors.bvec2_from_mat2x3_fs
+KHR-GL44.shaders30.glsl_constructors.bvec2_from_mat2x3_mat2x3_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.bvec2_from_mat2x3_mat2x3_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.bvec2_from_mat2x4_vs
+KHR-GL44.shaders30.glsl_constructors.bvec2_from_mat2x4_fs
+KHR-GL44.shaders30.glsl_constructors.bvec2_from_mat2x4_mat2x4_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.bvec2_from_mat2x4_mat2x4_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.bvec2_from_mat3_vs
+KHR-GL44.shaders30.glsl_constructors.bvec2_from_mat3_fs
+KHR-GL44.shaders30.glsl_constructors.bvec2_from_mat3_mat3_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.bvec2_from_mat3_mat3_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.bvec2_from_mat3x2_vs
+KHR-GL44.shaders30.glsl_constructors.bvec2_from_mat3x2_fs
+KHR-GL44.shaders30.glsl_constructors.bvec2_from_mat3x2_mat3x2_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.bvec2_from_mat3x2_mat3x2_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.bvec2_from_mat3x4_vs
+KHR-GL44.shaders30.glsl_constructors.bvec2_from_mat3x4_fs
+KHR-GL44.shaders30.glsl_constructors.bvec2_from_mat3x4_mat3x4_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.bvec2_from_mat3x4_mat3x4_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.bvec2_from_mat4_vs
+KHR-GL44.shaders30.glsl_constructors.bvec2_from_mat4_fs
+KHR-GL44.shaders30.glsl_constructors.bvec2_from_mat4_mat4_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.bvec2_from_mat4_mat4_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.bvec2_from_mat4x2_vs
+KHR-GL44.shaders30.glsl_constructors.bvec2_from_mat4x2_fs
+KHR-GL44.shaders30.glsl_constructors.bvec2_from_mat4x2_mat4x2_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.bvec2_from_mat4x2_mat4x2_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.bvec2_from_mat4x3_vs
+KHR-GL44.shaders30.glsl_constructors.bvec2_from_mat4x3_fs
+KHR-GL44.shaders30.glsl_constructors.bvec2_from_mat4x3_mat4x3_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.bvec2_from_mat4x3_mat4x3_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.bvec2_from_bool_mat2_vs
+KHR-GL44.shaders30.glsl_constructors.bvec2_from_bool_mat2_fs
+KHR-GL44.shaders30.glsl_constructors.bvec2_from_bool_mat2_bool_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.bvec2_from_bool_mat2_bool_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.bvec2_from_bool_mat2x3_vs
+KHR-GL44.shaders30.glsl_constructors.bvec2_from_bool_mat2x3_fs
+KHR-GL44.shaders30.glsl_constructors.bvec2_from_bool_mat2x3_bool_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.bvec2_from_bool_mat2x3_bool_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.bvec2_from_bool_mat2x4_vs
+KHR-GL44.shaders30.glsl_constructors.bvec2_from_bool_mat2x4_fs
+KHR-GL44.shaders30.glsl_constructors.bvec2_from_bool_mat2x4_bool_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.bvec2_from_bool_mat2x4_bool_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.bvec2_from_bool_mat3_vs
+KHR-GL44.shaders30.glsl_constructors.bvec2_from_bool_mat3_fs
+KHR-GL44.shaders30.glsl_constructors.bvec2_from_bool_mat3_bool_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.bvec2_from_bool_mat3_bool_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.bvec2_from_bool_mat3x2_vs
+KHR-GL44.shaders30.glsl_constructors.bvec2_from_bool_mat3x2_fs
+KHR-GL44.shaders30.glsl_constructors.bvec2_from_bool_mat3x2_bool_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.bvec2_from_bool_mat3x2_bool_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.bvec2_from_bool_mat3x4_vs
+KHR-GL44.shaders30.glsl_constructors.bvec2_from_bool_mat3x4_fs
+KHR-GL44.shaders30.glsl_constructors.bvec2_from_bool_mat3x4_bool_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.bvec2_from_bool_mat3x4_bool_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.bvec2_from_bool_mat4_vs
+KHR-GL44.shaders30.glsl_constructors.bvec2_from_bool_mat4_fs
+KHR-GL44.shaders30.glsl_constructors.bvec2_from_bool_mat4_bool_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.bvec2_from_bool_mat4_bool_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.bvec2_from_bool_mat4x2_vs
+KHR-GL44.shaders30.glsl_constructors.bvec2_from_bool_mat4x2_fs
+KHR-GL44.shaders30.glsl_constructors.bvec2_from_bool_mat4x2_bool_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.bvec2_from_bool_mat4x2_bool_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.bvec2_from_bool_mat4x3_vs
+KHR-GL44.shaders30.glsl_constructors.bvec2_from_bool_mat4x3_fs
+KHR-GL44.shaders30.glsl_constructors.bvec2_from_bool_mat4x3_bool_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.bvec2_from_bool_mat4x3_bool_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.bvec3_from_mat2_vs
+KHR-GL44.shaders30.glsl_constructors.bvec3_from_mat2_fs
+KHR-GL44.shaders30.glsl_constructors.bvec3_from_mat2_mat2_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.bvec3_from_mat2_mat2_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.bvec3_from_mat2x3_vs
+KHR-GL44.shaders30.glsl_constructors.bvec3_from_mat2x3_fs
+KHR-GL44.shaders30.glsl_constructors.bvec3_from_mat2x3_mat2x3_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.bvec3_from_mat2x3_mat2x3_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.bvec3_from_mat2x4_vs
+KHR-GL44.shaders30.glsl_constructors.bvec3_from_mat2x4_fs
+KHR-GL44.shaders30.glsl_constructors.bvec3_from_mat2x4_mat2x4_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.bvec3_from_mat2x4_mat2x4_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.bvec3_from_mat3_vs
+KHR-GL44.shaders30.glsl_constructors.bvec3_from_mat3_fs
+KHR-GL44.shaders30.glsl_constructors.bvec3_from_mat3_mat3_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.bvec3_from_mat3_mat3_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.bvec3_from_mat3x2_vs
+KHR-GL44.shaders30.glsl_constructors.bvec3_from_mat3x2_fs
+KHR-GL44.shaders30.glsl_constructors.bvec3_from_mat3x2_mat3x2_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.bvec3_from_mat3x2_mat3x2_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.bvec3_from_mat3x4_vs
+KHR-GL44.shaders30.glsl_constructors.bvec3_from_mat3x4_fs
+KHR-GL44.shaders30.glsl_constructors.bvec3_from_mat3x4_mat3x4_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.bvec3_from_mat3x4_mat3x4_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.bvec3_from_mat4_vs
+KHR-GL44.shaders30.glsl_constructors.bvec3_from_mat4_fs
+KHR-GL44.shaders30.glsl_constructors.bvec3_from_mat4_mat4_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.bvec3_from_mat4_mat4_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.bvec3_from_mat4x2_vs
+KHR-GL44.shaders30.glsl_constructors.bvec3_from_mat4x2_fs
+KHR-GL44.shaders30.glsl_constructors.bvec3_from_mat4x2_mat4x2_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.bvec3_from_mat4x2_mat4x2_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.bvec3_from_mat4x3_vs
+KHR-GL44.shaders30.glsl_constructors.bvec3_from_mat4x3_fs
+KHR-GL44.shaders30.glsl_constructors.bvec3_from_mat4x3_mat4x3_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.bvec3_from_mat4x3_mat4x3_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.bvec3_from_bool_mat2_vs
+KHR-GL44.shaders30.glsl_constructors.bvec3_from_bool_mat2_fs
+KHR-GL44.shaders30.glsl_constructors.bvec3_from_bool_mat2_bool_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.bvec3_from_bool_mat2_bool_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.bvec3_from_bool_mat2x3_vs
+KHR-GL44.shaders30.glsl_constructors.bvec3_from_bool_mat2x3_fs
+KHR-GL44.shaders30.glsl_constructors.bvec3_from_bool_mat2x3_bool_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.bvec3_from_bool_mat2x3_bool_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.bvec3_from_bool_mat2x4_vs
+KHR-GL44.shaders30.glsl_constructors.bvec3_from_bool_mat2x4_fs
+KHR-GL44.shaders30.glsl_constructors.bvec3_from_bool_mat2x4_bool_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.bvec3_from_bool_mat2x4_bool_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.bvec3_from_bool_mat3_vs
+KHR-GL44.shaders30.glsl_constructors.bvec3_from_bool_mat3_fs
+KHR-GL44.shaders30.glsl_constructors.bvec3_from_bool_mat3_bool_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.bvec3_from_bool_mat3_bool_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.bvec3_from_bool_mat3x2_vs
+KHR-GL44.shaders30.glsl_constructors.bvec3_from_bool_mat3x2_fs
+KHR-GL44.shaders30.glsl_constructors.bvec3_from_bool_mat3x2_bool_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.bvec3_from_bool_mat3x2_bool_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.bvec3_from_bool_mat3x4_vs
+KHR-GL44.shaders30.glsl_constructors.bvec3_from_bool_mat3x4_fs
+KHR-GL44.shaders30.glsl_constructors.bvec3_from_bool_mat3x4_bool_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.bvec3_from_bool_mat3x4_bool_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.bvec3_from_bool_mat4_vs
+KHR-GL44.shaders30.glsl_constructors.bvec3_from_bool_mat4_fs
+KHR-GL44.shaders30.glsl_constructors.bvec3_from_bool_mat4_bool_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.bvec3_from_bool_mat4_bool_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.bvec3_from_bool_mat4x2_vs
+KHR-GL44.shaders30.glsl_constructors.bvec3_from_bool_mat4x2_fs
+KHR-GL44.shaders30.glsl_constructors.bvec3_from_bool_mat4x2_bool_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.bvec3_from_bool_mat4x2_bool_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.bvec3_from_bool_mat4x3_vs
+KHR-GL44.shaders30.glsl_constructors.bvec3_from_bool_mat4x3_fs
+KHR-GL44.shaders30.glsl_constructors.bvec3_from_bool_mat4x3_bool_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.bvec3_from_bool_mat4x3_bool_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.bvec4_from_mat2_vs
+KHR-GL44.shaders30.glsl_constructors.bvec4_from_mat2_fs
+KHR-GL44.shaders30.glsl_constructors.bvec4_from_mat2_mat2_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.bvec4_from_mat2_mat2_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.bvec4_from_mat2x3_vs
+KHR-GL44.shaders30.glsl_constructors.bvec4_from_mat2x3_fs
+KHR-GL44.shaders30.glsl_constructors.bvec4_from_mat2x3_mat2x3_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.bvec4_from_mat2x3_mat2x3_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.bvec4_from_mat2x4_vs
+KHR-GL44.shaders30.glsl_constructors.bvec4_from_mat2x4_fs
+KHR-GL44.shaders30.glsl_constructors.bvec4_from_mat2x4_mat2x4_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.bvec4_from_mat2x4_mat2x4_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.bvec4_from_mat3_vs
+KHR-GL44.shaders30.glsl_constructors.bvec4_from_mat3_fs
+KHR-GL44.shaders30.glsl_constructors.bvec4_from_mat3_mat3_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.bvec4_from_mat3_mat3_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.bvec4_from_mat3x2_vs
+KHR-GL44.shaders30.glsl_constructors.bvec4_from_mat3x2_fs
+KHR-GL44.shaders30.glsl_constructors.bvec4_from_mat3x2_mat3x2_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.bvec4_from_mat3x2_mat3x2_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.bvec4_from_mat3x4_vs
+KHR-GL44.shaders30.glsl_constructors.bvec4_from_mat3x4_fs
+KHR-GL44.shaders30.glsl_constructors.bvec4_from_mat3x4_mat3x4_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.bvec4_from_mat3x4_mat3x4_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.bvec4_from_mat4_vs
+KHR-GL44.shaders30.glsl_constructors.bvec4_from_mat4_fs
+KHR-GL44.shaders30.glsl_constructors.bvec4_from_mat4_mat4_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.bvec4_from_mat4_mat4_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.bvec4_from_mat4x2_vs
+KHR-GL44.shaders30.glsl_constructors.bvec4_from_mat4x2_fs
+KHR-GL44.shaders30.glsl_constructors.bvec4_from_mat4x2_mat4x2_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.bvec4_from_mat4x2_mat4x2_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.bvec4_from_mat4x3_vs
+KHR-GL44.shaders30.glsl_constructors.bvec4_from_mat4x3_fs
+KHR-GL44.shaders30.glsl_constructors.bvec4_from_mat4x3_mat4x3_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.bvec4_from_mat4x3_mat4x3_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.bvec4_from_bool_mat2_vs
+KHR-GL44.shaders30.glsl_constructors.bvec4_from_bool_mat2_fs
+KHR-GL44.shaders30.glsl_constructors.bvec4_from_bool_mat2_bool_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.bvec4_from_bool_mat2_bool_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.bvec4_from_bool_mat2x3_vs
+KHR-GL44.shaders30.glsl_constructors.bvec4_from_bool_mat2x3_fs
+KHR-GL44.shaders30.glsl_constructors.bvec4_from_bool_mat2x3_bool_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.bvec4_from_bool_mat2x3_bool_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.bvec4_from_bool_mat2x4_vs
+KHR-GL44.shaders30.glsl_constructors.bvec4_from_bool_mat2x4_fs
+KHR-GL44.shaders30.glsl_constructors.bvec4_from_bool_mat2x4_bool_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.bvec4_from_bool_mat2x4_bool_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.bvec4_from_bool_mat3_vs
+KHR-GL44.shaders30.glsl_constructors.bvec4_from_bool_mat3_fs
+KHR-GL44.shaders30.glsl_constructors.bvec4_from_bool_mat3_bool_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.bvec4_from_bool_mat3_bool_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.bvec4_from_bool_mat3x2_vs
+KHR-GL44.shaders30.glsl_constructors.bvec4_from_bool_mat3x2_fs
+KHR-GL44.shaders30.glsl_constructors.bvec4_from_bool_mat3x2_bool_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.bvec4_from_bool_mat3x2_bool_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.bvec4_from_bool_mat3x4_vs
+KHR-GL44.shaders30.glsl_constructors.bvec4_from_bool_mat3x4_fs
+KHR-GL44.shaders30.glsl_constructors.bvec4_from_bool_mat3x4_bool_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.bvec4_from_bool_mat3x4_bool_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.bvec4_from_bool_mat4_vs
+KHR-GL44.shaders30.glsl_constructors.bvec4_from_bool_mat4_fs
+KHR-GL44.shaders30.glsl_constructors.bvec4_from_bool_mat4_bool_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.bvec4_from_bool_mat4_bool_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.bvec4_from_bool_mat4x2_vs
+KHR-GL44.shaders30.glsl_constructors.bvec4_from_bool_mat4x2_fs
+KHR-GL44.shaders30.glsl_constructors.bvec4_from_bool_mat4x2_bool_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.bvec4_from_bool_mat4x2_bool_invalid_fs
+KHR-GL44.shaders30.glsl_constructors.bvec4_from_bool_mat4x3_vs
+KHR-GL44.shaders30.glsl_constructors.bvec4_from_bool_mat4x3_fs
+KHR-GL44.shaders30.glsl_constructors.bvec4_from_bool_mat4x3_bool_invalid_vs
+KHR-GL44.shaders30.glsl_constructors.bvec4_from_bool_mat4x3_bool_invalid_fs
 KHR-GL44.ext_texture_shadow_lod.texture.sampler2darrayshadow_fragment
 KHR-GL44.ext_texture_shadow_lod.texture.sampler2darrayshadow_bias_fragment
 KHR-GL44.ext_texture_shadow_lod.texture.samplercubearrayshadow_vertex
diff --git a/external/openglcts/data/mustpass/gl/khronos_mustpass/4.6.1.x/gl45-master.txt b/external/openglcts/data/mustpass/gl/khronos_mustpass/4.6.1.x/gl45-master.txt
index da3ade4..e2d5d15 100644
--- a/external/openglcts/data/mustpass/gl/khronos_mustpass/4.6.1.x/gl45-master.txt
+++ b/external/openglcts/data/mustpass/gl/khronos_mustpass/4.6.1.x/gl45-master.txt
@@ -192,6 +192,654 @@
 KHR-GL45.texture_repeat_mode.depth24_stencil8_11x131_2_mirrored_repeat
 KHR-GL45.shaders30.declarations.declarations.redeclare_gl_FragColor
 KHR-GL45.shaders30.declarations.declarations.redeclare_gl_FragData
+KHR-GL45.shaders30.glsl_constructors.vec2_from_mat2_vs
+KHR-GL45.shaders30.glsl_constructors.vec2_from_mat2_fs
+KHR-GL45.shaders30.glsl_constructors.vec2_from_mat2_mat2_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.vec2_from_mat2_mat2_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.vec2_from_mat2x3_vs
+KHR-GL45.shaders30.glsl_constructors.vec2_from_mat2x3_fs
+KHR-GL45.shaders30.glsl_constructors.vec2_from_mat2x3_mat2x3_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.vec2_from_mat2x3_mat2x3_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.vec2_from_mat2x4_vs
+KHR-GL45.shaders30.glsl_constructors.vec2_from_mat2x4_fs
+KHR-GL45.shaders30.glsl_constructors.vec2_from_mat2x4_mat2x4_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.vec2_from_mat2x4_mat2x4_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.vec2_from_mat3_vs
+KHR-GL45.shaders30.glsl_constructors.vec2_from_mat3_fs
+KHR-GL45.shaders30.glsl_constructors.vec2_from_mat3_mat3_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.vec2_from_mat3_mat3_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.vec2_from_mat3x2_vs
+KHR-GL45.shaders30.glsl_constructors.vec2_from_mat3x2_fs
+KHR-GL45.shaders30.glsl_constructors.vec2_from_mat3x2_mat3x2_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.vec2_from_mat3x2_mat3x2_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.vec2_from_mat3x4_vs
+KHR-GL45.shaders30.glsl_constructors.vec2_from_mat3x4_fs
+KHR-GL45.shaders30.glsl_constructors.vec2_from_mat3x4_mat3x4_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.vec2_from_mat3x4_mat3x4_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.vec2_from_mat4_vs
+KHR-GL45.shaders30.glsl_constructors.vec2_from_mat4_fs
+KHR-GL45.shaders30.glsl_constructors.vec2_from_mat4_mat4_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.vec2_from_mat4_mat4_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.vec2_from_mat4x2_vs
+KHR-GL45.shaders30.glsl_constructors.vec2_from_mat4x2_fs
+KHR-GL45.shaders30.glsl_constructors.vec2_from_mat4x2_mat4x2_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.vec2_from_mat4x2_mat4x2_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.vec2_from_mat4x3_vs
+KHR-GL45.shaders30.glsl_constructors.vec2_from_mat4x3_fs
+KHR-GL45.shaders30.glsl_constructors.vec2_from_mat4x3_mat4x3_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.vec2_from_mat4x3_mat4x3_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.vec2_from_float_mat2_vs
+KHR-GL45.shaders30.glsl_constructors.vec2_from_float_mat2_fs
+KHR-GL45.shaders30.glsl_constructors.vec2_from_float_mat2_float_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.vec2_from_float_mat2_float_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.vec2_from_float_mat2x3_vs
+KHR-GL45.shaders30.glsl_constructors.vec2_from_float_mat2x3_fs
+KHR-GL45.shaders30.glsl_constructors.vec2_from_float_mat2x3_float_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.vec2_from_float_mat2x3_float_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.vec2_from_float_mat2x4_vs
+KHR-GL45.shaders30.glsl_constructors.vec2_from_float_mat2x4_fs
+KHR-GL45.shaders30.glsl_constructors.vec2_from_float_mat2x4_float_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.vec2_from_float_mat2x4_float_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.vec2_from_float_mat3_vs
+KHR-GL45.shaders30.glsl_constructors.vec2_from_float_mat3_fs
+KHR-GL45.shaders30.glsl_constructors.vec2_from_float_mat3_float_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.vec2_from_float_mat3_float_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.vec2_from_float_mat3x2_vs
+KHR-GL45.shaders30.glsl_constructors.vec2_from_float_mat3x2_fs
+KHR-GL45.shaders30.glsl_constructors.vec2_from_float_mat3x2_float_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.vec2_from_float_mat3x2_float_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.vec2_from_float_mat3x4_vs
+KHR-GL45.shaders30.glsl_constructors.vec2_from_float_mat3x4_fs
+KHR-GL45.shaders30.glsl_constructors.vec2_from_float_mat3x4_float_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.vec2_from_float_mat3x4_float_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.vec2_from_float_mat4_vs
+KHR-GL45.shaders30.glsl_constructors.vec2_from_float_mat4_fs
+KHR-GL45.shaders30.glsl_constructors.vec2_from_float_mat4_float_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.vec2_from_float_mat4_float_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.vec2_from_float_mat4x2_vs
+KHR-GL45.shaders30.glsl_constructors.vec2_from_float_mat4x2_fs
+KHR-GL45.shaders30.glsl_constructors.vec2_from_float_mat4x2_float_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.vec2_from_float_mat4x2_float_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.vec2_from_float_mat4x3_vs
+KHR-GL45.shaders30.glsl_constructors.vec2_from_float_mat4x3_fs
+KHR-GL45.shaders30.glsl_constructors.vec2_from_float_mat4x3_float_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.vec2_from_float_mat4x3_float_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.vec3_from_mat2_vs
+KHR-GL45.shaders30.glsl_constructors.vec3_from_mat2_fs
+KHR-GL45.shaders30.glsl_constructors.vec3_from_mat2_mat2_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.vec3_from_mat2_mat2_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.vec3_from_mat2x3_vs
+KHR-GL45.shaders30.glsl_constructors.vec3_from_mat2x3_fs
+KHR-GL45.shaders30.glsl_constructors.vec3_from_mat2x3_mat2x3_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.vec3_from_mat2x3_mat2x3_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.vec3_from_mat2x4_vs
+KHR-GL45.shaders30.glsl_constructors.vec3_from_mat2x4_fs
+KHR-GL45.shaders30.glsl_constructors.vec3_from_mat2x4_mat2x4_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.vec3_from_mat2x4_mat2x4_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.vec3_from_mat3_vs
+KHR-GL45.shaders30.glsl_constructors.vec3_from_mat3_fs
+KHR-GL45.shaders30.glsl_constructors.vec3_from_mat3_mat3_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.vec3_from_mat3_mat3_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.vec3_from_mat3x2_vs
+KHR-GL45.shaders30.glsl_constructors.vec3_from_mat3x2_fs
+KHR-GL45.shaders30.glsl_constructors.vec3_from_mat3x2_mat3x2_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.vec3_from_mat3x2_mat3x2_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.vec3_from_mat3x4_vs
+KHR-GL45.shaders30.glsl_constructors.vec3_from_mat3x4_fs
+KHR-GL45.shaders30.glsl_constructors.vec3_from_mat3x4_mat3x4_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.vec3_from_mat3x4_mat3x4_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.vec3_from_mat4_vs
+KHR-GL45.shaders30.glsl_constructors.vec3_from_mat4_fs
+KHR-GL45.shaders30.glsl_constructors.vec3_from_mat4_mat4_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.vec3_from_mat4_mat4_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.vec3_from_mat4x2_vs
+KHR-GL45.shaders30.glsl_constructors.vec3_from_mat4x2_fs
+KHR-GL45.shaders30.glsl_constructors.vec3_from_mat4x2_mat4x2_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.vec3_from_mat4x2_mat4x2_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.vec3_from_mat4x3_vs
+KHR-GL45.shaders30.glsl_constructors.vec3_from_mat4x3_fs
+KHR-GL45.shaders30.glsl_constructors.vec3_from_mat4x3_mat4x3_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.vec3_from_mat4x3_mat4x3_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.vec3_from_float_mat2_vs
+KHR-GL45.shaders30.glsl_constructors.vec3_from_float_mat2_fs
+KHR-GL45.shaders30.glsl_constructors.vec3_from_float_mat2_float_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.vec3_from_float_mat2_float_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.vec3_from_float_mat2x3_vs
+KHR-GL45.shaders30.glsl_constructors.vec3_from_float_mat2x3_fs
+KHR-GL45.shaders30.glsl_constructors.vec3_from_float_mat2x3_float_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.vec3_from_float_mat2x3_float_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.vec3_from_float_mat2x4_vs
+KHR-GL45.shaders30.glsl_constructors.vec3_from_float_mat2x4_fs
+KHR-GL45.shaders30.glsl_constructors.vec3_from_float_mat2x4_float_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.vec3_from_float_mat2x4_float_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.vec3_from_float_mat3_vs
+KHR-GL45.shaders30.glsl_constructors.vec3_from_float_mat3_fs
+KHR-GL45.shaders30.glsl_constructors.vec3_from_float_mat3_float_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.vec3_from_float_mat3_float_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.vec3_from_float_mat3x2_vs
+KHR-GL45.shaders30.glsl_constructors.vec3_from_float_mat3x2_fs
+KHR-GL45.shaders30.glsl_constructors.vec3_from_float_mat3x2_float_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.vec3_from_float_mat3x2_float_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.vec3_from_float_mat3x4_vs
+KHR-GL45.shaders30.glsl_constructors.vec3_from_float_mat3x4_fs
+KHR-GL45.shaders30.glsl_constructors.vec3_from_float_mat3x4_float_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.vec3_from_float_mat3x4_float_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.vec3_from_float_mat4_vs
+KHR-GL45.shaders30.glsl_constructors.vec3_from_float_mat4_fs
+KHR-GL45.shaders30.glsl_constructors.vec3_from_float_mat4_float_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.vec3_from_float_mat4_float_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.vec3_from_float_mat4x2_vs
+KHR-GL45.shaders30.glsl_constructors.vec3_from_float_mat4x2_fs
+KHR-GL45.shaders30.glsl_constructors.vec3_from_float_mat4x2_float_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.vec3_from_float_mat4x2_float_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.vec3_from_float_mat4x3_vs
+KHR-GL45.shaders30.glsl_constructors.vec3_from_float_mat4x3_fs
+KHR-GL45.shaders30.glsl_constructors.vec3_from_float_mat4x3_float_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.vec3_from_float_mat4x3_float_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.vec4_from_mat2_vs
+KHR-GL45.shaders30.glsl_constructors.vec4_from_mat2_fs
+KHR-GL45.shaders30.glsl_constructors.vec4_from_mat2_mat2_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.vec4_from_mat2_mat2_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.vec4_from_mat2x3_vs
+KHR-GL45.shaders30.glsl_constructors.vec4_from_mat2x3_fs
+KHR-GL45.shaders30.glsl_constructors.vec4_from_mat2x3_mat2x3_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.vec4_from_mat2x3_mat2x3_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.vec4_from_mat2x4_vs
+KHR-GL45.shaders30.glsl_constructors.vec4_from_mat2x4_fs
+KHR-GL45.shaders30.glsl_constructors.vec4_from_mat2x4_mat2x4_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.vec4_from_mat2x4_mat2x4_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.vec4_from_mat3_vs
+KHR-GL45.shaders30.glsl_constructors.vec4_from_mat3_fs
+KHR-GL45.shaders30.glsl_constructors.vec4_from_mat3_mat3_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.vec4_from_mat3_mat3_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.vec4_from_mat3x2_vs
+KHR-GL45.shaders30.glsl_constructors.vec4_from_mat3x2_fs
+KHR-GL45.shaders30.glsl_constructors.vec4_from_mat3x2_mat3x2_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.vec4_from_mat3x2_mat3x2_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.vec4_from_mat3x4_vs
+KHR-GL45.shaders30.glsl_constructors.vec4_from_mat3x4_fs
+KHR-GL45.shaders30.glsl_constructors.vec4_from_mat3x4_mat3x4_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.vec4_from_mat3x4_mat3x4_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.vec4_from_mat4_vs
+KHR-GL45.shaders30.glsl_constructors.vec4_from_mat4_fs
+KHR-GL45.shaders30.glsl_constructors.vec4_from_mat4_mat4_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.vec4_from_mat4_mat4_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.vec4_from_mat4x2_vs
+KHR-GL45.shaders30.glsl_constructors.vec4_from_mat4x2_fs
+KHR-GL45.shaders30.glsl_constructors.vec4_from_mat4x2_mat4x2_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.vec4_from_mat4x2_mat4x2_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.vec4_from_mat4x3_vs
+KHR-GL45.shaders30.glsl_constructors.vec4_from_mat4x3_fs
+KHR-GL45.shaders30.glsl_constructors.vec4_from_mat4x3_mat4x3_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.vec4_from_mat4x3_mat4x3_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.vec4_from_float_mat2_vs
+KHR-GL45.shaders30.glsl_constructors.vec4_from_float_mat2_fs
+KHR-GL45.shaders30.glsl_constructors.vec4_from_float_mat2_float_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.vec4_from_float_mat2_float_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.vec4_from_float_mat2x3_vs
+KHR-GL45.shaders30.glsl_constructors.vec4_from_float_mat2x3_fs
+KHR-GL45.shaders30.glsl_constructors.vec4_from_float_mat2x3_float_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.vec4_from_float_mat2x3_float_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.vec4_from_float_mat2x4_vs
+KHR-GL45.shaders30.glsl_constructors.vec4_from_float_mat2x4_fs
+KHR-GL45.shaders30.glsl_constructors.vec4_from_float_mat2x4_float_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.vec4_from_float_mat2x4_float_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.vec4_from_float_mat3_vs
+KHR-GL45.shaders30.glsl_constructors.vec4_from_float_mat3_fs
+KHR-GL45.shaders30.glsl_constructors.vec4_from_float_mat3_float_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.vec4_from_float_mat3_float_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.vec4_from_float_mat3x2_vs
+KHR-GL45.shaders30.glsl_constructors.vec4_from_float_mat3x2_fs
+KHR-GL45.shaders30.glsl_constructors.vec4_from_float_mat3x2_float_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.vec4_from_float_mat3x2_float_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.vec4_from_float_mat3x4_vs
+KHR-GL45.shaders30.glsl_constructors.vec4_from_float_mat3x4_fs
+KHR-GL45.shaders30.glsl_constructors.vec4_from_float_mat3x4_float_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.vec4_from_float_mat3x4_float_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.vec4_from_float_mat4_vs
+KHR-GL45.shaders30.glsl_constructors.vec4_from_float_mat4_fs
+KHR-GL45.shaders30.glsl_constructors.vec4_from_float_mat4_float_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.vec4_from_float_mat4_float_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.vec4_from_float_mat4x2_vs
+KHR-GL45.shaders30.glsl_constructors.vec4_from_float_mat4x2_fs
+KHR-GL45.shaders30.glsl_constructors.vec4_from_float_mat4x2_float_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.vec4_from_float_mat4x2_float_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.vec4_from_float_mat4x3_vs
+KHR-GL45.shaders30.glsl_constructors.vec4_from_float_mat4x3_fs
+KHR-GL45.shaders30.glsl_constructors.vec4_from_float_mat4x3_float_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.vec4_from_float_mat4x3_float_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.ivec2_from_mat2_vs
+KHR-GL45.shaders30.glsl_constructors.ivec2_from_mat2_fs
+KHR-GL45.shaders30.glsl_constructors.ivec2_from_mat2_mat2_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.ivec2_from_mat2_mat2_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.ivec2_from_mat2x3_vs
+KHR-GL45.shaders30.glsl_constructors.ivec2_from_mat2x3_fs
+KHR-GL45.shaders30.glsl_constructors.ivec2_from_mat2x3_mat2x3_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.ivec2_from_mat2x3_mat2x3_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.ivec2_from_mat2x4_vs
+KHR-GL45.shaders30.glsl_constructors.ivec2_from_mat2x4_fs
+KHR-GL45.shaders30.glsl_constructors.ivec2_from_mat2x4_mat2x4_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.ivec2_from_mat2x4_mat2x4_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.ivec2_from_mat3_vs
+KHR-GL45.shaders30.glsl_constructors.ivec2_from_mat3_fs
+KHR-GL45.shaders30.glsl_constructors.ivec2_from_mat3_mat3_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.ivec2_from_mat3_mat3_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.ivec2_from_mat3x2_vs
+KHR-GL45.shaders30.glsl_constructors.ivec2_from_mat3x2_fs
+KHR-GL45.shaders30.glsl_constructors.ivec2_from_mat3x2_mat3x2_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.ivec2_from_mat3x2_mat3x2_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.ivec2_from_mat3x4_vs
+KHR-GL45.shaders30.glsl_constructors.ivec2_from_mat3x4_fs
+KHR-GL45.shaders30.glsl_constructors.ivec2_from_mat3x4_mat3x4_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.ivec2_from_mat3x4_mat3x4_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.ivec2_from_mat4_vs
+KHR-GL45.shaders30.glsl_constructors.ivec2_from_mat4_fs
+KHR-GL45.shaders30.glsl_constructors.ivec2_from_mat4_mat4_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.ivec2_from_mat4_mat4_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.ivec2_from_mat4x2_vs
+KHR-GL45.shaders30.glsl_constructors.ivec2_from_mat4x2_fs
+KHR-GL45.shaders30.glsl_constructors.ivec2_from_mat4x2_mat4x2_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.ivec2_from_mat4x2_mat4x2_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.ivec2_from_mat4x3_vs
+KHR-GL45.shaders30.glsl_constructors.ivec2_from_mat4x3_fs
+KHR-GL45.shaders30.glsl_constructors.ivec2_from_mat4x3_mat4x3_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.ivec2_from_mat4x3_mat4x3_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.ivec2_from_int_mat2_vs
+KHR-GL45.shaders30.glsl_constructors.ivec2_from_int_mat2_fs
+KHR-GL45.shaders30.glsl_constructors.ivec2_from_int_mat2_int_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.ivec2_from_int_mat2_int_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.ivec2_from_int_mat2x3_vs
+KHR-GL45.shaders30.glsl_constructors.ivec2_from_int_mat2x3_fs
+KHR-GL45.shaders30.glsl_constructors.ivec2_from_int_mat2x3_int_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.ivec2_from_int_mat2x3_int_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.ivec2_from_int_mat2x4_vs
+KHR-GL45.shaders30.glsl_constructors.ivec2_from_int_mat2x4_fs
+KHR-GL45.shaders30.glsl_constructors.ivec2_from_int_mat2x4_int_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.ivec2_from_int_mat2x4_int_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.ivec2_from_int_mat3_vs
+KHR-GL45.shaders30.glsl_constructors.ivec2_from_int_mat3_fs
+KHR-GL45.shaders30.glsl_constructors.ivec2_from_int_mat3_int_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.ivec2_from_int_mat3_int_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.ivec2_from_int_mat3x2_vs
+KHR-GL45.shaders30.glsl_constructors.ivec2_from_int_mat3x2_fs
+KHR-GL45.shaders30.glsl_constructors.ivec2_from_int_mat3x2_int_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.ivec2_from_int_mat3x2_int_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.ivec2_from_int_mat3x4_vs
+KHR-GL45.shaders30.glsl_constructors.ivec2_from_int_mat3x4_fs
+KHR-GL45.shaders30.glsl_constructors.ivec2_from_int_mat3x4_int_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.ivec2_from_int_mat3x4_int_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.ivec2_from_int_mat4_vs
+KHR-GL45.shaders30.glsl_constructors.ivec2_from_int_mat4_fs
+KHR-GL45.shaders30.glsl_constructors.ivec2_from_int_mat4_int_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.ivec2_from_int_mat4_int_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.ivec2_from_int_mat4x2_vs
+KHR-GL45.shaders30.glsl_constructors.ivec2_from_int_mat4x2_fs
+KHR-GL45.shaders30.glsl_constructors.ivec2_from_int_mat4x2_int_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.ivec2_from_int_mat4x2_int_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.ivec2_from_int_mat4x3_vs
+KHR-GL45.shaders30.glsl_constructors.ivec2_from_int_mat4x3_fs
+KHR-GL45.shaders30.glsl_constructors.ivec2_from_int_mat4x3_int_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.ivec2_from_int_mat4x3_int_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.ivec3_from_mat2_vs
+KHR-GL45.shaders30.glsl_constructors.ivec3_from_mat2_fs
+KHR-GL45.shaders30.glsl_constructors.ivec3_from_mat2_mat2_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.ivec3_from_mat2_mat2_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.ivec3_from_mat2x3_vs
+KHR-GL45.shaders30.glsl_constructors.ivec3_from_mat2x3_fs
+KHR-GL45.shaders30.glsl_constructors.ivec3_from_mat2x3_mat2x3_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.ivec3_from_mat2x3_mat2x3_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.ivec3_from_mat2x4_vs
+KHR-GL45.shaders30.glsl_constructors.ivec3_from_mat2x4_fs
+KHR-GL45.shaders30.glsl_constructors.ivec3_from_mat2x4_mat2x4_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.ivec3_from_mat2x4_mat2x4_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.ivec3_from_mat3_vs
+KHR-GL45.shaders30.glsl_constructors.ivec3_from_mat3_fs
+KHR-GL45.shaders30.glsl_constructors.ivec3_from_mat3_mat3_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.ivec3_from_mat3_mat3_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.ivec3_from_mat3x2_vs
+KHR-GL45.shaders30.glsl_constructors.ivec3_from_mat3x2_fs
+KHR-GL45.shaders30.glsl_constructors.ivec3_from_mat3x2_mat3x2_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.ivec3_from_mat3x2_mat3x2_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.ivec3_from_mat3x4_vs
+KHR-GL45.shaders30.glsl_constructors.ivec3_from_mat3x4_fs
+KHR-GL45.shaders30.glsl_constructors.ivec3_from_mat3x4_mat3x4_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.ivec3_from_mat3x4_mat3x4_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.ivec3_from_mat4_vs
+KHR-GL45.shaders30.glsl_constructors.ivec3_from_mat4_fs
+KHR-GL45.shaders30.glsl_constructors.ivec3_from_mat4_mat4_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.ivec3_from_mat4_mat4_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.ivec3_from_mat4x2_vs
+KHR-GL45.shaders30.glsl_constructors.ivec3_from_mat4x2_fs
+KHR-GL45.shaders30.glsl_constructors.ivec3_from_mat4x2_mat4x2_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.ivec3_from_mat4x2_mat4x2_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.ivec3_from_mat4x3_vs
+KHR-GL45.shaders30.glsl_constructors.ivec3_from_mat4x3_fs
+KHR-GL45.shaders30.glsl_constructors.ivec3_from_mat4x3_mat4x3_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.ivec3_from_mat4x3_mat4x3_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.ivec3_from_int_mat2_vs
+KHR-GL45.shaders30.glsl_constructors.ivec3_from_int_mat2_fs
+KHR-GL45.shaders30.glsl_constructors.ivec3_from_int_mat2_int_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.ivec3_from_int_mat2_int_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.ivec3_from_int_mat2x3_vs
+KHR-GL45.shaders30.glsl_constructors.ivec3_from_int_mat2x3_fs
+KHR-GL45.shaders30.glsl_constructors.ivec3_from_int_mat2x3_int_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.ivec3_from_int_mat2x3_int_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.ivec3_from_int_mat2x4_vs
+KHR-GL45.shaders30.glsl_constructors.ivec3_from_int_mat2x4_fs
+KHR-GL45.shaders30.glsl_constructors.ivec3_from_int_mat2x4_int_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.ivec3_from_int_mat2x4_int_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.ivec3_from_int_mat3_vs
+KHR-GL45.shaders30.glsl_constructors.ivec3_from_int_mat3_fs
+KHR-GL45.shaders30.glsl_constructors.ivec3_from_int_mat3_int_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.ivec3_from_int_mat3_int_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.ivec3_from_int_mat3x2_vs
+KHR-GL45.shaders30.glsl_constructors.ivec3_from_int_mat3x2_fs
+KHR-GL45.shaders30.glsl_constructors.ivec3_from_int_mat3x2_int_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.ivec3_from_int_mat3x2_int_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.ivec3_from_int_mat3x4_vs
+KHR-GL45.shaders30.glsl_constructors.ivec3_from_int_mat3x4_fs
+KHR-GL45.shaders30.glsl_constructors.ivec3_from_int_mat3x4_int_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.ivec3_from_int_mat3x4_int_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.ivec3_from_int_mat4_vs
+KHR-GL45.shaders30.glsl_constructors.ivec3_from_int_mat4_fs
+KHR-GL45.shaders30.glsl_constructors.ivec3_from_int_mat4_int_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.ivec3_from_int_mat4_int_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.ivec3_from_int_mat4x2_vs
+KHR-GL45.shaders30.glsl_constructors.ivec3_from_int_mat4x2_fs
+KHR-GL45.shaders30.glsl_constructors.ivec3_from_int_mat4x2_int_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.ivec3_from_int_mat4x2_int_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.ivec3_from_int_mat4x3_vs
+KHR-GL45.shaders30.glsl_constructors.ivec3_from_int_mat4x3_fs
+KHR-GL45.shaders30.glsl_constructors.ivec3_from_int_mat4x3_int_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.ivec3_from_int_mat4x3_int_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.ivec4_from_mat2_vs
+KHR-GL45.shaders30.glsl_constructors.ivec4_from_mat2_fs
+KHR-GL45.shaders30.glsl_constructors.ivec4_from_mat2_mat2_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.ivec4_from_mat2_mat2_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.ivec4_from_mat2x3_vs
+KHR-GL45.shaders30.glsl_constructors.ivec4_from_mat2x3_fs
+KHR-GL45.shaders30.glsl_constructors.ivec4_from_mat2x3_mat2x3_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.ivec4_from_mat2x3_mat2x3_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.ivec4_from_mat2x4_vs
+KHR-GL45.shaders30.glsl_constructors.ivec4_from_mat2x4_fs
+KHR-GL45.shaders30.glsl_constructors.ivec4_from_mat2x4_mat2x4_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.ivec4_from_mat2x4_mat2x4_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.ivec4_from_mat3_vs
+KHR-GL45.shaders30.glsl_constructors.ivec4_from_mat3_fs
+KHR-GL45.shaders30.glsl_constructors.ivec4_from_mat3_mat3_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.ivec4_from_mat3_mat3_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.ivec4_from_mat3x2_vs
+KHR-GL45.shaders30.glsl_constructors.ivec4_from_mat3x2_fs
+KHR-GL45.shaders30.glsl_constructors.ivec4_from_mat3x2_mat3x2_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.ivec4_from_mat3x2_mat3x2_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.ivec4_from_mat3x4_vs
+KHR-GL45.shaders30.glsl_constructors.ivec4_from_mat3x4_fs
+KHR-GL45.shaders30.glsl_constructors.ivec4_from_mat3x4_mat3x4_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.ivec4_from_mat3x4_mat3x4_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.ivec4_from_mat4_vs
+KHR-GL45.shaders30.glsl_constructors.ivec4_from_mat4_fs
+KHR-GL45.shaders30.glsl_constructors.ivec4_from_mat4_mat4_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.ivec4_from_mat4_mat4_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.ivec4_from_mat4x2_vs
+KHR-GL45.shaders30.glsl_constructors.ivec4_from_mat4x2_fs
+KHR-GL45.shaders30.glsl_constructors.ivec4_from_mat4x2_mat4x2_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.ivec4_from_mat4x2_mat4x2_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.ivec4_from_mat4x3_vs
+KHR-GL45.shaders30.glsl_constructors.ivec4_from_mat4x3_fs
+KHR-GL45.shaders30.glsl_constructors.ivec4_from_mat4x3_mat4x3_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.ivec4_from_mat4x3_mat4x3_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.ivec4_from_int_mat2_vs
+KHR-GL45.shaders30.glsl_constructors.ivec4_from_int_mat2_fs
+KHR-GL45.shaders30.glsl_constructors.ivec4_from_int_mat2_int_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.ivec4_from_int_mat2_int_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.ivec4_from_int_mat2x3_vs
+KHR-GL45.shaders30.glsl_constructors.ivec4_from_int_mat2x3_fs
+KHR-GL45.shaders30.glsl_constructors.ivec4_from_int_mat2x3_int_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.ivec4_from_int_mat2x3_int_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.ivec4_from_int_mat2x4_vs
+KHR-GL45.shaders30.glsl_constructors.ivec4_from_int_mat2x4_fs
+KHR-GL45.shaders30.glsl_constructors.ivec4_from_int_mat2x4_int_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.ivec4_from_int_mat2x4_int_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.ivec4_from_int_mat3_vs
+KHR-GL45.shaders30.glsl_constructors.ivec4_from_int_mat3_fs
+KHR-GL45.shaders30.glsl_constructors.ivec4_from_int_mat3_int_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.ivec4_from_int_mat3_int_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.ivec4_from_int_mat3x2_vs
+KHR-GL45.shaders30.glsl_constructors.ivec4_from_int_mat3x2_fs
+KHR-GL45.shaders30.glsl_constructors.ivec4_from_int_mat3x2_int_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.ivec4_from_int_mat3x2_int_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.ivec4_from_int_mat3x4_vs
+KHR-GL45.shaders30.glsl_constructors.ivec4_from_int_mat3x4_fs
+KHR-GL45.shaders30.glsl_constructors.ivec4_from_int_mat3x4_int_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.ivec4_from_int_mat3x4_int_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.ivec4_from_int_mat4_vs
+KHR-GL45.shaders30.glsl_constructors.ivec4_from_int_mat4_fs
+KHR-GL45.shaders30.glsl_constructors.ivec4_from_int_mat4_int_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.ivec4_from_int_mat4_int_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.ivec4_from_int_mat4x2_vs
+KHR-GL45.shaders30.glsl_constructors.ivec4_from_int_mat4x2_fs
+KHR-GL45.shaders30.glsl_constructors.ivec4_from_int_mat4x2_int_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.ivec4_from_int_mat4x2_int_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.ivec4_from_int_mat4x3_vs
+KHR-GL45.shaders30.glsl_constructors.ivec4_from_int_mat4x3_fs
+KHR-GL45.shaders30.glsl_constructors.ivec4_from_int_mat4x3_int_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.ivec4_from_int_mat4x3_int_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.bvec2_from_mat2_vs
+KHR-GL45.shaders30.glsl_constructors.bvec2_from_mat2_fs
+KHR-GL45.shaders30.glsl_constructors.bvec2_from_mat2_mat2_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.bvec2_from_mat2_mat2_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.bvec2_from_mat2x3_vs
+KHR-GL45.shaders30.glsl_constructors.bvec2_from_mat2x3_fs
+KHR-GL45.shaders30.glsl_constructors.bvec2_from_mat2x3_mat2x3_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.bvec2_from_mat2x3_mat2x3_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.bvec2_from_mat2x4_vs
+KHR-GL45.shaders30.glsl_constructors.bvec2_from_mat2x4_fs
+KHR-GL45.shaders30.glsl_constructors.bvec2_from_mat2x4_mat2x4_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.bvec2_from_mat2x4_mat2x4_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.bvec2_from_mat3_vs
+KHR-GL45.shaders30.glsl_constructors.bvec2_from_mat3_fs
+KHR-GL45.shaders30.glsl_constructors.bvec2_from_mat3_mat3_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.bvec2_from_mat3_mat3_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.bvec2_from_mat3x2_vs
+KHR-GL45.shaders30.glsl_constructors.bvec2_from_mat3x2_fs
+KHR-GL45.shaders30.glsl_constructors.bvec2_from_mat3x2_mat3x2_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.bvec2_from_mat3x2_mat3x2_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.bvec2_from_mat3x4_vs
+KHR-GL45.shaders30.glsl_constructors.bvec2_from_mat3x4_fs
+KHR-GL45.shaders30.glsl_constructors.bvec2_from_mat3x4_mat3x4_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.bvec2_from_mat3x4_mat3x4_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.bvec2_from_mat4_vs
+KHR-GL45.shaders30.glsl_constructors.bvec2_from_mat4_fs
+KHR-GL45.shaders30.glsl_constructors.bvec2_from_mat4_mat4_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.bvec2_from_mat4_mat4_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.bvec2_from_mat4x2_vs
+KHR-GL45.shaders30.glsl_constructors.bvec2_from_mat4x2_fs
+KHR-GL45.shaders30.glsl_constructors.bvec2_from_mat4x2_mat4x2_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.bvec2_from_mat4x2_mat4x2_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.bvec2_from_mat4x3_vs
+KHR-GL45.shaders30.glsl_constructors.bvec2_from_mat4x3_fs
+KHR-GL45.shaders30.glsl_constructors.bvec2_from_mat4x3_mat4x3_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.bvec2_from_mat4x3_mat4x3_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.bvec2_from_bool_mat2_vs
+KHR-GL45.shaders30.glsl_constructors.bvec2_from_bool_mat2_fs
+KHR-GL45.shaders30.glsl_constructors.bvec2_from_bool_mat2_bool_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.bvec2_from_bool_mat2_bool_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.bvec2_from_bool_mat2x3_vs
+KHR-GL45.shaders30.glsl_constructors.bvec2_from_bool_mat2x3_fs
+KHR-GL45.shaders30.glsl_constructors.bvec2_from_bool_mat2x3_bool_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.bvec2_from_bool_mat2x3_bool_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.bvec2_from_bool_mat2x4_vs
+KHR-GL45.shaders30.glsl_constructors.bvec2_from_bool_mat2x4_fs
+KHR-GL45.shaders30.glsl_constructors.bvec2_from_bool_mat2x4_bool_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.bvec2_from_bool_mat2x4_bool_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.bvec2_from_bool_mat3_vs
+KHR-GL45.shaders30.glsl_constructors.bvec2_from_bool_mat3_fs
+KHR-GL45.shaders30.glsl_constructors.bvec2_from_bool_mat3_bool_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.bvec2_from_bool_mat3_bool_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.bvec2_from_bool_mat3x2_vs
+KHR-GL45.shaders30.glsl_constructors.bvec2_from_bool_mat3x2_fs
+KHR-GL45.shaders30.glsl_constructors.bvec2_from_bool_mat3x2_bool_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.bvec2_from_bool_mat3x2_bool_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.bvec2_from_bool_mat3x4_vs
+KHR-GL45.shaders30.glsl_constructors.bvec2_from_bool_mat3x4_fs
+KHR-GL45.shaders30.glsl_constructors.bvec2_from_bool_mat3x4_bool_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.bvec2_from_bool_mat3x4_bool_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.bvec2_from_bool_mat4_vs
+KHR-GL45.shaders30.glsl_constructors.bvec2_from_bool_mat4_fs
+KHR-GL45.shaders30.glsl_constructors.bvec2_from_bool_mat4_bool_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.bvec2_from_bool_mat4_bool_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.bvec2_from_bool_mat4x2_vs
+KHR-GL45.shaders30.glsl_constructors.bvec2_from_bool_mat4x2_fs
+KHR-GL45.shaders30.glsl_constructors.bvec2_from_bool_mat4x2_bool_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.bvec2_from_bool_mat4x2_bool_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.bvec2_from_bool_mat4x3_vs
+KHR-GL45.shaders30.glsl_constructors.bvec2_from_bool_mat4x3_fs
+KHR-GL45.shaders30.glsl_constructors.bvec2_from_bool_mat4x3_bool_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.bvec2_from_bool_mat4x3_bool_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.bvec3_from_mat2_vs
+KHR-GL45.shaders30.glsl_constructors.bvec3_from_mat2_fs
+KHR-GL45.shaders30.glsl_constructors.bvec3_from_mat2_mat2_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.bvec3_from_mat2_mat2_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.bvec3_from_mat2x3_vs
+KHR-GL45.shaders30.glsl_constructors.bvec3_from_mat2x3_fs
+KHR-GL45.shaders30.glsl_constructors.bvec3_from_mat2x3_mat2x3_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.bvec3_from_mat2x3_mat2x3_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.bvec3_from_mat2x4_vs
+KHR-GL45.shaders30.glsl_constructors.bvec3_from_mat2x4_fs
+KHR-GL45.shaders30.glsl_constructors.bvec3_from_mat2x4_mat2x4_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.bvec3_from_mat2x4_mat2x4_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.bvec3_from_mat3_vs
+KHR-GL45.shaders30.glsl_constructors.bvec3_from_mat3_fs
+KHR-GL45.shaders30.glsl_constructors.bvec3_from_mat3_mat3_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.bvec3_from_mat3_mat3_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.bvec3_from_mat3x2_vs
+KHR-GL45.shaders30.glsl_constructors.bvec3_from_mat3x2_fs
+KHR-GL45.shaders30.glsl_constructors.bvec3_from_mat3x2_mat3x2_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.bvec3_from_mat3x2_mat3x2_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.bvec3_from_mat3x4_vs
+KHR-GL45.shaders30.glsl_constructors.bvec3_from_mat3x4_fs
+KHR-GL45.shaders30.glsl_constructors.bvec3_from_mat3x4_mat3x4_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.bvec3_from_mat3x4_mat3x4_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.bvec3_from_mat4_vs
+KHR-GL45.shaders30.glsl_constructors.bvec3_from_mat4_fs
+KHR-GL45.shaders30.glsl_constructors.bvec3_from_mat4_mat4_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.bvec3_from_mat4_mat4_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.bvec3_from_mat4x2_vs
+KHR-GL45.shaders30.glsl_constructors.bvec3_from_mat4x2_fs
+KHR-GL45.shaders30.glsl_constructors.bvec3_from_mat4x2_mat4x2_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.bvec3_from_mat4x2_mat4x2_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.bvec3_from_mat4x3_vs
+KHR-GL45.shaders30.glsl_constructors.bvec3_from_mat4x3_fs
+KHR-GL45.shaders30.glsl_constructors.bvec3_from_mat4x3_mat4x3_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.bvec3_from_mat4x3_mat4x3_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.bvec3_from_bool_mat2_vs
+KHR-GL45.shaders30.glsl_constructors.bvec3_from_bool_mat2_fs
+KHR-GL45.shaders30.glsl_constructors.bvec3_from_bool_mat2_bool_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.bvec3_from_bool_mat2_bool_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.bvec3_from_bool_mat2x3_vs
+KHR-GL45.shaders30.glsl_constructors.bvec3_from_bool_mat2x3_fs
+KHR-GL45.shaders30.glsl_constructors.bvec3_from_bool_mat2x3_bool_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.bvec3_from_bool_mat2x3_bool_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.bvec3_from_bool_mat2x4_vs
+KHR-GL45.shaders30.glsl_constructors.bvec3_from_bool_mat2x4_fs
+KHR-GL45.shaders30.glsl_constructors.bvec3_from_bool_mat2x4_bool_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.bvec3_from_bool_mat2x4_bool_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.bvec3_from_bool_mat3_vs
+KHR-GL45.shaders30.glsl_constructors.bvec3_from_bool_mat3_fs
+KHR-GL45.shaders30.glsl_constructors.bvec3_from_bool_mat3_bool_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.bvec3_from_bool_mat3_bool_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.bvec3_from_bool_mat3x2_vs
+KHR-GL45.shaders30.glsl_constructors.bvec3_from_bool_mat3x2_fs
+KHR-GL45.shaders30.glsl_constructors.bvec3_from_bool_mat3x2_bool_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.bvec3_from_bool_mat3x2_bool_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.bvec3_from_bool_mat3x4_vs
+KHR-GL45.shaders30.glsl_constructors.bvec3_from_bool_mat3x4_fs
+KHR-GL45.shaders30.glsl_constructors.bvec3_from_bool_mat3x4_bool_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.bvec3_from_bool_mat3x4_bool_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.bvec3_from_bool_mat4_vs
+KHR-GL45.shaders30.glsl_constructors.bvec3_from_bool_mat4_fs
+KHR-GL45.shaders30.glsl_constructors.bvec3_from_bool_mat4_bool_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.bvec3_from_bool_mat4_bool_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.bvec3_from_bool_mat4x2_vs
+KHR-GL45.shaders30.glsl_constructors.bvec3_from_bool_mat4x2_fs
+KHR-GL45.shaders30.glsl_constructors.bvec3_from_bool_mat4x2_bool_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.bvec3_from_bool_mat4x2_bool_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.bvec3_from_bool_mat4x3_vs
+KHR-GL45.shaders30.glsl_constructors.bvec3_from_bool_mat4x3_fs
+KHR-GL45.shaders30.glsl_constructors.bvec3_from_bool_mat4x3_bool_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.bvec3_from_bool_mat4x3_bool_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.bvec4_from_mat2_vs
+KHR-GL45.shaders30.glsl_constructors.bvec4_from_mat2_fs
+KHR-GL45.shaders30.glsl_constructors.bvec4_from_mat2_mat2_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.bvec4_from_mat2_mat2_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.bvec4_from_mat2x3_vs
+KHR-GL45.shaders30.glsl_constructors.bvec4_from_mat2x3_fs
+KHR-GL45.shaders30.glsl_constructors.bvec4_from_mat2x3_mat2x3_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.bvec4_from_mat2x3_mat2x3_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.bvec4_from_mat2x4_vs
+KHR-GL45.shaders30.glsl_constructors.bvec4_from_mat2x4_fs
+KHR-GL45.shaders30.glsl_constructors.bvec4_from_mat2x4_mat2x4_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.bvec4_from_mat2x4_mat2x4_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.bvec4_from_mat3_vs
+KHR-GL45.shaders30.glsl_constructors.bvec4_from_mat3_fs
+KHR-GL45.shaders30.glsl_constructors.bvec4_from_mat3_mat3_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.bvec4_from_mat3_mat3_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.bvec4_from_mat3x2_vs
+KHR-GL45.shaders30.glsl_constructors.bvec4_from_mat3x2_fs
+KHR-GL45.shaders30.glsl_constructors.bvec4_from_mat3x2_mat3x2_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.bvec4_from_mat3x2_mat3x2_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.bvec4_from_mat3x4_vs
+KHR-GL45.shaders30.glsl_constructors.bvec4_from_mat3x4_fs
+KHR-GL45.shaders30.glsl_constructors.bvec4_from_mat3x4_mat3x4_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.bvec4_from_mat3x4_mat3x4_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.bvec4_from_mat4_vs
+KHR-GL45.shaders30.glsl_constructors.bvec4_from_mat4_fs
+KHR-GL45.shaders30.glsl_constructors.bvec4_from_mat4_mat4_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.bvec4_from_mat4_mat4_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.bvec4_from_mat4x2_vs
+KHR-GL45.shaders30.glsl_constructors.bvec4_from_mat4x2_fs
+KHR-GL45.shaders30.glsl_constructors.bvec4_from_mat4x2_mat4x2_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.bvec4_from_mat4x2_mat4x2_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.bvec4_from_mat4x3_vs
+KHR-GL45.shaders30.glsl_constructors.bvec4_from_mat4x3_fs
+KHR-GL45.shaders30.glsl_constructors.bvec4_from_mat4x3_mat4x3_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.bvec4_from_mat4x3_mat4x3_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.bvec4_from_bool_mat2_vs
+KHR-GL45.shaders30.glsl_constructors.bvec4_from_bool_mat2_fs
+KHR-GL45.shaders30.glsl_constructors.bvec4_from_bool_mat2_bool_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.bvec4_from_bool_mat2_bool_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.bvec4_from_bool_mat2x3_vs
+KHR-GL45.shaders30.glsl_constructors.bvec4_from_bool_mat2x3_fs
+KHR-GL45.shaders30.glsl_constructors.bvec4_from_bool_mat2x3_bool_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.bvec4_from_bool_mat2x3_bool_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.bvec4_from_bool_mat2x4_vs
+KHR-GL45.shaders30.glsl_constructors.bvec4_from_bool_mat2x4_fs
+KHR-GL45.shaders30.glsl_constructors.bvec4_from_bool_mat2x4_bool_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.bvec4_from_bool_mat2x4_bool_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.bvec4_from_bool_mat3_vs
+KHR-GL45.shaders30.glsl_constructors.bvec4_from_bool_mat3_fs
+KHR-GL45.shaders30.glsl_constructors.bvec4_from_bool_mat3_bool_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.bvec4_from_bool_mat3_bool_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.bvec4_from_bool_mat3x2_vs
+KHR-GL45.shaders30.glsl_constructors.bvec4_from_bool_mat3x2_fs
+KHR-GL45.shaders30.glsl_constructors.bvec4_from_bool_mat3x2_bool_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.bvec4_from_bool_mat3x2_bool_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.bvec4_from_bool_mat3x4_vs
+KHR-GL45.shaders30.glsl_constructors.bvec4_from_bool_mat3x4_fs
+KHR-GL45.shaders30.glsl_constructors.bvec4_from_bool_mat3x4_bool_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.bvec4_from_bool_mat3x4_bool_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.bvec4_from_bool_mat4_vs
+KHR-GL45.shaders30.glsl_constructors.bvec4_from_bool_mat4_fs
+KHR-GL45.shaders30.glsl_constructors.bvec4_from_bool_mat4_bool_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.bvec4_from_bool_mat4_bool_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.bvec4_from_bool_mat4x2_vs
+KHR-GL45.shaders30.glsl_constructors.bvec4_from_bool_mat4x2_fs
+KHR-GL45.shaders30.glsl_constructors.bvec4_from_bool_mat4x2_bool_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.bvec4_from_bool_mat4x2_bool_invalid_fs
+KHR-GL45.shaders30.glsl_constructors.bvec4_from_bool_mat4x3_vs
+KHR-GL45.shaders30.glsl_constructors.bvec4_from_bool_mat4x3_fs
+KHR-GL45.shaders30.glsl_constructors.bvec4_from_bool_mat4x3_bool_invalid_vs
+KHR-GL45.shaders30.glsl_constructors.bvec4_from_bool_mat4x3_bool_invalid_fs
 KHR-GL45.ext_texture_shadow_lod.texture.sampler2darrayshadow_fragment
 KHR-GL45.ext_texture_shadow_lod.texture.sampler2darrayshadow_bias_fragment
 KHR-GL45.ext_texture_shadow_lod.texture.samplercubearrayshadow_vertex
diff --git a/external/openglcts/data/mustpass/gl/khronos_mustpass/4.6.1.x/gl46-master.txt b/external/openglcts/data/mustpass/gl/khronos_mustpass/4.6.1.x/gl46-master.txt
index d543bb5..3cb57bd 100644
--- a/external/openglcts/data/mustpass/gl/khronos_mustpass/4.6.1.x/gl46-master.txt
+++ b/external/openglcts/data/mustpass/gl/khronos_mustpass/4.6.1.x/gl46-master.txt
@@ -192,6 +192,654 @@
 KHR-GL46.texture_repeat_mode.depth24_stencil8_11x131_2_mirrored_repeat
 KHR-GL46.shaders30.declarations.declarations.redeclare_gl_FragColor
 KHR-GL46.shaders30.declarations.declarations.redeclare_gl_FragData
+KHR-GL46.shaders30.glsl_constructors.vec2_from_mat2_vs
+KHR-GL46.shaders30.glsl_constructors.vec2_from_mat2_fs
+KHR-GL46.shaders30.glsl_constructors.vec2_from_mat2_mat2_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.vec2_from_mat2_mat2_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.vec2_from_mat2x3_vs
+KHR-GL46.shaders30.glsl_constructors.vec2_from_mat2x3_fs
+KHR-GL46.shaders30.glsl_constructors.vec2_from_mat2x3_mat2x3_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.vec2_from_mat2x3_mat2x3_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.vec2_from_mat2x4_vs
+KHR-GL46.shaders30.glsl_constructors.vec2_from_mat2x4_fs
+KHR-GL46.shaders30.glsl_constructors.vec2_from_mat2x4_mat2x4_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.vec2_from_mat2x4_mat2x4_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.vec2_from_mat3_vs
+KHR-GL46.shaders30.glsl_constructors.vec2_from_mat3_fs
+KHR-GL46.shaders30.glsl_constructors.vec2_from_mat3_mat3_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.vec2_from_mat3_mat3_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.vec2_from_mat3x2_vs
+KHR-GL46.shaders30.glsl_constructors.vec2_from_mat3x2_fs
+KHR-GL46.shaders30.glsl_constructors.vec2_from_mat3x2_mat3x2_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.vec2_from_mat3x2_mat3x2_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.vec2_from_mat3x4_vs
+KHR-GL46.shaders30.glsl_constructors.vec2_from_mat3x4_fs
+KHR-GL46.shaders30.glsl_constructors.vec2_from_mat3x4_mat3x4_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.vec2_from_mat3x4_mat3x4_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.vec2_from_mat4_vs
+KHR-GL46.shaders30.glsl_constructors.vec2_from_mat4_fs
+KHR-GL46.shaders30.glsl_constructors.vec2_from_mat4_mat4_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.vec2_from_mat4_mat4_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.vec2_from_mat4x2_vs
+KHR-GL46.shaders30.glsl_constructors.vec2_from_mat4x2_fs
+KHR-GL46.shaders30.glsl_constructors.vec2_from_mat4x2_mat4x2_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.vec2_from_mat4x2_mat4x2_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.vec2_from_mat4x3_vs
+KHR-GL46.shaders30.glsl_constructors.vec2_from_mat4x3_fs
+KHR-GL46.shaders30.glsl_constructors.vec2_from_mat4x3_mat4x3_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.vec2_from_mat4x3_mat4x3_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.vec2_from_float_mat2_vs
+KHR-GL46.shaders30.glsl_constructors.vec2_from_float_mat2_fs
+KHR-GL46.shaders30.glsl_constructors.vec2_from_float_mat2_float_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.vec2_from_float_mat2_float_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.vec2_from_float_mat2x3_vs
+KHR-GL46.shaders30.glsl_constructors.vec2_from_float_mat2x3_fs
+KHR-GL46.shaders30.glsl_constructors.vec2_from_float_mat2x3_float_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.vec2_from_float_mat2x3_float_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.vec2_from_float_mat2x4_vs
+KHR-GL46.shaders30.glsl_constructors.vec2_from_float_mat2x4_fs
+KHR-GL46.shaders30.glsl_constructors.vec2_from_float_mat2x4_float_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.vec2_from_float_mat2x4_float_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.vec2_from_float_mat3_vs
+KHR-GL46.shaders30.glsl_constructors.vec2_from_float_mat3_fs
+KHR-GL46.shaders30.glsl_constructors.vec2_from_float_mat3_float_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.vec2_from_float_mat3_float_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.vec2_from_float_mat3x2_vs
+KHR-GL46.shaders30.glsl_constructors.vec2_from_float_mat3x2_fs
+KHR-GL46.shaders30.glsl_constructors.vec2_from_float_mat3x2_float_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.vec2_from_float_mat3x2_float_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.vec2_from_float_mat3x4_vs
+KHR-GL46.shaders30.glsl_constructors.vec2_from_float_mat3x4_fs
+KHR-GL46.shaders30.glsl_constructors.vec2_from_float_mat3x4_float_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.vec2_from_float_mat3x4_float_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.vec2_from_float_mat4_vs
+KHR-GL46.shaders30.glsl_constructors.vec2_from_float_mat4_fs
+KHR-GL46.shaders30.glsl_constructors.vec2_from_float_mat4_float_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.vec2_from_float_mat4_float_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.vec2_from_float_mat4x2_vs
+KHR-GL46.shaders30.glsl_constructors.vec2_from_float_mat4x2_fs
+KHR-GL46.shaders30.glsl_constructors.vec2_from_float_mat4x2_float_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.vec2_from_float_mat4x2_float_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.vec2_from_float_mat4x3_vs
+KHR-GL46.shaders30.glsl_constructors.vec2_from_float_mat4x3_fs
+KHR-GL46.shaders30.glsl_constructors.vec2_from_float_mat4x3_float_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.vec2_from_float_mat4x3_float_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.vec3_from_mat2_vs
+KHR-GL46.shaders30.glsl_constructors.vec3_from_mat2_fs
+KHR-GL46.shaders30.glsl_constructors.vec3_from_mat2_mat2_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.vec3_from_mat2_mat2_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.vec3_from_mat2x3_vs
+KHR-GL46.shaders30.glsl_constructors.vec3_from_mat2x3_fs
+KHR-GL46.shaders30.glsl_constructors.vec3_from_mat2x3_mat2x3_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.vec3_from_mat2x3_mat2x3_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.vec3_from_mat2x4_vs
+KHR-GL46.shaders30.glsl_constructors.vec3_from_mat2x4_fs
+KHR-GL46.shaders30.glsl_constructors.vec3_from_mat2x4_mat2x4_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.vec3_from_mat2x4_mat2x4_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.vec3_from_mat3_vs
+KHR-GL46.shaders30.glsl_constructors.vec3_from_mat3_fs
+KHR-GL46.shaders30.glsl_constructors.vec3_from_mat3_mat3_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.vec3_from_mat3_mat3_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.vec3_from_mat3x2_vs
+KHR-GL46.shaders30.glsl_constructors.vec3_from_mat3x2_fs
+KHR-GL46.shaders30.glsl_constructors.vec3_from_mat3x2_mat3x2_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.vec3_from_mat3x2_mat3x2_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.vec3_from_mat3x4_vs
+KHR-GL46.shaders30.glsl_constructors.vec3_from_mat3x4_fs
+KHR-GL46.shaders30.glsl_constructors.vec3_from_mat3x4_mat3x4_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.vec3_from_mat3x4_mat3x4_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.vec3_from_mat4_vs
+KHR-GL46.shaders30.glsl_constructors.vec3_from_mat4_fs
+KHR-GL46.shaders30.glsl_constructors.vec3_from_mat4_mat4_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.vec3_from_mat4_mat4_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.vec3_from_mat4x2_vs
+KHR-GL46.shaders30.glsl_constructors.vec3_from_mat4x2_fs
+KHR-GL46.shaders30.glsl_constructors.vec3_from_mat4x2_mat4x2_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.vec3_from_mat4x2_mat4x2_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.vec3_from_mat4x3_vs
+KHR-GL46.shaders30.glsl_constructors.vec3_from_mat4x3_fs
+KHR-GL46.shaders30.glsl_constructors.vec3_from_mat4x3_mat4x3_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.vec3_from_mat4x3_mat4x3_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.vec3_from_float_mat2_vs
+KHR-GL46.shaders30.glsl_constructors.vec3_from_float_mat2_fs
+KHR-GL46.shaders30.glsl_constructors.vec3_from_float_mat2_float_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.vec3_from_float_mat2_float_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.vec3_from_float_mat2x3_vs
+KHR-GL46.shaders30.glsl_constructors.vec3_from_float_mat2x3_fs
+KHR-GL46.shaders30.glsl_constructors.vec3_from_float_mat2x3_float_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.vec3_from_float_mat2x3_float_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.vec3_from_float_mat2x4_vs
+KHR-GL46.shaders30.glsl_constructors.vec3_from_float_mat2x4_fs
+KHR-GL46.shaders30.glsl_constructors.vec3_from_float_mat2x4_float_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.vec3_from_float_mat2x4_float_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.vec3_from_float_mat3_vs
+KHR-GL46.shaders30.glsl_constructors.vec3_from_float_mat3_fs
+KHR-GL46.shaders30.glsl_constructors.vec3_from_float_mat3_float_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.vec3_from_float_mat3_float_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.vec3_from_float_mat3x2_vs
+KHR-GL46.shaders30.glsl_constructors.vec3_from_float_mat3x2_fs
+KHR-GL46.shaders30.glsl_constructors.vec3_from_float_mat3x2_float_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.vec3_from_float_mat3x2_float_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.vec3_from_float_mat3x4_vs
+KHR-GL46.shaders30.glsl_constructors.vec3_from_float_mat3x4_fs
+KHR-GL46.shaders30.glsl_constructors.vec3_from_float_mat3x4_float_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.vec3_from_float_mat3x4_float_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.vec3_from_float_mat4_vs
+KHR-GL46.shaders30.glsl_constructors.vec3_from_float_mat4_fs
+KHR-GL46.shaders30.glsl_constructors.vec3_from_float_mat4_float_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.vec3_from_float_mat4_float_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.vec3_from_float_mat4x2_vs
+KHR-GL46.shaders30.glsl_constructors.vec3_from_float_mat4x2_fs
+KHR-GL46.shaders30.glsl_constructors.vec3_from_float_mat4x2_float_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.vec3_from_float_mat4x2_float_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.vec3_from_float_mat4x3_vs
+KHR-GL46.shaders30.glsl_constructors.vec3_from_float_mat4x3_fs
+KHR-GL46.shaders30.glsl_constructors.vec3_from_float_mat4x3_float_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.vec3_from_float_mat4x3_float_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.vec4_from_mat2_vs
+KHR-GL46.shaders30.glsl_constructors.vec4_from_mat2_fs
+KHR-GL46.shaders30.glsl_constructors.vec4_from_mat2_mat2_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.vec4_from_mat2_mat2_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.vec4_from_mat2x3_vs
+KHR-GL46.shaders30.glsl_constructors.vec4_from_mat2x3_fs
+KHR-GL46.shaders30.glsl_constructors.vec4_from_mat2x3_mat2x3_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.vec4_from_mat2x3_mat2x3_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.vec4_from_mat2x4_vs
+KHR-GL46.shaders30.glsl_constructors.vec4_from_mat2x4_fs
+KHR-GL46.shaders30.glsl_constructors.vec4_from_mat2x4_mat2x4_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.vec4_from_mat2x4_mat2x4_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.vec4_from_mat3_vs
+KHR-GL46.shaders30.glsl_constructors.vec4_from_mat3_fs
+KHR-GL46.shaders30.glsl_constructors.vec4_from_mat3_mat3_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.vec4_from_mat3_mat3_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.vec4_from_mat3x2_vs
+KHR-GL46.shaders30.glsl_constructors.vec4_from_mat3x2_fs
+KHR-GL46.shaders30.glsl_constructors.vec4_from_mat3x2_mat3x2_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.vec4_from_mat3x2_mat3x2_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.vec4_from_mat3x4_vs
+KHR-GL46.shaders30.glsl_constructors.vec4_from_mat3x4_fs
+KHR-GL46.shaders30.glsl_constructors.vec4_from_mat3x4_mat3x4_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.vec4_from_mat3x4_mat3x4_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.vec4_from_mat4_vs
+KHR-GL46.shaders30.glsl_constructors.vec4_from_mat4_fs
+KHR-GL46.shaders30.glsl_constructors.vec4_from_mat4_mat4_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.vec4_from_mat4_mat4_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.vec4_from_mat4x2_vs
+KHR-GL46.shaders30.glsl_constructors.vec4_from_mat4x2_fs
+KHR-GL46.shaders30.glsl_constructors.vec4_from_mat4x2_mat4x2_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.vec4_from_mat4x2_mat4x2_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.vec4_from_mat4x3_vs
+KHR-GL46.shaders30.glsl_constructors.vec4_from_mat4x3_fs
+KHR-GL46.shaders30.glsl_constructors.vec4_from_mat4x3_mat4x3_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.vec4_from_mat4x3_mat4x3_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.vec4_from_float_mat2_vs
+KHR-GL46.shaders30.glsl_constructors.vec4_from_float_mat2_fs
+KHR-GL46.shaders30.glsl_constructors.vec4_from_float_mat2_float_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.vec4_from_float_mat2_float_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.vec4_from_float_mat2x3_vs
+KHR-GL46.shaders30.glsl_constructors.vec4_from_float_mat2x3_fs
+KHR-GL46.shaders30.glsl_constructors.vec4_from_float_mat2x3_float_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.vec4_from_float_mat2x3_float_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.vec4_from_float_mat2x4_vs
+KHR-GL46.shaders30.glsl_constructors.vec4_from_float_mat2x4_fs
+KHR-GL46.shaders30.glsl_constructors.vec4_from_float_mat2x4_float_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.vec4_from_float_mat2x4_float_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.vec4_from_float_mat3_vs
+KHR-GL46.shaders30.glsl_constructors.vec4_from_float_mat3_fs
+KHR-GL46.shaders30.glsl_constructors.vec4_from_float_mat3_float_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.vec4_from_float_mat3_float_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.vec4_from_float_mat3x2_vs
+KHR-GL46.shaders30.glsl_constructors.vec4_from_float_mat3x2_fs
+KHR-GL46.shaders30.glsl_constructors.vec4_from_float_mat3x2_float_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.vec4_from_float_mat3x2_float_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.vec4_from_float_mat3x4_vs
+KHR-GL46.shaders30.glsl_constructors.vec4_from_float_mat3x4_fs
+KHR-GL46.shaders30.glsl_constructors.vec4_from_float_mat3x4_float_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.vec4_from_float_mat3x4_float_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.vec4_from_float_mat4_vs
+KHR-GL46.shaders30.glsl_constructors.vec4_from_float_mat4_fs
+KHR-GL46.shaders30.glsl_constructors.vec4_from_float_mat4_float_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.vec4_from_float_mat4_float_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.vec4_from_float_mat4x2_vs
+KHR-GL46.shaders30.glsl_constructors.vec4_from_float_mat4x2_fs
+KHR-GL46.shaders30.glsl_constructors.vec4_from_float_mat4x2_float_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.vec4_from_float_mat4x2_float_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.vec4_from_float_mat4x3_vs
+KHR-GL46.shaders30.glsl_constructors.vec4_from_float_mat4x3_fs
+KHR-GL46.shaders30.glsl_constructors.vec4_from_float_mat4x3_float_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.vec4_from_float_mat4x3_float_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.ivec2_from_mat2_vs
+KHR-GL46.shaders30.glsl_constructors.ivec2_from_mat2_fs
+KHR-GL46.shaders30.glsl_constructors.ivec2_from_mat2_mat2_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.ivec2_from_mat2_mat2_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.ivec2_from_mat2x3_vs
+KHR-GL46.shaders30.glsl_constructors.ivec2_from_mat2x3_fs
+KHR-GL46.shaders30.glsl_constructors.ivec2_from_mat2x3_mat2x3_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.ivec2_from_mat2x3_mat2x3_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.ivec2_from_mat2x4_vs
+KHR-GL46.shaders30.glsl_constructors.ivec2_from_mat2x4_fs
+KHR-GL46.shaders30.glsl_constructors.ivec2_from_mat2x4_mat2x4_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.ivec2_from_mat2x4_mat2x4_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.ivec2_from_mat3_vs
+KHR-GL46.shaders30.glsl_constructors.ivec2_from_mat3_fs
+KHR-GL46.shaders30.glsl_constructors.ivec2_from_mat3_mat3_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.ivec2_from_mat3_mat3_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.ivec2_from_mat3x2_vs
+KHR-GL46.shaders30.glsl_constructors.ivec2_from_mat3x2_fs
+KHR-GL46.shaders30.glsl_constructors.ivec2_from_mat3x2_mat3x2_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.ivec2_from_mat3x2_mat3x2_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.ivec2_from_mat3x4_vs
+KHR-GL46.shaders30.glsl_constructors.ivec2_from_mat3x4_fs
+KHR-GL46.shaders30.glsl_constructors.ivec2_from_mat3x4_mat3x4_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.ivec2_from_mat3x4_mat3x4_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.ivec2_from_mat4_vs
+KHR-GL46.shaders30.glsl_constructors.ivec2_from_mat4_fs
+KHR-GL46.shaders30.glsl_constructors.ivec2_from_mat4_mat4_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.ivec2_from_mat4_mat4_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.ivec2_from_mat4x2_vs
+KHR-GL46.shaders30.glsl_constructors.ivec2_from_mat4x2_fs
+KHR-GL46.shaders30.glsl_constructors.ivec2_from_mat4x2_mat4x2_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.ivec2_from_mat4x2_mat4x2_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.ivec2_from_mat4x3_vs
+KHR-GL46.shaders30.glsl_constructors.ivec2_from_mat4x3_fs
+KHR-GL46.shaders30.glsl_constructors.ivec2_from_mat4x3_mat4x3_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.ivec2_from_mat4x3_mat4x3_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.ivec2_from_int_mat2_vs
+KHR-GL46.shaders30.glsl_constructors.ivec2_from_int_mat2_fs
+KHR-GL46.shaders30.glsl_constructors.ivec2_from_int_mat2_int_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.ivec2_from_int_mat2_int_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.ivec2_from_int_mat2x3_vs
+KHR-GL46.shaders30.glsl_constructors.ivec2_from_int_mat2x3_fs
+KHR-GL46.shaders30.glsl_constructors.ivec2_from_int_mat2x3_int_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.ivec2_from_int_mat2x3_int_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.ivec2_from_int_mat2x4_vs
+KHR-GL46.shaders30.glsl_constructors.ivec2_from_int_mat2x4_fs
+KHR-GL46.shaders30.glsl_constructors.ivec2_from_int_mat2x4_int_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.ivec2_from_int_mat2x4_int_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.ivec2_from_int_mat3_vs
+KHR-GL46.shaders30.glsl_constructors.ivec2_from_int_mat3_fs
+KHR-GL46.shaders30.glsl_constructors.ivec2_from_int_mat3_int_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.ivec2_from_int_mat3_int_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.ivec2_from_int_mat3x2_vs
+KHR-GL46.shaders30.glsl_constructors.ivec2_from_int_mat3x2_fs
+KHR-GL46.shaders30.glsl_constructors.ivec2_from_int_mat3x2_int_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.ivec2_from_int_mat3x2_int_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.ivec2_from_int_mat3x4_vs
+KHR-GL46.shaders30.glsl_constructors.ivec2_from_int_mat3x4_fs
+KHR-GL46.shaders30.glsl_constructors.ivec2_from_int_mat3x4_int_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.ivec2_from_int_mat3x4_int_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.ivec2_from_int_mat4_vs
+KHR-GL46.shaders30.glsl_constructors.ivec2_from_int_mat4_fs
+KHR-GL46.shaders30.glsl_constructors.ivec2_from_int_mat4_int_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.ivec2_from_int_mat4_int_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.ivec2_from_int_mat4x2_vs
+KHR-GL46.shaders30.glsl_constructors.ivec2_from_int_mat4x2_fs
+KHR-GL46.shaders30.glsl_constructors.ivec2_from_int_mat4x2_int_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.ivec2_from_int_mat4x2_int_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.ivec2_from_int_mat4x3_vs
+KHR-GL46.shaders30.glsl_constructors.ivec2_from_int_mat4x3_fs
+KHR-GL46.shaders30.glsl_constructors.ivec2_from_int_mat4x3_int_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.ivec2_from_int_mat4x3_int_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.ivec3_from_mat2_vs
+KHR-GL46.shaders30.glsl_constructors.ivec3_from_mat2_fs
+KHR-GL46.shaders30.glsl_constructors.ivec3_from_mat2_mat2_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.ivec3_from_mat2_mat2_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.ivec3_from_mat2x3_vs
+KHR-GL46.shaders30.glsl_constructors.ivec3_from_mat2x3_fs
+KHR-GL46.shaders30.glsl_constructors.ivec3_from_mat2x3_mat2x3_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.ivec3_from_mat2x3_mat2x3_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.ivec3_from_mat2x4_vs
+KHR-GL46.shaders30.glsl_constructors.ivec3_from_mat2x4_fs
+KHR-GL46.shaders30.glsl_constructors.ivec3_from_mat2x4_mat2x4_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.ivec3_from_mat2x4_mat2x4_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.ivec3_from_mat3_vs
+KHR-GL46.shaders30.glsl_constructors.ivec3_from_mat3_fs
+KHR-GL46.shaders30.glsl_constructors.ivec3_from_mat3_mat3_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.ivec3_from_mat3_mat3_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.ivec3_from_mat3x2_vs
+KHR-GL46.shaders30.glsl_constructors.ivec3_from_mat3x2_fs
+KHR-GL46.shaders30.glsl_constructors.ivec3_from_mat3x2_mat3x2_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.ivec3_from_mat3x2_mat3x2_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.ivec3_from_mat3x4_vs
+KHR-GL46.shaders30.glsl_constructors.ivec3_from_mat3x4_fs
+KHR-GL46.shaders30.glsl_constructors.ivec3_from_mat3x4_mat3x4_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.ivec3_from_mat3x4_mat3x4_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.ivec3_from_mat4_vs
+KHR-GL46.shaders30.glsl_constructors.ivec3_from_mat4_fs
+KHR-GL46.shaders30.glsl_constructors.ivec3_from_mat4_mat4_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.ivec3_from_mat4_mat4_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.ivec3_from_mat4x2_vs
+KHR-GL46.shaders30.glsl_constructors.ivec3_from_mat4x2_fs
+KHR-GL46.shaders30.glsl_constructors.ivec3_from_mat4x2_mat4x2_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.ivec3_from_mat4x2_mat4x2_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.ivec3_from_mat4x3_vs
+KHR-GL46.shaders30.glsl_constructors.ivec3_from_mat4x3_fs
+KHR-GL46.shaders30.glsl_constructors.ivec3_from_mat4x3_mat4x3_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.ivec3_from_mat4x3_mat4x3_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.ivec3_from_int_mat2_vs
+KHR-GL46.shaders30.glsl_constructors.ivec3_from_int_mat2_fs
+KHR-GL46.shaders30.glsl_constructors.ivec3_from_int_mat2_int_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.ivec3_from_int_mat2_int_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.ivec3_from_int_mat2x3_vs
+KHR-GL46.shaders30.glsl_constructors.ivec3_from_int_mat2x3_fs
+KHR-GL46.shaders30.glsl_constructors.ivec3_from_int_mat2x3_int_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.ivec3_from_int_mat2x3_int_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.ivec3_from_int_mat2x4_vs
+KHR-GL46.shaders30.glsl_constructors.ivec3_from_int_mat2x4_fs
+KHR-GL46.shaders30.glsl_constructors.ivec3_from_int_mat2x4_int_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.ivec3_from_int_mat2x4_int_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.ivec3_from_int_mat3_vs
+KHR-GL46.shaders30.glsl_constructors.ivec3_from_int_mat3_fs
+KHR-GL46.shaders30.glsl_constructors.ivec3_from_int_mat3_int_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.ivec3_from_int_mat3_int_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.ivec3_from_int_mat3x2_vs
+KHR-GL46.shaders30.glsl_constructors.ivec3_from_int_mat3x2_fs
+KHR-GL46.shaders30.glsl_constructors.ivec3_from_int_mat3x2_int_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.ivec3_from_int_mat3x2_int_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.ivec3_from_int_mat3x4_vs
+KHR-GL46.shaders30.glsl_constructors.ivec3_from_int_mat3x4_fs
+KHR-GL46.shaders30.glsl_constructors.ivec3_from_int_mat3x4_int_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.ivec3_from_int_mat3x4_int_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.ivec3_from_int_mat4_vs
+KHR-GL46.shaders30.glsl_constructors.ivec3_from_int_mat4_fs
+KHR-GL46.shaders30.glsl_constructors.ivec3_from_int_mat4_int_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.ivec3_from_int_mat4_int_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.ivec3_from_int_mat4x2_vs
+KHR-GL46.shaders30.glsl_constructors.ivec3_from_int_mat4x2_fs
+KHR-GL46.shaders30.glsl_constructors.ivec3_from_int_mat4x2_int_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.ivec3_from_int_mat4x2_int_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.ivec3_from_int_mat4x3_vs
+KHR-GL46.shaders30.glsl_constructors.ivec3_from_int_mat4x3_fs
+KHR-GL46.shaders30.glsl_constructors.ivec3_from_int_mat4x3_int_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.ivec3_from_int_mat4x3_int_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.ivec4_from_mat2_vs
+KHR-GL46.shaders30.glsl_constructors.ivec4_from_mat2_fs
+KHR-GL46.shaders30.glsl_constructors.ivec4_from_mat2_mat2_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.ivec4_from_mat2_mat2_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.ivec4_from_mat2x3_vs
+KHR-GL46.shaders30.glsl_constructors.ivec4_from_mat2x3_fs
+KHR-GL46.shaders30.glsl_constructors.ivec4_from_mat2x3_mat2x3_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.ivec4_from_mat2x3_mat2x3_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.ivec4_from_mat2x4_vs
+KHR-GL46.shaders30.glsl_constructors.ivec4_from_mat2x4_fs
+KHR-GL46.shaders30.glsl_constructors.ivec4_from_mat2x4_mat2x4_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.ivec4_from_mat2x4_mat2x4_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.ivec4_from_mat3_vs
+KHR-GL46.shaders30.glsl_constructors.ivec4_from_mat3_fs
+KHR-GL46.shaders30.glsl_constructors.ivec4_from_mat3_mat3_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.ivec4_from_mat3_mat3_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.ivec4_from_mat3x2_vs
+KHR-GL46.shaders30.glsl_constructors.ivec4_from_mat3x2_fs
+KHR-GL46.shaders30.glsl_constructors.ivec4_from_mat3x2_mat3x2_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.ivec4_from_mat3x2_mat3x2_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.ivec4_from_mat3x4_vs
+KHR-GL46.shaders30.glsl_constructors.ivec4_from_mat3x4_fs
+KHR-GL46.shaders30.glsl_constructors.ivec4_from_mat3x4_mat3x4_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.ivec4_from_mat3x4_mat3x4_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.ivec4_from_mat4_vs
+KHR-GL46.shaders30.glsl_constructors.ivec4_from_mat4_fs
+KHR-GL46.shaders30.glsl_constructors.ivec4_from_mat4_mat4_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.ivec4_from_mat4_mat4_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.ivec4_from_mat4x2_vs
+KHR-GL46.shaders30.glsl_constructors.ivec4_from_mat4x2_fs
+KHR-GL46.shaders30.glsl_constructors.ivec4_from_mat4x2_mat4x2_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.ivec4_from_mat4x2_mat4x2_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.ivec4_from_mat4x3_vs
+KHR-GL46.shaders30.glsl_constructors.ivec4_from_mat4x3_fs
+KHR-GL46.shaders30.glsl_constructors.ivec4_from_mat4x3_mat4x3_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.ivec4_from_mat4x3_mat4x3_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.ivec4_from_int_mat2_vs
+KHR-GL46.shaders30.glsl_constructors.ivec4_from_int_mat2_fs
+KHR-GL46.shaders30.glsl_constructors.ivec4_from_int_mat2_int_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.ivec4_from_int_mat2_int_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.ivec4_from_int_mat2x3_vs
+KHR-GL46.shaders30.glsl_constructors.ivec4_from_int_mat2x3_fs
+KHR-GL46.shaders30.glsl_constructors.ivec4_from_int_mat2x3_int_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.ivec4_from_int_mat2x3_int_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.ivec4_from_int_mat2x4_vs
+KHR-GL46.shaders30.glsl_constructors.ivec4_from_int_mat2x4_fs
+KHR-GL46.shaders30.glsl_constructors.ivec4_from_int_mat2x4_int_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.ivec4_from_int_mat2x4_int_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.ivec4_from_int_mat3_vs
+KHR-GL46.shaders30.glsl_constructors.ivec4_from_int_mat3_fs
+KHR-GL46.shaders30.glsl_constructors.ivec4_from_int_mat3_int_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.ivec4_from_int_mat3_int_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.ivec4_from_int_mat3x2_vs
+KHR-GL46.shaders30.glsl_constructors.ivec4_from_int_mat3x2_fs
+KHR-GL46.shaders30.glsl_constructors.ivec4_from_int_mat3x2_int_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.ivec4_from_int_mat3x2_int_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.ivec4_from_int_mat3x4_vs
+KHR-GL46.shaders30.glsl_constructors.ivec4_from_int_mat3x4_fs
+KHR-GL46.shaders30.glsl_constructors.ivec4_from_int_mat3x4_int_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.ivec4_from_int_mat3x4_int_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.ivec4_from_int_mat4_vs
+KHR-GL46.shaders30.glsl_constructors.ivec4_from_int_mat4_fs
+KHR-GL46.shaders30.glsl_constructors.ivec4_from_int_mat4_int_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.ivec4_from_int_mat4_int_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.ivec4_from_int_mat4x2_vs
+KHR-GL46.shaders30.glsl_constructors.ivec4_from_int_mat4x2_fs
+KHR-GL46.shaders30.glsl_constructors.ivec4_from_int_mat4x2_int_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.ivec4_from_int_mat4x2_int_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.ivec4_from_int_mat4x3_vs
+KHR-GL46.shaders30.glsl_constructors.ivec4_from_int_mat4x3_fs
+KHR-GL46.shaders30.glsl_constructors.ivec4_from_int_mat4x3_int_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.ivec4_from_int_mat4x3_int_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.bvec2_from_mat2_vs
+KHR-GL46.shaders30.glsl_constructors.bvec2_from_mat2_fs
+KHR-GL46.shaders30.glsl_constructors.bvec2_from_mat2_mat2_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.bvec2_from_mat2_mat2_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.bvec2_from_mat2x3_vs
+KHR-GL46.shaders30.glsl_constructors.bvec2_from_mat2x3_fs
+KHR-GL46.shaders30.glsl_constructors.bvec2_from_mat2x3_mat2x3_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.bvec2_from_mat2x3_mat2x3_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.bvec2_from_mat2x4_vs
+KHR-GL46.shaders30.glsl_constructors.bvec2_from_mat2x4_fs
+KHR-GL46.shaders30.glsl_constructors.bvec2_from_mat2x4_mat2x4_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.bvec2_from_mat2x4_mat2x4_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.bvec2_from_mat3_vs
+KHR-GL46.shaders30.glsl_constructors.bvec2_from_mat3_fs
+KHR-GL46.shaders30.glsl_constructors.bvec2_from_mat3_mat3_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.bvec2_from_mat3_mat3_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.bvec2_from_mat3x2_vs
+KHR-GL46.shaders30.glsl_constructors.bvec2_from_mat3x2_fs
+KHR-GL46.shaders30.glsl_constructors.bvec2_from_mat3x2_mat3x2_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.bvec2_from_mat3x2_mat3x2_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.bvec2_from_mat3x4_vs
+KHR-GL46.shaders30.glsl_constructors.bvec2_from_mat3x4_fs
+KHR-GL46.shaders30.glsl_constructors.bvec2_from_mat3x4_mat3x4_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.bvec2_from_mat3x4_mat3x4_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.bvec2_from_mat4_vs
+KHR-GL46.shaders30.glsl_constructors.bvec2_from_mat4_fs
+KHR-GL46.shaders30.glsl_constructors.bvec2_from_mat4_mat4_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.bvec2_from_mat4_mat4_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.bvec2_from_mat4x2_vs
+KHR-GL46.shaders30.glsl_constructors.bvec2_from_mat4x2_fs
+KHR-GL46.shaders30.glsl_constructors.bvec2_from_mat4x2_mat4x2_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.bvec2_from_mat4x2_mat4x2_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.bvec2_from_mat4x3_vs
+KHR-GL46.shaders30.glsl_constructors.bvec2_from_mat4x3_fs
+KHR-GL46.shaders30.glsl_constructors.bvec2_from_mat4x3_mat4x3_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.bvec2_from_mat4x3_mat4x3_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.bvec2_from_bool_mat2_vs
+KHR-GL46.shaders30.glsl_constructors.bvec2_from_bool_mat2_fs
+KHR-GL46.shaders30.glsl_constructors.bvec2_from_bool_mat2_bool_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.bvec2_from_bool_mat2_bool_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.bvec2_from_bool_mat2x3_vs
+KHR-GL46.shaders30.glsl_constructors.bvec2_from_bool_mat2x3_fs
+KHR-GL46.shaders30.glsl_constructors.bvec2_from_bool_mat2x3_bool_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.bvec2_from_bool_mat2x3_bool_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.bvec2_from_bool_mat2x4_vs
+KHR-GL46.shaders30.glsl_constructors.bvec2_from_bool_mat2x4_fs
+KHR-GL46.shaders30.glsl_constructors.bvec2_from_bool_mat2x4_bool_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.bvec2_from_bool_mat2x4_bool_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.bvec2_from_bool_mat3_vs
+KHR-GL46.shaders30.glsl_constructors.bvec2_from_bool_mat3_fs
+KHR-GL46.shaders30.glsl_constructors.bvec2_from_bool_mat3_bool_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.bvec2_from_bool_mat3_bool_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.bvec2_from_bool_mat3x2_vs
+KHR-GL46.shaders30.glsl_constructors.bvec2_from_bool_mat3x2_fs
+KHR-GL46.shaders30.glsl_constructors.bvec2_from_bool_mat3x2_bool_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.bvec2_from_bool_mat3x2_bool_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.bvec2_from_bool_mat3x4_vs
+KHR-GL46.shaders30.glsl_constructors.bvec2_from_bool_mat3x4_fs
+KHR-GL46.shaders30.glsl_constructors.bvec2_from_bool_mat3x4_bool_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.bvec2_from_bool_mat3x4_bool_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.bvec2_from_bool_mat4_vs
+KHR-GL46.shaders30.glsl_constructors.bvec2_from_bool_mat4_fs
+KHR-GL46.shaders30.glsl_constructors.bvec2_from_bool_mat4_bool_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.bvec2_from_bool_mat4_bool_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.bvec2_from_bool_mat4x2_vs
+KHR-GL46.shaders30.glsl_constructors.bvec2_from_bool_mat4x2_fs
+KHR-GL46.shaders30.glsl_constructors.bvec2_from_bool_mat4x2_bool_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.bvec2_from_bool_mat4x2_bool_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.bvec2_from_bool_mat4x3_vs
+KHR-GL46.shaders30.glsl_constructors.bvec2_from_bool_mat4x3_fs
+KHR-GL46.shaders30.glsl_constructors.bvec2_from_bool_mat4x3_bool_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.bvec2_from_bool_mat4x3_bool_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.bvec3_from_mat2_vs
+KHR-GL46.shaders30.glsl_constructors.bvec3_from_mat2_fs
+KHR-GL46.shaders30.glsl_constructors.bvec3_from_mat2_mat2_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.bvec3_from_mat2_mat2_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.bvec3_from_mat2x3_vs
+KHR-GL46.shaders30.glsl_constructors.bvec3_from_mat2x3_fs
+KHR-GL46.shaders30.glsl_constructors.bvec3_from_mat2x3_mat2x3_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.bvec3_from_mat2x3_mat2x3_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.bvec3_from_mat2x4_vs
+KHR-GL46.shaders30.glsl_constructors.bvec3_from_mat2x4_fs
+KHR-GL46.shaders30.glsl_constructors.bvec3_from_mat2x4_mat2x4_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.bvec3_from_mat2x4_mat2x4_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.bvec3_from_mat3_vs
+KHR-GL46.shaders30.glsl_constructors.bvec3_from_mat3_fs
+KHR-GL46.shaders30.glsl_constructors.bvec3_from_mat3_mat3_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.bvec3_from_mat3_mat3_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.bvec3_from_mat3x2_vs
+KHR-GL46.shaders30.glsl_constructors.bvec3_from_mat3x2_fs
+KHR-GL46.shaders30.glsl_constructors.bvec3_from_mat3x2_mat3x2_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.bvec3_from_mat3x2_mat3x2_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.bvec3_from_mat3x4_vs
+KHR-GL46.shaders30.glsl_constructors.bvec3_from_mat3x4_fs
+KHR-GL46.shaders30.glsl_constructors.bvec3_from_mat3x4_mat3x4_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.bvec3_from_mat3x4_mat3x4_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.bvec3_from_mat4_vs
+KHR-GL46.shaders30.glsl_constructors.bvec3_from_mat4_fs
+KHR-GL46.shaders30.glsl_constructors.bvec3_from_mat4_mat4_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.bvec3_from_mat4_mat4_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.bvec3_from_mat4x2_vs
+KHR-GL46.shaders30.glsl_constructors.bvec3_from_mat4x2_fs
+KHR-GL46.shaders30.glsl_constructors.bvec3_from_mat4x2_mat4x2_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.bvec3_from_mat4x2_mat4x2_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.bvec3_from_mat4x3_vs
+KHR-GL46.shaders30.glsl_constructors.bvec3_from_mat4x3_fs
+KHR-GL46.shaders30.glsl_constructors.bvec3_from_mat4x3_mat4x3_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.bvec3_from_mat4x3_mat4x3_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.bvec3_from_bool_mat2_vs
+KHR-GL46.shaders30.glsl_constructors.bvec3_from_bool_mat2_fs
+KHR-GL46.shaders30.glsl_constructors.bvec3_from_bool_mat2_bool_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.bvec3_from_bool_mat2_bool_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.bvec3_from_bool_mat2x3_vs
+KHR-GL46.shaders30.glsl_constructors.bvec3_from_bool_mat2x3_fs
+KHR-GL46.shaders30.glsl_constructors.bvec3_from_bool_mat2x3_bool_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.bvec3_from_bool_mat2x3_bool_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.bvec3_from_bool_mat2x4_vs
+KHR-GL46.shaders30.glsl_constructors.bvec3_from_bool_mat2x4_fs
+KHR-GL46.shaders30.glsl_constructors.bvec3_from_bool_mat2x4_bool_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.bvec3_from_bool_mat2x4_bool_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.bvec3_from_bool_mat3_vs
+KHR-GL46.shaders30.glsl_constructors.bvec3_from_bool_mat3_fs
+KHR-GL46.shaders30.glsl_constructors.bvec3_from_bool_mat3_bool_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.bvec3_from_bool_mat3_bool_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.bvec3_from_bool_mat3x2_vs
+KHR-GL46.shaders30.glsl_constructors.bvec3_from_bool_mat3x2_fs
+KHR-GL46.shaders30.glsl_constructors.bvec3_from_bool_mat3x2_bool_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.bvec3_from_bool_mat3x2_bool_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.bvec3_from_bool_mat3x4_vs
+KHR-GL46.shaders30.glsl_constructors.bvec3_from_bool_mat3x4_fs
+KHR-GL46.shaders30.glsl_constructors.bvec3_from_bool_mat3x4_bool_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.bvec3_from_bool_mat3x4_bool_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.bvec3_from_bool_mat4_vs
+KHR-GL46.shaders30.glsl_constructors.bvec3_from_bool_mat4_fs
+KHR-GL46.shaders30.glsl_constructors.bvec3_from_bool_mat4_bool_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.bvec3_from_bool_mat4_bool_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.bvec3_from_bool_mat4x2_vs
+KHR-GL46.shaders30.glsl_constructors.bvec3_from_bool_mat4x2_fs
+KHR-GL46.shaders30.glsl_constructors.bvec3_from_bool_mat4x2_bool_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.bvec3_from_bool_mat4x2_bool_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.bvec3_from_bool_mat4x3_vs
+KHR-GL46.shaders30.glsl_constructors.bvec3_from_bool_mat4x3_fs
+KHR-GL46.shaders30.glsl_constructors.bvec3_from_bool_mat4x3_bool_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.bvec3_from_bool_mat4x3_bool_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.bvec4_from_mat2_vs
+KHR-GL46.shaders30.glsl_constructors.bvec4_from_mat2_fs
+KHR-GL46.shaders30.glsl_constructors.bvec4_from_mat2_mat2_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.bvec4_from_mat2_mat2_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.bvec4_from_mat2x3_vs
+KHR-GL46.shaders30.glsl_constructors.bvec4_from_mat2x3_fs
+KHR-GL46.shaders30.glsl_constructors.bvec4_from_mat2x3_mat2x3_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.bvec4_from_mat2x3_mat2x3_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.bvec4_from_mat2x4_vs
+KHR-GL46.shaders30.glsl_constructors.bvec4_from_mat2x4_fs
+KHR-GL46.shaders30.glsl_constructors.bvec4_from_mat2x4_mat2x4_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.bvec4_from_mat2x4_mat2x4_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.bvec4_from_mat3_vs
+KHR-GL46.shaders30.glsl_constructors.bvec4_from_mat3_fs
+KHR-GL46.shaders30.glsl_constructors.bvec4_from_mat3_mat3_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.bvec4_from_mat3_mat3_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.bvec4_from_mat3x2_vs
+KHR-GL46.shaders30.glsl_constructors.bvec4_from_mat3x2_fs
+KHR-GL46.shaders30.glsl_constructors.bvec4_from_mat3x2_mat3x2_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.bvec4_from_mat3x2_mat3x2_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.bvec4_from_mat3x4_vs
+KHR-GL46.shaders30.glsl_constructors.bvec4_from_mat3x4_fs
+KHR-GL46.shaders30.glsl_constructors.bvec4_from_mat3x4_mat3x4_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.bvec4_from_mat3x4_mat3x4_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.bvec4_from_mat4_vs
+KHR-GL46.shaders30.glsl_constructors.bvec4_from_mat4_fs
+KHR-GL46.shaders30.glsl_constructors.bvec4_from_mat4_mat4_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.bvec4_from_mat4_mat4_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.bvec4_from_mat4x2_vs
+KHR-GL46.shaders30.glsl_constructors.bvec4_from_mat4x2_fs
+KHR-GL46.shaders30.glsl_constructors.bvec4_from_mat4x2_mat4x2_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.bvec4_from_mat4x2_mat4x2_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.bvec4_from_mat4x3_vs
+KHR-GL46.shaders30.glsl_constructors.bvec4_from_mat4x3_fs
+KHR-GL46.shaders30.glsl_constructors.bvec4_from_mat4x3_mat4x3_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.bvec4_from_mat4x3_mat4x3_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.bvec4_from_bool_mat2_vs
+KHR-GL46.shaders30.glsl_constructors.bvec4_from_bool_mat2_fs
+KHR-GL46.shaders30.glsl_constructors.bvec4_from_bool_mat2_bool_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.bvec4_from_bool_mat2_bool_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.bvec4_from_bool_mat2x3_vs
+KHR-GL46.shaders30.glsl_constructors.bvec4_from_bool_mat2x3_fs
+KHR-GL46.shaders30.glsl_constructors.bvec4_from_bool_mat2x3_bool_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.bvec4_from_bool_mat2x3_bool_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.bvec4_from_bool_mat2x4_vs
+KHR-GL46.shaders30.glsl_constructors.bvec4_from_bool_mat2x4_fs
+KHR-GL46.shaders30.glsl_constructors.bvec4_from_bool_mat2x4_bool_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.bvec4_from_bool_mat2x4_bool_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.bvec4_from_bool_mat3_vs
+KHR-GL46.shaders30.glsl_constructors.bvec4_from_bool_mat3_fs
+KHR-GL46.shaders30.glsl_constructors.bvec4_from_bool_mat3_bool_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.bvec4_from_bool_mat3_bool_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.bvec4_from_bool_mat3x2_vs
+KHR-GL46.shaders30.glsl_constructors.bvec4_from_bool_mat3x2_fs
+KHR-GL46.shaders30.glsl_constructors.bvec4_from_bool_mat3x2_bool_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.bvec4_from_bool_mat3x2_bool_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.bvec4_from_bool_mat3x4_vs
+KHR-GL46.shaders30.glsl_constructors.bvec4_from_bool_mat3x4_fs
+KHR-GL46.shaders30.glsl_constructors.bvec4_from_bool_mat3x4_bool_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.bvec4_from_bool_mat3x4_bool_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.bvec4_from_bool_mat4_vs
+KHR-GL46.shaders30.glsl_constructors.bvec4_from_bool_mat4_fs
+KHR-GL46.shaders30.glsl_constructors.bvec4_from_bool_mat4_bool_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.bvec4_from_bool_mat4_bool_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.bvec4_from_bool_mat4x2_vs
+KHR-GL46.shaders30.glsl_constructors.bvec4_from_bool_mat4x2_fs
+KHR-GL46.shaders30.glsl_constructors.bvec4_from_bool_mat4x2_bool_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.bvec4_from_bool_mat4x2_bool_invalid_fs
+KHR-GL46.shaders30.glsl_constructors.bvec4_from_bool_mat4x3_vs
+KHR-GL46.shaders30.glsl_constructors.bvec4_from_bool_mat4x3_fs
+KHR-GL46.shaders30.glsl_constructors.bvec4_from_bool_mat4x3_bool_invalid_vs
+KHR-GL46.shaders30.glsl_constructors.bvec4_from_bool_mat4x3_bool_invalid_fs
 KHR-GL46.ext_texture_shadow_lod.texture.sampler2darrayshadow_fragment
 KHR-GL46.ext_texture_shadow_lod.texture.sampler2darrayshadow_bias_fragment
 KHR-GL46.ext_texture_shadow_lod.texture.samplercubearrayshadow_vertex
diff --git a/external/openglcts/data/mustpass/gles/aosp_mustpass/3.2.5.x/gles2-master.txt b/external/openglcts/data/mustpass/gles/aosp_mustpass/3.2.5.x/gles2-master.txt
index c63235c..1662414 100644
--- a/external/openglcts/data/mustpass/gles/aosp_mustpass/3.2.5.x/gles2-master.txt
+++ b/external/openglcts/data/mustpass/gles/aosp_mustpass/3.2.5.x/gles2-master.txt
@@ -129,6 +129,7 @@
 dEQP-GLES2.functional.light_amount.12omni
 dEQP-GLES2.functional.light_amount.14omni
 dEQP-GLES2.functional.light_amount.16omni
+dEQP-GLES2.functional.multisampled_render_to_texture.readpixels
 dEQP-GLES2.functional.shaders.preprocessor.basic.correct_phases_vertex
 dEQP-GLES2.functional.shaders.preprocessor.basic.correct_phases_fragment
 dEQP-GLES2.functional.shaders.preprocessor.basic.invalid_identifier_vertex
diff --git a/external/openglcts/data/mustpass/gles/aosp_mustpass/3.2.5.x/gles3-master.txt b/external/openglcts/data/mustpass/gles/aosp_mustpass/3.2.5.x/gles3-master.txt
index 5f55fe1..ccc6e6a 100644
--- a/external/openglcts/data/mustpass/gles/aosp_mustpass/3.2.5.x/gles3-master.txt
+++ b/external/openglcts/data/mustpass/gles/aosp_mustpass/3.2.5.x/gles3-master.txt
@@ -35240,6 +35240,198 @@
 dEQP-GLES3.functional.ubo.single_nested_struct.single_buffer.std140_instance_array_vertex
 dEQP-GLES3.functional.ubo.single_nested_struct.single_buffer.std140_instance_array_fragment
 dEQP-GLES3.functional.ubo.single_nested_struct.single_buffer.std140_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_row_major_matrixarray_row_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_row_major_matrixarray_row_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_row_major_matrixarray_row_major_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_row_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_row_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_row_major_matrixarray_row_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_row_major_matrixarray_column_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_row_major_matrixarray_column_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_row_major_matrixarray_column_major_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_row_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_row_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_row_major_matrixarray_column_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_column_major_matrixarray_row_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_column_major_matrixarray_row_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_column_major_matrixarray_row_major_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_column_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_column_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_column_major_matrixarray_row_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_column_major_matrixarray_column_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_column_major_matrixarray_column_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_column_major_matrixarray_column_major_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_column_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_column_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_column_major_matrixarray_column_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_row_major_matrixarray_row_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_row_major_matrixarray_row_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_row_major_matrixarray_row_major_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_row_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_row_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_row_major_matrixarray_row_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_row_major_matrixarray_column_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_row_major_matrixarray_column_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_row_major_matrixarray_column_major_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_row_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_row_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_row_major_matrixarray_column_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_column_major_matrixarray_row_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_column_major_matrixarray_row_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_column_major_matrixarray_row_major_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_column_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_column_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_column_major_matrixarray_row_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_column_major_matrixarray_column_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_column_major_matrixarray_column_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_column_major_matrixarray_column_major_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_column_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_column_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_column_major_matrixarray_column_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_row_major_matrix_row_major_matrixarray_row_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_row_major_matrix_row_major_matrixarray_row_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_row_major_matrix_row_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_row_major_matrix_row_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_row_major_matrix_row_major_matrixarray_column_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_row_major_matrix_row_major_matrixarray_column_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_row_major_matrix_row_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_row_major_matrix_row_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_row_major_matrix_column_major_matrixarray_row_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_row_major_matrix_column_major_matrixarray_row_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_row_major_matrix_column_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_row_major_matrix_column_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_row_major_matrix_column_major_matrixarray_column_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_row_major_matrix_column_major_matrixarray_column_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_row_major_matrix_column_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_row_major_matrix_column_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_column_major_matrix_row_major_matrixarray_row_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_column_major_matrix_row_major_matrixarray_row_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_column_major_matrix_row_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_column_major_matrix_row_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_column_major_matrix_row_major_matrixarray_column_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_column_major_matrix_row_major_matrixarray_column_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_column_major_matrix_row_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_column_major_matrix_row_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_column_major_matrix_column_major_matrixarray_row_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_column_major_matrix_column_major_matrixarray_row_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_column_major_matrix_column_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_column_major_matrix_column_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_column_major_matrix_column_major_matrixarray_column_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_column_major_matrix_column_major_matrixarray_column_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_column_major_matrix_column_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_column_major_matrix_column_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_row_major_matrixarray_row_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_row_major_matrixarray_row_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_row_major_matrixarray_row_major_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_row_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_row_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_row_major_matrixarray_row_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_row_major_matrixarray_column_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_row_major_matrixarray_column_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_row_major_matrixarray_column_major_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_row_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_row_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_row_major_matrixarray_column_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_column_major_matrixarray_row_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_column_major_matrixarray_row_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_column_major_matrixarray_row_major_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_column_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_column_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_column_major_matrixarray_row_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_column_major_matrixarray_column_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_column_major_matrixarray_column_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_column_major_matrixarray_column_major_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_column_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_column_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_column_major_matrixarray_column_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_row_major_matrixarray_row_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_row_major_matrixarray_row_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_row_major_matrixarray_row_major_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_row_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_row_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_row_major_matrixarray_row_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_row_major_matrixarray_column_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_row_major_matrixarray_column_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_row_major_matrixarray_column_major_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_row_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_row_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_row_major_matrixarray_column_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_column_major_matrixarray_row_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_column_major_matrixarray_row_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_column_major_matrixarray_row_major_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_column_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_column_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_column_major_matrixarray_row_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_column_major_matrixarray_column_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_column_major_matrixarray_column_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_column_major_matrixarray_column_major_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_column_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_column_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_column_major_matrixarray_column_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_row_major_matrix_row_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_row_major_matrix_row_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_row_major_matrix_row_major_matrixarray_row_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_row_major_matrix_row_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_row_major_matrix_row_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_row_major_matrix_row_major_matrixarray_column_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_row_major_matrix_column_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_row_major_matrix_column_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_row_major_matrix_column_major_matrixarray_row_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_row_major_matrix_column_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_row_major_matrix_column_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_row_major_matrix_column_major_matrixarray_column_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_column_major_matrix_row_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_column_major_matrix_row_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_column_major_matrix_row_major_matrixarray_row_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_column_major_matrix_row_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_column_major_matrix_row_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_column_major_matrix_row_major_matrixarray_column_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_column_major_matrix_column_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_column_major_matrix_column_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_column_major_matrix_column_major_matrixarray_row_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_column_major_matrix_column_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_column_major_matrix_column_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_column_major_matrix_column_major_matrixarray_column_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.packed_block_row_major_matrix_row_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.packed_block_row_major_matrix_row_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.packed_block_row_major_matrix_row_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.packed_block_row_major_matrix_row_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.packed_block_row_major_matrix_column_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.packed_block_row_major_matrix_column_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.packed_block_row_major_matrix_column_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.packed_block_row_major_matrix_column_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.packed_block_column_major_matrix_row_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.packed_block_column_major_matrix_row_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.packed_block_column_major_matrix_row_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.packed_block_column_major_matrix_row_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.packed_block_column_major_matrix_column_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.packed_block_column_major_matrix_column_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.packed_block_column_major_matrix_column_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.packed_block_column_major_matrix_column_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_row_major_matrix_row_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_row_major_matrix_row_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_row_major_matrix_row_major_matrixarray_row_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_row_major_matrix_row_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_row_major_matrix_row_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_row_major_matrix_row_major_matrixarray_column_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_row_major_matrix_column_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_row_major_matrix_column_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_row_major_matrix_column_major_matrixarray_row_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_row_major_matrix_column_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_row_major_matrix_column_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_row_major_matrix_column_major_matrixarray_column_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_column_major_matrix_row_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_column_major_matrix_row_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_column_major_matrix_row_major_matrixarray_row_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_column_major_matrix_row_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_column_major_matrix_row_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_column_major_matrix_row_major_matrixarray_column_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_column_major_matrix_column_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_column_major_matrix_column_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_column_major_matrix_column_major_matrixarray_row_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_column_major_matrix_column_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_column_major_matrix_column_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_column_major_matrix_column_major_matrixarray_column_major_instance_array_both
 dEQP-GLES3.functional.ubo.single_nested_struct_array.per_block_buffer.shared_vertex
 dEQP-GLES3.functional.ubo.single_nested_struct_array.per_block_buffer.shared_fragment
 dEQP-GLES3.functional.ubo.single_nested_struct_array.per_block_buffer.shared_both
diff --git a/external/openglcts/data/mustpass/gles/aosp_mustpass/3.2.6.x/gles2-master.txt b/external/openglcts/data/mustpass/gles/aosp_mustpass/3.2.6.x/gles2-master.txt
index c63235c..1662414 100644
--- a/external/openglcts/data/mustpass/gles/aosp_mustpass/3.2.6.x/gles2-master.txt
+++ b/external/openglcts/data/mustpass/gles/aosp_mustpass/3.2.6.x/gles2-master.txt
@@ -129,6 +129,7 @@
 dEQP-GLES2.functional.light_amount.12omni
 dEQP-GLES2.functional.light_amount.14omni
 dEQP-GLES2.functional.light_amount.16omni
+dEQP-GLES2.functional.multisampled_render_to_texture.readpixels
 dEQP-GLES2.functional.shaders.preprocessor.basic.correct_phases_vertex
 dEQP-GLES2.functional.shaders.preprocessor.basic.correct_phases_fragment
 dEQP-GLES2.functional.shaders.preprocessor.basic.invalid_identifier_vertex
diff --git a/external/openglcts/data/mustpass/gles/aosp_mustpass/3.2.6.x/gles3-master.txt b/external/openglcts/data/mustpass/gles/aosp_mustpass/3.2.6.x/gles3-master.txt
index 5f55fe1..ccc6e6a 100644
--- a/external/openglcts/data/mustpass/gles/aosp_mustpass/3.2.6.x/gles3-master.txt
+++ b/external/openglcts/data/mustpass/gles/aosp_mustpass/3.2.6.x/gles3-master.txt
@@ -35240,6 +35240,198 @@
 dEQP-GLES3.functional.ubo.single_nested_struct.single_buffer.std140_instance_array_vertex
 dEQP-GLES3.functional.ubo.single_nested_struct.single_buffer.std140_instance_array_fragment
 dEQP-GLES3.functional.ubo.single_nested_struct.single_buffer.std140_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_row_major_matrixarray_row_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_row_major_matrixarray_row_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_row_major_matrixarray_row_major_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_row_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_row_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_row_major_matrixarray_row_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_row_major_matrixarray_column_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_row_major_matrixarray_column_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_row_major_matrixarray_column_major_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_row_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_row_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_row_major_matrixarray_column_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_column_major_matrixarray_row_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_column_major_matrixarray_row_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_column_major_matrixarray_row_major_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_column_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_column_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_column_major_matrixarray_row_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_column_major_matrixarray_column_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_column_major_matrixarray_column_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_column_major_matrixarray_column_major_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_column_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_column_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_column_major_matrixarray_column_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_row_major_matrixarray_row_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_row_major_matrixarray_row_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_row_major_matrixarray_row_major_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_row_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_row_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_row_major_matrixarray_row_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_row_major_matrixarray_column_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_row_major_matrixarray_column_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_row_major_matrixarray_column_major_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_row_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_row_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_row_major_matrixarray_column_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_column_major_matrixarray_row_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_column_major_matrixarray_row_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_column_major_matrixarray_row_major_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_column_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_column_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_column_major_matrixarray_row_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_column_major_matrixarray_column_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_column_major_matrixarray_column_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_column_major_matrixarray_column_major_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_column_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_column_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_column_major_matrixarray_column_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_row_major_matrix_row_major_matrixarray_row_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_row_major_matrix_row_major_matrixarray_row_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_row_major_matrix_row_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_row_major_matrix_row_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_row_major_matrix_row_major_matrixarray_column_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_row_major_matrix_row_major_matrixarray_column_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_row_major_matrix_row_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_row_major_matrix_row_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_row_major_matrix_column_major_matrixarray_row_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_row_major_matrix_column_major_matrixarray_row_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_row_major_matrix_column_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_row_major_matrix_column_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_row_major_matrix_column_major_matrixarray_column_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_row_major_matrix_column_major_matrixarray_column_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_row_major_matrix_column_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_row_major_matrix_column_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_column_major_matrix_row_major_matrixarray_row_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_column_major_matrix_row_major_matrixarray_row_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_column_major_matrix_row_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_column_major_matrix_row_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_column_major_matrix_row_major_matrixarray_column_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_column_major_matrix_row_major_matrixarray_column_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_column_major_matrix_row_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_column_major_matrix_row_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_column_major_matrix_column_major_matrixarray_row_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_column_major_matrix_column_major_matrixarray_row_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_column_major_matrix_column_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_column_major_matrix_column_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_column_major_matrix_column_major_matrixarray_column_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_column_major_matrix_column_major_matrixarray_column_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_column_major_matrix_column_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_column_major_matrix_column_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_row_major_matrixarray_row_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_row_major_matrixarray_row_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_row_major_matrixarray_row_major_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_row_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_row_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_row_major_matrixarray_row_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_row_major_matrixarray_column_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_row_major_matrixarray_column_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_row_major_matrixarray_column_major_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_row_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_row_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_row_major_matrixarray_column_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_column_major_matrixarray_row_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_column_major_matrixarray_row_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_column_major_matrixarray_row_major_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_column_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_column_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_column_major_matrixarray_row_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_column_major_matrixarray_column_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_column_major_matrixarray_column_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_column_major_matrixarray_column_major_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_column_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_column_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_column_major_matrixarray_column_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_row_major_matrixarray_row_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_row_major_matrixarray_row_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_row_major_matrixarray_row_major_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_row_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_row_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_row_major_matrixarray_row_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_row_major_matrixarray_column_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_row_major_matrixarray_column_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_row_major_matrixarray_column_major_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_row_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_row_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_row_major_matrixarray_column_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_column_major_matrixarray_row_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_column_major_matrixarray_row_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_column_major_matrixarray_row_major_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_column_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_column_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_column_major_matrixarray_row_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_column_major_matrixarray_column_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_column_major_matrixarray_column_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_column_major_matrixarray_column_major_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_column_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_column_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_column_major_matrixarray_column_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_row_major_matrix_row_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_row_major_matrix_row_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_row_major_matrix_row_major_matrixarray_row_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_row_major_matrix_row_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_row_major_matrix_row_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_row_major_matrix_row_major_matrixarray_column_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_row_major_matrix_column_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_row_major_matrix_column_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_row_major_matrix_column_major_matrixarray_row_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_row_major_matrix_column_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_row_major_matrix_column_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_row_major_matrix_column_major_matrixarray_column_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_column_major_matrix_row_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_column_major_matrix_row_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_column_major_matrix_row_major_matrixarray_row_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_column_major_matrix_row_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_column_major_matrix_row_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_column_major_matrix_row_major_matrixarray_column_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_column_major_matrix_column_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_column_major_matrix_column_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_column_major_matrix_column_major_matrixarray_row_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_column_major_matrix_column_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_column_major_matrix_column_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_column_major_matrix_column_major_matrixarray_column_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.packed_block_row_major_matrix_row_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.packed_block_row_major_matrix_row_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.packed_block_row_major_matrix_row_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.packed_block_row_major_matrix_row_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.packed_block_row_major_matrix_column_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.packed_block_row_major_matrix_column_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.packed_block_row_major_matrix_column_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.packed_block_row_major_matrix_column_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.packed_block_column_major_matrix_row_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.packed_block_column_major_matrix_row_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.packed_block_column_major_matrix_row_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.packed_block_column_major_matrix_row_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.packed_block_column_major_matrix_column_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.packed_block_column_major_matrix_column_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.packed_block_column_major_matrix_column_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.packed_block_column_major_matrix_column_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_row_major_matrix_row_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_row_major_matrix_row_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_row_major_matrix_row_major_matrixarray_row_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_row_major_matrix_row_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_row_major_matrix_row_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_row_major_matrix_row_major_matrixarray_column_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_row_major_matrix_column_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_row_major_matrix_column_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_row_major_matrix_column_major_matrixarray_row_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_row_major_matrix_column_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_row_major_matrix_column_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_row_major_matrix_column_major_matrixarray_column_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_column_major_matrix_row_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_column_major_matrix_row_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_column_major_matrix_row_major_matrixarray_row_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_column_major_matrix_row_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_column_major_matrix_row_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_column_major_matrix_row_major_matrixarray_column_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_column_major_matrix_column_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_column_major_matrix_column_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_column_major_matrix_column_major_matrixarray_row_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_column_major_matrix_column_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_column_major_matrix_column_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_column_major_matrix_column_major_matrixarray_column_major_instance_array_both
 dEQP-GLES3.functional.ubo.single_nested_struct_array.per_block_buffer.shared_vertex
 dEQP-GLES3.functional.ubo.single_nested_struct_array.per_block_buffer.shared_fragment
 dEQP-GLES3.functional.ubo.single_nested_struct_array.per_block_buffer.shared_both
diff --git a/external/openglcts/data/mustpass/gles/aosp_mustpass/master/gles2-master.txt b/external/openglcts/data/mustpass/gles/aosp_mustpass/master/gles2-master.txt
index b1cb55c..1662414 100644
--- a/external/openglcts/data/mustpass/gles/aosp_mustpass/master/gles2-master.txt
+++ b/external/openglcts/data/mustpass/gles/aosp_mustpass/master/gles2-master.txt
@@ -129,6 +129,7 @@
 dEQP-GLES2.functional.light_amount.12omni
 dEQP-GLES2.functional.light_amount.14omni
 dEQP-GLES2.functional.light_amount.16omni
+dEQP-GLES2.functional.multisampled_render_to_texture.readpixels
 dEQP-GLES2.functional.shaders.preprocessor.basic.correct_phases_vertex
 dEQP-GLES2.functional.shaders.preprocessor.basic.correct_phases_fragment
 dEQP-GLES2.functional.shaders.preprocessor.basic.invalid_identifier_vertex
@@ -149,10 +150,6 @@
 dEQP-GLES2.functional.shaders.preprocessor.definitions.define_value_and_function_fragment
 dEQP-GLES2.functional.shaders.preprocessor.definitions.undefine_object_invalid_syntax_vertex
 dEQP-GLES2.functional.shaders.preprocessor.definitions.undefine_object_invalid_syntax_fragment
-dEQP-GLES2.functional.shaders.preprocessor.definitions.undefine_invalid_object_1_vertex
-dEQP-GLES2.functional.shaders.preprocessor.definitions.undefine_invalid_object_1_fragment
-dEQP-GLES2.functional.shaders.preprocessor.definitions.undefine_invalid_object_2_vertex
-dEQP-GLES2.functional.shaders.preprocessor.definitions.undefine_invalid_object_2_fragment
 dEQP-GLES2.functional.shaders.preprocessor.definitions.undefine_invalid_object_3_vertex
 dEQP-GLES2.functional.shaders.preprocessor.definitions.undefine_invalid_object_3_fragment
 dEQP-GLES2.functional.shaders.preprocessor.definitions.undefine_invalid_object_4_vertex
@@ -195,8 +192,6 @@
 dEQP-GLES2.functional.shaders.preprocessor.object_redefinitions.redefine_object_comment_fragment
 dEQP-GLES2.functional.shaders.preprocessor.object_redefinitions.redefine_object_multiline_comment_vertex
 dEQP-GLES2.functional.shaders.preprocessor.object_redefinitions.redefine_object_multiline_comment_fragment
-dEQP-GLES2.functional.shaders.preprocessor.invalid_redefinitions.invalid_identifier_2_vertex
-dEQP-GLES2.functional.shaders.preprocessor.invalid_redefinitions.invalid_identifier_2_fragment
 dEQP-GLES2.functional.shaders.preprocessor.comments.multiline_comment_define_vertex
 dEQP-GLES2.functional.shaders.preprocessor.comments.multiline_comment_define_fragment
 dEQP-GLES2.functional.shaders.preprocessor.comments.nested_comment_vertex
@@ -283,8 +278,6 @@
 dEQP-GLES2.functional.shaders.preprocessor.predefined_macros.gl_es_2_fragment
 dEQP-GLES2.functional.shaders.preprocessor.predefined_macros.line_1_vertex
 dEQP-GLES2.functional.shaders.preprocessor.predefined_macros.line_1_fragment
-dEQP-GLES2.functional.shaders.preprocessor.predefined_macros.line_2_vertex
-dEQP-GLES2.functional.shaders.preprocessor.predefined_macros.line_2_fragment
 dEQP-GLES2.functional.shaders.preprocessor.predefined_macros.file_vertex
 dEQP-GLES2.functional.shaders.preprocessor.predefined_macros.file_fragment
 dEQP-GLES2.functional.shaders.preprocessor.predefined_macros.if_gl_es_vertex
@@ -451,12 +444,8 @@
 dEQP-GLES2.functional.shaders.preprocessor.directive.error_with_no_tokens_fragment
 dEQP-GLES2.functional.shaders.preprocessor.directive.error_vertex
 dEQP-GLES2.functional.shaders.preprocessor.directive.error_fragment
-dEQP-GLES2.functional.shaders.preprocessor.builtin.line_vertex
-dEQP-GLES2.functional.shaders.preprocessor.builtin.line_fragment
 dEQP-GLES2.functional.shaders.preprocessor.builtin.line_and_file_vertex
 dEQP-GLES2.functional.shaders.preprocessor.builtin.line_and_file_fragment
-dEQP-GLES2.functional.shaders.preprocessor.builtin.line_defined_1_vertex
-dEQP-GLES2.functional.shaders.preprocessor.builtin.line_defined_1_fragment
 dEQP-GLES2.functional.shaders.preprocessor.builtin.line_defined_2_vertex
 dEQP-GLES2.functional.shaders.preprocessor.builtin.line_defined_2_fragment
 dEQP-GLES2.functional.shaders.preprocessor.builtin.empty_line_vertex
@@ -499,8 +488,6 @@
 dEQP-GLES2.functional.shaders.preprocessor.extensions.invalid_char_in_behavior_fragment
 dEQP-GLES2.functional.shaders.preprocessor.extensions.unterminated_comment_vertex
 dEQP-GLES2.functional.shaders.preprocessor.extensions.unterminated_comment_fragment
-dEQP-GLES2.functional.shaders.preprocessor.extensions.after_non_preprocessing_tokens_vertex
-dEQP-GLES2.functional.shaders.preprocessor.extensions.after_non_preprocessing_tokens_fragment
 dEQP-GLES2.functional.shaders.preprocessor.expressions.shift_left_vertex
 dEQP-GLES2.functional.shaders.preprocessor.expressions.shift_left_fragment
 dEQP-GLES2.functional.shaders.preprocessor.expressions.shift_right_vertex
@@ -724,8 +711,6 @@
 dEQP-GLES2.functional.shaders.constants.const_float_assign_uniform_vertex
 dEQP-GLES2.functional.shaders.constants.const_float_assign_uniform_fragment
 dEQP-GLES2.functional.shaders.constants.const_float_assign_varying
-dEQP-GLES2.functional.shaders.constants.const_float_function_gotcha_vertex
-dEQP-GLES2.functional.shaders.constants.const_float_function_gotcha_fragment
 dEQP-GLES2.functional.shaders.constants.const_float_from_int_vertex
 dEQP-GLES2.functional.shaders.constants.const_float_from_int_fragment
 dEQP-GLES2.functional.shaders.constants.const_float_from_vec2_vertex
@@ -757,9 +742,7 @@
 dEQP-GLES2.functional.shaders.linkage.varying_differing_precision_1
 dEQP-GLES2.functional.shaders.linkage.varying_differing_precision_2
 dEQP-GLES2.functional.shaders.linkage.varying_differing_precision_3
-dEQP-GLES2.functional.shaders.linkage.varying_type_mismatch_1
 dEQP-GLES2.functional.shaders.linkage.varying_type_mismatch_2
-dEQP-GLES2.functional.shaders.linkage.varying_illegal_usage_1
 dEQP-GLES2.functional.shaders.linkage.invalid_varying_type_int
 dEQP-GLES2.functional.shaders.linkage.invalid_varying_type_bool
 dEQP-GLES2.functional.shaders.linkage.invalid_varying_type_struct
@@ -789,13 +772,6 @@
 dEQP-GLES2.functional.shaders.linkage.uniform_struct_partial_bvec2_vec2
 dEQP-GLES2.functional.shaders.linkage.uniform_struct_partial_ivec2_vec2
 dEQP-GLES2.functional.shaders.linkage.uniform_struct_partial_ivec2_ivec2
-dEQP-GLES2.functional.shaders.linkage.uniform_struct_type_conflict_1
-dEQP-GLES2.functional.shaders.linkage.uniform_struct_type_conflict_2
-dEQP-GLES2.functional.shaders.linkage.uniform_struct_type_conflict_3
-dEQP-GLES2.functional.shaders.linkage.uniform_struct_precision_conflict_1
-dEQP-GLES2.functional.shaders.linkage.uniform_struct_precision_conflict_2
-dEQP-GLES2.functional.shaders.linkage.uniform_struct_precision_conflict_3
-dEQP-GLES2.functional.shaders.linkage.uniform_struct_precision_conflict_4
 dEQP-GLES2.functional.shaders.linkage.uniform_struct_use_case_rip
 dEQP-GLES2.functional.shaders.linkage.uniform_struct_use_case_rip_sans_highp
 dEQP-GLES2.functional.shaders.conversions.scalar_to_scalar.float_to_float_vertex
@@ -1369,8 +1345,6 @@
 dEQP-GLES2.functional.shaders.declarations.invalid_declarations.uniform_in_fragment_main
 dEQP-GLES2.functional.shaders.declarations.invalid_declarations.varying_in_vertex_main
 dEQP-GLES2.functional.shaders.declarations.invalid_declarations.varying_in_fragment_main
-dEQP-GLES2.functional.shaders.declarations.invalid_declarations.invariant_attribute
-dEQP-GLES2.functional.shaders.declarations.invalid_declarations.invariant_uniform
 dEQP-GLES2.functional.shaders.swizzles.vector_swizzles.mediump_vec2_x_vertex
 dEQP-GLES2.functional.shaders.swizzles.vector_swizzles.mediump_vec2_x_fragment
 dEQP-GLES2.functional.shaders.swizzles.vector_swizzles.mediump_vec2_xx_vertex
@@ -2246,8 +2220,6 @@
 dEQP-GLES2.functional.shaders.functions.invalid.return_type_const_overload_fragment
 dEQP-GLES2.functional.shaders.functions.invalid.return_without_value_vertex
 dEQP-GLES2.functional.shaders.functions.invalid.return_without_value_fragment
-dEQP-GLES2.functional.shaders.functions.invalid.local_function_prototype_vertex
-dEQP-GLES2.functional.shaders.functions.invalid.local_function_prototype_fragment
 dEQP-GLES2.functional.shaders.functions.invalid.local_function_definition_vertex
 dEQP-GLES2.functional.shaders.functions.invalid.local_function_definition_fragment
 dEQP-GLES2.functional.shaders.functions.invalid.name_type_conflict_vertex
@@ -2263,10 +2235,6 @@
 dEQP-GLES2.functional.shaders.functions.invalid.uniform_argument_vertex
 dEQP-GLES2.functional.shaders.functions.invalid.uniform_argument_fragment
 dEQP-GLES2.functional.shaders.functions.invalid.attribute_argument_fragment
-dEQP-GLES2.functional.shaders.functions.invalid.uniform_return_type_vertex
-dEQP-GLES2.functional.shaders.functions.invalid.uniform_return_type_fragment
-dEQP-GLES2.functional.shaders.functions.invalid.varying_return_type_vertex
-dEQP-GLES2.functional.shaders.functions.invalid.varying_return_type_fragment
 dEQP-GLES2.functional.shaders.functions.invalid.attribute_return_type_vertex
 dEQP-GLES2.functional.shaders.functions.invalid.attribute_return_type_fragment
 dEQP-GLES2.functional.shaders.functions.invalid.main_invalid_return_type_vertex
@@ -2281,12 +2249,6 @@
 dEQP-GLES2.functional.shaders.functions.invalid.write_const_array_arg_fragment
 dEQP-GLES2.functional.shaders.functions.invalid.modify_const_arg_vertex
 dEQP-GLES2.functional.shaders.functions.invalid.modify_const_arg_fragment
-dEQP-GLES2.functional.shaders.functions.invalid.init_const_local_from_const_arg_vertex
-dEQP-GLES2.functional.shaders.functions.invalid.init_const_local_from_const_arg_fragment
-dEQP-GLES2.functional.shaders.functions.invalid.array_size_from_const_arg_vertex
-dEQP-GLES2.functional.shaders.functions.invalid.array_size_from_const_arg_fragment
-dEQP-GLES2.functional.shaders.functions.invalid.double_declare_vertex
-dEQP-GLES2.functional.shaders.functions.invalid.double_declare_fragment
 dEQP-GLES2.functional.shaders.keywords.keywords.attribute_vertex
 dEQP-GLES2.functional.shaders.keywords.keywords.attribute_fragment
 dEQP-GLES2.functional.shaders.keywords.keywords.const_vertex
@@ -2323,10 +2285,6 @@
 dEQP-GLES2.functional.shaders.keywords.keywords.void_fragment
 dEQP-GLES2.functional.shaders.keywords.keywords.bool_vertex
 dEQP-GLES2.functional.shaders.keywords.keywords.bool_fragment
-dEQP-GLES2.functional.shaders.keywords.keywords.true_vertex
-dEQP-GLES2.functional.shaders.keywords.keywords.true_fragment
-dEQP-GLES2.functional.shaders.keywords.keywords.false_vertex
-dEQP-GLES2.functional.shaders.keywords.keywords.false_fragment
 dEQP-GLES2.functional.shaders.keywords.keywords.lowp_vertex
 dEQP-GLES2.functional.shaders.keywords.keywords.lowp_fragment
 dEQP-GLES2.functional.shaders.keywords.keywords.mediump_vertex
@@ -2341,52 +2299,19 @@
 dEQP-GLES2.functional.shaders.keywords.keywords.discard_fragment
 dEQP-GLES2.functional.shaders.keywords.keywords.return_vertex
 dEQP-GLES2.functional.shaders.keywords.keywords.return_fragment
-dEQP-GLES2.functional.shaders.keywords.keywords.mat2_vertex
-dEQP-GLES2.functional.shaders.keywords.keywords.mat2_fragment
-dEQP-GLES2.functional.shaders.keywords.keywords.mat3_vertex
-dEQP-GLES2.functional.shaders.keywords.keywords.mat3_fragment
-dEQP-GLES2.functional.shaders.keywords.keywords.mat4_vertex
-dEQP-GLES2.functional.shaders.keywords.keywords.mat4_fragment
-dEQP-GLES2.functional.shaders.keywords.keywords.vec2_vertex
-dEQP-GLES2.functional.shaders.keywords.keywords.vec2_fragment
-dEQP-GLES2.functional.shaders.keywords.keywords.vec3_vertex
-dEQP-GLES2.functional.shaders.keywords.keywords.vec3_fragment
-dEQP-GLES2.functional.shaders.keywords.keywords.vec4_vertex
 dEQP-GLES2.functional.shaders.keywords.keywords.vec4_fragment
-dEQP-GLES2.functional.shaders.keywords.keywords.ivec2_vertex
-dEQP-GLES2.functional.shaders.keywords.keywords.ivec2_fragment
-dEQP-GLES2.functional.shaders.keywords.keywords.ivec3_vertex
-dEQP-GLES2.functional.shaders.keywords.keywords.ivec3_fragment
-dEQP-GLES2.functional.shaders.keywords.keywords.ivec4_vertex
-dEQP-GLES2.functional.shaders.keywords.keywords.ivec4_fragment
-dEQP-GLES2.functional.shaders.keywords.keywords.bvec2_vertex
-dEQP-GLES2.functional.shaders.keywords.keywords.bvec2_fragment
-dEQP-GLES2.functional.shaders.keywords.keywords.bvec3_vertex
-dEQP-GLES2.functional.shaders.keywords.keywords.bvec3_fragment
-dEQP-GLES2.functional.shaders.keywords.keywords.bvec4_vertex
-dEQP-GLES2.functional.shaders.keywords.keywords.bvec4_fragment
-dEQP-GLES2.functional.shaders.keywords.keywords.sampler2D_vertex
-dEQP-GLES2.functional.shaders.keywords.keywords.sampler2D_fragment
-dEQP-GLES2.functional.shaders.keywords.keywords.samplerCube_vertex
-dEQP-GLES2.functional.shaders.keywords.keywords.samplerCube_fragment
 dEQP-GLES2.functional.shaders.keywords.keywords.struct_vertex
 dEQP-GLES2.functional.shaders.keywords.keywords.struct_fragment
 dEQP-GLES2.functional.shaders.keywords.reserved_keywords.asm_vertex
 dEQP-GLES2.functional.shaders.keywords.reserved_keywords.asm_fragment
 dEQP-GLES2.functional.shaders.keywords.reserved_keywords.class_vertex
 dEQP-GLES2.functional.shaders.keywords.reserved_keywords.class_fragment
-dEQP-GLES2.functional.shaders.keywords.reserved_keywords.union_vertex
-dEQP-GLES2.functional.shaders.keywords.reserved_keywords.union_fragment
-dEQP-GLES2.functional.shaders.keywords.reserved_keywords.enum_vertex
-dEQP-GLES2.functional.shaders.keywords.reserved_keywords.enum_fragment
 dEQP-GLES2.functional.shaders.keywords.reserved_keywords.typedef_vertex
 dEQP-GLES2.functional.shaders.keywords.reserved_keywords.typedef_fragment
 dEQP-GLES2.functional.shaders.keywords.reserved_keywords.template_vertex
 dEQP-GLES2.functional.shaders.keywords.reserved_keywords.template_fragment
 dEQP-GLES2.functional.shaders.keywords.reserved_keywords.this_vertex
 dEQP-GLES2.functional.shaders.keywords.reserved_keywords.this_fragment
-dEQP-GLES2.functional.shaders.keywords.reserved_keywords.packed_vertex
-dEQP-GLES2.functional.shaders.keywords.reserved_keywords.packed_fragment
 dEQP-GLES2.functional.shaders.keywords.reserved_keywords.goto_vertex
 dEQP-GLES2.functional.shaders.keywords.reserved_keywords.goto_fragment
 dEQP-GLES2.functional.shaders.keywords.reserved_keywords.switch_vertex
@@ -2395,80 +2320,24 @@
 dEQP-GLES2.functional.shaders.keywords.reserved_keywords.default_fragment
 dEQP-GLES2.functional.shaders.keywords.reserved_keywords.inline_vertex
 dEQP-GLES2.functional.shaders.keywords.reserved_keywords.inline_fragment
-dEQP-GLES2.functional.shaders.keywords.reserved_keywords.noinline_vertex
-dEQP-GLES2.functional.shaders.keywords.reserved_keywords.noinline_fragment
 dEQP-GLES2.functional.shaders.keywords.reserved_keywords.volatile_vertex
 dEQP-GLES2.functional.shaders.keywords.reserved_keywords.volatile_fragment
-dEQP-GLES2.functional.shaders.keywords.reserved_keywords.public_vertex
-dEQP-GLES2.functional.shaders.keywords.reserved_keywords.public_fragment
 dEQP-GLES2.functional.shaders.keywords.reserved_keywords.static_vertex
 dEQP-GLES2.functional.shaders.keywords.reserved_keywords.static_fragment
 dEQP-GLES2.functional.shaders.keywords.reserved_keywords.extern_vertex
 dEQP-GLES2.functional.shaders.keywords.reserved_keywords.extern_fragment
-dEQP-GLES2.functional.shaders.keywords.reserved_keywords.external_vertex
-dEQP-GLES2.functional.shaders.keywords.reserved_keywords.external_fragment
 dEQP-GLES2.functional.shaders.keywords.reserved_keywords.interface_vertex
 dEQP-GLES2.functional.shaders.keywords.reserved_keywords.interface_fragment
 dEQP-GLES2.functional.shaders.keywords.reserved_keywords.flat_vertex
 dEQP-GLES2.functional.shaders.keywords.reserved_keywords.flat_fragment
-dEQP-GLES2.functional.shaders.keywords.reserved_keywords.long_vertex
-dEQP-GLES2.functional.shaders.keywords.reserved_keywords.long_fragment
 dEQP-GLES2.functional.shaders.keywords.reserved_keywords.short_vertex
 dEQP-GLES2.functional.shaders.keywords.reserved_keywords.short_fragment
-dEQP-GLES2.functional.shaders.keywords.reserved_keywords.double_vertex
-dEQP-GLES2.functional.shaders.keywords.reserved_keywords.double_fragment
-dEQP-GLES2.functional.shaders.keywords.reserved_keywords.half_vertex
-dEQP-GLES2.functional.shaders.keywords.reserved_keywords.half_fragment
-dEQP-GLES2.functional.shaders.keywords.reserved_keywords.fixed_vertex
-dEQP-GLES2.functional.shaders.keywords.reserved_keywords.fixed_fragment
 dEQP-GLES2.functional.shaders.keywords.reserved_keywords.unsigned_vertex
 dEQP-GLES2.functional.shaders.keywords.reserved_keywords.unsigned_fragment
 dEQP-GLES2.functional.shaders.keywords.reserved_keywords.superp_vertex
 dEQP-GLES2.functional.shaders.keywords.reserved_keywords.superp_fragment
-dEQP-GLES2.functional.shaders.keywords.reserved_keywords.input_vertex
-dEQP-GLES2.functional.shaders.keywords.reserved_keywords.input_fragment
-dEQP-GLES2.functional.shaders.keywords.reserved_keywords.output_vertex
-dEQP-GLES2.functional.shaders.keywords.reserved_keywords.output_fragment
-dEQP-GLES2.functional.shaders.keywords.reserved_keywords.hvec2_vertex
-dEQP-GLES2.functional.shaders.keywords.reserved_keywords.hvec2_fragment
-dEQP-GLES2.functional.shaders.keywords.reserved_keywords.hvec3_vertex
-dEQP-GLES2.functional.shaders.keywords.reserved_keywords.hvec3_fragment
-dEQP-GLES2.functional.shaders.keywords.reserved_keywords.hvec4_vertex
-dEQP-GLES2.functional.shaders.keywords.reserved_keywords.hvec4_fragment
-dEQP-GLES2.functional.shaders.keywords.reserved_keywords.dvec2_vertex
-dEQP-GLES2.functional.shaders.keywords.reserved_keywords.dvec2_fragment
-dEQP-GLES2.functional.shaders.keywords.reserved_keywords.dvec3_vertex
-dEQP-GLES2.functional.shaders.keywords.reserved_keywords.dvec3_fragment
-dEQP-GLES2.functional.shaders.keywords.reserved_keywords.dvec4_vertex
-dEQP-GLES2.functional.shaders.keywords.reserved_keywords.dvec4_fragment
-dEQP-GLES2.functional.shaders.keywords.reserved_keywords.fvec2_vertex
-dEQP-GLES2.functional.shaders.keywords.reserved_keywords.fvec2_fragment
-dEQP-GLES2.functional.shaders.keywords.reserved_keywords.fvec3_vertex
-dEQP-GLES2.functional.shaders.keywords.reserved_keywords.fvec3_fragment
-dEQP-GLES2.functional.shaders.keywords.reserved_keywords.fvec4_vertex
-dEQP-GLES2.functional.shaders.keywords.reserved_keywords.fvec4_fragment
-dEQP-GLES2.functional.shaders.keywords.reserved_keywords.sampler1D_vertex
-dEQP-GLES2.functional.shaders.keywords.reserved_keywords.sampler1D_fragment
-dEQP-GLES2.functional.shaders.keywords.reserved_keywords.sampler3D_vertex
-dEQP-GLES2.functional.shaders.keywords.reserved_keywords.sampler3D_fragment
-dEQP-GLES2.functional.shaders.keywords.reserved_keywords.sampler1DShadow_vertex
-dEQP-GLES2.functional.shaders.keywords.reserved_keywords.sampler1DShadow_fragment
-dEQP-GLES2.functional.shaders.keywords.reserved_keywords.sampler2DShadow_vertex
-dEQP-GLES2.functional.shaders.keywords.reserved_keywords.sampler2DShadow_fragment
-dEQP-GLES2.functional.shaders.keywords.reserved_keywords.sampler2DRect_vertex
-dEQP-GLES2.functional.shaders.keywords.reserved_keywords.sampler2DRect_fragment
-dEQP-GLES2.functional.shaders.keywords.reserved_keywords.sampler3DRect_vertex
-dEQP-GLES2.functional.shaders.keywords.reserved_keywords.sampler3DRect_fragment
-dEQP-GLES2.functional.shaders.keywords.reserved_keywords.sampler2DRectShadow_vertex
-dEQP-GLES2.functional.shaders.keywords.reserved_keywords.sampler2DRectShadow_fragment
-dEQP-GLES2.functional.shaders.keywords.reserved_keywords.sizeof_vertex
-dEQP-GLES2.functional.shaders.keywords.reserved_keywords.sizeof_fragment
-dEQP-GLES2.functional.shaders.keywords.reserved_keywords.cast_vertex
-dEQP-GLES2.functional.shaders.keywords.reserved_keywords.cast_fragment
 dEQP-GLES2.functional.shaders.keywords.reserved_keywords.namespace_vertex
 dEQP-GLES2.functional.shaders.keywords.reserved_keywords.namespace_fragment
-dEQP-GLES2.functional.shaders.keywords.reserved_keywords.using_vertex
-dEQP-GLES2.functional.shaders.keywords.reserved_keywords.using_fragment
 dEQP-GLES2.functional.shaders.keywords.invalid_identifiers.gl_begin_vertex
 dEQP-GLES2.functional.shaders.keywords.invalid_identifiers.gl_begin_fragment
 dEQP-GLES2.functional.shaders.keywords.invalid_identifiers.digit_vertex
@@ -2477,8 +2346,6 @@
 dEQP-GLES2.functional.shaders.keywords.invalid_identifiers.digit_begin_fragment
 dEQP-GLES2.functional.shaders.reserved_operators.operator_modulo_vertex
 dEQP-GLES2.functional.shaders.reserved_operators.operator_modulo_fragment
-dEQP-GLES2.functional.shaders.reserved_operators.operator_bitwise_not_vertex
-dEQP-GLES2.functional.shaders.reserved_operators.operator_bitwise_not_fragment
 dEQP-GLES2.functional.shaders.reserved_operators.operator_bitwise_shift_left_vertex
 dEQP-GLES2.functional.shaders.reserved_operators.operator_bitwise_shift_left_fragment
 dEQP-GLES2.functional.shaders.reserved_operators.operator_bitwise_shift_right_vertex
@@ -2567,8 +2434,6 @@
 dEQP-GLES2.functional.shaders.scoping.valid.function_parameter_hides_function_fragment
 dEQP-GLES2.functional.shaders.scoping.valid.local_variable_in_inner_scope_hides_function_parameter_vertex
 dEQP-GLES2.functional.shaders.scoping.valid.local_variable_in_inner_scope_hides_function_parameter_fragment
-dEQP-GLES2.functional.shaders.scoping.valid.local_variable_hides_function_parameter_vertex
-dEQP-GLES2.functional.shaders.scoping.valid.local_variable_hides_function_parameter_fragment
 dEQP-GLES2.functional.shaders.scoping.invalid.redeclare_global_variable_vertex
 dEQP-GLES2.functional.shaders.scoping.invalid.redeclare_global_variable_fragment
 dEQP-GLES2.functional.shaders.scoping.invalid.redeclare_local_variable_vertex
@@ -2581,14 +2446,10 @@
 dEQP-GLES2.functional.shaders.scoping.invalid.redeclare_for_init_statement_variable_in_for_condition_fragment
 dEQP-GLES2.functional.shaders.scoping.invalid.redeclare_while_condition_variable_vertex
 dEQP-GLES2.functional.shaders.scoping.invalid.redeclare_while_condition_variable_fragment
-dEQP-GLES2.functional.shaders.scoping.invalid.redeclare_function_vertex
-dEQP-GLES2.functional.shaders.scoping.invalid.redeclare_function_fragment
 dEQP-GLES2.functional.shaders.scoping.invalid.redefine_function_vertex
 dEQP-GLES2.functional.shaders.scoping.invalid.redefine_function_fragment
 dEQP-GLES2.functional.shaders.scoping.invalid.redeclare_builtin_vertex
 dEQP-GLES2.functional.shaders.scoping.invalid.redeclare_builtin_fragment
-dEQP-GLES2.functional.shaders.scoping.invalid.redefine_builtin_vertex
-dEQP-GLES2.functional.shaders.scoping.invalid.redefine_builtin_fragment
 dEQP-GLES2.functional.shaders.scoping.invalid.conflict_function_struct_vertex
 dEQP-GLES2.functional.shaders.scoping.invalid.conflict_function_struct_fragment
 dEQP-GLES2.functional.shaders.scoping.invalid.conflict_function_variable_vertex
@@ -10739,30 +10600,14 @@
 dEQP-GLES2.functional.texture.filtering.cube.nearest_mipmap_linear_linear_clamp_etc1
 dEQP-GLES2.functional.texture.filtering.cube.linear_mipmap_linear_nearest_clamp_etc1
 dEQP-GLES2.functional.texture.filtering.cube.linear_mipmap_linear_linear_clamp_etc1
-dEQP-GLES2.functional.texture.mipmap.2d.basic.nearest_nearest_clamp
-dEQP-GLES2.functional.texture.mipmap.2d.basic.nearest_nearest_clamp_non_square
-dEQP-GLES2.functional.texture.mipmap.2d.basic.nearest_nearest_repeat
-dEQP-GLES2.functional.texture.mipmap.2d.basic.nearest_nearest_repeat_non_square
-dEQP-GLES2.functional.texture.mipmap.2d.basic.nearest_nearest_mirror
-dEQP-GLES2.functional.texture.mipmap.2d.basic.nearest_nearest_mirror_non_square
-dEQP-GLES2.functional.texture.mipmap.2d.basic.linear_nearest_clamp
-dEQP-GLES2.functional.texture.mipmap.2d.basic.linear_nearest_clamp_non_square
-dEQP-GLES2.functional.texture.mipmap.2d.basic.linear_nearest_repeat
-dEQP-GLES2.functional.texture.mipmap.2d.basic.linear_nearest_repeat_non_square
-dEQP-GLES2.functional.texture.mipmap.2d.basic.linear_nearest_mirror
-dEQP-GLES2.functional.texture.mipmap.2d.basic.linear_nearest_mirror_non_square
 dEQP-GLES2.functional.texture.mipmap.2d.basic.nearest_linear_clamp
 dEQP-GLES2.functional.texture.mipmap.2d.basic.nearest_linear_clamp_non_square
 dEQP-GLES2.functional.texture.mipmap.2d.basic.nearest_linear_repeat
 dEQP-GLES2.functional.texture.mipmap.2d.basic.nearest_linear_repeat_non_square
 dEQP-GLES2.functional.texture.mipmap.2d.basic.nearest_linear_mirror
 dEQP-GLES2.functional.texture.mipmap.2d.basic.nearest_linear_mirror_non_square
-dEQP-GLES2.functional.texture.mipmap.2d.basic.linear_linear_clamp
-dEQP-GLES2.functional.texture.mipmap.2d.basic.linear_linear_clamp_non_square
 dEQP-GLES2.functional.texture.mipmap.2d.basic.linear_linear_repeat
 dEQP-GLES2.functional.texture.mipmap.2d.basic.linear_linear_repeat_non_square
-dEQP-GLES2.functional.texture.mipmap.2d.basic.linear_linear_mirror
-dEQP-GLES2.functional.texture.mipmap.2d.basic.linear_linear_mirror_non_square
 dEQP-GLES2.functional.texture.mipmap.2d.affine.nearest_nearest_clamp
 dEQP-GLES2.functional.texture.mipmap.2d.affine.nearest_nearest_repeat
 dEQP-GLES2.functional.texture.mipmap.2d.affine.nearest_nearest_mirror
@@ -10772,25 +10617,11 @@
 dEQP-GLES2.functional.texture.mipmap.2d.affine.nearest_linear_clamp
 dEQP-GLES2.functional.texture.mipmap.2d.affine.nearest_linear_repeat
 dEQP-GLES2.functional.texture.mipmap.2d.affine.nearest_linear_mirror
-dEQP-GLES2.functional.texture.mipmap.2d.affine.linear_linear_clamp
 dEQP-GLES2.functional.texture.mipmap.2d.affine.linear_linear_repeat
-dEQP-GLES2.functional.texture.mipmap.2d.affine.linear_linear_mirror
-dEQP-GLES2.functional.texture.mipmap.2d.projected.nearest_nearest_clamp
-dEQP-GLES2.functional.texture.mipmap.2d.projected.nearest_nearest_repeat
-dEQP-GLES2.functional.texture.mipmap.2d.projected.nearest_nearest_mirror
-dEQP-GLES2.functional.texture.mipmap.2d.projected.linear_nearest_clamp
-dEQP-GLES2.functional.texture.mipmap.2d.projected.linear_nearest_repeat
-dEQP-GLES2.functional.texture.mipmap.2d.projected.linear_nearest_mirror
 dEQP-GLES2.functional.texture.mipmap.2d.projected.nearest_linear_clamp
 dEQP-GLES2.functional.texture.mipmap.2d.projected.nearest_linear_repeat
 dEQP-GLES2.functional.texture.mipmap.2d.projected.nearest_linear_mirror
-dEQP-GLES2.functional.texture.mipmap.2d.projected.linear_linear_clamp
 dEQP-GLES2.functional.texture.mipmap.2d.projected.linear_linear_repeat
-dEQP-GLES2.functional.texture.mipmap.2d.projected.linear_linear_mirror
-dEQP-GLES2.functional.texture.mipmap.2d.bias.nearest_nearest
-dEQP-GLES2.functional.texture.mipmap.2d.bias.linear_nearest
-dEQP-GLES2.functional.texture.mipmap.2d.bias.nearest_linear
-dEQP-GLES2.functional.texture.mipmap.2d.bias.linear_linear
 dEQP-GLES2.functional.texture.mipmap.2d.generate.a8_fastest
 dEQP-GLES2.functional.texture.mipmap.2d.generate.a8_nicest
 dEQP-GLES2.functional.texture.mipmap.2d.generate.a8_non_square_fastest
@@ -10823,17 +10654,11 @@
 dEQP-GLES2.functional.texture.mipmap.2d.generate.rgba8888_nicest
 dEQP-GLES2.functional.texture.mipmap.2d.generate.rgba8888_non_square_fastest
 dEQP-GLES2.functional.texture.mipmap.2d.generate.rgba8888_non_square_nicest
-dEQP-GLES2.functional.texture.mipmap.cube.basic.nearest_nearest
 dEQP-GLES2.functional.texture.mipmap.cube.basic.linear_nearest
-dEQP-GLES2.functional.texture.mipmap.cube.basic.nearest_linear
 dEQP-GLES2.functional.texture.mipmap.cube.basic.linear_linear
-dEQP-GLES2.functional.texture.mipmap.cube.projected.nearest_nearest
 dEQP-GLES2.functional.texture.mipmap.cube.projected.linear_nearest
-dEQP-GLES2.functional.texture.mipmap.cube.projected.nearest_linear
 dEQP-GLES2.functional.texture.mipmap.cube.projected.linear_linear
-dEQP-GLES2.functional.texture.mipmap.cube.bias.nearest_nearest
 dEQP-GLES2.functional.texture.mipmap.cube.bias.linear_nearest
-dEQP-GLES2.functional.texture.mipmap.cube.bias.nearest_linear
 dEQP-GLES2.functional.texture.mipmap.cube.bias.linear_linear
 dEQP-GLES2.functional.texture.mipmap.cube.generate.a8_fastest
 dEQP-GLES2.functional.texture.mipmap.cube.generate.a8_nicest
@@ -11279,518 +11104,6 @@
 dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.no_stencil_depth_greater
 dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.no_stencil_depth_notequal
 dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_depth_funcs.no_stencil_no_depth
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_keep_keep
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_keep_zero
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_keep_replace
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_keep_incr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_keep_decr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_keep_invert
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_keep_incr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_keep_decr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_zero_keep
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_zero_zero
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_zero_replace
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_zero_incr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_zero_decr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_zero_invert
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_zero_incr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_zero_decr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_replace_keep
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_replace_zero
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_replace_replace
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_replace_incr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_replace_decr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_replace_invert
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_replace_incr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_replace_decr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_incr_keep
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_incr_zero
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_incr_replace
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_incr_incr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_incr_decr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_incr_invert
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_incr_incr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_incr_decr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_decr_keep
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_decr_zero
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_decr_replace
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_decr_incr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_decr_decr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_decr_invert
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_decr_incr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_decr_decr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_invert_keep
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_invert_zero
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_invert_replace
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_invert_incr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_invert_decr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_invert_invert
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_invert_incr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_invert_decr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_incr_wrap_keep
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_incr_wrap_zero
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_incr_wrap_replace
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_incr_wrap_incr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_incr_wrap_decr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_incr_wrap_invert
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_incr_wrap_incr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_incr_wrap_decr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_decr_wrap_keep
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_decr_wrap_zero
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_decr_wrap_replace
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_decr_wrap_incr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_decr_wrap_decr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_decr_wrap_invert
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_decr_wrap_incr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.keep_decr_wrap_decr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_keep_keep
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_keep_zero
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_keep_replace
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_keep_incr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_keep_decr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_keep_invert
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_keep_incr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_keep_decr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_zero_keep
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_zero_zero
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_zero_replace
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_zero_incr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_zero_decr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_zero_invert
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_zero_incr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_zero_decr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_replace_keep
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_replace_zero
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_replace_replace
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_replace_incr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_replace_decr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_replace_invert
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_replace_incr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_replace_decr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_incr_keep
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_incr_zero
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_incr_replace
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_incr_incr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_incr_decr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_incr_invert
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_incr_incr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_incr_decr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_decr_keep
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_decr_zero
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_decr_replace
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_decr_incr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_decr_decr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_decr_invert
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_decr_incr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_decr_decr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_invert_keep
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_invert_zero
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_invert_replace
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_invert_incr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_invert_decr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_invert_invert
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_invert_incr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_invert_decr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_incr_wrap_keep
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_incr_wrap_zero
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_incr_wrap_replace
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_incr_wrap_incr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_incr_wrap_decr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_incr_wrap_invert
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_incr_wrap_incr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_incr_wrap_decr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_decr_wrap_keep
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_decr_wrap_zero
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_decr_wrap_replace
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_decr_wrap_incr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_decr_wrap_decr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_decr_wrap_invert
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_decr_wrap_incr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.zero_decr_wrap_decr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_keep_keep
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_keep_zero
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_keep_replace
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_keep_incr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_keep_decr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_keep_invert
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_keep_incr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_keep_decr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_zero_keep
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_zero_zero
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_zero_replace
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_zero_incr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_zero_decr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_zero_invert
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_zero_incr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_zero_decr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_replace_keep
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_replace_zero
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_replace_replace
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_replace_incr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_replace_decr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_replace_invert
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_replace_incr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_replace_decr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_incr_keep
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_incr_zero
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_incr_replace
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_incr_incr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_incr_decr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_incr_invert
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_incr_incr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_incr_decr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_decr_keep
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_decr_zero
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_decr_replace
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_decr_incr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_decr_decr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_decr_invert
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_decr_incr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_decr_decr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_invert_keep
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_invert_zero
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_invert_replace
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_invert_incr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_invert_decr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_invert_invert
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_invert_incr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_invert_decr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_incr_wrap_keep
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_incr_wrap_zero
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_incr_wrap_replace
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_incr_wrap_incr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_incr_wrap_decr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_incr_wrap_invert
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_incr_wrap_incr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_incr_wrap_decr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_decr_wrap_keep
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_decr_wrap_zero
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_decr_wrap_replace
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_decr_wrap_incr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_decr_wrap_decr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_decr_wrap_invert
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_decr_wrap_incr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.replace_decr_wrap_decr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_keep_keep
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_keep_zero
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_keep_replace
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_keep_incr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_keep_decr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_keep_invert
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_keep_incr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_keep_decr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_zero_keep
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_zero_zero
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_zero_replace
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_zero_incr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_zero_decr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_zero_invert
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_zero_incr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_zero_decr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_replace_keep
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_replace_zero
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_replace_replace
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_replace_incr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_replace_decr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_replace_invert
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_replace_incr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_replace_decr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_incr_keep
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_incr_zero
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_incr_replace
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_incr_incr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_incr_decr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_incr_invert
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_incr_incr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_incr_decr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_decr_keep
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_decr_zero
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_decr_replace
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_decr_incr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_decr_decr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_decr_invert
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_decr_incr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_decr_decr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_invert_keep
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_invert_zero
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_invert_replace
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_invert_incr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_invert_decr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_invert_invert
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_invert_incr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_invert_decr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_incr_wrap_keep
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_incr_wrap_zero
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_incr_wrap_replace
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_incr_wrap_incr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_incr_wrap_decr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_incr_wrap_invert
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_incr_wrap_incr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_incr_wrap_decr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_decr_wrap_keep
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_decr_wrap_zero
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_decr_wrap_replace
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_decr_wrap_incr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_decr_wrap_decr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_decr_wrap_invert
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_decr_wrap_incr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_decr_wrap_decr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_keep_keep
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_keep_zero
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_keep_replace
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_keep_incr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_keep_decr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_keep_invert
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_keep_incr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_keep_decr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_zero_keep
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_zero_zero
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_zero_replace
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_zero_incr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_zero_decr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_zero_invert
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_zero_incr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_zero_decr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_replace_keep
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_replace_zero
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_replace_replace
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_replace_incr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_replace_decr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_replace_invert
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_replace_incr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_replace_decr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_incr_keep
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_incr_zero
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_incr_replace
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_incr_incr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_incr_decr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_incr_invert
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_incr_incr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_incr_decr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_decr_keep
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_decr_zero
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_decr_replace
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_decr_incr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_decr_decr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_decr_invert
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_decr_incr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_decr_decr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_invert_keep
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_invert_zero
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_invert_replace
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_invert_incr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_invert_decr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_invert_invert
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_invert_incr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_invert_decr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_incr_wrap_keep
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_incr_wrap_zero
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_incr_wrap_replace
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_incr_wrap_incr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_incr_wrap_decr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_incr_wrap_invert
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_incr_wrap_incr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_incr_wrap_decr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_decr_wrap_keep
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_decr_wrap_zero
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_decr_wrap_replace
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_decr_wrap_incr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_decr_wrap_decr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_decr_wrap_invert
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_decr_wrap_incr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_decr_wrap_decr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_keep_keep
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_keep_zero
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_keep_replace
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_keep_incr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_keep_decr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_keep_invert
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_keep_incr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_keep_decr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_zero_keep
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_zero_zero
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_zero_replace
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_zero_incr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_zero_decr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_zero_invert
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_zero_incr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_zero_decr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_replace_keep
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_replace_zero
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_replace_replace
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_replace_incr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_replace_decr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_replace_invert
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_replace_incr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_replace_decr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_incr_keep
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_incr_zero
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_incr_replace
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_incr_incr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_incr_decr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_incr_invert
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_incr_incr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_incr_decr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_decr_keep
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_decr_zero
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_decr_replace
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_decr_incr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_decr_decr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_decr_invert
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_decr_incr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_decr_decr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_invert_keep
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_invert_zero
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_invert_replace
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_invert_incr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_invert_decr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_invert_invert
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_invert_incr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_invert_decr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_incr_wrap_keep
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_incr_wrap_zero
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_incr_wrap_replace
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_incr_wrap_incr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_incr_wrap_decr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_incr_wrap_invert
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_incr_wrap_incr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_incr_wrap_decr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_decr_wrap_keep
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_decr_wrap_zero
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_decr_wrap_replace
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_decr_wrap_incr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_decr_wrap_decr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_decr_wrap_invert
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_decr_wrap_incr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.invert_decr_wrap_decr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_keep_keep
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_keep_zero
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_keep_replace
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_keep_incr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_keep_decr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_keep_invert
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_keep_incr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_keep_decr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_zero_keep
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_zero_zero
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_zero_replace
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_zero_incr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_zero_decr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_zero_invert
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_zero_incr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_zero_decr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_replace_keep
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_replace_zero
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_replace_replace
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_replace_incr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_replace_decr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_replace_invert
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_replace_incr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_replace_decr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_incr_keep
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_incr_zero
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_incr_replace
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_incr_incr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_incr_decr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_incr_invert
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_incr_incr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_incr_decr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_decr_keep
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_decr_zero
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_decr_replace
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_decr_incr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_decr_decr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_decr_invert
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_decr_incr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_decr_decr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_invert_keep
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_invert_zero
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_invert_replace
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_invert_incr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_invert_decr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_invert_invert
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_invert_incr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_invert_decr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_incr_wrap_keep
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_incr_wrap_zero
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_incr_wrap_replace
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_incr_wrap_incr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_incr_wrap_decr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_incr_wrap_invert
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_incr_wrap_incr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_incr_wrap_decr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_decr_wrap_keep
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_decr_wrap_zero
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_decr_wrap_replace
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_decr_wrap_incr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_decr_wrap_decr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_decr_wrap_invert
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_decr_wrap_incr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.incr_wrap_decr_wrap_decr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_keep_keep
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_keep_zero
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_keep_replace
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_keep_incr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_keep_decr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_keep_invert
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_keep_incr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_keep_decr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_zero_keep
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_zero_zero
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_zero_replace
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_zero_incr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_zero_decr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_zero_invert
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_zero_incr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_zero_decr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_replace_keep
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_replace_zero
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_replace_replace
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_replace_incr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_replace_decr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_replace_invert
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_replace_incr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_replace_decr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_incr_keep
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_incr_zero
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_incr_replace
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_incr_incr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_incr_decr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_incr_invert
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_incr_incr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_incr_decr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_decr_keep
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_decr_zero
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_decr_replace
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_decr_incr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_decr_decr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_decr_invert
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_decr_incr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_decr_decr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_invert_keep
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_invert_zero
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_invert_replace
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_invert_incr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_invert_decr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_invert_invert
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_invert_incr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_invert_decr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_incr_wrap_keep
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_incr_wrap_zero
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_incr_wrap_replace
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_incr_wrap_incr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_incr_wrap_decr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_incr_wrap_invert
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_incr_wrap_incr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_incr_wrap_decr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_decr_wrap_keep
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_decr_wrap_zero
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_decr_wrap_replace
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_decr_wrap_incr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_decr_wrap_decr
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_decr_wrap_invert
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_decr_wrap_incr_wrap
-dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.decr_wrap_decr_wrap_decr_wrap
 dEQP-GLES2.functional.fragment_ops.depth_stencil.write_mask.depth
 dEQP-GLES2.functional.fragment_ops.depth_stencil.write_mask.stencil
 dEQP-GLES2.functional.fragment_ops.depth_stencil.write_mask.both
@@ -14625,28 +13938,21 @@
 dEQP-GLES2.functional.attribute_location.bind_max_attributes.mat3
 dEQP-GLES2.functional.attribute_location.bind_max_attributes.mat4
 dEQP-GLES2.functional.attribute_location.bind_aliasing.cond_float
-dEQP-GLES2.functional.attribute_location.bind_aliasing.max_cond_float
 dEQP-GLES2.functional.attribute_location.bind_aliasing.max_inactive_float
 dEQP-GLES2.functional.attribute_location.bind_aliasing.cond_vec2
-dEQP-GLES2.functional.attribute_location.bind_aliasing.max_cond_vec2
 dEQP-GLES2.functional.attribute_location.bind_aliasing.max_inactive_vec2
 dEQP-GLES2.functional.attribute_location.bind_aliasing.cond_vec3
-dEQP-GLES2.functional.attribute_location.bind_aliasing.max_cond_vec3
 dEQP-GLES2.functional.attribute_location.bind_aliasing.max_inactive_vec3
 dEQP-GLES2.functional.attribute_location.bind_aliasing.cond_vec4
-dEQP-GLES2.functional.attribute_location.bind_aliasing.max_cond_vec4
 dEQP-GLES2.functional.attribute_location.bind_aliasing.max_inactive_vec4
 dEQP-GLES2.functional.attribute_location.bind_aliasing.cond_mat2
 dEQP-GLES2.functional.attribute_location.bind_aliasing.cond_mat2_offset_1
-dEQP-GLES2.functional.attribute_location.bind_aliasing.max_cond_mat2
 dEQP-GLES2.functional.attribute_location.bind_aliasing.max_inactive_mat2
 dEQP-GLES2.functional.attribute_location.bind_aliasing.cond_mat3
 dEQP-GLES2.functional.attribute_location.bind_aliasing.cond_mat3_offset_1
-dEQP-GLES2.functional.attribute_location.bind_aliasing.max_cond_mat3
 dEQP-GLES2.functional.attribute_location.bind_aliasing.max_inactive_mat3
 dEQP-GLES2.functional.attribute_location.bind_aliasing.cond_mat4
 dEQP-GLES2.functional.attribute_location.bind_aliasing.cond_mat4_offset_1
-dEQP-GLES2.functional.attribute_location.bind_aliasing.max_cond_mat4
 dEQP-GLES2.functional.attribute_location.bind_aliasing.max_inactive_mat4
 dEQP-GLES2.functional.attribute_location.bind_hole.float
 dEQP-GLES2.functional.attribute_location.bind_hole.vec2
@@ -14806,9 +14112,7 @@
 dEQP-GLES2.functional.uniform_api.info_query.nested_structs_arrays.float_vec4_vertex
 dEQP-GLES2.functional.uniform_api.info_query.nested_structs_arrays.float_vec4_fragment
 dEQP-GLES2.functional.uniform_api.info_query.nested_structs_arrays.float_vec4_both
-dEQP-GLES2.functional.uniform_api.info_query.nested_structs_arrays.mat4_mat2_vertex
 dEQP-GLES2.functional.uniform_api.info_query.nested_structs_arrays.mat4_mat2_fragment
-dEQP-GLES2.functional.uniform_api.info_query.nested_structs_arrays.mat4_mat2_both
 dEQP-GLES2.functional.uniform_api.info_query.nested_structs_arrays.int_ivec4_vertex
 dEQP-GLES2.functional.uniform_api.info_query.nested_structs_arrays.int_ivec4_fragment
 dEQP-GLES2.functional.uniform_api.info_query.nested_structs_arrays.int_ivec4_both
@@ -14983,9 +14287,7 @@
 dEQP-GLES2.functional.uniform_api.value.initial.get_uniform.nested_structs_arrays.float_vec4_vertex
 dEQP-GLES2.functional.uniform_api.value.initial.get_uniform.nested_structs_arrays.float_vec4_fragment
 dEQP-GLES2.functional.uniform_api.value.initial.get_uniform.nested_structs_arrays.float_vec4_both
-dEQP-GLES2.functional.uniform_api.value.initial.get_uniform.nested_structs_arrays.mat4_mat2_vertex
 dEQP-GLES2.functional.uniform_api.value.initial.get_uniform.nested_structs_arrays.mat4_mat2_fragment
-dEQP-GLES2.functional.uniform_api.value.initial.get_uniform.nested_structs_arrays.mat4_mat2_both
 dEQP-GLES2.functional.uniform_api.value.initial.get_uniform.nested_structs_arrays.int_ivec4_vertex
 dEQP-GLES2.functional.uniform_api.value.initial.get_uniform.nested_structs_arrays.int_ivec4_fragment
 dEQP-GLES2.functional.uniform_api.value.initial.get_uniform.nested_structs_arrays.int_ivec4_both
@@ -15118,9 +14420,7 @@
 dEQP-GLES2.functional.uniform_api.value.initial.render.nested_structs_arrays.float_vec4_vertex
 dEQP-GLES2.functional.uniform_api.value.initial.render.nested_structs_arrays.float_vec4_fragment
 dEQP-GLES2.functional.uniform_api.value.initial.render.nested_structs_arrays.float_vec4_both
-dEQP-GLES2.functional.uniform_api.value.initial.render.nested_structs_arrays.mat4_mat2_vertex
 dEQP-GLES2.functional.uniform_api.value.initial.render.nested_structs_arrays.mat4_mat2_fragment
-dEQP-GLES2.functional.uniform_api.value.initial.render.nested_structs_arrays.mat4_mat2_both
 dEQP-GLES2.functional.uniform_api.value.initial.render.nested_structs_arrays.int_ivec4_vertex
 dEQP-GLES2.functional.uniform_api.value.initial.render.nested_structs_arrays.int_ivec4_fragment
 dEQP-GLES2.functional.uniform_api.value.initial.render.nested_structs_arrays.int_ivec4_both
@@ -15307,9 +14607,7 @@
 dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.get_uniform.nested_structs_arrays.float_vec4_vertex
 dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.get_uniform.nested_structs_arrays.float_vec4_fragment
 dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.get_uniform.nested_structs_arrays.float_vec4_both
-dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.get_uniform.nested_structs_arrays.mat4_mat2_vertex
 dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.get_uniform.nested_structs_arrays.mat4_mat2_fragment
-dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.get_uniform.nested_structs_arrays.mat4_mat2_both
 dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.get_uniform.nested_structs_arrays.int_ivec4_vertex
 dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.get_uniform.nested_structs_arrays.int_ivec4_fragment
 dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.get_uniform.nested_structs_arrays.int_ivec4_both
@@ -15451,9 +14749,7 @@
 dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.nested_structs_arrays.float_vec4_vertex
 dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.nested_structs_arrays.float_vec4_fragment
 dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.nested_structs_arrays.float_vec4_both
-dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.nested_structs_arrays.mat4_mat2_vertex
 dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.nested_structs_arrays.mat4_mat2_fragment
-dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.nested_structs_arrays.mat4_mat2_both
 dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.nested_structs_arrays.int_ivec4_vertex
 dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.nested_structs_arrays.int_ivec4_fragment
 dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.nested_structs_arrays.int_ivec4_both
@@ -17006,18 +16302,12 @@
 dEQP-GLES2.functional.clipping.triangle_vertex.clip_three.clip_neg_x_pos_y_pos_z_and_pos_x_neg_y_neg_z_and_pos_x_pos_y_neg_z
 dEQP-GLES2.functional.polygon_offset.default_enable
 dEQP-GLES2.functional.polygon_offset.default_displacement_with_units
-dEQP-GLES2.functional.polygon_offset.default_render_with_units
-dEQP-GLES2.functional.polygon_offset.default_result_depth_clamp
 dEQP-GLES2.functional.polygon_offset.default_render_with_factor
 dEQP-GLES2.functional.polygon_offset.default_factor_0_slope
-dEQP-GLES2.functional.polygon_offset.default_factor_1_slope
 dEQP-GLES2.functional.polygon_offset.fixed16_enable
 dEQP-GLES2.functional.polygon_offset.fixed16_displacement_with_units
-dEQP-GLES2.functional.polygon_offset.fixed16_render_with_units
-dEQP-GLES2.functional.polygon_offset.fixed16_result_depth_clamp
 dEQP-GLES2.functional.polygon_offset.fixed16_render_with_factor
 dEQP-GLES2.functional.polygon_offset.fixed16_factor_0_slope
-dEQP-GLES2.functional.polygon_offset.fixed16_factor_1_slope
 dEQP-GLES2.functional.draw.draw_arrays.first.first_0
 dEQP-GLES2.functional.draw.draw_arrays.first.first_1
 dEQP-GLES2.functional.draw.draw_arrays.first.first_17
diff --git a/external/openglcts/data/mustpass/gles/aosp_mustpass/master/gles3-master.txt b/external/openglcts/data/mustpass/gles/aosp_mustpass/master/gles3-master.txt
index 488144d..ccc6e6a 100644
--- a/external/openglcts/data/mustpass/gles/aosp_mustpass/master/gles3-master.txt
+++ b/external/openglcts/data/mustpass/gles/aosp_mustpass/master/gles3-master.txt
@@ -951,8 +951,6 @@
 dEQP-GLES3.functional.shaders.preprocessor.predefined_macros.gl_es_2_fragment
 dEQP-GLES3.functional.shaders.preprocessor.predefined_macros.line_1_vertex
 dEQP-GLES3.functional.shaders.preprocessor.predefined_macros.line_1_fragment
-dEQP-GLES3.functional.shaders.preprocessor.predefined_macros.line_2_vertex
-dEQP-GLES3.functional.shaders.preprocessor.predefined_macros.line_2_fragment
 dEQP-GLES3.functional.shaders.preprocessor.predefined_macros.file_vertex
 dEQP-GLES3.functional.shaders.preprocessor.predefined_macros.file_fragment
 dEQP-GLES3.functional.shaders.preprocessor.predefined_macros.if_gl_es_vertex
@@ -25095,9 +25093,7 @@
 dEQP-GLES3.functional.texture.mipmap.cube.min_lod.nearest_linear
 dEQP-GLES3.functional.texture.mipmap.cube.min_lod.linear_linear
 dEQP-GLES3.functional.texture.mipmap.cube.max_lod.nearest_nearest
-dEQP-GLES3.functional.texture.mipmap.cube.max_lod.linear_nearest
 dEQP-GLES3.functional.texture.mipmap.cube.max_lod.nearest_linear
-dEQP-GLES3.functional.texture.mipmap.cube.max_lod.linear_linear
 dEQP-GLES3.functional.texture.mipmap.cube.base_level.nearest_nearest
 dEQP-GLES3.functional.texture.mipmap.cube.base_level.linear_nearest
 dEQP-GLES3.functional.texture.mipmap.cube.base_level.nearest_linear
@@ -32092,20 +32088,6 @@
 dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_min_reverse_dst_y
 dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_min_reverse_src_dst_x
 dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_min_reverse_src_dst_y
-dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_out_of_bounds_mag
-dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_out_of_bounds_mag_reverse_src_x
-dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_out_of_bounds_mag_reverse_src_y
-dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_out_of_bounds_mag_reverse_dst_x
-dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_out_of_bounds_mag_reverse_dst_y
-dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_out_of_bounds_mag_reverse_src_dst_x
-dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_out_of_bounds_mag_reverse_src_dst_y
-dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_out_of_bounds_min
-dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_out_of_bounds_min_reverse_src_x
-dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_out_of_bounds_min_reverse_src_y
-dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_out_of_bounds_min_reverse_dst_x
-dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_out_of_bounds_min_reverse_dst_y
-dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_out_of_bounds_min_reverse_src_dst_x
-dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_out_of_bounds_min_reverse_src_dst_y
 dEQP-GLES3.functional.fbo.blit.conversion.rgba32i_to_rgba32i
 dEQP-GLES3.functional.fbo.blit.conversion.rgba32i_to_rgba16i
 dEQP-GLES3.functional.fbo.blit.conversion.rgba32i_to_rgba8i
@@ -35258,6 +35240,198 @@
 dEQP-GLES3.functional.ubo.single_nested_struct.single_buffer.std140_instance_array_vertex
 dEQP-GLES3.functional.ubo.single_nested_struct.single_buffer.std140_instance_array_fragment
 dEQP-GLES3.functional.ubo.single_nested_struct.single_buffer.std140_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_row_major_matrixarray_row_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_row_major_matrixarray_row_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_row_major_matrixarray_row_major_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_row_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_row_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_row_major_matrixarray_row_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_row_major_matrixarray_column_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_row_major_matrixarray_column_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_row_major_matrixarray_column_major_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_row_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_row_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_row_major_matrixarray_column_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_column_major_matrixarray_row_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_column_major_matrixarray_row_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_column_major_matrixarray_row_major_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_column_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_column_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_column_major_matrixarray_row_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_column_major_matrixarray_column_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_column_major_matrixarray_column_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_column_major_matrixarray_column_major_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_column_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_column_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_row_major_matrix_column_major_matrixarray_column_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_row_major_matrixarray_row_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_row_major_matrixarray_row_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_row_major_matrixarray_row_major_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_row_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_row_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_row_major_matrixarray_row_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_row_major_matrixarray_column_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_row_major_matrixarray_column_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_row_major_matrixarray_column_major_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_row_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_row_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_row_major_matrixarray_column_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_column_major_matrixarray_row_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_column_major_matrixarray_row_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_column_major_matrixarray_row_major_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_column_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_column_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_column_major_matrixarray_row_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_column_major_matrixarray_column_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_column_major_matrixarray_column_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_column_major_matrixarray_column_major_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_column_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_column_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.shared_block_column_major_matrix_column_major_matrixarray_column_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_row_major_matrix_row_major_matrixarray_row_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_row_major_matrix_row_major_matrixarray_row_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_row_major_matrix_row_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_row_major_matrix_row_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_row_major_matrix_row_major_matrixarray_column_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_row_major_matrix_row_major_matrixarray_column_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_row_major_matrix_row_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_row_major_matrix_row_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_row_major_matrix_column_major_matrixarray_row_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_row_major_matrix_column_major_matrixarray_row_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_row_major_matrix_column_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_row_major_matrix_column_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_row_major_matrix_column_major_matrixarray_column_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_row_major_matrix_column_major_matrixarray_column_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_row_major_matrix_column_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_row_major_matrix_column_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_column_major_matrix_row_major_matrixarray_row_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_column_major_matrix_row_major_matrixarray_row_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_column_major_matrix_row_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_column_major_matrix_row_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_column_major_matrix_row_major_matrixarray_column_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_column_major_matrix_row_major_matrixarray_column_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_column_major_matrix_row_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_column_major_matrix_row_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_column_major_matrix_column_major_matrixarray_row_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_column_major_matrix_column_major_matrixarray_row_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_column_major_matrix_column_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_column_major_matrix_column_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_column_major_matrix_column_major_matrixarray_column_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_column_major_matrix_column_major_matrixarray_column_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_column_major_matrix_column_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.packed_block_column_major_matrix_column_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_row_major_matrixarray_row_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_row_major_matrixarray_row_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_row_major_matrixarray_row_major_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_row_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_row_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_row_major_matrixarray_row_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_row_major_matrixarray_column_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_row_major_matrixarray_column_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_row_major_matrixarray_column_major_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_row_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_row_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_row_major_matrixarray_column_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_column_major_matrixarray_row_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_column_major_matrixarray_row_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_column_major_matrixarray_row_major_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_column_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_column_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_column_major_matrixarray_row_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_column_major_matrixarray_column_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_column_major_matrixarray_column_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_column_major_matrixarray_column_major_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_column_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_column_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_row_major_matrix_column_major_matrixarray_column_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_row_major_matrixarray_row_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_row_major_matrixarray_row_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_row_major_matrixarray_row_major_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_row_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_row_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_row_major_matrixarray_row_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_row_major_matrixarray_column_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_row_major_matrixarray_column_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_row_major_matrixarray_column_major_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_row_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_row_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_row_major_matrixarray_column_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_column_major_matrixarray_row_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_column_major_matrixarray_row_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_column_major_matrixarray_row_major_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_column_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_column_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_column_major_matrixarray_row_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_column_major_matrixarray_column_major_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_column_major_matrixarray_column_major_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_column_major_matrixarray_column_major_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_column_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_column_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.per_block_buffer.std140_block_column_major_matrix_column_major_matrixarray_column_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_row_major_matrix_row_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_row_major_matrix_row_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_row_major_matrix_row_major_matrixarray_row_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_row_major_matrix_row_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_row_major_matrix_row_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_row_major_matrix_row_major_matrixarray_column_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_row_major_matrix_column_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_row_major_matrix_column_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_row_major_matrix_column_major_matrixarray_row_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_row_major_matrix_column_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_row_major_matrix_column_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_row_major_matrix_column_major_matrixarray_column_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_column_major_matrix_row_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_column_major_matrix_row_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_column_major_matrix_row_major_matrixarray_row_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_column_major_matrix_row_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_column_major_matrix_row_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_column_major_matrix_row_major_matrixarray_column_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_column_major_matrix_column_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_column_major_matrix_column_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_column_major_matrix_column_major_matrixarray_row_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_column_major_matrix_column_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_column_major_matrix_column_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.shared_block_column_major_matrix_column_major_matrixarray_column_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.packed_block_row_major_matrix_row_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.packed_block_row_major_matrix_row_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.packed_block_row_major_matrix_row_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.packed_block_row_major_matrix_row_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.packed_block_row_major_matrix_column_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.packed_block_row_major_matrix_column_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.packed_block_row_major_matrix_column_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.packed_block_row_major_matrix_column_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.packed_block_column_major_matrix_row_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.packed_block_column_major_matrix_row_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.packed_block_column_major_matrix_row_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.packed_block_column_major_matrix_row_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.packed_block_column_major_matrix_column_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.packed_block_column_major_matrix_column_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.packed_block_column_major_matrix_column_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.packed_block_column_major_matrix_column_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_row_major_matrix_row_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_row_major_matrix_row_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_row_major_matrix_row_major_matrixarray_row_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_row_major_matrix_row_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_row_major_matrix_row_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_row_major_matrix_row_major_matrixarray_column_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_row_major_matrix_column_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_row_major_matrix_column_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_row_major_matrix_column_major_matrixarray_row_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_row_major_matrix_column_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_row_major_matrix_column_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_row_major_matrix_column_major_matrixarray_column_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_column_major_matrix_row_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_column_major_matrix_row_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_column_major_matrix_row_major_matrixarray_row_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_column_major_matrix_row_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_column_major_matrix_row_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_column_major_matrix_row_major_matrixarray_column_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_column_major_matrix_column_major_matrixarray_row_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_column_major_matrix_column_major_matrixarray_row_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_column_major_matrix_column_major_matrixarray_row_major_instance_array_both
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_column_major_matrix_column_major_matrixarray_column_major_instance_array_vertex
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_column_major_matrix_column_major_matrixarray_column_major_instance_array_fragment
+dEQP-GLES3.functional.ubo.single_nested_struct_mixed_matrix_packing.single_buffer.std140_block_column_major_matrix_column_major_matrixarray_column_major_instance_array_both
 dEQP-GLES3.functional.ubo.single_nested_struct_array.per_block_buffer.shared_vertex
 dEQP-GLES3.functional.ubo.single_nested_struct_array.per_block_buffer.shared_fragment
 dEQP-GLES3.functional.ubo.single_nested_struct_array.per_block_buffer.shared_both
@@ -43704,31 +43878,23 @@
 dEQP-GLES3.functional.polygon_offset.default_enable
 dEQP-GLES3.functional.polygon_offset.default_displacement_with_units
 dEQP-GLES3.functional.polygon_offset.default_render_with_units
-dEQP-GLES3.functional.polygon_offset.default_result_depth_clamp
 dEQP-GLES3.functional.polygon_offset.default_render_with_factor
 dEQP-GLES3.functional.polygon_offset.default_factor_0_slope
-dEQP-GLES3.functional.polygon_offset.default_factor_1_slope
 dEQP-GLES3.functional.polygon_offset.fixed16_enable
 dEQP-GLES3.functional.polygon_offset.fixed16_displacement_with_units
 dEQP-GLES3.functional.polygon_offset.fixed16_render_with_units
-dEQP-GLES3.functional.polygon_offset.fixed16_result_depth_clamp
 dEQP-GLES3.functional.polygon_offset.fixed16_render_with_factor
 dEQP-GLES3.functional.polygon_offset.fixed16_factor_0_slope
-dEQP-GLES3.functional.polygon_offset.fixed16_factor_1_slope
 dEQP-GLES3.functional.polygon_offset.fixed24_enable
 dEQP-GLES3.functional.polygon_offset.fixed24_displacement_with_units
 dEQP-GLES3.functional.polygon_offset.fixed24_render_with_units
-dEQP-GLES3.functional.polygon_offset.fixed24_result_depth_clamp
 dEQP-GLES3.functional.polygon_offset.fixed24_render_with_factor
 dEQP-GLES3.functional.polygon_offset.fixed24_factor_0_slope
-dEQP-GLES3.functional.polygon_offset.fixed24_factor_1_slope
 dEQP-GLES3.functional.polygon_offset.float32_enable
 dEQP-GLES3.functional.polygon_offset.float32_displacement_with_units
 dEQP-GLES3.functional.polygon_offset.float32_render_with_units
-dEQP-GLES3.functional.polygon_offset.float32_result_depth_clamp
 dEQP-GLES3.functional.polygon_offset.float32_render_with_factor
 dEQP-GLES3.functional.polygon_offset.float32_factor_0_slope
-dEQP-GLES3.functional.polygon_offset.float32_factor_1_slope
 dEQP-GLES3.functional.draw.draw_arrays.first.first_1
 dEQP-GLES3.functional.draw.draw_arrays.first.first_3
 dEQP-GLES3.functional.draw.draw_arrays.first.first_17
diff --git a/external/openglcts/data/mustpass/gles/aosp_mustpass/master/gles3-multisample.txt b/external/openglcts/data/mustpass/gles/aosp_mustpass/master/gles3-multisample.txt
index e47f0aa..6ab9344 100644
--- a/external/openglcts/data/mustpass/gles/aosp_mustpass/master/gles3-multisample.txt
+++ b/external/openglcts/data/mustpass/gles/aosp_mustpass/master/gles3-multisample.txt
@@ -4631,7 +4631,5 @@
 dEQP-GLES3.functional.polygon_offset.default_enable
 dEQP-GLES3.functional.polygon_offset.default_displacement_with_units
 dEQP-GLES3.functional.polygon_offset.default_render_with_units
-dEQP-GLES3.functional.polygon_offset.default_result_depth_clamp
 dEQP-GLES3.functional.polygon_offset.default_render_with_factor
 dEQP-GLES3.functional.polygon_offset.default_factor_0_slope
-dEQP-GLES3.functional.polygon_offset.default_factor_1_slope
diff --git a/external/openglcts/data/mustpass/gles/aosp_mustpass/master/gles31-master.txt b/external/openglcts/data/mustpass/gles/aosp_mustpass/master/gles31-master.txt
index 0695f2a..8f6b995 100644
--- a/external/openglcts/data/mustpass/gles/aosp_mustpass/master/gles31-master.txt
+++ b/external/openglcts/data/mustpass/gles/aosp_mustpass/master/gles31-master.txt
@@ -2585,10 +2585,6 @@
 dEQP-GLES31.functional.shaders.builtin_functions.precision.min.mediump_compute.vec2
 dEQP-GLES31.functional.shaders.builtin_functions.precision.min.mediump_compute.vec3
 dEQP-GLES31.functional.shaders.builtin_functions.precision.min.mediump_compute.vec4
-dEQP-GLES31.functional.shaders.builtin_functions.precision.min.highp_compute.scalar
-dEQP-GLES31.functional.shaders.builtin_functions.precision.min.highp_compute.vec2
-dEQP-GLES31.functional.shaders.builtin_functions.precision.min.highp_compute.vec3
-dEQP-GLES31.functional.shaders.builtin_functions.precision.min.highp_compute.vec4
 dEQP-GLES31.functional.shaders.builtin_functions.precision.max.lowp_compute.scalar
 dEQP-GLES31.functional.shaders.builtin_functions.precision.max.lowp_compute.vec2
 dEQP-GLES31.functional.shaders.builtin_functions.precision.max.lowp_compute.vec3
@@ -2597,10 +2593,6 @@
 dEQP-GLES31.functional.shaders.builtin_functions.precision.max.mediump_compute.vec2
 dEQP-GLES31.functional.shaders.builtin_functions.precision.max.mediump_compute.vec3
 dEQP-GLES31.functional.shaders.builtin_functions.precision.max.mediump_compute.vec4
-dEQP-GLES31.functional.shaders.builtin_functions.precision.max.highp_compute.scalar
-dEQP-GLES31.functional.shaders.builtin_functions.precision.max.highp_compute.vec2
-dEQP-GLES31.functional.shaders.builtin_functions.precision.max.highp_compute.vec3
-dEQP-GLES31.functional.shaders.builtin_functions.precision.max.highp_compute.vec4
 dEQP-GLES31.functional.shaders.builtin_functions.precision.clamp.lowp_compute.scalar
 dEQP-GLES31.functional.shaders.builtin_functions.precision.clamp.lowp_compute.vec2
 dEQP-GLES31.functional.shaders.builtin_functions.precision.clamp.lowp_compute.vec3
@@ -2609,10 +2601,6 @@
 dEQP-GLES31.functional.shaders.builtin_functions.precision.clamp.mediump_compute.vec2
 dEQP-GLES31.functional.shaders.builtin_functions.precision.clamp.mediump_compute.vec3
 dEQP-GLES31.functional.shaders.builtin_functions.precision.clamp.mediump_compute.vec4
-dEQP-GLES31.functional.shaders.builtin_functions.precision.clamp.highp_compute.scalar
-dEQP-GLES31.functional.shaders.builtin_functions.precision.clamp.highp_compute.vec2
-dEQP-GLES31.functional.shaders.builtin_functions.precision.clamp.highp_compute.vec3
-dEQP-GLES31.functional.shaders.builtin_functions.precision.clamp.highp_compute.vec4
 dEQP-GLES31.functional.shaders.builtin_functions.precision.mix.lowp_compute.scalar
 dEQP-GLES31.functional.shaders.builtin_functions.precision.mix.lowp_compute.vec2
 dEQP-GLES31.functional.shaders.builtin_functions.precision.mix.lowp_compute.vec3
@@ -13273,18 +13261,6 @@
 dEQP-GLES31.functional.texture.gather.basic.cube.rgba8i.filter_mode.min_nearest_mipmap_nearest_mag_nearest
 dEQP-GLES31.functional.texture.gather.basic.cube.rgba8i.base_level.level_1
 dEQP-GLES31.functional.texture.gather.basic.cube.rgba8i.base_level.level_2
-dEQP-GLES31.functional.texture.gather.basic.cube.depth32f.size_pot.compare_less.clamp_to_edge_repeat
-dEQP-GLES31.functional.texture.gather.basic.cube.depth32f.size_pot.compare_less.repeat_mirrored_repeat
-dEQP-GLES31.functional.texture.gather.basic.cube.depth32f.size_pot.compare_less.mirrored_repeat_clamp_to_edge
-dEQP-GLES31.functional.texture.gather.basic.cube.depth32f.size_pot.compare_greater.clamp_to_edge_repeat
-dEQP-GLES31.functional.texture.gather.basic.cube.depth32f.size_pot.compare_greater.repeat_mirrored_repeat
-dEQP-GLES31.functional.texture.gather.basic.cube.depth32f.size_pot.compare_greater.mirrored_repeat_clamp_to_edge
-dEQP-GLES31.functional.texture.gather.basic.cube.depth32f.size_npot.compare_less.clamp_to_edge_repeat
-dEQP-GLES31.functional.texture.gather.basic.cube.depth32f.size_npot.compare_less.repeat_mirrored_repeat
-dEQP-GLES31.functional.texture.gather.basic.cube.depth32f.size_npot.compare_less.mirrored_repeat_clamp_to_edge
-dEQP-GLES31.functional.texture.gather.basic.cube.depth32f.size_npot.compare_greater.clamp_to_edge_repeat
-dEQP-GLES31.functional.texture.gather.basic.cube.depth32f.size_npot.compare_greater.repeat_mirrored_repeat
-dEQP-GLES31.functional.texture.gather.basic.cube.depth32f.size_npot.compare_greater.mirrored_repeat_clamp_to_edge
 dEQP-GLES31.functional.texture.gather.basic.cube.depth32f.no_corners.size_pot.compare_less.clamp_to_edge_repeat
 dEQP-GLES31.functional.texture.gather.basic.cube.depth32f.no_corners.size_pot.compare_less.repeat_mirrored_repeat
 dEQP-GLES31.functional.texture.gather.basic.cube.depth32f.no_corners.size_pot.compare_less.mirrored_repeat_clamp_to_edge
@@ -13297,13 +13273,6 @@
 dEQP-GLES31.functional.texture.gather.basic.cube.depth32f.no_corners.size_npot.compare_greater.clamp_to_edge_repeat
 dEQP-GLES31.functional.texture.gather.basic.cube.depth32f.no_corners.size_npot.compare_greater.repeat_mirrored_repeat
 dEQP-GLES31.functional.texture.gather.basic.cube.depth32f.no_corners.size_npot.compare_greater.mirrored_repeat_clamp_to_edge
-dEQP-GLES31.functional.texture.gather.basic.cube.depth32f.filter_mode.min_linear_mag_linear
-dEQP-GLES31.functional.texture.gather.basic.cube.depth32f.filter_mode.min_nearest_mipmap_nearest_mag_linear
-dEQP-GLES31.functional.texture.gather.basic.cube.depth32f.filter_mode.min_nearest_mipmap_linear_mag_linear
-dEQP-GLES31.functional.texture.gather.basic.cube.depth32f.filter_mode.min_linear_mipmap_nearest_mag_linear
-dEQP-GLES31.functional.texture.gather.basic.cube.depth32f.filter_mode.min_linear_mipmap_linear_mag_linear
-dEQP-GLES31.functional.texture.gather.basic.cube.depth32f.base_level.level_1
-dEQP-GLES31.functional.texture.gather.basic.cube.depth32f.base_level.level_2
 dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d.rgba8.size_pot.clamp_to_edge_repeat
 dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d.rgba8.size_pot.repeat_mirrored_repeat
 dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d.rgba8.size_pot.mirrored_repeat_clamp_to_edge
diff --git a/external/openglcts/data/mustpass/gles/aosp_mustpass/master/gles31-multisample.txt b/external/openglcts/data/mustpass/gles/aosp_mustpass/master/gles31-multisample.txt
index 44d4428..970680d 100644
--- a/external/openglcts/data/mustpass/gles/aosp_mustpass/master/gles31-multisample.txt
+++ b/external/openglcts/data/mustpass/gles/aosp_mustpass/master/gles31-multisample.txt
@@ -44,7 +44,6 @@
 dEQP-GLES31.functional.draw_indirect.compute_interop.large.drawelements_separate_grid_100x100_drawcount_200
 dEQP-GLES31.functional.draw_indirect.compute_interop.large.drawelements_separate_grid_200x200_drawcount_800
 dEQP-GLES31.functional.draw_indirect.compute_interop.large.drawelements_separate_grid_500x500_drawcount_2500
-dEQP-GLES31.functional.draw_indirect.compute_interop.large.drawelements_separate_grid_1000x1000_drawcount_5000
 dEQP-GLES31.functional.draw_indirect.compute_interop.large.drawelements_combined_grid_100x100_drawcount_1
 dEQP-GLES31.functional.draw_indirect.compute_interop.large.drawelements_combined_grid_200x200_drawcount_1
 dEQP-GLES31.functional.draw_indirect.compute_interop.large.drawelements_combined_grid_500x500_drawcount_1
@@ -60,7 +59,6 @@
 dEQP-GLES31.functional.draw_indirect.compute_interop.large.drawelements_combined_grid_100x100_drawcount_200
 dEQP-GLES31.functional.draw_indirect.compute_interop.large.drawelements_combined_grid_200x200_drawcount_800
 dEQP-GLES31.functional.draw_indirect.compute_interop.large.drawelements_combined_grid_500x500_drawcount_2500
-dEQP-GLES31.functional.draw_indirect.compute_interop.large.drawelements_combined_grid_1000x1000_drawcount_5000
 dEQP-GLES31.functional.image_load_store.early_fragment_tests.no_early_fragment_tests_depth
 dEQP-GLES31.functional.image_load_store.early_fragment_tests.no_early_fragment_tests_stencil
 dEQP-GLES31.functional.image_load_store.early_fragment_tests.early_fragment_tests_depth
diff --git a/external/openglcts/data/mustpass/gles/aosp_mustpass/master/src/gles2-driver-issues.txt b/external/openglcts/data/mustpass/gles/aosp_mustpass/master/src/gles2-driver-issues.txt
new file mode 100644
index 0000000..359ea69
--- /dev/null
+++ b/external/openglcts/data/mustpass/gles/aosp_mustpass/master/src/gles2-driver-issues.txt
@@ -0,0 +1,196 @@
+#VK-GL-CTS 231
+dEQP-GLES2.functional.shaders.preprocessor.definitions.undefine_invalid_object_1_vertex
+dEQP-GLES2.functional.shaders.preprocessor.definitions.undefine_invalid_object_1_fragment
+dEQP-GLES2.functional.shaders.preprocessor.definitions.undefine_invalid_object_2_vertex
+dEQP-GLES2.functional.shaders.preprocessor.definitions.undefine_invalid_object_2_fragment
+dEQP-GLES2.functional.shaders.preprocessor.invalid_redefinitions.invalid_identifier_2_vertex
+dEQP-GLES2.functional.shaders.preprocessor.invalid_redefinitions.invalid_identifier_2_fragment
+dEQP-GLES2.functional.shaders.preprocessor.predefined_macros.line_2_vertex
+dEQP-GLES2.functional.shaders.preprocessor.predefined_macros.line_2_fragment
+dEQP-GLES2.functional.shaders.preprocessor.builtin.line_vertex
+dEQP-GLES2.functional.shaders.preprocessor.builtin.line_fragment
+dEQP-GLES2.functional.shaders.preprocessor.builtin.line_defined_1_vertex
+dEQP-GLES2.functional.shaders.preprocessor.builtin.line_defined_1_fragment
+dEQP-GLES2.functional.shaders.preprocessor.extensions.after_non_preprocessing_tokens_vertex
+dEQP-GLES2.functional.shaders.preprocessor.extensions.after_non_preprocessing_tokens_fragment
+
+#VK-GL-CTS 232
+dEQP-GLES2.functional.shaders.constants.const_float_function_gotcha_vertex
+dEQP-GLES2.functional.shaders.constants.const_float_function_gotcha_fragment
+
+#VK-GL-CTS 233
+dEQP-GLES2.functional.shaders.linkage.varying_type_mismatch_1
+dEQP-GLES2.functional.shaders.linkage.varying_illegal_usage_1
+dEQP-GLES2.functional.shaders.linkage.uniform_struct_type_conflict_1
+dEQP-GLES2.functional.shaders.linkage.uniform_struct_type_conflict_2
+dEQP-GLES2.functional.shaders.linkage.uniform_struct_type_conflict_3
+dEQP-GLES2.functional.shaders.linkage.uniform_struct_precision_conflict_1
+dEQP-GLES2.functional.shaders.linkage.uniform_struct_precision_conflict_2
+dEQP-GLES2.functional.shaders.linkage.uniform_struct_precision_conflict_3
+dEQP-GLES2.functional.shaders.linkage.uniform_struct_precision_conflict_4
+
+#VK-GL-CTS 234
+dEQP-GLES2.functional.shaders.declarations.invalid_declarations.invariant_attribute
+dEQP-GLES2.functional.shaders.declarations.invalid_declarations.invariant_uniform
+
+#VK-GL-CTS 235
+dEQP-GLES2.functional.shaders.functions.invalid.local_function_prototype_vertex
+dEQP-GLES2.functional.shaders.functions.invalid.local_function_prototype_fragment
+dEQP-GLES2.functional.shaders.functions.invalid.uniform_return_type_vertex
+dEQP-GLES2.functional.shaders.functions.invalid.uniform_return_type_fragment
+dEQP-GLES2.functional.shaders.functions.invalid.varying_return_type_vertex
+dEQP-GLES2.functional.shaders.functions.invalid.varying_return_type_fragment
+dEQP-GLES2.functional.shaders.functions.invalid.init_const_local_from_const_arg_vertex
+dEQP-GLES2.functional.shaders.functions.invalid.init_const_local_from_const_arg_fragment
+dEQP-GLES2.functional.shaders.functions.invalid.array_size_from_const_arg_vertex
+dEQP-GLES2.functional.shaders.functions.invalid.array_size_from_const_arg_fragment
+dEQP-GLES2.functional.shaders.functions.invalid.double_declare_vertex
+dEQP-GLES2.functional.shaders.functions.invalid.double_declare_fragment
+
+#VK-GL-CTS 236
+dEQP-GLES2.functional.shaders.keywords.keywords.true_vertex
+dEQP-GLES2.functional.shaders.keywords.keywords.true_fragment
+dEQP-GLES2.functional.shaders.keywords.keywords.false_vertex
+dEQP-GLES2.functional.shaders.keywords.keywords.false_fragment
+dEQP-GLES2.functional.shaders.keywords.keywords.mat2_vertex
+dEQP-GLES2.functional.shaders.keywords.keywords.mat2_fragment
+dEQP-GLES2.functional.shaders.keywords.keywords.mat3_vertex
+dEQP-GLES2.functional.shaders.keywords.keywords.mat3_fragment
+dEQP-GLES2.functional.shaders.keywords.keywords.mat4_vertex
+dEQP-GLES2.functional.shaders.keywords.keywords.mat4_fragment
+dEQP-GLES2.functional.shaders.keywords.keywords.vec2_vertex
+dEQP-GLES2.functional.shaders.keywords.keywords.vec2_fragment
+dEQP-GLES2.functional.shaders.keywords.keywords.vec3_vertex
+dEQP-GLES2.functional.shaders.keywords.keywords.vec3_fragment
+dEQP-GLES2.functional.shaders.keywords.keywords.vec4_vertex
+dEQP-GLES2.functional.shaders.keywords.keywords.ivec2_vertex
+dEQP-GLES2.functional.shaders.keywords.keywords.ivec2_fragment
+dEQP-GLES2.functional.shaders.keywords.keywords.ivec3_vertex
+dEQP-GLES2.functional.shaders.keywords.keywords.ivec3_fragment
+dEQP-GLES2.functional.shaders.keywords.keywords.ivec4_vertex
+dEQP-GLES2.functional.shaders.keywords.keywords.ivec4_fragment
+dEQP-GLES2.functional.shaders.keywords.keywords.bvec2_vertex
+dEQP-GLES2.functional.shaders.keywords.keywords.bvec2_fragment
+dEQP-GLES2.functional.shaders.keywords.keywords.bvec3_vertex
+dEQP-GLES2.functional.shaders.keywords.keywords.bvec3_fragment
+dEQP-GLES2.functional.shaders.keywords.keywords.bvec4_vertex
+dEQP-GLES2.functional.shaders.keywords.keywords.bvec4_fragment
+dEQP-GLES2.functional.shaders.keywords.keywords.sampler2D_vertex
+dEQP-GLES2.functional.shaders.keywords.keywords.sampler2D_fragment
+dEQP-GLES2.functional.shaders.keywords.keywords.samplerCube_vertex
+dEQP-GLES2.functional.shaders.keywords.keywords.samplerCube_fragment
+dEQP-GLES2.functional.shaders.keywords.reserved_keywords.union_vertex
+dEQP-GLES2.functional.shaders.keywords.reserved_keywords.union_fragment
+dEQP-GLES2.functional.shaders.keywords.reserved_keywords.enum_vertex
+dEQP-GLES2.functional.shaders.keywords.reserved_keywords.enum_fragment
+dEQP-GLES2.functional.shaders.keywords.reserved_keywords.packed_vertex
+dEQP-GLES2.functional.shaders.keywords.reserved_keywords.packed_fragment
+dEQP-GLES2.functional.shaders.keywords.reserved_keywords.noinline_vertex
+dEQP-GLES2.functional.shaders.keywords.reserved_keywords.noinline_fragment
+dEQP-GLES2.functional.shaders.keywords.reserved_keywords.public_vertex
+dEQP-GLES2.functional.shaders.keywords.reserved_keywords.public_fragment
+dEQP-GLES2.functional.shaders.keywords.reserved_keywords.external_vertex
+dEQP-GLES2.functional.shaders.keywords.reserved_keywords.external_fragment
+dEQP-GLES2.functional.shaders.keywords.reserved_keywords.long_vertex
+dEQP-GLES2.functional.shaders.keywords.reserved_keywords.long_fragment
+dEQP-GLES2.functional.shaders.keywords.reserved_keywords.double_vertex
+dEQP-GLES2.functional.shaders.keywords.reserved_keywords.double_fragment
+dEQP-GLES2.functional.shaders.keywords.reserved_keywords.half_vertex
+dEQP-GLES2.functional.shaders.keywords.reserved_keywords.half_fragment
+dEQP-GLES2.functional.shaders.keywords.reserved_keywords.fixed_vertex
+dEQP-GLES2.functional.shaders.keywords.reserved_keywords.fixed_fragment
+dEQP-GLES2.functional.shaders.keywords.reserved_keywords.input_vertex
+dEQP-GLES2.functional.shaders.keywords.reserved_keywords.input_fragment
+dEQP-GLES2.functional.shaders.keywords.reserved_keywords.output_vertex
+dEQP-GLES2.functional.shaders.keywords.reserved_keywords.output_fragment
+dEQP-GLES2.functional.shaders.keywords.reserved_keywords.hvec2_vertex
+dEQP-GLES2.functional.shaders.keywords.reserved_keywords.hvec2_fragment
+dEQP-GLES2.functional.shaders.keywords.reserved_keywords.hvec3_vertex
+dEQP-GLES2.functional.shaders.keywords.reserved_keywords.hvec3_fragment
+dEQP-GLES2.functional.shaders.keywords.reserved_keywords.hvec4_vertex
+dEQP-GLES2.functional.shaders.keywords.reserved_keywords.hvec4_fragment
+dEQP-GLES2.functional.shaders.keywords.reserved_keywords.dvec2_vertex
+dEQP-GLES2.functional.shaders.keywords.reserved_keywords.dvec2_fragment
+dEQP-GLES2.functional.shaders.keywords.reserved_keywords.dvec3_vertex
+dEQP-GLES2.functional.shaders.keywords.reserved_keywords.dvec3_fragment
+dEQP-GLES2.functional.shaders.keywords.reserved_keywords.dvec4_vertex
+dEQP-GLES2.functional.shaders.keywords.reserved_keywords.dvec4_fragment
+dEQP-GLES2.functional.shaders.keywords.reserved_keywords.fvec2_vertex
+dEQP-GLES2.functional.shaders.keywords.reserved_keywords.fvec2_fragment
+dEQP-GLES2.functional.shaders.keywords.reserved_keywords.fvec3_vertex
+dEQP-GLES2.functional.shaders.keywords.reserved_keywords.fvec3_fragment
+dEQP-GLES2.functional.shaders.keywords.reserved_keywords.fvec4_vertex
+dEQP-GLES2.functional.shaders.keywords.reserved_keywords.fvec4_fragment
+dEQP-GLES2.functional.shaders.keywords.reserved_keywords.sampler1D_vertex
+dEQP-GLES2.functional.shaders.keywords.reserved_keywords.sampler1D_fragment
+dEQP-GLES2.functional.shaders.keywords.reserved_keywords.sampler3D_vertex
+dEQP-GLES2.functional.shaders.keywords.reserved_keywords.sampler3D_fragment
+dEQP-GLES2.functional.shaders.keywords.reserved_keywords.sampler1DShadow_vertex
+dEQP-GLES2.functional.shaders.keywords.reserved_keywords.sampler1DShadow_fragment
+dEQP-GLES2.functional.shaders.keywords.reserved_keywords.sampler2DShadow_vertex
+dEQP-GLES2.functional.shaders.keywords.reserved_keywords.sampler2DShadow_fragment
+dEQP-GLES2.functional.shaders.keywords.reserved_keywords.sampler2DRect_vertex
+dEQP-GLES2.functional.shaders.keywords.reserved_keywords.sampler2DRect_fragment
+dEQP-GLES2.functional.shaders.keywords.reserved_keywords.sampler3DRect_vertex
+dEQP-GLES2.functional.shaders.keywords.reserved_keywords.sampler3DRect_fragment
+dEQP-GLES2.functional.shaders.keywords.reserved_keywords.sampler2DRectShadow_vertex
+dEQP-GLES2.functional.shaders.keywords.reserved_keywords.sampler2DRectShadow_fragment
+dEQP-GLES2.functional.shaders.keywords.reserved_keywords.sizeof_vertex
+dEQP-GLES2.functional.shaders.keywords.reserved_keywords.sizeof_fragment
+dEQP-GLES2.functional.shaders.keywords.reserved_keywords.cast_vertex
+dEQP-GLES2.functional.shaders.keywords.reserved_keywords.cast_fragment
+dEQP-GLES2.functional.shaders.keywords.reserved_keywords.using_vertex
+dEQP-GLES2.functional.shaders.keywords.reserved_keywords.using_fragment
+
+#VK-GL-CTS 239
+dEQP-GLES2.functional.shaders.scoping.valid.local_variable_hides_function_parameter_vertex
+dEQP-GLES2.functional.shaders.scoping.valid.local_variable_hides_function_parameter_fragment
+dEQP-GLES2.functional.shaders.scoping.invalid.redeclare_function_vertex
+dEQP-GLES2.functional.shaders.scoping.invalid.redeclare_function_fragment
+dEQP-GLES2.functional.shaders.scoping.invalid.redefine_builtin_vertex
+dEQP-GLES2.functional.shaders.scoping.invalid.redefine_builtin_fragment
+
+#VK-GL-CTS 240
+dEQP-GLES2.functional.shaders.reserved_operators.operator_bitwise_not_vertex
+dEQP-GLES2.functional.shaders.reserved_operators.operator_bitwise_not_fragment
+
+#VK-GL-CTS 295
+dEQP-GLES2.functional.texture.mipmap.2d.basic.nearest_nearest_clamp
+dEQP-GLES2.functional.texture.mipmap.2d.basic.nearest_nearest_clamp_non_square
+dEQP-GLES2.functional.texture.mipmap.2d.basic.nearest_nearest_repeat
+dEQP-GLES2.functional.texture.mipmap.2d.basic.nearest_nearest_repeat_non_square
+dEQP-GLES2.functional.texture.mipmap.2d.basic.nearest_nearest_mirror
+dEQP-GLES2.functional.texture.mipmap.2d.basic.nearest_nearest_mirror_non_square
+dEQP-GLES2.functional.texture.mipmap.2d.basic.linear_nearest_clamp
+dEQP-GLES2.functional.texture.mipmap.2d.basic.linear_nearest_clamp_non_square
+dEQP-GLES2.functional.texture.mipmap.2d.basic.linear_nearest_repeat
+dEQP-GLES2.functional.texture.mipmap.2d.basic.linear_nearest_repeat_non_square
+dEQP-GLES2.functional.texture.mipmap.2d.basic.linear_nearest_mirror
+dEQP-GLES2.functional.texture.mipmap.2d.basic.linear_nearest_mirror_non_square
+dEQP-GLES2.functional.texture.mipmap.2d.basic.linear_linear_clamp
+dEQP-GLES2.functional.texture.mipmap.2d.basic.linear_linear_clamp_non_square
+dEQP-GLES2.functional.texture.mipmap.2d.basic.linear_linear_mirror
+dEQP-GLES2.functional.texture.mipmap.2d.basic.linear_linear_mirror_non_square
+dEQP-GLES2.functional.texture.mipmap.2d.affine.linear_linear_clamp
+dEQP-GLES2.functional.texture.mipmap.2d.affine.linear_linear_mirror
+dEQP-GLES2.functional.texture.mipmap.2d.projected.nearest_nearest_clamp
+dEQP-GLES2.functional.texture.mipmap.2d.projected.nearest_nearest_repeat
+dEQP-GLES2.functional.texture.mipmap.2d.projected.nearest_nearest_mirror
+dEQP-GLES2.functional.texture.mipmap.2d.projected.linear_nearest_clamp
+dEQP-GLES2.functional.texture.mipmap.2d.projected.linear_nearest_repeat
+dEQP-GLES2.functional.texture.mipmap.2d.projected.linear_nearest_mirror
+dEQP-GLES2.functional.texture.mipmap.2d.projected.linear_linear_clamp
+dEQP-GLES2.functional.texture.mipmap.2d.projected.linear_linear_mirror
+dEQP-GLES2.functional.texture.mipmap.2d.bias.nearest_nearest
+dEQP-GLES2.functional.texture.mipmap.2d.bias.linear_nearest
+dEQP-GLES2.functional.texture.mipmap.2d.bias.nearest_linear
+dEQP-GLES2.functional.texture.mipmap.2d.bias.linear_linear
+dEQP-GLES2.functional.texture.mipmap.cube.basic.nearest_nearest
+dEQP-GLES2.functional.texture.mipmap.cube.basic.nearest_linear
+dEQP-GLES2.functional.texture.mipmap.cube.projected.nearest_nearest
+dEQP-GLES2.functional.texture.mipmap.cube.projected.nearest_linear
+dEQP-GLES2.functional.texture.mipmap.cube.bias.nearest_nearest
+dEQP-GLES2.functional.texture.mipmap.cube.bias.nearest_linear
+
+#VK-GL-CTS 372
+dEQP-GLES2.functional.attribute_location.bind_aliasing.max_cond*
diff --git a/external/openglcts/data/mustpass/gles/aosp_mustpass/master/src/gles2-hw-issues.txt b/external/openglcts/data/mustpass/gles/aosp_mustpass/master/src/gles2-hw-issues.txt
new file mode 100644
index 0000000..0824791
--- /dev/null
+++ b/external/openglcts/data/mustpass/gles/aosp_mustpass/master/src/gles2-hw-issues.txt
@@ -0,0 +1,24 @@
+#VK-GL-CTS 309
+dEQP-GLES2.functional.polygon_offset.default_result_depth_clamp
+dEQP-GLES2.functional.polygon_offset.default_factor_1_slope
+dEQP-GLES2.functional.polygon_offset.fixed16_result_depth_clamp
+dEQP-GLES2.functional.polygon_offset.fixed16_factor_1_slope
+
+#VK-GL-CTS 370
+dEQP-GLES2.functional.fragment_ops.depth_stencil.stencil_ops.*
+
+#VK-GL-CTS 373
+dEQP-GLES2.functional.uniform_api.info_query.nested_structs_arrays.mat4_mat2_vertex
+dEQP-GLES2.functional.uniform_api.info_query.nested_structs_arrays.mat4_mat2_both
+dEQP-GLES2.functional.uniform_api.value.initial.get_uniform.nested_structs_arrays.mat4_mat2_vertex
+dEQP-GLES2.functional.uniform_api.value.initial.get_uniform.nested_structs_arrays.mat4_mat2_both
+dEQP-GLES2.functional.uniform_api.value.initial.render.nested_structs_arrays.mat4_mat2_vertex
+dEQP-GLES2.functional.uniform_api.value.initial.render.nested_structs_arrays.mat4_mat2_both
+dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.get_uniform.nested_structs_arrays.mat4_mat2_vertex
+dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.get_uniform.nested_structs_arrays.mat4_mat2_both
+dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.nested_structs_arrays.mat4_mat2_vertex
+dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.nested_structs_arrays.mat4_mat2_both
+
+#VK-GL-CTS 374
+dEQP-GLES2.functional.polygon_offset.default_render_with_units
+dEQP-GLES2.functional.polygon_offset.fixed16_render_with_units
diff --git a/external/openglcts/data/mustpass/gles/aosp_mustpass/master/src/gles3-driver-issues.txt b/external/openglcts/data/mustpass/gles/aosp_mustpass/master/src/gles3-driver-issues.txt
new file mode 100644
index 0000000..a77c07e
--- /dev/null
+++ b/external/openglcts/data/mustpass/gles/aosp_mustpass/master/src/gles3-driver-issues.txt
@@ -0,0 +1,19 @@
+#VK-GL-CTS 231
+dEQP-GLES3.functional.shaders.preprocessor.predefined_macros.line_2_vertex
+dEQP-GLES3.functional.shaders.preprocessor.predefined_macros.line_2_fragment
+
+#VK-GL-CTS 349
+dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_out_of_bounds_mag
+dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_out_of_bounds_mag_reverse_src_x
+dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_out_of_bounds_mag_reverse_src_y
+dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_out_of_bounds_mag_reverse_dst_x
+dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_out_of_bounds_mag_reverse_dst_y
+dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_out_of_bounds_mag_reverse_src_dst_x
+dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_out_of_bounds_mag_reverse_src_dst_y
+dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_out_of_bounds_min
+dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_out_of_bounds_min_reverse_src_x
+dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_out_of_bounds_min_reverse_src_y
+dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_out_of_bounds_min_reverse_dst_x
+dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_out_of_bounds_min_reverse_dst_y
+dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_out_of_bounds_min_reverse_src_dst_x
+dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_out_of_bounds_min_reverse_src_dst_y
diff --git a/external/openglcts/data/mustpass/gles/aosp_mustpass/master/src/gles3-hw-issues.txt b/external/openglcts/data/mustpass/gles/aosp_mustpass/master/src/gles3-hw-issues.txt
new file mode 100644
index 0000000..ef22feb
--- /dev/null
+++ b/external/openglcts/data/mustpass/gles/aosp_mustpass/master/src/gles3-hw-issues.txt
@@ -0,0 +1,13 @@
+#VK-GL-CTS 309
+dEQP-GLES3.functional.polygon_offset.default_result_depth_clamp
+dEQP-GLES3.functional.polygon_offset.default_factor_1_slope
+dEQP-GLES3.functional.polygon_offset.fixed16_result_depth_clamp
+dEQP-GLES3.functional.polygon_offset.fixed16_factor_1_slope
+dEQP-GLES3.functional.polygon_offset.fixed24_result_depth_clamp
+dEQP-GLES3.functional.polygon_offset.fixed24_factor_1_slope
+dEQP-GLES3.functional.polygon_offset.float32_result_depth_clamp
+dEQP-GLES3.functional.polygon_offset.float32_factor_1_slope
+
+#VK-GL-CTS 310
+dEQP-GLES3.functional.texture.mipmap.cube.max_lod.linear_nearest
+dEQP-GLES3.functional.texture.mipmap.cube.max_lod.linear_linear
diff --git a/external/openglcts/data/mustpass/gles/aosp_mustpass/master/src/gles3-multisample-hw-issues.txt b/external/openglcts/data/mustpass/gles/aosp_mustpass/master/src/gles3-multisample-hw-issues.txt
new file mode 100644
index 0000000..152c720
--- /dev/null
+++ b/external/openglcts/data/mustpass/gles/aosp_mustpass/master/src/gles3-multisample-hw-issues.txt
@@ -0,0 +1,3 @@
+#VK-GL-CTS 309
+dEQP-GLES3.functional.polygon_offset.default_result_depth_clamp
+dEQP-GLES3.functional.polygon_offset.default_factor_1_slope
diff --git a/external/openglcts/data/mustpass/gles/aosp_mustpass/master/src/gles31-driver-issues.txt b/external/openglcts/data/mustpass/gles/aosp_mustpass/master/src/gles31-driver-issues.txt
new file mode 100644
index 0000000..a680171
--- /dev/null
+++ b/external/openglcts/data/mustpass/gles/aosp_mustpass/master/src/gles31-driver-issues.txt
@@ -0,0 +1,13 @@
+#VK-GL-CTS 307
+dEQP-GLES31.functional.shaders.builtin_functions.precision.min.highp_compute.scalar
+dEQP-GLES31.functional.shaders.builtin_functions.precision.min.highp_compute.vec2
+dEQP-GLES31.functional.shaders.builtin_functions.precision.min.highp_compute.vec3
+dEQP-GLES31.functional.shaders.builtin_functions.precision.min.highp_compute.vec4
+dEQP-GLES31.functional.shaders.builtin_functions.precision.max.highp_compute.scalar
+dEQP-GLES31.functional.shaders.builtin_functions.precision.max.highp_compute.vec2
+dEQP-GLES31.functional.shaders.builtin_functions.precision.max.highp_compute.vec3
+dEQP-GLES31.functional.shaders.builtin_functions.precision.max.highp_compute.vec4
+dEQP-GLES31.functional.shaders.builtin_functions.precision.clamp.highp_compute.scalar
+dEQP-GLES31.functional.shaders.builtin_functions.precision.clamp.highp_compute.vec2
+dEQP-GLES31.functional.shaders.builtin_functions.precision.clamp.highp_compute.vec3
+dEQP-GLES31.functional.shaders.builtin_functions.precision.clamp.highp_compute.vec4
diff --git a/external/openglcts/data/mustpass/gles/aosp_mustpass/master/src/gles31-hw-issues.txt b/external/openglcts/data/mustpass/gles/aosp_mustpass/master/src/gles31-hw-issues.txt
new file mode 100644
index 0000000..3f08e66
--- /dev/null
+++ b/external/openglcts/data/mustpass/gles/aosp_mustpass/master/src/gles31-hw-issues.txt
@@ -0,0 +1,20 @@
+#VK-GL-CTS 312
+dEQP-GLES31.functional.texture.gather.basic.cube.depth32f.size_pot.compare_less.clamp_to_edge_repeat
+dEQP-GLES31.functional.texture.gather.basic.cube.depth32f.size_pot.compare_less.repeat_mirrored_repeat
+dEQP-GLES31.functional.texture.gather.basic.cube.depth32f.size_pot.compare_less.mirrored_repeat_clamp_to_edge
+dEQP-GLES31.functional.texture.gather.basic.cube.depth32f.size_pot.compare_greater.clamp_to_edge_repeat
+dEQP-GLES31.functional.texture.gather.basic.cube.depth32f.size_pot.compare_greater.repeat_mirrored_repeat
+dEQP-GLES31.functional.texture.gather.basic.cube.depth32f.size_pot.compare_greater.mirrored_repeat_clamp_to_edge
+dEQP-GLES31.functional.texture.gather.basic.cube.depth32f.size_npot.compare_less.clamp_to_edge_repeat
+dEQP-GLES31.functional.texture.gather.basic.cube.depth32f.size_npot.compare_less.repeat_mirrored_repeat
+dEQP-GLES31.functional.texture.gather.basic.cube.depth32f.size_npot.compare_less.mirrored_repeat_clamp_to_edge
+dEQP-GLES31.functional.texture.gather.basic.cube.depth32f.size_npot.compare_greater.clamp_to_edge_repeat
+dEQP-GLES31.functional.texture.gather.basic.cube.depth32f.size_npot.compare_greater.repeat_mirrored_repeat
+dEQP-GLES31.functional.texture.gather.basic.cube.depth32f.size_npot.compare_greater.mirrored_repeat_clamp_to_edge
+dEQP-GLES31.functional.texture.gather.basic.cube.depth32f.filter_mode.min_linear_mag_linear
+dEQP-GLES31.functional.texture.gather.basic.cube.depth32f.filter_mode.min_nearest_mipmap_nearest_mag_linear
+dEQP-GLES31.functional.texture.gather.basic.cube.depth32f.filter_mode.min_nearest_mipmap_linear_mag_linear
+dEQP-GLES31.functional.texture.gather.basic.cube.depth32f.filter_mode.min_linear_mipmap_nearest_mag_linear
+dEQP-GLES31.functional.texture.gather.basic.cube.depth32f.filter_mode.min_linear_mipmap_linear_mag_linear
+dEQP-GLES31.functional.texture.gather.basic.cube.depth32f.base_level.level_1
+dEQP-GLES31.functional.texture.gather.basic.cube.depth32f.base_level.level_2
diff --git a/external/openglcts/data/mustpass/gles/aosp_mustpass/master/src/gles31-multisample-test-issues.txt b/external/openglcts/data/mustpass/gles/aosp_mustpass/master/src/gles31-multisample-test-issues.txt
new file mode 100644
index 0000000..8b9a183
--- /dev/null
+++ b/external/openglcts/data/mustpass/gles/aosp_mustpass/master/src/gles31-multisample-test-issues.txt
@@ -0,0 +1,7 @@
+#VK-GL-CTS 293
+dEQP-GLES31.functional.draw_indirect.compute_interop.large.drawelements_separate_grid_1000x1000_drawcount_5000
+dEQP-GLES31.functional.draw_indirect.compute_interop.large.drawelements_combined_grid_1000x1000_drawcount_5000
+
+# Bug 20453509
+dEQP-GLES31.functional.shaders.multisample_interpolation.interpolate_at_centroid.consistency.*
+dEQP-GLES31.functional.shaders.multisample_interpolation.interpolate_at_centroid.array_element.*
diff --git a/external/openglcts/data/mustpass/gles/khronos_mustpass/3.2.5.x/gles3-khr-master.txt b/external/openglcts/data/mustpass/gles/khronos_mustpass/3.2.5.x/gles3-khr-master.txt
index abf2826..96f2957 100644
--- a/external/openglcts/data/mustpass/gles/khronos_mustpass/3.2.5.x/gles3-khr-master.txt
+++ b/external/openglcts/data/mustpass/gles/khronos_mustpass/3.2.5.x/gles3-khr-master.txt
@@ -2579,6 +2579,654 @@
 KHR-GLES3.shaders.uniform_block.random.all_shared_buffer.19
 KHR-GLES3.shaders.uniform_block.common.precision_matching
 KHR-GLES3.shaders.uniform_block.common.name_matching
+KHR-GLES3.shaders.glsl_constructors.vec2_from_mat2_vs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_mat2_fs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_mat2_mat2_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_mat2_mat2_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_mat2x3_vs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_mat2x3_fs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_mat2x3_mat2x3_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_mat2x3_mat2x3_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_mat2x4_vs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_mat2x4_fs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_mat2x4_mat2x4_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_mat2x4_mat2x4_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_mat3_vs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_mat3_fs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_mat3_mat3_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_mat3_mat3_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_mat3x2_vs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_mat3x2_fs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_mat3x2_mat3x2_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_mat3x2_mat3x2_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_mat3x4_vs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_mat3x4_fs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_mat3x4_mat3x4_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_mat3x4_mat3x4_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_mat4_vs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_mat4_fs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_mat4_mat4_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_mat4_mat4_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_mat4x2_vs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_mat4x2_fs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_mat4x2_mat4x2_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_mat4x2_mat4x2_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_mat4x3_vs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_mat4x3_fs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_mat4x3_mat4x3_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_mat4x3_mat4x3_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_float_mat2_vs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_float_mat2_fs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_float_mat2_float_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_float_mat2_float_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_float_mat2x3_vs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_float_mat2x3_fs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_float_mat2x3_float_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_float_mat2x3_float_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_float_mat2x4_vs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_float_mat2x4_fs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_float_mat2x4_float_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_float_mat2x4_float_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_float_mat3_vs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_float_mat3_fs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_float_mat3_float_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_float_mat3_float_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_float_mat3x2_vs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_float_mat3x2_fs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_float_mat3x2_float_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_float_mat3x2_float_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_float_mat3x4_vs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_float_mat3x4_fs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_float_mat3x4_float_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_float_mat3x4_float_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_float_mat4_vs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_float_mat4_fs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_float_mat4_float_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_float_mat4_float_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_float_mat4x2_vs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_float_mat4x2_fs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_float_mat4x2_float_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_float_mat4x2_float_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_float_mat4x3_vs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_float_mat4x3_fs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_float_mat4x3_float_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_float_mat4x3_float_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_mat2_vs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_mat2_fs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_mat2_mat2_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_mat2_mat2_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_mat2x3_vs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_mat2x3_fs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_mat2x3_mat2x3_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_mat2x3_mat2x3_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_mat2x4_vs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_mat2x4_fs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_mat2x4_mat2x4_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_mat2x4_mat2x4_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_mat3_vs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_mat3_fs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_mat3_mat3_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_mat3_mat3_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_mat3x2_vs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_mat3x2_fs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_mat3x2_mat3x2_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_mat3x2_mat3x2_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_mat3x4_vs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_mat3x4_fs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_mat3x4_mat3x4_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_mat3x4_mat3x4_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_mat4_vs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_mat4_fs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_mat4_mat4_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_mat4_mat4_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_mat4x2_vs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_mat4x2_fs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_mat4x2_mat4x2_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_mat4x2_mat4x2_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_mat4x3_vs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_mat4x3_fs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_mat4x3_mat4x3_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_mat4x3_mat4x3_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_float_mat2_vs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_float_mat2_fs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_float_mat2_float_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_float_mat2_float_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_float_mat2x3_vs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_float_mat2x3_fs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_float_mat2x3_float_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_float_mat2x3_float_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_float_mat2x4_vs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_float_mat2x4_fs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_float_mat2x4_float_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_float_mat2x4_float_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_float_mat3_vs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_float_mat3_fs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_float_mat3_float_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_float_mat3_float_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_float_mat3x2_vs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_float_mat3x2_fs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_float_mat3x2_float_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_float_mat3x2_float_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_float_mat3x4_vs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_float_mat3x4_fs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_float_mat3x4_float_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_float_mat3x4_float_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_float_mat4_vs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_float_mat4_fs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_float_mat4_float_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_float_mat4_float_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_float_mat4x2_vs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_float_mat4x2_fs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_float_mat4x2_float_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_float_mat4x2_float_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_float_mat4x3_vs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_float_mat4x3_fs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_float_mat4x3_float_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_float_mat4x3_float_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_mat2_vs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_mat2_fs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_mat2_mat2_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_mat2_mat2_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_mat2x3_vs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_mat2x3_fs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_mat2x3_mat2x3_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_mat2x3_mat2x3_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_mat2x4_vs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_mat2x4_fs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_mat2x4_mat2x4_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_mat2x4_mat2x4_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_mat3_vs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_mat3_fs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_mat3_mat3_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_mat3_mat3_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_mat3x2_vs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_mat3x2_fs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_mat3x2_mat3x2_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_mat3x2_mat3x2_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_mat3x4_vs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_mat3x4_fs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_mat3x4_mat3x4_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_mat3x4_mat3x4_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_mat4_vs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_mat4_fs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_mat4_mat4_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_mat4_mat4_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_mat4x2_vs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_mat4x2_fs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_mat4x2_mat4x2_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_mat4x2_mat4x2_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_mat4x3_vs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_mat4x3_fs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_mat4x3_mat4x3_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_mat4x3_mat4x3_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_float_mat2_vs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_float_mat2_fs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_float_mat2_float_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_float_mat2_float_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_float_mat2x3_vs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_float_mat2x3_fs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_float_mat2x3_float_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_float_mat2x3_float_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_float_mat2x4_vs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_float_mat2x4_fs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_float_mat2x4_float_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_float_mat2x4_float_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_float_mat3_vs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_float_mat3_fs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_float_mat3_float_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_float_mat3_float_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_float_mat3x2_vs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_float_mat3x2_fs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_float_mat3x2_float_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_float_mat3x2_float_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_float_mat3x4_vs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_float_mat3x4_fs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_float_mat3x4_float_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_float_mat3x4_float_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_float_mat4_vs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_float_mat4_fs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_float_mat4_float_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_float_mat4_float_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_float_mat4x2_vs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_float_mat4x2_fs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_float_mat4x2_float_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_float_mat4x2_float_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_float_mat4x3_vs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_float_mat4x3_fs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_float_mat4x3_float_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_float_mat4x3_float_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_mat2_vs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_mat2_fs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_mat2_mat2_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_mat2_mat2_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_mat2x3_vs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_mat2x3_fs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_mat2x3_mat2x3_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_mat2x3_mat2x3_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_mat2x4_vs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_mat2x4_fs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_mat2x4_mat2x4_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_mat2x4_mat2x4_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_mat3_vs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_mat3_fs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_mat3_mat3_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_mat3_mat3_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_mat3x2_vs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_mat3x2_fs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_mat3x2_mat3x2_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_mat3x2_mat3x2_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_mat3x4_vs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_mat3x4_fs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_mat3x4_mat3x4_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_mat3x4_mat3x4_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_mat4_vs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_mat4_fs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_mat4_mat4_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_mat4_mat4_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_mat4x2_vs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_mat4x2_fs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_mat4x2_mat4x2_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_mat4x2_mat4x2_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_mat4x3_vs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_mat4x3_fs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_mat4x3_mat4x3_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_mat4x3_mat4x3_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_int_mat2_vs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_int_mat2_fs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_int_mat2_int_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_int_mat2_int_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_int_mat2x3_vs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_int_mat2x3_fs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_int_mat2x3_int_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_int_mat2x3_int_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_int_mat2x4_vs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_int_mat2x4_fs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_int_mat2x4_int_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_int_mat2x4_int_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_int_mat3_vs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_int_mat3_fs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_int_mat3_int_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_int_mat3_int_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_int_mat3x2_vs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_int_mat3x2_fs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_int_mat3x2_int_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_int_mat3x2_int_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_int_mat3x4_vs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_int_mat3x4_fs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_int_mat3x4_int_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_int_mat3x4_int_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_int_mat4_vs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_int_mat4_fs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_int_mat4_int_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_int_mat4_int_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_int_mat4x2_vs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_int_mat4x2_fs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_int_mat4x2_int_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_int_mat4x2_int_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_int_mat4x3_vs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_int_mat4x3_fs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_int_mat4x3_int_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_int_mat4x3_int_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_mat2_vs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_mat2_fs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_mat2_mat2_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_mat2_mat2_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_mat2x3_vs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_mat2x3_fs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_mat2x3_mat2x3_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_mat2x3_mat2x3_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_mat2x4_vs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_mat2x4_fs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_mat2x4_mat2x4_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_mat2x4_mat2x4_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_mat3_vs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_mat3_fs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_mat3_mat3_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_mat3_mat3_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_mat3x2_vs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_mat3x2_fs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_mat3x2_mat3x2_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_mat3x2_mat3x2_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_mat3x4_vs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_mat3x4_fs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_mat3x4_mat3x4_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_mat3x4_mat3x4_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_mat4_vs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_mat4_fs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_mat4_mat4_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_mat4_mat4_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_mat4x2_vs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_mat4x2_fs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_mat4x2_mat4x2_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_mat4x2_mat4x2_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_mat4x3_vs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_mat4x3_fs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_mat4x3_mat4x3_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_mat4x3_mat4x3_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_int_mat2_vs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_int_mat2_fs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_int_mat2_int_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_int_mat2_int_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_int_mat2x3_vs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_int_mat2x3_fs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_int_mat2x3_int_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_int_mat2x3_int_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_int_mat2x4_vs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_int_mat2x4_fs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_int_mat2x4_int_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_int_mat2x4_int_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_int_mat3_vs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_int_mat3_fs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_int_mat3_int_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_int_mat3_int_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_int_mat3x2_vs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_int_mat3x2_fs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_int_mat3x2_int_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_int_mat3x2_int_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_int_mat3x4_vs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_int_mat3x4_fs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_int_mat3x4_int_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_int_mat3x4_int_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_int_mat4_vs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_int_mat4_fs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_int_mat4_int_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_int_mat4_int_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_int_mat4x2_vs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_int_mat4x2_fs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_int_mat4x2_int_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_int_mat4x2_int_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_int_mat4x3_vs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_int_mat4x3_fs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_int_mat4x3_int_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_int_mat4x3_int_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_mat2_vs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_mat2_fs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_mat2_mat2_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_mat2_mat2_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_mat2x3_vs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_mat2x3_fs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_mat2x3_mat2x3_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_mat2x3_mat2x3_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_mat2x4_vs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_mat2x4_fs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_mat2x4_mat2x4_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_mat2x4_mat2x4_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_mat3_vs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_mat3_fs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_mat3_mat3_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_mat3_mat3_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_mat3x2_vs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_mat3x2_fs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_mat3x2_mat3x2_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_mat3x2_mat3x2_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_mat3x4_vs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_mat3x4_fs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_mat3x4_mat3x4_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_mat3x4_mat3x4_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_mat4_vs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_mat4_fs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_mat4_mat4_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_mat4_mat4_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_mat4x2_vs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_mat4x2_fs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_mat4x2_mat4x2_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_mat4x2_mat4x2_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_mat4x3_vs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_mat4x3_fs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_mat4x3_mat4x3_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_mat4x3_mat4x3_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_int_mat2_vs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_int_mat2_fs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_int_mat2_int_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_int_mat2_int_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_int_mat2x3_vs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_int_mat2x3_fs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_int_mat2x3_int_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_int_mat2x3_int_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_int_mat2x4_vs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_int_mat2x4_fs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_int_mat2x4_int_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_int_mat2x4_int_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_int_mat3_vs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_int_mat3_fs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_int_mat3_int_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_int_mat3_int_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_int_mat3x2_vs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_int_mat3x2_fs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_int_mat3x2_int_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_int_mat3x2_int_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_int_mat3x4_vs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_int_mat3x4_fs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_int_mat3x4_int_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_int_mat3x4_int_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_int_mat4_vs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_int_mat4_fs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_int_mat4_int_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_int_mat4_int_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_int_mat4x2_vs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_int_mat4x2_fs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_int_mat4x2_int_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_int_mat4x2_int_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_int_mat4x3_vs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_int_mat4x3_fs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_int_mat4x3_int_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_int_mat4x3_int_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_mat2_vs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_mat2_fs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_mat2_mat2_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_mat2_mat2_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_mat2x3_vs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_mat2x3_fs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_mat2x3_mat2x3_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_mat2x3_mat2x3_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_mat2x4_vs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_mat2x4_fs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_mat2x4_mat2x4_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_mat2x4_mat2x4_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_mat3_vs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_mat3_fs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_mat3_mat3_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_mat3_mat3_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_mat3x2_vs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_mat3x2_fs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_mat3x2_mat3x2_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_mat3x2_mat3x2_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_mat3x4_vs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_mat3x4_fs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_mat3x4_mat3x4_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_mat3x4_mat3x4_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_mat4_vs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_mat4_fs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_mat4_mat4_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_mat4_mat4_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_mat4x2_vs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_mat4x2_fs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_mat4x2_mat4x2_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_mat4x2_mat4x2_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_mat4x3_vs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_mat4x3_fs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_mat4x3_mat4x3_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_mat4x3_mat4x3_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_bool_mat2_vs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_bool_mat2_fs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_bool_mat2_bool_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_bool_mat2_bool_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_bool_mat2x3_vs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_bool_mat2x3_fs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_bool_mat2x3_bool_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_bool_mat2x3_bool_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_bool_mat2x4_vs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_bool_mat2x4_fs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_bool_mat2x4_bool_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_bool_mat2x4_bool_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_bool_mat3_vs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_bool_mat3_fs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_bool_mat3_bool_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_bool_mat3_bool_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_bool_mat3x2_vs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_bool_mat3x2_fs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_bool_mat3x2_bool_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_bool_mat3x2_bool_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_bool_mat3x4_vs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_bool_mat3x4_fs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_bool_mat3x4_bool_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_bool_mat3x4_bool_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_bool_mat4_vs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_bool_mat4_fs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_bool_mat4_bool_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_bool_mat4_bool_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_bool_mat4x2_vs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_bool_mat4x2_fs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_bool_mat4x2_bool_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_bool_mat4x2_bool_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_bool_mat4x3_vs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_bool_mat4x3_fs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_bool_mat4x3_bool_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_bool_mat4x3_bool_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_mat2_vs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_mat2_fs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_mat2_mat2_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_mat2_mat2_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_mat2x3_vs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_mat2x3_fs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_mat2x3_mat2x3_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_mat2x3_mat2x3_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_mat2x4_vs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_mat2x4_fs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_mat2x4_mat2x4_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_mat2x4_mat2x4_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_mat3_vs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_mat3_fs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_mat3_mat3_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_mat3_mat3_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_mat3x2_vs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_mat3x2_fs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_mat3x2_mat3x2_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_mat3x2_mat3x2_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_mat3x4_vs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_mat3x4_fs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_mat3x4_mat3x4_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_mat3x4_mat3x4_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_mat4_vs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_mat4_fs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_mat4_mat4_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_mat4_mat4_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_mat4x2_vs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_mat4x2_fs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_mat4x2_mat4x2_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_mat4x2_mat4x2_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_mat4x3_vs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_mat4x3_fs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_mat4x3_mat4x3_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_mat4x3_mat4x3_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_bool_mat2_vs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_bool_mat2_fs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_bool_mat2_bool_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_bool_mat2_bool_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_bool_mat2x3_vs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_bool_mat2x3_fs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_bool_mat2x3_bool_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_bool_mat2x3_bool_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_bool_mat2x4_vs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_bool_mat2x4_fs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_bool_mat2x4_bool_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_bool_mat2x4_bool_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_bool_mat3_vs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_bool_mat3_fs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_bool_mat3_bool_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_bool_mat3_bool_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_bool_mat3x2_vs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_bool_mat3x2_fs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_bool_mat3x2_bool_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_bool_mat3x2_bool_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_bool_mat3x4_vs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_bool_mat3x4_fs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_bool_mat3x4_bool_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_bool_mat3x4_bool_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_bool_mat4_vs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_bool_mat4_fs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_bool_mat4_bool_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_bool_mat4_bool_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_bool_mat4x2_vs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_bool_mat4x2_fs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_bool_mat4x2_bool_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_bool_mat4x2_bool_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_bool_mat4x3_vs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_bool_mat4x3_fs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_bool_mat4x3_bool_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_bool_mat4x3_bool_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_mat2_vs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_mat2_fs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_mat2_mat2_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_mat2_mat2_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_mat2x3_vs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_mat2x3_fs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_mat2x3_mat2x3_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_mat2x3_mat2x3_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_mat2x4_vs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_mat2x4_fs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_mat2x4_mat2x4_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_mat2x4_mat2x4_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_mat3_vs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_mat3_fs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_mat3_mat3_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_mat3_mat3_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_mat3x2_vs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_mat3x2_fs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_mat3x2_mat3x2_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_mat3x2_mat3x2_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_mat3x4_vs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_mat3x4_fs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_mat3x4_mat3x4_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_mat3x4_mat3x4_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_mat4_vs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_mat4_fs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_mat4_mat4_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_mat4_mat4_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_mat4x2_vs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_mat4x2_fs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_mat4x2_mat4x2_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_mat4x2_mat4x2_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_mat4x3_vs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_mat4x3_fs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_mat4x3_mat4x3_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_mat4x3_mat4x3_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_bool_mat2_vs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_bool_mat2_fs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_bool_mat2_bool_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_bool_mat2_bool_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_bool_mat2x3_vs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_bool_mat2x3_fs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_bool_mat2x3_bool_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_bool_mat2x3_bool_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_bool_mat2x4_vs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_bool_mat2x4_fs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_bool_mat2x4_bool_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_bool_mat2x4_bool_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_bool_mat3_vs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_bool_mat3_fs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_bool_mat3_bool_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_bool_mat3_bool_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_bool_mat3x2_vs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_bool_mat3x2_fs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_bool_mat3x2_bool_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_bool_mat3x2_bool_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_bool_mat3x4_vs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_bool_mat3x4_fs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_bool_mat3x4_bool_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_bool_mat3x4_bool_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_bool_mat4_vs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_bool_mat4_fs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_bool_mat4_bool_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_bool_mat4_bool_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_bool_mat4x2_vs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_bool_mat4x2_fs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_bool_mat4x2_bool_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_bool_mat4x2_bool_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_bool_mat4x3_vs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_bool_mat4x3_fs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_bool_mat4x3_bool_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_bool_mat4x3_bool_invalid_fs
 KHR-GLES3.shaders.shader_integer_mix.define
 KHR-GLES3.shaders.shader_integer_mix.prototypes-extension
 KHR-GLES3.shaders.shader_integer_mix.prototypes
@@ -3252,19 +3900,68 @@
 KHR-GLES3.core.internalformat.texture2d.rgba_float_rgba32f
 KHR-GLES3.core.internalformat.texture2d.rgb_float_rgb32f_linear
 KHR-GLES3.core.internalformat.texture2d.rgba_float_rgba32f_linear
-KHR-GLES3.core.internalformat.texture2d.rgba_unsigned_byte_rgba4
-KHR-GLES3.core.internalformat.texture2d.rgba_unsigned_byte_rgb5_a1
-KHR-GLES3.core.internalformat.texture2d.rgb_unsigned_byte_rgb565
-KHR-GLES3.core.internalformat.texture2d.rgba_unsigned_short_4_4_4_4_rgba4
-KHR-GLES3.core.internalformat.texture2d.rgba_unsigned_short_5_5_5_1_rgba
-KHR-GLES3.core.internalformat.texture2d.rgba_unsigned_short_5_5_5_1_rgb5_a1
-KHR-GLES3.core.internalformat.texture2d.rgb_unsigned_short_5_6_5_rgb
-KHR-GLES3.core.internalformat.texture2d.rgb_unsigned_short_5_6_5_rgb565
-KHR-GLES3.core.internalformat.texture2d.rgb_unsigned_byte_rgb8
 KHR-GLES3.core.internalformat.texture2d.rgba_unsigned_byte_rgba8
-KHR-GLES3.core.internalformat.texture2d.rgb_half_float_rgb16f
+KHR-GLES3.core.internalformat.texture2d.rgba_unsigned_byte_rgb5_a1
+KHR-GLES3.core.internalformat.texture2d.rgba_unsigned_byte_rgba4
+KHR-GLES3.core.internalformat.texture2d.rgba_unsigned_byte_srgb8_alpha8
+KHR-GLES3.core.internalformat.texture2d.rgba_byte_rgba8_snorm
+KHR-GLES3.core.internalformat.texture2d.rgba_unsigned_short_4_4_4_4_rgba4
+KHR-GLES3.core.internalformat.texture2d.rgba_unsigned_short_5_5_5_1_rgb5_a1
 KHR-GLES3.core.internalformat.texture2d.rgba_half_float_rgba16f
+KHR-GLES3.core.internalformat.texture2d.rgba_float_rgba16f
+KHR-GLES3.core.internalformat.texture2d.rgba_integer_unsigned_byte_rgba8ui
+KHR-GLES3.core.internalformat.texture2d.rgba_integer_byte_rgba8i
+KHR-GLES3.core.internalformat.texture2d.rgba_integer_unsigned_short_rgba16ui
+KHR-GLES3.core.internalformat.texture2d.rgba_integer_short_rgba16i
+KHR-GLES3.core.internalformat.texture2d.rgba_integer_unsigned_int_rgba32ui
+KHR-GLES3.core.internalformat.texture2d.rgba_integer_int_rgba32i
+KHR-GLES3.core.internalformat.texture2d.rgba_integer_unsigned_int_2_10_10_10_rev_rgb10_a2ui
+KHR-GLES3.core.internalformat.texture2d.rgb_unsigned_byte_rgb8
+KHR-GLES3.core.internalformat.texture2d.rgb_unsigned_byte_rgb565
+KHR-GLES3.core.internalformat.texture2d.rgb_unsigned_byte_srgb8
+KHR-GLES3.core.internalformat.texture2d.rgb_unsigned_short_5_6_5_rgb565
+KHR-GLES3.core.internalformat.texture2d.rgb_unsigned_int_10f_11f_11f_rev_r11f_g11f_b10f
+KHR-GLES3.core.internalformat.texture2d.rgb_unsigned_int_5_9_9_9_rev_rgb9_e5
+KHR-GLES3.core.internalformat.texture2d.rgb_half_float_rgb16f
+KHR-GLES3.core.internalformat.texture2d.rgb_half_float_r11f_g11f_b10f
+KHR-GLES3.core.internalformat.texture2d.rgb_half_float_rgb9_e5
+KHR-GLES3.core.internalformat.texture2d.rgb_float_rgb16f
+KHR-GLES3.core.internalformat.texture2d.rgb_float_r11f_g11f_b10f
+KHR-GLES3.core.internalformat.texture2d.rgb_float_rgb9_e5
+KHR-GLES3.core.internalformat.texture2d.rgb_integer_unsigned_byte_rgb8ui
+KHR-GLES3.core.internalformat.texture2d.rgb_integer_byte_rgb8i
+KHR-GLES3.core.internalformat.texture2d.rgb_integer_unsigned_short_rgb16ui
+KHR-GLES3.core.internalformat.texture2d.rgb_integer_short_rgb16i
+KHR-GLES3.core.internalformat.texture2d.rgb_integer_unsigned_int_rgb32ui
+KHR-GLES3.core.internalformat.texture2d.rgb_integer_int_rgb32i
+KHR-GLES3.core.internalformat.texture2d.rg_unsigned_byte_rg8
+KHR-GLES3.core.internalformat.texture2d.rg_half_float_rg16f
+KHR-GLES3.core.internalformat.texture2d.rg_float_rg32f
+KHR-GLES3.core.internalformat.texture2d.rg_float_rg16f
+KHR-GLES3.core.internalformat.texture2d.rg_integer_unsigned_byte_rg8ui
+KHR-GLES3.core.internalformat.texture2d.rg_integer_byte_rg8i
+KHR-GLES3.core.internalformat.texture2d.rg_integer_unsigned_short_rg16ui
+KHR-GLES3.core.internalformat.texture2d.rg_integer_short_rg16i
+KHR-GLES3.core.internalformat.texture2d.rg_integer_unsigned_int_rg32ui
+KHR-GLES3.core.internalformat.texture2d.rg_integer_int_rg32i
+KHR-GLES3.core.internalformat.texture2d.red_unsigned_byte_r8
+KHR-GLES3.core.internalformat.texture2d.red_half_float_r16f
+KHR-GLES3.core.internalformat.texture2d.red_float_r32f
+KHR-GLES3.core.internalformat.texture2d.red_float_r16f
+KHR-GLES3.core.internalformat.texture2d.red_integer_unsigned_byte_r8ui
+KHR-GLES3.core.internalformat.texture2d.red_integer_byte_r8i
+KHR-GLES3.core.internalformat.texture2d.red_integer_unsigned_short_r16ui
+KHR-GLES3.core.internalformat.texture2d.red_integer_short_r16i
+KHR-GLES3.core.internalformat.texture2d.red_integer_unsigned_int_r32ui
+KHR-GLES3.core.internalformat.texture2d.red_integer_int_r32i
+KHR-GLES3.core.internalformat.texture2d.depth_component_unsigned_short_depth_component16
+KHR-GLES3.core.internalformat.texture2d.depth_component_unsigned_int_depth_component24
+KHR-GLES3.core.internalformat.texture2d.depth_component_unsigned_int_depth_component16
+KHR-GLES3.core.internalformat.texture2d.depth_component_float_depth_component32f
 KHR-GLES3.core.internalformat.texture2d.depth_stencil_unsigned_int_24_8_depth24_stencil8
+KHR-GLES3.core.internalformat.texture2d.depth_stencil_float_32_unsigned_int_24_8_rev_depth32f_stencil8
+KHR-GLES3.core.internalformat.texture2d.rgba_unsigned_short_5_5_5_1_rgba
+KHR-GLES3.core.internalformat.texture2d.rgb_unsigned_short_5_6_5_rgb
 KHR-GLES3.core.internalformat.copy_tex_image.rgb
 KHR-GLES3.core.internalformat.copy_tex_image.rgba
 KHR-GLES3.core.internalformat.copy_tex_image.alpha
@@ -3275,9 +3972,15 @@
 KHR-GLES3.core.internalformat.copy_tex_image.rgb565
 KHR-GLES3.core.internalformat.copy_tex_image.rgba8
 KHR-GLES3.core.internalformat.copy_tex_image.rgb8
+KHR-GLES3.core.internalformat.copy_tex_image.srgb8_alpha8
+KHR-GLES3.core.internalformat.copy_tex_image.srgb8
+KHR-GLES3.core.internalformat.copy_tex_image.r11f_g11f_b10f
 KHR-GLES3.core.internalformat.renderbuffer.rgba8
 KHR-GLES3.core.internalformat.renderbuffer.rgb8
 KHR-GLES3.core.internalformat.renderbuffer.rgb5_a1
+KHR-GLES3.core.internalformat.renderbuffer.srgb8_alpha8
+KHR-GLES3.core.internalformat.renderbuffer.depth_component32f
+KHR-GLES3.core.internalformat.renderbuffer.depth32f_stencil8
 KHR-GLES3.core.nearest_edge.offset_left
 KHR-GLES3.core.nearest_edge.offset_right
 KHR-GLES3.parallel_shader_compile.simple_queries
@@ -3479,6 +4182,20 @@
 KHR-GLES3.packed_depth_stencil.blit.depth32f_stencil8
 KHR-GLES3.packed_depth_stencil.stencil_texturing.depth24_stencil8
 KHR-GLES3.packed_depth_stencil.stencil_texturing.depth32f_stencil8
+KHR-GLES3.framebuffer_completeness.incomplete_missing_attachment
+KHR-GLES3.framebuffer_completeness.incomplete_image_zero_width
+KHR-GLES3.framebuffer_completeness.incomplete_image_zero_height
+KHR-GLES3.framebuffer_completeness.incomplete_texture_3d_layer_oob
+KHR-GLES3.framebuffer_completeness.incomplete_texture_2d_layer_oob
+KHR-GLES3.framebuffer_completeness.incomplete_texture_2d_mm_layer_oob
+KHR-GLES3.framebuffer_completeness.mutable_nbl_texture_expect_mipmap_complete
+KHR-GLES3.framebuffer_completeness.mutable_nbl_texture_expect_cube_complete
+KHR-GLES3.framebuffer_completeness.expect_renderable_internal_format
+KHR-GLES3.framebuffer_completeness.all_rbos_expect_same_numsamples
+KHR-GLES3.framebuffer_completeness.rbo_and_texture_expect_zero_numsamples
+KHR-GLES3.framebuffer_completeness.status_tracking
+KHR-GLES3.framebuffer_completeness.mutable_texture_missing_attachment_level
+KHR-GLES3.framebuffer_completeness.immutable_texture_any_level_as_attachment
 KHR-GLES3.copy_tex_image_conversions.forbidden.texture2d_texture2d
 KHR-GLES3.copy_tex_image_conversions.forbidden.texture2d_cubemap_negx
 KHR-GLES3.copy_tex_image_conversions.forbidden.texture2d_cubemap_negy
@@ -3619,3 +4336,21 @@
 KHR-GLES3.copy_tex_image_conversions.required.renderbuffer_cubemap_posx
 KHR-GLES3.copy_tex_image_conversions.required.renderbuffer_cubemap_posy
 KHR-GLES3.copy_tex_image_conversions.required.renderbuffer_cubemap_posz
+KHR-GLES3.number_parsing.unsigned_integer_above_signed_range_decimal
+KHR-GLES3.number_parsing.unsigned_integer_above_signed_range_base8
+KHR-GLES3.number_parsing.unsigned_integer_above_signed_range_base16
+KHR-GLES3.number_parsing.unsigned_integer_smallest_value_above_signed_range_decimal
+KHR-GLES3.number_parsing.unsigned_integer_smallest_value_above_signed_range_base8
+KHR-GLES3.number_parsing.unsigned_integer_smallest_value_above_signed_range_base16
+KHR-GLES3.number_parsing.unsigned_integer_max_value_decimal
+KHR-GLES3.number_parsing.unsigned_integer_max_value_base8
+KHR-GLES3.number_parsing.unsigned_integer_max_value_base16
+KHR-GLES3.number_parsing.unsigned_integer_too_large_value_invalid
+KHR-GLES3.number_parsing.unsigned_integer_negative_value_as_uint
+KHR-GLES3.number_parsing.float_out_of_range_as_infinity
+KHR-GLES3.number_parsing.float_out_of_range_as_zero
+KHR-GLES3.number_parsing.float_no_limit_on_number_of_digits_positive_exponent
+KHR-GLES3.number_parsing.float_no_limit_on_number_of_digits_negative_exponent
+KHR-GLES3.number_parsing.float_slightly_out_of_range_exponent_as_positive_infinity
+KHR-GLES3.number_parsing.float_overflow_to_positive_infinity
+KHR-GLES3.number_parsing.float_overflow_to_negative_infinity
diff --git a/external/openglcts/data/mustpass/gles/khronos_mustpass/3.2.5.x/gles31-khr-master.txt b/external/openglcts/data/mustpass/gles/khronos_mustpass/3.2.5.x/gles31-khr-master.txt
index 67bc003..bda186f 100644
--- a/external/openglcts/data/mustpass/gles/khronos_mustpass/3.2.5.x/gles31-khr-master.txt
+++ b/external/openglcts/data/mustpass/gles/khronos_mustpass/3.2.5.x/gles31-khr-master.txt
@@ -2282,19 +2282,68 @@
 KHR-GLES31.core.internalformat.texture2d.rgba_float_rgba32f
 KHR-GLES31.core.internalformat.texture2d.rgb_float_rgb32f_linear
 KHR-GLES31.core.internalformat.texture2d.rgba_float_rgba32f_linear
-KHR-GLES31.core.internalformat.texture2d.rgba_unsigned_byte_rgba4
-KHR-GLES31.core.internalformat.texture2d.rgba_unsigned_byte_rgb5_a1
-KHR-GLES31.core.internalformat.texture2d.rgb_unsigned_byte_rgb565
-KHR-GLES31.core.internalformat.texture2d.rgba_unsigned_short_4_4_4_4_rgba4
-KHR-GLES31.core.internalformat.texture2d.rgba_unsigned_short_5_5_5_1_rgba
-KHR-GLES31.core.internalformat.texture2d.rgba_unsigned_short_5_5_5_1_rgb5_a1
-KHR-GLES31.core.internalformat.texture2d.rgb_unsigned_short_5_6_5_rgb
-KHR-GLES31.core.internalformat.texture2d.rgb_unsigned_short_5_6_5_rgb565
-KHR-GLES31.core.internalformat.texture2d.rgb_unsigned_byte_rgb8
 KHR-GLES31.core.internalformat.texture2d.rgba_unsigned_byte_rgba8
-KHR-GLES31.core.internalformat.texture2d.rgb_half_float_rgb16f
+KHR-GLES31.core.internalformat.texture2d.rgba_unsigned_byte_rgb5_a1
+KHR-GLES31.core.internalformat.texture2d.rgba_unsigned_byte_rgba4
+KHR-GLES31.core.internalformat.texture2d.rgba_unsigned_byte_srgb8_alpha8
+KHR-GLES31.core.internalformat.texture2d.rgba_byte_rgba8_snorm
+KHR-GLES31.core.internalformat.texture2d.rgba_unsigned_short_4_4_4_4_rgba4
+KHR-GLES31.core.internalformat.texture2d.rgba_unsigned_short_5_5_5_1_rgb5_a1
 KHR-GLES31.core.internalformat.texture2d.rgba_half_float_rgba16f
+KHR-GLES31.core.internalformat.texture2d.rgba_float_rgba16f
+KHR-GLES31.core.internalformat.texture2d.rgba_integer_unsigned_byte_rgba8ui
+KHR-GLES31.core.internalformat.texture2d.rgba_integer_byte_rgba8i
+KHR-GLES31.core.internalformat.texture2d.rgba_integer_unsigned_short_rgba16ui
+KHR-GLES31.core.internalformat.texture2d.rgba_integer_short_rgba16i
+KHR-GLES31.core.internalformat.texture2d.rgba_integer_unsigned_int_rgba32ui
+KHR-GLES31.core.internalformat.texture2d.rgba_integer_int_rgba32i
+KHR-GLES31.core.internalformat.texture2d.rgba_integer_unsigned_int_2_10_10_10_rev_rgb10_a2ui
+KHR-GLES31.core.internalformat.texture2d.rgb_unsigned_byte_rgb8
+KHR-GLES31.core.internalformat.texture2d.rgb_unsigned_byte_rgb565
+KHR-GLES31.core.internalformat.texture2d.rgb_unsigned_byte_srgb8
+KHR-GLES31.core.internalformat.texture2d.rgb_unsigned_short_5_6_5_rgb565
+KHR-GLES31.core.internalformat.texture2d.rgb_unsigned_int_10f_11f_11f_rev_r11f_g11f_b10f
+KHR-GLES31.core.internalformat.texture2d.rgb_unsigned_int_5_9_9_9_rev_rgb9_e5
+KHR-GLES31.core.internalformat.texture2d.rgb_half_float_rgb16f
+KHR-GLES31.core.internalformat.texture2d.rgb_half_float_r11f_g11f_b10f
+KHR-GLES31.core.internalformat.texture2d.rgb_half_float_rgb9_e5
+KHR-GLES31.core.internalformat.texture2d.rgb_float_rgb16f
+KHR-GLES31.core.internalformat.texture2d.rgb_float_r11f_g11f_b10f
+KHR-GLES31.core.internalformat.texture2d.rgb_float_rgb9_e5
+KHR-GLES31.core.internalformat.texture2d.rgb_integer_unsigned_byte_rgb8ui
+KHR-GLES31.core.internalformat.texture2d.rgb_integer_byte_rgb8i
+KHR-GLES31.core.internalformat.texture2d.rgb_integer_unsigned_short_rgb16ui
+KHR-GLES31.core.internalformat.texture2d.rgb_integer_short_rgb16i
+KHR-GLES31.core.internalformat.texture2d.rgb_integer_unsigned_int_rgb32ui
+KHR-GLES31.core.internalformat.texture2d.rgb_integer_int_rgb32i
+KHR-GLES31.core.internalformat.texture2d.rg_unsigned_byte_rg8
+KHR-GLES31.core.internalformat.texture2d.rg_half_float_rg16f
+KHR-GLES31.core.internalformat.texture2d.rg_float_rg32f
+KHR-GLES31.core.internalformat.texture2d.rg_float_rg16f
+KHR-GLES31.core.internalformat.texture2d.rg_integer_unsigned_byte_rg8ui
+KHR-GLES31.core.internalformat.texture2d.rg_integer_byte_rg8i
+KHR-GLES31.core.internalformat.texture2d.rg_integer_unsigned_short_rg16ui
+KHR-GLES31.core.internalformat.texture2d.rg_integer_short_rg16i
+KHR-GLES31.core.internalformat.texture2d.rg_integer_unsigned_int_rg32ui
+KHR-GLES31.core.internalformat.texture2d.rg_integer_int_rg32i
+KHR-GLES31.core.internalformat.texture2d.red_unsigned_byte_r8
+KHR-GLES31.core.internalformat.texture2d.red_half_float_r16f
+KHR-GLES31.core.internalformat.texture2d.red_float_r32f
+KHR-GLES31.core.internalformat.texture2d.red_float_r16f
+KHR-GLES31.core.internalformat.texture2d.red_integer_unsigned_byte_r8ui
+KHR-GLES31.core.internalformat.texture2d.red_integer_byte_r8i
+KHR-GLES31.core.internalformat.texture2d.red_integer_unsigned_short_r16ui
+KHR-GLES31.core.internalformat.texture2d.red_integer_short_r16i
+KHR-GLES31.core.internalformat.texture2d.red_integer_unsigned_int_r32ui
+KHR-GLES31.core.internalformat.texture2d.red_integer_int_r32i
+KHR-GLES31.core.internalformat.texture2d.depth_component_unsigned_short_depth_component16
+KHR-GLES31.core.internalformat.texture2d.depth_component_unsigned_int_depth_component24
+KHR-GLES31.core.internalformat.texture2d.depth_component_unsigned_int_depth_component16
+KHR-GLES31.core.internalformat.texture2d.depth_component_float_depth_component32f
 KHR-GLES31.core.internalformat.texture2d.depth_stencil_unsigned_int_24_8_depth24_stencil8
+KHR-GLES31.core.internalformat.texture2d.depth_stencil_float_32_unsigned_int_24_8_rev_depth32f_stencil8
+KHR-GLES31.core.internalformat.texture2d.rgba_unsigned_short_5_5_5_1_rgba
+KHR-GLES31.core.internalformat.texture2d.rgb_unsigned_short_5_6_5_rgb
 KHR-GLES31.core.internalformat.copy_tex_image.rgb
 KHR-GLES31.core.internalformat.copy_tex_image.rgba
 KHR-GLES31.core.internalformat.copy_tex_image.alpha
@@ -2305,11 +2354,32 @@
 KHR-GLES31.core.internalformat.copy_tex_image.rgb565
 KHR-GLES31.core.internalformat.copy_tex_image.rgba8
 KHR-GLES31.core.internalformat.copy_tex_image.rgb8
+KHR-GLES31.core.internalformat.copy_tex_image.srgb8_alpha8
+KHR-GLES31.core.internalformat.copy_tex_image.srgb8
+KHR-GLES31.core.internalformat.copy_tex_image.r11f_g11f_b10f
 KHR-GLES31.core.internalformat.renderbuffer.rgba8
 KHR-GLES31.core.internalformat.renderbuffer.rgb8
 KHR-GLES31.core.internalformat.renderbuffer.rgb5_a1
+KHR-GLES31.core.internalformat.renderbuffer.srgb8_alpha8
+KHR-GLES31.core.internalformat.renderbuffer.depth_component32f
+KHR-GLES31.core.internalformat.renderbuffer.depth32f_stencil8
 KHR-GLES31.core.nearest_edge.offset_left
 KHR-GLES31.core.nearest_edge.offset_right
+KHR-GLES31.core.framebuffer_completeness.incomplete_missing_attachment
+KHR-GLES31.core.framebuffer_completeness.incomplete_image_zero_width
+KHR-GLES31.core.framebuffer_completeness.incomplete_image_zero_height
+KHR-GLES31.core.framebuffer_completeness.incomplete_texture_3d_layer_oob
+KHR-GLES31.core.framebuffer_completeness.incomplete_texture_2d_layer_oob
+KHR-GLES31.core.framebuffer_completeness.incomplete_texture_2d_mm_layer_oob
+KHR-GLES31.core.framebuffer_completeness.mutable_nbl_texture_expect_mipmap_complete
+KHR-GLES31.core.framebuffer_completeness.mutable_nbl_texture_expect_cube_complete
+KHR-GLES31.core.framebuffer_completeness.expect_renderable_internal_format
+KHR-GLES31.core.framebuffer_completeness.all_rbos_expect_same_numsamples
+KHR-GLES31.core.framebuffer_completeness.rbo_and_texture_expect_zero_numsamples
+KHR-GLES31.core.framebuffer_completeness.expect_equal_numsamples
+KHR-GLES31.core.framebuffer_completeness.status_tracking
+KHR-GLES31.core.framebuffer_completeness.mutable_texture_missing_attachment_level
+KHR-GLES31.core.framebuffer_completeness.immutable_texture_any_level_as_attachment
 KHR-GLES31.core.geometry_shader.adjacency.adjacency_non_indiced_lines
 KHR-GLES31.core.geometry_shader.adjacency.adjacency_indiced_lines
 KHR-GLES31.core.geometry_shader.adjacency.adjacency_non_indiced_line_strip
diff --git a/external/openglcts/data/mustpass/gles/khronos_mustpass/3.2.5.x/gles32-khr-master.txt b/external/openglcts/data/mustpass/gles/khronos_mustpass/3.2.5.x/gles32-khr-master.txt
index aeda3ad..9070aec 100644
--- a/external/openglcts/data/mustpass/gles/khronos_mustpass/3.2.5.x/gles32-khr-master.txt
+++ b/external/openglcts/data/mustpass/gles/khronos_mustpass/3.2.5.x/gles32-khr-master.txt
@@ -1048,19 +1048,68 @@
 KHR-GLES32.core.internalformat.texture2d.rgba_float_rgba32f
 KHR-GLES32.core.internalformat.texture2d.rgb_float_rgb32f_linear
 KHR-GLES32.core.internalformat.texture2d.rgba_float_rgba32f_linear
-KHR-GLES32.core.internalformat.texture2d.rgba_unsigned_byte_rgba4
-KHR-GLES32.core.internalformat.texture2d.rgba_unsigned_byte_rgb5_a1
-KHR-GLES32.core.internalformat.texture2d.rgb_unsigned_byte_rgb565
-KHR-GLES32.core.internalformat.texture2d.rgba_unsigned_short_4_4_4_4_rgba4
-KHR-GLES32.core.internalformat.texture2d.rgba_unsigned_short_5_5_5_1_rgba
-KHR-GLES32.core.internalformat.texture2d.rgba_unsigned_short_5_5_5_1_rgb5_a1
-KHR-GLES32.core.internalformat.texture2d.rgb_unsigned_short_5_6_5_rgb
-KHR-GLES32.core.internalformat.texture2d.rgb_unsigned_short_5_6_5_rgb565
-KHR-GLES32.core.internalformat.texture2d.rgb_unsigned_byte_rgb8
 KHR-GLES32.core.internalformat.texture2d.rgba_unsigned_byte_rgba8
-KHR-GLES32.core.internalformat.texture2d.rgb_half_float_rgb16f
+KHR-GLES32.core.internalformat.texture2d.rgba_unsigned_byte_rgb5_a1
+KHR-GLES32.core.internalformat.texture2d.rgba_unsigned_byte_rgba4
+KHR-GLES32.core.internalformat.texture2d.rgba_unsigned_byte_srgb8_alpha8
+KHR-GLES32.core.internalformat.texture2d.rgba_byte_rgba8_snorm
+KHR-GLES32.core.internalformat.texture2d.rgba_unsigned_short_4_4_4_4_rgba4
+KHR-GLES32.core.internalformat.texture2d.rgba_unsigned_short_5_5_5_1_rgb5_a1
 KHR-GLES32.core.internalformat.texture2d.rgba_half_float_rgba16f
+KHR-GLES32.core.internalformat.texture2d.rgba_float_rgba16f
+KHR-GLES32.core.internalformat.texture2d.rgba_integer_unsigned_byte_rgba8ui
+KHR-GLES32.core.internalformat.texture2d.rgba_integer_byte_rgba8i
+KHR-GLES32.core.internalformat.texture2d.rgba_integer_unsigned_short_rgba16ui
+KHR-GLES32.core.internalformat.texture2d.rgba_integer_short_rgba16i
+KHR-GLES32.core.internalformat.texture2d.rgba_integer_unsigned_int_rgba32ui
+KHR-GLES32.core.internalformat.texture2d.rgba_integer_int_rgba32i
+KHR-GLES32.core.internalformat.texture2d.rgba_integer_unsigned_int_2_10_10_10_rev_rgb10_a2ui
+KHR-GLES32.core.internalformat.texture2d.rgb_unsigned_byte_rgb8
+KHR-GLES32.core.internalformat.texture2d.rgb_unsigned_byte_rgb565
+KHR-GLES32.core.internalformat.texture2d.rgb_unsigned_byte_srgb8
+KHR-GLES32.core.internalformat.texture2d.rgb_unsigned_short_5_6_5_rgb565
+KHR-GLES32.core.internalformat.texture2d.rgb_unsigned_int_10f_11f_11f_rev_r11f_g11f_b10f
+KHR-GLES32.core.internalformat.texture2d.rgb_unsigned_int_5_9_9_9_rev_rgb9_e5
+KHR-GLES32.core.internalformat.texture2d.rgb_half_float_rgb16f
+KHR-GLES32.core.internalformat.texture2d.rgb_half_float_r11f_g11f_b10f
+KHR-GLES32.core.internalformat.texture2d.rgb_half_float_rgb9_e5
+KHR-GLES32.core.internalformat.texture2d.rgb_float_rgb16f
+KHR-GLES32.core.internalformat.texture2d.rgb_float_r11f_g11f_b10f
+KHR-GLES32.core.internalformat.texture2d.rgb_float_rgb9_e5
+KHR-GLES32.core.internalformat.texture2d.rgb_integer_unsigned_byte_rgb8ui
+KHR-GLES32.core.internalformat.texture2d.rgb_integer_byte_rgb8i
+KHR-GLES32.core.internalformat.texture2d.rgb_integer_unsigned_short_rgb16ui
+KHR-GLES32.core.internalformat.texture2d.rgb_integer_short_rgb16i
+KHR-GLES32.core.internalformat.texture2d.rgb_integer_unsigned_int_rgb32ui
+KHR-GLES32.core.internalformat.texture2d.rgb_integer_int_rgb32i
+KHR-GLES32.core.internalformat.texture2d.rg_unsigned_byte_rg8
+KHR-GLES32.core.internalformat.texture2d.rg_half_float_rg16f
+KHR-GLES32.core.internalformat.texture2d.rg_float_rg32f
+KHR-GLES32.core.internalformat.texture2d.rg_float_rg16f
+KHR-GLES32.core.internalformat.texture2d.rg_integer_unsigned_byte_rg8ui
+KHR-GLES32.core.internalformat.texture2d.rg_integer_byte_rg8i
+KHR-GLES32.core.internalformat.texture2d.rg_integer_unsigned_short_rg16ui
+KHR-GLES32.core.internalformat.texture2d.rg_integer_short_rg16i
+KHR-GLES32.core.internalformat.texture2d.rg_integer_unsigned_int_rg32ui
+KHR-GLES32.core.internalformat.texture2d.rg_integer_int_rg32i
+KHR-GLES32.core.internalformat.texture2d.red_unsigned_byte_r8
+KHR-GLES32.core.internalformat.texture2d.red_half_float_r16f
+KHR-GLES32.core.internalformat.texture2d.red_float_r32f
+KHR-GLES32.core.internalformat.texture2d.red_float_r16f
+KHR-GLES32.core.internalformat.texture2d.red_integer_unsigned_byte_r8ui
+KHR-GLES32.core.internalformat.texture2d.red_integer_byte_r8i
+KHR-GLES32.core.internalformat.texture2d.red_integer_unsigned_short_r16ui
+KHR-GLES32.core.internalformat.texture2d.red_integer_short_r16i
+KHR-GLES32.core.internalformat.texture2d.red_integer_unsigned_int_r32ui
+KHR-GLES32.core.internalformat.texture2d.red_integer_int_r32i
+KHR-GLES32.core.internalformat.texture2d.depth_component_unsigned_short_depth_component16
+KHR-GLES32.core.internalformat.texture2d.depth_component_unsigned_int_depth_component24
+KHR-GLES32.core.internalformat.texture2d.depth_component_unsigned_int_depth_component16
+KHR-GLES32.core.internalformat.texture2d.depth_component_float_depth_component32f
 KHR-GLES32.core.internalformat.texture2d.depth_stencil_unsigned_int_24_8_depth24_stencil8
+KHR-GLES32.core.internalformat.texture2d.depth_stencil_float_32_unsigned_int_24_8_rev_depth32f_stencil8
+KHR-GLES32.core.internalformat.texture2d.rgba_unsigned_short_5_5_5_1_rgba
+KHR-GLES32.core.internalformat.texture2d.rgb_unsigned_short_5_6_5_rgb
 KHR-GLES32.core.internalformat.copy_tex_image.rgb
 KHR-GLES32.core.internalformat.copy_tex_image.rgba
 KHR-GLES32.core.internalformat.copy_tex_image.alpha
@@ -1071,9 +1120,15 @@
 KHR-GLES32.core.internalformat.copy_tex_image.rgb565
 KHR-GLES32.core.internalformat.copy_tex_image.rgba8
 KHR-GLES32.core.internalformat.copy_tex_image.rgb8
+KHR-GLES32.core.internalformat.copy_tex_image.srgb8_alpha8
+KHR-GLES32.core.internalformat.copy_tex_image.srgb8
+KHR-GLES32.core.internalformat.copy_tex_image.r11f_g11f_b10f
 KHR-GLES32.core.internalformat.renderbuffer.rgba8
 KHR-GLES32.core.internalformat.renderbuffer.rgb8
 KHR-GLES32.core.internalformat.renderbuffer.rgb5_a1
+KHR-GLES32.core.internalformat.renderbuffer.srgb8_alpha8
+KHR-GLES32.core.internalformat.renderbuffer.depth_component32f
+KHR-GLES32.core.internalformat.renderbuffer.depth32f_stencil8
 KHR-GLES32.core.ext_texture_shadow_lod.texture.sampler2darrayshadow_fragment
 KHR-GLES32.core.ext_texture_shadow_lod.texture.sampler2darrayshadow_bias_fragment
 KHR-GLES32.core.ext_texture_shadow_lod.texture.samplercubearrayshadow_vertex
@@ -1091,3 +1146,18 @@
 KHR-GLES32.core.ext_texture_shadow_lod.texturelodoffset.sampler2darrayshadow_fragment
 KHR-GLES32.core.nearest_edge.offset_left
 KHR-GLES32.core.nearest_edge.offset_right
+KHR-GLES32.core.framebuffer_completeness.incomplete_missing_attachment
+KHR-GLES32.core.framebuffer_completeness.incomplete_image_zero_width
+KHR-GLES32.core.framebuffer_completeness.incomplete_image_zero_height
+KHR-GLES32.core.framebuffer_completeness.incomplete_texture_3d_layer_oob
+KHR-GLES32.core.framebuffer_completeness.incomplete_texture_2d_layer_oob
+KHR-GLES32.core.framebuffer_completeness.incomplete_texture_2d_mm_layer_oob
+KHR-GLES32.core.framebuffer_completeness.mutable_nbl_texture_expect_mipmap_complete
+KHR-GLES32.core.framebuffer_completeness.mutable_nbl_texture_expect_cube_complete
+KHR-GLES32.core.framebuffer_completeness.expect_renderable_internal_format
+KHR-GLES32.core.framebuffer_completeness.all_rbos_expect_same_numsamples
+KHR-GLES32.core.framebuffer_completeness.rbo_and_texture_expect_zero_numsamples
+KHR-GLES32.core.framebuffer_completeness.expect_equal_numsamples
+KHR-GLES32.core.framebuffer_completeness.status_tracking
+KHR-GLES32.core.framebuffer_completeness.mutable_texture_missing_attachment_level
+KHR-GLES32.core.framebuffer_completeness.immutable_texture_any_level_as_attachment
diff --git a/external/openglcts/data/mustpass/gles/khronos_mustpass/3.2.6.x/gles3-khr-master.txt b/external/openglcts/data/mustpass/gles/khronos_mustpass/3.2.6.x/gles3-khr-master.txt
index abf2826..96f2957 100644
--- a/external/openglcts/data/mustpass/gles/khronos_mustpass/3.2.6.x/gles3-khr-master.txt
+++ b/external/openglcts/data/mustpass/gles/khronos_mustpass/3.2.6.x/gles3-khr-master.txt
@@ -2579,6 +2579,654 @@
 KHR-GLES3.shaders.uniform_block.random.all_shared_buffer.19
 KHR-GLES3.shaders.uniform_block.common.precision_matching
 KHR-GLES3.shaders.uniform_block.common.name_matching
+KHR-GLES3.shaders.glsl_constructors.vec2_from_mat2_vs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_mat2_fs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_mat2_mat2_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_mat2_mat2_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_mat2x3_vs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_mat2x3_fs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_mat2x3_mat2x3_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_mat2x3_mat2x3_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_mat2x4_vs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_mat2x4_fs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_mat2x4_mat2x4_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_mat2x4_mat2x4_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_mat3_vs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_mat3_fs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_mat3_mat3_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_mat3_mat3_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_mat3x2_vs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_mat3x2_fs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_mat3x2_mat3x2_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_mat3x2_mat3x2_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_mat3x4_vs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_mat3x4_fs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_mat3x4_mat3x4_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_mat3x4_mat3x4_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_mat4_vs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_mat4_fs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_mat4_mat4_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_mat4_mat4_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_mat4x2_vs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_mat4x2_fs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_mat4x2_mat4x2_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_mat4x2_mat4x2_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_mat4x3_vs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_mat4x3_fs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_mat4x3_mat4x3_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_mat4x3_mat4x3_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_float_mat2_vs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_float_mat2_fs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_float_mat2_float_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_float_mat2_float_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_float_mat2x3_vs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_float_mat2x3_fs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_float_mat2x3_float_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_float_mat2x3_float_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_float_mat2x4_vs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_float_mat2x4_fs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_float_mat2x4_float_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_float_mat2x4_float_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_float_mat3_vs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_float_mat3_fs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_float_mat3_float_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_float_mat3_float_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_float_mat3x2_vs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_float_mat3x2_fs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_float_mat3x2_float_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_float_mat3x2_float_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_float_mat3x4_vs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_float_mat3x4_fs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_float_mat3x4_float_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_float_mat3x4_float_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_float_mat4_vs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_float_mat4_fs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_float_mat4_float_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_float_mat4_float_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_float_mat4x2_vs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_float_mat4x2_fs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_float_mat4x2_float_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_float_mat4x2_float_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_float_mat4x3_vs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_float_mat4x3_fs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_float_mat4x3_float_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_float_mat4x3_float_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_mat2_vs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_mat2_fs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_mat2_mat2_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_mat2_mat2_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_mat2x3_vs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_mat2x3_fs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_mat2x3_mat2x3_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_mat2x3_mat2x3_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_mat2x4_vs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_mat2x4_fs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_mat2x4_mat2x4_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_mat2x4_mat2x4_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_mat3_vs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_mat3_fs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_mat3_mat3_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_mat3_mat3_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_mat3x2_vs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_mat3x2_fs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_mat3x2_mat3x2_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_mat3x2_mat3x2_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_mat3x4_vs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_mat3x4_fs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_mat3x4_mat3x4_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_mat3x4_mat3x4_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_mat4_vs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_mat4_fs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_mat4_mat4_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_mat4_mat4_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_mat4x2_vs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_mat4x2_fs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_mat4x2_mat4x2_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_mat4x2_mat4x2_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_mat4x3_vs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_mat4x3_fs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_mat4x3_mat4x3_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_mat4x3_mat4x3_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_float_mat2_vs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_float_mat2_fs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_float_mat2_float_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_float_mat2_float_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_float_mat2x3_vs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_float_mat2x3_fs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_float_mat2x3_float_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_float_mat2x3_float_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_float_mat2x4_vs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_float_mat2x4_fs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_float_mat2x4_float_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_float_mat2x4_float_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_float_mat3_vs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_float_mat3_fs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_float_mat3_float_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_float_mat3_float_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_float_mat3x2_vs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_float_mat3x2_fs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_float_mat3x2_float_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_float_mat3x2_float_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_float_mat3x4_vs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_float_mat3x4_fs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_float_mat3x4_float_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_float_mat3x4_float_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_float_mat4_vs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_float_mat4_fs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_float_mat4_float_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_float_mat4_float_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_float_mat4x2_vs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_float_mat4x2_fs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_float_mat4x2_float_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_float_mat4x2_float_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_float_mat4x3_vs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_float_mat4x3_fs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_float_mat4x3_float_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_float_mat4x3_float_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_mat2_vs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_mat2_fs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_mat2_mat2_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_mat2_mat2_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_mat2x3_vs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_mat2x3_fs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_mat2x3_mat2x3_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_mat2x3_mat2x3_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_mat2x4_vs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_mat2x4_fs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_mat2x4_mat2x4_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_mat2x4_mat2x4_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_mat3_vs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_mat3_fs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_mat3_mat3_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_mat3_mat3_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_mat3x2_vs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_mat3x2_fs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_mat3x2_mat3x2_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_mat3x2_mat3x2_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_mat3x4_vs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_mat3x4_fs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_mat3x4_mat3x4_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_mat3x4_mat3x4_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_mat4_vs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_mat4_fs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_mat4_mat4_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_mat4_mat4_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_mat4x2_vs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_mat4x2_fs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_mat4x2_mat4x2_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_mat4x2_mat4x2_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_mat4x3_vs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_mat4x3_fs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_mat4x3_mat4x3_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_mat4x3_mat4x3_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_float_mat2_vs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_float_mat2_fs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_float_mat2_float_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_float_mat2_float_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_float_mat2x3_vs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_float_mat2x3_fs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_float_mat2x3_float_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_float_mat2x3_float_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_float_mat2x4_vs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_float_mat2x4_fs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_float_mat2x4_float_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_float_mat2x4_float_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_float_mat3_vs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_float_mat3_fs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_float_mat3_float_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_float_mat3_float_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_float_mat3x2_vs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_float_mat3x2_fs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_float_mat3x2_float_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_float_mat3x2_float_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_float_mat3x4_vs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_float_mat3x4_fs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_float_mat3x4_float_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_float_mat3x4_float_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_float_mat4_vs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_float_mat4_fs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_float_mat4_float_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_float_mat4_float_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_float_mat4x2_vs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_float_mat4x2_fs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_float_mat4x2_float_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_float_mat4x2_float_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_float_mat4x3_vs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_float_mat4x3_fs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_float_mat4x3_float_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_float_mat4x3_float_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_mat2_vs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_mat2_fs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_mat2_mat2_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_mat2_mat2_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_mat2x3_vs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_mat2x3_fs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_mat2x3_mat2x3_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_mat2x3_mat2x3_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_mat2x4_vs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_mat2x4_fs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_mat2x4_mat2x4_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_mat2x4_mat2x4_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_mat3_vs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_mat3_fs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_mat3_mat3_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_mat3_mat3_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_mat3x2_vs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_mat3x2_fs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_mat3x2_mat3x2_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_mat3x2_mat3x2_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_mat3x4_vs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_mat3x4_fs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_mat3x4_mat3x4_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_mat3x4_mat3x4_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_mat4_vs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_mat4_fs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_mat4_mat4_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_mat4_mat4_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_mat4x2_vs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_mat4x2_fs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_mat4x2_mat4x2_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_mat4x2_mat4x2_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_mat4x3_vs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_mat4x3_fs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_mat4x3_mat4x3_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_mat4x3_mat4x3_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_int_mat2_vs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_int_mat2_fs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_int_mat2_int_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_int_mat2_int_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_int_mat2x3_vs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_int_mat2x3_fs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_int_mat2x3_int_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_int_mat2x3_int_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_int_mat2x4_vs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_int_mat2x4_fs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_int_mat2x4_int_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_int_mat2x4_int_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_int_mat3_vs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_int_mat3_fs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_int_mat3_int_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_int_mat3_int_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_int_mat3x2_vs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_int_mat3x2_fs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_int_mat3x2_int_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_int_mat3x2_int_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_int_mat3x4_vs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_int_mat3x4_fs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_int_mat3x4_int_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_int_mat3x4_int_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_int_mat4_vs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_int_mat4_fs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_int_mat4_int_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_int_mat4_int_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_int_mat4x2_vs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_int_mat4x2_fs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_int_mat4x2_int_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_int_mat4x2_int_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_int_mat4x3_vs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_int_mat4x3_fs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_int_mat4x3_int_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_int_mat4x3_int_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_mat2_vs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_mat2_fs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_mat2_mat2_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_mat2_mat2_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_mat2x3_vs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_mat2x3_fs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_mat2x3_mat2x3_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_mat2x3_mat2x3_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_mat2x4_vs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_mat2x4_fs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_mat2x4_mat2x4_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_mat2x4_mat2x4_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_mat3_vs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_mat3_fs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_mat3_mat3_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_mat3_mat3_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_mat3x2_vs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_mat3x2_fs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_mat3x2_mat3x2_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_mat3x2_mat3x2_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_mat3x4_vs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_mat3x4_fs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_mat3x4_mat3x4_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_mat3x4_mat3x4_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_mat4_vs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_mat4_fs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_mat4_mat4_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_mat4_mat4_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_mat4x2_vs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_mat4x2_fs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_mat4x2_mat4x2_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_mat4x2_mat4x2_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_mat4x3_vs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_mat4x3_fs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_mat4x3_mat4x3_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_mat4x3_mat4x3_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_int_mat2_vs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_int_mat2_fs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_int_mat2_int_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_int_mat2_int_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_int_mat2x3_vs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_int_mat2x3_fs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_int_mat2x3_int_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_int_mat2x3_int_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_int_mat2x4_vs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_int_mat2x4_fs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_int_mat2x4_int_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_int_mat2x4_int_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_int_mat3_vs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_int_mat3_fs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_int_mat3_int_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_int_mat3_int_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_int_mat3x2_vs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_int_mat3x2_fs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_int_mat3x2_int_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_int_mat3x2_int_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_int_mat3x4_vs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_int_mat3x4_fs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_int_mat3x4_int_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_int_mat3x4_int_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_int_mat4_vs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_int_mat4_fs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_int_mat4_int_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_int_mat4_int_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_int_mat4x2_vs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_int_mat4x2_fs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_int_mat4x2_int_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_int_mat4x2_int_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_int_mat4x3_vs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_int_mat4x3_fs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_int_mat4x3_int_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_int_mat4x3_int_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_mat2_vs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_mat2_fs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_mat2_mat2_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_mat2_mat2_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_mat2x3_vs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_mat2x3_fs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_mat2x3_mat2x3_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_mat2x3_mat2x3_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_mat2x4_vs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_mat2x4_fs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_mat2x4_mat2x4_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_mat2x4_mat2x4_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_mat3_vs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_mat3_fs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_mat3_mat3_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_mat3_mat3_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_mat3x2_vs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_mat3x2_fs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_mat3x2_mat3x2_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_mat3x2_mat3x2_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_mat3x4_vs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_mat3x4_fs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_mat3x4_mat3x4_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_mat3x4_mat3x4_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_mat4_vs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_mat4_fs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_mat4_mat4_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_mat4_mat4_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_mat4x2_vs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_mat4x2_fs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_mat4x2_mat4x2_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_mat4x2_mat4x2_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_mat4x3_vs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_mat4x3_fs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_mat4x3_mat4x3_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_mat4x3_mat4x3_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_int_mat2_vs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_int_mat2_fs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_int_mat2_int_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_int_mat2_int_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_int_mat2x3_vs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_int_mat2x3_fs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_int_mat2x3_int_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_int_mat2x3_int_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_int_mat2x4_vs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_int_mat2x4_fs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_int_mat2x4_int_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_int_mat2x4_int_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_int_mat3_vs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_int_mat3_fs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_int_mat3_int_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_int_mat3_int_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_int_mat3x2_vs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_int_mat3x2_fs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_int_mat3x2_int_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_int_mat3x2_int_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_int_mat3x4_vs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_int_mat3x4_fs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_int_mat3x4_int_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_int_mat3x4_int_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_int_mat4_vs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_int_mat4_fs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_int_mat4_int_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_int_mat4_int_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_int_mat4x2_vs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_int_mat4x2_fs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_int_mat4x2_int_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_int_mat4x2_int_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_int_mat4x3_vs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_int_mat4x3_fs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_int_mat4x3_int_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_int_mat4x3_int_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_mat2_vs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_mat2_fs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_mat2_mat2_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_mat2_mat2_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_mat2x3_vs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_mat2x3_fs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_mat2x3_mat2x3_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_mat2x3_mat2x3_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_mat2x4_vs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_mat2x4_fs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_mat2x4_mat2x4_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_mat2x4_mat2x4_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_mat3_vs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_mat3_fs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_mat3_mat3_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_mat3_mat3_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_mat3x2_vs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_mat3x2_fs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_mat3x2_mat3x2_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_mat3x2_mat3x2_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_mat3x4_vs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_mat3x4_fs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_mat3x4_mat3x4_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_mat3x4_mat3x4_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_mat4_vs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_mat4_fs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_mat4_mat4_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_mat4_mat4_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_mat4x2_vs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_mat4x2_fs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_mat4x2_mat4x2_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_mat4x2_mat4x2_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_mat4x3_vs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_mat4x3_fs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_mat4x3_mat4x3_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_mat4x3_mat4x3_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_bool_mat2_vs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_bool_mat2_fs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_bool_mat2_bool_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_bool_mat2_bool_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_bool_mat2x3_vs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_bool_mat2x3_fs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_bool_mat2x3_bool_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_bool_mat2x3_bool_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_bool_mat2x4_vs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_bool_mat2x4_fs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_bool_mat2x4_bool_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_bool_mat2x4_bool_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_bool_mat3_vs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_bool_mat3_fs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_bool_mat3_bool_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_bool_mat3_bool_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_bool_mat3x2_vs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_bool_mat3x2_fs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_bool_mat3x2_bool_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_bool_mat3x2_bool_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_bool_mat3x4_vs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_bool_mat3x4_fs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_bool_mat3x4_bool_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_bool_mat3x4_bool_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_bool_mat4_vs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_bool_mat4_fs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_bool_mat4_bool_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_bool_mat4_bool_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_bool_mat4x2_vs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_bool_mat4x2_fs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_bool_mat4x2_bool_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_bool_mat4x2_bool_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_bool_mat4x3_vs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_bool_mat4x3_fs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_bool_mat4x3_bool_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_bool_mat4x3_bool_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_mat2_vs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_mat2_fs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_mat2_mat2_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_mat2_mat2_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_mat2x3_vs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_mat2x3_fs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_mat2x3_mat2x3_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_mat2x3_mat2x3_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_mat2x4_vs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_mat2x4_fs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_mat2x4_mat2x4_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_mat2x4_mat2x4_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_mat3_vs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_mat3_fs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_mat3_mat3_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_mat3_mat3_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_mat3x2_vs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_mat3x2_fs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_mat3x2_mat3x2_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_mat3x2_mat3x2_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_mat3x4_vs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_mat3x4_fs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_mat3x4_mat3x4_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_mat3x4_mat3x4_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_mat4_vs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_mat4_fs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_mat4_mat4_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_mat4_mat4_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_mat4x2_vs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_mat4x2_fs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_mat4x2_mat4x2_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_mat4x2_mat4x2_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_mat4x3_vs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_mat4x3_fs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_mat4x3_mat4x3_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_mat4x3_mat4x3_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_bool_mat2_vs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_bool_mat2_fs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_bool_mat2_bool_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_bool_mat2_bool_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_bool_mat2x3_vs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_bool_mat2x3_fs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_bool_mat2x3_bool_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_bool_mat2x3_bool_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_bool_mat2x4_vs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_bool_mat2x4_fs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_bool_mat2x4_bool_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_bool_mat2x4_bool_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_bool_mat3_vs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_bool_mat3_fs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_bool_mat3_bool_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_bool_mat3_bool_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_bool_mat3x2_vs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_bool_mat3x2_fs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_bool_mat3x2_bool_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_bool_mat3x2_bool_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_bool_mat3x4_vs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_bool_mat3x4_fs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_bool_mat3x4_bool_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_bool_mat3x4_bool_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_bool_mat4_vs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_bool_mat4_fs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_bool_mat4_bool_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_bool_mat4_bool_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_bool_mat4x2_vs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_bool_mat4x2_fs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_bool_mat4x2_bool_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_bool_mat4x2_bool_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_bool_mat4x3_vs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_bool_mat4x3_fs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_bool_mat4x3_bool_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_bool_mat4x3_bool_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_mat2_vs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_mat2_fs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_mat2_mat2_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_mat2_mat2_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_mat2x3_vs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_mat2x3_fs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_mat2x3_mat2x3_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_mat2x3_mat2x3_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_mat2x4_vs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_mat2x4_fs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_mat2x4_mat2x4_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_mat2x4_mat2x4_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_mat3_vs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_mat3_fs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_mat3_mat3_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_mat3_mat3_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_mat3x2_vs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_mat3x2_fs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_mat3x2_mat3x2_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_mat3x2_mat3x2_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_mat3x4_vs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_mat3x4_fs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_mat3x4_mat3x4_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_mat3x4_mat3x4_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_mat4_vs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_mat4_fs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_mat4_mat4_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_mat4_mat4_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_mat4x2_vs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_mat4x2_fs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_mat4x2_mat4x2_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_mat4x2_mat4x2_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_mat4x3_vs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_mat4x3_fs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_mat4x3_mat4x3_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_mat4x3_mat4x3_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_bool_mat2_vs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_bool_mat2_fs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_bool_mat2_bool_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_bool_mat2_bool_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_bool_mat2x3_vs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_bool_mat2x3_fs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_bool_mat2x3_bool_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_bool_mat2x3_bool_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_bool_mat2x4_vs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_bool_mat2x4_fs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_bool_mat2x4_bool_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_bool_mat2x4_bool_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_bool_mat3_vs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_bool_mat3_fs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_bool_mat3_bool_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_bool_mat3_bool_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_bool_mat3x2_vs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_bool_mat3x2_fs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_bool_mat3x2_bool_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_bool_mat3x2_bool_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_bool_mat3x4_vs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_bool_mat3x4_fs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_bool_mat3x4_bool_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_bool_mat3x4_bool_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_bool_mat4_vs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_bool_mat4_fs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_bool_mat4_bool_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_bool_mat4_bool_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_bool_mat4x2_vs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_bool_mat4x2_fs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_bool_mat4x2_bool_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_bool_mat4x2_bool_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_bool_mat4x3_vs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_bool_mat4x3_fs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_bool_mat4x3_bool_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_bool_mat4x3_bool_invalid_fs
 KHR-GLES3.shaders.shader_integer_mix.define
 KHR-GLES3.shaders.shader_integer_mix.prototypes-extension
 KHR-GLES3.shaders.shader_integer_mix.prototypes
@@ -3252,19 +3900,68 @@
 KHR-GLES3.core.internalformat.texture2d.rgba_float_rgba32f
 KHR-GLES3.core.internalformat.texture2d.rgb_float_rgb32f_linear
 KHR-GLES3.core.internalformat.texture2d.rgba_float_rgba32f_linear
-KHR-GLES3.core.internalformat.texture2d.rgba_unsigned_byte_rgba4
-KHR-GLES3.core.internalformat.texture2d.rgba_unsigned_byte_rgb5_a1
-KHR-GLES3.core.internalformat.texture2d.rgb_unsigned_byte_rgb565
-KHR-GLES3.core.internalformat.texture2d.rgba_unsigned_short_4_4_4_4_rgba4
-KHR-GLES3.core.internalformat.texture2d.rgba_unsigned_short_5_5_5_1_rgba
-KHR-GLES3.core.internalformat.texture2d.rgba_unsigned_short_5_5_5_1_rgb5_a1
-KHR-GLES3.core.internalformat.texture2d.rgb_unsigned_short_5_6_5_rgb
-KHR-GLES3.core.internalformat.texture2d.rgb_unsigned_short_5_6_5_rgb565
-KHR-GLES3.core.internalformat.texture2d.rgb_unsigned_byte_rgb8
 KHR-GLES3.core.internalformat.texture2d.rgba_unsigned_byte_rgba8
-KHR-GLES3.core.internalformat.texture2d.rgb_half_float_rgb16f
+KHR-GLES3.core.internalformat.texture2d.rgba_unsigned_byte_rgb5_a1
+KHR-GLES3.core.internalformat.texture2d.rgba_unsigned_byte_rgba4
+KHR-GLES3.core.internalformat.texture2d.rgba_unsigned_byte_srgb8_alpha8
+KHR-GLES3.core.internalformat.texture2d.rgba_byte_rgba8_snorm
+KHR-GLES3.core.internalformat.texture2d.rgba_unsigned_short_4_4_4_4_rgba4
+KHR-GLES3.core.internalformat.texture2d.rgba_unsigned_short_5_5_5_1_rgb5_a1
 KHR-GLES3.core.internalformat.texture2d.rgba_half_float_rgba16f
+KHR-GLES3.core.internalformat.texture2d.rgba_float_rgba16f
+KHR-GLES3.core.internalformat.texture2d.rgba_integer_unsigned_byte_rgba8ui
+KHR-GLES3.core.internalformat.texture2d.rgba_integer_byte_rgba8i
+KHR-GLES3.core.internalformat.texture2d.rgba_integer_unsigned_short_rgba16ui
+KHR-GLES3.core.internalformat.texture2d.rgba_integer_short_rgba16i
+KHR-GLES3.core.internalformat.texture2d.rgba_integer_unsigned_int_rgba32ui
+KHR-GLES3.core.internalformat.texture2d.rgba_integer_int_rgba32i
+KHR-GLES3.core.internalformat.texture2d.rgba_integer_unsigned_int_2_10_10_10_rev_rgb10_a2ui
+KHR-GLES3.core.internalformat.texture2d.rgb_unsigned_byte_rgb8
+KHR-GLES3.core.internalformat.texture2d.rgb_unsigned_byte_rgb565
+KHR-GLES3.core.internalformat.texture2d.rgb_unsigned_byte_srgb8
+KHR-GLES3.core.internalformat.texture2d.rgb_unsigned_short_5_6_5_rgb565
+KHR-GLES3.core.internalformat.texture2d.rgb_unsigned_int_10f_11f_11f_rev_r11f_g11f_b10f
+KHR-GLES3.core.internalformat.texture2d.rgb_unsigned_int_5_9_9_9_rev_rgb9_e5
+KHR-GLES3.core.internalformat.texture2d.rgb_half_float_rgb16f
+KHR-GLES3.core.internalformat.texture2d.rgb_half_float_r11f_g11f_b10f
+KHR-GLES3.core.internalformat.texture2d.rgb_half_float_rgb9_e5
+KHR-GLES3.core.internalformat.texture2d.rgb_float_rgb16f
+KHR-GLES3.core.internalformat.texture2d.rgb_float_r11f_g11f_b10f
+KHR-GLES3.core.internalformat.texture2d.rgb_float_rgb9_e5
+KHR-GLES3.core.internalformat.texture2d.rgb_integer_unsigned_byte_rgb8ui
+KHR-GLES3.core.internalformat.texture2d.rgb_integer_byte_rgb8i
+KHR-GLES3.core.internalformat.texture2d.rgb_integer_unsigned_short_rgb16ui
+KHR-GLES3.core.internalformat.texture2d.rgb_integer_short_rgb16i
+KHR-GLES3.core.internalformat.texture2d.rgb_integer_unsigned_int_rgb32ui
+KHR-GLES3.core.internalformat.texture2d.rgb_integer_int_rgb32i
+KHR-GLES3.core.internalformat.texture2d.rg_unsigned_byte_rg8
+KHR-GLES3.core.internalformat.texture2d.rg_half_float_rg16f
+KHR-GLES3.core.internalformat.texture2d.rg_float_rg32f
+KHR-GLES3.core.internalformat.texture2d.rg_float_rg16f
+KHR-GLES3.core.internalformat.texture2d.rg_integer_unsigned_byte_rg8ui
+KHR-GLES3.core.internalformat.texture2d.rg_integer_byte_rg8i
+KHR-GLES3.core.internalformat.texture2d.rg_integer_unsigned_short_rg16ui
+KHR-GLES3.core.internalformat.texture2d.rg_integer_short_rg16i
+KHR-GLES3.core.internalformat.texture2d.rg_integer_unsigned_int_rg32ui
+KHR-GLES3.core.internalformat.texture2d.rg_integer_int_rg32i
+KHR-GLES3.core.internalformat.texture2d.red_unsigned_byte_r8
+KHR-GLES3.core.internalformat.texture2d.red_half_float_r16f
+KHR-GLES3.core.internalformat.texture2d.red_float_r32f
+KHR-GLES3.core.internalformat.texture2d.red_float_r16f
+KHR-GLES3.core.internalformat.texture2d.red_integer_unsigned_byte_r8ui
+KHR-GLES3.core.internalformat.texture2d.red_integer_byte_r8i
+KHR-GLES3.core.internalformat.texture2d.red_integer_unsigned_short_r16ui
+KHR-GLES3.core.internalformat.texture2d.red_integer_short_r16i
+KHR-GLES3.core.internalformat.texture2d.red_integer_unsigned_int_r32ui
+KHR-GLES3.core.internalformat.texture2d.red_integer_int_r32i
+KHR-GLES3.core.internalformat.texture2d.depth_component_unsigned_short_depth_component16
+KHR-GLES3.core.internalformat.texture2d.depth_component_unsigned_int_depth_component24
+KHR-GLES3.core.internalformat.texture2d.depth_component_unsigned_int_depth_component16
+KHR-GLES3.core.internalformat.texture2d.depth_component_float_depth_component32f
 KHR-GLES3.core.internalformat.texture2d.depth_stencil_unsigned_int_24_8_depth24_stencil8
+KHR-GLES3.core.internalformat.texture2d.depth_stencil_float_32_unsigned_int_24_8_rev_depth32f_stencil8
+KHR-GLES3.core.internalformat.texture2d.rgba_unsigned_short_5_5_5_1_rgba
+KHR-GLES3.core.internalformat.texture2d.rgb_unsigned_short_5_6_5_rgb
 KHR-GLES3.core.internalformat.copy_tex_image.rgb
 KHR-GLES3.core.internalformat.copy_tex_image.rgba
 KHR-GLES3.core.internalformat.copy_tex_image.alpha
@@ -3275,9 +3972,15 @@
 KHR-GLES3.core.internalformat.copy_tex_image.rgb565
 KHR-GLES3.core.internalformat.copy_tex_image.rgba8
 KHR-GLES3.core.internalformat.copy_tex_image.rgb8
+KHR-GLES3.core.internalformat.copy_tex_image.srgb8_alpha8
+KHR-GLES3.core.internalformat.copy_tex_image.srgb8
+KHR-GLES3.core.internalformat.copy_tex_image.r11f_g11f_b10f
 KHR-GLES3.core.internalformat.renderbuffer.rgba8
 KHR-GLES3.core.internalformat.renderbuffer.rgb8
 KHR-GLES3.core.internalformat.renderbuffer.rgb5_a1
+KHR-GLES3.core.internalformat.renderbuffer.srgb8_alpha8
+KHR-GLES3.core.internalformat.renderbuffer.depth_component32f
+KHR-GLES3.core.internalformat.renderbuffer.depth32f_stencil8
 KHR-GLES3.core.nearest_edge.offset_left
 KHR-GLES3.core.nearest_edge.offset_right
 KHR-GLES3.parallel_shader_compile.simple_queries
@@ -3479,6 +4182,20 @@
 KHR-GLES3.packed_depth_stencil.blit.depth32f_stencil8
 KHR-GLES3.packed_depth_stencil.stencil_texturing.depth24_stencil8
 KHR-GLES3.packed_depth_stencil.stencil_texturing.depth32f_stencil8
+KHR-GLES3.framebuffer_completeness.incomplete_missing_attachment
+KHR-GLES3.framebuffer_completeness.incomplete_image_zero_width
+KHR-GLES3.framebuffer_completeness.incomplete_image_zero_height
+KHR-GLES3.framebuffer_completeness.incomplete_texture_3d_layer_oob
+KHR-GLES3.framebuffer_completeness.incomplete_texture_2d_layer_oob
+KHR-GLES3.framebuffer_completeness.incomplete_texture_2d_mm_layer_oob
+KHR-GLES3.framebuffer_completeness.mutable_nbl_texture_expect_mipmap_complete
+KHR-GLES3.framebuffer_completeness.mutable_nbl_texture_expect_cube_complete
+KHR-GLES3.framebuffer_completeness.expect_renderable_internal_format
+KHR-GLES3.framebuffer_completeness.all_rbos_expect_same_numsamples
+KHR-GLES3.framebuffer_completeness.rbo_and_texture_expect_zero_numsamples
+KHR-GLES3.framebuffer_completeness.status_tracking
+KHR-GLES3.framebuffer_completeness.mutable_texture_missing_attachment_level
+KHR-GLES3.framebuffer_completeness.immutable_texture_any_level_as_attachment
 KHR-GLES3.copy_tex_image_conversions.forbidden.texture2d_texture2d
 KHR-GLES3.copy_tex_image_conversions.forbidden.texture2d_cubemap_negx
 KHR-GLES3.copy_tex_image_conversions.forbidden.texture2d_cubemap_negy
@@ -3619,3 +4336,21 @@
 KHR-GLES3.copy_tex_image_conversions.required.renderbuffer_cubemap_posx
 KHR-GLES3.copy_tex_image_conversions.required.renderbuffer_cubemap_posy
 KHR-GLES3.copy_tex_image_conversions.required.renderbuffer_cubemap_posz
+KHR-GLES3.number_parsing.unsigned_integer_above_signed_range_decimal
+KHR-GLES3.number_parsing.unsigned_integer_above_signed_range_base8
+KHR-GLES3.number_parsing.unsigned_integer_above_signed_range_base16
+KHR-GLES3.number_parsing.unsigned_integer_smallest_value_above_signed_range_decimal
+KHR-GLES3.number_parsing.unsigned_integer_smallest_value_above_signed_range_base8
+KHR-GLES3.number_parsing.unsigned_integer_smallest_value_above_signed_range_base16
+KHR-GLES3.number_parsing.unsigned_integer_max_value_decimal
+KHR-GLES3.number_parsing.unsigned_integer_max_value_base8
+KHR-GLES3.number_parsing.unsigned_integer_max_value_base16
+KHR-GLES3.number_parsing.unsigned_integer_too_large_value_invalid
+KHR-GLES3.number_parsing.unsigned_integer_negative_value_as_uint
+KHR-GLES3.number_parsing.float_out_of_range_as_infinity
+KHR-GLES3.number_parsing.float_out_of_range_as_zero
+KHR-GLES3.number_parsing.float_no_limit_on_number_of_digits_positive_exponent
+KHR-GLES3.number_parsing.float_no_limit_on_number_of_digits_negative_exponent
+KHR-GLES3.number_parsing.float_slightly_out_of_range_exponent_as_positive_infinity
+KHR-GLES3.number_parsing.float_overflow_to_positive_infinity
+KHR-GLES3.number_parsing.float_overflow_to_negative_infinity
diff --git a/external/openglcts/data/mustpass/gles/khronos_mustpass/3.2.6.x/gles31-khr-master.txt b/external/openglcts/data/mustpass/gles/khronos_mustpass/3.2.6.x/gles31-khr-master.txt
index 67bc003..bda186f 100644
--- a/external/openglcts/data/mustpass/gles/khronos_mustpass/3.2.6.x/gles31-khr-master.txt
+++ b/external/openglcts/data/mustpass/gles/khronos_mustpass/3.2.6.x/gles31-khr-master.txt
@@ -2282,19 +2282,68 @@
 KHR-GLES31.core.internalformat.texture2d.rgba_float_rgba32f
 KHR-GLES31.core.internalformat.texture2d.rgb_float_rgb32f_linear
 KHR-GLES31.core.internalformat.texture2d.rgba_float_rgba32f_linear
-KHR-GLES31.core.internalformat.texture2d.rgba_unsigned_byte_rgba4
-KHR-GLES31.core.internalformat.texture2d.rgba_unsigned_byte_rgb5_a1
-KHR-GLES31.core.internalformat.texture2d.rgb_unsigned_byte_rgb565
-KHR-GLES31.core.internalformat.texture2d.rgba_unsigned_short_4_4_4_4_rgba4
-KHR-GLES31.core.internalformat.texture2d.rgba_unsigned_short_5_5_5_1_rgba
-KHR-GLES31.core.internalformat.texture2d.rgba_unsigned_short_5_5_5_1_rgb5_a1
-KHR-GLES31.core.internalformat.texture2d.rgb_unsigned_short_5_6_5_rgb
-KHR-GLES31.core.internalformat.texture2d.rgb_unsigned_short_5_6_5_rgb565
-KHR-GLES31.core.internalformat.texture2d.rgb_unsigned_byte_rgb8
 KHR-GLES31.core.internalformat.texture2d.rgba_unsigned_byte_rgba8
-KHR-GLES31.core.internalformat.texture2d.rgb_half_float_rgb16f
+KHR-GLES31.core.internalformat.texture2d.rgba_unsigned_byte_rgb5_a1
+KHR-GLES31.core.internalformat.texture2d.rgba_unsigned_byte_rgba4
+KHR-GLES31.core.internalformat.texture2d.rgba_unsigned_byte_srgb8_alpha8
+KHR-GLES31.core.internalformat.texture2d.rgba_byte_rgba8_snorm
+KHR-GLES31.core.internalformat.texture2d.rgba_unsigned_short_4_4_4_4_rgba4
+KHR-GLES31.core.internalformat.texture2d.rgba_unsigned_short_5_5_5_1_rgb5_a1
 KHR-GLES31.core.internalformat.texture2d.rgba_half_float_rgba16f
+KHR-GLES31.core.internalformat.texture2d.rgba_float_rgba16f
+KHR-GLES31.core.internalformat.texture2d.rgba_integer_unsigned_byte_rgba8ui
+KHR-GLES31.core.internalformat.texture2d.rgba_integer_byte_rgba8i
+KHR-GLES31.core.internalformat.texture2d.rgba_integer_unsigned_short_rgba16ui
+KHR-GLES31.core.internalformat.texture2d.rgba_integer_short_rgba16i
+KHR-GLES31.core.internalformat.texture2d.rgba_integer_unsigned_int_rgba32ui
+KHR-GLES31.core.internalformat.texture2d.rgba_integer_int_rgba32i
+KHR-GLES31.core.internalformat.texture2d.rgba_integer_unsigned_int_2_10_10_10_rev_rgb10_a2ui
+KHR-GLES31.core.internalformat.texture2d.rgb_unsigned_byte_rgb8
+KHR-GLES31.core.internalformat.texture2d.rgb_unsigned_byte_rgb565
+KHR-GLES31.core.internalformat.texture2d.rgb_unsigned_byte_srgb8
+KHR-GLES31.core.internalformat.texture2d.rgb_unsigned_short_5_6_5_rgb565
+KHR-GLES31.core.internalformat.texture2d.rgb_unsigned_int_10f_11f_11f_rev_r11f_g11f_b10f
+KHR-GLES31.core.internalformat.texture2d.rgb_unsigned_int_5_9_9_9_rev_rgb9_e5
+KHR-GLES31.core.internalformat.texture2d.rgb_half_float_rgb16f
+KHR-GLES31.core.internalformat.texture2d.rgb_half_float_r11f_g11f_b10f
+KHR-GLES31.core.internalformat.texture2d.rgb_half_float_rgb9_e5
+KHR-GLES31.core.internalformat.texture2d.rgb_float_rgb16f
+KHR-GLES31.core.internalformat.texture2d.rgb_float_r11f_g11f_b10f
+KHR-GLES31.core.internalformat.texture2d.rgb_float_rgb9_e5
+KHR-GLES31.core.internalformat.texture2d.rgb_integer_unsigned_byte_rgb8ui
+KHR-GLES31.core.internalformat.texture2d.rgb_integer_byte_rgb8i
+KHR-GLES31.core.internalformat.texture2d.rgb_integer_unsigned_short_rgb16ui
+KHR-GLES31.core.internalformat.texture2d.rgb_integer_short_rgb16i
+KHR-GLES31.core.internalformat.texture2d.rgb_integer_unsigned_int_rgb32ui
+KHR-GLES31.core.internalformat.texture2d.rgb_integer_int_rgb32i
+KHR-GLES31.core.internalformat.texture2d.rg_unsigned_byte_rg8
+KHR-GLES31.core.internalformat.texture2d.rg_half_float_rg16f
+KHR-GLES31.core.internalformat.texture2d.rg_float_rg32f
+KHR-GLES31.core.internalformat.texture2d.rg_float_rg16f
+KHR-GLES31.core.internalformat.texture2d.rg_integer_unsigned_byte_rg8ui
+KHR-GLES31.core.internalformat.texture2d.rg_integer_byte_rg8i
+KHR-GLES31.core.internalformat.texture2d.rg_integer_unsigned_short_rg16ui
+KHR-GLES31.core.internalformat.texture2d.rg_integer_short_rg16i
+KHR-GLES31.core.internalformat.texture2d.rg_integer_unsigned_int_rg32ui
+KHR-GLES31.core.internalformat.texture2d.rg_integer_int_rg32i
+KHR-GLES31.core.internalformat.texture2d.red_unsigned_byte_r8
+KHR-GLES31.core.internalformat.texture2d.red_half_float_r16f
+KHR-GLES31.core.internalformat.texture2d.red_float_r32f
+KHR-GLES31.core.internalformat.texture2d.red_float_r16f
+KHR-GLES31.core.internalformat.texture2d.red_integer_unsigned_byte_r8ui
+KHR-GLES31.core.internalformat.texture2d.red_integer_byte_r8i
+KHR-GLES31.core.internalformat.texture2d.red_integer_unsigned_short_r16ui
+KHR-GLES31.core.internalformat.texture2d.red_integer_short_r16i
+KHR-GLES31.core.internalformat.texture2d.red_integer_unsigned_int_r32ui
+KHR-GLES31.core.internalformat.texture2d.red_integer_int_r32i
+KHR-GLES31.core.internalformat.texture2d.depth_component_unsigned_short_depth_component16
+KHR-GLES31.core.internalformat.texture2d.depth_component_unsigned_int_depth_component24
+KHR-GLES31.core.internalformat.texture2d.depth_component_unsigned_int_depth_component16
+KHR-GLES31.core.internalformat.texture2d.depth_component_float_depth_component32f
 KHR-GLES31.core.internalformat.texture2d.depth_stencil_unsigned_int_24_8_depth24_stencil8
+KHR-GLES31.core.internalformat.texture2d.depth_stencil_float_32_unsigned_int_24_8_rev_depth32f_stencil8
+KHR-GLES31.core.internalformat.texture2d.rgba_unsigned_short_5_5_5_1_rgba
+KHR-GLES31.core.internalformat.texture2d.rgb_unsigned_short_5_6_5_rgb
 KHR-GLES31.core.internalformat.copy_tex_image.rgb
 KHR-GLES31.core.internalformat.copy_tex_image.rgba
 KHR-GLES31.core.internalformat.copy_tex_image.alpha
@@ -2305,11 +2354,32 @@
 KHR-GLES31.core.internalformat.copy_tex_image.rgb565
 KHR-GLES31.core.internalformat.copy_tex_image.rgba8
 KHR-GLES31.core.internalformat.copy_tex_image.rgb8
+KHR-GLES31.core.internalformat.copy_tex_image.srgb8_alpha8
+KHR-GLES31.core.internalformat.copy_tex_image.srgb8
+KHR-GLES31.core.internalformat.copy_tex_image.r11f_g11f_b10f
 KHR-GLES31.core.internalformat.renderbuffer.rgba8
 KHR-GLES31.core.internalformat.renderbuffer.rgb8
 KHR-GLES31.core.internalformat.renderbuffer.rgb5_a1
+KHR-GLES31.core.internalformat.renderbuffer.srgb8_alpha8
+KHR-GLES31.core.internalformat.renderbuffer.depth_component32f
+KHR-GLES31.core.internalformat.renderbuffer.depth32f_stencil8
 KHR-GLES31.core.nearest_edge.offset_left
 KHR-GLES31.core.nearest_edge.offset_right
+KHR-GLES31.core.framebuffer_completeness.incomplete_missing_attachment
+KHR-GLES31.core.framebuffer_completeness.incomplete_image_zero_width
+KHR-GLES31.core.framebuffer_completeness.incomplete_image_zero_height
+KHR-GLES31.core.framebuffer_completeness.incomplete_texture_3d_layer_oob
+KHR-GLES31.core.framebuffer_completeness.incomplete_texture_2d_layer_oob
+KHR-GLES31.core.framebuffer_completeness.incomplete_texture_2d_mm_layer_oob
+KHR-GLES31.core.framebuffer_completeness.mutable_nbl_texture_expect_mipmap_complete
+KHR-GLES31.core.framebuffer_completeness.mutable_nbl_texture_expect_cube_complete
+KHR-GLES31.core.framebuffer_completeness.expect_renderable_internal_format
+KHR-GLES31.core.framebuffer_completeness.all_rbos_expect_same_numsamples
+KHR-GLES31.core.framebuffer_completeness.rbo_and_texture_expect_zero_numsamples
+KHR-GLES31.core.framebuffer_completeness.expect_equal_numsamples
+KHR-GLES31.core.framebuffer_completeness.status_tracking
+KHR-GLES31.core.framebuffer_completeness.mutable_texture_missing_attachment_level
+KHR-GLES31.core.framebuffer_completeness.immutable_texture_any_level_as_attachment
 KHR-GLES31.core.geometry_shader.adjacency.adjacency_non_indiced_lines
 KHR-GLES31.core.geometry_shader.adjacency.adjacency_indiced_lines
 KHR-GLES31.core.geometry_shader.adjacency.adjacency_non_indiced_line_strip
diff --git a/external/openglcts/data/mustpass/gles/khronos_mustpass/3.2.6.x/gles32-khr-master.txt b/external/openglcts/data/mustpass/gles/khronos_mustpass/3.2.6.x/gles32-khr-master.txt
index aeda3ad..9070aec 100644
--- a/external/openglcts/data/mustpass/gles/khronos_mustpass/3.2.6.x/gles32-khr-master.txt
+++ b/external/openglcts/data/mustpass/gles/khronos_mustpass/3.2.6.x/gles32-khr-master.txt
@@ -1048,19 +1048,68 @@
 KHR-GLES32.core.internalformat.texture2d.rgba_float_rgba32f
 KHR-GLES32.core.internalformat.texture2d.rgb_float_rgb32f_linear
 KHR-GLES32.core.internalformat.texture2d.rgba_float_rgba32f_linear
-KHR-GLES32.core.internalformat.texture2d.rgba_unsigned_byte_rgba4
-KHR-GLES32.core.internalformat.texture2d.rgba_unsigned_byte_rgb5_a1
-KHR-GLES32.core.internalformat.texture2d.rgb_unsigned_byte_rgb565
-KHR-GLES32.core.internalformat.texture2d.rgba_unsigned_short_4_4_4_4_rgba4
-KHR-GLES32.core.internalformat.texture2d.rgba_unsigned_short_5_5_5_1_rgba
-KHR-GLES32.core.internalformat.texture2d.rgba_unsigned_short_5_5_5_1_rgb5_a1
-KHR-GLES32.core.internalformat.texture2d.rgb_unsigned_short_5_6_5_rgb
-KHR-GLES32.core.internalformat.texture2d.rgb_unsigned_short_5_6_5_rgb565
-KHR-GLES32.core.internalformat.texture2d.rgb_unsigned_byte_rgb8
 KHR-GLES32.core.internalformat.texture2d.rgba_unsigned_byte_rgba8
-KHR-GLES32.core.internalformat.texture2d.rgb_half_float_rgb16f
+KHR-GLES32.core.internalformat.texture2d.rgba_unsigned_byte_rgb5_a1
+KHR-GLES32.core.internalformat.texture2d.rgba_unsigned_byte_rgba4
+KHR-GLES32.core.internalformat.texture2d.rgba_unsigned_byte_srgb8_alpha8
+KHR-GLES32.core.internalformat.texture2d.rgba_byte_rgba8_snorm
+KHR-GLES32.core.internalformat.texture2d.rgba_unsigned_short_4_4_4_4_rgba4
+KHR-GLES32.core.internalformat.texture2d.rgba_unsigned_short_5_5_5_1_rgb5_a1
 KHR-GLES32.core.internalformat.texture2d.rgba_half_float_rgba16f
+KHR-GLES32.core.internalformat.texture2d.rgba_float_rgba16f
+KHR-GLES32.core.internalformat.texture2d.rgba_integer_unsigned_byte_rgba8ui
+KHR-GLES32.core.internalformat.texture2d.rgba_integer_byte_rgba8i
+KHR-GLES32.core.internalformat.texture2d.rgba_integer_unsigned_short_rgba16ui
+KHR-GLES32.core.internalformat.texture2d.rgba_integer_short_rgba16i
+KHR-GLES32.core.internalformat.texture2d.rgba_integer_unsigned_int_rgba32ui
+KHR-GLES32.core.internalformat.texture2d.rgba_integer_int_rgba32i
+KHR-GLES32.core.internalformat.texture2d.rgba_integer_unsigned_int_2_10_10_10_rev_rgb10_a2ui
+KHR-GLES32.core.internalformat.texture2d.rgb_unsigned_byte_rgb8
+KHR-GLES32.core.internalformat.texture2d.rgb_unsigned_byte_rgb565
+KHR-GLES32.core.internalformat.texture2d.rgb_unsigned_byte_srgb8
+KHR-GLES32.core.internalformat.texture2d.rgb_unsigned_short_5_6_5_rgb565
+KHR-GLES32.core.internalformat.texture2d.rgb_unsigned_int_10f_11f_11f_rev_r11f_g11f_b10f
+KHR-GLES32.core.internalformat.texture2d.rgb_unsigned_int_5_9_9_9_rev_rgb9_e5
+KHR-GLES32.core.internalformat.texture2d.rgb_half_float_rgb16f
+KHR-GLES32.core.internalformat.texture2d.rgb_half_float_r11f_g11f_b10f
+KHR-GLES32.core.internalformat.texture2d.rgb_half_float_rgb9_e5
+KHR-GLES32.core.internalformat.texture2d.rgb_float_rgb16f
+KHR-GLES32.core.internalformat.texture2d.rgb_float_r11f_g11f_b10f
+KHR-GLES32.core.internalformat.texture2d.rgb_float_rgb9_e5
+KHR-GLES32.core.internalformat.texture2d.rgb_integer_unsigned_byte_rgb8ui
+KHR-GLES32.core.internalformat.texture2d.rgb_integer_byte_rgb8i
+KHR-GLES32.core.internalformat.texture2d.rgb_integer_unsigned_short_rgb16ui
+KHR-GLES32.core.internalformat.texture2d.rgb_integer_short_rgb16i
+KHR-GLES32.core.internalformat.texture2d.rgb_integer_unsigned_int_rgb32ui
+KHR-GLES32.core.internalformat.texture2d.rgb_integer_int_rgb32i
+KHR-GLES32.core.internalformat.texture2d.rg_unsigned_byte_rg8
+KHR-GLES32.core.internalformat.texture2d.rg_half_float_rg16f
+KHR-GLES32.core.internalformat.texture2d.rg_float_rg32f
+KHR-GLES32.core.internalformat.texture2d.rg_float_rg16f
+KHR-GLES32.core.internalformat.texture2d.rg_integer_unsigned_byte_rg8ui
+KHR-GLES32.core.internalformat.texture2d.rg_integer_byte_rg8i
+KHR-GLES32.core.internalformat.texture2d.rg_integer_unsigned_short_rg16ui
+KHR-GLES32.core.internalformat.texture2d.rg_integer_short_rg16i
+KHR-GLES32.core.internalformat.texture2d.rg_integer_unsigned_int_rg32ui
+KHR-GLES32.core.internalformat.texture2d.rg_integer_int_rg32i
+KHR-GLES32.core.internalformat.texture2d.red_unsigned_byte_r8
+KHR-GLES32.core.internalformat.texture2d.red_half_float_r16f
+KHR-GLES32.core.internalformat.texture2d.red_float_r32f
+KHR-GLES32.core.internalformat.texture2d.red_float_r16f
+KHR-GLES32.core.internalformat.texture2d.red_integer_unsigned_byte_r8ui
+KHR-GLES32.core.internalformat.texture2d.red_integer_byte_r8i
+KHR-GLES32.core.internalformat.texture2d.red_integer_unsigned_short_r16ui
+KHR-GLES32.core.internalformat.texture2d.red_integer_short_r16i
+KHR-GLES32.core.internalformat.texture2d.red_integer_unsigned_int_r32ui
+KHR-GLES32.core.internalformat.texture2d.red_integer_int_r32i
+KHR-GLES32.core.internalformat.texture2d.depth_component_unsigned_short_depth_component16
+KHR-GLES32.core.internalformat.texture2d.depth_component_unsigned_int_depth_component24
+KHR-GLES32.core.internalformat.texture2d.depth_component_unsigned_int_depth_component16
+KHR-GLES32.core.internalformat.texture2d.depth_component_float_depth_component32f
 KHR-GLES32.core.internalformat.texture2d.depth_stencil_unsigned_int_24_8_depth24_stencil8
+KHR-GLES32.core.internalformat.texture2d.depth_stencil_float_32_unsigned_int_24_8_rev_depth32f_stencil8
+KHR-GLES32.core.internalformat.texture2d.rgba_unsigned_short_5_5_5_1_rgba
+KHR-GLES32.core.internalformat.texture2d.rgb_unsigned_short_5_6_5_rgb
 KHR-GLES32.core.internalformat.copy_tex_image.rgb
 KHR-GLES32.core.internalformat.copy_tex_image.rgba
 KHR-GLES32.core.internalformat.copy_tex_image.alpha
@@ -1071,9 +1120,15 @@
 KHR-GLES32.core.internalformat.copy_tex_image.rgb565
 KHR-GLES32.core.internalformat.copy_tex_image.rgba8
 KHR-GLES32.core.internalformat.copy_tex_image.rgb8
+KHR-GLES32.core.internalformat.copy_tex_image.srgb8_alpha8
+KHR-GLES32.core.internalformat.copy_tex_image.srgb8
+KHR-GLES32.core.internalformat.copy_tex_image.r11f_g11f_b10f
 KHR-GLES32.core.internalformat.renderbuffer.rgba8
 KHR-GLES32.core.internalformat.renderbuffer.rgb8
 KHR-GLES32.core.internalformat.renderbuffer.rgb5_a1
+KHR-GLES32.core.internalformat.renderbuffer.srgb8_alpha8
+KHR-GLES32.core.internalformat.renderbuffer.depth_component32f
+KHR-GLES32.core.internalformat.renderbuffer.depth32f_stencil8
 KHR-GLES32.core.ext_texture_shadow_lod.texture.sampler2darrayshadow_fragment
 KHR-GLES32.core.ext_texture_shadow_lod.texture.sampler2darrayshadow_bias_fragment
 KHR-GLES32.core.ext_texture_shadow_lod.texture.samplercubearrayshadow_vertex
@@ -1091,3 +1146,18 @@
 KHR-GLES32.core.ext_texture_shadow_lod.texturelodoffset.sampler2darrayshadow_fragment
 KHR-GLES32.core.nearest_edge.offset_left
 KHR-GLES32.core.nearest_edge.offset_right
+KHR-GLES32.core.framebuffer_completeness.incomplete_missing_attachment
+KHR-GLES32.core.framebuffer_completeness.incomplete_image_zero_width
+KHR-GLES32.core.framebuffer_completeness.incomplete_image_zero_height
+KHR-GLES32.core.framebuffer_completeness.incomplete_texture_3d_layer_oob
+KHR-GLES32.core.framebuffer_completeness.incomplete_texture_2d_layer_oob
+KHR-GLES32.core.framebuffer_completeness.incomplete_texture_2d_mm_layer_oob
+KHR-GLES32.core.framebuffer_completeness.mutable_nbl_texture_expect_mipmap_complete
+KHR-GLES32.core.framebuffer_completeness.mutable_nbl_texture_expect_cube_complete
+KHR-GLES32.core.framebuffer_completeness.expect_renderable_internal_format
+KHR-GLES32.core.framebuffer_completeness.all_rbos_expect_same_numsamples
+KHR-GLES32.core.framebuffer_completeness.rbo_and_texture_expect_zero_numsamples
+KHR-GLES32.core.framebuffer_completeness.expect_equal_numsamples
+KHR-GLES32.core.framebuffer_completeness.status_tracking
+KHR-GLES32.core.framebuffer_completeness.mutable_texture_missing_attachment_level
+KHR-GLES32.core.framebuffer_completeness.immutable_texture_any_level_as_attachment
diff --git a/external/openglcts/data/mustpass/gles/khronos_mustpass/master/gles3-khr-master.txt b/external/openglcts/data/mustpass/gles/khronos_mustpass/master/gles3-khr-master.txt
index abf2826..96f2957 100644
--- a/external/openglcts/data/mustpass/gles/khronos_mustpass/master/gles3-khr-master.txt
+++ b/external/openglcts/data/mustpass/gles/khronos_mustpass/master/gles3-khr-master.txt
@@ -2579,6 +2579,654 @@
 KHR-GLES3.shaders.uniform_block.random.all_shared_buffer.19
 KHR-GLES3.shaders.uniform_block.common.precision_matching
 KHR-GLES3.shaders.uniform_block.common.name_matching
+KHR-GLES3.shaders.glsl_constructors.vec2_from_mat2_vs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_mat2_fs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_mat2_mat2_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_mat2_mat2_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_mat2x3_vs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_mat2x3_fs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_mat2x3_mat2x3_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_mat2x3_mat2x3_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_mat2x4_vs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_mat2x4_fs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_mat2x4_mat2x4_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_mat2x4_mat2x4_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_mat3_vs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_mat3_fs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_mat3_mat3_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_mat3_mat3_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_mat3x2_vs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_mat3x2_fs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_mat3x2_mat3x2_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_mat3x2_mat3x2_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_mat3x4_vs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_mat3x4_fs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_mat3x4_mat3x4_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_mat3x4_mat3x4_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_mat4_vs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_mat4_fs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_mat4_mat4_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_mat4_mat4_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_mat4x2_vs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_mat4x2_fs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_mat4x2_mat4x2_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_mat4x2_mat4x2_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_mat4x3_vs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_mat4x3_fs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_mat4x3_mat4x3_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_mat4x3_mat4x3_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_float_mat2_vs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_float_mat2_fs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_float_mat2_float_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_float_mat2_float_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_float_mat2x3_vs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_float_mat2x3_fs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_float_mat2x3_float_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_float_mat2x3_float_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_float_mat2x4_vs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_float_mat2x4_fs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_float_mat2x4_float_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_float_mat2x4_float_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_float_mat3_vs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_float_mat3_fs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_float_mat3_float_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_float_mat3_float_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_float_mat3x2_vs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_float_mat3x2_fs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_float_mat3x2_float_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_float_mat3x2_float_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_float_mat3x4_vs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_float_mat3x4_fs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_float_mat3x4_float_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_float_mat3x4_float_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_float_mat4_vs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_float_mat4_fs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_float_mat4_float_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_float_mat4_float_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_float_mat4x2_vs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_float_mat4x2_fs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_float_mat4x2_float_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_float_mat4x2_float_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_float_mat4x3_vs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_float_mat4x3_fs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_float_mat4x3_float_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec2_from_float_mat4x3_float_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_mat2_vs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_mat2_fs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_mat2_mat2_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_mat2_mat2_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_mat2x3_vs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_mat2x3_fs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_mat2x3_mat2x3_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_mat2x3_mat2x3_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_mat2x4_vs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_mat2x4_fs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_mat2x4_mat2x4_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_mat2x4_mat2x4_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_mat3_vs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_mat3_fs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_mat3_mat3_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_mat3_mat3_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_mat3x2_vs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_mat3x2_fs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_mat3x2_mat3x2_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_mat3x2_mat3x2_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_mat3x4_vs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_mat3x4_fs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_mat3x4_mat3x4_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_mat3x4_mat3x4_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_mat4_vs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_mat4_fs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_mat4_mat4_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_mat4_mat4_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_mat4x2_vs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_mat4x2_fs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_mat4x2_mat4x2_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_mat4x2_mat4x2_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_mat4x3_vs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_mat4x3_fs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_mat4x3_mat4x3_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_mat4x3_mat4x3_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_float_mat2_vs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_float_mat2_fs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_float_mat2_float_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_float_mat2_float_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_float_mat2x3_vs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_float_mat2x3_fs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_float_mat2x3_float_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_float_mat2x3_float_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_float_mat2x4_vs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_float_mat2x4_fs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_float_mat2x4_float_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_float_mat2x4_float_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_float_mat3_vs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_float_mat3_fs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_float_mat3_float_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_float_mat3_float_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_float_mat3x2_vs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_float_mat3x2_fs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_float_mat3x2_float_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_float_mat3x2_float_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_float_mat3x4_vs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_float_mat3x4_fs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_float_mat3x4_float_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_float_mat3x4_float_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_float_mat4_vs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_float_mat4_fs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_float_mat4_float_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_float_mat4_float_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_float_mat4x2_vs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_float_mat4x2_fs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_float_mat4x2_float_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_float_mat4x2_float_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_float_mat4x3_vs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_float_mat4x3_fs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_float_mat4x3_float_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec3_from_float_mat4x3_float_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_mat2_vs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_mat2_fs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_mat2_mat2_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_mat2_mat2_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_mat2x3_vs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_mat2x3_fs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_mat2x3_mat2x3_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_mat2x3_mat2x3_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_mat2x4_vs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_mat2x4_fs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_mat2x4_mat2x4_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_mat2x4_mat2x4_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_mat3_vs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_mat3_fs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_mat3_mat3_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_mat3_mat3_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_mat3x2_vs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_mat3x2_fs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_mat3x2_mat3x2_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_mat3x2_mat3x2_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_mat3x4_vs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_mat3x4_fs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_mat3x4_mat3x4_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_mat3x4_mat3x4_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_mat4_vs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_mat4_fs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_mat4_mat4_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_mat4_mat4_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_mat4x2_vs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_mat4x2_fs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_mat4x2_mat4x2_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_mat4x2_mat4x2_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_mat4x3_vs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_mat4x3_fs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_mat4x3_mat4x3_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_mat4x3_mat4x3_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_float_mat2_vs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_float_mat2_fs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_float_mat2_float_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_float_mat2_float_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_float_mat2x3_vs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_float_mat2x3_fs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_float_mat2x3_float_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_float_mat2x3_float_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_float_mat2x4_vs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_float_mat2x4_fs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_float_mat2x4_float_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_float_mat2x4_float_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_float_mat3_vs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_float_mat3_fs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_float_mat3_float_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_float_mat3_float_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_float_mat3x2_vs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_float_mat3x2_fs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_float_mat3x2_float_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_float_mat3x2_float_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_float_mat3x4_vs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_float_mat3x4_fs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_float_mat3x4_float_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_float_mat3x4_float_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_float_mat4_vs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_float_mat4_fs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_float_mat4_float_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_float_mat4_float_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_float_mat4x2_vs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_float_mat4x2_fs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_float_mat4x2_float_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_float_mat4x2_float_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_float_mat4x3_vs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_float_mat4x3_fs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_float_mat4x3_float_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.vec4_from_float_mat4x3_float_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_mat2_vs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_mat2_fs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_mat2_mat2_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_mat2_mat2_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_mat2x3_vs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_mat2x3_fs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_mat2x3_mat2x3_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_mat2x3_mat2x3_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_mat2x4_vs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_mat2x4_fs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_mat2x4_mat2x4_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_mat2x4_mat2x4_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_mat3_vs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_mat3_fs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_mat3_mat3_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_mat3_mat3_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_mat3x2_vs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_mat3x2_fs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_mat3x2_mat3x2_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_mat3x2_mat3x2_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_mat3x4_vs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_mat3x4_fs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_mat3x4_mat3x4_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_mat3x4_mat3x4_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_mat4_vs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_mat4_fs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_mat4_mat4_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_mat4_mat4_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_mat4x2_vs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_mat4x2_fs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_mat4x2_mat4x2_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_mat4x2_mat4x2_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_mat4x3_vs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_mat4x3_fs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_mat4x3_mat4x3_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_mat4x3_mat4x3_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_int_mat2_vs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_int_mat2_fs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_int_mat2_int_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_int_mat2_int_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_int_mat2x3_vs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_int_mat2x3_fs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_int_mat2x3_int_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_int_mat2x3_int_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_int_mat2x4_vs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_int_mat2x4_fs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_int_mat2x4_int_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_int_mat2x4_int_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_int_mat3_vs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_int_mat3_fs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_int_mat3_int_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_int_mat3_int_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_int_mat3x2_vs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_int_mat3x2_fs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_int_mat3x2_int_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_int_mat3x2_int_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_int_mat3x4_vs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_int_mat3x4_fs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_int_mat3x4_int_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_int_mat3x4_int_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_int_mat4_vs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_int_mat4_fs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_int_mat4_int_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_int_mat4_int_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_int_mat4x2_vs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_int_mat4x2_fs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_int_mat4x2_int_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_int_mat4x2_int_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_int_mat4x3_vs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_int_mat4x3_fs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_int_mat4x3_int_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec2_from_int_mat4x3_int_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_mat2_vs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_mat2_fs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_mat2_mat2_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_mat2_mat2_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_mat2x3_vs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_mat2x3_fs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_mat2x3_mat2x3_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_mat2x3_mat2x3_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_mat2x4_vs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_mat2x4_fs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_mat2x4_mat2x4_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_mat2x4_mat2x4_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_mat3_vs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_mat3_fs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_mat3_mat3_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_mat3_mat3_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_mat3x2_vs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_mat3x2_fs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_mat3x2_mat3x2_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_mat3x2_mat3x2_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_mat3x4_vs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_mat3x4_fs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_mat3x4_mat3x4_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_mat3x4_mat3x4_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_mat4_vs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_mat4_fs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_mat4_mat4_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_mat4_mat4_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_mat4x2_vs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_mat4x2_fs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_mat4x2_mat4x2_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_mat4x2_mat4x2_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_mat4x3_vs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_mat4x3_fs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_mat4x3_mat4x3_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_mat4x3_mat4x3_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_int_mat2_vs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_int_mat2_fs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_int_mat2_int_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_int_mat2_int_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_int_mat2x3_vs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_int_mat2x3_fs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_int_mat2x3_int_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_int_mat2x3_int_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_int_mat2x4_vs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_int_mat2x4_fs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_int_mat2x4_int_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_int_mat2x4_int_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_int_mat3_vs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_int_mat3_fs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_int_mat3_int_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_int_mat3_int_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_int_mat3x2_vs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_int_mat3x2_fs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_int_mat3x2_int_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_int_mat3x2_int_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_int_mat3x4_vs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_int_mat3x4_fs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_int_mat3x4_int_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_int_mat3x4_int_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_int_mat4_vs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_int_mat4_fs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_int_mat4_int_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_int_mat4_int_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_int_mat4x2_vs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_int_mat4x2_fs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_int_mat4x2_int_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_int_mat4x2_int_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_int_mat4x3_vs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_int_mat4x3_fs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_int_mat4x3_int_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec3_from_int_mat4x3_int_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_mat2_vs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_mat2_fs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_mat2_mat2_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_mat2_mat2_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_mat2x3_vs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_mat2x3_fs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_mat2x3_mat2x3_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_mat2x3_mat2x3_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_mat2x4_vs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_mat2x4_fs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_mat2x4_mat2x4_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_mat2x4_mat2x4_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_mat3_vs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_mat3_fs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_mat3_mat3_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_mat3_mat3_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_mat3x2_vs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_mat3x2_fs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_mat3x2_mat3x2_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_mat3x2_mat3x2_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_mat3x4_vs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_mat3x4_fs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_mat3x4_mat3x4_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_mat3x4_mat3x4_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_mat4_vs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_mat4_fs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_mat4_mat4_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_mat4_mat4_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_mat4x2_vs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_mat4x2_fs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_mat4x2_mat4x2_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_mat4x2_mat4x2_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_mat4x3_vs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_mat4x3_fs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_mat4x3_mat4x3_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_mat4x3_mat4x3_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_int_mat2_vs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_int_mat2_fs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_int_mat2_int_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_int_mat2_int_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_int_mat2x3_vs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_int_mat2x3_fs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_int_mat2x3_int_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_int_mat2x3_int_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_int_mat2x4_vs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_int_mat2x4_fs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_int_mat2x4_int_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_int_mat2x4_int_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_int_mat3_vs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_int_mat3_fs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_int_mat3_int_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_int_mat3_int_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_int_mat3x2_vs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_int_mat3x2_fs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_int_mat3x2_int_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_int_mat3x2_int_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_int_mat3x4_vs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_int_mat3x4_fs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_int_mat3x4_int_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_int_mat3x4_int_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_int_mat4_vs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_int_mat4_fs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_int_mat4_int_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_int_mat4_int_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_int_mat4x2_vs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_int_mat4x2_fs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_int_mat4x2_int_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_int_mat4x2_int_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_int_mat4x3_vs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_int_mat4x3_fs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_int_mat4x3_int_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.ivec4_from_int_mat4x3_int_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_mat2_vs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_mat2_fs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_mat2_mat2_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_mat2_mat2_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_mat2x3_vs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_mat2x3_fs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_mat2x3_mat2x3_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_mat2x3_mat2x3_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_mat2x4_vs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_mat2x4_fs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_mat2x4_mat2x4_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_mat2x4_mat2x4_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_mat3_vs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_mat3_fs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_mat3_mat3_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_mat3_mat3_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_mat3x2_vs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_mat3x2_fs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_mat3x2_mat3x2_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_mat3x2_mat3x2_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_mat3x4_vs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_mat3x4_fs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_mat3x4_mat3x4_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_mat3x4_mat3x4_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_mat4_vs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_mat4_fs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_mat4_mat4_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_mat4_mat4_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_mat4x2_vs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_mat4x2_fs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_mat4x2_mat4x2_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_mat4x2_mat4x2_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_mat4x3_vs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_mat4x3_fs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_mat4x3_mat4x3_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_mat4x3_mat4x3_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_bool_mat2_vs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_bool_mat2_fs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_bool_mat2_bool_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_bool_mat2_bool_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_bool_mat2x3_vs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_bool_mat2x3_fs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_bool_mat2x3_bool_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_bool_mat2x3_bool_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_bool_mat2x4_vs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_bool_mat2x4_fs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_bool_mat2x4_bool_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_bool_mat2x4_bool_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_bool_mat3_vs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_bool_mat3_fs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_bool_mat3_bool_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_bool_mat3_bool_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_bool_mat3x2_vs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_bool_mat3x2_fs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_bool_mat3x2_bool_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_bool_mat3x2_bool_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_bool_mat3x4_vs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_bool_mat3x4_fs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_bool_mat3x4_bool_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_bool_mat3x4_bool_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_bool_mat4_vs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_bool_mat4_fs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_bool_mat4_bool_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_bool_mat4_bool_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_bool_mat4x2_vs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_bool_mat4x2_fs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_bool_mat4x2_bool_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_bool_mat4x2_bool_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_bool_mat4x3_vs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_bool_mat4x3_fs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_bool_mat4x3_bool_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec2_from_bool_mat4x3_bool_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_mat2_vs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_mat2_fs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_mat2_mat2_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_mat2_mat2_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_mat2x3_vs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_mat2x3_fs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_mat2x3_mat2x3_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_mat2x3_mat2x3_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_mat2x4_vs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_mat2x4_fs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_mat2x4_mat2x4_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_mat2x4_mat2x4_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_mat3_vs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_mat3_fs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_mat3_mat3_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_mat3_mat3_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_mat3x2_vs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_mat3x2_fs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_mat3x2_mat3x2_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_mat3x2_mat3x2_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_mat3x4_vs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_mat3x4_fs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_mat3x4_mat3x4_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_mat3x4_mat3x4_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_mat4_vs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_mat4_fs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_mat4_mat4_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_mat4_mat4_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_mat4x2_vs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_mat4x2_fs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_mat4x2_mat4x2_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_mat4x2_mat4x2_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_mat4x3_vs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_mat4x3_fs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_mat4x3_mat4x3_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_mat4x3_mat4x3_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_bool_mat2_vs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_bool_mat2_fs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_bool_mat2_bool_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_bool_mat2_bool_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_bool_mat2x3_vs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_bool_mat2x3_fs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_bool_mat2x3_bool_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_bool_mat2x3_bool_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_bool_mat2x4_vs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_bool_mat2x4_fs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_bool_mat2x4_bool_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_bool_mat2x4_bool_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_bool_mat3_vs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_bool_mat3_fs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_bool_mat3_bool_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_bool_mat3_bool_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_bool_mat3x2_vs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_bool_mat3x2_fs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_bool_mat3x2_bool_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_bool_mat3x2_bool_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_bool_mat3x4_vs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_bool_mat3x4_fs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_bool_mat3x4_bool_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_bool_mat3x4_bool_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_bool_mat4_vs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_bool_mat4_fs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_bool_mat4_bool_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_bool_mat4_bool_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_bool_mat4x2_vs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_bool_mat4x2_fs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_bool_mat4x2_bool_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_bool_mat4x2_bool_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_bool_mat4x3_vs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_bool_mat4x3_fs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_bool_mat4x3_bool_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec3_from_bool_mat4x3_bool_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_mat2_vs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_mat2_fs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_mat2_mat2_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_mat2_mat2_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_mat2x3_vs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_mat2x3_fs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_mat2x3_mat2x3_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_mat2x3_mat2x3_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_mat2x4_vs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_mat2x4_fs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_mat2x4_mat2x4_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_mat2x4_mat2x4_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_mat3_vs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_mat3_fs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_mat3_mat3_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_mat3_mat3_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_mat3x2_vs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_mat3x2_fs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_mat3x2_mat3x2_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_mat3x2_mat3x2_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_mat3x4_vs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_mat3x4_fs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_mat3x4_mat3x4_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_mat3x4_mat3x4_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_mat4_vs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_mat4_fs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_mat4_mat4_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_mat4_mat4_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_mat4x2_vs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_mat4x2_fs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_mat4x2_mat4x2_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_mat4x2_mat4x2_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_mat4x3_vs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_mat4x3_fs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_mat4x3_mat4x3_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_mat4x3_mat4x3_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_bool_mat2_vs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_bool_mat2_fs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_bool_mat2_bool_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_bool_mat2_bool_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_bool_mat2x3_vs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_bool_mat2x3_fs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_bool_mat2x3_bool_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_bool_mat2x3_bool_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_bool_mat2x4_vs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_bool_mat2x4_fs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_bool_mat2x4_bool_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_bool_mat2x4_bool_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_bool_mat3_vs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_bool_mat3_fs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_bool_mat3_bool_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_bool_mat3_bool_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_bool_mat3x2_vs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_bool_mat3x2_fs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_bool_mat3x2_bool_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_bool_mat3x2_bool_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_bool_mat3x4_vs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_bool_mat3x4_fs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_bool_mat3x4_bool_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_bool_mat3x4_bool_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_bool_mat4_vs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_bool_mat4_fs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_bool_mat4_bool_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_bool_mat4_bool_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_bool_mat4x2_vs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_bool_mat4x2_fs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_bool_mat4x2_bool_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_bool_mat4x2_bool_invalid_fs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_bool_mat4x3_vs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_bool_mat4x3_fs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_bool_mat4x3_bool_invalid_vs
+KHR-GLES3.shaders.glsl_constructors.bvec4_from_bool_mat4x3_bool_invalid_fs
 KHR-GLES3.shaders.shader_integer_mix.define
 KHR-GLES3.shaders.shader_integer_mix.prototypes-extension
 KHR-GLES3.shaders.shader_integer_mix.prototypes
@@ -3252,19 +3900,68 @@
 KHR-GLES3.core.internalformat.texture2d.rgba_float_rgba32f
 KHR-GLES3.core.internalformat.texture2d.rgb_float_rgb32f_linear
 KHR-GLES3.core.internalformat.texture2d.rgba_float_rgba32f_linear
-KHR-GLES3.core.internalformat.texture2d.rgba_unsigned_byte_rgba4
-KHR-GLES3.core.internalformat.texture2d.rgba_unsigned_byte_rgb5_a1
-KHR-GLES3.core.internalformat.texture2d.rgb_unsigned_byte_rgb565
-KHR-GLES3.core.internalformat.texture2d.rgba_unsigned_short_4_4_4_4_rgba4
-KHR-GLES3.core.internalformat.texture2d.rgba_unsigned_short_5_5_5_1_rgba
-KHR-GLES3.core.internalformat.texture2d.rgba_unsigned_short_5_5_5_1_rgb5_a1
-KHR-GLES3.core.internalformat.texture2d.rgb_unsigned_short_5_6_5_rgb
-KHR-GLES3.core.internalformat.texture2d.rgb_unsigned_short_5_6_5_rgb565
-KHR-GLES3.core.internalformat.texture2d.rgb_unsigned_byte_rgb8
 KHR-GLES3.core.internalformat.texture2d.rgba_unsigned_byte_rgba8
-KHR-GLES3.core.internalformat.texture2d.rgb_half_float_rgb16f
+KHR-GLES3.core.internalformat.texture2d.rgba_unsigned_byte_rgb5_a1
+KHR-GLES3.core.internalformat.texture2d.rgba_unsigned_byte_rgba4
+KHR-GLES3.core.internalformat.texture2d.rgba_unsigned_byte_srgb8_alpha8
+KHR-GLES3.core.internalformat.texture2d.rgba_byte_rgba8_snorm
+KHR-GLES3.core.internalformat.texture2d.rgba_unsigned_short_4_4_4_4_rgba4
+KHR-GLES3.core.internalformat.texture2d.rgba_unsigned_short_5_5_5_1_rgb5_a1
 KHR-GLES3.core.internalformat.texture2d.rgba_half_float_rgba16f
+KHR-GLES3.core.internalformat.texture2d.rgba_float_rgba16f
+KHR-GLES3.core.internalformat.texture2d.rgba_integer_unsigned_byte_rgba8ui
+KHR-GLES3.core.internalformat.texture2d.rgba_integer_byte_rgba8i
+KHR-GLES3.core.internalformat.texture2d.rgba_integer_unsigned_short_rgba16ui
+KHR-GLES3.core.internalformat.texture2d.rgba_integer_short_rgba16i
+KHR-GLES3.core.internalformat.texture2d.rgba_integer_unsigned_int_rgba32ui
+KHR-GLES3.core.internalformat.texture2d.rgba_integer_int_rgba32i
+KHR-GLES3.core.internalformat.texture2d.rgba_integer_unsigned_int_2_10_10_10_rev_rgb10_a2ui
+KHR-GLES3.core.internalformat.texture2d.rgb_unsigned_byte_rgb8
+KHR-GLES3.core.internalformat.texture2d.rgb_unsigned_byte_rgb565
+KHR-GLES3.core.internalformat.texture2d.rgb_unsigned_byte_srgb8
+KHR-GLES3.core.internalformat.texture2d.rgb_unsigned_short_5_6_5_rgb565
+KHR-GLES3.core.internalformat.texture2d.rgb_unsigned_int_10f_11f_11f_rev_r11f_g11f_b10f
+KHR-GLES3.core.internalformat.texture2d.rgb_unsigned_int_5_9_9_9_rev_rgb9_e5
+KHR-GLES3.core.internalformat.texture2d.rgb_half_float_rgb16f
+KHR-GLES3.core.internalformat.texture2d.rgb_half_float_r11f_g11f_b10f
+KHR-GLES3.core.internalformat.texture2d.rgb_half_float_rgb9_e5
+KHR-GLES3.core.internalformat.texture2d.rgb_float_rgb16f
+KHR-GLES3.core.internalformat.texture2d.rgb_float_r11f_g11f_b10f
+KHR-GLES3.core.internalformat.texture2d.rgb_float_rgb9_e5
+KHR-GLES3.core.internalformat.texture2d.rgb_integer_unsigned_byte_rgb8ui
+KHR-GLES3.core.internalformat.texture2d.rgb_integer_byte_rgb8i
+KHR-GLES3.core.internalformat.texture2d.rgb_integer_unsigned_short_rgb16ui
+KHR-GLES3.core.internalformat.texture2d.rgb_integer_short_rgb16i
+KHR-GLES3.core.internalformat.texture2d.rgb_integer_unsigned_int_rgb32ui
+KHR-GLES3.core.internalformat.texture2d.rgb_integer_int_rgb32i
+KHR-GLES3.core.internalformat.texture2d.rg_unsigned_byte_rg8
+KHR-GLES3.core.internalformat.texture2d.rg_half_float_rg16f
+KHR-GLES3.core.internalformat.texture2d.rg_float_rg32f
+KHR-GLES3.core.internalformat.texture2d.rg_float_rg16f
+KHR-GLES3.core.internalformat.texture2d.rg_integer_unsigned_byte_rg8ui
+KHR-GLES3.core.internalformat.texture2d.rg_integer_byte_rg8i
+KHR-GLES3.core.internalformat.texture2d.rg_integer_unsigned_short_rg16ui
+KHR-GLES3.core.internalformat.texture2d.rg_integer_short_rg16i
+KHR-GLES3.core.internalformat.texture2d.rg_integer_unsigned_int_rg32ui
+KHR-GLES3.core.internalformat.texture2d.rg_integer_int_rg32i
+KHR-GLES3.core.internalformat.texture2d.red_unsigned_byte_r8
+KHR-GLES3.core.internalformat.texture2d.red_half_float_r16f
+KHR-GLES3.core.internalformat.texture2d.red_float_r32f
+KHR-GLES3.core.internalformat.texture2d.red_float_r16f
+KHR-GLES3.core.internalformat.texture2d.red_integer_unsigned_byte_r8ui
+KHR-GLES3.core.internalformat.texture2d.red_integer_byte_r8i
+KHR-GLES3.core.internalformat.texture2d.red_integer_unsigned_short_r16ui
+KHR-GLES3.core.internalformat.texture2d.red_integer_short_r16i
+KHR-GLES3.core.internalformat.texture2d.red_integer_unsigned_int_r32ui
+KHR-GLES3.core.internalformat.texture2d.red_integer_int_r32i
+KHR-GLES3.core.internalformat.texture2d.depth_component_unsigned_short_depth_component16
+KHR-GLES3.core.internalformat.texture2d.depth_component_unsigned_int_depth_component24
+KHR-GLES3.core.internalformat.texture2d.depth_component_unsigned_int_depth_component16
+KHR-GLES3.core.internalformat.texture2d.depth_component_float_depth_component32f
 KHR-GLES3.core.internalformat.texture2d.depth_stencil_unsigned_int_24_8_depth24_stencil8
+KHR-GLES3.core.internalformat.texture2d.depth_stencil_float_32_unsigned_int_24_8_rev_depth32f_stencil8
+KHR-GLES3.core.internalformat.texture2d.rgba_unsigned_short_5_5_5_1_rgba
+KHR-GLES3.core.internalformat.texture2d.rgb_unsigned_short_5_6_5_rgb
 KHR-GLES3.core.internalformat.copy_tex_image.rgb
 KHR-GLES3.core.internalformat.copy_tex_image.rgba
 KHR-GLES3.core.internalformat.copy_tex_image.alpha
@@ -3275,9 +3972,15 @@
 KHR-GLES3.core.internalformat.copy_tex_image.rgb565
 KHR-GLES3.core.internalformat.copy_tex_image.rgba8
 KHR-GLES3.core.internalformat.copy_tex_image.rgb8
+KHR-GLES3.core.internalformat.copy_tex_image.srgb8_alpha8
+KHR-GLES3.core.internalformat.copy_tex_image.srgb8
+KHR-GLES3.core.internalformat.copy_tex_image.r11f_g11f_b10f
 KHR-GLES3.core.internalformat.renderbuffer.rgba8
 KHR-GLES3.core.internalformat.renderbuffer.rgb8
 KHR-GLES3.core.internalformat.renderbuffer.rgb5_a1
+KHR-GLES3.core.internalformat.renderbuffer.srgb8_alpha8
+KHR-GLES3.core.internalformat.renderbuffer.depth_component32f
+KHR-GLES3.core.internalformat.renderbuffer.depth32f_stencil8
 KHR-GLES3.core.nearest_edge.offset_left
 KHR-GLES3.core.nearest_edge.offset_right
 KHR-GLES3.parallel_shader_compile.simple_queries
@@ -3479,6 +4182,20 @@
 KHR-GLES3.packed_depth_stencil.blit.depth32f_stencil8
 KHR-GLES3.packed_depth_stencil.stencil_texturing.depth24_stencil8
 KHR-GLES3.packed_depth_stencil.stencil_texturing.depth32f_stencil8
+KHR-GLES3.framebuffer_completeness.incomplete_missing_attachment
+KHR-GLES3.framebuffer_completeness.incomplete_image_zero_width
+KHR-GLES3.framebuffer_completeness.incomplete_image_zero_height
+KHR-GLES3.framebuffer_completeness.incomplete_texture_3d_layer_oob
+KHR-GLES3.framebuffer_completeness.incomplete_texture_2d_layer_oob
+KHR-GLES3.framebuffer_completeness.incomplete_texture_2d_mm_layer_oob
+KHR-GLES3.framebuffer_completeness.mutable_nbl_texture_expect_mipmap_complete
+KHR-GLES3.framebuffer_completeness.mutable_nbl_texture_expect_cube_complete
+KHR-GLES3.framebuffer_completeness.expect_renderable_internal_format
+KHR-GLES3.framebuffer_completeness.all_rbos_expect_same_numsamples
+KHR-GLES3.framebuffer_completeness.rbo_and_texture_expect_zero_numsamples
+KHR-GLES3.framebuffer_completeness.status_tracking
+KHR-GLES3.framebuffer_completeness.mutable_texture_missing_attachment_level
+KHR-GLES3.framebuffer_completeness.immutable_texture_any_level_as_attachment
 KHR-GLES3.copy_tex_image_conversions.forbidden.texture2d_texture2d
 KHR-GLES3.copy_tex_image_conversions.forbidden.texture2d_cubemap_negx
 KHR-GLES3.copy_tex_image_conversions.forbidden.texture2d_cubemap_negy
@@ -3619,3 +4336,21 @@
 KHR-GLES3.copy_tex_image_conversions.required.renderbuffer_cubemap_posx
 KHR-GLES3.copy_tex_image_conversions.required.renderbuffer_cubemap_posy
 KHR-GLES3.copy_tex_image_conversions.required.renderbuffer_cubemap_posz
+KHR-GLES3.number_parsing.unsigned_integer_above_signed_range_decimal
+KHR-GLES3.number_parsing.unsigned_integer_above_signed_range_base8
+KHR-GLES3.number_parsing.unsigned_integer_above_signed_range_base16
+KHR-GLES3.number_parsing.unsigned_integer_smallest_value_above_signed_range_decimal
+KHR-GLES3.number_parsing.unsigned_integer_smallest_value_above_signed_range_base8
+KHR-GLES3.number_parsing.unsigned_integer_smallest_value_above_signed_range_base16
+KHR-GLES3.number_parsing.unsigned_integer_max_value_decimal
+KHR-GLES3.number_parsing.unsigned_integer_max_value_base8
+KHR-GLES3.number_parsing.unsigned_integer_max_value_base16
+KHR-GLES3.number_parsing.unsigned_integer_too_large_value_invalid
+KHR-GLES3.number_parsing.unsigned_integer_negative_value_as_uint
+KHR-GLES3.number_parsing.float_out_of_range_as_infinity
+KHR-GLES3.number_parsing.float_out_of_range_as_zero
+KHR-GLES3.number_parsing.float_no_limit_on_number_of_digits_positive_exponent
+KHR-GLES3.number_parsing.float_no_limit_on_number_of_digits_negative_exponent
+KHR-GLES3.number_parsing.float_slightly_out_of_range_exponent_as_positive_infinity
+KHR-GLES3.number_parsing.float_overflow_to_positive_infinity
+KHR-GLES3.number_parsing.float_overflow_to_negative_infinity
diff --git a/external/openglcts/data/mustpass/gles/khronos_mustpass/master/gles31-khr-master.txt b/external/openglcts/data/mustpass/gles/khronos_mustpass/master/gles31-khr-master.txt
index 67bc003..bda186f 100644
--- a/external/openglcts/data/mustpass/gles/khronos_mustpass/master/gles31-khr-master.txt
+++ b/external/openglcts/data/mustpass/gles/khronos_mustpass/master/gles31-khr-master.txt
@@ -2282,19 +2282,68 @@
 KHR-GLES31.core.internalformat.texture2d.rgba_float_rgba32f
 KHR-GLES31.core.internalformat.texture2d.rgb_float_rgb32f_linear
 KHR-GLES31.core.internalformat.texture2d.rgba_float_rgba32f_linear
-KHR-GLES31.core.internalformat.texture2d.rgba_unsigned_byte_rgba4
-KHR-GLES31.core.internalformat.texture2d.rgba_unsigned_byte_rgb5_a1
-KHR-GLES31.core.internalformat.texture2d.rgb_unsigned_byte_rgb565
-KHR-GLES31.core.internalformat.texture2d.rgba_unsigned_short_4_4_4_4_rgba4
-KHR-GLES31.core.internalformat.texture2d.rgba_unsigned_short_5_5_5_1_rgba
-KHR-GLES31.core.internalformat.texture2d.rgba_unsigned_short_5_5_5_1_rgb5_a1
-KHR-GLES31.core.internalformat.texture2d.rgb_unsigned_short_5_6_5_rgb
-KHR-GLES31.core.internalformat.texture2d.rgb_unsigned_short_5_6_5_rgb565
-KHR-GLES31.core.internalformat.texture2d.rgb_unsigned_byte_rgb8
 KHR-GLES31.core.internalformat.texture2d.rgba_unsigned_byte_rgba8
-KHR-GLES31.core.internalformat.texture2d.rgb_half_float_rgb16f
+KHR-GLES31.core.internalformat.texture2d.rgba_unsigned_byte_rgb5_a1
+KHR-GLES31.core.internalformat.texture2d.rgba_unsigned_byte_rgba4
+KHR-GLES31.core.internalformat.texture2d.rgba_unsigned_byte_srgb8_alpha8
+KHR-GLES31.core.internalformat.texture2d.rgba_byte_rgba8_snorm
+KHR-GLES31.core.internalformat.texture2d.rgba_unsigned_short_4_4_4_4_rgba4
+KHR-GLES31.core.internalformat.texture2d.rgba_unsigned_short_5_5_5_1_rgb5_a1
 KHR-GLES31.core.internalformat.texture2d.rgba_half_float_rgba16f
+KHR-GLES31.core.internalformat.texture2d.rgba_float_rgba16f
+KHR-GLES31.core.internalformat.texture2d.rgba_integer_unsigned_byte_rgba8ui
+KHR-GLES31.core.internalformat.texture2d.rgba_integer_byte_rgba8i
+KHR-GLES31.core.internalformat.texture2d.rgba_integer_unsigned_short_rgba16ui
+KHR-GLES31.core.internalformat.texture2d.rgba_integer_short_rgba16i
+KHR-GLES31.core.internalformat.texture2d.rgba_integer_unsigned_int_rgba32ui
+KHR-GLES31.core.internalformat.texture2d.rgba_integer_int_rgba32i
+KHR-GLES31.core.internalformat.texture2d.rgba_integer_unsigned_int_2_10_10_10_rev_rgb10_a2ui
+KHR-GLES31.core.internalformat.texture2d.rgb_unsigned_byte_rgb8
+KHR-GLES31.core.internalformat.texture2d.rgb_unsigned_byte_rgb565
+KHR-GLES31.core.internalformat.texture2d.rgb_unsigned_byte_srgb8
+KHR-GLES31.core.internalformat.texture2d.rgb_unsigned_short_5_6_5_rgb565
+KHR-GLES31.core.internalformat.texture2d.rgb_unsigned_int_10f_11f_11f_rev_r11f_g11f_b10f
+KHR-GLES31.core.internalformat.texture2d.rgb_unsigned_int_5_9_9_9_rev_rgb9_e5
+KHR-GLES31.core.internalformat.texture2d.rgb_half_float_rgb16f
+KHR-GLES31.core.internalformat.texture2d.rgb_half_float_r11f_g11f_b10f
+KHR-GLES31.core.internalformat.texture2d.rgb_half_float_rgb9_e5
+KHR-GLES31.core.internalformat.texture2d.rgb_float_rgb16f
+KHR-GLES31.core.internalformat.texture2d.rgb_float_r11f_g11f_b10f
+KHR-GLES31.core.internalformat.texture2d.rgb_float_rgb9_e5
+KHR-GLES31.core.internalformat.texture2d.rgb_integer_unsigned_byte_rgb8ui
+KHR-GLES31.core.internalformat.texture2d.rgb_integer_byte_rgb8i
+KHR-GLES31.core.internalformat.texture2d.rgb_integer_unsigned_short_rgb16ui
+KHR-GLES31.core.internalformat.texture2d.rgb_integer_short_rgb16i
+KHR-GLES31.core.internalformat.texture2d.rgb_integer_unsigned_int_rgb32ui
+KHR-GLES31.core.internalformat.texture2d.rgb_integer_int_rgb32i
+KHR-GLES31.core.internalformat.texture2d.rg_unsigned_byte_rg8
+KHR-GLES31.core.internalformat.texture2d.rg_half_float_rg16f
+KHR-GLES31.core.internalformat.texture2d.rg_float_rg32f
+KHR-GLES31.core.internalformat.texture2d.rg_float_rg16f
+KHR-GLES31.core.internalformat.texture2d.rg_integer_unsigned_byte_rg8ui
+KHR-GLES31.core.internalformat.texture2d.rg_integer_byte_rg8i
+KHR-GLES31.core.internalformat.texture2d.rg_integer_unsigned_short_rg16ui
+KHR-GLES31.core.internalformat.texture2d.rg_integer_short_rg16i
+KHR-GLES31.core.internalformat.texture2d.rg_integer_unsigned_int_rg32ui
+KHR-GLES31.core.internalformat.texture2d.rg_integer_int_rg32i
+KHR-GLES31.core.internalformat.texture2d.red_unsigned_byte_r8
+KHR-GLES31.core.internalformat.texture2d.red_half_float_r16f
+KHR-GLES31.core.internalformat.texture2d.red_float_r32f
+KHR-GLES31.core.internalformat.texture2d.red_float_r16f
+KHR-GLES31.core.internalformat.texture2d.red_integer_unsigned_byte_r8ui
+KHR-GLES31.core.internalformat.texture2d.red_integer_byte_r8i
+KHR-GLES31.core.internalformat.texture2d.red_integer_unsigned_short_r16ui
+KHR-GLES31.core.internalformat.texture2d.red_integer_short_r16i
+KHR-GLES31.core.internalformat.texture2d.red_integer_unsigned_int_r32ui
+KHR-GLES31.core.internalformat.texture2d.red_integer_int_r32i
+KHR-GLES31.core.internalformat.texture2d.depth_component_unsigned_short_depth_component16
+KHR-GLES31.core.internalformat.texture2d.depth_component_unsigned_int_depth_component24
+KHR-GLES31.core.internalformat.texture2d.depth_component_unsigned_int_depth_component16
+KHR-GLES31.core.internalformat.texture2d.depth_component_float_depth_component32f
 KHR-GLES31.core.internalformat.texture2d.depth_stencil_unsigned_int_24_8_depth24_stencil8
+KHR-GLES31.core.internalformat.texture2d.depth_stencil_float_32_unsigned_int_24_8_rev_depth32f_stencil8
+KHR-GLES31.core.internalformat.texture2d.rgba_unsigned_short_5_5_5_1_rgba
+KHR-GLES31.core.internalformat.texture2d.rgb_unsigned_short_5_6_5_rgb
 KHR-GLES31.core.internalformat.copy_tex_image.rgb
 KHR-GLES31.core.internalformat.copy_tex_image.rgba
 KHR-GLES31.core.internalformat.copy_tex_image.alpha
@@ -2305,11 +2354,32 @@
 KHR-GLES31.core.internalformat.copy_tex_image.rgb565
 KHR-GLES31.core.internalformat.copy_tex_image.rgba8
 KHR-GLES31.core.internalformat.copy_tex_image.rgb8
+KHR-GLES31.core.internalformat.copy_tex_image.srgb8_alpha8
+KHR-GLES31.core.internalformat.copy_tex_image.srgb8
+KHR-GLES31.core.internalformat.copy_tex_image.r11f_g11f_b10f
 KHR-GLES31.core.internalformat.renderbuffer.rgba8
 KHR-GLES31.core.internalformat.renderbuffer.rgb8
 KHR-GLES31.core.internalformat.renderbuffer.rgb5_a1
+KHR-GLES31.core.internalformat.renderbuffer.srgb8_alpha8
+KHR-GLES31.core.internalformat.renderbuffer.depth_component32f
+KHR-GLES31.core.internalformat.renderbuffer.depth32f_stencil8
 KHR-GLES31.core.nearest_edge.offset_left
 KHR-GLES31.core.nearest_edge.offset_right
+KHR-GLES31.core.framebuffer_completeness.incomplete_missing_attachment
+KHR-GLES31.core.framebuffer_completeness.incomplete_image_zero_width
+KHR-GLES31.core.framebuffer_completeness.incomplete_image_zero_height
+KHR-GLES31.core.framebuffer_completeness.incomplete_texture_3d_layer_oob
+KHR-GLES31.core.framebuffer_completeness.incomplete_texture_2d_layer_oob
+KHR-GLES31.core.framebuffer_completeness.incomplete_texture_2d_mm_layer_oob
+KHR-GLES31.core.framebuffer_completeness.mutable_nbl_texture_expect_mipmap_complete
+KHR-GLES31.core.framebuffer_completeness.mutable_nbl_texture_expect_cube_complete
+KHR-GLES31.core.framebuffer_completeness.expect_renderable_internal_format
+KHR-GLES31.core.framebuffer_completeness.all_rbos_expect_same_numsamples
+KHR-GLES31.core.framebuffer_completeness.rbo_and_texture_expect_zero_numsamples
+KHR-GLES31.core.framebuffer_completeness.expect_equal_numsamples
+KHR-GLES31.core.framebuffer_completeness.status_tracking
+KHR-GLES31.core.framebuffer_completeness.mutable_texture_missing_attachment_level
+KHR-GLES31.core.framebuffer_completeness.immutable_texture_any_level_as_attachment
 KHR-GLES31.core.geometry_shader.adjacency.adjacency_non_indiced_lines
 KHR-GLES31.core.geometry_shader.adjacency.adjacency_indiced_lines
 KHR-GLES31.core.geometry_shader.adjacency.adjacency_non_indiced_line_strip
diff --git a/external/openglcts/data/mustpass/gles/khronos_mustpass/master/gles32-khr-master.txt b/external/openglcts/data/mustpass/gles/khronos_mustpass/master/gles32-khr-master.txt
index aeda3ad..9070aec 100644
--- a/external/openglcts/data/mustpass/gles/khronos_mustpass/master/gles32-khr-master.txt
+++ b/external/openglcts/data/mustpass/gles/khronos_mustpass/master/gles32-khr-master.txt
@@ -1048,19 +1048,68 @@
 KHR-GLES32.core.internalformat.texture2d.rgba_float_rgba32f
 KHR-GLES32.core.internalformat.texture2d.rgb_float_rgb32f_linear
 KHR-GLES32.core.internalformat.texture2d.rgba_float_rgba32f_linear
-KHR-GLES32.core.internalformat.texture2d.rgba_unsigned_byte_rgba4
-KHR-GLES32.core.internalformat.texture2d.rgba_unsigned_byte_rgb5_a1
-KHR-GLES32.core.internalformat.texture2d.rgb_unsigned_byte_rgb565
-KHR-GLES32.core.internalformat.texture2d.rgba_unsigned_short_4_4_4_4_rgba4
-KHR-GLES32.core.internalformat.texture2d.rgba_unsigned_short_5_5_5_1_rgba
-KHR-GLES32.core.internalformat.texture2d.rgba_unsigned_short_5_5_5_1_rgb5_a1
-KHR-GLES32.core.internalformat.texture2d.rgb_unsigned_short_5_6_5_rgb
-KHR-GLES32.core.internalformat.texture2d.rgb_unsigned_short_5_6_5_rgb565
-KHR-GLES32.core.internalformat.texture2d.rgb_unsigned_byte_rgb8
 KHR-GLES32.core.internalformat.texture2d.rgba_unsigned_byte_rgba8
-KHR-GLES32.core.internalformat.texture2d.rgb_half_float_rgb16f
+KHR-GLES32.core.internalformat.texture2d.rgba_unsigned_byte_rgb5_a1
+KHR-GLES32.core.internalformat.texture2d.rgba_unsigned_byte_rgba4
+KHR-GLES32.core.internalformat.texture2d.rgba_unsigned_byte_srgb8_alpha8
+KHR-GLES32.core.internalformat.texture2d.rgba_byte_rgba8_snorm
+KHR-GLES32.core.internalformat.texture2d.rgba_unsigned_short_4_4_4_4_rgba4
+KHR-GLES32.core.internalformat.texture2d.rgba_unsigned_short_5_5_5_1_rgb5_a1
 KHR-GLES32.core.internalformat.texture2d.rgba_half_float_rgba16f
+KHR-GLES32.core.internalformat.texture2d.rgba_float_rgba16f
+KHR-GLES32.core.internalformat.texture2d.rgba_integer_unsigned_byte_rgba8ui
+KHR-GLES32.core.internalformat.texture2d.rgba_integer_byte_rgba8i
+KHR-GLES32.core.internalformat.texture2d.rgba_integer_unsigned_short_rgba16ui
+KHR-GLES32.core.internalformat.texture2d.rgba_integer_short_rgba16i
+KHR-GLES32.core.internalformat.texture2d.rgba_integer_unsigned_int_rgba32ui
+KHR-GLES32.core.internalformat.texture2d.rgba_integer_int_rgba32i
+KHR-GLES32.core.internalformat.texture2d.rgba_integer_unsigned_int_2_10_10_10_rev_rgb10_a2ui
+KHR-GLES32.core.internalformat.texture2d.rgb_unsigned_byte_rgb8
+KHR-GLES32.core.internalformat.texture2d.rgb_unsigned_byte_rgb565
+KHR-GLES32.core.internalformat.texture2d.rgb_unsigned_byte_srgb8
+KHR-GLES32.core.internalformat.texture2d.rgb_unsigned_short_5_6_5_rgb565
+KHR-GLES32.core.internalformat.texture2d.rgb_unsigned_int_10f_11f_11f_rev_r11f_g11f_b10f
+KHR-GLES32.core.internalformat.texture2d.rgb_unsigned_int_5_9_9_9_rev_rgb9_e5
+KHR-GLES32.core.internalformat.texture2d.rgb_half_float_rgb16f
+KHR-GLES32.core.internalformat.texture2d.rgb_half_float_r11f_g11f_b10f
+KHR-GLES32.core.internalformat.texture2d.rgb_half_float_rgb9_e5
+KHR-GLES32.core.internalformat.texture2d.rgb_float_rgb16f
+KHR-GLES32.core.internalformat.texture2d.rgb_float_r11f_g11f_b10f
+KHR-GLES32.core.internalformat.texture2d.rgb_float_rgb9_e5
+KHR-GLES32.core.internalformat.texture2d.rgb_integer_unsigned_byte_rgb8ui
+KHR-GLES32.core.internalformat.texture2d.rgb_integer_byte_rgb8i
+KHR-GLES32.core.internalformat.texture2d.rgb_integer_unsigned_short_rgb16ui
+KHR-GLES32.core.internalformat.texture2d.rgb_integer_short_rgb16i
+KHR-GLES32.core.internalformat.texture2d.rgb_integer_unsigned_int_rgb32ui
+KHR-GLES32.core.internalformat.texture2d.rgb_integer_int_rgb32i
+KHR-GLES32.core.internalformat.texture2d.rg_unsigned_byte_rg8
+KHR-GLES32.core.internalformat.texture2d.rg_half_float_rg16f
+KHR-GLES32.core.internalformat.texture2d.rg_float_rg32f
+KHR-GLES32.core.internalformat.texture2d.rg_float_rg16f
+KHR-GLES32.core.internalformat.texture2d.rg_integer_unsigned_byte_rg8ui
+KHR-GLES32.core.internalformat.texture2d.rg_integer_byte_rg8i
+KHR-GLES32.core.internalformat.texture2d.rg_integer_unsigned_short_rg16ui
+KHR-GLES32.core.internalformat.texture2d.rg_integer_short_rg16i
+KHR-GLES32.core.internalformat.texture2d.rg_integer_unsigned_int_rg32ui
+KHR-GLES32.core.internalformat.texture2d.rg_integer_int_rg32i
+KHR-GLES32.core.internalformat.texture2d.red_unsigned_byte_r8
+KHR-GLES32.core.internalformat.texture2d.red_half_float_r16f
+KHR-GLES32.core.internalformat.texture2d.red_float_r32f
+KHR-GLES32.core.internalformat.texture2d.red_float_r16f
+KHR-GLES32.core.internalformat.texture2d.red_integer_unsigned_byte_r8ui
+KHR-GLES32.core.internalformat.texture2d.red_integer_byte_r8i
+KHR-GLES32.core.internalformat.texture2d.red_integer_unsigned_short_r16ui
+KHR-GLES32.core.internalformat.texture2d.red_integer_short_r16i
+KHR-GLES32.core.internalformat.texture2d.red_integer_unsigned_int_r32ui
+KHR-GLES32.core.internalformat.texture2d.red_integer_int_r32i
+KHR-GLES32.core.internalformat.texture2d.depth_component_unsigned_short_depth_component16
+KHR-GLES32.core.internalformat.texture2d.depth_component_unsigned_int_depth_component24
+KHR-GLES32.core.internalformat.texture2d.depth_component_unsigned_int_depth_component16
+KHR-GLES32.core.internalformat.texture2d.depth_component_float_depth_component32f
 KHR-GLES32.core.internalformat.texture2d.depth_stencil_unsigned_int_24_8_depth24_stencil8
+KHR-GLES32.core.internalformat.texture2d.depth_stencil_float_32_unsigned_int_24_8_rev_depth32f_stencil8
+KHR-GLES32.core.internalformat.texture2d.rgba_unsigned_short_5_5_5_1_rgba
+KHR-GLES32.core.internalformat.texture2d.rgb_unsigned_short_5_6_5_rgb
 KHR-GLES32.core.internalformat.copy_tex_image.rgb
 KHR-GLES32.core.internalformat.copy_tex_image.rgba
 KHR-GLES32.core.internalformat.copy_tex_image.alpha
@@ -1071,9 +1120,15 @@
 KHR-GLES32.core.internalformat.copy_tex_image.rgb565
 KHR-GLES32.core.internalformat.copy_tex_image.rgba8
 KHR-GLES32.core.internalformat.copy_tex_image.rgb8
+KHR-GLES32.core.internalformat.copy_tex_image.srgb8_alpha8
+KHR-GLES32.core.internalformat.copy_tex_image.srgb8
+KHR-GLES32.core.internalformat.copy_tex_image.r11f_g11f_b10f
 KHR-GLES32.core.internalformat.renderbuffer.rgba8
 KHR-GLES32.core.internalformat.renderbuffer.rgb8
 KHR-GLES32.core.internalformat.renderbuffer.rgb5_a1
+KHR-GLES32.core.internalformat.renderbuffer.srgb8_alpha8
+KHR-GLES32.core.internalformat.renderbuffer.depth_component32f
+KHR-GLES32.core.internalformat.renderbuffer.depth32f_stencil8
 KHR-GLES32.core.ext_texture_shadow_lod.texture.sampler2darrayshadow_fragment
 KHR-GLES32.core.ext_texture_shadow_lod.texture.sampler2darrayshadow_bias_fragment
 KHR-GLES32.core.ext_texture_shadow_lod.texture.samplercubearrayshadow_vertex
@@ -1091,3 +1146,18 @@
 KHR-GLES32.core.ext_texture_shadow_lod.texturelodoffset.sampler2darrayshadow_fragment
 KHR-GLES32.core.nearest_edge.offset_left
 KHR-GLES32.core.nearest_edge.offset_right
+KHR-GLES32.core.framebuffer_completeness.incomplete_missing_attachment
+KHR-GLES32.core.framebuffer_completeness.incomplete_image_zero_width
+KHR-GLES32.core.framebuffer_completeness.incomplete_image_zero_height
+KHR-GLES32.core.framebuffer_completeness.incomplete_texture_3d_layer_oob
+KHR-GLES32.core.framebuffer_completeness.incomplete_texture_2d_layer_oob
+KHR-GLES32.core.framebuffer_completeness.incomplete_texture_2d_mm_layer_oob
+KHR-GLES32.core.framebuffer_completeness.mutable_nbl_texture_expect_mipmap_complete
+KHR-GLES32.core.framebuffer_completeness.mutable_nbl_texture_expect_cube_complete
+KHR-GLES32.core.framebuffer_completeness.expect_renderable_internal_format
+KHR-GLES32.core.framebuffer_completeness.all_rbos_expect_same_numsamples
+KHR-GLES32.core.framebuffer_completeness.rbo_and_texture_expect_zero_numsamples
+KHR-GLES32.core.framebuffer_completeness.expect_equal_numsamples
+KHR-GLES32.core.framebuffer_completeness.status_tracking
+KHR-GLES32.core.framebuffer_completeness.mutable_texture_missing_attachment_level
+KHR-GLES32.core.framebuffer_completeness.immutable_texture_any_level_as_attachment
diff --git a/external/openglcts/data/mustpass/waivers/waivers.xml b/external/openglcts/data/mustpass/waivers/waivers.xml
index a0136d1..8947de5 100644
--- a/external/openglcts/data/mustpass/waivers/waivers.xml
+++ b/external/openglcts/data/mustpass/waivers/waivers.xml
@@ -17,6 +17,7 @@
 */-->
 	<!--/*
 	Each <waiver> entry must contain vendor and url string attributes.
+	Vendor string can use wildcard *.
 	Url should be a full path to gitlab issue(s).
 	Waiver tag should contain one <description> child that describes issue.
 	Waiver tag should containing one <renderer_list> child.
@@ -64,8 +65,7 @@
 		<t>KHR-GL45.texture_view.view_classes</t>
 		<t>KHR-GL46.texture_view.view_classes</t>
 	</waiver>
-
-	<waiver vendor="Google Inc." url="https://gitlab.khronos.org/Tracker/vk-gl-cts/-/issues/2237">
+	<waiver vendor="Google*" url="https://gitlab.khronos.org/Tracker/vk-gl-cts/-/issues/2237">
 		<description>ANGLE is unable to capture individual array elements in transform feedback using VK_EXT_transform_feedback revision 1.</description>
 		<renderer_list>
 			<r>ANGLE (Vulkan*</r>
@@ -76,7 +76,17 @@
 		<t>dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.*.array.*</t>
 		<t>KHR-GLES31.core.program_interface_query.transform-feedback-types</t>
 	</waiver>
-
+	<waiver vendor="Samsung*" url="https://gitlab.khronos.org/Tracker/vk-gl-cts/-/issues/3255">
+		<description>ANGLE is unable to capture individual array elements in transform feedback using VK_EXT_transform_feedback revision 1.</description>
+		<renderer_list>
+			<r>ANGLE (*Vulkan *</r>
+		</renderer_list>
+		<t>dEQP-GLES3.functional.transform_feedback.array_element.*</t>
+		<t>dEQP-GLES3.functional.transform_feedback.random.*</t>
+		<t>dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.*_array_element</t>
+		<t>dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.*.array.*</t>
+		<t>KHR-GLES31.core.program_interface_query.transform-feedback-types</t>
+	</waiver>
 	<waiver vendor="Intel" url="https://gitlab.khronos.org/Tracker/vk-gl-cts/issues/2601">
 		<description>Testing of wide-line attribute interpolation is too strict</description>
 		<renderer_list>
@@ -98,16 +108,4 @@
 		<t>dEQP-GLES3.functional.rasterization.interpolation.projected.lines_wide</t>
 	</waiver>
 
-	<waiver vendor="Google Inc." url="https://gitlab.khronos.org/Tracker/vk-gl-cts/-/issues/2237">
-		<description>ANGLE is unable to capture individual array elements in transform feedback using VK_EXT_transform_feedback revision 1.</description>
-		<renderer_list>
-			<r>ANGLE (Vulkan*</r>
-		</renderer_list>
-		<t>dEQP-GLES3.functional.transform_feedback.array_element.*</t>
-		<t>dEQP-GLES3.functional.transform_feedback.random.*</t>
-		<t>dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.*_array_element</t>
-		<t>dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.*.array.*</t>
-		<t>KHR-GLES31.core.program_interface_query.transform-feedback-types</t>
-	</waiver>
-
 </waiver_list>
diff --git a/external/openglcts/modules/common/CMakeLists.txt b/external/openglcts/modules/common/CMakeLists.txt
index fb9c37d..51741f7 100644
--- a/external/openglcts/modules/common/CMakeLists.txt
+++ b/external/openglcts/modules/common/CMakeLists.txt
@@ -115,6 +115,10 @@
 	glcLimitTest.inl
 	glcLimitTest.hpp
 	glcWaiver.hpp
+	glcGLSLVectorConstructorTests.cpp
+	glcGLSLVectorConstructorTests.hpp
+	glcFramebufferCompleteness.cpp
+	glcFramebufferCompleteness.hpp
 	)
 
 set(GLCTS_COMMON_LIBS
diff --git a/external/openglcts/modules/common/glcFramebufferCompleteness.cpp b/external/openglcts/modules/common/glcFramebufferCompleteness.cpp
new file mode 100644
index 0000000..ec13254
--- /dev/null
+++ b/external/openglcts/modules/common/glcFramebufferCompleteness.cpp
@@ -0,0 +1,1338 @@
+/*-------------------------------------------------------------------------
+ * OpenGL Conformance Test Suite
+ * -----------------------------
+ *
+ * Copyright (c) 2021 Google Inc.
+ * Copyright (c) 2021 The Khronos Group Inc.
+ *
+ * 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 glcFramebuffercompleteness.cpp
+ * \brief Tests for OpenGL ES frame buffer completeness
+ *//*--------------------------------------------------------------------*/
+#include "glcFramebufferCompleteness.hpp"
+#include "deInt32.h"
+#include "gluDefs.hpp"
+#include "gluContextInfo.hpp"
+#include "glwEnums.hpp"
+#include "glwFunctions.hpp"
+#include "tcuStringTemplate.hpp"
+
+#include <algorithm>
+#include <functional>
+#include <map>
+#include <memory>
+#include <sstream>
+#include <string>
+#include <vector>
+
+namespace glcts
+{
+namespace
+{
+
+using namespace glw;
+using namespace std;
+
+struct TestContext
+{
+	const glu::RenderContext&	renderContext;
+	const glw::Functions&		gl;
+	vector<GLuint>&				fboIds;
+	vector<GLuint>&				texIds;
+	vector<GLuint>&				rboIds;
+
+	void texParameteri					(GLuint texId, GLenum target, GLenum pname, GLint parameter);
+	void bindTexture					(GLenum target, GLuint texId);
+	void texImage2D						(GLenum target, GLuint level, GLint internalFormat, GLsizei width, GLsizei height, GLint border,
+										 GLenum format, GLenum type, const void* data);
+	void texImage2D						(GLuint texId, GLenum target, GLuint level, GLint internalFormat, GLsizei width, GLsizei height,
+										 GLint border, GLenum format, GLenum type, const void* data);
+	void texImage3D						(GLuint texId, GLenum target, GLuint level, GLint internalFormat, GLsizei width, GLsizei height,
+										 GLsizei depth, GLint border, GLenum format, GLenum type, const void* data);
+	void renderbufferStorage			(GLuint rboId, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height);
+	void renderbufferStorageMultisample	(GLuint rboId, GLenum target, GLsizei samples, GLenum internalFormat,
+										 GLsizei width, GLsizei height);
+	void bindFramebuffer				(GLenum target, GLuint fboId);
+	void framebufferTexture2D			(GLenum target, GLenum attachment, GLenum textarget, GLuint texId, GLint level);
+	void framebufferTextureLayer		(GLenum target, GLenum attachment, GLuint texId, GLint level, GLint layer);
+	void framebufferRenderbuffer		(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint rboId);
+};
+
+void TestContext::texParameteri(GLuint texId, GLenum target, GLenum pname, GLint parameter)
+{
+	bindTexture(target, texId);
+	gl.texParameteri(target, pname, parameter);
+	GLU_EXPECT_NO_ERROR(gl.getError(), "glTexParameteri() failed");
+	bindTexture(target, 0);
+}
+
+void TestContext::bindTexture(GLenum target, GLuint texId)
+{
+	gl.bindTexture(target, texId);
+	GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture() failed");
+}
+
+void TestContext::texImage2D(GLenum target, GLuint level, GLint internalFormat, GLsizei width, GLsizei height,
+							 GLint border, GLenum format, GLenum type, const void* data)
+{
+	gl.texImage2D(target, level, internalFormat, width, height, border, format, type, data);
+	GLU_EXPECT_NO_ERROR(gl.getError(), "glTexImage2D() failed");
+}
+
+void TestContext::texImage2D(GLuint texId, GLenum target, GLuint level, GLint internalFormat, GLsizei width,
+							 GLsizei height, GLint border, GLenum format, GLenum type, const void* data)
+{
+	bindTexture(target, texId);
+	texImage2D(target, level, internalFormat, width, height, border, format, type, data);
+	bindTexture(target, 0);
+}
+
+void TestContext::texImage3D(GLuint texId, GLenum target, GLuint level, GLint internalFormat, GLsizei width,
+							 GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void* data)
+{
+	bindTexture(target, texId);
+	gl.texImage3D(target, level, internalFormat, width, height, depth, border, format, type, data);
+	GLU_EXPECT_NO_ERROR(gl.getError(), "glTexImage3D() failed");
+	bindTexture(target, 0);
+}
+
+void TestContext::renderbufferStorage(GLuint rboId, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height)
+{
+	gl.bindRenderbuffer(GL_RENDERBUFFER, rboId);
+	GLU_EXPECT_NO_ERROR(gl.getError(), "glBindRenderbuffer() failed");
+	gl.renderbufferStorage(target, internalFormat, width, height);
+	GLU_EXPECT_NO_ERROR(gl.getError(), "glRenderbufferStorage() failed");
+	gl.bindRenderbuffer(GL_RENDERBUFFER, 0);
+	GLU_EXPECT_NO_ERROR(gl.getError(), "glBindRenderbuffer() failed");
+}
+
+void TestContext::renderbufferStorageMultisample(GLuint rboId, GLenum target, GLsizei samples, GLenum internalFormat,
+												 GLsizei width, GLsizei height)
+{
+	gl.bindRenderbuffer(GL_RENDERBUFFER, rboId);
+	GLU_EXPECT_NO_ERROR(gl.getError(), "glBindRenderbuffer() failed");
+	gl.renderbufferStorageMultisample(target, samples, internalFormat, width, height);
+	GLU_EXPECT_NO_ERROR(gl.getError(), "glRenderbufferStorageMultisample() failed");
+	gl.bindRenderbuffer(GL_RENDERBUFFER, 0);
+	GLU_EXPECT_NO_ERROR(gl.getError(), "glBindRenderbuffer() failed");
+}
+
+void TestContext::bindFramebuffer(GLenum target, GLuint fboId)
+{
+	gl.bindFramebuffer(target, fboId);
+	GLU_EXPECT_NO_ERROR(gl.getError(), "glBindFramebuffer() failed");
+}
+
+void TestContext::framebufferTexture2D(GLenum target, GLenum attachment, GLenum textarget, GLuint texId, GLint level)
+{
+	gl.framebufferTexture2D(target, attachment, textarget, texId, level);
+	GLU_EXPECT_NO_ERROR(gl.getError(), "glFramebufferTexture2D() failed");
+}
+
+void TestContext::framebufferTextureLayer(GLenum target, GLenum attachment, GLuint texId, GLint level, GLint layer)
+{
+	gl.framebufferTextureLayer(target, attachment, texId, level, layer);
+	GLU_EXPECT_NO_ERROR(gl.getError(), "glFramebufferTextureLayer() failed");
+}
+
+void TestContext::framebufferRenderbuffer(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint rboId)
+{
+	gl.framebufferRenderbuffer(target, attachment, renderbuffertarget, rboId);
+	GLU_EXPECT_NO_ERROR(gl.getError(), "glFramebufferRenderbuffer() failed");
+}
+
+typedef function<GLenum(const glu::ContextInfo& contextInfo)>		ExpectedStatusFn;
+typedef function<void(TestContext& context)>						TestFn;
+
+ExpectedStatusFn expectedStatusConstant(GLenum expectedStatus)
+{
+	return [expectedStatus] (const glu::ContextInfo&) { return expectedStatus; };
+}
+
+ExpectedStatusFn expectedStatusWithExtension(const string& extension, GLenum statusIfSupported, GLenum statusIfNotSupported)
+{
+	return [extension, statusIfSupported, statusIfNotSupported](const glu::ContextInfo &contextInfo)
+	{
+		if (contextInfo.isExtensionSupported(extension.c_str()))
+			return statusIfSupported;
+		else
+			return statusIfNotSupported;
+	};
+}
+
+struct TestStep
+{
+	TestFn				testFn;
+	ExpectedStatusFn	expectedFbStatus;
+};
+
+typedef function<void(vector<TestStep>&, TestContext& context)>		StepsGeneratorFn;
+
+struct ExtensionEntry
+{
+	string				name;
+	bool				supportedStatus;
+};
+
+struct TestParams
+{
+	string					name;
+	string					description;
+	glu::ApiType			apiType;
+	size_t					numFboIds;
+	size_t					numTexIds;
+	size_t					numRboIds;
+	vector<TestStep>		initialSteps;
+	StepsGeneratorFn		stepsGenerator;
+};
+
+const GLuint			TEXTURE_WIDTH			= 16;
+const GLuint			TEXTURE_HEIGHT			= 16;
+const GLuint			TEXTURE_DEPTH			= 16;
+
+static const GLenum		cubemapTextureTargets[]	=
+{
+	GL_TEXTURE_CUBE_MAP_NEGATIVE_X, GL_TEXTURE_CUBE_MAP_POSITIVE_X,
+	GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, GL_TEXTURE_CUBE_MAP_POSITIVE_Y,
+	GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, GL_TEXTURE_CUBE_MAP_POSITIVE_Z
+};
+
+const glu::ApiType		apiES30					= glu::ApiType::es(3, 0);
+const glu::ApiType		apiES31					= glu::ApiType::es(3, 1);
+
+bool isDifferentRboSampleCountsSupported(TestContext& testContext, GLint& maxSamples)
+{
+	const auto&	gl				= testContext.gl;
+	gl.getIntegerv(GL_MAX_SAMPLES, &maxSamples);
+	GLU_EXPECT_NO_ERROR(gl.getError(), "glGetIntegerv() failed");
+
+	if (maxSamples < 4)
+		TCU_FAIL("GL_MAX_SAMPLES needs to be >= 4");
+
+	testContext.renderbufferStorageMultisample(testContext.rboIds[0], GL_RENDERBUFFER, 1, GL_RGBA8, TEXTURE_WIDTH, TEXTURE_HEIGHT);
+	gl.bindRenderbuffer(GL_RENDERBUFFER, testContext.rboIds[0]);
+	GLU_EXPECT_NO_ERROR(gl.getError(), "glBindRenderbuffer() failed");
+
+	GLint		minSamplesRbo;
+	gl.getRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_SAMPLES, &minSamplesRbo);
+	GLU_EXPECT_NO_ERROR(gl.getError(), "getRenderbufferParameteriv() failed");
+	gl.bindRenderbuffer(GL_RENDERBUFFER, 0);
+	GLU_EXPECT_NO_ERROR(gl.getError(), "glBindRenderbuffer() failed");
+
+	return minSamplesRbo < maxSamples;
+}
+
+bool isDifferentTextureSampleCountsSupported(TestContext& testContext, GLint& maxSamples)
+{
+	if (glu::contextSupports(testContext.renderContext.getType(), apiES31))
+	{
+		const auto&	gl				= testContext.gl;
+		GLint	maxColorSamples;
+		gl.getIntegerv(GL_MAX_COLOR_TEXTURE_SAMPLES, &maxColorSamples);
+		GLU_EXPECT_NO_ERROR(gl.getError(), "glGetIntegerv() failed");
+
+		GLint	maxDepthSamples;
+		gl.getIntegerv(GL_MAX_DEPTH_TEXTURE_SAMPLES, &maxDepthSamples);
+		GLU_EXPECT_NO_ERROR(gl.getError(), "glGetIntegerv() failed");
+
+		maxSamples = min(maxColorSamples, maxDepthSamples);
+
+		GLuint	tempTexId;
+		gl.genTextures(1, &tempTexId);
+		GLU_EXPECT_NO_ERROR(gl.getError(), "glGenTextures() failed");
+
+		testContext.bindTexture(GL_TEXTURE_2D_MULTISAMPLE, tempTexId);
+		gl.texStorage2DMultisample(GL_TEXTURE_2D_MULTISAMPLE, 1, GL_RGBA8, TEXTURE_WIDTH, TEXTURE_HEIGHT, GL_TRUE);
+		GLU_EXPECT_NO_ERROR(gl.getError(), "glTexStorage2DMultisample() failed");
+
+		GLint	minSamplesTex;
+		gl.getTexLevelParameteriv(GL_TEXTURE_2D_MULTISAMPLE, 0, GL_TEXTURE_SAMPLES, &minSamplesTex);
+		GLU_EXPECT_NO_ERROR(gl.getError(), "glGetTexLevelParameteriv() failed");
+
+		testContext.bindTexture(GL_TEXTURE_2D_MULTISAMPLE, 0);
+		gl.deleteTextures(1, &tempTexId);
+		GLU_EXPECT_NO_ERROR(gl.getError(), "glDeleteTextures() failed");
+
+		return minSamplesTex < maxSamples;
+	}
+	return false;
+}
+
+/* Tests are defined as ordered series of steps that each expect a specific current framebuffer status
+   after being executed. A new TestContext instance (parameter) is created for each test but all steps
+   within a test use the same context. No code in addition to the framebuffer status check is executed
+   between steps. */
+const TestParams		tests[]					=
+{
+	{
+		"incomplete_missing_attachment",														// string					name
+		"No attachments",																		// string					description
+		apiES30,																				// glu::ApiType				apiType
+		1,																						// size_t					numFboIds
+		0,																						// size_t					numTexIds
+		0,																						// size_t					numRboIds
+		{																						// vector<TestStep>			initialSteps
+			{
+				[](TestContext& context) {
+					context.bindFramebuffer(GL_FRAMEBUFFER, context.fboIds[0]);
+				},
+				expectedStatusConstant(GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT)
+			}
+		},
+		DE_NULL,																				// StepsGeneratorFn			stepsGenerator
+	},
+	{
+		"incomplete_image_zero_width",															// string					name
+		"Zero width attachment image",															// string					description
+		apiES30,																				// glu::ApiType				apiType
+		1,																						// size_t					numFboIds
+		1,																						// size_t					numTexIds
+		0,																						// size_t					numRboIds
+		{																						// vector<TestStep>			initialSteps
+			{
+				[](TestContext& context)
+				{
+					context.bindFramebuffer(GL_FRAMEBUFFER, context.fboIds[0]);
+				},
+				expectedStatusConstant(GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT)
+			},
+			{
+				[](TestContext& context)
+				{
+					context.texImage2D(context.texIds[0], GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT16, 0, TEXTURE_HEIGHT, 0,
+									   GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, DE_NULL);
+					context.framebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, context.texIds[0], 0);
+				},
+				expectedStatusConstant(GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT)
+			}
+		},
+		DE_NULL,																				// StepsGeneratorFn			stepsGenerator
+	},
+	{
+		"incomplete_image_zero_height",															// string					name
+		"Zero height attachment image",															// string					description
+		apiES30,																				// glu::ApiType				apiType
+		1,																						// size_t					numFboIds
+		1,																						// size_t					numTexIds
+		0,																						// size_t					numRboIds
+		{																						// vector<TestStep>			initialSteps
+			{
+				[](TestContext& context)
+				{
+					context.bindFramebuffer(GL_FRAMEBUFFER, context.fboIds[0]);
+				},
+				expectedStatusConstant(GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT)
+			},
+			{
+				[](TestContext& context)
+				{
+					context.texImage2D(context.texIds[0], GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT16, 0, TEXTURE_WIDTH, 0,
+									   GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, DE_NULL);
+					context.framebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, context.texIds[0], 0);
+				},
+				expectedStatusConstant(GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT)
+			}
+		},
+		DE_NULL,																				// StepsGeneratorFn			stepsGenerator
+	},
+	{
+		"incomplete_texture_3d_layer_oob",														// string					name
+		"3D texture layer out of bounds",														// string					description
+		apiES30,																				// glu::ApiType				apiType
+		1,																						// size_t					numFboIds
+		1,																						// size_t					numTexIds
+		0,																						// size_t					numRboIds
+		{																						// vector<TestStep>			initialSteps
+			{
+				[](TestContext& context)
+				{
+					context.bindFramebuffer(GL_FRAMEBUFFER, context.fboIds[0]);
+				},
+				expectedStatusConstant(GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT)
+			},
+			{
+				[](TestContext& context)
+				{
+					context.texImage3D(context.texIds[0], GL_TEXTURE_3D, 0, GL_RGBA8, TEXTURE_WIDTH, TEXTURE_HEIGHT,
+									   TEXTURE_DEPTH, 0, GL_RGBA, GL_UNSIGNED_BYTE, DE_NULL);
+					context.framebufferTextureLayer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, context.texIds[0], 0,
+													TEXTURE_DEPTH + 1);
+				},
+				expectedStatusConstant(GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT)
+			}
+		},
+		DE_NULL,																				// StepsGeneratorFn			stepsGenerator
+	},
+	{
+		"incomplete_texture_2d_layer_oob",														// string					name
+		"2D texture layer out of bounds",														// string					description
+		apiES30,																				// glu::ApiType				apiType
+		1,																						// size_t					numFboIds
+		1,																						// size_t					numTexIds
+		0,																						// size_t					numRboIds
+		{																						// vector<TestStep>			initialSteps
+			{
+				[](TestContext& context)
+				{
+					context.bindFramebuffer(GL_FRAMEBUFFER, context.fboIds[0]);
+				},
+				expectedStatusConstant(GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT)
+			},
+			{
+				[](TestContext& context)
+				{
+					context.texImage2D(context.texIds[0], GL_TEXTURE_2D, 0, GL_RGBA8, TEXTURE_WIDTH, TEXTURE_HEIGHT, 0,
+									   GL_RGBA, GL_UNSIGNED_BYTE, DE_NULL);
+					context.framebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, context.texIds[0], 1);
+				},
+				expectedStatusConstant(GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT)
+			}
+		},
+		DE_NULL,																				// StepsGeneratorFn			stepsGenerator
+	},
+	{
+		"incomplete_texture_2d_mm_layer_oob",													// string					name
+		"2D mipmapped texture layer out of bounds",												// string					description
+		apiES30,																				// glu::ApiType				apiType
+		1,																						// size_t					numFboIds
+		1,																						// size_t					numTexIds
+		0,																						// size_t					numRboIds
+		{																						// vector<TestStep>			initialSteps
+			{
+				[](TestContext& context)
+				{
+					context.texParameteri(context.texIds[0], GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,
+										  GL_LINEAR_MIPMAP_LINEAR);
+					context.texParameteri(context.texIds[0], GL_TEXTURE_2D, GL_TEXTURE_BASE_LEVEL, 1);
+					context.texImage2D(context.texIds[0], GL_TEXTURE_2D, 1, GL_RGBA8, TEXTURE_WIDTH, TEXTURE_HEIGHT, 0,
+									   GL_RGBA, GL_UNSIGNED_BYTE, DE_NULL);
+					context.bindFramebuffer(GL_FRAMEBUFFER, context.fboIds[0]);
+				},
+				expectedStatusConstant(GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT)
+			},
+			{
+				[](TestContext& context)
+				{
+					context.framebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, context.texIds[0], 0);
+				},
+				expectedStatusConstant(GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT)
+			},
+			{
+				[](TestContext& context)
+				{
+					context.framebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, context.texIds[0], 1);
+				},
+				expectedStatusConstant(GL_FRAMEBUFFER_COMPLETE)
+			},
+			{
+				[](TestContext& context)
+				{
+					const deUint32 maxMipmapLevel = deLog2Floor32(de::max(TEXTURE_WIDTH, TEXTURE_HEIGHT));
+					context.framebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, context.texIds[0],
+												 maxMipmapLevel + 2);
+				},
+				expectedStatusConstant(GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT)
+			},
+		},
+		DE_NULL,																				// StepsGeneratorFn			stepsGenerator
+	},
+	{
+		"mutable_nbl_texture_expect_mipmap_complete",											// string					name
+		"Mutable non base level texture as framebuffer attachment must be mipmap complete",		// string					description
+		apiES30,																				// glu::ApiType				apiType
+		1,																						// size_t					numFboIds
+		1,																						// size_t					numTexIds
+		0,																						// size_t					numRboIds
+		{																						// vector<TestStep>			initialSteps
+			{
+				[](TestContext& context)
+				{
+					DE_ASSERT(TEXTURE_WIDTH >= 8 && TEXTURE_HEIGHT >= 8);
+
+					context.texImage2D(context.texIds[0], GL_TEXTURE_2D, 0, GL_RGBA8, TEXTURE_WIDTH, TEXTURE_HEIGHT, 0,
+									   GL_RGBA, GL_UNSIGNED_BYTE, DE_NULL);
+					context.texImage2D(context.texIds[0], GL_TEXTURE_2D, 1, GL_RGBA8, TEXTURE_WIDTH >> 1,
+									   TEXTURE_HEIGHT >> 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, DE_NULL);
+					context.texImage2D(context.texIds[0], GL_TEXTURE_2D, 3, GL_RGBA8, TEXTURE_WIDTH >> 3,
+									   TEXTURE_HEIGHT >> 3, 0, GL_RGBA, GL_UNSIGNED_BYTE, DE_NULL);
+					context.texParameteri(context.texIds[0], GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, 3);
+					context.texParameteri(context.texIds[0], GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
+					context.bindFramebuffer(GL_FRAMEBUFFER, context.fboIds[0]);
+				},
+				expectedStatusConstant(GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT)
+			},
+			{
+				[](TestContext& context)
+				{
+					context.framebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, context.texIds[0], 1);
+				},
+				expectedStatusConstant(GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT)
+			},
+			{
+				[](TestContext& context)
+				{
+					context.texImage2D(context.texIds[0], GL_TEXTURE_2D, 2, GL_RGBA8, TEXTURE_WIDTH >> 2,
+									   TEXTURE_HEIGHT >> 2, 0, GL_RGBA, GL_UNSIGNED_BYTE, DE_NULL);
+				},
+				expectedStatusConstant(GL_FRAMEBUFFER_COMPLETE)
+			}
+		},
+		DE_NULL,																				// StepsGeneratorFn			stepsGenerator
+	},
+	{
+		"mutable_nbl_texture_expect_cube_complete",												// string					name
+		"Mutable non base level texture as framebuffer attachment must be cube complete",		// string					description
+		apiES30,																				// glu::ApiType				apiType
+		1,																						// size_t					numFboIds
+		1,																						// size_t					numTexIds
+		0,																						// size_t					numRboIds
+		{																						// vector<TestStep>			initialSteps
+			{
+				[](TestContext& context)
+				{
+					context.bindFramebuffer(GL_FRAMEBUFFER, context.fboIds[0]);
+				},
+				expectedStatusConstant(GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT)
+			},
+			{
+				[](TestContext& context)
+				{
+					context.texParameteri(context.texIds[0], GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAX_LEVEL, 1);
+					context.texParameteri(context.texIds[0], GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
+
+					context.bindTexture(GL_TEXTURE_CUBE_MAP, context.texIds[0]);
+					for (size_t i = 0; i < DE_LENGTH_OF_ARRAY(cubemapTextureTargets); ++i)
+					{
+						if (i % 2)
+							continue;
+						context.texImage2D(cubemapTextureTargets[i], 0, GL_RGBA8, TEXTURE_WIDTH, TEXTURE_HEIGHT, 0, GL_RGBA,
+										   GL_UNSIGNED_BYTE, DE_NULL);
+						context.texImage2D(cubemapTextureTargets[i], 1, GL_RGBA8, TEXTURE_WIDTH >> 1, TEXTURE_HEIGHT >> 1, 0, GL_RGBA,
+										   GL_UNSIGNED_BYTE, DE_NULL);
+					}
+					context.bindTexture(GL_TEXTURE_CUBE_MAP, 0);
+
+					context.framebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, cubemapTextureTargets[0],
+												 context.texIds[0], 1);
+				},
+				expectedStatusConstant(GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT)
+			},
+			{
+				[](TestContext& context)
+				{
+					context.bindTexture(GL_TEXTURE_CUBE_MAP, context.texIds[0]);
+					for (size_t i = 0; i < DE_LENGTH_OF_ARRAY(cubemapTextureTargets); ++i)
+					{
+						if (i % 2 == 0)
+							continue;
+						context.texImage2D(cubemapTextureTargets[i], 0, GL_RGBA8, TEXTURE_WIDTH, TEXTURE_HEIGHT, 0, GL_RGBA,
+										   GL_UNSIGNED_BYTE, DE_NULL);
+						context.texImage2D(cubemapTextureTargets[i], 1, GL_RGBA8, TEXTURE_WIDTH >> 1, TEXTURE_HEIGHT >> 1, 0, GL_RGBA,
+										   GL_UNSIGNED_BYTE, DE_NULL);
+					}
+					context.bindTexture(GL_TEXTURE_CUBE_MAP, 0);
+				},
+				expectedStatusConstant(GL_FRAMEBUFFER_COMPLETE)
+			}
+		},
+		DE_NULL,																				// StepsGeneratorFn			stepsGenerator
+	},
+	{
+		"expect_renderable_internal_format",													// string					name
+		"Color/Depth/Stencil attachment texture must have a color/depth/stencil"				// string					description
+		" renderable internal format",
+		apiES30,																				// glu::ApiType				apiType
+		1,																						// size_t					numFboIds
+		3,																						// size_t					numTexIds
+		0,																						// size_t					numRboIds
+		{																						// vector<TestStep>			initialSteps
+			{
+				[](TestContext& context)
+				{
+					context.texImage2D(context.texIds[0], GL_TEXTURE_2D, 0, GL_RGBA8, TEXTURE_WIDTH, TEXTURE_HEIGHT, 0,
+									   GL_RGBA, GL_UNSIGNED_BYTE, DE_NULL);
+					context.texImage2D(context.texIds[1], GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT16, TEXTURE_WIDTH,
+									   TEXTURE_HEIGHT, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, DE_NULL);
+					context.texImage2D(context.texIds[2], GL_TEXTURE_2D, 0, GL_DEPTH24_STENCIL8, TEXTURE_WIDTH, TEXTURE_HEIGHT,
+									   0, GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8, DE_NULL);
+					context.bindFramebuffer(GL_FRAMEBUFFER, context.fboIds[0]);
+				},
+				expectedStatusConstant(GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT)
+			},
+			{
+				[](TestContext& context)
+				{
+					context.framebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, context.texIds[0], 0);
+				},
+				expectedStatusConstant(GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT)
+			},
+			{
+				[](TestContext& context)
+				{
+					context.framebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, context.texIds[1], 0);
+				},
+				expectedStatusConstant(GL_FRAMEBUFFER_COMPLETE)
+			},
+			{
+				[](TestContext& context)
+				{
+					context.framebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, GL_TEXTURE_2D, context.texIds[0], 0);
+				},
+				expectedStatusConstant(GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT)
+			},
+			{
+				[](TestContext& context)
+				{
+					context.framebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, GL_TEXTURE_2D, context.texIds[2], 0);
+				},
+				expectedStatusConstant(GL_FRAMEBUFFER_COMPLETE)
+			}
+		},
+		[](vector<TestStep>& steps, TestContext& testContext)									// StepsGeneratorFn			stepsGenerator
+		{
+			GLint	maxColorAttachmentsCount;
+			testContext.gl.getIntegerv(GL_MAX_COLOR_ATTACHMENTS, &maxColorAttachmentsCount);
+			GLU_EXPECT_NO_ERROR(testContext.gl.getError(), "glGetInteger() failed");
+
+			steps.reserve(steps.size() + 2 * maxColorAttachmentsCount);
+			for (GLint i = 0; i < maxColorAttachmentsCount; ++i)
+			{
+				steps.push_back(
+					{
+						[i](TestContext& context)
+						{
+							context.framebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0 + i, GL_TEXTURE_2D,
+														 context.texIds[1], 0);
+						},
+						expectedStatusConstant(GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT)
+					});
+				steps.push_back(
+					{
+						[i](TestContext& context)
+						{
+							context.framebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0 + i, GL_TEXTURE_2D,
+														 context.texIds[0], 0);
+						},
+						expectedStatusConstant(GL_FRAMEBUFFER_COMPLETE)
+					});
+			}
+		},
+	},
+	{
+		"all_rbos_expect_same_numsamples",														// string					name
+		"Same value of FRAMEBUFFER_SAMPLES for all attached render buffers",					// string					description
+		apiES30,																				// glu::ApiType				apiType
+		1,																						// size_t					numFboIds
+		0,																						// size_t					numTexIds
+		2,																						// size_t					numRboIds
+		{},																						// vector<TestStep>			initialSteps
+		[](vector<TestStep>& steps, TestContext& testContext)									// StepsGeneratorFn			stepsGenerator
+		{
+			GLint	maxSamples;
+			if (!isDifferentRboSampleCountsSupported(testContext, maxSamples))
+				return;
+
+			steps.push_back(
+				{
+					[](TestContext& context)
+					{
+						context.bindFramebuffer(GL_FRAMEBUFFER, context.fboIds[0]);
+					},
+					expectedStatusConstant(GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT)
+				});
+			steps.push_back(
+				{
+					[](TestContext& context)
+					{
+						context.renderbufferStorage(context.rboIds[0], GL_RENDERBUFFER, GL_RGBA8, TEXTURE_WIDTH, TEXTURE_HEIGHT);
+						context.renderbufferStorage(context.rboIds[1], GL_RENDERBUFFER, GL_DEPTH24_STENCIL8, TEXTURE_WIDTH,
+													TEXTURE_HEIGHT);
+
+						context.framebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER,
+														context.rboIds[0]);
+						context.framebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, GL_RENDERBUFFER,
+														context.rboIds[1]);
+					},
+					expectedStatusConstant(GL_FRAMEBUFFER_COMPLETE)
+				});
+			steps.push_back(
+				{
+					[maxSamples](TestContext& context)
+					{
+						context.renderbufferStorageMultisample(context.rboIds[0], GL_RENDERBUFFER, maxSamples, GL_RGBA8, TEXTURE_WIDTH,
+															   TEXTURE_HEIGHT);
+						context.renderbufferStorageMultisample(context.rboIds[1], GL_RENDERBUFFER, 1, GL_DEPTH24_STENCIL8,
+															   TEXTURE_WIDTH, TEXTURE_HEIGHT);
+					},
+					expectedStatusConstant(GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE)
+				});
+		},
+	},
+	{
+		"rbo_and_texture_expect_zero_numsamples",												// string					name
+		"When using mixed renderbuffer and texture attachments, the value of"					// string					description
+		" FRAMEBUFFER_SAMPLES needs to be zero for all attached renderbuffers",
+		apiES30,																				// glu::ApiType				apiType
+		1,																						// size_t					numFboIds
+		2,																						// size_t					numTexIds
+		2,																						// size_t	u				numRboIds
+		{																						// vector<TestStep>			initialSteps
+			{
+				[](TestContext& context)
+				{
+					context.bindFramebuffer(GL_FRAMEBUFFER, context.fboIds[0]);
+				},
+				expectedStatusConstant(GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT)
+			},
+			{
+				[](TestContext& context)
+				{
+					context.renderbufferStorage(context.rboIds[0], GL_RENDERBUFFER, GL_RGBA8, TEXTURE_WIDTH, TEXTURE_HEIGHT);
+					context.texImage2D(context.texIds[1], GL_TEXTURE_2D, 0, GL_DEPTH24_STENCIL8, TEXTURE_WIDTH,
+									   TEXTURE_HEIGHT, 0, GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8, DE_NULL);
+
+					context.framebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER,
+													context.rboIds[0]);
+					context.framebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, GL_TEXTURE_2D,
+												 context.texIds[1], 0);
+				},
+				expectedStatusConstant(GL_FRAMEBUFFER_COMPLETE)
+			},
+			{
+				[](TestContext& context)
+				{
+					context.renderbufferStorage(context.rboIds[1], GL_RENDERBUFFER, GL_DEPTH24_STENCIL8, TEXTURE_WIDTH,
+												TEXTURE_HEIGHT);
+					context.texImage2D(context.texIds[0], GL_TEXTURE_2D, 0, GL_RGBA8, TEXTURE_WIDTH, TEXTURE_HEIGHT, 0,
+									   GL_RGBA, GL_UNSIGNED_BYTE, DE_NULL);
+
+					context.framebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, context.texIds[0], 0);
+					context.framebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, GL_RENDERBUFFER,
+													context.rboIds[1]);
+				},
+				expectedStatusConstant(GL_FRAMEBUFFER_COMPLETE)
+			},
+			{
+				[](TestContext& context)
+				{
+					context.renderbufferStorageMultisample(context.rboIds[1], GL_RENDERBUFFER, 2, GL_DEPTH24_STENCIL8,
+														   TEXTURE_WIDTH, TEXTURE_HEIGHT);
+				},
+				expectedStatusWithExtension("GL_NV_framebuffer_mixed_samples", GL_FRAMEBUFFER_COMPLETE, GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE)
+			},
+			{
+				[](TestContext& context)
+				{
+					context.renderbufferStorageMultisample(context.rboIds[0], GL_RENDERBUFFER, 3, GL_RGBA8, TEXTURE_WIDTH,
+														   TEXTURE_HEIGHT);
+
+					context.framebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER,
+													context.rboIds[0]);
+					context.framebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, GL_TEXTURE_2D,
+												 context.texIds[1], 0);
+				},
+				expectedStatusConstant(GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE)
+			},
+			{
+				[](TestContext& context)
+				{
+					context.renderbufferStorageMultisample(context.rboIds[0], GL_RENDERBUFFER, 0, GL_RGBA8, TEXTURE_WIDTH,
+														   TEXTURE_HEIGHT);
+				},
+				expectedStatusConstant(GL_FRAMEBUFFER_COMPLETE)
+			}
+		},
+		DE_NULL,																				// StepsGeneratorFn			stepsGenerator
+	},
+	{
+		"expect_equal_numsamples",																// string					name
+		"The value of samples for each attached target must be equal",							// string					description
+		apiES31,																				// glu::ApiType				apiType
+		1,																						// size_t					numFboIds
+		4,																						// size_t					numTexIds
+		2,																						// size_t					numRboIds
+		{},																						// vector<TestStep>			initialSteps
+		[](vector<TestStep>& steps, TestContext& testContext)									// StepsGeneratorFn			stepsGenerator
+		{
+			GLint	maxRboSamples, maxTextureSamples;
+			if (!isDifferentRboSampleCountsSupported(testContext, maxRboSamples) || !isDifferentTextureSampleCountsSupported(testContext, maxTextureSamples))
+				return;
+
+			steps.push_back(
+				{
+					[maxRboSamples, maxTextureSamples](TestContext& context)
+					{
+						// Set up textures and renderbuffers for all following steps, complete = (tex0, rbo1) or (tex1, rbo0) */
+						context.renderbufferStorageMultisample(context.rboIds[0], GL_RENDERBUFFER, maxRboSamples, GL_RGBA8,
+															   TEXTURE_WIDTH, TEXTURE_HEIGHT);
+						context.renderbufferStorageMultisample(context.rboIds[1], GL_RENDERBUFFER, 1, GL_DEPTH24_STENCIL8,
+															   TEXTURE_WIDTH, TEXTURE_HEIGHT);
+
+						const auto&	gl	= context.gl;
+						context.bindTexture(GL_TEXTURE_2D_MULTISAMPLE, context.texIds[0]);
+						gl.texStorage2DMultisample(GL_TEXTURE_2D_MULTISAMPLE, 1, GL_RGBA8, TEXTURE_WIDTH, TEXTURE_HEIGHT, GL_TRUE);
+						GLU_EXPECT_NO_ERROR(gl.getError(), "glTexStorage2DMultisample() failed");
+
+						context.bindTexture(GL_TEXTURE_2D_MULTISAMPLE, context.texIds[1]);
+						gl.texStorage2DMultisample(GL_TEXTURE_2D_MULTISAMPLE, 1, GL_DEPTH24_STENCIL8, TEXTURE_WIDTH, TEXTURE_HEIGHT, GL_TRUE);
+						GLU_EXPECT_NO_ERROR(gl.getError(), "glTexStorage2DMultisample() failed");
+
+						context.bindTexture(GL_TEXTURE_2D_MULTISAMPLE, context.texIds[2]);
+						gl.texStorage2DMultisample(GL_TEXTURE_2D_MULTISAMPLE, maxTextureSamples, GL_RGBA8, TEXTURE_WIDTH, TEXTURE_HEIGHT, GL_TRUE);
+						GLU_EXPECT_NO_ERROR(gl.getError(), "glTexStorage2DMultisample() failed");
+
+						context.bindTexture(GL_TEXTURE_2D_MULTISAMPLE, context.texIds[3]);
+						gl.texStorage2DMultisample(GL_TEXTURE_2D_MULTISAMPLE, maxTextureSamples, GL_DEPTH24_STENCIL8, TEXTURE_WIDTH, TEXTURE_HEIGHT, GL_TRUE);
+						GLU_EXPECT_NO_ERROR(gl.getError(), "glTexStorage2DMultisample() failed");
+
+						context.bindTexture(GL_TEXTURE_2D_MULTISAMPLE, 0);
+
+						// Framebuffer binding for rest of this test
+						context.bindFramebuffer(GL_FRAMEBUFFER, context.fboIds[0]);
+					},
+					expectedStatusConstant(GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT)
+				});
+			steps.push_back(
+				{
+					[](TestContext& context)
+					{
+						context.framebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D_MULTISAMPLE,
+													 context.texIds[0], 0);
+						context.framebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, GL_TEXTURE_2D_MULTISAMPLE,
+													 context.texIds[1], 0);
+					},
+					expectedStatusConstant(GL_FRAMEBUFFER_COMPLETE)
+				});
+			steps.push_back(
+				{
+					[](TestContext& context)
+					{
+						context.framebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, GL_TEXTURE_2D_MULTISAMPLE,
+													 context.texIds[3], 0);
+					},
+					expectedStatusWithExtension("GL_NV_framebuffer_mixed_samples", GL_FRAMEBUFFER_COMPLETE, GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE)
+				});
+			steps.push_back(
+				{
+					[](TestContext& context)
+					{
+						context.framebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, GL_RENDERBUFFER,
+														context.rboIds[1]);
+					},
+					expectedStatusConstant(GL_FRAMEBUFFER_COMPLETE)
+				});
+			steps.push_back(
+				{
+					[](TestContext& context)
+					{
+						context.framebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER,
+														context.rboIds[0]);
+					},
+					expectedStatusConstant(GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE)
+				});
+			steps.push_back(
+				{
+					[](TestContext& context)
+					{
+						context.framebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D_MULTISAMPLE,
+													 context.texIds[2], 0);
+						context.framebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, GL_TEXTURE_2D_MULTISAMPLE,
+													 context.texIds[3], 0);
+					},
+					expectedStatusConstant(GL_FRAMEBUFFER_COMPLETE)
+				});
+			steps.push_back(
+				{
+					[](TestContext& context)
+					{
+						const auto&	gl	= context.gl;
+						gl.deleteTextures(1, &context.texIds[0]);
+						GLU_EXPECT_NO_ERROR(context.gl.getError(), "glDeleteTextures() failed");
+						gl.genTextures(1, &context.texIds[0]);
+						GLU_EXPECT_NO_ERROR(context.gl.getError(), "glGenTextures() failed");
+						context.bindTexture(GL_TEXTURE_2D_MULTISAMPLE, context.texIds[0]);
+						gl.texStorage2DMultisample(GL_TEXTURE_2D_MULTISAMPLE, 1, GL_RGBA8, TEXTURE_WIDTH, TEXTURE_HEIGHT, GL_FALSE);
+						GLU_EXPECT_NO_ERROR(context.gl.getError(), "glTexStorage2DMultisample() failed");
+						context.bindTexture(GL_TEXTURE_2D_MULTISAMPLE, 0);
+						context.framebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D_MULTISAMPLE,
+													 context.texIds[0], 0);
+						context.framebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, GL_TEXTURE_2D_MULTISAMPLE,
+													 context.texIds[1], 0);
+					},
+					expectedStatusConstant(GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE)
+				});
+		},																						// StepsGeneratorFn			stepsGenerator
+	},
+	{
+		"status_tracking",																		// string					name
+		"Modifying framebuffer attached objects correctly updates the fbo status",				// string					description
+		apiES30,																				// glu::ApiType				apiType
+		3,																						// size_t					numFboIds
+		2,																						// size_t					numTexIds
+		1,																						// size_t					numRboIds
+		{																						// vector<TestStep>			initialSteps
+			{
+				// Initial status -> missing_attachment
+				[](TestContext& context)
+				{
+					context.bindFramebuffer(GL_FRAMEBUFFER, context.fboIds[0]);
+				},
+				expectedStatusConstant(GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT)
+			},
+			{
+				// Allocate and attach texture -> complete
+				[](TestContext& context)
+				{
+					context.texImage2D(context.texIds[0], GL_TEXTURE_2D, 0, GL_RGBA8, TEXTURE_WIDTH, TEXTURE_HEIGHT, 0,
+									   GL_RGBA, GL_UNSIGNED_BYTE, DE_NULL);
+					context.framebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, context.texIds[0], 0);
+				},
+				expectedStatusConstant(GL_FRAMEBUFFER_COMPLETE)
+			},
+			{
+				// Detach texture from fbo -> missing_attachment
+				[](TestContext& context)
+				{
+					context.framebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, 0, 0);
+				},
+				expectedStatusConstant(GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT)
+			},
+			{
+				// Allocate and attach renderbuffer -> complete
+				[](TestContext& context)
+				{
+					context.renderbufferStorage(context.rboIds[0], GL_RENDERBUFFER, GL_RGBA8, TEXTURE_WIDTH,
+												TEXTURE_HEIGHT);
+					context.framebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER,
+													context.rboIds[0]);
+				},
+				expectedStatusConstant(GL_FRAMEBUFFER_COMPLETE)
+			},
+			{
+				// Detach renderbuffer -> incomplete
+				[](TestContext& context)
+				{
+					context.framebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, 0);
+				},
+				expectedStatusConstant(GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT)
+			},
+			{
+				// Switch to incomplete fb -> missing_attachment
+				[](TestContext& context)
+				{
+					context.bindFramebuffer(GL_FRAMEBUFFER, context.fboIds[1]);
+				},
+				expectedStatusConstant(GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT)
+			},
+			{
+				// Attach texture to fbo -> complete
+				[](TestContext& context)
+				{
+					context.framebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, context.texIds[0], 0);
+				},
+				expectedStatusConstant(GL_FRAMEBUFFER_COMPLETE)
+			},
+			{
+				// Change image format of attached texture -> incomplete_attachment
+				[](TestContext& context)
+				{
+					context.texImage2D(context.texIds[0], GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT16, TEXTURE_WIDTH,
+									   TEXTURE_HEIGHT, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, DE_NULL);
+				},
+				expectedStatusConstant(GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT)
+			},
+			{
+				// Change image format (tex storage) -> complete
+				[](TestContext& context)
+				{
+					context.bindTexture(GL_TEXTURE_2D, context.texIds[0]);
+					context.gl.texStorage2D(GL_TEXTURE_2D, 1, GL_RGBA8, TEXTURE_WIDTH, TEXTURE_HEIGHT);
+					GLU_EXPECT_NO_ERROR(context.gl.getError(), "glTexStorage2D() failed");
+					context.bindTexture(GL_TEXTURE_2D, 0);
+				},
+				expectedStatusConstant(GL_FRAMEBUFFER_COMPLETE)
+			},
+			{
+				// Delete image -> missing_attachment
+				[](TestContext& context)
+				{
+					context.gl.deleteTextures(1, &context.texIds[0]);
+					GLU_EXPECT_NO_ERROR(context.gl.getError(), "glDeleteTextures() failed");
+					context.texIds.erase(context.texIds.begin());
+				},
+				expectedStatusConstant(GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT)
+			},
+			{
+				// Recreate image in wrong format, attach to color attachment -> incomplete_attachment
+				[](TestContext& context)
+				{
+					const auto&	gl		= context.gl;
+					GLuint		texId;
+					gl.genTextures(1, &texId);
+					GLU_EXPECT_NO_ERROR(gl.getError(), "glGenTextures() failed");
+					context.texIds.push_back(texId);
+
+					context.bindFramebuffer(GL_FRAMEBUFFER, context.fboIds[0]);
+					context.texImage2D(context.texIds[0], GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT16, TEXTURE_WIDTH,
+									   TEXTURE_HEIGHT, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, DE_NULL);
+					context.framebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, context.texIds[0], 0);
+				},
+				expectedStatusConstant(GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT)
+			},
+			{
+				// Format to rgba8 using copyTexImage2D from compatible fbo -> framebuffer_complete
+				[](TestContext& context)
+				{
+					context.bindFramebuffer(GL_FRAMEBUFFER, context.fboIds[2]);
+					context.texImage2D(context.texIds[1], GL_TEXTURE_2D, 0, GL_RGBA8, TEXTURE_WIDTH, TEXTURE_HEIGHT, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
+					context.framebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, context.texIds[1], 0);
+
+					context.bindTexture(GL_TEXTURE_2D, context.texIds[0]);
+					const auto&	gl	= context.gl;
+					gl.copyTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, 0, 0, TEXTURE_WIDTH, TEXTURE_HEIGHT, 0);
+					GLU_EXPECT_NO_ERROR(gl.getError(), "glCopyTexImage2D() failed");
+
+					context.bindTexture(GL_TEXTURE_2D, 0);
+					context.bindFramebuffer(GL_FRAMEBUFFER, context.fboIds[0]);
+				},
+				expectedStatusConstant(GL_FRAMEBUFFER_COMPLETE)
+			},
+			{
+				// Change currently attached texture's format to compressed tex image -> incomplete_attachment (non color renderable)
+				[](TestContext& context)
+				{
+					DE_ASSERT(TEXTURE_WIDTH == 16 && TEXTURE_HEIGHT == 16);
+					static const glw::GLubyte textureDataETC2[] = // 16x16 all black RGBA8 texture in ETC2 format
+					{
+						0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x02, 0xff, 0xff, 0x00, 0x00,
+						0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x02, 0xff, 0xff, 0x00, 0x00,
+						0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x02, 0xff, 0xff, 0x00, 0x00,
+						0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x02, 0xff, 0xff, 0x00, 0x00,
+						0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x02, 0xff, 0xff, 0x00, 0x00,
+						0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x02, 0xff, 0xff, 0x00, 0x00,
+						0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x02, 0xff, 0xff, 0x00, 0x00,
+						0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x02, 0xff, 0xff, 0x00, 0x00,
+						0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x02, 0xff, 0xff, 0x00, 0x00,
+						0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x02, 0xff, 0xff, 0x00, 0x00,
+						0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x02, 0xff, 0xff, 0x00, 0x00,
+						0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x02, 0xff, 0xff, 0x00, 0x00,
+						0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x02, 0xff, 0xff, 0x00, 0x00,
+						0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x02, 0xff, 0xff, 0x00, 0x00,
+						0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x02, 0xff, 0xff, 0x00, 0x00,
+						0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x02, 0xff, 0xff, 0x00, 0x00
+					};
+					const auto&	gl	= context.gl;
+					context.bindTexture(GL_TEXTURE_2D, context.texIds[0]);
+
+					gl.compressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, TEXTURE_WIDTH, TEXTURE_HEIGHT,
+											0, DE_LENGTH_OF_ARRAY(textureDataETC2), textureDataETC2);
+					GLU_EXPECT_NO_ERROR(gl.getError(), "glCompressedTexImage2D() failed");
+
+					context.bindTexture(GL_TEXTURE_2D, 0);
+				},
+				expectedStatusConstant(GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT)
+			},
+			{
+				// Re-attach rbo0 -> complete
+				[](TestContext& context)
+				{
+					context.framebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER,
+													context.rboIds[0]);
+				},
+				expectedStatusConstant(GL_FRAMEBUFFER_COMPLETE)
+			},
+			{
+				// Rbo storage to non renderable format -> incomplete_attachment
+				[](TestContext& context)
+				{
+					context.renderbufferStorage(context.rboIds[0], GL_RENDERBUFFER, GL_DEPTH_COMPONENT16, TEXTURE_WIDTH,
+												TEXTURE_HEIGHT);
+				},
+				expectedStatusConstant(GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT)
+			},
+			{
+				// Delete rbo -> missing_attachment
+				[](TestContext& context)
+				{
+					context.gl.deleteRenderbuffers(1, &context.rboIds[0]);
+					GLU_EXPECT_NO_ERROR(context.gl.getError(), "glDeleteRenderbuffers() failed");
+					context.rboIds.erase(context.rboIds.begin());
+				},
+				expectedStatusConstant(GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT)
+			}
+		},
+		DE_NULL,																				// StepsGeneratorFn			stepsGenerator
+	},
+	{
+		"mutable_texture_missing_attachment_level",												// string					name
+		"Attaching a mutable texture with undefined image for attachment level"
+		" should be invalid",																	// string					description
+		apiES30,																				// glu::ApiType				apiType
+		1,																						// size_t					numFboIds
+		1,																						// size_t					numTexIds
+		0,																						// size_t					numRboIds
+		{},																						// vector<TestStep>			initialSteps
+		[](vector<TestStep>& steps, TestContext&)												// StepsGeneratorFn			stepsGenerator
+		{
+			DE_ASSERT(TEXTURE_WIDTH >= 16 && TEXTURE_HEIGHT >= 16);
+			steps.push_back(
+				{
+					[](TestContext& context)
+					{
+						context.bindFramebuffer(GL_FRAMEBUFFER, context.fboIds[0]);
+					},
+					expectedStatusConstant(GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT)
+				});
+			steps.push_back(
+				{
+					[](TestContext& context)
+					{
+
+						context.texParameteri(context.texIds[0], GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
+						context.texImage2D(context.texIds[0], GL_TEXTURE_2D, 0, GL_RGBA8, TEXTURE_WIDTH, TEXTURE_HEIGHT, 0,
+										   GL_RGBA, GL_UNSIGNED_BYTE, DE_NULL);
+						context.texImage2D(context.texIds[0], GL_TEXTURE_2D, 1, GL_RGBA8, TEXTURE_WIDTH >> 1, TEXTURE_HEIGHT >> 1, 0,
+										   GL_RGBA, GL_UNSIGNED_BYTE, DE_NULL);
+						context.texImage2D(context.texIds[0], GL_TEXTURE_2D, 3, GL_RGBA8, TEXTURE_WIDTH >> 3, TEXTURE_HEIGHT >> 3, 0,
+										   GL_RGBA, GL_UNSIGNED_BYTE, DE_NULL);
+
+						context.texParameteri(context.texIds[0], GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, 1);
+
+						context.framebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, context.texIds[0], 2);
+					},
+					expectedStatusConstant(GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT),
+				});
+		}
+	},
+	{
+		"immutable_texture_any_level_as_attachment",											// string					name
+		"Any level of immutable texture as attachment should be valid",							// string					description
+		apiES30,																				// glu::ApiType				apiType
+		1,																						// size_t					numFboIds
+		1,																						// size_t					numTexIds
+		0,																						// size_t					numRboIds
+		{},																						// vector<TestStep>			initialSteps
+		[](vector<TestStep>& steps, TestContext&)												// StepsGeneratorFn			stepsGenerator
+		{
+			DE_ASSERT(TEXTURE_WIDTH >= 8 && TEXTURE_HEIGHT >= 8);
+			steps.push_back(
+				{
+					[](TestContext& context)
+					{
+						context.bindFramebuffer(GL_FRAMEBUFFER, context.fboIds[0]);
+					},
+					expectedStatusConstant(GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT)
+				});
+			steps.push_back(
+				{
+					[](TestContext& context)
+					{
+						context.texParameteri(context.texIds[0], GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
+						context.bindTexture(GL_TEXTURE_2D, context.texIds[0]);
+						const auto&	gl	= context.gl;
+						gl.texStorage2D(GL_TEXTURE_2D, 3, GL_RGBA8, TEXTURE_WIDTH, TEXTURE_HEIGHT);
+						GLU_EXPECT_NO_ERROR(gl.getError(), "glTexStorage2D() failed");
+						context.bindTexture(GL_TEXTURE_2D, 0);
+
+						context.texParameteri(context.texIds[0], GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, 1);
+
+						context.framebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, context.texIds[0], 2);
+					},
+					expectedStatusConstant(GL_FRAMEBUFFER_COMPLETE),
+				});
+			steps.push_back(
+				{
+					[](TestContext& context)
+					{
+						context.framebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, context.texIds[0], 1);
+					},
+					expectedStatusConstant(GL_FRAMEBUFFER_COMPLETE),
+				});
+			steps.push_back(
+				{
+					[](TestContext& context)
+					{
+						context.framebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, context.texIds[0], 0);
+					},
+					expectedStatusConstant(GL_FRAMEBUFFER_COMPLETE),
+				});
+		}
+	},
+};
+
+class FramebufferCompletenessTestCase : public deqp::TestCase
+{
+public:
+	FramebufferCompletenessTestCase				(deqp::Context& context, const TestParams& params);
+	virtual ~FramebufferCompletenessTestCase	();
+
+	virtual void			init				(void);
+	virtual void			deinit				(void);
+	TestNode::IterateResult iterate				(void);
+
+private:
+	bool verifyFramebufferStatus				(const glw::Functions& gl, const ExpectedStatusFn expectedStatusFn, const size_t stepIndex);
+
+	const TestParams		m_params;
+	vector<GLuint>			m_fboIds;
+	vector<GLuint>			m_texIds;
+	vector<GLuint>			m_rboIds;
+};
+
+FramebufferCompletenessTestCase::FramebufferCompletenessTestCase(deqp::Context& context, const TestParams& params)
+	: deqp::TestCase(context, params.name.c_str(), params.description.c_str()), m_params(params)
+{
+}
+
+FramebufferCompletenessTestCase::~FramebufferCompletenessTestCase()
+{
+}
+
+void FramebufferCompletenessTestCase::init(void)
+{
+	const auto& renderContext	= m_context.getRenderContext();
+	const auto& gl				= renderContext.getFunctions();
+
+	if (m_params.numFboIds > 0)
+	{
+		m_fboIds.resize(m_params.numFboIds);
+		gl.genFramebuffers(m_params.numFboIds, m_fboIds.data());
+		GLU_EXPECT_NO_ERROR(gl.getError(), "glGenFramebuffers() failed");
+	}
+	if (m_params.numTexIds > 0)
+	{
+		m_texIds.resize(m_params.numTexIds);
+		gl.genTextures(m_params.numTexIds, m_texIds.data());
+		GLU_EXPECT_NO_ERROR(gl.getError(), "glGenTextures() failed");
+	}
+	if (m_params.numRboIds > 0)
+	{
+		m_rboIds.resize(m_params.numRboIds);
+		gl.genRenderbuffers(m_params.numRboIds, m_rboIds.data());
+		GLU_EXPECT_NO_ERROR(gl.getError(), "glGenRenderbuffers() failed");
+	}
+}
+
+void FramebufferCompletenessTestCase::deinit(void)
+{
+	const auto& renderContext	= m_context.getRenderContext();
+	const auto& gl				= renderContext.getFunctions();
+
+	if (!m_rboIds.empty())
+	{
+		gl.deleteRenderbuffers(m_params.numRboIds, m_rboIds.data());
+		GLU_EXPECT_NO_ERROR(gl.getError(), "glDeleteRenderbuffers() failed");
+		m_rboIds.clear();
+	}
+	if (!m_texIds.empty())
+	{
+		gl.deleteTextures(m_params.numTexIds, m_texIds.data());
+		GLU_EXPECT_NO_ERROR(gl.getError(), "glDeleteTextures() failed");
+		m_texIds.clear();
+	}
+	if (!m_fboIds.empty())
+	{
+		gl.deleteFramebuffers(m_params.numFboIds, m_fboIds.data());
+		GLU_EXPECT_NO_ERROR(gl.getError(), "glDeleteFramebufers() failed");
+		m_fboIds.clear();
+	}
+}
+
+tcu::TestNode::IterateResult FramebufferCompletenessTestCase::iterate(void)
+{
+	const auto& renderContext	= m_context.getRenderContext();
+	const auto& gl				= renderContext.getFunctions();
+	TestContext context			=
+	{
+		renderContext,	// const glu::RenderContext&	renderContext
+		gl,				// const glw::Functions&		gl
+		m_fboIds,		// vector<GLuint>&				fboIds
+		m_texIds,		// vector<GLuint>&				texIds
+		m_rboIds		// vector<GLuint>&				rboIds
+	};
+	auto steps = vector<TestStep>(m_params.initialSteps);
+	if (m_params.stepsGenerator != DE_NULL)
+		m_params.stepsGenerator(steps, context);
+
+	if (steps.empty())
+	{
+		m_context.getTestContext().setTestResult(QP_TEST_RESULT_PASS, "Pass");
+		return STOP;
+	}
+
+	size_t stepIndex = 0;
+	for (const auto& step : steps)
+	{
+		step.testFn(context);
+
+		if (!verifyFramebufferStatus(gl, step.expectedFbStatus, stepIndex++))
+			return STOP;
+	}
+	return STOP;
+}
+
+bool FramebufferCompletenessTestCase::verifyFramebufferStatus(const glw::Functions& gl, const ExpectedStatusFn expectedStatusFn,
+												  const size_t stepIndex)
+{
+	static const map<GLenum, string>	statusNames	=
+	{
+		{ GL_FRAMEBUFFER_COMPLETE						, "GL_FRAMEBUFFER_COMPLETE" },
+		{ GL_FRAMEBUFFER_UNDEFINED						, "GL_FRAMEBUFFER_UNDEFINED" },
+		{ GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT			, "GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT" },
+		{ GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT	, "GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT" },
+		{ GL_FRAMEBUFFER_UNSUPPORTED					, "GL_FRAMEBUFFER_UNSUPPORTED" },
+		{ GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE			, "GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE" },
+		{ GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS			, "GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS" }
+	};
+	const auto expectedStatus	= expectedStatusFn(m_context.getContextInfo());
+	const auto fboStatus		= gl.checkFramebufferStatus(GL_FRAMEBUFFER);
+	GLU_EXPECT_NO_ERROR(gl.getError(), "glCheckFramebufferStatus() failed");
+	if (fboStatus != expectedStatus)
+	{
+		ostringstream					msg;
+		const auto&						fboStatusName		= statusNames.find(fboStatus);
+		const auto&						expectedStatusName	= statusNames.find(expectedStatus);
+		msg << "Frame buffer status ("
+			<< ((fboStatusName != statusNames.end()) ? fboStatusName->second : std::to_string(fboStatus))
+			<< ") does not match the expected status ("
+			<< ((expectedStatusName != statusNames.end()) ? expectedStatusName->second : std::to_string(expectedStatus))
+			<< ") after step " << stepIndex;
+		TCU_FAIL(msg.str().c_str());
+		return false;
+	}
+	m_context.getTestContext().setTestResult(QP_TEST_RESULT_PASS, "Pass");
+	return true;
+}
+
+} // namespace
+
+FramebufferCompletenessTests::FramebufferCompletenessTests(deqp::Context& context)
+	: deqp::TestCaseGroup(context, "framebuffer_completeness", "Tests for frame buffer completeness")
+{
+}
+
+void FramebufferCompletenessTests::init(void)
+{
+	const auto& renderContext	= m_context.getRenderContext();
+	for (const auto& test : tests)
+	{
+		if (!glu::contextSupports(renderContext.getType(), test.apiType))
+			continue;
+
+		addChild(new FramebufferCompletenessTestCase(m_context, test));
+	}
+}
+
+} // namespace es3cts
diff --git a/external/openglcts/modules/common/glcFramebufferCompleteness.hpp b/external/openglcts/modules/common/glcFramebufferCompleteness.hpp
new file mode 100644
index 0000000..3b9f2a8
--- /dev/null
+++ b/external/openglcts/modules/common/glcFramebufferCompleteness.hpp
@@ -0,0 +1,48 @@
+#ifndef _GLCFRAMEBUFFERCOMPLETENESS_HPP
+#define _GLCFRAMEBUFFERCOMPLETENESS_HPP
+
+/*-------------------------------------------------------------------------
+ * OpenGL Conformance Test Suite
+ * -----------------------------
+ *
+ * Copyright (c) 2021 Google Inc.
+ * Copyright (c) 2021 The Khronos Group Inc.
+ *
+ * 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 glcFramebufferCompleteness.hpp
+ * \brief Tests for OpenGL ES frame buffer completeness
+ *//*--------------------------------------------------------------------*/
+
+#include "glcTestCase.hpp"
+#include "glwDefs.hpp"
+#include "tcuDefs.hpp"
+
+namespace glcts
+{
+
+class FramebufferCompletenessTests : public deqp::TestCaseGroup
+{
+public:
+									FramebufferCompletenessTests	(deqp::Context& context);
+	virtual void					init							(void);
+
+private:
+									FramebufferCompletenessTests	(const FramebufferCompletenessTests& other)	= delete;
+	FramebufferCompletenessTests&	operator=						(const FramebufferCompletenessTests& other)	= delete;
+};
+
+} // namespace glcts
+
+#endif // _GLCFRAMEBUFFERCOMPLETENESS_HPP
diff --git a/external/openglcts/modules/common/glcGLSLVectorConstructorTests.cpp b/external/openglcts/modules/common/glcGLSLVectorConstructorTests.cpp
new file mode 100644
index 0000000..39cf0f6
--- /dev/null
+++ b/external/openglcts/modules/common/glcGLSLVectorConstructorTests.cpp
@@ -0,0 +1,592 @@
+/*-------------------------------------------------------------------------
+ * OpenGL Conformance Test Suite
+ * -----------------------------
+ *
+ * Copyright (c) 2016 Google Inc.
+ * Copyright (c) 2016 The Khronos Group Inc.
+ *
+ * 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 GLSL vector constructor tests.
+ */ /*-------------------------------------------------------------------*/
+#include "glcGLSLVectorConstructorTests.hpp"
+
+#include "gluDefs.hpp"
+#include "gluTextureUtil.hpp"
+#include "gluDrawUtil.hpp"
+#include "gluShaderProgram.hpp"
+
+#include "glwDefs.hpp"
+#include "glwFunctions.hpp"
+#include "glwEnums.hpp"
+
+#include "tcuTestLog.hpp"
+#include "tcuRenderTarget.hpp"
+#include "tcuStringTemplate.hpp"
+
+#include <functional>
+#include <map>
+#include <vector>
+#include <sstream>
+#include <string>
+#include <tuple>
+
+namespace deqp
+{
+
+namespace
+{
+using std::string;
+
+using std::map;
+using std::vector;
+
+using std::function;
+using std::bind;
+using namespace std::placeholders;
+
+using std::ostringstream;
+
+enum struct TestType
+{
+	VERTEX_SHADER_ERROR = 0,
+	FRAGMENT_SHADER_ERROR,
+	VERTEX_SHADER,
+	FRAGMENT_SHADER
+};
+
+struct TestDefinition
+{
+	vector<string>			outputTypes;
+	vector<vector<string>>	inputTypeLists;
+	string					extraFields;
+};
+
+const TestDefinition					tests[]					=
+{
+	{
+		{ "vec2", "vec3", "vec4" },								// vector<string>			outputTypes
+		{														// vector<vector<string>>	inputTypeLists
+			{ "mat2" },
+			{ "mat2x3" },
+			{ "mat2x4" },
+			{ "mat3" },
+			{ "mat3x2" },
+			{ "mat3x4" },
+			{ "mat4" },
+			{ "mat4x2" },
+			{ "mat4x3" },
+			{ "float", "mat2" },
+			{ "float", "mat2x3" },
+			{ "float", "mat2x4" },
+			{ "float", "mat3" },
+			{ "float", "mat3x2" },
+			{ "float", "mat3x4" },
+			{ "float", "mat4" },
+			{ "float", "mat4x2" },
+			{ "float", "mat4x3" },
+		},
+		"const float errorBound = 1.0E-5;\n"					// deUint32					extraFields;
+	},
+	{
+		{ "ivec2", "ivec3", "ivec4" },							// vector<string>			outputTypes
+		{														// vector<vector<string>>	inputTypeLists
+			{ "mat2" },
+			{ "mat2x3" },
+			{ "mat2x4" },
+			{ "mat3" },
+			{ "mat3x2" },
+			{ "mat3x4" },
+			{ "mat4" },
+			{ "mat4x2" },
+			{ "mat4x3" },
+			{ "int", "mat2" },
+			{ "int", "mat2x3" },
+			{ "int", "mat2x4" },
+			{ "int", "mat3" },
+			{ "int", "mat3x2" },
+			{ "int", "mat3x4" },
+			{ "int", "mat4" },
+			{ "int", "mat4x2" },
+			{ "int", "mat4x3" },
+		},
+		""														// deUint32					extraFields;
+	},
+	{
+		{ "bvec2", "bvec3", "bvec4" },							// vector<string>			outputTypes
+		{														// vector<vector<string>>	inputTypeLists
+			{ "mat2" },
+			{ "mat2x3" },
+			{ "mat2x4" },
+			{ "mat3" },
+			{ "mat3x2" },
+			{ "mat3x4" },
+			{ "mat4" },
+			{ "mat4x2" },
+			{ "mat4x3" },
+			{ "bool", "mat2" },
+			{ "bool", "mat2x3" },
+			{ "bool", "mat2x4" },
+			{ "bool", "mat3" },
+			{ "bool", "mat3x2" },
+			{ "bool", "mat3x4" },
+			{ "bool", "mat4" },
+			{ "bool", "mat4x2" },
+			{ "bool", "mat4x3" },
+		},
+		""														// deUint32					extraFields;
+	},
+};
+
+struct TestParams
+{
+	string			name;
+	string			description;
+	TestType		testType;
+	string			outputType;
+	vector<string>	inputTypes;
+	string			extraFields;
+};
+
+vector<TestParams> generateTestParams()
+{
+	vector<TestParams> result;
+	result.reserve(64);
+	for(const auto& test : tests)
+	{
+		for(const auto& outputType : test.outputTypes)
+		{
+			for(const auto& inputTypes : test.inputTypeLists)
+			{
+				ostringstream testNameVs, testNameFs;
+				ostringstream testDescriptionVs, testDescriptionFs;
+				testNameVs << outputType << "_from";
+				testNameFs << outputType << "_from";
+				testDescriptionVs << outputType << "(";
+				testDescriptionFs << outputType << "(";
+				for(vector<string>::size_type i = 0; i < inputTypes.size(); ++i)
+				{
+					const auto& inputType = inputTypes[i];
+					testNameVs << "_" << inputType;
+					testNameFs << "_" << inputType;
+					if (i > 0) {
+						testDescriptionVs << ",";
+						testDescriptionFs << ",";
+					}
+					testDescriptionVs << inputType;
+				}
+				ostringstream testNameInvalidVs, testNameInvalidFs;
+				testNameInvalidVs << testNameVs.str() << "_" << inputTypes[0] << "_invalid_vs";
+				testNameInvalidFs << testNameFs.str() << "_" << inputTypes[0] << "_invalid_fs";
+
+				testNameVs << "_vs";
+				testNameFs << "_fs";
+				testDescriptionVs << ") vertex shader";
+				testDescriptionFs << ") fragment shader";
+				result.push_back({ testNameVs.str(), testDescriptionVs.str(), TestType::VERTEX_SHADER, outputType, inputTypes, test.extraFields });
+				result.push_back({ testNameFs.str(), testDescriptionFs.str(), TestType::FRAGMENT_SHADER, outputType, inputTypes, test.extraFields });
+
+				vector<string> failInputTypes;
+				failInputTypes.insert(failInputTypes.end(), inputTypes.begin(), inputTypes.end());
+				failInputTypes.push_back(inputTypes[0]);
+				testDescriptionVs << " invalid";
+				testDescriptionFs << " invalid";
+				result.push_back({ testNameInvalidVs.str(), testDescriptionVs.str(), TestType::VERTEX_SHADER_ERROR, outputType, failInputTypes, test.extraFields });
+				result.push_back({ testNameInvalidFs.str(), testDescriptionFs.str(), TestType::FRAGMENT_SHADER_ERROR, outputType, failInputTypes, test.extraFields });
+
+			}
+		}
+	}
+	return result;
+}
+
+const string									defaultVertexShader		=
+	"${GLSL_VERSION}\n"
+	"in vec4 vPosition;\n"
+	"void main()\n"
+	"{\n"
+	"    gl_Position = vPosition;\n"
+	"}\n";
+
+const string									defaultFragmentShader	=
+	"${GLSL_VERSION}\n"
+	"precision mediump float;\n"
+	"in vec4 vColor;\n"
+	"out vec4 my_FragColor;\n"
+	"void main() {\n"
+	"    my_FragColor = vColor;\n"
+	"}\n";
+
+const string									vertexShaderTemplate	=
+	"${GLSL_VERSION}\n"
+	"in vec4 vPosition;\n"
+	"precision mediump int;\n"
+	"precision mediump float;\n"
+	"const vec4 green = vec4(0.0, 1.0, 0.0, 1.0);\n"
+	"const vec4 red	  = vec4(1.0, 0.0, 0.0, 1.0);\n"
+	"${TEST_CONSTANTS}"
+	"out vec4 vColor;\n"
+	"void main() {\n"
+	"    ${TEST_CODE}\n"
+	"    if ${TEST_CONDITION}\n"
+	"        vColor = green;\n"
+	"    else\n"
+	"        vColor = red;\n"
+	"    gl_Position = vPosition;\n"
+	"}\n";
+
+const string									fragmentShaderTemplate	=
+	"${GLSL_VERSION}\n"
+	"precision mediump int;\n"
+	"precision mediump float;\n"
+	"const vec4 green = vec4(0.0, 1.0, 0.0, 1.0);\n"
+	"const vec4 red	  = vec4(1.0, 0.0, 0.0, 1.0);\n"
+	"${TEST_CONSTANTS}"
+	"out vec4 my_FragColor;\n"
+	"void main() {\n"
+	"    ${TEST_CODE}\n"
+	"    if ${TEST_CONDITION}\n"
+	"        my_FragColor = green;\n"
+	"    else\n"
+	"        my_FragColor = red;\n"
+	"}\n";
+
+const map<string, string>						testConditions			=
+{
+	{ "vec2"	, "(abs(v[0] - 0.0) <= errorBound && abs(v[1] - 1.0) <= errorBound)" },
+	{ "vec3"	, "(abs(v[0] - 0.0) <= errorBound && abs(v[1] - 1.0) <= errorBound && abs(v[2] - 2.0) <= errorBound)" },
+	{ "vec4"	, "(abs(v[0] - 0.0) <= errorBound && abs(v[1] - 1.0) <= errorBound && abs(v[2] - 2.0) <= errorBound && abs(v[3] - 3.0) <= errorBound)" },
+	{ "ivec2"	, "(v[0] == 0 && v[1] == 1)" },
+	{ "ivec3"	, "(v[0] == 0 && v[1] == 1 && v[2] == 2)" },
+	{ "ivec4"	, "(v[0] == 0 && v[1] == 1 && v[2] == 2 && v[3] == 3)" },
+	{ "bvec2"	, "(v[0] == false && v[1] == true)" },
+	{ "bvec3"	, "(v[0] == false && v[1] == true && v[2] == true)" },
+	{ "bvec4"	, "(v[0] == false && v[1] == true && v[2] == true && v[3] == true)" }
+};
+
+typedef function<void (ostringstream&, size_t)> GeneratorFn;
+
+struct DataTypeInfo
+{
+	size_t			numElements;
+	GeneratorFn		valueFn;
+	GeneratorFn		beforeValueFn;
+	GeneratorFn		afterValueFn;
+};
+
+void generateValueFloat(ostringstream& out, const size_t index)
+{
+	out << index << ".0";
+}
+
+void generateValueInt(ostringstream& out, const size_t index)
+{
+	out << index;
+}
+
+void generateValueBool(ostringstream& out, const size_t index)
+{
+	out << ((index != 0) ? "true" : "false");
+}
+
+void generateCtorOpen(const char* className, ostringstream& out, const size_t)
+{
+	out << className << "(";
+}
+
+void generateCtorClose(ostringstream &out, const size_t)
+{
+	out << ")";
+}
+
+const map<string, DataTypeInfo>					dataTypeInfos			=
+{
+	//				numElements	, valueFn			, beforeValueFn								, afterValueFn
+	{ "float"	, { 1			, generateValueFloat, DE_NULL									, DE_NULL			} },
+	{ "vec2"	, { 2			, generateValueFloat, bind(generateCtorOpen, "vec2", _1, _2)	, generateCtorClose	} },
+	{ "vec3"	, { 3			, generateValueFloat, bind(generateCtorOpen, "vec3", _1, _2)	, generateCtorClose	} },
+	{ "vec4"	, { 4			, generateValueFloat, bind(generateCtorOpen, "vec4", _1, _2)	, generateCtorClose	} },
+	{ "int"		, { 1			, generateValueInt	, DE_NULL									, DE_NULL			} },
+	{ "ivec2"	, { 2			, generateValueInt	, bind(generateCtorOpen, "ivec2", _1, _2)	, generateCtorClose	} },
+	{ "ivec3"	, { 3			, generateValueInt	, bind(generateCtorOpen, "ivec3", _1, _2)	, generateCtorClose	} },
+	{ "ivec4"	, { 4			, generateValueInt	, bind(generateCtorOpen, "ivec4", _1, _2)	, generateCtorClose	} },
+	{ "bool"	, { 1			, generateValueBool	, DE_NULL									, DE_NULL			} },
+	{ "bvec2"	, { 2			, generateValueBool	, bind(generateCtorOpen, "bvec2", _1, _2)	, generateCtorClose	} },
+	{ "bvec3"	, { 3			, generateValueBool	, bind(generateCtorOpen, "bvec3", _1, _2)	, generateCtorClose	} },
+	{ "bvec4"	, { 4			, generateValueBool	, bind(generateCtorOpen, "bvec4", _1, _2)	, generateCtorClose	} },
+	{ "mat2"	, { 4			, generateValueFloat, bind(generateCtorOpen, "mat2", _1, _2)	, generateCtorClose	} },
+	{ "mat2x3"	, { 6			, generateValueFloat, bind(generateCtorOpen, "mat2x3", _1, _2)	, generateCtorClose	} },
+	{ "mat2x4"	, { 8			, generateValueFloat, bind(generateCtorOpen, "mat2x4", _1, _2)	, generateCtorClose	} },
+	{ "mat3"	, { 9			, generateValueFloat, bind(generateCtorOpen, "mat3", _1, _2)	, generateCtorClose	} },
+	{ "mat3x2"	, { 6			, generateValueFloat, bind(generateCtorOpen, "mat3x2", _1, _2)	, generateCtorClose	} },
+	{ "mat3x4"	, { 12			, generateValueFloat, bind(generateCtorOpen, "mat3x4", _1, _2)	, generateCtorClose	} },
+	{ "mat4"	, { 16			, generateValueFloat, bind(generateCtorOpen, "mat4", _1, _2)	, generateCtorClose	} },
+	{ "mat4x2"	, { 8			, generateValueFloat, bind(generateCtorOpen, "mat4x2", _1, _2)	, generateCtorClose	} },
+	{ "mat4x3"	, { 12			, generateValueFloat, bind(generateCtorOpen, "mat4x3", _1, _2)	, generateCtorClose	} },
+};
+
+string generateTestCode(const string& outputType, const vector<string>& inputTypes)
+{
+	ostringstream output;
+	const auto outputTypeInfo = dataTypeInfos.find(outputType);
+	DE_ASSERT(outputTypeInfo != dataTypeInfos.end());
+
+	output << outputType << " v = ";
+	if (outputTypeInfo->second.beforeValueFn != DE_NULL)
+		outputTypeInfo->second.beforeValueFn(output, -1);
+	int outputElementsRemaining = outputTypeInfo->second.numElements;
+	int outputElementIndex = 0;
+	for(size_t i = 0; i < inputTypes.size() && outputElementsRemaining > 0; ++i)
+	{
+		const auto& inputType = inputTypes[i];
+		const auto inputTypeInfo = dataTypeInfos.find(inputType);
+		DE_ASSERT(inputTypeInfo != dataTypeInfos.end());
+
+		if (outputElementIndex > 0)
+			output << ", ";
+		if (inputTypeInfo->second.beforeValueFn != DE_NULL)
+			inputTypeInfo->second.beforeValueFn(output, i);
+		for(size_t j = 0; j < inputTypeInfo->second.numElements; ++j)
+		{
+			if (j > 0)
+				output << ", ";
+
+			inputTypeInfo->second.valueFn(output, outputElementIndex++);
+			--outputElementsRemaining;
+		}
+		if (inputTypeInfo->second.afterValueFn != DE_NULL)
+			inputTypeInfo->second.afterValueFn(output, i);
+	}
+	if (outputTypeInfo->second.afterValueFn != DE_NULL)
+		outputTypeInfo->second.afterValueFn(output, -1);
+	output << ";";
+	return output.str();
+}
+
+string replacePlaceholders(const string& shaderTemplate, const TestParams& params, const glu::GLSLVersion glslVersion)
+{
+	const auto condition = testConditions.find(params.outputType);
+	return tcu::StringTemplate(shaderTemplate).specialize(
+	{
+		{ "GLSL_VERSION"	, glu::getGLSLVersionDeclaration(glslVersion) },
+		{ "TEST_CONSTANTS"	, params.extraFields },
+		{ "TEST_CODE"		, generateTestCode(params.outputType, params.inputTypes) },
+		{ "TEST_CONDITION"	, (condition != testConditions.end()) ? condition->second : "" }
+	});
+}
+
+const vector<float>								positions				=
+{
+	-1.0f, -1.0f,
+	 1.0f, -1.0f,
+	-1.0f,	1.0f,
+	 1.0f,	1.0f
+};
+
+const vector<deUint32>							indices					= { 0, 1, 2, 3 };
+
+const int										RENDERTARGET_WIDTH		= 16;
+const int										RENDERTARGET_HEIGHT		= 16;
+
+class GLSLVectorConstructorTestCase : public deqp::TestCase
+{
+public:
+	GLSLVectorConstructorTestCase(deqp::Context& context, glu::GLSLVersion glslVersion, const TestParams& params);
+
+	void init(void);
+	void deinit(void);
+	IterateResult iterate();
+
+private:
+	void setupRenderTarget();
+	void releaseRenderTarget();
+
+	const glu::GLSLVersion		m_glslVersion;
+	const TestParams			m_params;
+	glw::GLuint					m_fboId;
+	glw::GLuint					m_rboId;
+
+	string						m_vertexShader;
+	string						m_fragmentShader;
+};
+
+GLSLVectorConstructorTestCase::GLSLVectorConstructorTestCase(deqp::Context& context, glu::GLSLVersion glslVersion, const TestParams& params)
+	: TestCase(context, params.name.c_str(), params.description.c_str())
+	, m_glslVersion(glslVersion)
+	, m_params(params)
+{
+	switch(m_params.testType)
+	{
+	case TestType::VERTEX_SHADER_ERROR:
+	case TestType::VERTEX_SHADER:
+		m_vertexShader = replacePlaceholders(vertexShaderTemplate, m_params, m_glslVersion);
+		m_fragmentShader = replacePlaceholders(defaultFragmentShader, m_params, m_glslVersion);
+		break;
+	case TestType::FRAGMENT_SHADER_ERROR:
+	case TestType::FRAGMENT_SHADER:
+		m_vertexShader = replacePlaceholders(defaultVertexShader, m_params, m_glslVersion);
+		m_fragmentShader = replacePlaceholders(fragmentShaderTemplate, m_params, m_glslVersion);
+		break;
+	}
+}
+
+void GLSLVectorConstructorTestCase::init(void)
+{
+	deqp::TestCase::init();
+}
+
+void GLSLVectorConstructorTestCase::deinit(void)
+{
+	deqp::TestCase::deinit();
+}
+
+GLSLVectorConstructorTestCase::IterateResult GLSLVectorConstructorTestCase::iterate()
+{
+	const auto&								renderContext	= m_context.getRenderContext();
+	const auto&								gl				= renderContext.getFunctions();
+	const auto								textureFormat	= tcu::TextureFormat(tcu::TextureFormat::RGBA,	tcu::TextureFormat::UNORM_INT8);
+	const auto								transferFormat	= glu::getTransferFormat(textureFormat);
+
+	setupRenderTarget();
+
+	glu::ShaderProgram program(renderContext, glu::makeVtxFragSources(m_vertexShader, m_fragmentShader));
+	if (!program.isOk())
+	{
+		switch(m_params.testType)
+		{
+		case TestType::VERTEX_SHADER_ERROR:
+		case TestType::FRAGMENT_SHADER_ERROR:
+			m_testCtx.setTestResult(QP_TEST_RESULT_PASS, "Pass");
+			return STOP;
+		default:
+			TCU_FAIL("Shader compilation failed:\nVertex shader:\n" + m_vertexShader + "\nFragment shader:\n" + m_fragmentShader);
+			break;
+		}
+	}
+
+	const vector<glu::VertexArrayBinding>	vertexArrays	=
+	{
+		glu::va::Float("vPosition", 2, positions.size(), 0, positions.data()),
+	};
+
+	gl.useProgram(program.getProgram());
+	GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram failed");
+
+	gl.clear(GL_COLOR_BUFFER_BIT);
+
+	glu::draw(renderContext, program.getProgram(),
+			  static_cast<int>(vertexArrays.size()), vertexArrays.data(),
+			  glu::pr::TriangleStrip(static_cast<int>(indices.size()), indices.data()));
+
+	const auto								pixelSize		= tcu::getPixelSize(textureFormat);
+	vector<deUint8>							fbData			(RENDERTARGET_WIDTH * RENDERTARGET_HEIGHT * pixelSize);
+
+	if (pixelSize < 4)
+		gl.pixelStorei(GL_PACK_ALIGNMENT, 1);
+
+	gl.readPixels(0, 0, RENDERTARGET_WIDTH, RENDERTARGET_HEIGHT, transferFormat.format, transferFormat.dataType, fbData.data());
+	GLU_EXPECT_NO_ERROR(gl.getError(), "glReadPixels");
+
+	tcu::ConstPixelBufferAccess				fbAccess		{ textureFormat, RENDERTARGET_WIDTH, RENDERTARGET_HEIGHT, 1, fbData.data() };
+	const auto								expectedColor	= tcu::RGBA::green().toVec();
+	bool pass = true;
+	for(int y = 0; pass && y < RENDERTARGET_HEIGHT; ++y)
+		for(int x = 0; x < RENDERTARGET_WIDTH; ++x)
+			if (fbAccess.getPixel(x,y) != expectedColor)
+			{
+				pass = false;
+				break;
+			}
+
+	releaseRenderTarget();
+
+	const qpTestResult						result			= (pass ? QP_TEST_RESULT_PASS : QP_TEST_RESULT_FAIL);
+	const char*								desc			= (pass ? "Pass" : "Pixel mismatch; vector initialization failed");
+
+	m_testCtx.setTestResult(result, desc);
+
+	return STOP;
+}
+
+void GLSLVectorConstructorTestCase::setupRenderTarget()
+{
+	const auto&		renderContext	= m_context.getRenderContext();
+	const auto&		gl				= renderContext.getFunctions();
+
+	gl.genFramebuffers(1, &m_fboId);
+	GLU_EXPECT_NO_ERROR(gl.getError(), "GenFramebuffers");
+
+	gl.genRenderbuffers(1, &m_rboId);
+	GLU_EXPECT_NO_ERROR(gl.getError(), "GenRenderBuffers");
+
+	gl.bindRenderbuffer(GL_RENDERBUFFER, m_rboId);
+	GLU_EXPECT_NO_ERROR(gl.getError(), "BindRenderBuffer");
+
+	gl.renderbufferStorage(GL_RENDERBUFFER, GL_RGBA8, RENDERTARGET_WIDTH, RENDERTARGET_HEIGHT);
+	GLU_EXPECT_NO_ERROR(gl.getError(), "RenderBufferStorage");
+
+	gl.bindFramebuffer(GL_FRAMEBUFFER, m_fboId);
+	GLU_EXPECT_NO_ERROR(gl.getError(), "BindFrameBuffer");
+
+	gl.framebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, m_rboId);
+	GLU_EXPECT_NO_ERROR(gl.getError(), "FrameBufferRenderBuffer");
+
+	glw::GLenum		drawBuffer		= GL_COLOR_ATTACHMENT0;
+	gl.drawBuffers(1, &drawBuffer);
+	GLU_EXPECT_NO_ERROR(gl.getError(), "DrawBuffers");
+
+	glw::GLfloat	clearColor[4]	= { 0, 0, 0, 0 };
+	gl.clearBufferfv(GL_COLOR, 0, clearColor);
+	GLU_EXPECT_NO_ERROR(gl.getError(), "ClearBuffers");
+
+	gl.viewport(0, 0, RENDERTARGET_WIDTH, RENDERTARGET_HEIGHT);
+	GLU_EXPECT_NO_ERROR(gl.getError(), "Viewport");
+}
+
+void GLSLVectorConstructorTestCase::releaseRenderTarget()
+{
+	const auto&	renderContext	= m_context.getRenderContext();
+	const auto&	gl				= renderContext.getFunctions();
+	if (m_fboId != 0)
+	{
+		gl.deleteFramebuffers(1, &m_fboId);
+		m_fboId = 0;
+	}
+	if (m_rboId != 0)
+	{
+		gl.deleteRenderbuffers(1, &m_rboId);
+		m_rboId = 0;
+	}
+}
+
+}
+
+GLSLVectorConstructorTests::GLSLVectorConstructorTests(Context& context, glu::GLSLVersion glslVersion)
+	: deqp::TestCaseGroup(context, "glsl_constructors", "GLSL vector constructor tests")
+	, m_glslVersion(glslVersion)
+{
+}
+
+GLSLVectorConstructorTests::~GLSLVectorConstructorTests()
+{
+}
+
+void GLSLVectorConstructorTests::init()
+{
+	for(const auto& params : generateTestParams())
+		addChild(new GLSLVectorConstructorTestCase(m_context, m_glslVersion, params));
+}
+
+} // deqp
diff --git a/external/openglcts/modules/common/glcGLSLVectorConstructorTests.hpp b/external/openglcts/modules/common/glcGLSLVectorConstructorTests.hpp
new file mode 100644
index 0000000..282840a
--- /dev/null
+++ b/external/openglcts/modules/common/glcGLSLVectorConstructorTests.hpp
@@ -0,0 +1,52 @@
+#ifndef _GLCGLSLVECTORCONSTRUCTORTESTS_HPP
+#define _GLCGLSLVECTORCONSTRUCTORTESTS_HPP
+
+/*-------------------------------------------------------------------------
+* OpenGL Conformance Test Suite
+* -----------------------------
+*
+* Copyright (c) 2020 Google Inc.
+* Copyright (c) 2020 The Khronos Group Inc.
+*
+* 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  glcGLSLVectorConstructorTests.hpp
+* \brief Tests for GLSL vector type constructors
+*/ /*-------------------------------------------------------------------*/
+
+#include "glcTestCase.hpp"
+#include "gluShaderUtil.hpp"
+#include "tcuDefs.hpp"
+
+namespace deqp
+{
+
+class GLSLVectorConstructorTests : public TestCaseGroup
+{
+public:
+	GLSLVectorConstructorTests(Context& context, glu::GLSLVersion glslVersion);
+	~GLSLVectorConstructorTests();
+
+	void init();
+
+private:
+    GLSLVectorConstructorTests(const GLSLVectorConstructorTests& other) = delete;
+	GLSLVectorConstructorTests& operator=(const GLSLVectorConstructorTests& other) = delete;
+
+	glu::GLSLVersion m_glslVersion;
+};
+
+} // deqp
+
+#endif // _GLCGLSLVECTORCONSTRUCTORTESTS_HPP
diff --git a/external/openglcts/modules/common/glcInternalformatTests.cpp b/external/openglcts/modules/common/glcInternalformatTests.cpp
index 5798f47..2190d7b 100644
--- a/external/openglcts/modules/common/glcInternalformatTests.cpp
+++ b/external/openglcts/modules/common/glcInternalformatTests.cpp
@@ -40,7 +40,10 @@
 #include "tcuTestLog.hpp"
 #include "tcuTextureUtil.hpp"
 
+#include "glcMisc.hpp"
+
 #include <algorithm>
+#include <functional>
 #include <map>
 
 using namespace glw;
@@ -161,7 +164,7 @@
 
 private:
 	void generateTextureData(GLuint width, GLuint height, GLenum type, unsigned int pixelSize, unsigned int components,
-							 std::vector<unsigned char>& result) const;
+							 bool isSRGB, std::vector<unsigned char>& result) const;
 
 	// color converting methods
 	static void convertByte(tcu::Vec4 inColor, unsigned char* dst, int components);
@@ -173,10 +176,13 @@
 	static void convertInt(tcu::Vec4 inColor, unsigned char* dst, int components);
 	static void convertUInt(tcu::Vec4 inColor, unsigned char* dst, int components);
 	static void convertUInt_24_8(tcu::Vec4 inColor, unsigned char* dst, int components);
+	static void convertFloat_32_Uint_24_8(tcu::Vec4 inColor, unsigned char* dst, int);
 	static void convertUShort_4_4_4_4(tcu::Vec4 inColor, unsigned char* dst, int);
 	static void convertUShort_5_5_5_1(tcu::Vec4 inColor, unsigned char* dst, int);
 	static void convertUShort_5_6_5(tcu::Vec4 inColor, unsigned char* dst, int);
 	static void convertUInt_2_10_10_10_rev(tcu::Vec4 inColor, unsigned char* dst, int);
+	static void convertUInt_10f_11f_11f_rev(tcu::Vec4 inColor, unsigned char* dst, int);
+	static void convertUint_5_9_9_9_rev(tcu::Vec4 inColor, unsigned char* dst, int);
 
 	static GLhalf floatToHalf(float f);
 
@@ -225,12 +231,14 @@
 		tcu::TextureFormat tcuTextureFormat = glu::mapGLTransferFormat(format, type);
 		unsigned int	   components		= tcu::getNumUsedChannels(tcuTextureFormat.order);
 		unsigned int	   pixelSize		= 4;
+		bool			   isSRGB			= internalFormat == GL_SRGB8 || internalFormat == GL_SRGB8_ALPHA8;
 
 		// note: getPixelSize hits assertion for GL_UNSIGNED_INT_2_10_10_10_REV when format is RGB
 		if (type != GL_UNSIGNED_INT_2_10_10_10_REV)
 			pixelSize = tcu::getPixelSize(tcuTextureFormat);
 
-		generateTextureData(m_renderWidth, m_renderHeight, type, pixelSize, components, textureData);
+		generateTextureData(m_renderWidth, m_renderHeight, type, pixelSize, components, isSRGB, textureData);
+
 		textureDataPtr = &textureData[0];
 	}
 
@@ -278,7 +286,8 @@
 			 "}\n";
 		fs = "${VERSION}\n"
 			 "precision highp float;\n"
-			 "uniform ${SAMPLER} sampler;\n"
+			 "precision highp int;\n"
+			 "uniform highp ${SAMPLER} sampler;\n"
 			 "in vec2 texcoord;\n"
 			 "out highp vec4 color;\n"
 			 "void main()\n"
@@ -289,7 +298,8 @@
 			 "}\n";
 
 		specializationMap["PROCESS_COLOR"] = "";
-		if ((format == GL_RGB_INTEGER) || (format == GL_RGBA_INTEGER))
+		if ((format == GL_RED_INTEGER) || (format == GL_RG_INTEGER) || (format == GL_RGB_INTEGER) ||
+			(format == GL_RGBA_INTEGER))
 		{
 			specializationMap["SAMPLED_TYPE"] = "uvec4";
 			specializationMap["SAMPLER"]	  = "usampler2D";
@@ -311,13 +321,13 @@
 			}
 			else if (type == GL_UNSIGNED_SHORT)
 			{
-				specializationMap["CALCULATE_COLOR"] = "vec4(v / 256) / 256.0";
+				specializationMap["CALCULATE_COLOR"] = "vec4(v / 256u) / 256.0";
 			}
 			else if (type == GL_INT)
 			{
 				specializationMap["SAMPLED_TYPE"]	= "ivec4";
 				specializationMap["SAMPLER"]		 = "isampler2D";
-				specializationMap["CALCULATE_COLOR"] = "vec4(v / 2097152u) / 1024.0";
+				specializationMap["CALCULATE_COLOR"] = "vec4(uvec4(v) / 2097152u) / 1024.0";
 			}
 			else // GL_UNSIGNED_INT
 			{
@@ -327,14 +337,18 @@
 					specializationMap["CALCULATE_COLOR"] = "vec4(v / 4194304u) / 1024.0";
 			}
 
-			if (format == GL_RGB_INTEGER)
+			if (format == GL_RED_INTEGER)
+				specializationMap["PROCESS_COLOR"] = "color = vec4(color.r, 0.0, 0.0, 1.0);\n";
+			else if (format == GL_RG_INTEGER)
+				specializationMap["PROCESS_COLOR"] = "color = vec4(color.r, color.g, 0.0, 1.0);\n";
+			else if (format == GL_RGB_INTEGER)
 				specializationMap["PROCESS_COLOR"] = "color.a = 1.0;\n";
 		}
 		else
 		{
 			specializationMap["SAMPLED_TYPE"]	= "vec4";
 			specializationMap["SAMPLER"]		 = "sampler2D";
-			if (format == GL_DEPTH_STENCIL)
+			if (format == GL_DEPTH_STENCIL || format == GL_DEPTH_COMPONENT)
 				specializationMap["CALCULATE_COLOR"] = "vec4(v.r, 0.0, 0.0, 1.0)";
 			else
 				specializationMap["CALCULATE_COLOR"] = "v";
@@ -362,6 +376,8 @@
 
 		if ((internalFormat == GL_DEPTH_COMPONENT) || (internalFormat == GL_DEPTH_STENCIL))
 			specializationMap["CALCULATE_COLOR"] = "vec4(color.r, 0.0, 0.0, 1.0)";
+		else if (internalFormat == GL_DEPTH_COMPONENT32F)
+			specializationMap["CALCULATE_COLOR"] = "vec4(color.r, color.r, color.r, 1.0)";
 		else
 			specializationMap["CALCULATE_COLOR"] = "color";
 	}
@@ -393,6 +409,8 @@
 	case GL_RGB5_A1:
 	case GL_RGBA8:
 	case GL_RGB10_A2:
+	case GL_RGBA8_SNORM:
+	case GL_SRGB8_ALPHA8:
 		return GL_RGBA;
 	case GL_RGB10_A2UI:
 	case GL_RGBA8UI: //remove this
@@ -402,6 +420,8 @@
 	case GL_RGB8:
 	case GL_RGB10:
 	case GL_RGB9_E5:
+	case GL_R11F_G11F_B10F:
+	case GL_SRGB8:
 		return GL_RGB;
 	case GL_LUMINANCE_ALPHA:
 	case GL_LUMINANCE4_ALPHA4_OES:
@@ -416,8 +436,10 @@
 	case GL_DEPTH_COMPONENT16:
 	case GL_DEPTH_COMPONENT24:
 	case GL_DEPTH_COMPONENT32:
+	case GL_DEPTH_COMPONENT32F:
 		return GL_DEPTH_COMPONENT;
 	case GL_DEPTH24_STENCIL8:
+	case GL_DEPTH32F_STENCIL8:
 		return GL_DEPTH_STENCIL;
 	case GL_STENCIL_INDEX8:
 		return GL_STENCIL_INDEX;
@@ -435,45 +457,59 @@
 	case GL_RGB10_A2:
 	case GL_RGB10_A2UI:
 		return GL_UNSIGNED_INT_2_10_10_10_REV;
+	case GL_R11F_G11F_B10F:
+		return GL_UNSIGNED_INT_10F_11F_11F_REV;
 	case GL_DEPTH_COMPONENT16:
 	case GL_DEPTH_COMPONENT24:
 		return GL_UNSIGNED_SHORT;
 	case GL_DEPTH_COMPONENT32:
 		return GL_UNSIGNED_INT;
+	case GL_DEPTH_COMPONENT32F:
+		return GL_FLOAT;
+	case GL_DEPTH32F_STENCIL8:
+		return GL_FLOAT_32_UNSIGNED_INT_24_8_REV;
 	}
 
 	return GL_UNSIGNED_BYTE;
 }
 
 void InternalformatCaseBase::generateTextureData(GLuint width, GLuint height, GLenum type, unsigned int pixelSize,
-												 unsigned int components, std::vector<unsigned char>& result) const
+												 unsigned int components, bool isSRGB,
+												 std::vector<unsigned char>& result) const
 {
 	// colors are the 4 corner colors specified ( lower left, lower right, upper left, upper right )
 	static tcu::Vec4 colors[4] = { tcu::Vec4(1.0f, 0.0f, 0.0f, 1.0f), tcu::Vec4(0.0f, 1.0f, 0.0f, 1.0f),
 								   tcu::Vec4(0.0f, 0.0f, 1.0f, 1.0f), tcu::Vec4(0.0f, 1.0f, 1.0f, 1.0f) };
 
-	typedef void (*ColorConversionFunc)(tcu::Vec4, unsigned char*, int);
+	typedef std::function<void(tcu::Vec4, unsigned char*, int)> ColorConversionFunc;
 	typedef std::map<GLenum, ColorConversionFunc> ColorConversionMap;
+	using namespace std::placeholders;
+
 	static ColorConversionMap colorConversionMap;
 	if (colorConversionMap.empty())
 	{
-		colorConversionMap[GL_BYTE]						   = &convertByte;
-		colorConversionMap[GL_UNSIGNED_BYTE]			   = &convertUByte;
-		colorConversionMap[GL_HALF_FLOAT]				   = &convertHFloat;
-		colorConversionMap[GL_HALF_FLOAT_OES]			   = &convertHFloat;
-		colorConversionMap[GL_FLOAT]					   = &convertFloat;
-		colorConversionMap[GL_SHORT]					   = &convertShort;
-		colorConversionMap[GL_UNSIGNED_SHORT]			   = &convertUShort;
-		colorConversionMap[GL_INT]						   = &convertInt;
-		colorConversionMap[GL_UNSIGNED_INT]				   = &convertUInt;
-		colorConversionMap[GL_UNSIGNED_INT_24_8]		   = &convertUInt_24_8;
-		colorConversionMap[GL_UNSIGNED_SHORT_4_4_4_4]	  = &convertUShort_4_4_4_4;
-		colorConversionMap[GL_UNSIGNED_SHORT_5_5_5_1]	  = &convertUShort_5_5_5_1;
-		colorConversionMap[GL_UNSIGNED_SHORT_5_6_5]		   = &convertUShort_5_6_5;
-		colorConversionMap[GL_UNSIGNED_INT_2_10_10_10_REV] = &convertUInt_2_10_10_10_rev;
+		colorConversionMap[GL_BYTE]							  = &convertByte;
+		colorConversionMap[GL_UNSIGNED_BYTE]				  = &convertUByte;
+		colorConversionMap[GL_HALF_FLOAT]					  = &convertHFloat;
+		colorConversionMap[GL_HALF_FLOAT_OES]				  = &convertHFloat;
+		colorConversionMap[GL_FLOAT]						  = &convertFloat;
+		colorConversionMap[GL_SHORT]						  = &convertShort;
+		colorConversionMap[GL_UNSIGNED_SHORT]				  = &convertUShort;
+		colorConversionMap[GL_INT]							  = &convertInt;
+		colorConversionMap[GL_UNSIGNED_INT]					  = &convertUInt;
+		colorConversionMap[GL_UNSIGNED_INT_24_8]			  = &convertUInt_24_8;
+		colorConversionMap[GL_FLOAT_32_UNSIGNED_INT_24_8_REV] = &convertFloat_32_Uint_24_8;
+		colorConversionMap[GL_UNSIGNED_SHORT_4_4_4_4]		  = &convertUShort_4_4_4_4;
+		colorConversionMap[GL_UNSIGNED_SHORT_5_5_5_1]		  = &convertUShort_5_5_5_1;
+		colorConversionMap[GL_UNSIGNED_SHORT_5_6_5]			  = &convertUShort_5_6_5;
+		colorConversionMap[GL_UNSIGNED_INT_2_10_10_10_REV]	  = &convertUInt_2_10_10_10_rev;
+		colorConversionMap[GL_UNSIGNED_INT_10F_11F_11F_REV]	  = &convertUInt_10f_11f_11f_rev;
+		colorConversionMap[GL_UNSIGNED_INT_5_9_9_9_REV]		  = &convertUint_5_9_9_9_rev;
 	}
 
 	ColorConversionFunc convertColor = colorConversionMap.at(type);
+	if (isSRGB)
+		convertColor = std::bind(convertColor, std::bind(tcu::linearToSRGB, _1), _2, _3);
 
 	float lwidth  = static_cast<float>(width - 1);
 	float lheight = static_cast<float>(height - 1);
@@ -573,6 +609,15 @@
 	dstUint[0] = (d & 0xFFFFFF00) | (s & 0xFF);
 }
 
+void InternalformatCaseBase::convertFloat_32_Uint_24_8(tcu::Vec4 inColor, unsigned char* dst, int)
+{
+	float*		  dstFloat = reinterpret_cast<float*>(dst);
+	unsigned int* dstUint  = reinterpret_cast<unsigned int*>(dst);
+
+	dstFloat[0] = inColor[0];
+	dstUint[1]	= static_cast<unsigned int>(inColor[1] * 255u) & 0xFF;
+}
+
 void InternalformatCaseBase::convertUShort_4_4_4_4(tcu::Vec4 inColor, unsigned char* dst, int)
 {
 	unsigned short* dstUShort = reinterpret_cast<unsigned short*>(dst);
@@ -622,6 +667,61 @@
 	dstUint[0] = (a & 0xC0000000) | (b & 0x3FF00000) | (g & 0x000FFC00) | (r & 0x000003FF);
 }
 
+void InternalformatCaseBase::convertUInt_10f_11f_11f_rev(tcu::Vec4 inColor, unsigned char* dst, int)
+{
+	unsigned int* dstUint = reinterpret_cast<unsigned int*>(dst);
+
+	unsigned int b = floatToUnisgnedF10(inColor[2]);
+	unsigned int g = floatToUnisgnedF11(inColor[1]);
+	unsigned int r = floatToUnisgnedF11(inColor[0]);
+
+	dstUint[0] = (b << 22) | (g << 11) | r;
+}
+
+void InternalformatCaseBase::convertUint_5_9_9_9_rev(tcu::Vec4 inColor, unsigned char* dst, int)
+{
+	unsigned int* dstUint = reinterpret_cast<unsigned int*>(dst);
+
+	const int N		= 9;
+	const int B		= 15;
+	const int E_max = 31;
+
+	GLfloat red	  = inColor[0];
+	GLfloat green = inColor[1];
+	GLfloat blue  = inColor[2];
+
+	GLfloat sharedExpMax =
+		(deFloatPow(2.0f, (float)N) - 1.0f) / deFloatPow(2.0f, (float)N) * deFloatPow(2.0f, (float)(E_max - B));
+
+	GLfloat red_c	= deFloatMax(0, deFloatMin(sharedExpMax, red));
+	GLfloat green_c = deFloatMax(0, deFloatMin(sharedExpMax, green));
+	GLfloat blue_c	= deFloatMax(0, deFloatMin(sharedExpMax, blue));
+
+	GLfloat max_c = deFloatMax(deFloatMax(red_c, green_c), blue_c);
+
+	GLfloat exp_p = deFloatMax(-B - 1, deFloatFloor(deFloatLog2(max_c))) + 1 + B;
+
+	GLfloat max_s = deFloatFloor(max_c / deFloatPow(2.0f, exp_p - (float)B - (float)N) + 0.5f);
+
+	GLfloat exp_s;
+
+	if (0 <= max_s && max_s < deFloatPow(2.0f, (float)N))
+		exp_s = exp_p;
+	else
+		exp_s = exp_p + 1;
+
+	GLfloat red_s	= deFloatFloor(red_c / deFloatPow(2.0f, exp_s - (float)B - (float)N) + 0.5f);
+	GLfloat green_s = deFloatFloor(green_c / deFloatPow(2.0f, exp_s - (float)B - (float)N) + 0.5f);
+	GLfloat blue_s	= deFloatFloor(blue_c / deFloatPow(2.0f, exp_s - (float)B - (float)N) + 0.5f);
+
+	GLuint c1 = (static_cast<GLuint>(red_s)) & 511;
+	GLuint c2 = (static_cast<GLuint>(green_s)) & 511;
+	GLuint c3 = (static_cast<GLuint>(blue_s)) & 511;
+	GLuint c4 = (static_cast<GLuint>(exp_s)) & 31;
+
+	dstUint[0] = (c1) | (c2 << 9) | (c3 << 18) | (c4 << 27);
+}
+
 GLhalf InternalformatCaseBase::floatToHalf(float f)
 {
 	const unsigned int HALF_FLOAT_MIN_BIASED_EXP_AS_SINGLE_FP_EXP = 0x38000000;
@@ -705,17 +805,26 @@
 		formatMap[GL_RG]			  = TextureFormat(GL_RG, GL_UNSIGNED_BYTE, GL_RG);
 		formatMap[GL_RGB]			  = TextureFormat(GL_RGB, GL_UNSIGNED_BYTE, GL_RGB);
 		formatMap[GL_RGBA]			  = TextureFormat(GL_RGB, GL_UNSIGNED_BYTE, GL_RGB);
-		formatMap[GL_RGBA_INTEGER]	= TextureFormat(GL_RGB, GL_UNSIGNED_BYTE, GL_RGB);
-		formatMap[GL_RGB_INTEGER]	 = TextureFormat(GL_RGB, GL_UNSIGNED_BYTE, GL_RGB);
+		formatMap[GL_RGBA_INTEGER]	  = TextureFormat(GL_RGB, GL_UNSIGNED_BYTE, GL_RGB);
+		formatMap[GL_RGB_INTEGER]	  = TextureFormat(GL_RGB, GL_UNSIGNED_BYTE, GL_RGB);
 		formatMap[GL_ALPHA]			  = TextureFormat(GL_ALPHA, GL_UNSIGNED_BYTE, GL_ALPHA);
 		formatMap[GL_LUMINANCE]		  = TextureFormat(GL_LUMINANCE, GL_UNSIGNED_BYTE, GL_LUMINANCE);
 		formatMap[GL_LUMINANCE_ALPHA] = TextureFormat(GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE, GL_LUMINANCE_ALPHA);
 		formatMap[GL_DEPTH_COMPONENT] = TextureFormat(GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, GL_DEPTH_COMPONENT);
-		formatMap[GL_DEPTH_STENCIL] = TextureFormat(GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8, GL_DEPTH_STENCIL);
+		formatMap[GL_DEPTH_STENCIL]	  = TextureFormat(GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8, GL_DEPTH_STENCIL);
 
 		if (glu::IsES3Compatible(gl))
 		{
-			formatMap[GL_DEPTH_STENCIL] = TextureFormat(GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8, GL_DEPTH24_STENCIL8_OES);
+			formatMap[GL_RED]			= TextureFormat(GL_RED, GL_UNSIGNED_BYTE, GL_R8);
+			formatMap[GL_RG]			= TextureFormat(GL_RG, GL_UNSIGNED_BYTE, GL_RG8);
+			formatMap[GL_DEPTH_COMPONENT] =
+				TextureFormat(GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, GL_DEPTH_COMPONENT16);
+			formatMap[GL_DEPTH_STENCIL] =
+				TextureFormat(GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8, GL_DEPTH24_STENCIL8_OES);
+			formatMap[GL_RED_INTEGER] = TextureFormat(GL_RED_INTEGER, GL_UNSIGNED_BYTE, GL_R8UI);
+			formatMap[GL_RG_INTEGER]  = TextureFormat(GL_RG_INTEGER, GL_UNSIGNED_BYTE, GL_RG8UI);
+			formatMap[GL_SRGB]		  = TextureFormat(GL_RGB, GL_UNSIGNED_BYTE, GL_RGB);
+			formatMap[GL_SRGB_ALPHA]  = TextureFormat(GL_RGB, GL_UNSIGNED_BYTE, GL_RGB);
 		}
 	}
 
@@ -730,6 +839,16 @@
 
 	const TextureFormat& referenceFormat = formatIterator->second;
 
+	auto referenceInternalFormat = referenceFormat.internalFormat;
+	auto referenceType			 = referenceFormat.type;
+
+	// Above lookup only considers m_testFormat.format
+	if (m_testFormat.internalFormat == GL_DEPTH_COMPONENT32F)
+	{
+		referenceInternalFormat = GL_DEPTH_COMPONENT24;
+		referenceType			= GL_UNSIGNED_INT;
+	}
+
 	if (m_renderWidth > m_context.getRenderTarget().getWidth())
 		m_renderWidth = m_context.getRenderTarget().getWidth();
 	if (m_renderHeight > m_context.getRenderTarget().getHeight())
@@ -742,8 +861,8 @@
 	// Create test and reference texture
 	GLuint testTextureName = createTexture(m_testFormat.internalFormat, m_testFormat.format, m_testFormat.type,
 										   m_testFormat.minFilter, m_testFormat.magFilter);
-	GLuint referenceTextureName = createTexture(referenceFormat.internalFormat, referenceFormat.format,
-												referenceFormat.type, m_testFormat.minFilter, m_testFormat.magFilter);
+	GLuint referenceTextureName = createTexture(referenceInternalFormat, referenceFormat.format, referenceType,
+												m_testFormat.minFilter, m_testFormat.magFilter);
 
 	// Create program that will render tested texture to screen
 	glu::ShaderProgram testProgram(
@@ -765,7 +884,7 @@
 
 	// Create program that will render reference texture to screen
 	glu::ProgramSources referenceSources =
-		prepareTexturingProgramSources(referenceFormat.internalFormat, referenceFormat.format, referenceFormat.type);
+		prepareTexturingProgramSources(referenceInternalFormat, referenceFormat.format, referenceType);
 	glu::ShaderProgram referenceProgram(renderContext, referenceSources);
 	if (!referenceProgram.isOk())
 	{
@@ -823,9 +942,10 @@
 	const Functions&	gl			  = renderContext.getFunctions();
 
 	// Determine texture format and type
-	GLint  textureInternalFormat = m_testFormat.internalFormat;
-	GLuint textureType			 = getTypeFromInternalFormat(textureInternalFormat);
-	GLuint textureFormat		 = getUnsizedFormatFromInternalFormat(textureInternalFormat);
+	GLint	   textureInternalFormat = m_testFormat.internalFormat;
+	GLuint	   textureType			 = getTypeFromInternalFormat(textureInternalFormat);
+	GLuint	   textureFormat		 = getUnsizedFormatFromInternalFormat(textureInternalFormat);
+	const bool isSRGB				 = textureInternalFormat == GL_SRGB8 || textureInternalFormat == GL_SRGB8_ALPHA8;
 
 	// Create program that will render texture to screen
 	glu::ShaderProgram program(renderContext,
@@ -849,7 +969,8 @@
 	GLuint mainFboId = 0;
 	gl.genFramebuffers(1, &mainFboId);
 	gl.bindFramebuffer(GL_FRAMEBUFFER, mainFboId);
-	GLuint mainFboColorTextureId = createTexture(GL_RGBA, GL_RGBA, GL_UNSIGNED_BYTE, GL_NEAREST, GL_NEAREST, false);
+	GLuint mainFboColorTextureId =
+		createTexture(isSRGB ? GL_SRGB8_ALPHA8 : GL_RGBA, GL_RGBA, GL_UNSIGNED_BYTE, GL_NEAREST, GL_NEAREST, false);
 	gl.framebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, mainFboColorTextureId, 0);
 
 	// Render reference texture to main FBO and grab it
@@ -957,6 +1078,8 @@
 	void renderColoredQuad(GLuint programId, const float* positions) const;
 	glu::ProgramSources prepareColoringProgramSources(GLenum format, GLenum type) const;
 	void convertUInt(const tcu::PixelBufferAccess &src, const tcu::PixelBufferAccess &dst);
+	void convertsRGB(const tcu::PixelBufferAccess& src, const tcu::PixelBufferAccess& dst);
+	void convertsRGBA(const tcu::PixelBufferAccess& src, const tcu::PixelBufferAccess& dst);
 	void convertUInt_2_10_10_10_rev(const tcu::PixelBufferAccess &src, const tcu::PixelBufferAccess &dst);
 
 private:
@@ -1008,6 +1131,7 @@
 
 	GLenum	testFormat = getUnsizedFormatFromInternalFormat(m_testFormat.format);
 	GLenum	testType = getTypeFromInternalFormat(m_testFormat.format);
+	const bool isSRGB	= m_testFormat.format == GL_SRGB8 || m_testFormat.format == GL_SRGB8_ALPHA8;
 
 	// We need surfaces for depth testing and stencil testing, and also for
 	// storing the reference and the values for the format under testing
@@ -1045,7 +1169,8 @@
 	// Create two programs for rendering, one for rendering into default FB, and
 	// a second one to render in our created FB
 
-	glu::ShaderProgram program0(renderContext, prepareColoringProgramSources(GL_RGBA, GL_UNSIGNED_BYTE));
+	glu::ShaderProgram program0(renderContext,
+								prepareColoringProgramSources(GL_RGBA, GL_UNSIGNED_BYTE));
 	glu::ShaderProgram program1(renderContext, prepareColoringProgramSources(testFormat, testType));
 
 	std::vector<glu::ShaderProgram*> programs;
@@ -1087,6 +1212,7 @@
 			}
 
 			gl.bindFramebuffer(GL_FRAMEBUFFER, loop ? m_fbo : m_context.getRenderContext().getDefaultFramebuffer());
+
 			gl.clear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
 
 			if (defaultFramebufferDepthBits)
@@ -1102,7 +1228,20 @@
 			// Draws large quad
 			renderColoredQuad(programs[loop]->getProgram(), bigQuadPositionsSet);
 
-			if (loop && testFormat == GL_RGBA_INTEGER)
+			if (loop && isSRGB)
+			{
+				de::ArrayBuffer<deUint32> pixels;
+				pixels.setStorage(4 * m_renderWidth * m_renderHeight);
+				tcu::PixelBufferAccess pixelBuffer(tcu::TextureFormat(tcu::TextureFormat::sRGBA, tcu::TextureFormat::UNSIGNED_INT8),
+												   m_renderWidth, m_renderHeight, 1, pixels.getPtr());
+				glu::readPixels(renderContext, 0, 0, pixelBuffer);
+				if (m_testFormat.format == GL_SRGB8_ALPHA8)
+					convertsRGBA(pixelBuffer, testSurface[0][loop].getAccess());
+				else
+					convertsRGB(pixelBuffer, testSurface[0][loop].getAccess());
+		}
+			else if (loop &&
+					 (testFormat == GL_RGBA_INTEGER || testFormat == GL_RG_INTEGER || testFormat == GL_RED_INTEGER))
 			{
 				de::ArrayBuffer<deUint32> pixels;
 				pixels.setStorage(4 * m_renderWidth * m_renderHeight);
@@ -1382,7 +1521,7 @@
 	return glu::makeVtxFragSources(vs.c_str(), fs.c_str());
 }
 
-typedef TextureFormat	  TF;
+typedef TextureFormat	   TF;
 typedef CopyTexImageFormat CF;
 typedef RenderbufferFormat RF;
 
@@ -1454,31 +1593,80 @@
 	if (glu::contextSupports(contextType, glu::ApiType::es(3, 0)))
 	{
 		TextureFormat es3Texture2DFormats[] = {
-			TF(GL_RGBA, GL_UNSIGNED_BYTE, GL_RGBA4),
-			TF(GL_RGBA, GL_UNSIGNED_BYTE, GL_RGB5_A1),
-			TF(GL_RGB, GL_UNSIGNED_BYTE, GL_RGB565),
-			TF(GL_RGBA, GL_UNSIGNED_SHORT_4_4_4_4, GL_RGBA4),
-			TF(GL_RGBA, GL_UNSIGNED_SHORT_5_5_5_1, GL_RGBA),
-			TF(GL_RGBA, GL_UNSIGNED_SHORT_5_5_5_1, GL_RGB5_A1),
-			TF(GL_RGB, GL_UNSIGNED_SHORT_5_6_5, GL_RGB),
-			TF(GL_RGB, GL_UNSIGNED_SHORT_5_6_5, GL_RGB565),
-			TF(GL_RGB, GL_UNSIGNED_BYTE, GL_RGB8),
 			TF(GL_RGBA, GL_UNSIGNED_BYTE, GL_RGBA8),
-			TF(GL_RGB, GL_HALF_FLOAT, GL_RGB16F),
+			TF(GL_RGBA, GL_UNSIGNED_BYTE, GL_RGB5_A1),
+			TF(GL_RGBA, GL_UNSIGNED_BYTE, GL_RGBA4),
+			TF(GL_RGBA, GL_UNSIGNED_BYTE, GL_SRGB8_ALPHA8),
+			TF(GL_RGBA, GL_BYTE, GL_RGBA8_SNORM),
+			TF(GL_RGBA, GL_UNSIGNED_SHORT_4_4_4_4, GL_RGBA4),
+			TF(GL_RGBA, GL_UNSIGNED_SHORT_5_5_5_1, GL_RGB5_A1),
 			TF(GL_RGBA, GL_HALF_FLOAT, GL_RGBA16F),
+			TF(GL_RGBA, GL_FLOAT, GL_RGBA16F),
+			TF(GL_RGBA_INTEGER, GL_UNSIGNED_BYTE, GL_RGBA8UI),
+			TF(GL_RGBA_INTEGER, GL_BYTE, GL_RGBA8I),
+			TF(GL_RGBA_INTEGER, GL_UNSIGNED_SHORT, GL_RGBA16UI),
+			TF(GL_RGBA_INTEGER, GL_SHORT, GL_RGBA16I),
+			TF(GL_RGBA_INTEGER, GL_UNSIGNED_INT, GL_RGBA32UI),
+			TF(GL_RGBA_INTEGER, GL_INT, GL_RGBA32I),
+			TF(GL_RGBA_INTEGER, GL_UNSIGNED_INT_2_10_10_10_REV, GL_RGB10_A2UI),
+			TF(GL_RGB, GL_UNSIGNED_BYTE, GL_RGB8),
+			TF(GL_RGB, GL_UNSIGNED_BYTE, GL_RGB565),
+			TF(GL_RGB, GL_UNSIGNED_BYTE, GL_SRGB8),
+			TF(GL_RGB, GL_UNSIGNED_SHORT_5_6_5, GL_RGB565),
+			TF(GL_RGB, GL_UNSIGNED_INT_10F_11F_11F_REV, GL_R11F_G11F_B10F),
+			TF(GL_RGB, GL_UNSIGNED_INT_5_9_9_9_REV, GL_RGB9_E5),
+			TF(GL_RGB, GL_HALF_FLOAT, GL_RGB16F),
+			TF(GL_RGB, GL_HALF_FLOAT, GL_R11F_G11F_B10F),
+			TF(GL_RGB, GL_HALF_FLOAT, GL_RGB9_E5),
+			TF(GL_RGB, GL_FLOAT, GL_RGB16F),
+			TF(GL_RGB, GL_FLOAT, GL_R11F_G11F_B10F),
+			TF(GL_RGB, GL_FLOAT, GL_RGB9_E5),
+			TF(GL_RGB_INTEGER, GL_UNSIGNED_BYTE, GL_RGB8UI),
+			TF(GL_RGB_INTEGER, GL_BYTE, GL_RGB8I),
+			TF(GL_RGB_INTEGER, GL_UNSIGNED_SHORT, GL_RGB16UI),
+			TF(GL_RGB_INTEGER, GL_SHORT, GL_RGB16I),
+			TF(GL_RGB_INTEGER, GL_UNSIGNED_INT, GL_RGB32UI),
+			TF(GL_RGB_INTEGER, GL_INT, GL_RGB32I),
+			TF(GL_RG, GL_UNSIGNED_BYTE, GL_RG8),
+			TF(GL_RG, GL_HALF_FLOAT, GL_RG16F),
+			TF(GL_RG, GL_FLOAT, GL_RG32F),
+			TF(GL_RG, GL_FLOAT, GL_RG16F),
+			TF(GL_RG_INTEGER, GL_UNSIGNED_BYTE, GL_RG8UI),
+			TF(GL_RG_INTEGER, GL_BYTE, GL_RG8I),
+			TF(GL_RG_INTEGER, GL_UNSIGNED_SHORT, GL_RG16UI),
+			TF(GL_RG_INTEGER, GL_SHORT, GL_RG16I),
+			TF(GL_RG_INTEGER, GL_UNSIGNED_INT, GL_RG32UI),
+			TF(GL_RG_INTEGER, GL_INT, GL_RG32I),
+			TF(GL_RED, GL_UNSIGNED_BYTE, GL_R8),
+			TF(GL_RED, GL_HALF_FLOAT, GL_R16F),
+			TF(GL_RED, GL_FLOAT, GL_R32F),
+			TF(GL_RED, GL_FLOAT, GL_R16F),
+			TF(GL_RED_INTEGER, GL_UNSIGNED_BYTE, GL_R8UI),
+			TF(GL_RED_INTEGER, GL_BYTE, GL_R8I),
+			TF(GL_RED_INTEGER, GL_UNSIGNED_SHORT, GL_R16UI),
+			TF(GL_RED_INTEGER, GL_SHORT, GL_R16I),
+			TF(GL_RED_INTEGER, GL_UNSIGNED_INT, GL_R32UI),
+			TF(GL_RED_INTEGER, GL_INT, GL_R32I),
+			TF(GL_DEPTH_COMPONENT, GL_UNSIGNED_SHORT, GL_DEPTH_COMPONENT16),
+			TF(GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, GL_DEPTH_COMPONENT24),
+			TF(GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, GL_DEPTH_COMPONENT16),
+			TF(GL_DEPTH_COMPONENT, GL_FLOAT, GL_DEPTH_COMPONENT32F),
 			TF(GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8, GL_DEPTH24_STENCIL8),
+			TF(GL_DEPTH_STENCIL, GL_FLOAT_32_UNSIGNED_INT_24_8_REV, GL_DEPTH32F_STENCIL8),
+			TF(GL_RGBA, GL_UNSIGNED_SHORT_5_5_5_1, GL_RGBA),
+			TF(GL_RGB, GL_UNSIGNED_SHORT_5_6_5, GL_RGB),
 		};
 
 		CopyTexImageFormat es3CopyTexImageFormats[] = {
-			CF(GL_RGBA4),
-			CF(GL_RGB5_A1),
-			CF(GL_RGB565),
-			CF(GL_RGBA8),
-			CF(GL_RGB8),
+			CF(GL_RGBA4), CF(GL_RGB5_A1),	   CF(GL_RGB565), CF(GL_RGBA8),
+			CF(GL_RGB8),  CF(GL_SRGB8_ALPHA8), CF(GL_SRGB8),  CF(GL_R11F_G11F_B10F),
 		};
 
 		RenderbufferFormat es3RenderbufferFormats[] = {
 			RF(GL_RGB5_A1, RENDERBUFFER_COLOR),
+			RF(GL_SRGB8_ALPHA8, RENDERBUFFER_COLOR),
+			RF(GL_DEPTH_COMPONENT32F, RENDERBUFFER_DEPTH),
+			RF(GL_DEPTH32F_STENCIL8, RENDERBUFFER_DEPTH_STENCIL),
 		};
 
 		append(testData.texture2DFormats, es3Texture2DFormats);
@@ -1582,12 +1770,9 @@
 	};
 
 	CopyTexImageFormat commonCopyTexImageFormats[] = {
-		CF(GL_DEPTH_COMPONENT16, ARB_depth_texture),
-		CF(GL_DEPTH_COMPONENT24, ARB_depth_texture),
-		CF(GL_DEPTH_COMPONENT32, ARB_depth_texture),
-		CF(GL_RGB9_E5, EXT_texture_shared_exponent),
-		CF(GL_RGB10_A2UI, ARB_texture_rgb10_a2ui),
-		CF(GL_RGB10_A2),
+		CF(GL_DEPTH_COMPONENT16, ARB_depth_texture), CF(GL_DEPTH_COMPONENT24, ARB_depth_texture),
+		CF(GL_DEPTH_COMPONENT32, ARB_depth_texture), CF(GL_RGB9_E5, EXT_texture_shared_exponent),
+		CF(GL_RGB10_A2UI, ARB_texture_rgb10_a2ui),	 CF(GL_RGB10_A2),
 	};
 
 	RenderbufferFormat commonRenderbufferFormats[] = {
@@ -1704,6 +1889,30 @@
 	}
 }
 
+void RenderbufferCase::convertsRGB(const tcu::PixelBufferAccess& src, const tcu::PixelBufferAccess& dst)
+{
+	for (int z = 0; z < dst.getDepth(); ++z)
+	for (int y = 0; y < dst.getHeight(); ++y)
+	for (int x = 0; x < dst.getWidth(); ++x)
+	{
+		tcu::UVec4 srcPixel = src.getPixelUint(x, y, z);
+		tcu::Vec4  dstPixel = sRGB8ToLinear(srcPixel);
+		dst.setPixel(dstPixel, x, y, z);
+	}
+}
+
+void RenderbufferCase::convertsRGBA(const tcu::PixelBufferAccess& src, const tcu::PixelBufferAccess& dst)
+{
+	for (int z = 0; z < dst.getDepth(); ++z)
+	for (int y = 0; y < dst.getHeight(); ++y)
+	for (int x = 0; x < dst.getWidth(); ++x)
+	{
+		tcu::UVec4 srcPixel = src.getPixelUint(x, y, z);
+		tcu::Vec4  dstPixel = sRGBA8ToLinear(srcPixel);
+		dst.setPixel(dstPixel, x, y, z);
+	}
+}
+
 void RenderbufferCase::convertUInt_2_10_10_10_rev(const tcu::PixelBufferAccess &src, const tcu::PixelBufferAccess &dst)
 {
 	for (int z = 0; z < dst.getDepth(); ++z)
diff --git a/external/openglcts/modules/common/glcNearestEdgeTests.cpp b/external/openglcts/modules/common/glcNearestEdgeTests.cpp
index 14f63be..5eb7bba 100644
--- a/external/openglcts/modules/common/glcNearestEdgeTests.cpp
+++ b/external/openglcts/modules/common/glcNearestEdgeTests.cpp
@@ -74,7 +74,7 @@
 
 	static std::string				getName			(OffsetDirection direction);
 	static std::string				getDesc			(OffsetDirection direction);
-	static tcu::TextureFormat		toTextureFormat	(const tcu::PixelFormat& pixelFmt);
+	static tcu::TextureFormat		toTextureFormat	(deqp::Context& context, const tcu::PixelFormat& pixelFmt);
 
 private:
 	static const glw::GLenum kTextureType	= GL_TEXTURE_2D;
@@ -124,7 +124,7 @@
 
 // Translate pixel format in the frame buffer to texture format.
 // Copied from sglrReferenceContext.cpp.
-tcu::TextureFormat NearestEdgeTestCase::toTextureFormat (const tcu::PixelFormat& pixelFmt)
+tcu::TextureFormat NearestEdgeTestCase::toTextureFormat (deqp::Context& context, const tcu::PixelFormat& pixelFmt)
 {
 	static const struct
 	{
@@ -144,7 +144,22 @@
 	for (int ndx = 0; ndx < DE_LENGTH_OF_ARRAY(pixelFormatMap); ndx++)
 	{
 		if (pixelFormatMap[ndx].pixelFmt == pixelFmt)
+		{
+			// Some implementations treat GL_RGB8 as GL_RGBA8888,so the test should pass implementation format to ReadPixels.
+			if (pixelFmt == tcu::PixelFormat(8, 8, 8, 0))
+			{
+				const auto& gl = context.getRenderContext().getFunctions();
+
+				glw::GLint implFormat = GL_NONE;
+				glw::GLint implType	  = GL_NONE;
+				gl.getIntegerv(GL_IMPLEMENTATION_COLOR_READ_FORMAT, &implFormat);
+				gl.getIntegerv(GL_IMPLEMENTATION_COLOR_READ_TYPE, &implType);
+				if (implFormat == GL_RGBA && implType == GL_UNSIGNED_BYTE)
+					return tcu::TextureFormat(tcu::TextureFormat::RGBA, tcu::TextureFormat::UNORM_INT8);
+			}
+
 			return pixelFormatMap[ndx].texFmt;
+		}
 	}
 
 	TCU_FAIL("Unable to map pixel format to texture format");
@@ -156,7 +171,7 @@
 	, m_width			{context.getRenderTarget().getWidth()}
 	, m_height			{context.getRenderTarget().getHeight()}
 	, m_format			{context.getRenderTarget().getPixelFormat()}
-	, m_texFormat		{toTextureFormat(m_format)}
+	, m_texFormat		{toTextureFormat(context, m_format)}
 	, m_texFormatInfo	{tcu::getTextureFormatInfo(m_texFormat)}
 	, m_transFormat		{glu::getTransferFormat(m_texFormat)}
 {
@@ -172,32 +187,36 @@
 		TCU_THROW(NotSupportedError, "Render target size too small");
 
 	m_vertShaderText =
-		"#version ${VERSION}\n"
-		"\n"
-		"in highp vec2 position;\n"
-		"in highp vec2 inTexCoord;\n"
-		"out highp vec2 commonTexCoord;\n"
-		"\n"
-		"void main()\n"
-		"{\n"
-		"    commonTexCoord = inTexCoord;\n"
-		"    gl_Position = vec4(position, 0.0, 1.0);\n"
-		"}\n"
-		;
-
-	m_fragShaderText =
-		"#version ${VERSION}\n"
-		"\n"
-		"in highp vec2 commonTexCoord;\n"
-		"out highp vec4 fragColor;\n"
-		"\n"
-		"uniform highp sampler2D texSampler;\n"
-		"\n"
-		"void main()\n"
-		"{\n"
-		"    fragColor = texture(texSampler, commonTexCoord);\n"
-		"}\n"
-		"\n";
+        "#version ${VERSION}\n"
+        "\n"
+        "in highp vec2 position;\n"
+        "\n"
+        "void main()\n"
+        "{\n"
+        "    gl_Position = vec4(position, 0.0, 1.0);\n"
+        "}\n"
+        ;
+    m_fragShaderText =
+        "#version ${VERSION}\n"
+        "\n"
+        "precision highp float;\n"
+        "out highp vec4 fragColor;\n"
+        "\n"
+        "uniform highp sampler2D texSampler;\n"
+        "uniform float texOffset;\n"
+        "uniform float texWidth;\n"
+        "uniform float texHeight;\n"
+        "\n"
+        "void main()\n"
+        "{\n"
+        "    float texCoordX;\n"
+        "    float texCoordY;\n"
+        "    texCoordX = (gl_FragCoord.x + texOffset) / texWidth;\n "
+        "    texCoordY = (gl_FragCoord.y + texOffset) / texHeight;\n"
+        "    vec2 sampleCoord = vec2(texCoordX, texCoordY);\n"
+        "    fragColor = texture(texSampler, sampleCoord);\n"
+        "}\n"
+        "\n";
 
 	tcu::StringTemplate vertShaderTemplate{m_vertShaderText};
 	tcu::StringTemplate fragShaderTemplate{m_fragShaderText};
@@ -288,6 +307,7 @@
 
 	// Apply offset of almost half a texel to the texture coordinates.
 	DE_ASSERT(m_offsetSign == 1.0f || m_offsetSign == -1.0f);
+
 	const float offset			= 0.5f - pow(2.0f, -8.0f);
 	const float offsetWidth		= offset / static_cast<float>(m_width);
 	const float offsetHeight	= offset / static_cast<float>(m_height);
@@ -303,8 +323,7 @@
 
 	const std::vector<glu::VertexArrayBinding> vertexArrays =
 	{
-		glu::va::Float("position", 2, 4, 0, positions.data()),
-		glu::va::Float("inTexCoord", 2, 4, 0, texCoords.data())
+		glu::va::Float("position", 2, 4, 0, positions.data())
 	};
 
 	glu::ShaderProgram program(m_context.getRenderContext(), glu::makeVtxFragSources(m_vertShaderText, m_fragShaderText));
@@ -317,6 +336,12 @@
 	gl.uniform1i(gl.getUniformLocation(program.getProgram(), "texSampler"), 0);
 	GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i failed");
 
+	gl.uniform1f(gl.getUniformLocation(program.getProgram(), "texOffset"), m_offsetSign * offset);
+	gl.uniform1f(gl.getUniformLocation(program.getProgram(), "texWidth"), float(m_width));
+	gl.uniform1f(gl.getUniformLocation(program.getProgram(), "texHeight"), float(m_height));
+	GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i failed");
+
+	gl.disable(GL_DITHER);
 	gl.clear(GL_COLOR_BUFFER_BIT);
 
 	glu::draw(renderContext, program.getProgram(),
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/openglcts/modules/gl/gl3cCullDistanceTests.cpp b/external/openglcts/modules/gl/gl3cCullDistanceTests.cpp
index 2b6d863..48e8d4e 100644
--- a/external/openglcts/modules/gl/gl3cCullDistanceTests.cpp
+++ b/external/openglcts/modules/gl/gl3cCullDistanceTests.cpp
@@ -746,9 +746,10 @@
 			std::string gs_body = gs_body_template;
 
 			static const glw::GLchar* tc_body_template =
-				"#version 400\n"
+				"#version 150\n"
 				"\n"
 				"#extension GL_ARB_cull_distance : require\n"
+				"#extension GL_ARB_tessellation_shader : require\n"
 				"\n"
 				"layout(vertices = 1) out;\n"
 				"\n"
@@ -771,9 +772,10 @@
 			std::string tc_body = tc_body_template;
 
 			static const glw::GLchar* te_body_template =
-				"#version 400\n"
+				"#version 150\n"
 				"\n"
 				"#extension GL_ARB_cull_distance : require\n"
+				"#extension GL_ARB_tessellation_shader : require\n"
 				"\n"
 				"flat in  int INPUT_TE_NAME[];\n"
 				"flat out int out_te;\n"
diff --git a/external/openglcts/modules/gl/gl3cTestPackages.cpp b/external/openglcts/modules/gl/gl3cTestPackages.cpp
index 154d44a..576457c 100644
--- a/external/openglcts/modules/gl/gl3cTestPackages.cpp
+++ b/external/openglcts/modules/gl/gl3cTestPackages.cpp
@@ -48,6 +48,7 @@
 #include "glcTextureRepeatModeTests.hpp"
 #include "glcUniformBlockTests.hpp"
 #include "glcNearestEdgeTests.hpp"
+#include "glcGLSLVectorConstructorTests.hpp"
 #include "gluStateReset.hpp"
 #include "tcuTestLog.hpp"
 #include "tcuWaiverUtil.hpp"
@@ -144,6 +145,7 @@
 	void init(void)
 	{
 		addChild(new deqp::ShaderLibraryGroup(m_context, "declarations", "Declaration Tests", "gl30/declarations.test"));
+		addChild(new deqp::GLSLVectorConstructorTests(m_context, glu::GLSL_VERSION_330));
 	}
 };
 
diff --git a/external/openglcts/modules/gl/gl3cTransformFeedbackTests.cpp b/external/openglcts/modules/gl/gl3cTransformFeedbackTests.cpp
index a461ac4..fb3f596 100644
--- a/external/openglcts/modules/gl/gl3cTransformFeedbackTests.cpp
+++ b/external/openglcts/modules/gl/gl3cTransformFeedbackTests.cpp
@@ -135,6 +135,7 @@
 
 	/* Initializations. */
 	bool is_at_least_gl_30 = (glu::contextSupports(m_context.getRenderContext().getType(), glu::ApiType::core(3, 0)));
+	bool is_at_least_gl_33 = (glu::contextSupports(m_context.getRenderContext().getType(), glu::ApiType::core(3, 3)));
 	bool is_at_least_gl_40 = (glu::contextSupports(m_context.getRenderContext().getType(), glu::ApiType::core(4, 0)));
 	bool is_at_least_gl_42 = (glu::contextSupports(m_context.getRenderContext().getType(), glu::ApiType::core(4, 2)));
 
@@ -142,7 +143,6 @@
 	bool is_arb_tf_2		 = m_context.getContextInfo().isExtensionSupported("GL_ARB_transform_feedback2");
 	bool is_arb_tf_3		 = m_context.getContextInfo().isExtensionSupported("GL_ARB_transform_feedback3");
 	bool is_arb_tf_instanced = m_context.getContextInfo().isExtensionSupported("GL_ARB_transform_feedback_instanced");
-	bool is_tessellation = m_context.getContextInfo().isExtensionSupported("GL_ARB_tessellation_shader");
 
 	if (is_ext_tf_1)
 	{
@@ -226,14 +226,17 @@
 			gl, m_context.getTestContext().getLog(), NULL, NULL, NULL, s_vertex_shader_without_output,
 			s_fragment_shader, NULL, 0, GL_SEPARATE_ATTRIBS);
 
-		m_program_id_with_geometry_shader = gl3cts::TransformFeedback::Utilities::buildProgram(
-			gl, m_context.getTestContext().getLog(), m_geometry_shader, NULL, NULL, s_vertex_shader_without_output,
-			s_fragment_shader, &m_varying_name, 1, GL_INTERLEAVED_ATTRIBS);
+		is_ok = is_ok && m_program_id_with_input_output && m_program_id_with_output && m_program_id_without_output;
 
-		is_ok = is_ok && m_program_id_with_input_output && m_program_id_with_output && m_program_id_without_output &&
-				m_program_id_with_geometry_shader;
+		if (is_at_least_gl_33) {
+			m_program_id_with_geometry_shader = gl3cts::TransformFeedback::Utilities::buildProgram(
+				gl, m_context.getTestContext().getLog(), m_geometry_shader, NULL, NULL, s_vertex_shader_without_output,
+				s_fragment_shader, &m_varying_name, 1, GL_INTERLEAVED_ATTRIBS);
 
-                if (is_at_least_gl_40 || is_tessellation) {
+			is_ok = is_ok && m_program_id_with_geometry_shader;
+		}
+
+        if (is_at_least_gl_40) {
 			m_program_id_with_tessellation_shaders = gl3cts::TransformFeedback::Utilities::buildProgram(
 					gl, m_context.getTestContext().getLog(), NULL, m_tessellation_control_shader,
 					m_tessellation_evaluation_shader, s_vertex_shader_without_output, s_fragment_shader, &m_varying_name, 1,
@@ -1380,6 +1383,7 @@
 									  GL_TRIANGLES,
 									  GL_TRIANGLE_STRIP_ADJACENCY,
 									  GL_TRIANGLES_ADJACENCY,
+									  GL_QUADS,
 									  GL_PATCHES };
 
 	std::set<glw::GLenum> supported_mode(_supported_mode,
@@ -1414,63 +1418,65 @@
 		return false;
 	}
 
-	/*  INVALID_OPERATION is generated by DrawTransformFeedbackInstanced and
-	 DrawTransformFeedbackStreamInstanced if <mode> does not match geometry
-	 shader */
+	if (m_program_id_with_geometry_shader != 0) {
+		/*  INVALID_OPERATION is generated by DrawTransformFeedbackInstanced and
+		DrawTransformFeedbackStreamInstanced if <mode> does not match geometry
+		shader */
 
-	gl.bindTransformFeedback(GL_TRANSFORM_FEEDBACK, m_transform_feedback_object_0);
+		gl.bindTransformFeedback(GL_TRANSFORM_FEEDBACK, m_transform_feedback_object_0);
 
-	GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTransformFeedback call failed.");
+		GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTransformFeedback call failed.");
 
-	gl.useProgram(m_program_id_with_geometry_shader);
+		gl.useProgram(m_program_id_with_geometry_shader);
 
-	GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram call failed.");
+		GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram call failed.");
 
-	gl.bindVertexArray(m_vertex_array_object);
+		gl.bindVertexArray(m_vertex_array_object);
 
-	GLU_EXPECT_NO_ERROR(gl.getError(), "glBindVertexArray call failed.");
+		GLU_EXPECT_NO_ERROR(gl.getError(), "glBindVertexArray call failed.");
 
-	gl.bindBufferBase(GL_TRANSFORM_FEEDBACK_BUFFER, 0, m_buffer_0);
+		gl.bindBufferBase(GL_TRANSFORM_FEEDBACK_BUFFER, 0, m_buffer_0);
 
-	GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer call failed.");
+		GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer call failed.");
 
-	gl.beginTransformFeedback(GL_POINTS);
+		gl.beginTransformFeedback(GL_POINTS);
 
-	GLU_EXPECT_NO_ERROR(gl.getError(), "glBeginTransformFeedback call failed.");
+		GLU_EXPECT_NO_ERROR(gl.getError(), "glBeginTransformFeedback call failed.");
 
-	gl.drawArrays(GL_POINTS, 0, 1);
+		gl.drawArrays(GL_POINTS, 0, 1);
 
-	GLU_EXPECT_NO_ERROR(gl.getError(), "glDrawArrays call failed.");
+		GLU_EXPECT_NO_ERROR(gl.getError(), "glDrawArrays call failed.");
 
-	gl.endTransformFeedback();
+		gl.endTransformFeedback();
 
-	GLU_EXPECT_NO_ERROR(gl.getError(), "glEndTransformFeedback call failed.");
+		GLU_EXPECT_NO_ERROR(gl.getError(), "glEndTransformFeedback call failed.");
 
-	gl.drawTransformFeedbackInstanced(GL_LINES, m_transform_feedback_object_0, 1);
+		gl.drawTransformFeedbackInstanced(GL_LINES, m_transform_feedback_object_0, 1);
 
-	if (GL_INVALID_OPERATION != gl.getError())
-	{
-		m_context.getTestContext().getLog()
-			<< tcu::TestLog::Message << "INVALID_OPERATION was not generated by DrawTransformFeedbackInstanced and "
-										"DrawTransformFeedbackStreamInstanced if <mode> did not match geometry shader."
-			<< tcu::TestLog::EndMessage;
-		return false;
-	}
+		if (GL_INVALID_OPERATION != gl.getError())
+		{
+			m_context.getTestContext().getLog()
+				<< tcu::TestLog::Message << "INVALID_OPERATION was not generated by DrawTransformFeedbackInstanced and "
+											"DrawTransformFeedbackStreamInstanced if <mode> did not match geometry shader."
+				<< tcu::TestLog::EndMessage;
+			return false;
+		}
 
-	gl.drawTransformFeedbackStreamInstanced(GL_LINES, m_transform_feedback_object_0, 0, 1);
+		gl.drawTransformFeedbackStreamInstanced(GL_LINES, m_transform_feedback_object_0, 0, 1);
 
-	if (GL_INVALID_OPERATION != gl.getError())
-	{
-		m_context.getTestContext().getLog()
-			<< tcu::TestLog::Message << "INVALID_OPERATION was not generated by DrawTransformFeedbackInstanced and "
-										"DrawTransformFeedbackStreamInstanced if <mode> did not match geometry shader."
-			<< tcu::TestLog::EndMessage;
-		return false;
+		if (GL_INVALID_OPERATION != gl.getError())
+		{
+			m_context.getTestContext().getLog()
+				<< tcu::TestLog::Message << "INVALID_OPERATION was not generated by DrawTransformFeedbackInstanced and "
+											"DrawTransformFeedbackStreamInstanced if <mode> did not match geometry shader."
+				<< tcu::TestLog::EndMessage;
+			return false;
+		}
 	}
 
 	/* All of the below tests concern themselves with GL_PATCHES and
 	 * tessellation shaders */
-	if (!has_patches)
+	if (m_program_id_with_tessellation_shaders == 0)
 	{
 		return true;
 	}
diff --git a/external/openglcts/modules/gl/gl4cComputeShaderTests.cpp b/external/openglcts/modules/gl/gl4cComputeShaderTests.cpp
index dd77f27..6b53f18 100644
--- a/external/openglcts/modules/gl/gl4cComputeShaderTests.cpp
+++ b/external/openglcts/modules/gl/gl4cComputeShaderTests.cpp
@@ -4774,6 +4774,8 @@
 		glDrawArrays(GL_TRIANGLES, 0, 3);
 		glEndTransformFeedback();
 
+		glMemoryBarrier(GL_SHADER_STORAGE_BARRIER_BIT);
+
 		glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 3, m_xfb_buffer);
 		glUseProgram(m_program[1]);
 		glDispatchCompute(1, 1, 1);
diff --git a/external/openglcts/modules/gl/gl4cPipelineStatisticsQueryTests.cpp b/external/openglcts/modules/gl/gl4cPipelineStatisticsQueryTests.cpp
index e09f43c..67e9db5 100644
--- a/external/openglcts/modules/gl/gl4cPipelineStatisticsQueryTests.cpp
+++ b/external/openglcts/modules/gl/gl4cPipelineStatisticsQueryTests.cpp
@@ -4335,8 +4335,9 @@
 /** Initializes all GL objects used by the test */
 void PipelineStatisticsQueryTestFunctional8::initObjects()
 {
-	const glw::Functions& gl		= m_context.getRenderContext().getFunctions();
-	const char*			  cs_code	= 0;
+	const glw::Functions& gl = m_context.getRenderContext().getFunctions();
+	const char*			  cs_code = NULL;
+
 	/* This test should not execute if we don't have compute shaders */
 	if (glu::contextSupports(m_context.getRenderContext().getType(), glu::ApiType::core(4, 3)))
 	{
@@ -4349,10 +4350,11 @@
 	}
 	else
 	{
-		throw tcu::NotSupportedError("OpenGL 4.3+ / compute shaders required to run this test.");
+		throw tcu::NotSupportedError("OpenGL 4.3+ / compute shaders and atomic counters required to run this test.");
 	}
 
-	buildProgram(cs_code, DE_NULL,										   /* fs_body */
+	buildProgram(cs_code,
+				 DE_NULL,												   /* fs_body */
 				 DE_NULL,												   /* gs_body */
 				 DE_NULL,												   /* tc_body */
 				 DE_NULL,												   /* te_body */
diff --git a/external/openglcts/modules/glcTestPackageRegistry.cpp b/external/openglcts/modules/glcTestPackageRegistry.cpp
index 0162907..55d5126 100644
--- a/external/openglcts/modules/glcTestPackageRegistry.cpp
+++ b/external/openglcts/modules/glcTestPackageRegistry.cpp
@@ -44,6 +44,7 @@
 #include "es31cTestPackage.hpp"
 #include "esextcTestPackage.hpp"
 #include "tes31TestPackage.hpp"
+#include "tgl45TestPackage.hpp"
 
 #if defined(DEQP_GTF_AVAILABLE)
 #include "gtfES31TestPackage.hpp"
@@ -129,6 +130,10 @@
 {
 	return new deqp::gles31::TestPackage(testCtx);
 }
+static tcu::TestPackage* createdEQPGL45Package(tcu::TestContext& testCtx)
+{
+	return new deqp::gles31::TestPackageGL45(testCtx);
+}
 #endif
 static tcu::TestPackage* createES31Package(tcu::TestContext& testCtx)
 {
@@ -292,6 +297,7 @@
 
 #if DE_OS != DE_OS_ANDROID
 	registry->registerPackage("dEQP-GLES31", createdEQPES31Package);
+	registry->registerPackage("dEQP-GL45", createdEQPGL45Package);
 #endif
 	registry->registerPackage("KHR-GLES31", createES31Package);
 	registry->registerPackage("KHR-GLESEXT", createESEXTPackage);
diff --git a/external/openglcts/modules/gles3/CMakeLists.txt b/external/openglcts/modules/gles3/CMakeLists.txt
index 0887c5f..7da83b6 100644
--- a/external/openglcts/modules/gles3/CMakeLists.txt
+++ b/external/openglcts/modules/gles3/CMakeLists.txt
@@ -5,6 +5,8 @@
 	es3cTestPackage.hpp
 	es3cCopyTexImageConversionsTests.cpp
 	es3cCopyTexImageConversionsTests.hpp
+	es3cNumberParsingTests.cpp
+	es3cNumberParsingTests.hpp
 	)
 
 set(GLCTS_ES3_LIBS
diff --git a/external/openglcts/modules/gles3/es3cNumberParsingTests.cpp b/external/openglcts/modules/gles3/es3cNumberParsingTests.cpp
new file mode 100644
index 0000000..d0512fb
--- /dev/null
+++ b/external/openglcts/modules/gles3/es3cNumberParsingTests.cpp
@@ -0,0 +1,492 @@
+/*-------------------------------------------------------------------------
+ * OpenGL Conformance Test Suite
+ * -----------------------------
+ *
+ * Copyright (c) 2020 Google Inc.
+ * Copyright (c) 2020 The Khronos Group Inc.
+ *
+ * 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  es3cNumberParsingTests.cpp
+ * \brief Tests for numeric value parsing in GLSL ES 3.0
+ */ /*-------------------------------------------------------------------*/
+
+#include "es3cNumberParsingTests.hpp"
+
+#include "gluDefs.hpp"
+#include "gluTextureUtil.hpp"
+#include "gluDrawUtil.hpp"
+#include "gluShaderProgram.hpp"
+
+#include "glwDefs.hpp"
+#include "glwFunctions.hpp"
+#include "glwEnums.hpp"
+
+#include "tcuTestLog.hpp"
+#include "tcuRenderTarget.hpp"
+#include "tcuStringTemplate.hpp"
+
+#include <string>
+#include <vector>
+#include <map>
+
+#include <functional>
+
+namespace es3cts
+{
+
+namespace
+{
+using std::string;
+using std::vector;
+using std::map;
+
+using std::function;
+using std::bind;
+using namespace std::placeholders;
+
+static const string					defaultVertexShader					=
+	"#version 300 es\n"
+	"in vec4 vPosition;\n"
+	"void main()\n"
+	"{\n"
+	"    gl_Position = vPosition;\n"
+	"}\n";
+
+static const string					fragmentShaderTemplate				=
+	"#version 300 es\n"
+	"precision highp float;\n"
+	"out vec4 my_FragColor;\n"
+	"${TEST_GLOBALS}"
+	"void main()\n"
+	"{\n"
+    "${TEST_CODE}"
+    "    my_FragColor = vec4(0.0, correct, 0.0, 1.0);\n"
+	"}\n";
+
+typedef function<void (const glu::ShaderProgram&, const glw::Functions&)> SetupUniformsFn;
+
+enum struct TestType
+{
+	NORMAL				= 0,
+	EXPECT_SHADER_FAIL
+};
+
+struct TestParams
+{
+	TestType			testType;
+	string				name;
+	string				description;
+	string				testGlobals;
+	string				testCode;
+	SetupUniformsFn	setupUniformsFn;
+};
+
+static void initializeExpectedValue(const glu::ShaderProgram& program, const glw::Functions& gl, const deUint32 value);
+static void initializeZeroValue(const glu::ShaderProgram& program, const glw::Functions& gl);
+
+static const TestParams			tests[]									=
+{
+	{
+		TestType::NORMAL,																								// TestType			testType
+		"unsigned_integer_above_signed_range_decimal",																	// string			name
+		"Test that uint value higher than INT_MAX is parsed correctly",													// string			description
+		"uniform uint expected;\n",																						// string			testGlobals
+		"    uint i        = 3221225472u;\n"
+		"    float correct = (i == expected) ? 1.0 : 0.0;\n",
+		bind(initializeExpectedValue, _1, _2, 3221225472u)																// SetupUniformsFn	setupUniformsFn
+	},
+	{
+		TestType::NORMAL,																								// TestType			testType
+		"unsigned_integer_above_signed_range_base8",																	// string			name
+		"Test that uint value higher than INT_MAX is parsed correctly in base 8 (octal)",								// string			description
+		"uniform uint expected;\n",																						// string			testGlobals
+		"    uint i        = 030000000000u;\n"
+		"    float correct = (i == expected) ? 1.0 : 0.0;\n",
+		bind(initializeExpectedValue, _1, _2, 3221225472u)																// SetupUniformsFn	setupUniformsFn
+	},
+	{
+		TestType::NORMAL,																								// TestType			testType
+		"unsigned_integer_above_signed_range_base16",																	// string			name
+		"Test that uint value higher than INT_MAX is parsed correctly in base 16 (hex)",								// string			description
+		"uniform uint expected;\n",																						// string			testGlobals
+		"    uint i        = 0xc0000000u;\n"
+		"    float correct = (i == expected) ? 1.0 : 0.0;\n",
+		bind(initializeExpectedValue, _1, _2, 3221225472u)																// SetupUniformsFn	setupUniformsFn
+	},
+	{
+		TestType::NORMAL,																								// TestType			testType
+		"unsigned_integer_smallest_value_above_signed_range_decimal",													// string			name
+		"Test that uint value equal to INT_MAX+1 is parsed correctly",													// string			description
+		"uniform uint expected;\n",																						// string			testGlobals
+		"    uint i        = 2147483648u;\n"
+		"    float correct = (i == expected) ? 1.0 : 0.0;\n",
+		bind(initializeExpectedValue, _1, _2, 2147483648u)																// SetupUniformsFn	setupUniformsFn
+	},
+	{
+		TestType::NORMAL,																								// TestType			testType
+		"unsigned_integer_smallest_value_above_signed_range_base8",														// string			name
+		"Test that uint value equal to INT_MAX+1 is parsed correctly in base 8 (octal)",								// string			description
+		"uniform uint expected;\n",																						// string			testGlobals
+		"    uint i        = 020000000000u;\n"
+		"    float correct = (i == expected) ? 1.0 : 0.0;\n",
+		bind(initializeExpectedValue, _1, _2, 2147483648u)																// SetupUniformsFn	setupUniformsFn
+	},
+	{
+		TestType::NORMAL,																								// TestType			testType
+		"unsigned_integer_smallest_value_above_signed_range_base16",													// string			name
+		"Test that uint value equal to INT_MAX+1 is parsed correctly in base 16 (hex)",									// string			description
+		"uniform uint expected;\n",																						// string			testGlobals
+		"    uint i        = 0x80000000u;\n"
+		"    float correct = (i == expected) ? 1.0 : 0.0;\n",
+		bind(initializeExpectedValue, _1, _2, 2147483648u)																// SetupUniformsFn	setupUniformsFn
+	},
+	{
+		TestType::NORMAL,																								// TestType			testType
+		"unsigned_integer_max_value_decimal",																			// string			name
+		"Test that uint value equal to UINT_MAX is parsed correctly",													// string			description
+		"uniform uint expected;\n",																						// string			testGlobals
+		"    uint i        = 4294967295u;\n"
+		"    float correct = (i == expected) ? 1.0 : 0.0;\n",
+		bind(initializeExpectedValue, _1, _2, 4294967295u)																// SetupUniformsFn	setupUniformsFn
+	},
+	{
+		TestType::NORMAL,																								// TestType			testType
+		"unsigned_integer_max_value_base8",																				// string			name
+		"Test that uint value equal to UINT_MAX is parsed correctly in base 8 (octal)",									// string			description
+		"uniform uint expected;\n",																						// string			testGlobals
+		"    uint i        = 037777777777u;\n"
+		"    float correct = (i == expected) ? 1.0 : 0.0;\n",
+		bind(initializeExpectedValue, _1, _2, 4294967295u)																// SetupUniformsFn	setupUniformsFn
+	},
+	{
+		TestType::NORMAL,																								// TestType			testType
+		"unsigned_integer_max_value_base16",																			// string			name
+		"Test that uint value equal to UINT_MAX is parsed correctly in base 16 (hex)",									// string			description
+		"uniform uint expected;\n",																						// string			testGlobals
+		"    uint i        = 0xffffffffu;\n"
+		"    float correct = (i == expected) ? 1.0 : 0.0;\n",
+		bind(initializeExpectedValue, _1, _2, 4294967295u)																// SetupUniformsFn	setupUniformsFn
+	},
+	{
+		TestType::EXPECT_SHADER_FAIL,																					// TestType			testType
+		"unsigned_integer_too_large_value_invalid",																		// string			name
+		"Test that uint value outside uint range fails to compile",														// string			description
+		"",																												// string			testGlobals
+		"    uint i        = 0xfffffffffu;"
+		"    float correct = 0.0;",
+		nullptr																											// SetupUniformsFn	setupUniformsFn
+	},
+	{
+		TestType::NORMAL,																								// TestType			testType
+		"unsigned_integer_negative_value_as_uint",																		// string			name
+		"Test that -1u is parsed correctly",																			// string			description
+		"uniform uint expected;\n",																						// string			testGlobals
+		"    uint i        = -1u;"
+		"    float correct = (i == expected) ? 1.0 : 0.0;\n",
+		bind(initializeExpectedValue, _1, _2, 0xffffffffu)																// SetupUniformsFn	setupUniformsFn
+	},
+	/* The following floating point parsing tests are taken from the Khronos WebGL conformance tests at:
+	 *     https://www.khronos.org/registry/webgl/sdk/tests/conformance2/glsl3/float-parsing.html */
+	{
+		TestType::NORMAL,																								// TestType			testType
+		"float_out_of_range_as_infinity",																				// string			name
+		"Floats of too large magnitude should be converted infinity",													// string			description
+		"",																												// string			testGlobals
+		"    // Out-of-range floats should overflow to infinity\n"														// string			testCode
+		"    // GLSL ES 3.00.6 section 4.1.4 Floats:\n"
+		"    // \"If the value of the floating point number is too large (small) to be stored as a single precision value, it is converted to positive (negative) infinity\"\n"
+		"    float correct = isinf(1.0e40) ? 1.0 : 0.0;\n",
+		nullptr																											// SetupUniformsFn	setupUniformsFn
+	},
+	{
+		TestType::NORMAL,																								// TestType			testType
+		"float_out_of_range_as_zero",																					// string			name
+		"Floats of too small magnitude should be converted to zero",													// string			description
+		"",																												// string			testGlobals
+		"    // GLSL ES 3.00.6 section 4.1.4 Floats:\n"																	// string			testCode
+		"    // \"A value with a magnitude too small to be represented as a mantissa and exponent is converted to zero.\"\n"
+		"    // 1.0e-50 is small enough that it can't even be stored as subnormal.\n"
+		"    float correct = (1.0e-50 == 0.0) ? 1.0 : 0.0;\n",
+		nullptr																											// SetupUniformsFn	setupUniformsFn
+	},
+	{
+		TestType::NORMAL,																								// TestType			testType
+		"float_no_limit_on_number_of_digits_positive_exponent",															// string			name
+		"Number of digits in any digit-sequence is not limited - test with a small mantissa and large exponent",		// string			description
+		"",																												// string			testGlobals
+		"    // GLSL ES 3.00.6 section 4.1.4 Floats:\n"																	// string			testCode
+		"    // \"There is no limit on the number of digits in any digit-sequence.\"\n"
+		"    // The below float string has 100 zeros after the decimal point, but represents 1.0.\n"
+		"    float x = 0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e101;\n"
+		"    float correct = (x == 1.0) ? 1.0 : 0.0;\n",
+		nullptr																											// SetupUniformsFn	setupUniformsFn
+	},
+	{
+		TestType::NORMAL,																								// TestType			testType
+		"float_no_limit_on_number_of_digits_negative_exponent",															// string			name
+		"Number of digits in any digit-sequence is not limited - test with a large mantissa and negative exponent",		// string			description
+		"",																												// string			testGlobals
+		"    // GLSL ES 3.00.6 section 4.1.4 Floats:\n"																	// string			testCode
+		"    // \"There is no limit on the number of digits in any digit-sequence.\"\n"
+		"    // The below float string has 100 zeros, but represents 1.0.\n"
+		"    float x = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0e-100;\n"
+		"    float correct = (x == 1.0) ? 1.0 : 0.0;\n",
+		nullptr																											// SetupUniformsFn	setupUniformsFn
+	},
+	{
+		TestType::NORMAL,																								// TestType			testType
+		"float_slightly_out_of_range_exponent_as_positive_infinity",													// string			name
+		"Test that an exponent that slightly overflows signed 32-bit int range works",									// string			description
+		"",																												// string			testGlobals
+		"    // Out-of-range floats should overflow to infinity\n"														// string			testCode
+		"    // GLSL ES 3.00.6 section 4.1.4 Floats:\n"
+		"    // \"If the value of the floating point number is too large (small) to be stored as a single precision value, it is converted to positive (negative) infinity\"\n"
+		"    float correct = isinf(1.0e2147483649) ? 1.0 : 0.0;\n",
+		nullptr																											// SetupUniformsFn	setupUniformsFn
+	},
+	{
+		TestType::NORMAL,																								// TestType			testType
+		"float_overflow_to_positive_infinity",																			// string			name
+		"Out-of-range floats greater than zero should overflow to positive infinity",									// string			description
+		"uniform float zero;\n",																						// string			testGlobals
+		"    // Out-of-range floats should overflow to infinity\n"														// string			testCode
+		"    // GLSL ES 3.00.6 section 4.1.4 Floats:\n"
+		"    // \"If the value of the floating point number is too large (small) to be stored as a single precision value, it is converted to positive (negative) infinity\"\n"
+		"    float f = 1.0e2048 - zero;\n"
+		"    float correct = (isinf(f) && f > 0.0) ? 1.0 : 0.0;\n",
+		initializeZeroValue																								// SetupUniformsFn	setupUniformsFn
+	},
+	{
+		TestType::NORMAL,																								// TestType			testType
+		"float_overflow_to_negative_infinity",																			// string			name
+		"Out-of-range floats less than zero should overflow to negative infinity",										// string			description
+		"uniform float zero;\n",																						// string			testGlobals
+		"    // Out-of-range floats should overflow to infinity\n"														// string			testCode
+		"    // GLSL ES 3.00.6 section 4.1.4 Floats:\n"
+		"    // \"If the value of the floating point number is too large (small) to be stored as a single precision value, it is converted to positive (negative) infinity\"\n"
+		"    float f = -1.0e2048 + zero;\n"
+		"    float correct = (isinf(f) && f < 0.0) ? 1.0 : 0.0;\n",
+		initializeZeroValue																								// SetupUniformsFn	setupUniformsFn
+	}
+};
+
+static void initializeExpectedValue(const glu::ShaderProgram& program, const glw::Functions& gl, const deUint32 value)
+{
+	const auto location = gl.getUniformLocation(program.getProgram(), "expected");
+	GLU_EXPECT_NO_ERROR(gl.getError(), "GetAttribLocation call failed");
+
+	gl.uniform1ui(location, value);
+	GLU_EXPECT_NO_ERROR(gl.getError(), "Set uniform value failed");
+}
+
+static void initializeZeroValue(const glu::ShaderProgram& program, const glw::Functions& gl)
+{
+	const auto location = gl.getUniformLocation(program.getProgram(), "zero");
+	GLU_EXPECT_NO_ERROR(gl.getError(), "GetAttribLocation call failed");
+
+	gl.uniform1f(location, 0.0f);
+	GLU_EXPECT_NO_ERROR(gl.getError(), "Set uniform value failed");
+}
+
+static string replacePlaceholders(const string& shaderTemplate, const TestParams& params)
+{
+	map<string,string> fields;
+	fields["TEST_GLOBALS"]	= params.testGlobals;
+	fields["TEST_CODE"]		= params.testCode;
+
+	tcu::StringTemplate output(shaderTemplate);
+	return output.specialize(fields);
+}
+
+static const std::vector<float>		positions				=
+{
+	-1.0f, -1.0f,
+	 1.0f, -1.0f,
+	-1.0f,  1.0f,
+	 1.0f,  1.0f
+};
+
+static const std::vector<deUint32>	indices					= { 0, 1, 2, 3 };
+
+const deInt32						RENDERTARGET_WIDTH		= 16;
+const deInt32						RENDERTARGET_HEIGHT		= 16;
+
+class NumberParsingCase : public deqp::TestCase
+{
+public:
+	NumberParsingCase(deqp::Context& context, const string& name, const TestParams& params, const string& vertexShader, const string& fragmentShader);
+
+	IterateResult iterate();
+
+private:
+	void setupRenderTarget();
+	void releaseRenderTarget();
+
+	glw::GLuint			m_fboId;
+	glw::GLuint			m_rboId;
+
+	const TestParams&	m_params;
+	string				m_vertexShader;
+	string				m_fragmentShader;
+};
+
+NumberParsingCase::NumberParsingCase(deqp::Context& context, const string& name, const TestParams& params, const string& vertexShader, const string& fragmentShader)
+	: TestCase(context, name.c_str(), params.description.c_str())
+	, m_params(params)
+	, m_vertexShader(vertexShader)
+	, m_fragmentShader(fragmentShader)
+{
+}
+
+NumberParsingCase::IterateResult NumberParsingCase::iterate(void)
+{
+	const auto&	renderContext	= m_context.getRenderContext();
+	const auto&	gl				= renderContext.getFunctions();
+	const auto	textureFormat	= tcu::TextureFormat(tcu::TextureFormat::RGBA,	tcu::TextureFormat::UNORM_INT8);
+	const auto	transferFormat	= glu::getTransferFormat(textureFormat);
+
+	setupRenderTarget();
+
+	glu::ShaderProgram program(renderContext, glu::makeVtxFragSources(m_vertexShader, m_fragmentShader));
+	if (!program.isOk())
+		switch(m_params.testType)
+		{
+		case TestType::EXPECT_SHADER_FAIL:
+			m_testCtx.setTestResult(QP_TEST_RESULT_PASS, "Pass");
+			return STOP;
+		default:
+			TCU_FAIL("Shader compilation failed:\nVertex shader:\n" + m_vertexShader + "\nFragment shader:\n" + m_fragmentShader);
+			break;
+		}
+
+	const std::vector<glu::VertexArrayBinding> vertexArrays =
+	{
+		glu::va::Float("vPosition", 2, positions.size(), 0, positions.data()),
+	};
+
+	gl.useProgram(program.getProgram());
+	GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram failed");
+
+	if (m_params.setupUniformsFn != DE_NULL)
+		m_params.setupUniformsFn(program, gl);
+
+	gl.clear(GL_COLOR_BUFFER_BIT);
+
+
+	glu::draw(renderContext, program.getProgram(),
+			  static_cast<int>(vertexArrays.size()), vertexArrays.data(),
+			  glu::pr::TriangleStrip(static_cast<int>(indices.size()), indices.data()));
+
+	const auto						pixelSize				= tcu::getPixelSize(textureFormat);
+	std::vector<deUint8>			fbData					(RENDERTARGET_WIDTH * RENDERTARGET_HEIGHT * pixelSize);
+
+	if (pixelSize < 4)
+		gl.pixelStorei(GL_PACK_ALIGNMENT, 1);
+
+	gl.readPixels(0, 0, RENDERTARGET_WIDTH, RENDERTARGET_HEIGHT, transferFormat.format, transferFormat.dataType, fbData.data());
+	GLU_EXPECT_NO_ERROR(gl.getError(), "glReadPixels");
+
+	tcu::ConstPixelBufferAccess		fbAccess				{ textureFormat, RENDERTARGET_WIDTH, RENDERTARGET_HEIGHT, 1, fbData.data() };
+	const auto						expectedColor			= tcu::RGBA::green().toVec();
+	bool pass = true;
+	for(int y = 0; pass && y < RENDERTARGET_HEIGHT; ++y)
+		for(int x = 0; x < RENDERTARGET_WIDTH; ++x)
+			if (fbAccess.getPixel(x,y) != expectedColor)
+			{
+				pass = false;
+				break;
+			}
+
+	releaseRenderTarget();
+
+	const qpTestResult				result					= (pass ? QP_TEST_RESULT_PASS : QP_TEST_RESULT_FAIL);
+	const char*						desc					= (pass ? "Pass" : "Pixel mismatch; numeric value parsed incorrectly");
+
+	m_testCtx.setTestResult(result, desc);
+
+	return STOP;
+}
+
+void NumberParsingCase::setupRenderTarget()
+{
+	const auto&	renderContext	= m_context.getRenderContext();
+	const auto&	gl				= renderContext.getFunctions();
+
+	gl.genFramebuffers(1, &m_fboId);
+	GLU_EXPECT_NO_ERROR(gl.getError(), "GenFramebuffers");
+
+	gl.genRenderbuffers(1, &m_rboId);
+	GLU_EXPECT_NO_ERROR(gl.getError(), "GenRenderBuffers");
+
+	gl.bindRenderbuffer(GL_RENDERBUFFER, m_rboId);
+	GLU_EXPECT_NO_ERROR(gl.getError(), "BindRenderBuffer");
+
+	gl.renderbufferStorage(GL_RENDERBUFFER, GL_RGBA8, RENDERTARGET_WIDTH, RENDERTARGET_HEIGHT);
+	GLU_EXPECT_NO_ERROR(gl.getError(), "RenderBufferStorage");
+
+	gl.bindFramebuffer(GL_FRAMEBUFFER, m_fboId);
+	GLU_EXPECT_NO_ERROR(gl.getError(), "BindFrameBuffer");
+
+	gl.framebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, m_rboId);
+	GLU_EXPECT_NO_ERROR(gl.getError(), "FrameBufferRenderBuffer");
+
+	glw::GLenum drawBuffer = GL_COLOR_ATTACHMENT0;
+	gl.drawBuffers(1, &drawBuffer);
+	GLU_EXPECT_NO_ERROR(gl.getError(), "DrawBuffers");
+
+	glw::GLfloat clearColor[4] = { 0, 0, 0, 0 };
+	gl.clearBufferfv(GL_COLOR, 0, clearColor);
+	GLU_EXPECT_NO_ERROR(gl.getError(), "ClearBuffers");
+
+	gl.viewport(0, 0, RENDERTARGET_WIDTH, RENDERTARGET_HEIGHT);
+	GLU_EXPECT_NO_ERROR(gl.getError(), "Viewport");
+}
+
+void NumberParsingCase::releaseRenderTarget()
+{
+	const auto&	renderContext	= m_context.getRenderContext();
+	const auto&	gl				= renderContext.getFunctions();
+	if (m_fboId != 0)
+	{
+		gl.deleteFramebuffers(1, &m_fboId);
+		m_fboId = 0;
+	}
+	if (m_rboId != 0)
+	{
+		gl.deleteRenderbuffers(1, &m_rboId);
+		m_rboId = 0;
+	}
+}
+
+}
+
+NumberParsingTests::NumberParsingTests(deqp::Context& context)
+	: deqp::TestCaseGroup(context, "number_parsing", "GLSL number parsing tests")
+{
+}
+
+NumberParsingTests::~NumberParsingTests(void)
+{
+}
+
+void NumberParsingTests::init(void)
+{
+	for(const auto& params : tests)
+	{
+		addChild(new NumberParsingCase(m_context, params.name, params, defaultVertexShader, replacePlaceholders(fragmentShaderTemplate, params)));
+	}
+}
+
+}
diff --git a/external/openglcts/modules/gles3/es3cNumberParsingTests.hpp b/external/openglcts/modules/gles3/es3cNumberParsingTests.hpp
new file mode 100644
index 0000000..d9b9e24
--- /dev/null
+++ b/external/openglcts/modules/gles3/es3cNumberParsingTests.hpp
@@ -0,0 +1,47 @@
+#ifndef _ES3CNUMBERPARSINGTESTS_HPP
+#define _ES3CNUMBERPARSINGTESTS_HPP
+
+/*-------------------------------------------------------------------------
+ * OpenGL Conformance Test Suite
+ * -----------------------------
+ *
+ * Copyright (c) 2020 Google Inc.
+ * Copyright (c) 2020 The Khronos Group Inc.
+ *
+ * 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  es3cNumberParsingTests.hpp
+ * \brief Tests for numeric value parsing in GLSL ES 3.0
+ */ /*-------------------------------------------------------------------*/
+
+#include "glcTestCase.hpp"
+
+namespace es3cts
+{
+
+class NumberParsingTests : public deqp::TestCaseGroup
+{
+public:
+	NumberParsingTests(deqp::Context& context);
+	virtual ~NumberParsingTests(void);
+
+	void init(void);
+
+private:
+	NumberParsingTests(const NumberParsingTests& other) = delete;
+	NumberParsingTests& operator=(const NumberParsingTests& other) = delete;
+};
+
+}
+#endif // _ES3CNUMBERPARSINGTESTS_HPP
diff --git a/external/openglcts/modules/gles3/es3cTestPackage.cpp b/external/openglcts/modules/gles3/es3cTestPackage.cpp
index 1971b09..77bc353 100644
--- a/external/openglcts/modules/gles3/es3cTestPackage.cpp
+++ b/external/openglcts/modules/gles3/es3cTestPackage.cpp
@@ -24,9 +24,11 @@
 
 #include "es3cTestPackage.hpp"
 #include "es3cCopyTexImageConversionsTests.hpp"
+#include "es3cNumberParsingTests.hpp"
 #include "glcAggressiveShaderOptimizationsTests.hpp"
 #include "glcExposedExtensionsTests.hpp"
 #include "glcFragDepthTests.hpp"
+#include "glcGLSLVectorConstructorTests.hpp"
 #include "glcInfoTests.hpp"
 #include "glcInternalformatTests.hpp"
 #include "glcPackedDepthStencilTests.hpp"
@@ -45,6 +47,7 @@
 #include "glcTextureRepeatModeTests.hpp"
 #include "glcUniformBlockTests.hpp"
 #include "glcNearestEdgeTests.hpp"
+#include "glcFramebufferCompleteness.hpp"
 #include "gluStateReset.hpp"
 #include "glwEnums.hpp"
 #include "glwFunctions.hpp"
@@ -150,6 +153,7 @@
 		addChild(new deqp::ShaderStructTests(m_context, glu::GLSL_VERSION_300_ES));
 		addChild(new deqp::ShaderSwitchTests(m_context, glu::GLSL_VERSION_300_ES));
 		addChild(new deqp::UniformBlockTests(m_context, glu::GLSL_VERSION_300_ES));
+		addChild(new deqp::GLSLVectorConstructorTests(m_context, glu::GLSL_VERSION_300_ES));
 		addChild(new deqp::ShaderIntegerMixTests(m_context, glu::GLSL_VERSION_300_ES));
 		addChild(new deqp::ShaderNegativeTests(m_context, glu::GLSL_VERSION_300_ES));
 		addChild(new glcts::AggressiveShaderOptimizationsTests(m_context));
@@ -186,7 +190,9 @@
 		addChild(new glcts::ParallelShaderCompileTests(getContext()));
 		addChild(new glcts::PackedPixelsTests(getContext()));
 		addChild(new glcts::PackedDepthStencilTests(getContext()));
+		addChild(new glcts::FramebufferCompletenessTests(getContext()));
 		addChild(new es3cts::CopyTexImageConversionsTests(getContext()));
+		addChild(new es3cts::NumberParsingTests(getContext()));
 	}
 	catch (...)
 	{
diff --git a/external/openglcts/modules/gles31/es31cComputeShaderTests.cpp b/external/openglcts/modules/gles31/es31cComputeShaderTests.cpp
index 651b4a8..24821ad 100644
--- a/external/openglcts/modules/gles31/es31cComputeShaderTests.cpp
+++ b/external/openglcts/modules/gles31/es31cComputeShaderTests.cpp
@@ -4486,6 +4486,8 @@
 		glDrawArrays(GL_TRIANGLES, 0, 3);
 		glEndTransformFeedback();
 
+		glMemoryBarrier(GL_SHADER_STORAGE_BARRIER_BIT);
+
 		glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 3, m_xfb_buffer);
 		glUseProgram(m_program[1]);
 		glDispatchCompute(1, 1, 1);
diff --git a/external/openglcts/modules/gles31/es31cTestPackage.cpp b/external/openglcts/modules/gles31/es31cTestPackage.cpp
index 4d3c0a4..2f93abe 100644
--- a/external/openglcts/modules/gles31/es31cTestPackage.cpp
+++ b/external/openglcts/modules/gles31/es31cTestPackage.cpp
@@ -56,6 +56,7 @@
 #include "glcShaderMultisampleInterpolationTests.hpp"
 #include "glcShaderNegativeTests.hpp"
 #include "glcNearestEdgeTests.hpp"
+#include "glcFramebufferCompleteness.hpp"
 
 #include "gluStateReset.hpp"
 #include "gluContextInfo.hpp"
@@ -213,6 +214,7 @@
 		coreGroup->addChild(new glcts::ShaderGroupVote(getContext()));
 		coreGroup->addChild(new glcts::InternalformatTests(getContext()));
 		coreGroup->addChild(new glcts::NearestEdgeCases(getContext()));
+		coreGroup->addChild(new glcts::FramebufferCompletenessTests(getContext()));
 
 		glcts::ExtParameters extParams(glu::GLSL_VERSION_310_ES, glcts::EXTENSIONTYPE_OES);
 		coreGroup->addChild(new glcts::GeometryShaderTests(getContext(), extParams));
diff --git a/external/openglcts/modules/gles31/es31cVertexAttribBindingTests.cpp b/external/openglcts/modules/gles31/es31cVertexAttribBindingTests.cpp
index ab5515a..dfadb62 100644
--- a/external/openglcts/modules/gles31/es31cVertexAttribBindingTests.cpp
+++ b/external/openglcts/modules/gles31/es31cVertexAttribBindingTests.cpp
@@ -272,9 +272,14 @@
 		else if (exp <= HALF_FLOAT_MIN_BIASED_EXP_AS_SINGLE_FP_EXP)
 		{
 			/* store a denorm half-float value or zero */
-			exp = (HALF_FLOAT_MIN_BIASED_EXP_AS_SINGLE_FP_EXP - exp) >> 23;
+			exp = ((HALF_FLOAT_MIN_BIASED_EXP_AS_SINGLE_FP_EXP - exp) >> 23) + 14;
+			// handle 0.0 specially to avoid a right-shift by too many bits
+			if (exp >= 32)
+			{
+				return 0;
+			}
 			mantissa |= (1 << 23);
-			mantissa >>= (14 + exp);
+			mantissa >>= exp;
 			hf = (GLhalf)((((GLhalf)sign) << 15) | (GLhalf)(mantissa));
 		}
 		else
diff --git a/external/openglcts/modules/gles32/es32cTestPackage.cpp b/external/openglcts/modules/gles32/es32cTestPackage.cpp
index ab4fd0e..a89d4ee 100644
--- a/external/openglcts/modules/gles32/es32cTestPackage.cpp
+++ b/external/openglcts/modules/gles32/es32cTestPackage.cpp
@@ -41,6 +41,7 @@
 #include "glcShaderSwitchTests.hpp"
 #include "glcUniformBlockTests.hpp"
 #include "glcNearestEdgeTests.hpp"
+#include "glcFramebufferCompleteness.hpp"
 #include "gluStateReset.hpp"
 #include "glwEnums.hpp"
 #include "glwFunctions.hpp"
@@ -176,6 +177,7 @@
 		coreGroup->addChild(new glcts::InternalformatTests(getContext()));
 		coreGroup->addChild(new deqp::Functional::TextureShadowLodTest(getContext()));
 		coreGroup->addChild(new glcts::NearestEdgeCases(getContext()));
+		coreGroup->addChild(new glcts::FramebufferCompletenessTests(getContext()));
 		addChild(coreGroup);
 	}
 	catch (...)
diff --git a/external/openglcts/modules/glesext/geometry_shader/esextcGeometryShaderLayeredFramebuffer.cpp b/external/openglcts/modules/glesext/geometry_shader/esextcGeometryShaderLayeredFramebuffer.cpp
index 5bfe440..40e14b1 100644
--- a/external/openglcts/modules/glesext/geometry_shader/esextcGeometryShaderLayeredFramebuffer.cpp
+++ b/external/openglcts/modules/glesext/geometry_shader/esextcGeometryShaderLayeredFramebuffer.cpp
@@ -574,7 +574,6 @@
 	for (int current_test = static_cast<int>(CLEAR_FIRST); current_test < static_cast<int>(CLEAR_COUNT); current_test++)
 	{
 		void*				buffer				= NULL;
-		const unsigned char clear_color_byte[]  = { 64, 128, 255, 32 };
 		const float			clear_color_float[] = { 0.25f, 0.5f, 1.0f, 32.0f / 255.0f };
 		const int			clear_color_int[]   = { 64, 128, 255, 32 };
 		glw::GLuint			fbo_id				= 0;
@@ -725,19 +724,18 @@
 					if (current_test == CLEAR_BUFFERIV || current_test == CLEAR_BUFFERUIV)
 					{
 						unsigned int* pixel = (unsigned int*)(row + x * pixel_size);
-
 						if (memcmp(pixel, clear_color_int, sizeof(clear_color_int)) != 0)
 						{
 							/* Test fails at this point */
 							m_testCtx.getLog()
 								<< tcu::TestLog::Message << "(x=" << x << " y=" << y << ") Reference pixel ["
-								<< clear_color_byte[0] << ", " << clear_color_byte[1] << ", " << clear_color_byte[2]
-								<< ", " << clear_color_byte[3] << "] is different from the one retrieved ["
+								<< clear_color_int[0] << ", " << clear_color_int[1] << ", " << clear_color_int[2]
+								<< ", " << clear_color_int[3] << "] is different from the one retrieved ["
 								<< (int)pixel[0] << ", " << (int)pixel[1] << ", " << (int)pixel[2] << ", "
 								<< (int)pixel[3] << "]" << tcu::TestLog::EndMessage;
 
 							TCU_FAIL("Data comparison failure");
-						} /* if (memcmp(pixel, clear_color_byte, sizeof(clear_color_byte) ) != 0) */
+						} /* if (memcmp(pixel, clear_color_int, sizeof(clear_color_int) ) != 0) */
 					}	 /* if (current_test == CLEAR_BUFFERIV || current_test == CLEAR_BUFFERUIV) */
 					else
 					{
@@ -753,8 +751,8 @@
 							/* Test fails at this point */
 							m_testCtx.getLog()
 								<< tcu::TestLog::Message << "(x=" << x << " y=" << y << ") Reference pixel ["
-								<< clear_color_byte[0] << ", " << clear_color_byte[1] << ", " << clear_color_byte[2]
-								<< ", " << clear_color_byte[3] << "] is different from the one retrieved ["
+								<< clear_color_int[0] << ", " << clear_color_int[1] << ", " << clear_color_int[2]
+								<< ", " << clear_color_int[3] << "] is different from the one retrieved ["
 								<< (int)pixel[0] << ", " << (int)pixel[1] << ", " << (int)pixel[2] << ", "
 								<< (int)pixel[3] << "]" << tcu::TestLog::EndMessage;
 
diff --git a/external/openglcts/modules/glesext/texture_buffer/esextcTextureBufferOperations.cpp b/external/openglcts/modules/glesext/texture_buffer/esextcTextureBufferOperations.cpp
index 850ee45..6688b91 100644
--- a/external/openglcts/modules/glesext/texture_buffer/esextcTextureBufferOperations.cpp
+++ b/external/openglcts/modules/glesext/texture_buffer/esextcTextureBufferOperations.cpp
@@ -1230,6 +1230,8 @@
 
 	gl.useProgram(0);
 
+	gl.memoryBarrier(GL_SHADER_IMAGE_ACCESS_BARRIER_BIT);
+
 	m_position_location = -1;
 }
 
diff --git a/external/openglcts/modules/glesext/texture_cube_map_array/esextcTextureCubeMapArrayImageOperations.cpp b/external/openglcts/modules/glesext/texture_cube_map_array/esextcTextureCubeMapArrayImageOperations.cpp
index f989d17..3079e4f 100644
--- a/external/openglcts/modules/glesext/texture_cube_map_array/esextcTextureCubeMapArrayImageOperations.cpp
+++ b/external/openglcts/modules/glesext/texture_cube_map_array/esextcTextureCubeMapArrayImageOperations.cpp
@@ -181,6 +181,14 @@
 		GLU_EXPECT_NO_ERROR(gl.getError(), "Error querying old program!");
 		gl.useProgram(copy_po_id);
 		GLU_EXPECT_NO_ERROR(gl.getError(), "Error setting active program object!");
+
+		gl.memoryBarrier(GL_SHADER_IMAGE_ACCESS_BARRIER_BIT);
+		GLU_EXPECT_NO_ERROR(gl.getError(), "Error setting memory barrier!");
+	}
+	else
+	{
+		gl.memoryBarrier(GL_FRAMEBUFFER_BARRIER_BIT);
+		GLU_EXPECT_NO_ERROR(gl.getError(), "Error setting memory barrier!");
 	}
 
 	bool result = true;
@@ -196,6 +204,9 @@
 			gl.dispatchCompute(width, height, 1);
 			GLU_EXPECT_NO_ERROR(gl.getError(), "Error dispatching float-to-integer compute shader");
 
+			gl.memoryBarrier(GL_FRAMEBUFFER_BARRIER_BIT);
+			GLU_EXPECT_NO_ERROR(gl.getError(), "Error setting memory barrier!");
+
 			/* Read data as unsigned ints */
 			gl.readPixels(0, 0, width, height, GL_RGBA_INTEGER, GL_UNSIGNED_INT, &resultData[0]);
 			GLU_EXPECT_NO_ERROR(gl.getError(), "Error reading pixels from frame buffer!");
@@ -333,6 +344,19 @@
 	/* Nothing to be done here */
 }
 
+glw::GLenum getQueryPname(SHADER_TO_CHECK stage) {
+	switch (stage) {
+		case STC_COMPUTE_SHADER:					return GL_MAX_COMPUTE_IMAGE_UNIFORMS;
+		case STC_VERTEX_SHADER:						return GL_MAX_VERTEX_IMAGE_UNIFORMS;
+		case STC_FRAGMENT_SHADER:					return GL_MAX_FRAGMENT_IMAGE_UNIFORMS;
+		case STC_GEOMETRY_SHADER:					return GL_MAX_GEOMETRY_IMAGE_UNIFORMS;
+		case STC_TESSELLATION_CONTROL_SHADER:		return GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS;
+		case STC_TESSELLATION_EVALUATION_SHADER:	return GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS;
+	}
+	DE_ASSERT(0);
+	return GL_NONE;
+}
+
 /** Initialize test case */
 void TextureCubeMapArrayImageOpCompute::initTest(void)
 {
@@ -354,6 +378,12 @@
 		throw tcu::NotSupportedError(TESSELLATION_SHADER_EXTENSION_NOT_SUPPORTED, "", __FILE__, __LINE__);
 	}
 
+	int maxImages;
+	glw::GLenum pname = getQueryPname(m_shader_to_check);
+	gl.getIntegerv(pname, &maxImages);
+	if (maxImages < 6)
+		throw tcu::NotSupportedError( "Shader stage does not support at least 6 image uniforms", "", __FILE__, __LINE__);
+
 	/* Generate and bind VAO */
 	gl.genVertexArrays(1, &m_vao_id);
 	GLU_EXPECT_NO_ERROR(gl.getError(), "Could not generate vertex array object");
@@ -704,8 +734,6 @@
 	{
 		gl.dispatchCompute(width, height, depth);
 		GLU_EXPECT_NO_ERROR(gl.getError(), "Error running compute shader!");
-		gl.memoryBarrier(GL_FRAMEBUFFER_BARRIER_BIT);
-		GLU_EXPECT_NO_ERROR(gl.getError(), "Error setting memory barrier!");
 
 		break;
 	}
@@ -727,8 +755,6 @@
 
 		gl.drawArrays(GL_POINTS, 0, 1);
 		GLU_EXPECT_NO_ERROR(gl.getError(), "Rendering failed!");
-		gl.memoryBarrier(GL_FRAMEBUFFER_BARRIER_BIT);
-		GLU_EXPECT_NO_ERROR(gl.getError(), "Error setting memory barrier!");
 
 		break;
 	}
@@ -751,8 +777,6 @@
 
 		gl.drawArrays(m_glExtTokens.PATCHES, 0, 1);
 		GLU_EXPECT_NO_ERROR(gl.getError(), "Rendering failed!");
-		gl.memoryBarrier(GL_FRAMEBUFFER_BARRIER_BIT);
-		GLU_EXPECT_NO_ERROR(gl.getError(), "Error setting memory barrier!");
 
 		gl.patchParameteri(m_glExtTokens.PATCH_VERTICES, 3);
 		GLU_EXPECT_NO_ERROR(gl.getError(), "Error setting patch parameter!");
@@ -777,7 +801,6 @@
 
 		const char* csCode = getComputeShaderCode();
 
-		/* Images are required for compute shader */
 		if (!buildProgram(m_po_id, m_cs_id, 1 /* part */, &csCode))
 		{
 			TCU_FAIL("Could not create a program from valid compute shader code!");
@@ -785,24 +808,6 @@
 		break;
 	}
 	case STC_VERTEX_SHADER:
-	{
-		m_vs_id = gl.createShader(GL_VERTEX_SHADER);
-		GLU_EXPECT_NO_ERROR(gl.getError(), "Could not create shader object!");
-		m_fs_id = gl.createShader(GL_FRAGMENT_SHADER);
-		GLU_EXPECT_NO_ERROR(gl.getError(), "Could not create shader object!");
-
-		const char* vsCode = getVertexShaderCode();
-		const char* fsCode = getFragmentShaderCodeBoilerPlate();
-
-		/* Execute test only if images are supported by vertex shader */
-		if (!buildProgram(m_po_id, m_fs_id, 1 /* part */, &fsCode, m_vs_id, 1 /* part */, &vsCode))
-		{
-			throw tcu::NotSupportedError(
-				"imageCubeArray/iimageCubeArray/uimageCubeArray are not supported by Vertex Shader", "", __FILE__,
-				__LINE__);
-		}
-		break;
-	}
 	case STC_FRAGMENT_SHADER:
 	{
 		m_vs_id = gl.createShader(GL_VERTEX_SHADER);
@@ -810,15 +815,15 @@
 		m_fs_id = gl.createShader(GL_FRAGMENT_SHADER);
 		GLU_EXPECT_NO_ERROR(gl.getError(), "Could not create shader object!");
 
-		const char* vsCode = getVertexShaderCodeBoilerPlate();
-		const char* fsCode = getFragmentShaderCode();
+		bool vs = (m_shader_to_check == STC_VERTEX_SHADER);
+		const char* vsCode = vs	? getVertexShaderCode()
+								: getVertexShaderCodeBoilerPlate();
+		const char* fsCode = vs	? getFragmentShaderCodeBoilerPlate()
+								: getFragmentShaderCode();
 
-		/* Execute test only if images are supported by fragment shader */
 		if (!buildProgram(m_po_id, m_fs_id, 1 /* part */, &fsCode, m_vs_id, 1 /* part */, &vsCode))
 		{
-			throw tcu::NotSupportedError(
-				"imageCubeArray/iimageCubeArray/uimageCubeArray are not supported by Fragment Shader", "", __FILE__,
-				__LINE__);
+			TCU_FAIL("Could not create shader program.");
 		}
 		break;
 	}
@@ -835,42 +840,14 @@
 		const char* gsCode = getGeometryShaderCode();
 		const char* fsCode = getFragmentShaderCodeBoilerPlate();
 
-		/* Execute test only if images are supported by geometry shader */
 		if (!buildProgram(m_po_id, m_fs_id, 1 /* part */, &fsCode, m_gs_id, 1 /* part */, &gsCode, m_vs_id,
 						  1 /* part */, &vsCode))
 		{
-			throw tcu::NotSupportedError(
-				"imageCubeArray/iimageCubeArray/uimageCubeArray are not supported by Geometry Shader", "", __FILE__,
-				__LINE__);
+			TCU_FAIL("Could not create shader program.");
 		}
 		break;
 	}
 	case STC_TESSELLATION_CONTROL_SHADER:
-	{
-		m_vs_id = gl.createShader(GL_VERTEX_SHADER);
-		GLU_EXPECT_NO_ERROR(gl.getError(), "Could not create shader object!");
-		m_tc_id = gl.createShader(m_glExtTokens.TESS_CONTROL_SHADER);
-		GLU_EXPECT_NO_ERROR(gl.getError(), "Could not create shader object!");
-		m_te_id = gl.createShader(m_glExtTokens.TESS_EVALUATION_SHADER);
-		GLU_EXPECT_NO_ERROR(gl.getError(), "Could not create shader object!");
-		m_fs_id = gl.createShader(GL_FRAGMENT_SHADER);
-		GLU_EXPECT_NO_ERROR(gl.getError(), "Could not create shader object!");
-
-		const char* vsCode  = getVertexShaderCodeBoilerPlate();
-		const char* tcsCode = getTessControlShaderCode();
-		const char* tesCode = getTessEvaluationShaderCodeBoilerPlate();
-		const char* fsCode  = getFragmentShaderCodeBoilerPlate();
-
-		/* Execute test only if images are supported by tessellation control shader */
-		if (!buildProgram(m_po_id, m_fs_id, 1 /* part */, &fsCode, m_tc_id, 1 /* part */, &tcsCode, m_te_id,
-						  1 /* part */, &tesCode, m_vs_id, 1 /* part */, &vsCode))
-		{
-			throw tcu::NotSupportedError(
-				"imageCubeArray/iimageCubeArray/uimageCubeArray are not supported by Tessellation Control Shader", "",
-				__FILE__, __LINE__);
-		}
-		break;
-	}
 	case STC_TESSELLATION_EVALUATION_SHADER:
 	{
 		m_vs_id = gl.createShader(GL_VERTEX_SHADER);
@@ -882,18 +859,18 @@
 		m_fs_id = gl.createShader(GL_FRAGMENT_SHADER);
 		GLU_EXPECT_NO_ERROR(gl.getError(), "Could not create shader object!");
 
+		bool tcs = (m_shader_to_check == STC_TESSELLATION_CONTROL_SHADER);
 		const char* vsCode  = getVertexShaderCodeBoilerPlate();
-		const char* tcsCode = getTessControlShaderCodeBoilerPlate();
-		const char* tesCode = getTessEvaluationShaderCode();
+		const char* tcsCode = tcs	? getTessControlShaderCode()
+									: getTessControlShaderCodeBoilerPlate();
+		const char* tesCode = tcs	? getTessEvaluationShaderCodeBoilerPlate()
+									: getTessEvaluationShaderCode();
 		const char* fsCode  = getFragmentShaderCodeBoilerPlate();
 
-		/* Execute test only if images are supported by tessellation evaluation shader */
 		if (!buildProgram(m_po_id, m_fs_id, 1 /* part */, &fsCode, m_tc_id, 1 /* part */, &tcsCode, m_te_id,
 						  1 /* part */, &tesCode, m_vs_id, 1 /* part */, &vsCode))
 		{
-			throw tcu::NotSupportedError(
-				"imageCubeArray/iimageCubeArray/uimageCubeArray are not supported by Tessellation Evaluation Shader",
-				"", __FILE__, __LINE__);
+			TCU_FAIL("Could not create shader program.");
 		}
 		break;
 	}
diff --git a/external/openglcts/modules/runner/glcAospMustpassEgl.hpp b/external/openglcts/modules/runner/glcAospMustpassEgl.hpp
index 4183438..c1c9844 100644
--- a/external/openglcts/modules/runner/glcAospMustpassEgl.hpp
+++ b/external/openglcts/modules/runner/glcAospMustpassEgl.hpp
@@ -19,7 +19,7 @@
  * be lost! Modify the generating script instead.
  */
 
-const char* mustpassDir = "gl_cts/data/mustpass/egl/aosp_mustpass/3.2.6.x/";
+const char* mustpassDir = "gl_cts/data/mustpass/egl/aosp_mustpass/master/";
 
 static const RunParams aosp_mustpass_egl_first_cfg[] = {
 	{ glu::ApiType(), "master", "rgba8888d24s8ms0", "unspecified", -1, DE_NULL, 256, 256 },
diff --git a/external/openglcts/modules/runner/glcAospMustpassEs.hpp b/external/openglcts/modules/runner/glcAospMustpassEs.hpp
index 8ff4fef..f094bf5 100644
--- a/external/openglcts/modules/runner/glcAospMustpassEs.hpp
+++ b/external/openglcts/modules/runner/glcAospMustpassEs.hpp
@@ -19,7 +19,7 @@
  * be lost! Modify the generating script instead.
  */
 
-const char* mustpassDir = "gl_cts/data/mustpass/gles/aosp_mustpass/3.2.6.x/";
+const char* mustpassDir = "gl_cts/data/mustpass/gles/aosp_mustpass/master/";
 
 static const RunParams aosp_mustpass_es_first_cfg[] = {
 	{ glu::ApiType::es(2, 0), "master", "rgba8888d24s8ms0", "unspecified", -1, DE_NULL, 256, 256 },
diff --git a/external/openglcts/modules/runner/glcKhronosMustpassEs.hpp b/external/openglcts/modules/runner/glcKhronosMustpassEs.hpp
index cceb791..ff0ffdb 100644
--- a/external/openglcts/modules/runner/glcKhronosMustpassEs.hpp
+++ b/external/openglcts/modules/runner/glcKhronosMustpassEs.hpp
@@ -19,7 +19,7 @@
  * be lost! Modify the generating script instead.
  */
 
-const char* mustpassDir = "gl_cts/data/mustpass/gles/khronos_mustpass/3.2.6.x/";
+const char* mustpassDir = "gl_cts/data/mustpass/gles/khronos_mustpass/master/";
 
 static const RunParams khronos_mustpass_es_first_cfg[] = {
 	{ glu::ApiType::es(2, 0), "khr-master", DE_NULL, "unspecified", 1, DE_NULL, 64, 64 },
diff --git a/external/openglcts/modules/runner/glcKhronosMustpassEsNocontext.hpp b/external/openglcts/modules/runner/glcKhronosMustpassEsNocontext.hpp
index a072eb0..803355c 100644
--- a/external/openglcts/modules/runner/glcKhronosMustpassEsNocontext.hpp
+++ b/external/openglcts/modules/runner/glcKhronosMustpassEsNocontext.hpp
@@ -19,7 +19,7 @@
  * be lost! Modify the generating script instead.
  */
 
-const char* mustpassDir = "gl_cts/data/mustpass/gles/khronos_mustpass_noctx/3.2.6.x/";
+const char* mustpassDir = "gl_cts/data/mustpass/gles/khronos_mustpass_noctx/master/";
 
 static const RunParams khronos_mustpass_es_nocontext_first_cfg[] = {
 	{ glu::ApiType::es(2, 0), "khr-noctx-master", DE_NULL, "unspecified", 1, DE_NULL, 64, 64 },
diff --git a/external/openglcts/modules/runner/glcKhronosMustpassEsSingleConfig.hpp b/external/openglcts/modules/runner/glcKhronosMustpassEsSingleConfig.hpp
index 0b869f7..85e48dc 100644
--- a/external/openglcts/modules/runner/glcKhronosMustpassEsSingleConfig.hpp
+++ b/external/openglcts/modules/runner/glcKhronosMustpassEsSingleConfig.hpp
@@ -19,7 +19,7 @@
  * be lost! Modify the generating script instead.
  */
 
-const char* mustpassDir = "gl_cts/data/mustpass/gles/khronos_mustpass_single/3.2.6.x/";
+const char* mustpassDir = "gl_cts/data/mustpass/gles/khronos_mustpass_single/master/";
 
 static const RunParams khronos_mustpass_es_single_config_first_cfg[] = {
 	{ glu::ApiType::es(3, 2), "khr-single", DE_NULL, "unspecified", 1, DE_NULL, 64, 64 },
diff --git a/external/openglcts/modules/runner/glcTestRunner.cpp b/external/openglcts/modules/runner/glcTestRunner.cpp
index ff9d99d..12775f3 100644
--- a/external/openglcts/modules/runner/glcTestRunner.cpp
+++ b/external/openglcts/modules/runner/glcTestRunner.cpp
@@ -779,7 +779,6 @@
 	writeRunSummary(m_summary, de::FilePath::join(m_logDirPath, "cts-run-summary.xml").getPath());
 
 	m_runSessions.clear();
-	m_summary.clear();
 }
 
 void TestRunner::initSession(const TestRunParams& runParams)
diff --git a/external/openglcts/scripts/build_mustpass.py b/external/openglcts/scripts/build_mustpass.py
index 217a735..5420b8f 100644
--- a/external/openglcts/scripts/build_mustpass.py
+++ b/external/openglcts/scripts/build_mustpass.py
@@ -999,7 +999,7 @@
 
 	# 3.2.6.x
 
-	Mustpass(project = CTS_KHR_MP_ES_PROJECT,   version = "3.2.6.x", isCurrent=True,
+	Mustpass(project = CTS_KHR_MP_ES_PROJECT,   version = "3.2.6.x", isCurrent=False,
 			packages = [GLCTS_GLES2_KHR_PKG_1CFG,
 						GLCTS_GLES2_KHR_PKG_N1CFG,
 						GLCTS_GLES3_KHR_PKG_1CFG,
@@ -1010,21 +1010,21 @@
 						GLCTS_GLES32_KHR_PKG_N1CFG,
 						]),
 
-	Mustpass(project = CTS_KHR_MP_NOCTX_ES_PROJECT, version = "3.2.6.x", isCurrent=True,
+	Mustpass(project = CTS_KHR_MP_NOCTX_ES_PROJECT, version = "3.2.6.x", isCurrent=False,
 			packages = [GLCTS_NOCTX_ES2_KHR_PKG, GLCTS_NOCTX_ES32_KHR_PKG]),
 
-	Mustpass(project = CTS_KHR_MP_SINGLE_ES_PROJECT, version = "3.2.6.x", isCurrent=True,
+	Mustpass(project = CTS_KHR_MP_SINGLE_ES_PROJECT, version = "3.2.6.x", isCurrent=False,
 			packages = [GLCTS_SINGLE_ES32_KHR_PKG]),
 
-	Mustpass(project = CTS_AOSP_MP_ES_PROJECT, version = "3.2.6.x", isCurrent=True,
+	Mustpass(project = CTS_AOSP_MP_ES_PROJECT, version = "3.2.6.x", isCurrent=False,
 			packages = [GLCTS_3_2_3_GLES2_PKG, GLCTS_3_2_3_GLES3_PKG, GLCTS_3_2_3_GLES31_PKG]),
 
-	Mustpass(project = CTS_AOSP_MP_EGL_PROJECT, version = "3.2.6.x", isCurrent=True,
+	Mustpass(project = CTS_AOSP_MP_EGL_PROJECT, version = "3.2.6.x", isCurrent=False,
 			packages = [GLCTS_3_2_3_EGL_PKG]),
 
 	# master
 
-	Mustpass(project = CTS_KHR_MP_ES_PROJECT,	version = "master", isCurrent=False,
+	Mustpass(project = CTS_KHR_MP_ES_PROJECT,	version = "master", isCurrent=True,
 			packages = [GLCTS_GLES2_KHR_PKG_1CFG,
 						GLCTS_GLES2_KHR_PKG_N1CFG,
 						GLCTS_GLES3_KHR_PKG_1CFG,
@@ -1035,17 +1035,17 @@
 						GLCTS_GLES32_KHR_PKG_N1CFG,
 						]),
 
-	Mustpass(project = CTS_KHR_MP_NOCTX_ES_PROJECT, version = "master", isCurrent=False,
+	Mustpass(project = CTS_KHR_MP_NOCTX_ES_PROJECT, version = "master", isCurrent=True,
 			packages = [GLCTS_NOCTX_ES2_KHR_PKG, GLCTS_NOCTX_ES32_KHR_PKG]),
 
-	Mustpass(project = CTS_KHR_MP_SINGLE_ES_PROJECT, version = "master", isCurrent=False,
+	Mustpass(project = CTS_KHR_MP_SINGLE_ES_PROJECT, version = "master", isCurrent=True,
 			packages = [GLCTS_SINGLE_ES32_KHR_PKG]),
 
-	Mustpass(project = CTS_AOSP_MP_ES_PROJECT, version = "master", isCurrent=False,
-			packages = [MASTER_GLES2_PKG, MASTER_GLES3_PKG, MASTER_GLES31_PKG]),
+	Mustpass(project = CTS_AOSP_MP_ES_PROJECT, version = "master", isCurrent=True,
+			packages = [GLCTS_3_2_3_GLES2_PKG, GLCTS_3_2_3_GLES3_PKG, GLCTS_3_2_3_GLES31_PKG]),
 
-	Mustpass(project = CTS_AOSP_MP_EGL_PROJECT, version = "master", isCurrent=False,
-			packages = [MASTER_EGL_PKG])
+	Mustpass(project = CTS_AOSP_MP_EGL_PROJECT, version = "master", isCurrent=True,
+			packages = [GLCTS_3_2_3_EGL_PKG])
 
 	]
 
diff --git a/external/vulkancts/README.md b/external/vulkancts/README.md
index 21514c7..055a8f6 100644
--- a/external/vulkancts/README.md
+++ b/external/vulkancts/README.md
@@ -16,7 +16,7 @@
 
  * Git (for checking out sources)
  * Python 3.x (for the build related scripts, some other scripts still use Python 2.7.x)
- * CMake 3.0 (3.6 for Android NDK r17+ builds) or newer
+ * CMake 3.10.2 or newer
 
 ### Win32
 
@@ -25,6 +25,9 @@
 ### Linux
 
  * Standard toolchain (make, gcc/clang)
+ * If you have X11 installed, then the build assumes you also have the `GL/glx.h` header
+   file.
+    * You can get this from the `mesa-common-dev` Ubuntu package.
 
 ### Android
 
@@ -170,6 +173,12 @@
 
 	--deqp-waiver-file=<path>
 
+Some CTS tests use third-party runners. By default all tests are executed
+regardless of runner type (`any`). To exclude all tests using any of the
+external runners (`none`) or to only include tests using a certain runner:
+
+	--deqp-runner-type=(any|none|amber)
+
 No other command line options are allowed.
 
 ### Win32
@@ -263,7 +272,7 @@
 If the submission package covers multiple products, you can list them by appending
 additional `PRODUCT:` lines to the conformance statement. For example:
 
-	CONFORM_VERSION:         vulkan-cts-1.2.5.0
+	CONFORM_VERSION:         vulkan-cts-1.2.6.0
 	PRODUCT:                 Product A
 	PRODUCT:                 Product B
 	...
diff --git a/external/vulkancts/data/vulkan/amber/api/descriptor_set/descriptor_set_layout_binding/layout_binding_order.amber b/external/vulkancts/data/vulkan/amber/api/descriptor_set/descriptor_set_layout_binding/layout_binding_order.amber
new file mode 100644
index 0000000..8f3ea8b
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/api/descriptor_set/descriptor_set_layout_binding/layout_binding_order.amber
@@ -0,0 +1,73 @@
+#!amber
+# Copyright 2020 The Amber Authors.
+#
+# 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
+#
+#     https://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.
+
+SHADER compute compute_shader GLSL
+#version 430
+
+layout(set = 0, binding = 0) readonly uniform block0
+{
+    int data0;
+};
+
+layout(set = 0, binding = 1) readonly uniform block1
+{
+    int data1;
+};
+
+layout(set = 0, binding = 2) readonly uniform block2
+{
+    int data2;
+};
+
+layout(set = 0, binding = 3) buffer result
+{
+    int res0;
+    int res1;
+    int res2;
+};
+
+void main()
+{
+    res0 = data0;
+    res1 = data1;
+    res2 = data2;
+}
+END
+
+# Here the size is in terms of items.
+BUFFER buf0 DATA_TYPE int32 SIZE 1024 SERIES_FROM 0 INC_BY 1
+BUFFER buf1 DATA_TYPE int32 SIZE 1024 SERIES_FROM 1 INC_BY 1
+BUFFER buf2 DATA_TYPE int32 SIZE 1024 SERIES_FROM 2 INC_BY 1
+BUFFER result DATA_TYPE int32 DATA
+0 0 0
+END
+
+PIPELINE compute pipeline
+  ATTACH compute_shader
+
+  # Note the binding order. The offsets below are in byte offsets.
+  BIND BUFFER buf0 AS uniform_dynamic DESCRIPTOR_SET 0 BINDING 2 OFFSET 0
+  BIND BUFFER buf1 AS uniform_dynamic DESCRIPTOR_SET 0 BINDING 0 OFFSET 1024
+  BIND BUFFER buf2 AS uniform_dynamic DESCRIPTOR_SET 0 BINDING 1 OFFSET 2048
+  BIND BUFFER result AS storage DESCRIPTOR_SET 0 BINDING 3
+END
+
+RUN pipeline 1 1 1
+
+# Offset of 1024/4 = 256 items plus one since the series started from one.
+EXPECT result IDX 0 EQ 257
+# Offset of 2048/4 = 512 items plus two since the series started from two.
+EXPECT result IDX 4 EQ 514
+EXPECT result IDX 8 EQ 0
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-access-array-dot.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-access-array-dot.amber
new file mode 100644
index 0000000..769350b
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-access-array-dot.amber
@@ -0,0 +1,239 @@
+#!amber
+
+# Copyright 2020 Google LLC
+#
+# 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.
+
+
+# A test for a coverage-gap found by the GraphicsFuzz project.
+
+# Short description: Covers instruction combine casting, combine shifting and DAG code paths
+
+# The test passes because the shader always writes red.
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+# variant_fragment_shader is derived from the following GLSL:
+# #version 310 es
+# #define _int_0 _GLF_uniform_int_values[0]
+# #define _int_1 _GLF_uniform_int_values[1]
+# #define _int_2 _GLF_uniform_int_values[2]
+# #define _float_2_0 _GLF_uniform_float_values[0]
+# #define _float_1_0 _GLF_uniform_float_values[1]
+# #define _float_0_0 _GLF_uniform_float_values[2]
+#
+# precision highp float;
+#
+# precision highp int;
+#
+# // Contents of _GLF_uniform_float_values: [2.0, 1.0, 0.0]
+# layout(set = 0, binding = 0) uniform buf0
+# {
+#     float _GLF_uniform_float_values[3];
+# };
+#
+# // Contents of _GLF_uniform_int_values: [0, 1, 2]
+# layout(set = 0, binding = 1) uniform buf1
+# {
+#     int _GLF_uniform_int_values[3];
+# };
+#
+# layout(location = 0) out vec4 _GLF_color;
+#
+# void main()
+# {
+#     int numbers[3];
+#     numbers[_int_0] = _int_0;
+#     numbers[_int_1] = _int_1;
+#     numbers[_int_2] = _int_2;
+#
+#     vec2 a = vec2(_int_0, numbers[((0.0 < _float_0_0) ? 1 : 2)]);
+#     float b = dot(a, vec2(_float_1_0, _float_1_0));
+#
+#     if (b == _float_2_0)
+#     {
+#         _GLF_color = vec4(_int_1, _int_0, _int_0, _int_1);
+#     }
+#     else
+#     {
+#         _GLF_color = vec4(_int_0);
+#     }
+# }
+SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 8
+; Bound: 94
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %75
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 310
+               OpName %4 "main"
+               OpName %11 "numbers"
+               OpName %13 "buf1"
+               OpMemberName %13 0 "_GLF_uniform_int_values"
+               OpName %15 ""
+               OpName %39 "a"
+               OpName %45 "buf0"
+               OpMemberName %45 0 "_GLF_uniform_float_values"
+               OpName %47 ""
+               OpName %59 "b"
+               OpName %75 "_GLF_color"
+               OpDecorate %12 ArrayStride 16
+               OpMemberDecorate %13 0 Offset 0
+               OpDecorate %13 Block
+               OpDecorate %15 DescriptorSet 0
+               OpDecorate %15 Binding 1
+               OpDecorate %44 ArrayStride 16
+               OpMemberDecorate %45 0 Offset 0
+               OpDecorate %45 Block
+               OpDecorate %47 DescriptorSet 0
+               OpDecorate %47 Binding 0
+               OpDecorate %75 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeInt 32 1
+          %7 = OpTypeInt 32 0
+          %8 = OpConstant %7 3
+          %9 = OpTypeArray %6 %8
+         %10 = OpTypePointer Function %9
+         %12 = OpTypeArray %6 %8
+         %13 = OpTypeStruct %12
+         %14 = OpTypePointer Uniform %13
+         %15 = OpVariable %14 Uniform
+         %16 = OpConstant %6 0
+         %17 = OpTypePointer Uniform %6
+         %22 = OpTypePointer Function %6
+         %24 = OpConstant %6 1
+         %30 = OpConstant %6 2
+         %36 = OpTypeFloat 32
+         %37 = OpTypeVector %36 2
+         %38 = OpTypePointer Function %37
+         %43 = OpConstant %36 0
+         %44 = OpTypeArray %36 %8
+         %45 = OpTypeStruct %44
+         %46 = OpTypePointer Uniform %45
+         %47 = OpVariable %46 Uniform
+         %48 = OpTypePointer Uniform %36
+         %51 = OpTypeBool
+         %58 = OpTypePointer Function %36
+         %73 = OpTypeVector %36 4
+         %74 = OpTypePointer Output %73
+         %75 = OpVariable %74 Output
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+         %11 = OpVariable %10 Function
+         %39 = OpVariable %38 Function
+         %59 = OpVariable %58 Function
+         %18 = OpAccessChain %17 %15 %16 %16
+         %19 = OpLoad %6 %18
+         %20 = OpAccessChain %17 %15 %16 %16
+         %21 = OpLoad %6 %20
+         %23 = OpAccessChain %22 %11 %19
+               OpStore %23 %21
+         %25 = OpAccessChain %17 %15 %16 %24
+         %26 = OpLoad %6 %25
+         %27 = OpAccessChain %17 %15 %16 %24
+         %28 = OpLoad %6 %27
+         %29 = OpAccessChain %22 %11 %26
+               OpStore %29 %28
+         %31 = OpAccessChain %17 %15 %16 %30
+         %32 = OpLoad %6 %31
+         %33 = OpAccessChain %17 %15 %16 %30
+         %34 = OpLoad %6 %33
+         %35 = OpAccessChain %22 %11 %32
+               OpStore %35 %34
+         %40 = OpAccessChain %17 %15 %16 %16
+         %41 = OpLoad %6 %40
+         %42 = OpConvertSToF %36 %41
+         %49 = OpAccessChain %48 %47 %16 %30
+         %50 = OpLoad %36 %49
+         %52 = OpFOrdLessThan %51 %43 %50
+         %53 = OpSelect %6 %52 %24 %30
+         %54 = OpAccessChain %22 %11 %53
+         %55 = OpLoad %6 %54
+         %56 = OpConvertSToF %36 %55
+         %57 = OpCompositeConstruct %37 %42 %56
+               OpStore %39 %57
+         %60 = OpLoad %37 %39
+         %61 = OpAccessChain %48 %47 %16 %24
+         %62 = OpLoad %36 %61
+         %63 = OpAccessChain %48 %47 %16 %24
+         %64 = OpLoad %36 %63
+         %65 = OpCompositeConstruct %37 %62 %64
+         %66 = OpDot %36 %60 %65
+               OpStore %59 %66
+         %67 = OpLoad %36 %59
+         %68 = OpAccessChain %48 %47 %16 %16
+         %69 = OpLoad %36 %68
+         %70 = OpFOrdEqual %51 %67 %69
+               OpSelectionMerge %72 None
+               OpBranchConditional %70 %71 %89
+         %71 = OpLabel
+         %76 = OpAccessChain %17 %15 %16 %24
+         %77 = OpLoad %6 %76
+         %78 = OpConvertSToF %36 %77
+         %79 = OpAccessChain %17 %15 %16 %16
+         %80 = OpLoad %6 %79
+         %81 = OpConvertSToF %36 %80
+         %82 = OpAccessChain %17 %15 %16 %16
+         %83 = OpLoad %6 %82
+         %84 = OpConvertSToF %36 %83
+         %85 = OpAccessChain %17 %15 %16 %24
+         %86 = OpLoad %6 %85
+         %87 = OpConvertSToF %36 %86
+         %88 = OpCompositeConstruct %73 %78 %81 %84 %87
+               OpStore %75 %88
+               OpBranch %72
+         %89 = OpLabel
+         %90 = OpAccessChain %17 %15 %16 %16
+         %91 = OpLoad %6 %90
+         %92 = OpConvertSToF %36 %91
+         %93 = OpCompositeConstruct %73 %92 %92 %92 %92
+               OpStore %75 %93
+               OpBranch %72
+         %72 = OpLabel
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# _GLF_uniform_int_values
+BUFFER variant__GLF_uniform_int_values DATA_TYPE int32[] STD140 DATA
+ 0 1 2
+END
+# _GLF_uniform_float_values
+BUFFER variant__GLF_uniform_float_values DATA_TYPE float[] STD140 DATA
+ 2.0 1.0 0.0
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 256 256
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant__GLF_uniform_int_values AS uniform DESCRIPTOR_SET 0 BINDING 1
+  BIND BUFFER variant__GLF_uniform_float_values AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256
+
+EXPECT variant_framebuffer IDX 0 0 SIZE 256 256 EQ_RGBA 255 0 0 255
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-apfloat-determinant-for-if.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-apfloat-determinant-for-if.amber
new file mode 100644
index 0000000..2fc9678
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-apfloat-determinant-for-if.amber
@@ -0,0 +1,225 @@
+#!amber
+
+# Copyright 2020 Google LLC
+#
+# 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.
+
+
+# A test for a coverage-gap found by the GraphicsFuzz project.
+
+# Short description: A fragment shader that covers a specific APFloat code path
+
+# The test passes because the shader always writes red.
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+# variant_fragment_shader is derived from the following GLSL:
+# #version 310 es
+# #define _int_0 _GLF_uniform_int_values[0]
+# #define _int_100 _GLF_uniform_int_values[1]
+# #define _int_1 _GLF_uniform_int_values[2]
+# #define _int_9993001 _GLF_uniform_int_values[3]
+#
+# precision highp float;
+#
+# precision highp int;
+#
+# // Contents of _GLF_uniform_int_values: [0, 100, 1, 9993001]
+# layout(set = 0, binding = 0) uniform buf0
+# {
+#     int _GLF_uniform_int_values[4];
+# };
+#
+# layout(location = 0) out vec4 _GLF_color;
+#
+# void main()
+# {
+#     // Becomes -9993001.
+#     float a = determinant(mat3(1.0, 5000.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 2000.0));
+#
+#     int b = _int_1;
+#
+#     for (int i = _int_1; i < _int_100; i++)
+#     {
+#         if (b > _int_1)
+#         {
+#             break;
+#         }
+#         b = int(a);
+#     }
+#
+#     if (b == -_int_9993001)
+#     {
+#         _GLF_color = vec4(_int_1, _int_0, _int_0, _int_1);
+#     }
+#     else
+#     {
+#         _GLF_color = vec4(_int_0);
+#     }
+# }
+SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 10
+; Bound: 87
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %68
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 310
+               OpName %4 "main"
+               OpName %8 "a"
+               OpName %21 "b"
+               OpName %25 "buf0"
+               OpMemberName %25 0 "_GLF_uniform_int_values"
+               OpName %27 ""
+               OpName %33 "i"
+               OpName %68 "_GLF_color"
+               OpDecorate %24 ArrayStride 16
+               OpMemberDecorate %25 0 Offset 0
+               OpDecorate %25 Block
+               OpDecorate %27 DescriptorSet 0
+               OpDecorate %27 Binding 0
+               OpDecorate %68 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeFloat 32
+          %7 = OpTypePointer Function %6
+          %9 = OpTypeVector %6 3
+         %10 = OpTypeMatrix %9 3
+         %11 = OpConstant %6 1
+         %12 = OpConstant %6 5000
+         %13 = OpConstantComposite %9 %11 %12 %11
+         %14 = OpConstantComposite %9 %11 %11 %11
+         %15 = OpConstant %6 2000
+         %16 = OpConstantComposite %9 %11 %11 %15
+         %17 = OpConstantComposite %10 %13 %14 %16
+         %19 = OpTypeInt 32 1
+         %20 = OpTypePointer Function %19
+         %22 = OpTypeInt 32 0
+         %23 = OpConstant %22 4
+         %24 = OpTypeArray %19 %23
+         %25 = OpTypeStruct %24
+         %26 = OpTypePointer Uniform %25
+         %27 = OpVariable %26 Uniform
+         %28 = OpConstant %19 0
+         %29 = OpConstant %19 2
+         %30 = OpTypePointer Uniform %19
+         %42 = OpConstant %19 1
+         %45 = OpTypeBool
+         %59 = OpConstant %19 3
+         %66 = OpTypeVector %6 4
+         %67 = OpTypePointer Output %66
+         %68 = OpVariable %67 Output
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+          %8 = OpVariable %7 Function
+         %21 = OpVariable %20 Function
+         %33 = OpVariable %20 Function
+         %18 = OpExtInst %6 %1 Determinant %17
+               OpStore %8 %18
+         %31 = OpAccessChain %30 %27 %28 %29
+         %32 = OpLoad %19 %31
+               OpStore %21 %32
+         %34 = OpAccessChain %30 %27 %28 %29
+         %35 = OpLoad %19 %34
+               OpStore %33 %35
+               OpBranch %36
+         %36 = OpLabel
+               OpLoopMerge %38 %39 None
+               OpBranch %40
+         %40 = OpLabel
+         %41 = OpLoad %19 %33
+         %43 = OpAccessChain %30 %27 %28 %42
+         %44 = OpLoad %19 %43
+         %46 = OpSLessThan %45 %41 %44
+               OpBranchConditional %46 %37 %38
+         %37 = OpLabel
+         %47 = OpLoad %19 %21
+         %48 = OpAccessChain %30 %27 %28 %29
+         %49 = OpLoad %19 %48
+         %50 = OpSGreaterThan %45 %47 %49
+               OpSelectionMerge %52 None
+               OpBranchConditional %50 %51 %52
+         %51 = OpLabel
+               OpBranch %38
+         %52 = OpLabel
+         %54 = OpLoad %6 %8
+         %55 = OpConvertFToS %19 %54
+               OpStore %21 %55
+               OpBranch %39
+         %39 = OpLabel
+         %56 = OpLoad %19 %33
+         %57 = OpIAdd %19 %56 %42
+               OpStore %33 %57
+               OpBranch %36
+         %38 = OpLabel
+         %58 = OpLoad %19 %21
+         %60 = OpAccessChain %30 %27 %28 %59
+         %61 = OpLoad %19 %60
+         %62 = OpSNegate %19 %61
+         %63 = OpIEqual %45 %58 %62
+               OpSelectionMerge %65 None
+               OpBranchConditional %63 %64 %82
+         %64 = OpLabel
+         %69 = OpAccessChain %30 %27 %28 %29
+         %70 = OpLoad %19 %69
+         %71 = OpConvertSToF %6 %70
+         %72 = OpAccessChain %30 %27 %28 %28
+         %73 = OpLoad %19 %72
+         %74 = OpConvertSToF %6 %73
+         %75 = OpAccessChain %30 %27 %28 %28
+         %76 = OpLoad %19 %75
+         %77 = OpConvertSToF %6 %76
+         %78 = OpAccessChain %30 %27 %28 %29
+         %79 = OpLoad %19 %78
+         %80 = OpConvertSToF %6 %79
+         %81 = OpCompositeConstruct %66 %71 %74 %77 %80
+               OpStore %68 %81
+               OpBranch %65
+         %82 = OpLabel
+         %83 = OpAccessChain %30 %27 %28 %28
+         %84 = OpLoad %19 %83
+         %85 = OpConvertSToF %6 %84
+         %86 = OpCompositeConstruct %66 %85 %85 %85 %85
+               OpStore %68 %86
+               OpBranch %65
+         %65 = OpLabel
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# _GLF_uniform_int_values
+BUFFER variant__GLF_uniform_int_values DATA_TYPE int32[] STD140 DATA
+ 0 100 1 9993001
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 16 16
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant__GLF_uniform_int_values AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 16 16
+
+EXPECT variant_framebuffer IDX 0 0 SIZE 16 16 EQ_RGBA 255 0 0 255
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-apfloat-mix-nan.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-apfloat-mix-nan.amber
new file mode 100644
index 0000000..e73f48d
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-apfloat-mix-nan.amber
@@ -0,0 +1,251 @@
+#!amber
+
+# Copyright 2020 Google LLC
+#
+# 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.
+
+
+# A test for a coverage-gap found by the GraphicsFuzz project.
+
+# Short description: A fragment shader that covers a specific floating point code path
+
+# The test passes because the shader always writes red.
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+# variant_fragment_shader is derived from the following GLSL:
+# #version 310 es
+# #define _int_1 _GLF_uniform_int_values[0]
+# #define _int_2 _GLF_uniform_int_values[1]
+# #define _int_3 _GLF_uniform_int_values[2]
+# #define _int_4 _GLF_uniform_int_values[3]
+# #define _int_5 _GLF_uniform_int_values[4]
+# #define _int_6 _GLF_uniform_int_values[5]
+# #define _int_7 _GLF_uniform_int_values[6]
+# #define _int_8 _GLF_uniform_int_values[7]
+# #define _int_0 _GLF_uniform_int_values[8]
+# #define _also_1 _GLF_uniform_int_values[9]
+# #define _float_0_0 _GLF_uniform_float_values[0]
+#
+# precision highp float;
+# precision highp int;
+#
+# // Contents of _GLF_uniform_float_values: 0.0
+# layout(set = 0, binding = 0) uniform buf0
+# {
+#     float _GLF_uniform_float_values[1];
+# };
+#
+# // Contents of _GLF_uniform_int_values: [1, 2, 3, 4, 5, 6, 7, 8, 0]
+# layout(set = 0, binding = 1) uniform buf1
+# {
+#     int _GLF_uniform_int_values[10];
+# };
+#
+# layout(location = 0) out vec4 _GLF_color;
+#
+# void main()
+# {
+#     float nan = intBitsToFloat(-1);
+#
+#     // This results in an undefined value, but not in undefined behavior.
+#     vec4 undefined = mix(vec4(_int_1, _int_2, _int_3, _int_4),
+#                          vec4(_int_5, _int_6, _int_7, _int_8), nan);
+#
+#     if (_int_1 == _also_1 || undefined.x > _float_0_0)
+#     {
+#         _GLF_color = vec4(_int_1, _int_0, _int_0, _int_1);
+#     }
+#     else
+#     {
+#         _GLF_color = vec4(_int_0);
+#     }
+# }
+SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 8
+; Bound: 105
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %85
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 310
+               OpName %4 "main"
+               OpName %8 "nan"
+               OpName %14 "undefined"
+               OpName %18 "buf1"
+               OpMemberName %18 0 "_GLF_uniform_int_values"
+               OpName %20 ""
+               OpName %74 "buf0"
+               OpMemberName %74 0 "_GLF_uniform_float_values"
+               OpName %76 ""
+               OpName %85 "_GLF_color"
+               OpDecorate %17 ArrayStride 16
+               OpMemberDecorate %18 0 Offset 0
+               OpDecorate %18 Block
+               OpDecorate %20 DescriptorSet 0
+               OpDecorate %20 Binding 1
+               OpDecorate %73 ArrayStride 16
+               OpMemberDecorate %74 0 Offset 0
+               OpDecorate %74 Block
+               OpDecorate %76 DescriptorSet 0
+               OpDecorate %76 Binding 0
+               OpDecorate %85 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeFloat 32
+          %7 = OpTypePointer Function %6
+          %9 = OpTypeInt 32 1
+         %10 = OpConstant %9 -1
+         %12 = OpTypeVector %6 4
+         %13 = OpTypePointer Function %12
+         %15 = OpTypeInt 32 0
+         %16 = OpConstant %15 10
+         %17 = OpTypeArray %9 %16
+         %18 = OpTypeStruct %17
+         %19 = OpTypePointer Uniform %18
+         %20 = OpVariable %19 Uniform
+         %21 = OpConstant %9 0
+         %22 = OpTypePointer Uniform %9
+         %26 = OpConstant %9 1
+         %30 = OpConstant %9 2
+         %34 = OpConstant %9 3
+         %39 = OpConstant %9 4
+         %43 = OpConstant %9 5
+         %47 = OpConstant %9 6
+         %51 = OpConstant %9 7
+         %59 = OpTypeBool
+         %62 = OpConstant %9 9
+         %69 = OpConstant %15 0
+         %72 = OpConstant %15 1
+         %73 = OpTypeArray %6 %72
+         %74 = OpTypeStruct %73
+         %75 = OpTypePointer Uniform %74
+         %76 = OpVariable %75 Uniform
+         %77 = OpTypePointer Uniform %6
+         %84 = OpTypePointer Output %12
+         %85 = OpVariable %84 Output
+         %89 = OpConstant %9 8
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+          %8 = OpVariable %7 Function
+         %14 = OpVariable %13 Function
+         %11 = OpBitcast %6 %10
+               OpStore %8 %11
+         %23 = OpAccessChain %22 %20 %21 %21
+         %24 = OpLoad %9 %23
+         %25 = OpConvertSToF %6 %24
+         %27 = OpAccessChain %22 %20 %21 %26
+         %28 = OpLoad %9 %27
+         %29 = OpConvertSToF %6 %28
+         %31 = OpAccessChain %22 %20 %21 %30
+         %32 = OpLoad %9 %31
+         %33 = OpConvertSToF %6 %32
+         %35 = OpAccessChain %22 %20 %21 %34
+         %36 = OpLoad %9 %35
+         %37 = OpConvertSToF %6 %36
+         %38 = OpCompositeConstruct %12 %25 %29 %33 %37
+         %40 = OpAccessChain %22 %20 %21 %39
+         %41 = OpLoad %9 %40
+         %42 = OpConvertSToF %6 %41
+         %44 = OpAccessChain %22 %20 %21 %43
+         %45 = OpLoad %9 %44
+         %46 = OpConvertSToF %6 %45
+         %48 = OpAccessChain %22 %20 %21 %47
+         %49 = OpLoad %9 %48
+         %50 = OpConvertSToF %6 %49
+         %52 = OpAccessChain %22 %20 %21 %51
+         %53 = OpLoad %9 %52
+         %54 = OpConvertSToF %6 %53
+         %55 = OpCompositeConstruct %12 %42 %46 %50 %54
+         %56 = OpLoad %6 %8
+         %57 = OpCompositeConstruct %12 %56 %56 %56 %56
+         %58 = OpExtInst %12 %1 FMix %38 %55 %57
+               OpStore %14 %58
+         %60 = OpAccessChain %22 %20 %21 %21
+         %61 = OpLoad %9 %60
+         %63 = OpAccessChain %22 %20 %21 %62
+         %64 = OpLoad %9 %63
+         %65 = OpIEqual %59 %61 %64
+         %66 = OpLogicalNot %59 %65
+               OpSelectionMerge %68 None
+               OpBranchConditional %66 %67 %68
+         %67 = OpLabel
+         %70 = OpAccessChain %7 %14 %69
+         %71 = OpLoad %6 %70
+         %78 = OpAccessChain %77 %76 %21 %21
+         %79 = OpLoad %6 %78
+         %80 = OpFOrdGreaterThan %59 %71 %79
+               OpBranch %68
+         %68 = OpLabel
+         %81 = OpPhi %59 %65 %5 %80 %67
+               OpSelectionMerge %83 None
+               OpBranchConditional %81 %82 %100
+         %82 = OpLabel
+         %86 = OpAccessChain %22 %20 %21 %21
+         %87 = OpLoad %9 %86
+         %88 = OpConvertSToF %6 %87
+         %90 = OpAccessChain %22 %20 %21 %89
+         %91 = OpLoad %9 %90
+         %92 = OpConvertSToF %6 %91
+         %93 = OpAccessChain %22 %20 %21 %89
+         %94 = OpLoad %9 %93
+         %95 = OpConvertSToF %6 %94
+         %96 = OpAccessChain %22 %20 %21 %21
+         %97 = OpLoad %9 %96
+         %98 = OpConvertSToF %6 %97
+         %99 = OpCompositeConstruct %12 %88 %92 %95 %98
+               OpStore %85 %99
+               OpBranch %83
+        %100 = OpLabel
+        %101 = OpAccessChain %22 %20 %21 %89
+        %102 = OpLoad %9 %101
+        %103 = OpConvertSToF %6 %102
+        %104 = OpCompositeConstruct %12 %103 %103 %103 %103
+               OpStore %85 %104
+               OpBranch %83
+         %83 = OpLabel
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# _GLF_uniform_int_values
+BUFFER variant__GLF_uniform_int_values DATA_TYPE int32[] STD140 DATA
+ 1 2 3 4 5 6 7 8 0 1
+END
+# _GLF_uniform_float_values
+BUFFER variant__GLF_uniform_float_values DATA_TYPE float[] STD140 DATA
+ 0.0
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 256 256
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant__GLF_uniform_int_values AS uniform DESCRIPTOR_SET 0 BINDING 1
+  BIND BUFFER variant__GLF_uniform_float_values AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256
+
+EXPECT variant_framebuffer IDX 0 0 SIZE 256 256 EQ_RGBA 255 0 0 255
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-apfloat-mod-zero.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-apfloat-mod-zero.amber
new file mode 100644
index 0000000..c752ee8
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-apfloat-mod-zero.amber
@@ -0,0 +1,208 @@
+#!amber
+
+# Copyright 2020 Google LLC
+#
+# 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.
+
+
+# A test for a coverage-gap found by the GraphicsFuzz project.
+
+# Short description: A fragment shader that covers a specific floating point code path
+
+# The test passes because the shader always writes red.
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+# variant_fragment_shader is derived from the following GLSL:
+# #version 310 es
+# #define _int_1 _GLF_uniform_int_values[0]
+# #define _int_0 _GLF_uniform_int_values[1]
+# #define _float_0_0 _GLF_uniform_float_values[0]
+#
+# precision highp float;
+#
+# // Contents of _GLF_uniform_float_values: 0.0
+# layout(set = 0, binding = 0) uniform buf0
+# {
+#     float _GLF_uniform_float_values[1];
+# };
+#
+# // Contents of _GLF_uniform_int_values: [1, 0]
+# layout(set = 0, binding = 1) uniform buf1
+# {
+#     int _GLF_uniform_int_values[3];
+# };
+# layout(location = 0) out vec4 _GLF_color;
+#
+# void main()
+# {
+#     // This results in an undefined value, but not in undefined behavior.
+#     float undefined = mod(5.0, 0.0);
+#     if (_int_1 == (_int_1 + _int_0) || undefined > _float_0_0)
+#     {
+#         _GLF_color = vec4(_int_1, _int_0, _int_0, _int_1);
+#     }
+#     else
+#     {
+#         _GLF_color = vec4(_int_0);
+#     }
+# }
+SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 8
+; Bound: 68
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %49
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 310
+               OpName %4 "main"
+               OpName %8 "undefined"
+               OpName %17 "buf1"
+               OpMemberName %17 0 "_GLF_uniform_int_values"
+               OpName %19 ""
+               OpName %37 "buf0"
+               OpMemberName %37 0 "_GLF_uniform_float_values"
+               OpName %39 ""
+               OpName %49 "_GLF_color"
+               OpDecorate %16 ArrayStride 16
+               OpMemberDecorate %17 0 RelaxedPrecision
+               OpMemberDecorate %17 0 Offset 0
+               OpDecorate %17 Block
+               OpDecorate %19 DescriptorSet 0
+               OpDecorate %19 Binding 1
+               OpDecorate %23 RelaxedPrecision
+               OpDecorate %25 RelaxedPrecision
+               OpDecorate %28 RelaxedPrecision
+               OpDecorate %29 RelaxedPrecision
+               OpDecorate %36 ArrayStride 16
+               OpMemberDecorate %37 0 Offset 0
+               OpDecorate %37 Block
+               OpDecorate %39 DescriptorSet 0
+               OpDecorate %39 Binding 0
+               OpDecorate %49 Location 0
+               OpDecorate %51 RelaxedPrecision
+               OpDecorate %54 RelaxedPrecision
+               OpDecorate %57 RelaxedPrecision
+               OpDecorate %60 RelaxedPrecision
+               OpDecorate %65 RelaxedPrecision
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeFloat 32
+          %7 = OpTypePointer Function %6
+          %9 = OpConstant %6 5
+         %10 = OpConstant %6 0
+         %12 = OpTypeBool
+         %13 = OpTypeInt 32 1
+         %14 = OpTypeInt 32 0
+         %15 = OpConstant %14 3
+         %16 = OpTypeArray %13 %15
+         %17 = OpTypeStruct %16
+         %18 = OpTypePointer Uniform %17
+         %19 = OpVariable %18 Uniform
+         %20 = OpConstant %13 0
+         %21 = OpTypePointer Uniform %13
+         %26 = OpConstant %13 1
+         %35 = OpConstant %14 1
+         %36 = OpTypeArray %6 %35
+         %37 = OpTypeStruct %36
+         %38 = OpTypePointer Uniform %37
+         %39 = OpVariable %38 Uniform
+         %40 = OpTypePointer Uniform %6
+         %47 = OpTypeVector %6 4
+         %48 = OpTypePointer Output %47
+         %49 = OpVariable %48 Output
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+          %8 = OpVariable %7 Function
+         %11 = OpFMod %6 %9 %10
+               OpStore %8 %11
+         %22 = OpAccessChain %21 %19 %20 %20
+         %23 = OpLoad %13 %22
+         %24 = OpAccessChain %21 %19 %20 %20
+         %25 = OpLoad %13 %24
+         %27 = OpAccessChain %21 %19 %20 %26
+         %28 = OpLoad %13 %27
+         %29 = OpIAdd %13 %25 %28
+         %30 = OpIEqual %12 %23 %29
+         %31 = OpLogicalNot %12 %30
+               OpSelectionMerge %33 None
+               OpBranchConditional %31 %32 %33
+         %32 = OpLabel
+         %34 = OpLoad %6 %8
+         %41 = OpAccessChain %40 %39 %20 %20
+         %42 = OpLoad %6 %41
+         %43 = OpFOrdGreaterThan %12 %34 %42
+               OpBranch %33
+         %33 = OpLabel
+         %44 = OpPhi %12 %30 %5 %43 %32
+               OpSelectionMerge %46 None
+               OpBranchConditional %44 %45 %63
+         %45 = OpLabel
+         %50 = OpAccessChain %21 %19 %20 %20
+         %51 = OpLoad %13 %50
+         %52 = OpConvertSToF %6 %51
+         %53 = OpAccessChain %21 %19 %20 %26
+         %54 = OpLoad %13 %53
+         %55 = OpConvertSToF %6 %54
+         %56 = OpAccessChain %21 %19 %20 %26
+         %57 = OpLoad %13 %56
+         %58 = OpConvertSToF %6 %57
+         %59 = OpAccessChain %21 %19 %20 %20
+         %60 = OpLoad %13 %59
+         %61 = OpConvertSToF %6 %60
+         %62 = OpCompositeConstruct %47 %52 %55 %58 %61
+               OpStore %49 %62
+               OpBranch %46
+         %63 = OpLabel
+         %64 = OpAccessChain %21 %19 %20 %26
+         %65 = OpLoad %13 %64
+         %66 = OpConvertSToF %6 %65
+         %67 = OpCompositeConstruct %47 %66 %66 %66 %66
+               OpStore %49 %67
+               OpBranch %46
+         %46 = OpLabel
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# _GLF_uniform_int_values
+BUFFER variant__GLF_uniform_int_values DATA_TYPE int32[] STD140 DATA
+ 1 0
+END
+# _GLF_uniform_float_values
+BUFFER variant__GLF_uniform_float_values DATA_TYPE float[] STD140 DATA
+ 0.0
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 256 256
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant__GLF_uniform_int_values AS uniform DESCRIPTOR_SET 0 BINDING 1
+  BIND BUFFER variant__GLF_uniform_float_values AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256
+
+EXPECT variant_framebuffer IDX 0 0 SIZE 256 256 EQ_RGBA 255 0 0 255
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-apfloat-negative-step-func.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-apfloat-negative-step-func.amber
new file mode 100644
index 0000000..495b011
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-apfloat-negative-step-func.amber
@@ -0,0 +1,197 @@
+#!amber
+
+# Copyright 2020 Google LLC
+#
+# 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.
+
+
+# A test for a coverage-gap found by the GraphicsFuzz project.
+
+# Short description: A fragment shader that covers a specific floating point code path
+
+# The test passes because the shader always writes red.
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+# variant_fragment_shader is derived from the following GLSL:
+# #version 310 es
+# #define _int_1 _GLF_uniform_int_values[0]
+# #define _int_0 _GLF_uniform_int_values[1]
+# #define _float_0_0 _GLF_uniform_float_values[0]
+#
+# precision highp float;
+# precision highp int;
+#
+# // Contents of _GLF_uniform_int_values: [1, 0]
+# layout(set = 0, binding = 0) uniform buf0
+# {
+#     int _GLF_uniform_int_values[2];
+# };
+#
+# // Contents of _GLF_uniform_float_values: 0.0
+# layout(set = 0, binding = 1) uniform buf1
+# {
+#     float _GLF_uniform_float_values[1];
+# };
+#
+# layout(location = 0) out vec4 _GLF_color;
+#
+# void main()
+# {
+#     float edge = determinant(mat3(1));
+#     if (step(edge, vec4(-3.0)) == vec4(_float_0_0))
+#     {
+#         _GLF_color = vec4(_int_1, _int_0, _int_0, _int_1);
+#     }
+#     else
+#     {
+#         _GLF_color = vec4(_int_0);
+#     }
+# }
+SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 8
+; Bound: 69
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %43
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 310
+               OpName %4 "main"
+               OpName %8 "edge"
+               OpName %27 "buf1"
+               OpMemberName %27 0 "_GLF_uniform_float_values"
+               OpName %29 ""
+               OpName %43 "_GLF_color"
+               OpName %46 "buf0"
+               OpMemberName %46 0 "_GLF_uniform_int_values"
+               OpName %48 ""
+               OpDecorate %26 ArrayStride 16
+               OpMemberDecorate %27 0 Offset 0
+               OpDecorate %27 Block
+               OpDecorate %29 DescriptorSet 0
+               OpDecorate %29 Binding 1
+               OpDecorate %43 Location 0
+               OpDecorate %45 ArrayStride 16
+               OpMemberDecorate %46 0 Offset 0
+               OpDecorate %46 Block
+               OpDecorate %48 DescriptorSet 0
+               OpDecorate %48 Binding 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeFloat 32
+          %7 = OpTypePointer Function %6
+          %9 = OpTypeVector %6 3
+         %10 = OpTypeMatrix %9 3
+         %11 = OpConstant %6 1
+         %12 = OpConstant %6 0
+         %13 = OpConstantComposite %9 %11 %12 %12
+         %14 = OpConstantComposite %9 %12 %11 %12
+         %15 = OpConstantComposite %9 %12 %12 %11
+         %16 = OpConstantComposite %10 %13 %14 %15
+         %19 = OpTypeVector %6 4
+         %20 = OpConstant %6 -3
+         %21 = OpConstantComposite %19 %20 %20 %20 %20
+         %24 = OpTypeInt 32 0
+         %25 = OpConstant %24 1
+         %26 = OpTypeArray %6 %25
+         %27 = OpTypeStruct %26
+         %28 = OpTypePointer Uniform %27
+         %29 = OpVariable %28 Uniform
+         %30 = OpTypeInt 32 1
+         %31 = OpConstant %30 0
+         %32 = OpTypePointer Uniform %6
+         %36 = OpTypeBool
+         %37 = OpTypeVector %36 4
+         %42 = OpTypePointer Output %19
+         %43 = OpVariable %42 Output
+         %44 = OpConstant %24 2
+         %45 = OpTypeArray %30 %44
+         %46 = OpTypeStruct %45
+         %47 = OpTypePointer Uniform %46
+         %48 = OpVariable %47 Uniform
+         %49 = OpTypePointer Uniform %30
+         %53 = OpConstant %30 1
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+          %8 = OpVariable %7 Function
+         %17 = OpExtInst %6 %1 Determinant %16
+               OpStore %8 %17
+         %18 = OpLoad %6 %8
+         %22 = OpCompositeConstruct %19 %18 %18 %18 %18
+         %23 = OpExtInst %19 %1 Step %22 %21
+         %33 = OpAccessChain %32 %29 %31 %31
+         %34 = OpLoad %6 %33
+         %35 = OpCompositeConstruct %19 %34 %34 %34 %34
+         %38 = OpFOrdEqual %37 %23 %35
+         %39 = OpAll %36 %38
+               OpSelectionMerge %41 None
+               OpBranchConditional %39 %40 %64
+         %40 = OpLabel
+         %50 = OpAccessChain %49 %48 %31 %31
+         %51 = OpLoad %30 %50
+         %52 = OpConvertSToF %6 %51
+         %54 = OpAccessChain %49 %48 %31 %53
+         %55 = OpLoad %30 %54
+         %56 = OpConvertSToF %6 %55
+         %57 = OpAccessChain %49 %48 %31 %53
+         %58 = OpLoad %30 %57
+         %59 = OpConvertSToF %6 %58
+         %60 = OpAccessChain %49 %48 %31 %31
+         %61 = OpLoad %30 %60
+         %62 = OpConvertSToF %6 %61
+         %63 = OpCompositeConstruct %19 %52 %56 %59 %62
+               OpStore %43 %63
+               OpBranch %41
+         %64 = OpLabel
+         %65 = OpAccessChain %49 %48 %31 %53
+         %66 = OpLoad %30 %65
+         %67 = OpConvertSToF %6 %66
+         %68 = OpCompositeConstruct %19 %67 %67 %67 %67
+               OpStore %43 %68
+               OpBranch %41
+         %41 = OpLabel
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# _GLF_uniform_float_values
+BUFFER variant__GLF_uniform_float_values DATA_TYPE float[] STD140 DATA
+ 0.0
+END
+# _GLF_uniform_int_values
+BUFFER variant__GLF_uniform_int_values DATA_TYPE int32[] STD140 DATA
+ 1 0
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 256 256
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant__GLF_uniform_float_values AS uniform DESCRIPTOR_SET 0 BINDING 1
+  BIND BUFFER variant__GLF_uniform_int_values AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256
+
+EXPECT variant_framebuffer IDX 0 0 SIZE 256 256 EQ_RGBA 255 0 0 255
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-apfloat-reflect-denorm.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-apfloat-reflect-denorm.amber
new file mode 100644
index 0000000..356585d
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-apfloat-reflect-denorm.amber
@@ -0,0 +1,238 @@
+#!amber
+
+# Copyright 2020 Google LLC
+#
+# 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.
+
+
+# A test for a coverage-gap found by the GraphicsFuzz project.
+
+# Short description: A fragment shader that covers a specific floating point code path
+
+# The test passes because the shader always writes red.
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+# variant_fragment_shader is derived from the following GLSL:
+# #version 310 es
+# #define _int_1 _GLF_uniform_int_values[0]
+# #define _int_0 _GLF_uniform_int_values[1]
+# #define _int_768 _GLF_uniform_int_values[2]
+# #define _int_1792 _GLF_uniform_int_values[3]
+# #define _int_45056 _GLF_uniform_int_values[4]
+# #define _float_0_1 _GLF_uniform_float_values[0]
+# #define _float_0_5 _GLF_uniform_float_values[1]
+# #define _float_2_0 _GLF_uniform_float_values[2]
+#
+# precision highp float;
+# precision highp int;
+#
+# // Contents of _GLF_uniform_int_values: [1, 0, 768, 1792, 45056]
+# layout(set = 0, binding = 0) uniform buf0
+# {
+#     int _GLF_uniform_int_values[5];
+# };
+#
+# // Contents of _GLF_uniform_float_values: [0.1, 0.5, 2.0]
+# layout(set = 0, binding = 1) uniform buf1
+# {
+#     float _GLF_uniform_float_values[3];
+# };
+#
+# layout(location = 0) out vec4 _GLF_color;
+#
+# void main()
+# {
+#     // All components of I are denormalized.
+#     vec4 I = uintBitsToFloat(uvec4(_int_768, _int_1792, _int_45056, 0x16b39));
+#     vec4 N = vec4(_float_0_5);
+#
+#     // Whether or not denormalized values are supported or flushed to zero,
+#     // the result of "reflect" should match the reference result.
+#     vec4 R = reflect(I, vec4(0.5));
+#     vec4 ref = I - _float_2_0 * dot(N, I) * N;
+#
+#     if (distance(R, ref) < _float_0_1)
+#     {
+#         _GLF_color = vec4(_int_1, _int_0, _int_0, _int_1);
+#     }
+#     else
+#     {
+#         _GLF_color = vec4(_int_0);
+#     }
+# }
+SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 8
+; Bound: 91
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %72
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 310
+               OpName %4 "main"
+               OpName %9 "I"
+               OpName %14 "buf0"
+               OpMemberName %14 0 "_GLF_uniform_int_values"
+               OpName %16 ""
+               OpName %35 "N"
+               OpName %38 "buf1"
+               OpMemberName %38 0 "_GLF_uniform_float_values"
+               OpName %40 ""
+               OpName %46 "R"
+               OpName %51 "ref"
+               OpName %72 "_GLF_color"
+               OpDecorate %13 ArrayStride 16
+               OpMemberDecorate %14 0 Offset 0
+               OpDecorate %14 Block
+               OpDecorate %16 DescriptorSet 0
+               OpDecorate %16 Binding 0
+               OpDecorate %37 ArrayStride 16
+               OpMemberDecorate %38 0 Offset 0
+               OpDecorate %38 Block
+               OpDecorate %40 DescriptorSet 0
+               OpDecorate %40 Binding 1
+               OpDecorate %72 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeFloat 32
+          %7 = OpTypeVector %6 4
+          %8 = OpTypePointer Function %7
+         %10 = OpTypeInt 32 1
+         %11 = OpTypeInt 32 0
+         %12 = OpConstant %11 5
+         %13 = OpTypeArray %10 %12
+         %14 = OpTypeStruct %13
+         %15 = OpTypePointer Uniform %14
+         %16 = OpVariable %15 Uniform
+         %17 = OpConstant %10 0
+         %18 = OpConstant %10 2
+         %19 = OpTypePointer Uniform %10
+         %23 = OpConstant %10 3
+         %27 = OpConstant %10 4
+         %31 = OpConstant %11 92985
+         %32 = OpTypeVector %11 4
+         %36 = OpConstant %11 3
+         %37 = OpTypeArray %6 %36
+         %38 = OpTypeStruct %37
+         %39 = OpTypePointer Uniform %38
+         %40 = OpVariable %39 Uniform
+         %41 = OpConstant %10 1
+         %42 = OpTypePointer Uniform %6
+         %48 = OpConstant %6 0.5
+         %49 = OpConstantComposite %7 %48 %48 %48 %48
+         %67 = OpTypeBool
+         %71 = OpTypePointer Output %7
+         %72 = OpVariable %71 Output
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+          %9 = OpVariable %8 Function
+         %35 = OpVariable %8 Function
+         %46 = OpVariable %8 Function
+         %51 = OpVariable %8 Function
+         %20 = OpAccessChain %19 %16 %17 %18
+         %21 = OpLoad %10 %20
+         %22 = OpBitcast %11 %21
+         %24 = OpAccessChain %19 %16 %17 %23
+         %25 = OpLoad %10 %24
+         %26 = OpBitcast %11 %25
+         %28 = OpAccessChain %19 %16 %17 %27
+         %29 = OpLoad %10 %28
+         %30 = OpBitcast %11 %29
+         %33 = OpCompositeConstruct %32 %22 %26 %30 %31
+         %34 = OpBitcast %7 %33
+               OpStore %9 %34
+         %43 = OpAccessChain %42 %40 %17 %41
+         %44 = OpLoad %6 %43
+         %45 = OpCompositeConstruct %7 %44 %44 %44 %44
+               OpStore %35 %45
+         %47 = OpLoad %7 %9
+         %50 = OpExtInst %7 %1 Reflect %47 %49
+               OpStore %46 %50
+         %52 = OpLoad %7 %9
+         %53 = OpAccessChain %42 %40 %17 %18
+         %54 = OpLoad %6 %53
+         %55 = OpLoad %7 %35
+         %56 = OpLoad %7 %9
+         %57 = OpDot %6 %55 %56
+         %58 = OpFMul %6 %54 %57
+         %59 = OpLoad %7 %35
+         %60 = OpVectorTimesScalar %7 %59 %58
+         %61 = OpFSub %7 %52 %60
+               OpStore %51 %61
+         %62 = OpLoad %7 %46
+         %63 = OpLoad %7 %51
+         %64 = OpExtInst %6 %1 Distance %62 %63
+         %65 = OpAccessChain %42 %40 %17 %17
+         %66 = OpLoad %6 %65
+         %68 = OpFOrdLessThan %67 %64 %66
+               OpSelectionMerge %70 None
+               OpBranchConditional %68 %69 %86
+         %69 = OpLabel
+         %73 = OpAccessChain %19 %16 %17 %17
+         %74 = OpLoad %10 %73
+         %75 = OpConvertSToF %6 %74
+         %76 = OpAccessChain %19 %16 %17 %41
+         %77 = OpLoad %10 %76
+         %78 = OpConvertSToF %6 %77
+         %79 = OpAccessChain %19 %16 %17 %41
+         %80 = OpLoad %10 %79
+         %81 = OpConvertSToF %6 %80
+         %82 = OpAccessChain %19 %16 %17 %17
+         %83 = OpLoad %10 %82
+         %84 = OpConvertSToF %6 %83
+         %85 = OpCompositeConstruct %7 %75 %78 %81 %84
+               OpStore %72 %85
+               OpBranch %70
+         %86 = OpLabel
+         %87 = OpAccessChain %19 %16 %17 %41
+         %88 = OpLoad %10 %87
+         %89 = OpConvertSToF %6 %88
+         %90 = OpCompositeConstruct %7 %89 %89 %89 %89
+               OpStore %72 %90
+               OpBranch %70
+         %70 = OpLabel
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# _GLF_uniform_float_values
+BUFFER variant__GLF_uniform_float_values DATA_TYPE float[] STD140 DATA
+ 0.1 0.5 2.0
+END
+# _GLF_uniform_int_values
+BUFFER variant__GLF_uniform_int_values DATA_TYPE int32[] STD140 DATA
+ 1 0 768 1792 45056
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 16 16
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant__GLF_uniform_float_values AS uniform DESCRIPTOR_SET 0 BINDING 1
+  BIND BUFFER variant__GLF_uniform_int_values AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 16 16
+
+EXPECT variant_framebuffer IDX 0 0 SIZE 16 16 EQ_RGBA 255 0 0 255
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-apfloat-sinh-negative-log2.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-apfloat-sinh-negative-log2.amber
new file mode 100644
index 0000000..89613c5
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-apfloat-sinh-negative-log2.amber
@@ -0,0 +1,201 @@
+#!amber
+
+# Copyright 2020 Google LLC
+#
+# 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.
+
+
+# A test for a coverage-gap found by the GraphicsFuzz project.
+
+# Short description: A fragment shader that covers a specific floating point code path
+
+# The test passes because the shader always writes red.
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+# variant_fragment_shader is derived from the following GLSL:
+# #version 310 es
+# #define _int_1 _GLF_uniform_int_values[0]
+# #define _int_0 _GLF_uniform_int_values[1]
+# #define _float_0_0 _GLF_uniform_float_values[0]
+#
+# precision highp float;
+#
+# // Contents of _GLF_uniform_int_values: [1, 0]
+# layout(set = 0, binding = 0) uniform buf0
+# {
+#     int _GLF_uniform_int_values[2];
+# };
+#
+# // Contents of _GLF_uniform_float_values: 0.0
+# layout(set = 0, binding = 1) uniform buf1
+# {
+#     float _GLF_uniform_float_values[1];
+# };
+#
+# layout(location = 0) out vec4 _GLF_color;
+#
+# void main()
+# {
+#     // This results in an undefined value, but not in undefined behavior.
+#     float undefined = sinh(log2(-8.9));
+#
+#     if (1 == _int_1 || undefined > _float_0_0)
+#     {
+#         _GLF_color = vec4(_int_1, _int_0, _int_0, _int_1);
+#     }
+#     else
+#     {
+#         _GLF_color = vec4(_int_0);
+#     }
+# }
+SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 8
+; Bound: 62
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %43
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 310
+               OpName %4 "main"
+               OpName %8 "undefined"
+               OpName %17 "buf0"
+               OpMemberName %17 0 "_GLF_uniform_int_values"
+               OpName %19 ""
+               OpName %31 "buf1"
+               OpMemberName %31 0 "_GLF_uniform_float_values"
+               OpName %33 ""
+               OpName %43 "_GLF_color"
+               OpDecorate %16 ArrayStride 16
+               OpMemberDecorate %17 0 RelaxedPrecision
+               OpMemberDecorate %17 0 Offset 0
+               OpDecorate %17 Block
+               OpDecorate %19 DescriptorSet 0
+               OpDecorate %19 Binding 0
+               OpDecorate %23 RelaxedPrecision
+               OpDecorate %30 ArrayStride 16
+               OpMemberDecorate %31 0 Offset 0
+               OpDecorate %31 Block
+               OpDecorate %33 DescriptorSet 0
+               OpDecorate %33 Binding 1
+               OpDecorate %43 Location 0
+               OpDecorate %45 RelaxedPrecision
+               OpDecorate %48 RelaxedPrecision
+               OpDecorate %51 RelaxedPrecision
+               OpDecorate %54 RelaxedPrecision
+               OpDecorate %59 RelaxedPrecision
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeFloat 32
+          %7 = OpTypePointer Function %6
+          %9 = OpConstant %6 0x1.8p+128
+         %11 = OpTypeBool
+         %12 = OpTypeInt 32 1
+         %13 = OpConstant %12 1
+         %14 = OpTypeInt 32 0
+         %15 = OpConstant %14 2
+         %16 = OpTypeArray %12 %15
+         %17 = OpTypeStruct %16
+         %18 = OpTypePointer Uniform %17
+         %19 = OpVariable %18 Uniform
+         %20 = OpConstant %12 0
+         %21 = OpTypePointer Uniform %12
+         %29 = OpConstant %14 1
+         %30 = OpTypeArray %6 %29
+         %31 = OpTypeStruct %30
+         %32 = OpTypePointer Uniform %31
+         %33 = OpVariable %32 Uniform
+         %34 = OpTypePointer Uniform %6
+         %41 = OpTypeVector %6 4
+         %42 = OpTypePointer Output %41
+         %43 = OpVariable %42 Output
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+          %8 = OpVariable %7 Function
+         %10 = OpExtInst %6 %1 Sinh %9
+               OpStore %8 %10
+         %22 = OpAccessChain %21 %19 %20 %20
+         %23 = OpLoad %12 %22
+         %24 = OpIEqual %11 %13 %23
+         %25 = OpLogicalNot %11 %24
+               OpSelectionMerge %27 None
+               OpBranchConditional %25 %26 %27
+         %26 = OpLabel
+         %28 = OpLoad %6 %8
+         %35 = OpAccessChain %34 %33 %20 %20
+         %36 = OpLoad %6 %35
+         %37 = OpFOrdGreaterThan %11 %28 %36
+               OpBranch %27
+         %27 = OpLabel
+         %38 = OpPhi %11 %24 %5 %37 %26
+               OpSelectionMerge %40 None
+               OpBranchConditional %38 %39 %57
+         %39 = OpLabel
+         %44 = OpAccessChain %21 %19 %20 %20
+         %45 = OpLoad %12 %44
+         %46 = OpConvertSToF %6 %45
+         %47 = OpAccessChain %21 %19 %20 %13
+         %48 = OpLoad %12 %47
+         %49 = OpConvertSToF %6 %48
+         %50 = OpAccessChain %21 %19 %20 %13
+         %51 = OpLoad %12 %50
+         %52 = OpConvertSToF %6 %51
+         %53 = OpAccessChain %21 %19 %20 %20
+         %54 = OpLoad %12 %53
+         %55 = OpConvertSToF %6 %54
+         %56 = OpCompositeConstruct %41 %46 %49 %52 %55
+               OpStore %43 %56
+               OpBranch %40
+         %57 = OpLabel
+         %58 = OpAccessChain %21 %19 %20 %13
+         %59 = OpLoad %12 %58
+         %60 = OpConvertSToF %6 %59
+         %61 = OpCompositeConstruct %41 %60 %60 %60 %60
+               OpStore %43 %61
+               OpBranch %40
+         %40 = OpLabel
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# _GLF_uniform_float_values
+BUFFER variant__GLF_uniform_float_values DATA_TYPE float[] STD140 DATA
+ 0.0
+END
+# _GLF_uniform_int_values
+BUFFER variant__GLF_uniform_int_values DATA_TYPE int32[] STD140 DATA
+ 1 0
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 256 256
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant__GLF_uniform_float_values AS uniform DESCRIPTOR_SET 0 BINDING 1
+  BIND BUFFER variant__GLF_uniform_int_values AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256
+
+EXPECT variant_framebuffer IDX 0 0 SIZE 256 256 EQ_RGBA 255 0 0 255
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-apfloat-undefined-matrix-mul.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-apfloat-undefined-matrix-mul.amber
new file mode 100644
index 0000000..90f99bf
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-apfloat-undefined-matrix-mul.amber
@@ -0,0 +1,355 @@
+#!amber
+
+# Copyright 2020 Google LLC
+#
+# 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.
+
+
+# A test for a coverage-gap found by the GraphicsFuzz project.
+
+# Short description: A fragment shader that covers a specific floating point code path
+
+# The test passes because the shader always writes red.
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+# variant_fragment_shader is derived from the following GLSL:
+# #version 310 es
+# #define _int_50 _GLF_uniform_int_values[0]
+# #define _int_10 _GLF_uniform_int_values[1]
+# #define _int_11 _GLF_uniform_int_values[2]
+# #define _int_12 _GLF_uniform_int_values[3]
+# #define _int_1 _GLF_uniform_int_values[4]
+# #define _int_2 _GLF_uniform_int_values[5]
+# #define _int_3 _GLF_uniform_int_values[6]
+# #define _int_6 _GLF_uniform_int_values[7]
+# #define _int_7 _GLF_uniform_int_values[8]
+# #define _int_0 _GLF_uniform_int_values[9]
+# #define _int_5 _GLF_uniform_int_values[10]
+# #define _int_9 _GLF_uniform_int_values[11]
+# #define _float_0_0 _GLF_uniform_float_values[0]
+#
+# precision highp float;
+#
+# // Contents of _GLF_uniform_float_values: 0.0
+# layout(set = 0, binding = 0) uniform buf0
+# {
+#     float _GLF_uniform_float_values[1];
+# };
+#
+# // Contents of _GLF_uniform_int_values: [50, 10, 11, 12, 1, 2, 3, 6, 7, 0, 5, 9]
+# layout(set = 0, binding = 1) uniform buf1
+# {
+#     int _GLF_uniform_int_values[12];
+# };
+#
+# layout(location = 0) out vec4 _GLF_color;
+#
+# void main()
+# {
+#     mat3x4 m0 = mat3x4(_int_1, _int_2, _int_3, 4, _int_5, _int_6, _int_7, 8,
+#                        _int_9, _int_10, _int_11, _int_12);
+#     mat3x4 m1 = mat3x4(_int_1);
+#
+#     // Results are too large to fit into a floating point type, thus the results are undefined.
+#     vec3 undefined = ldexp(vec3(1), ivec3(500));
+#     // These still fit into floating point type.
+#     vec3 defined = ldexp(vec3(_int_1), ivec3(_int_50));
+#
+#     // Vectors v0 and v1 are undefined.
+#     vec4 v0 = m0 * undefined;
+#     vec4 v1 = m1 * undefined;
+#
+#     // Vectors v2 and v3 are defined.
+#     vec4 v2 = m0 * defined;
+#     vec4 v3 = m1 * defined;
+#
+#     // Always true.
+#     if (v2.x > v3.x)
+#     {
+#         _GLF_color = vec4(_int_1, _int_0, _int_0, _int_1);
+#     }
+#     else
+#     {
+#         _GLF_color = vec4(_int_0);
+#     }
+#
+#     // The result doesn't matter as the green channel is already zero.
+#     if (v0.x < v1.x)
+#     {
+#         _GLF_color.g = _float_0_0;
+#     }
+# }
+SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 8
+; Bound: 158
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %121
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 310
+               OpName %4 "main"
+               OpName %10 "m0"
+               OpName %15 "buf1"
+               OpMemberName %15 0 "_GLF_uniform_int_values"
+               OpName %17 ""
+               OpName %68 "m1"
+               OpName %78 "undefined"
+               OpName %84 "defined"
+               OpName %94 "v0"
+               OpName %98 "v1"
+               OpName %102 "v2"
+               OpName %106 "v3"
+               OpName %121 "_GLF_color"
+               OpName %150 "buf0"
+               OpMemberName %150 0 "_GLF_uniform_float_values"
+               OpName %152 ""
+               OpDecorate %14 ArrayStride 16
+               OpMemberDecorate %15 0 RelaxedPrecision
+               OpMemberDecorate %15 0 Offset 0
+               OpDecorate %15 Block
+               OpDecorate %17 DescriptorSet 0
+               OpDecorate %17 Binding 1
+               OpDecorate %22 RelaxedPrecision
+               OpDecorate %26 RelaxedPrecision
+               OpDecorate %30 RelaxedPrecision
+               OpDecorate %35 RelaxedPrecision
+               OpDecorate %39 RelaxedPrecision
+               OpDecorate %43 RelaxedPrecision
+               OpDecorate %48 RelaxedPrecision
+               OpDecorate %52 RelaxedPrecision
+               OpDecorate %56 RelaxedPrecision
+               OpDecorate %60 RelaxedPrecision
+               OpDecorate %70 RelaxedPrecision
+               OpDecorate %86 RelaxedPrecision
+               OpDecorate %90 RelaxedPrecision
+               OpDecorate %121 Location 0
+               OpDecorate %123 RelaxedPrecision
+               OpDecorate %127 RelaxedPrecision
+               OpDecorate %130 RelaxedPrecision
+               OpDecorate %133 RelaxedPrecision
+               OpDecorate %138 RelaxedPrecision
+               OpDecorate %149 ArrayStride 16
+               OpMemberDecorate %150 0 Offset 0
+               OpDecorate %150 Block
+               OpDecorate %152 DescriptorSet 0
+               OpDecorate %152 Binding 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeFloat 32
+          %7 = OpTypeVector %6 4
+          %8 = OpTypeMatrix %7 3
+          %9 = OpTypePointer Function %8
+         %11 = OpTypeInt 32 1
+         %12 = OpTypeInt 32 0
+         %13 = OpConstant %12 12
+         %14 = OpTypeArray %11 %13
+         %15 = OpTypeStruct %14
+         %16 = OpTypePointer Uniform %15
+         %17 = OpVariable %16 Uniform
+         %18 = OpConstant %11 0
+         %19 = OpConstant %11 4
+         %20 = OpTypePointer Uniform %11
+         %24 = OpConstant %11 5
+         %28 = OpConstant %11 6
+         %32 = OpConstant %6 4
+         %33 = OpConstant %11 10
+         %37 = OpConstant %11 7
+         %41 = OpConstant %11 8
+         %45 = OpConstant %6 8
+         %46 = OpConstant %11 11
+         %50 = OpConstant %11 1
+         %54 = OpConstant %11 2
+         %58 = OpConstant %11 3
+         %62 = OpConstant %6 1
+         %63 = OpConstant %6 0
+         %76 = OpTypeVector %6 3
+         %77 = OpTypePointer Function %76
+         %79 = OpConstantComposite %76 %62 %62 %62
+         %80 = OpTypeVector %11 3
+         %81 = OpConstant %11 500
+         %82 = OpConstantComposite %80 %81 %81 %81
+         %93 = OpTypePointer Function %7
+        %110 = OpConstant %12 0
+        %111 = OpTypePointer Function %6
+        %116 = OpTypeBool
+        %120 = OpTypePointer Output %7
+        %121 = OpVariable %120 Output
+        %125 = OpConstant %11 9
+        %148 = OpConstant %12 1
+        %149 = OpTypeArray %6 %148
+        %150 = OpTypeStruct %149
+        %151 = OpTypePointer Uniform %150
+        %152 = OpVariable %151 Uniform
+        %153 = OpTypePointer Uniform %6
+        %156 = OpTypePointer Output %6
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+         %10 = OpVariable %9 Function
+         %68 = OpVariable %9 Function
+         %78 = OpVariable %77 Function
+         %84 = OpVariable %77 Function
+         %94 = OpVariable %93 Function
+         %98 = OpVariable %93 Function
+        %102 = OpVariable %93 Function
+        %106 = OpVariable %93 Function
+         %21 = OpAccessChain %20 %17 %18 %19
+         %22 = OpLoad %11 %21
+         %23 = OpConvertSToF %6 %22
+         %25 = OpAccessChain %20 %17 %18 %24
+         %26 = OpLoad %11 %25
+         %27 = OpConvertSToF %6 %26
+         %29 = OpAccessChain %20 %17 %18 %28
+         %30 = OpLoad %11 %29
+         %31 = OpConvertSToF %6 %30
+         %34 = OpAccessChain %20 %17 %18 %33
+         %35 = OpLoad %11 %34
+         %36 = OpConvertSToF %6 %35
+         %38 = OpAccessChain %20 %17 %18 %37
+         %39 = OpLoad %11 %38
+         %40 = OpConvertSToF %6 %39
+         %42 = OpAccessChain %20 %17 %18 %41
+         %43 = OpLoad %11 %42
+         %44 = OpConvertSToF %6 %43
+         %47 = OpAccessChain %20 %17 %18 %46
+         %48 = OpLoad %11 %47
+         %49 = OpConvertSToF %6 %48
+         %51 = OpAccessChain %20 %17 %18 %50
+         %52 = OpLoad %11 %51
+         %53 = OpConvertSToF %6 %52
+         %55 = OpAccessChain %20 %17 %18 %54
+         %56 = OpLoad %11 %55
+         %57 = OpConvertSToF %6 %56
+         %59 = OpAccessChain %20 %17 %18 %58
+         %60 = OpLoad %11 %59
+         %61 = OpConvertSToF %6 %60
+         %64 = OpCompositeConstruct %7 %23 %27 %31 %32
+         %65 = OpCompositeConstruct %7 %36 %40 %44 %45
+         %66 = OpCompositeConstruct %7 %49 %53 %57 %61
+         %67 = OpCompositeConstruct %8 %64 %65 %66
+               OpStore %10 %67
+         %69 = OpAccessChain %20 %17 %18 %19
+         %70 = OpLoad %11 %69
+         %71 = OpConvertSToF %6 %70
+         %72 = OpCompositeConstruct %7 %71 %63 %63 %63
+         %73 = OpCompositeConstruct %7 %63 %71 %63 %63
+         %74 = OpCompositeConstruct %7 %63 %63 %71 %63
+         %75 = OpCompositeConstruct %8 %72 %73 %74
+               OpStore %68 %75
+         %83 = OpExtInst %76 %1 Ldexp %79 %82
+               OpStore %78 %83
+         %85 = OpAccessChain %20 %17 %18 %19
+         %86 = OpLoad %11 %85
+         %87 = OpConvertSToF %6 %86
+         %88 = OpCompositeConstruct %76 %87 %87 %87
+         %89 = OpAccessChain %20 %17 %18 %18
+         %90 = OpLoad %11 %89
+         %91 = OpCompositeConstruct %80 %90 %90 %90
+         %92 = OpExtInst %76 %1 Ldexp %88 %91
+               OpStore %84 %92
+         %95 = OpLoad %8 %10
+         %96 = OpLoad %76 %78
+         %97 = OpMatrixTimesVector %7 %95 %96
+               OpStore %94 %97
+         %99 = OpLoad %8 %68
+        %100 = OpLoad %76 %78
+        %101 = OpMatrixTimesVector %7 %99 %100
+               OpStore %98 %101
+        %103 = OpLoad %8 %10
+        %104 = OpLoad %76 %84
+        %105 = OpMatrixTimesVector %7 %103 %104
+               OpStore %102 %105
+        %107 = OpLoad %8 %68
+        %108 = OpLoad %76 %84
+        %109 = OpMatrixTimesVector %7 %107 %108
+               OpStore %106 %109
+        %112 = OpAccessChain %111 %102 %110
+        %113 = OpLoad %6 %112
+        %114 = OpAccessChain %111 %106 %110
+        %115 = OpLoad %6 %114
+        %117 = OpFOrdGreaterThan %116 %113 %115
+               OpSelectionMerge %119 None
+               OpBranchConditional %117 %118 %136
+        %118 = OpLabel
+        %122 = OpAccessChain %20 %17 %18 %19
+        %123 = OpLoad %11 %122
+        %124 = OpConvertSToF %6 %123
+        %126 = OpAccessChain %20 %17 %18 %125
+        %127 = OpLoad %11 %126
+        %128 = OpConvertSToF %6 %127
+        %129 = OpAccessChain %20 %17 %18 %125
+        %130 = OpLoad %11 %129
+        %131 = OpConvertSToF %6 %130
+        %132 = OpAccessChain %20 %17 %18 %19
+        %133 = OpLoad %11 %132
+        %134 = OpConvertSToF %6 %133
+        %135 = OpCompositeConstruct %7 %124 %128 %131 %134
+               OpStore %121 %135
+               OpBranch %119
+        %136 = OpLabel
+        %137 = OpAccessChain %20 %17 %18 %125
+        %138 = OpLoad %11 %137
+        %139 = OpConvertSToF %6 %138
+        %140 = OpCompositeConstruct %7 %139 %139 %139 %139
+               OpStore %121 %140
+               OpBranch %119
+        %119 = OpLabel
+        %141 = OpAccessChain %111 %94 %110
+        %142 = OpLoad %6 %141
+        %143 = OpAccessChain %111 %98 %110
+        %144 = OpLoad %6 %143
+        %145 = OpFOrdLessThan %116 %142 %144
+               OpSelectionMerge %147 None
+               OpBranchConditional %145 %146 %147
+        %146 = OpLabel
+        %154 = OpAccessChain %153 %152 %18 %18
+        %155 = OpLoad %6 %154
+        %157 = OpAccessChain %156 %121 %148
+               OpStore %157 %155
+               OpBranch %147
+        %147 = OpLabel
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# _GLF_uniform_int_values
+BUFFER variant__GLF_uniform_int_values DATA_TYPE int32[] STD140 DATA
+ 50 10 11 12 1 2 3 6 7 0 5 9
+END
+# _GLF_uniform_float_values
+BUFFER variant__GLF_uniform_float_values DATA_TYPE float[] STD140 DATA
+ 0.0
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 256 256
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant__GLF_uniform_int_values AS uniform DESCRIPTOR_SET 0 BINDING 1
+  BIND BUFFER variant__GLF_uniform_float_values AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256
+
+EXPECT variant_framebuffer IDX 0 0 SIZE 256 256 EQ_RGBA 255 0 0 255
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-apfloat-unpackunorm-loop.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-apfloat-unpackunorm-loop.amber
new file mode 100644
index 0000000..b15112a
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-apfloat-unpackunorm-loop.amber
@@ -0,0 +1,188 @@
+#!amber
+
+# Copyright 2020 Google LLC
+#
+# 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.
+
+
+# A test for a coverage-gap found by the GraphicsFuzz project.
+
+# Short description: A fragment shader that covers a specific floating point code path
+
+# The test passes because the shader always writes red.
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+# variant_fragment_shader is derived from the following GLSL:
+# #version 310 es
+# #define _int_1 _GLF_uniform_int_values[0]
+# #define _int_0 _GLF_uniform_int_values[1]
+# #define _int_5 _GLF_uniform_int_values[2]
+#
+# precision highp float;
+#
+# precision highp int;
+#
+# // Contents of _GLF_uniform_int_values: [1, 0]
+# layout(set = 0, binding = 0) uniform buf0
+# {
+#     int _GLF_uniform_int_values[3];
+# };
+#
+# layout(location = 0) out vec4 _GLF_color;
+#
+# void main()
+# {
+#     for (int i = _int_0; i < _int_5; i++)
+#     {
+#         vec4 v = unpackUnorm4x8(100u);
+#
+#         // Always false.
+#         if (int(v.x) > i)
+#         {
+#             _GLF_color = vec4(_int_0);
+#             return;
+#         }
+#     }
+#     _GLF_color = vec4(_int_1, _int_0, _int_0, _int_1);
+# }
+SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 8
+; Bound: 68
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %47
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 310
+               OpName %4 "main"
+               OpName %8 "i"
+               OpName %12 "buf0"
+               OpMemberName %12 0 "_GLF_uniform_int_values"
+               OpName %14 ""
+               OpName %34 "v"
+               OpName %47 "_GLF_color"
+               OpDecorate %11 ArrayStride 16
+               OpMemberDecorate %12 0 Offset 0
+               OpDecorate %12 Block
+               OpDecorate %14 DescriptorSet 0
+               OpDecorate %14 Binding 0
+               OpDecorate %47 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeInt 32 1
+          %7 = OpTypePointer Function %6
+          %9 = OpTypeInt 32 0
+         %10 = OpConstant %9 3
+         %11 = OpTypeArray %6 %10
+         %12 = OpTypeStruct %11
+         %13 = OpTypePointer Uniform %12
+         %14 = OpVariable %13 Uniform
+         %15 = OpConstant %6 0
+         %16 = OpConstant %6 1
+         %17 = OpTypePointer Uniform %6
+         %26 = OpConstant %6 2
+         %29 = OpTypeBool
+         %31 = OpTypeFloat 32
+         %32 = OpTypeVector %31 4
+         %33 = OpTypePointer Function %32
+         %35 = OpConstant %9 100
+         %37 = OpConstant %9 0
+         %38 = OpTypePointer Function %31
+         %46 = OpTypePointer Output %32
+         %47 = OpVariable %46 Output
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+          %8 = OpVariable %7 Function
+         %34 = OpVariable %33 Function
+         %18 = OpAccessChain %17 %14 %15 %16
+         %19 = OpLoad %6 %18
+               OpStore %8 %19
+               OpBranch %20
+         %20 = OpLabel
+               OpLoopMerge %22 %23 None
+               OpBranch %24
+         %24 = OpLabel
+         %25 = OpLoad %6 %8
+         %27 = OpAccessChain %17 %14 %15 %26
+         %28 = OpLoad %6 %27
+         %30 = OpSLessThan %29 %25 %28
+               OpBranchConditional %30 %21 %22
+         %21 = OpLabel
+         %36 = OpExtInst %32 %1 UnpackUnorm4x8 %35
+               OpStore %34 %36
+         %39 = OpAccessChain %38 %34 %37
+         %40 = OpLoad %31 %39
+         %41 = OpConvertFToS %6 %40
+         %42 = OpLoad %6 %8
+         %43 = OpSGreaterThan %29 %41 %42
+               OpSelectionMerge %45 None
+               OpBranchConditional %43 %44 %45
+         %44 = OpLabel
+         %48 = OpAccessChain %17 %14 %15 %16
+         %49 = OpLoad %6 %48
+         %50 = OpConvertSToF %31 %49
+         %51 = OpCompositeConstruct %32 %50 %50 %50 %50
+               OpStore %47 %51
+               OpReturn
+         %45 = OpLabel
+               OpBranch %23
+         %23 = OpLabel
+         %53 = OpLoad %6 %8
+         %54 = OpIAdd %6 %53 %16
+               OpStore %8 %54
+               OpBranch %20
+         %22 = OpLabel
+         %55 = OpAccessChain %17 %14 %15 %15
+         %56 = OpLoad %6 %55
+         %57 = OpConvertSToF %31 %56
+         %58 = OpAccessChain %17 %14 %15 %16
+         %59 = OpLoad %6 %58
+         %60 = OpConvertSToF %31 %59
+         %61 = OpAccessChain %17 %14 %15 %16
+         %62 = OpLoad %6 %61
+         %63 = OpConvertSToF %31 %62
+         %64 = OpAccessChain %17 %14 %15 %15
+         %65 = OpLoad %6 %64
+         %66 = OpConvertSToF %31 %65
+         %67 = OpCompositeConstruct %32 %57 %60 %63 %66
+               OpStore %47 %67
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# _GLF_uniform_int_values
+BUFFER variant__GLF_uniform_int_values DATA_TYPE int32[] STD140 DATA
+ 1 0 5
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 16 16
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant__GLF_uniform_int_values AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 16 16
+
+EXPECT variant_framebuffer IDX 0 0 SIZE 16 16 EQ_RGBA 255 0 0 255
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-asin-undefined-smoothstep.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-asin-undefined-smoothstep.amber
new file mode 100644
index 0000000..9d5ae2d
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-asin-undefined-smoothstep.amber
@@ -0,0 +1,252 @@
+#!amber
+
+# Copyright 2020 Google LLC
+#
+# 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.
+
+
+# A test for a coverage-gap found by the GraphicsFuzz project.
+
+# Short description: A fragment shader that covers a specific instruction simplify code path
+
+# The test passes because the shader always writes red.
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+# variant_fragment_shader is derived from the following GLSL:
+# #version 310 es
+# #define _float_1_0 _GLF_uniform_float_values[0]
+# #define _float_0_0 _GLF_uniform_float_values[1]
+# #define _float_0_2 _GLF_uniform_float_values[2]
+# #define _float_0_95 _GLF_uniform_float_values[3]
+# #define _float_0_62 _GLF_uniform_float_values[4]
+# #define _float_0_63 _GLF_uniform_float_values[5]
+# #define _float_0_96 _GLF_uniform_float_values[6]
+#
+# precision highp float;
+#
+# // Contents of _GLF_uniform_float_values: [1.0, 0.0, 0.2, 0.95, 0.62, 0.63, 0.96]
+# layout(set = 0, binding = 0) uniform buf0
+# {
+#     float _GLF_uniform_float_values[7];
+# };
+# layout(location = 0) out vec4 _GLF_color;
+#
+# void main()
+# {
+#     vec4 v1 = vec4(_float_0_2, _float_0_2, _float_1_0, _float_0_2);
+#
+#     // This results in an undefined value, but not in undefined behavior. v2 becomes
+#     // [1.57, 1.11, undefined, 0.92]. The undefined z-component doesn't matter
+#     // since it's not accessed when assigning the final color.
+#     vec4 v2 = asin(vec4(1.0, 0.9, 1.1, 0.8));
+#
+#     vec4 v3 = vec4(_float_1_0);
+#     vec4 v4 = smoothstep(v1, v2, v3);
+#
+#     _GLF_color = v4.xywx;
+#
+#     if (v4.x > _float_0_62 && v4.x < _float_0_63 && v4.y > _float_0_95
+#         && v4.y < _float_0_96 && v4.w == _float_1_0)
+#     {
+#         _GLF_color = vec4(_float_1_0, _float_0_0, _float_0_0, _float_1_0);
+#     }
+#     else
+#     {
+#         _GLF_color = vec4(_float_0_0);
+#     }
+# }
+SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 10
+; Bound: 110
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %45
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 310
+               OpName %4 "main"
+               OpName %9 "v1"
+               OpName %13 "buf0"
+               OpMemberName %13 0 "_GLF_uniform_float_values"
+               OpName %15 ""
+               OpName %29 "v2"
+               OpName %35 "v3"
+               OpName %39 "v4"
+               OpName %45 "_GLF_color"
+               OpDecorate %12 ArrayStride 16
+               OpMemberDecorate %13 0 Offset 0
+               OpDecorate %13 Block
+               OpDecorate %15 DescriptorSet 0
+               OpDecorate %15 Binding 0
+               OpDecorate %45 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeFloat 32
+          %7 = OpTypeVector %6 4
+          %8 = OpTypePointer Function %7
+         %10 = OpTypeInt 32 0
+         %11 = OpConstant %10 7
+         %12 = OpTypeArray %6 %11
+         %13 = OpTypeStruct %12
+         %14 = OpTypePointer Uniform %13
+         %15 = OpVariable %14 Uniform
+         %16 = OpTypeInt 32 1
+         %17 = OpConstant %16 0
+         %18 = OpConstant %16 2
+         %19 = OpTypePointer Uniform %6
+         %30 = OpConstant %6 1.57079637
+         %31 = OpConstant %6 1.11976957
+         %32 = OpConstant %6 0x1.8p+128
+         %33 = OpConstant %6 0.927295208
+         %34 = OpConstantComposite %7 %30 %31 %32 %33
+         %44 = OpTypePointer Output %7
+         %45 = OpVariable %44 Output
+         %48 = OpTypeBool
+         %49 = OpConstant %10 0
+         %50 = OpTypePointer Function %6
+         %53 = OpConstant %16 4
+         %61 = OpConstant %16 5
+         %68 = OpConstant %10 1
+         %71 = OpConstant %16 3
+         %80 = OpConstant %16 6
+         %87 = OpConstant %10 3
+         %98 = OpConstant %16 1
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+          %9 = OpVariable %8 Function
+         %29 = OpVariable %8 Function
+         %35 = OpVariable %8 Function
+         %39 = OpVariable %8 Function
+         %20 = OpAccessChain %19 %15 %17 %18
+         %21 = OpLoad %6 %20
+         %22 = OpAccessChain %19 %15 %17 %18
+         %23 = OpLoad %6 %22
+         %24 = OpAccessChain %19 %15 %17 %17
+         %25 = OpLoad %6 %24
+         %26 = OpAccessChain %19 %15 %17 %18
+         %27 = OpLoad %6 %26
+         %28 = OpCompositeConstruct %7 %21 %23 %25 %27
+               OpStore %9 %28
+               OpStore %29 %34
+         %36 = OpAccessChain %19 %15 %17 %17
+         %37 = OpLoad %6 %36
+         %38 = OpCompositeConstruct %7 %37 %37 %37 %37
+               OpStore %35 %38
+         %40 = OpLoad %7 %9
+         %41 = OpLoad %7 %29
+         %42 = OpLoad %7 %35
+         %43 = OpExtInst %7 %1 SmoothStep %40 %41 %42
+               OpStore %39 %43
+         %46 = OpLoad %7 %39
+         %47 = OpVectorShuffle %7 %46 %46 0 1 3 0
+               OpStore %45 %47
+         %51 = OpAccessChain %50 %39 %49
+         %52 = OpLoad %6 %51
+         %54 = OpAccessChain %19 %15 %17 %53
+         %55 = OpLoad %6 %54
+         %56 = OpFOrdGreaterThan %48 %52 %55
+               OpSelectionMerge %58 None
+               OpBranchConditional %56 %57 %58
+         %57 = OpLabel
+         %59 = OpAccessChain %50 %39 %49
+         %60 = OpLoad %6 %59
+         %62 = OpAccessChain %19 %15 %17 %61
+         %63 = OpLoad %6 %62
+         %64 = OpFOrdLessThan %48 %60 %63
+               OpBranch %58
+         %58 = OpLabel
+         %65 = OpPhi %48 %56 %5 %64 %57
+               OpSelectionMerge %67 None
+               OpBranchConditional %65 %66 %67
+         %66 = OpLabel
+         %69 = OpAccessChain %50 %39 %68
+         %70 = OpLoad %6 %69
+         %72 = OpAccessChain %19 %15 %17 %71
+         %73 = OpLoad %6 %72
+         %74 = OpFOrdGreaterThan %48 %70 %73
+               OpBranch %67
+         %67 = OpLabel
+         %75 = OpPhi %48 %65 %58 %74 %66
+               OpSelectionMerge %77 None
+               OpBranchConditional %75 %76 %77
+         %76 = OpLabel
+         %78 = OpAccessChain %50 %39 %68
+         %79 = OpLoad %6 %78
+         %81 = OpAccessChain %19 %15 %17 %80
+         %82 = OpLoad %6 %81
+         %83 = OpFOrdLessThan %48 %79 %82
+               OpBranch %77
+         %77 = OpLabel
+         %84 = OpPhi %48 %75 %67 %83 %76
+               OpSelectionMerge %86 None
+               OpBranchConditional %84 %85 %86
+         %85 = OpLabel
+         %88 = OpAccessChain %50 %39 %87
+         %89 = OpLoad %6 %88
+         %90 = OpAccessChain %19 %15 %17 %17
+         %91 = OpLoad %6 %90
+         %92 = OpFOrdEqual %48 %89 %91
+               OpBranch %86
+         %86 = OpLabel
+         %93 = OpPhi %48 %84 %77 %92 %85
+               OpSelectionMerge %95 None
+               OpBranchConditional %93 %94 %106
+         %94 = OpLabel
+         %96 = OpAccessChain %19 %15 %17 %17
+         %97 = OpLoad %6 %96
+         %99 = OpAccessChain %19 %15 %17 %98
+        %100 = OpLoad %6 %99
+        %101 = OpAccessChain %19 %15 %17 %98
+        %102 = OpLoad %6 %101
+        %103 = OpAccessChain %19 %15 %17 %17
+        %104 = OpLoad %6 %103
+        %105 = OpCompositeConstruct %7 %97 %100 %102 %104
+               OpStore %45 %105
+               OpBranch %95
+        %106 = OpLabel
+        %107 = OpAccessChain %19 %15 %17 %98
+        %108 = OpLoad %6 %107
+        %109 = OpCompositeConstruct %7 %108 %108 %108 %108
+               OpStore %45 %109
+               OpBranch %95
+         %95 = OpLabel
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# _GLF_uniform_float_values
+BUFFER variant__GLF_uniform_float_values DATA_TYPE float[] STD140 DATA
+ 1.0 0.0 0.2 0.95 0.62 0.63 0.96
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 256 256
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant__GLF_uniform_float_values AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256
+
+EXPECT variant_framebuffer IDX 0 0 SIZE 256 256 EQ_RGBA 255 0 0 255
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-bitfieldExtract-undefined.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-bitfieldExtract-undefined.amber
new file mode 100644
index 0000000..e6ab9c2
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-bitfieldExtract-undefined.amber
@@ -0,0 +1,176 @@
+#!amber
+
+# Copyright 2020 Google LLC
+#
+# 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.
+
+
+# A test for a coverage-gap found by the GraphicsFuzz project.
+
+# Short description: A fragment shader that covers a specific constant fold code path
+
+# The test passes because the shader always writes red.
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+# variant_fragment_shader is derived from the following GLSL:
+# #version 310 es
+# #define _int_1 _GLF_uniform_int_values[0]
+# #define _int_0 _GLF_uniform_int_values[1]
+#
+# precision highp float;
+# precision highp int;
+#
+# // Contents of _GLF_uniform_int_values: [1, 0]
+# layout(set = 0, binding = 0) uniform buf0
+# {
+#     int _GLF_uniform_int_values[2];
+# };
+#
+# layout(location = 0) out vec4 _GLF_color;
+#
+# void main()
+# {
+#     uint a = 0x77777777u;
+#
+#     // b becomes undefined. This results in an undefined value, but not in undefined behavior.
+#     uint b = bitfieldExtract(a, -1, 1);
+#
+#     uint c = a | b;
+#
+#     // Always true.
+#     if ((c & a) == a)
+#     {
+#         _GLF_color = vec4(_int_1, _int_0, _int_0, _int_1);
+#     }
+#     else
+#     {
+#         _GLF_color = vec4(_int_0);
+#     }
+# }
+SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 10
+; Bound: 57
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %31
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 310
+               OpName %4 "main"
+               OpName %8 "a"
+               OpName %10 "b"
+               OpName %16 "c"
+               OpName %31 "_GLF_color"
+               OpName %34 "buf0"
+               OpMemberName %34 0 "_GLF_uniform_int_values"
+               OpName %36 ""
+               OpDecorate %31 Location 0
+               OpDecorate %33 ArrayStride 16
+               OpMemberDecorate %34 0 Offset 0
+               OpDecorate %34 Block
+               OpDecorate %36 DescriptorSet 0
+               OpDecorate %36 Binding 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeInt 32 0
+          %7 = OpTypePointer Function %6
+          %9 = OpConstant %6 2004318071
+         %12 = OpTypeInt 32 1
+         %13 = OpConstant %12 -1
+         %14 = OpConstant %12 1
+         %24 = OpTypeBool
+         %28 = OpTypeFloat 32
+         %29 = OpTypeVector %28 4
+         %30 = OpTypePointer Output %29
+         %31 = OpVariable %30 Output
+         %32 = OpConstant %6 2
+         %33 = OpTypeArray %12 %32
+         %34 = OpTypeStruct %33
+         %35 = OpTypePointer Uniform %34
+         %36 = OpVariable %35 Uniform
+         %37 = OpConstant %12 0
+         %38 = OpTypePointer Uniform %12
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+          %8 = OpVariable %7 Function
+         %10 = OpVariable %7 Function
+         %16 = OpVariable %7 Function
+               OpStore %8 %9
+         %11 = OpLoad %6 %8
+         %15 = OpBitFieldUExtract %6 %11 %13 %14
+               OpStore %10 %15
+         %17 = OpLoad %6 %8
+         %18 = OpLoad %6 %10
+         %19 = OpBitwiseOr %6 %17 %18
+               OpStore %16 %19
+         %20 = OpLoad %6 %16
+         %21 = OpLoad %6 %8
+         %22 = OpBitwiseAnd %6 %20 %21
+         %23 = OpLoad %6 %8
+         %25 = OpIEqual %24 %22 %23
+               OpSelectionMerge %27 None
+               OpBranchConditional %25 %26 %52
+         %26 = OpLabel
+         %39 = OpAccessChain %38 %36 %37 %37
+         %40 = OpLoad %12 %39
+         %41 = OpConvertSToF %28 %40
+         %42 = OpAccessChain %38 %36 %37 %14
+         %43 = OpLoad %12 %42
+         %44 = OpConvertSToF %28 %43
+         %45 = OpAccessChain %38 %36 %37 %14
+         %46 = OpLoad %12 %45
+         %47 = OpConvertSToF %28 %46
+         %48 = OpAccessChain %38 %36 %37 %37
+         %49 = OpLoad %12 %48
+         %50 = OpConvertSToF %28 %49
+         %51 = OpCompositeConstruct %29 %41 %44 %47 %50
+               OpStore %31 %51
+               OpBranch %27
+         %52 = OpLabel
+         %53 = OpAccessChain %38 %36 %37 %14
+         %54 = OpLoad %12 %53
+         %55 = OpConvertSToF %28 %54
+         %56 = OpCompositeConstruct %29 %55 %55 %55 %55
+               OpStore %31 %56
+               OpBranch %27
+         %27 = OpLabel
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# _GLF_uniform_int_values
+BUFFER variant__GLF_uniform_int_values DATA_TYPE int32[] STD140 DATA
+ 1 0
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 256 256
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant__GLF_uniform_int_values AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256
+
+EXPECT variant_framebuffer IDX 0 0 SIZE 256 256 EQ_RGBA 255 0 0 255
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-bitfieldinsert-undefined.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-bitfieldinsert-undefined.amber
new file mode 100644
index 0000000..e64ff70
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-bitfieldinsert-undefined.amber
@@ -0,0 +1,303 @@
+#!amber
+
+# Copyright 2020 Google LLC
+#
+# 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.
+
+
+# A test for a coverage-gap found by the GraphicsFuzz project.
+
+# Short description: A fragment shader that covers a specific instruction simplify code path
+
+# The test passes because the shader always writes red.
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+# variant_fragment_shader is derived from the following GLSL:
+# #version 310 es
+# #define _int_1 _GLF_uniform_int_values[0]
+# #define _int_32 _GLF_uniform_int_values[1]
+# #define _int_0 _GLF_uniform_int_values[2]
+# #define _int_10 _GLF_uniform_int_values[3]
+# #define _int_2 _GLF_uniform_int_values[4]
+# #define _float_0_0 _GLF_uniform_float_values[0]
+#
+# precision highp float;
+#
+# precision highp int;
+#
+# // Contents of _GLF_uniform_float_values: 0.0
+# layout(set = 0, binding = 0) uniform buf0
+# {
+#     float _GLF_uniform_float_values[1];
+# };
+# // Contents of _GLF_uniform_int_values: [1, 32, 0, 10]
+# layout(set = 0, binding = 1) uniform buf1
+# {
+#     int _GLF_uniform_int_values[5];
+# };
+# layout(location = 0) out vec4 _GLF_color;
+#
+# void main()
+# {
+#     int a = _int_0;
+#     int b = _int_10;
+#     int c = 1;
+#
+#     // Always false.
+#     if (gl_FragCoord.x < _float_0_0)
+#         c--;
+#
+#     // This results in an undefined value, but not in undefined behavior. Assigning
+#     // an undefined value doesn't matter since d is reassigned a value >= 2 before
+#     // using it.
+#     int d = bitfieldInsert(1, 1, 32, c);
+#
+#     if (d < _int_1)
+#         d = _int_2;
+#
+#     while ((a < b) || (d < _int_1))
+#     {
+#         d = bitfieldInsert(_int_1, _int_1, _int_32, c);
+#
+#         if (d < _int_1)
+#             d = _int_2;
+#
+#         a++;
+#     }
+#
+#     if (a == _int_10)
+#         _GLF_color = vec4(_int_1, _int_0, _int_0, _int_1);
+#     else
+#         _GLF_color = vec4(_int_0);
+# }
+SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 10
+; Bound: 121
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %29 %102
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 310
+               OpName %4 "main"
+               OpName %8 "a"
+               OpName %12 "buf1"
+               OpMemberName %12 0 "_GLF_uniform_int_values"
+               OpName %14 ""
+               OpName %20 "b"
+               OpName %24 "c"
+               OpName %29 "gl_FragCoord"
+               OpName %36 "buf0"
+               OpMemberName %36 0 "_GLF_uniform_float_values"
+               OpName %38 ""
+               OpName %48 "d"
+               OpName %102 "_GLF_color"
+               OpDecorate %11 ArrayStride 16
+               OpMemberDecorate %12 0 Offset 0
+               OpDecorate %12 Block
+               OpDecorate %14 DescriptorSet 0
+               OpDecorate %14 Binding 1
+               OpDecorate %29 BuiltIn FragCoord
+               OpDecorate %35 ArrayStride 16
+               OpMemberDecorate %36 0 Offset 0
+               OpDecorate %36 Block
+               OpDecorate %38 DescriptorSet 0
+               OpDecorate %38 Binding 0
+               OpDecorate %102 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeInt 32 1
+          %7 = OpTypePointer Function %6
+          %9 = OpTypeInt 32 0
+         %10 = OpConstant %9 5
+         %11 = OpTypeArray %6 %10
+         %12 = OpTypeStruct %11
+         %13 = OpTypePointer Uniform %12
+         %14 = OpVariable %13 Uniform
+         %15 = OpConstant %6 0
+         %16 = OpConstant %6 2
+         %17 = OpTypePointer Uniform %6
+         %21 = OpConstant %6 3
+         %25 = OpConstant %6 1
+         %26 = OpTypeFloat 32
+         %27 = OpTypeVector %26 4
+         %28 = OpTypePointer Input %27
+         %29 = OpVariable %28 Input
+         %30 = OpConstant %9 0
+         %31 = OpTypePointer Input %26
+         %34 = OpConstant %9 1
+         %35 = OpTypeArray %26 %34
+         %36 = OpTypeStruct %35
+         %37 = OpTypePointer Uniform %36
+         %38 = OpVariable %37 Uniform
+         %39 = OpTypePointer Uniform %26
+         %42 = OpTypeBool
+         %49 = OpConstant %6 32
+         %58 = OpConstant %6 4
+        %101 = OpTypePointer Output %27
+        %102 = OpVariable %101 Output
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+          %8 = OpVariable %7 Function
+         %20 = OpVariable %7 Function
+         %24 = OpVariable %7 Function
+         %48 = OpVariable %7 Function
+         %18 = OpAccessChain %17 %14 %15 %16
+         %19 = OpLoad %6 %18
+               OpStore %8 %19
+         %22 = OpAccessChain %17 %14 %15 %21
+         %23 = OpLoad %6 %22
+               OpStore %20 %23
+               OpStore %24 %25
+         %32 = OpAccessChain %31 %29 %30
+         %33 = OpLoad %26 %32
+         %40 = OpAccessChain %39 %38 %15 %15
+         %41 = OpLoad %26 %40
+         %43 = OpFOrdLessThan %42 %33 %41
+               OpSelectionMerge %45 None
+               OpBranchConditional %43 %44 %45
+         %44 = OpLabel
+         %46 = OpLoad %6 %24
+         %47 = OpISub %6 %46 %25
+               OpStore %24 %47
+               OpBranch %45
+         %45 = OpLabel
+         %50 = OpLoad %6 %24
+         %51 = OpBitFieldInsert %6 %25 %25 %49 %50
+               OpStore %48 %51
+         %52 = OpLoad %6 %48
+         %53 = OpAccessChain %17 %14 %15 %15
+         %54 = OpLoad %6 %53
+         %55 = OpSLessThan %42 %52 %54
+               OpSelectionMerge %57 None
+               OpBranchConditional %55 %56 %57
+         %56 = OpLabel
+         %59 = OpAccessChain %17 %14 %15 %58
+         %60 = OpLoad %6 %59
+               OpStore %48 %60
+               OpBranch %57
+         %57 = OpLabel
+               OpBranch %61
+         %61 = OpLabel
+               OpLoopMerge %63 %64 None
+               OpBranch %65
+         %65 = OpLabel
+         %66 = OpLoad %6 %8
+         %67 = OpLoad %6 %20
+         %68 = OpSLessThan %42 %66 %67
+         %69 = OpLogicalNot %42 %68
+               OpSelectionMerge %71 None
+               OpBranchConditional %69 %70 %71
+         %70 = OpLabel
+         %72 = OpLoad %6 %48
+         %73 = OpAccessChain %17 %14 %15 %15
+         %74 = OpLoad %6 %73
+         %75 = OpSLessThan %42 %72 %74
+               OpBranch %71
+         %71 = OpLabel
+         %76 = OpPhi %42 %68 %65 %75 %70
+               OpBranchConditional %76 %62 %63
+         %62 = OpLabel
+         %77 = OpAccessChain %17 %14 %15 %15
+         %78 = OpLoad %6 %77
+         %79 = OpAccessChain %17 %14 %15 %15
+         %80 = OpLoad %6 %79
+         %81 = OpAccessChain %17 %14 %15 %25
+         %82 = OpLoad %6 %81
+         %83 = OpLoad %6 %24
+         %84 = OpBitFieldInsert %6 %78 %80 %82 %83
+               OpStore %48 %84
+         %85 = OpLoad %6 %48
+         %86 = OpAccessChain %17 %14 %15 %15
+         %87 = OpLoad %6 %86
+         %88 = OpSLessThan %42 %85 %87
+               OpSelectionMerge %90 None
+               OpBranchConditional %88 %89 %90
+         %89 = OpLabel
+         %91 = OpAccessChain %17 %14 %15 %58
+         %92 = OpLoad %6 %91
+               OpStore %48 %92
+               OpBranch %90
+         %90 = OpLabel
+         %93 = OpLoad %6 %8
+         %94 = OpIAdd %6 %93 %25
+               OpStore %8 %94
+               OpBranch %64
+         %64 = OpLabel
+               OpBranch %61
+         %63 = OpLabel
+         %95 = OpLoad %6 %8
+         %96 = OpAccessChain %17 %14 %15 %21
+         %97 = OpLoad %6 %96
+         %98 = OpIEqual %42 %95 %97
+               OpSelectionMerge %100 None
+               OpBranchConditional %98 %99 %116
+         %99 = OpLabel
+        %103 = OpAccessChain %17 %14 %15 %15
+        %104 = OpLoad %6 %103
+        %105 = OpConvertSToF %26 %104
+        %106 = OpAccessChain %17 %14 %15 %16
+        %107 = OpLoad %6 %106
+        %108 = OpConvertSToF %26 %107
+        %109 = OpAccessChain %17 %14 %15 %16
+        %110 = OpLoad %6 %109
+        %111 = OpConvertSToF %26 %110
+        %112 = OpAccessChain %17 %14 %15 %15
+        %113 = OpLoad %6 %112
+        %114 = OpConvertSToF %26 %113
+        %115 = OpCompositeConstruct %27 %105 %108 %111 %114
+               OpStore %102 %115
+               OpBranch %100
+        %116 = OpLabel
+        %117 = OpAccessChain %17 %14 %15 %16
+        %118 = OpLoad %6 %117
+        %119 = OpConvertSToF %26 %118
+        %120 = OpCompositeConstruct %27 %119 %119 %119 %119
+               OpStore %102 %120
+               OpBranch %100
+        %100 = OpLabel
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# _GLF_uniform_int_values
+BUFFER variant__GLF_uniform_int_values DATA_TYPE int32[] STD140 DATA
+ 1 32 0 10 2
+END
+# _GLF_uniform_float_values
+BUFFER variant__GLF_uniform_float_values DATA_TYPE float[] STD140 DATA
+ 0.0
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 256 256
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant__GLF_uniform_int_values AS uniform DESCRIPTOR_SET 0 BINDING 1
+  BIND BUFFER variant__GLF_uniform_float_values AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256
+
+EXPECT variant_framebuffer IDX 0 0 SIZE 256 256 EQ_RGBA 255 0 0 255
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-bitfieldreverse-left-shift-findmsb.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-bitfieldreverse-left-shift-findmsb.amber
new file mode 100644
index 0000000..1bf52d5
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-bitfieldreverse-left-shift-findmsb.amber
@@ -0,0 +1,179 @@
+#!amber
+
+# Copyright 2020 Google LLC
+#
+# 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.
+
+
+# A test for a coverage-gap found by the GraphicsFuzz project.
+
+# Short description: Covers specific DAG combiner and legalize vector ops code paths
+
+# The test passes because the shader always writes red.
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+# variant_fragment_shader is derived from the following GLSL:
+# #version 310 es
+# #define _int_1 _GLF_uniform_int_values[0]
+# #define _int_0 _GLF_uniform_int_values[1]
+#
+# precision highp int;
+#
+# precision highp float;
+#
+# // Contents of _GLF_uniform_int_values: [1, 0]
+# layout(set = 0, binding = 0) uniform buf0
+# {
+#     int _GLF_uniform_int_values[2];
+# };
+#
+# layout(location = 0) out vec4 _GLF_color;
+#
+# void main()
+# {
+#     // a becomes -2147483648.
+#     int a = bitfieldReverse(1);
+#
+#     // a is negative therefore this results in an undefined value, but not in undefined behavior.
+#     int b = 1 << a;
+#
+#     int c = findMSB(b);
+#
+#     _GLF_color = vec4(c);
+#
+#     if (a == -2147483648)
+#     {
+#         _GLF_color = vec4(_int_1, _int_0, _int_0, _int_1);
+#     }
+#     else
+#     {
+#         _GLF_color = vec4(_int_0);
+#     }
+# }
+SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 10
+; Bound: 56
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %20
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 310
+               OpName %4 "main"
+               OpName %8 "a"
+               OpName %11 "b"
+               OpName %14 "c"
+               OpName %20 "_GLF_color"
+               OpName %33 "buf0"
+               OpMemberName %33 0 "_GLF_uniform_int_values"
+               OpName %35 ""
+               OpDecorate %20 Location 0
+               OpDecorate %32 ArrayStride 16
+               OpMemberDecorate %33 0 Offset 0
+               OpDecorate %33 Block
+               OpDecorate %35 DescriptorSet 0
+               OpDecorate %35 Binding 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeInt 32 1
+          %7 = OpTypePointer Function %6
+          %9 = OpConstant %6 1
+         %17 = OpTypeFloat 32
+         %18 = OpTypeVector %17 4
+         %19 = OpTypePointer Output %18
+         %20 = OpVariable %19 Output
+         %25 = OpConstant %6 -2147483648
+         %26 = OpTypeBool
+         %30 = OpTypeInt 32 0
+         %31 = OpConstant %30 2
+         %32 = OpTypeArray %6 %31
+         %33 = OpTypeStruct %32
+         %34 = OpTypePointer Uniform %33
+         %35 = OpVariable %34 Uniform
+         %36 = OpConstant %6 0
+         %37 = OpTypePointer Uniform %6
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+          %8 = OpVariable %7 Function
+         %11 = OpVariable %7 Function
+         %14 = OpVariable %7 Function
+         %10 = OpBitReverse %6 %9
+               OpStore %8 %10
+         %12 = OpLoad %6 %8
+         %13 = OpShiftLeftLogical %6 %9 %12
+               OpStore %11 %13
+         %15 = OpLoad %6 %11
+         %16 = OpExtInst %6 %1 FindSMsb %15
+               OpStore %14 %16
+         %21 = OpLoad %6 %14
+         %22 = OpConvertSToF %17 %21
+         %23 = OpCompositeConstruct %18 %22 %22 %22 %22
+               OpStore %20 %23
+         %24 = OpLoad %6 %8
+         %27 = OpIEqual %26 %24 %25
+               OpSelectionMerge %29 None
+               OpBranchConditional %27 %28 %51
+         %28 = OpLabel
+         %38 = OpAccessChain %37 %35 %36 %36
+         %39 = OpLoad %6 %38
+         %40 = OpConvertSToF %17 %39
+         %41 = OpAccessChain %37 %35 %36 %9
+         %42 = OpLoad %6 %41
+         %43 = OpConvertSToF %17 %42
+         %44 = OpAccessChain %37 %35 %36 %9
+         %45 = OpLoad %6 %44
+         %46 = OpConvertSToF %17 %45
+         %47 = OpAccessChain %37 %35 %36 %36
+         %48 = OpLoad %6 %47
+         %49 = OpConvertSToF %17 %48
+         %50 = OpCompositeConstruct %18 %40 %43 %46 %49
+               OpStore %20 %50
+               OpBranch %29
+         %51 = OpLabel
+         %52 = OpAccessChain %37 %35 %36 %9
+         %53 = OpLoad %6 %52
+         %54 = OpConvertSToF %17 %53
+         %55 = OpCompositeConstruct %18 %54 %54 %54 %54
+               OpStore %20 %55
+               OpBranch %29
+         %29 = OpLabel
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# _GLF_uniform_int_values
+BUFFER variant__GLF_uniform_int_values DATA_TYPE int32[] STD140 DATA
+ 1 0
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 256 256
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant__GLF_uniform_int_values AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256
+
+EXPECT variant_framebuffer IDX 0 0 SIZE 256 256 EQ_RGBA 255 0 0 255
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-color-overwrite-identity-matrix-multiply.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-color-overwrite-identity-matrix-multiply.amber
new file mode 100644
index 0000000..9c22c4d
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-color-overwrite-identity-matrix-multiply.amber
@@ -0,0 +1,192 @@
+#!amber
+
+# Copyright 2020 Google LLC
+#
+# 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.
+
+
+# A test for a coverage-gap found by the GraphicsFuzz project.
+
+# Short description: A fragment shader that covers a specific DAG code paths
+
+# The test passes because the shader always writes red.
+
+# Optimized using spirv-opt with the following arguments:
+# '-O'
+# spirv-opt commit hash: a187dd58a0485988841d325a85c8e6063f53500a
+
+
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+# variant_fragment_shader is derived from the following GLSL:
+# #version 310 es
+# #define _float_1_0 _GLF_uniform_float_values[0]
+# #define _float_0_0 _GLF_uniform_float_values[1]
+# #define _float_0_1 _GLF_uniform_float_values[2]
+# #define _float_0_3 _GLF_uniform_float_values[3]
+# #define _float_0_2 _GLF_uniform_float_values[4]
+#
+# precision highp float;
+#
+# precision highp int;
+#
+# // Contents of _GLF_uniform_float_values: [1.0, 0.0, 0.1, 0.3, 0.2]
+# layout(set = 0, binding = 0) uniform buf0
+# {
+#     float _GLF_uniform_float_values[5];
+# };
+#
+# layout(location = 0) out vec4 _GLF_color;
+#
+# void main()
+# {
+#     // These conditions don't matter since the color
+#     // gets overwritten right after.
+#     if(gl_FragCoord.x > _float_1_0)
+#     {
+#         _GLF_color = vec4(_float_0_1);
+#         if(gl_FragCoord.y > _float_1_0)
+#         {
+#             _GLF_color = vec4(_float_0_2);
+#         }
+#         _GLF_color = vec4(_float_0_3);
+#     }
+#
+#     _GLF_color = vec4(_float_1_0, _float_0_0, _float_0_0, 10.0);
+#     // Multiplying by an identity matrix doesn't change the vector value.
+#     _GLF_color = mat4(_float_1_0) * _GLF_color;
+# }
+SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 10
+; Bound: 72
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %9 %30
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 310
+               OpName %4 "main"
+               OpName %9 "gl_FragCoord"
+               OpName %17 "buf0"
+               OpMemberName %17 0 "_GLF_uniform_float_values"
+               OpName %19 ""
+               OpName %30 "_GLF_color"
+               OpDecorate %9 BuiltIn FragCoord
+               OpDecorate %16 ArrayStride 16
+               OpMemberDecorate %17 0 Offset 0
+               OpDecorate %17 Block
+               OpDecorate %19 DescriptorSet 0
+               OpDecorate %19 Binding 0
+               OpDecorate %30 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeFloat 32
+          %7 = OpTypeVector %6 4
+          %8 = OpTypePointer Input %7
+          %9 = OpVariable %8 Input
+         %10 = OpTypeInt 32 0
+         %11 = OpConstant %10 0
+         %12 = OpTypePointer Input %6
+         %15 = OpConstant %10 5
+         %16 = OpTypeArray %6 %15
+         %17 = OpTypeStruct %16
+         %18 = OpTypePointer Uniform %17
+         %19 = OpVariable %18 Uniform
+         %20 = OpTypeInt 32 1
+         %21 = OpConstant %20 0
+         %22 = OpTypePointer Uniform %6
+         %25 = OpTypeBool
+         %29 = OpTypePointer Output %7
+         %30 = OpVariable %29 Output
+         %31 = OpConstant %20 2
+         %35 = OpConstant %10 1
+         %43 = OpConstant %20 4
+         %47 = OpConstant %20 3
+         %53 = OpConstant %20 1
+         %58 = OpConstant %6 10
+         %62 = OpTypeMatrix %7 4
+         %64 = OpConstant %6 0
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+         %13 = OpAccessChain %12 %9 %11
+         %14 = OpLoad %6 %13
+         %23 = OpAccessChain %22 %19 %21 %21
+         %24 = OpLoad %6 %23
+         %26 = OpFOrdGreaterThan %25 %14 %24
+               OpSelectionMerge %28 None
+               OpBranchConditional %26 %27 %28
+         %27 = OpLabel
+         %32 = OpAccessChain %22 %19 %21 %31
+         %33 = OpLoad %6 %32
+         %34 = OpCompositeConstruct %7 %33 %33 %33 %33
+               OpStore %30 %34
+         %36 = OpAccessChain %12 %9 %35
+         %37 = OpLoad %6 %36
+         %40 = OpFOrdGreaterThan %25 %37 %24
+               OpSelectionMerge %42 None
+               OpBranchConditional %40 %41 %42
+         %41 = OpLabel
+         %44 = OpAccessChain %22 %19 %21 %43
+         %45 = OpLoad %6 %44
+         %46 = OpCompositeConstruct %7 %45 %45 %45 %45
+               OpStore %30 %46
+               OpBranch %42
+         %42 = OpLabel
+         %48 = OpAccessChain %22 %19 %21 %47
+         %49 = OpLoad %6 %48
+         %50 = OpCompositeConstruct %7 %49 %49 %49 %49
+               OpStore %30 %50
+               OpBranch %28
+         %28 = OpLabel
+         %54 = OpAccessChain %22 %19 %21 %53
+         %55 = OpLoad %6 %54
+         %59 = OpCompositeConstruct %7 %24 %55 %55 %58
+               OpStore %30 %59
+         %65 = OpCompositeConstruct %7 %24 %64 %64 %64
+         %66 = OpCompositeConstruct %7 %64 %24 %64 %64
+         %67 = OpCompositeConstruct %7 %64 %64 %24 %64
+         %68 = OpCompositeConstruct %7 %64 %64 %64 %24
+         %69 = OpCompositeConstruct %62 %65 %66 %67 %68
+         %70 = OpLoad %7 %30
+         %71 = OpMatrixTimesVector %7 %69 %70
+               OpStore %30 %71
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# _GLF_uniform_float_values
+BUFFER variant__GLF_uniform_float_values DATA_TYPE float[] STD140 DATA
+ 1.0 0.0 0.1 0.3 0.2
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 16 16
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant__GLF_uniform_float_values AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 16 16
+
+EXPECT variant_framebuffer IDX 0 0 SIZE 16 16 EQ_RGBA 255 0 0 255
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-const-folding-bitfieldinsert-div-one.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-const-folding-bitfieldinsert-div-one.amber
new file mode 100644
index 0000000..953f6e4
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-const-folding-bitfieldinsert-div-one.amber
@@ -0,0 +1,224 @@
+#!amber
+
+# Copyright 2020 Google LLC
+#
+# 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.
+
+
+# A test for a coverage-gap found by the GraphicsFuzz project.
+
+# Short description: A fragment shader that covers a specific const folding path
+
+# The test passes because the shader always writes red.
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+# variant_fragment_shader is derived from the following GLSL:
+# #version 310 es
+# #define _int_10 _GLF_uniform_int_values[0]
+# #define _int_0 _GLF_uniform_int_values[1]
+# #define _int_1 _GLF_uniform_int_values[2]
+# #define _float_9_0 _GLF_uniform_float_values[0]
+#
+# precision highp float;
+# precision highp int;
+#
+# // Contents of _GLF_uniform_float_values: 9.0
+# layout(set = 0, binding = 0) uniform buf0
+# {
+#     float _GLF_uniform_float_values[1];
+# };
+#
+# // Contents of _GLF_uniform_int_values: [10, 0, 1]
+# layout(set = 0, binding = 1) uniform buf1
+# {
+#     int _GLF_uniform_int_values[3];
+# };
+#
+# layout(location = 0) out vec4 _GLF_color;
+#
+# void main()
+# {
+#     float arr[10];
+#     for (int i = _int_0; i < _int_10; i++)
+#     {
+#         arr[i] = float(i);
+#     }
+#
+#     float f = arr[bitfieldInsert(9, 0, 0, 0) / 1];
+#     if (f == _float_9_0)
+#     {
+#         _GLF_color = vec4(_int_1, _int_0, _int_0, 1);
+#     }
+#     else
+#     {
+#         _GLF_color = vec4(0);
+#     }
+# }
+SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 8
+; Bound: 78
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %62
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 310
+               OpName %4 "main"
+               OpName %8 "i"
+               OpName %12 "buf1"
+               OpMemberName %12 0 "_GLF_uniform_int_values"
+               OpName %14 ""
+               OpName %34 "arr"
+               OpName %42 "f"
+               OpName %51 "buf0"
+               OpMemberName %51 0 "_GLF_uniform_float_values"
+               OpName %53 ""
+               OpName %62 "_GLF_color"
+               OpDecorate %11 ArrayStride 16
+               OpMemberDecorate %12 0 Offset 0
+               OpDecorate %12 Block
+               OpDecorate %14 DescriptorSet 0
+               OpDecorate %14 Binding 1
+               OpDecorate %50 ArrayStride 16
+               OpMemberDecorate %51 0 Offset 0
+               OpDecorate %51 Block
+               OpDecorate %53 DescriptorSet 0
+               OpDecorate %53 Binding 0
+               OpDecorate %62 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeInt 32 1
+          %7 = OpTypePointer Function %6
+          %9 = OpTypeInt 32 0
+         %10 = OpConstant %9 3
+         %11 = OpTypeArray %6 %10
+         %12 = OpTypeStruct %11
+         %13 = OpTypePointer Uniform %12
+         %14 = OpVariable %13 Uniform
+         %15 = OpConstant %6 0
+         %16 = OpConstant %6 1
+         %17 = OpTypePointer Uniform %6
+         %28 = OpTypeBool
+         %30 = OpTypeFloat 32
+         %31 = OpConstant %9 10
+         %32 = OpTypeArray %30 %31
+         %33 = OpTypePointer Function %32
+         %38 = OpTypePointer Function %30
+         %43 = OpConstant %6 9
+         %49 = OpConstant %9 1
+         %50 = OpTypeArray %30 %49
+         %51 = OpTypeStruct %50
+         %52 = OpTypePointer Uniform %51
+         %53 = OpVariable %52 Uniform
+         %54 = OpTypePointer Uniform %30
+         %60 = OpTypeVector %30 4
+         %61 = OpTypePointer Output %60
+         %62 = OpVariable %61 Output
+         %63 = OpConstant %6 2
+         %73 = OpConstant %30 1
+         %76 = OpConstant %30 0
+         %77 = OpConstantComposite %60 %76 %76 %76 %76
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+          %8 = OpVariable %7 Function
+         %34 = OpVariable %33 Function
+         %42 = OpVariable %38 Function
+         %18 = OpAccessChain %17 %14 %15 %16
+         %19 = OpLoad %6 %18
+               OpStore %8 %19
+               OpBranch %20
+         %20 = OpLabel
+               OpLoopMerge %22 %23 None
+               OpBranch %24
+         %24 = OpLabel
+         %25 = OpLoad %6 %8
+         %26 = OpAccessChain %17 %14 %15 %15
+         %27 = OpLoad %6 %26
+         %29 = OpSLessThan %28 %25 %27
+               OpBranchConditional %29 %21 %22
+         %21 = OpLabel
+         %35 = OpLoad %6 %8
+         %36 = OpLoad %6 %8
+         %37 = OpConvertSToF %30 %36
+         %39 = OpAccessChain %38 %34 %35
+               OpStore %39 %37
+               OpBranch %23
+         %23 = OpLabel
+         %40 = OpLoad %6 %8
+         %41 = OpIAdd %6 %40 %16
+               OpStore %8 %41
+               OpBranch %20
+         %22 = OpLabel
+         %44 = OpBitFieldInsert %6 %43 %15 %15 %15
+         %45 = OpSDiv %6 %44 %16
+         %46 = OpAccessChain %38 %34 %45
+         %47 = OpLoad %30 %46
+               OpStore %42 %47
+         %48 = OpLoad %30 %42
+         %55 = OpAccessChain %54 %53 %15 %15
+         %56 = OpLoad %30 %55
+         %57 = OpFOrdEqual %28 %48 %56
+               OpSelectionMerge %59 None
+               OpBranchConditional %57 %58 %75
+         %58 = OpLabel
+         %64 = OpAccessChain %17 %14 %15 %63
+         %65 = OpLoad %6 %64
+         %66 = OpConvertSToF %30 %65
+         %67 = OpAccessChain %17 %14 %15 %16
+         %68 = OpLoad %6 %67
+         %69 = OpConvertSToF %30 %68
+         %70 = OpAccessChain %17 %14 %15 %16
+         %71 = OpLoad %6 %70
+         %72 = OpConvertSToF %30 %71
+         %74 = OpCompositeConstruct %60 %66 %69 %72 %73
+               OpStore %62 %74
+               OpBranch %59
+         %75 = OpLabel
+               OpStore %62 %77
+               OpBranch %59
+         %59 = OpLabel
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# _GLF_uniform_int_values
+BUFFER variant__GLF_uniform_int_values DATA_TYPE int32[] STD140 DATA
+ 10 0 1
+END
+# _GLF_uniform_float_values
+BUFFER variant__GLF_uniform_float_values DATA_TYPE float[] STD140 DATA
+ 9.0
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 256 256
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant__GLF_uniform_int_values AS uniform DESCRIPTOR_SET 0 BINDING 1
+  BIND BUFFER variant__GLF_uniform_float_values AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256
+
+EXPECT variant_framebuffer IDX 0 0 SIZE 256 256 EQ_RGBA 255 0 0 255
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-const-folding-mod-one-one-lte.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-const-folding-mod-one-one-lte.amber
new file mode 100644
index 0000000..45a3832
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-const-folding-mod-one-one-lte.amber
@@ -0,0 +1,147 @@
+#!amber
+
+# Copyright 2020 Google LLC
+#
+# 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.
+
+
+# A test for a coverage-gap found by the GraphicsFuzz project.
+
+# Short description: A fragment shader that covers a specific const folding path
+
+# The test passes because the shader always writes red.
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+# variant_fragment_shader is derived from the following GLSL:
+# #version 310 es
+# #define _int_0 _GLF_uniform_int_values[0]
+# #define _int_1 _GLF_uniform_int_values[1]
+#
+# precision highp float;
+# precision highp int;
+#
+# // Contents of _GLF_uniform_int_values: [0, 1]
+# layout(set = 0, binding = 0) uniform buf0
+# {
+#     int _GLF_uniform_int_values[2];
+# };
+#
+# layout(location = 0) out vec4 _GLF_color;
+#
+# void main()
+# {
+#     if (mod(1.0, 1.0) <= 0.01)
+#     {
+#         _GLF_color = vec4(1, _int_0, _int_0, _int_1);
+#     }
+#     else
+#     {
+#         _GLF_color = vec4(_int_0);
+#     }
+# }
+SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 8
+; Bound: 42
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %16
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 310
+               OpName %4 "main"
+               OpName %16 "_GLF_color"
+               OpName %21 "buf0"
+               OpMemberName %21 0 "_GLF_uniform_int_values"
+               OpName %23 ""
+               OpDecorate %16 Location 0
+               OpDecorate %20 ArrayStride 16
+               OpMemberDecorate %21 0 Offset 0
+               OpDecorate %21 Block
+               OpDecorate %23 DescriptorSet 0
+               OpDecorate %23 Binding 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeFloat 32
+          %7 = OpConstant %6 1
+          %9 = OpConstant %6 0.00999999978
+         %10 = OpTypeBool
+         %14 = OpTypeVector %6 4
+         %15 = OpTypePointer Output %14
+         %16 = OpVariable %15 Output
+         %17 = OpTypeInt 32 1
+         %18 = OpTypeInt 32 0
+         %19 = OpConstant %18 2
+         %20 = OpTypeArray %17 %19
+         %21 = OpTypeStruct %20
+         %22 = OpTypePointer Uniform %21
+         %23 = OpVariable %22 Uniform
+         %24 = OpConstant %17 0
+         %25 = OpTypePointer Uniform %17
+         %32 = OpConstant %17 1
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+          %8 = OpFMod %6 %7 %7
+         %11 = OpFOrdLessThanEqual %10 %8 %9
+               OpSelectionMerge %13 None
+               OpBranchConditional %11 %12 %37
+         %12 = OpLabel
+         %26 = OpAccessChain %25 %23 %24 %24
+         %27 = OpLoad %17 %26
+         %28 = OpConvertSToF %6 %27
+         %29 = OpAccessChain %25 %23 %24 %24
+         %30 = OpLoad %17 %29
+         %31 = OpConvertSToF %6 %30
+         %33 = OpAccessChain %25 %23 %24 %32
+         %34 = OpLoad %17 %33
+         %35 = OpConvertSToF %6 %34
+         %36 = OpCompositeConstruct %14 %7 %28 %31 %35
+               OpStore %16 %36
+               OpBranch %13
+         %37 = OpLabel
+         %38 = OpAccessChain %25 %23 %24 %24
+         %39 = OpLoad %17 %38
+         %40 = OpConvertSToF %6 %39
+         %41 = OpCompositeConstruct %14 %40 %40 %40 %40
+               OpStore %16 %41
+               OpBranch %13
+         %13 = OpLabel
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# _GLF_uniform_int_values
+BUFFER variant__GLF_uniform_int_values DATA_TYPE int32[] STD140 DATA
+ 0 1
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 256 256
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant__GLF_uniform_int_values AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256
+
+EXPECT variant_framebuffer IDX 0 0 SIZE 256 256 EQ_RGBA 255 0 0 255
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-const-folding-pow-large-exp.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-const-folding-pow-large-exp.amber
new file mode 100644
index 0000000..8e0a2ba
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-const-folding-pow-large-exp.amber
@@ -0,0 +1,200 @@
+#!amber
+
+# Copyright 2020 Google LLC
+#
+# 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.
+
+
+# A test for a coverage-gap found by the GraphicsFuzz project.
+
+# Short description: A fragment shader that covers a specific const folding path
+
+# The test passes because the shader always writes red.
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+# variant_fragment_shader is derived from the following GLSL:
+# #version 310 es
+# #define _int_1 _GLF_uniform_int_values[0]
+# #define _int_0 _GLF_uniform_int_values[1]
+# #define _float_0_0 _GLF_uniform_float_values[0]
+#
+# precision highp float;
+#
+# precision highp int;
+#
+# // Contents of _GLF_uniform_int_values: [1, 0]
+# layout(set = 0, binding = 0) uniform buf0
+# {
+#     int _GLF_uniform_int_values[2];
+# };
+#
+# // Contents of _GLF_uniform_float_values: 0.0
+# layout(set = 0, binding = 1) uniform buf1
+# {
+#     float _GLF_uniform_float_values[1];
+# };
+#
+# layout(location = 0) out vec4 _GLF_color;
+#
+# void main()
+# {
+#     // This results in an undefined value, but not in undefined behavior.
+#     float f = pow(40.33, ldexp(1.0, 98980));
+#
+#     if (_int_1 == (_int_1 + _int_0) || f > _float_0_0)
+#         _GLF_color = vec4(_int_1, _int_0, _int_0, _int_1);
+#     else
+#         _GLF_color = vec4(_int_0);
+# }
+SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 8
+; Bound: 70
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %51
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 310
+               OpName %4 "main"
+               OpName %8 "f"
+               OpName %19 "buf0"
+               OpMemberName %19 0 "_GLF_uniform_int_values"
+               OpName %21 ""
+               OpName %39 "buf1"
+               OpMemberName %39 0 "_GLF_uniform_float_values"
+               OpName %41 ""
+               OpName %51 "_GLF_color"
+               OpDecorate %18 ArrayStride 16
+               OpMemberDecorate %19 0 Offset 0
+               OpDecorate %19 Block
+               OpDecorate %21 DescriptorSet 0
+               OpDecorate %21 Binding 0
+               OpDecorate %38 ArrayStride 16
+               OpMemberDecorate %39 0 Offset 0
+               OpDecorate %39 Block
+               OpDecorate %41 DescriptorSet 0
+               OpDecorate %41 Binding 1
+               OpDecorate %51 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeFloat 32
+          %7 = OpTypePointer Function %6
+          %9 = OpConstant %6 40.3300018
+         %10 = OpConstant %6 1
+         %11 = OpTypeInt 32 1
+         %12 = OpConstant %11 98980
+         %15 = OpTypeBool
+         %16 = OpTypeInt 32 0
+         %17 = OpConstant %16 2
+         %18 = OpTypeArray %11 %17
+         %19 = OpTypeStruct %18
+         %20 = OpTypePointer Uniform %19
+         %21 = OpVariable %20 Uniform
+         %22 = OpConstant %11 0
+         %23 = OpTypePointer Uniform %11
+         %28 = OpConstant %11 1
+         %37 = OpConstant %16 1
+         %38 = OpTypeArray %6 %37
+         %39 = OpTypeStruct %38
+         %40 = OpTypePointer Uniform %39
+         %41 = OpVariable %40 Uniform
+         %42 = OpTypePointer Uniform %6
+         %49 = OpTypeVector %6 4
+         %50 = OpTypePointer Output %49
+         %51 = OpVariable %50 Output
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+          %8 = OpVariable %7 Function
+         %13 = OpExtInst %6 %1 Ldexp %10 %12
+         %14 = OpExtInst %6 %1 Pow %9 %13
+               OpStore %8 %14
+         %24 = OpAccessChain %23 %21 %22 %22
+         %25 = OpLoad %11 %24
+         %26 = OpAccessChain %23 %21 %22 %22
+         %27 = OpLoad %11 %26
+         %29 = OpAccessChain %23 %21 %22 %28
+         %30 = OpLoad %11 %29
+         %31 = OpIAdd %11 %27 %30
+         %32 = OpIEqual %15 %25 %31
+         %33 = OpLogicalNot %15 %32
+               OpSelectionMerge %35 None
+               OpBranchConditional %33 %34 %35
+         %34 = OpLabel
+         %36 = OpLoad %6 %8
+         %43 = OpAccessChain %42 %41 %22 %22
+         %44 = OpLoad %6 %43
+         %45 = OpFOrdGreaterThan %15 %36 %44
+               OpBranch %35
+         %35 = OpLabel
+         %46 = OpPhi %15 %32 %5 %45 %34
+               OpSelectionMerge %48 None
+               OpBranchConditional %46 %47 %65
+         %47 = OpLabel
+         %52 = OpAccessChain %23 %21 %22 %22
+         %53 = OpLoad %11 %52
+         %54 = OpConvertSToF %6 %53
+         %55 = OpAccessChain %23 %21 %22 %28
+         %56 = OpLoad %11 %55
+         %57 = OpConvertSToF %6 %56
+         %58 = OpAccessChain %23 %21 %22 %28
+         %59 = OpLoad %11 %58
+         %60 = OpConvertSToF %6 %59
+         %61 = OpAccessChain %23 %21 %22 %22
+         %62 = OpLoad %11 %61
+         %63 = OpConvertSToF %6 %62
+         %64 = OpCompositeConstruct %49 %54 %57 %60 %63
+               OpStore %51 %64
+               OpBranch %48
+         %65 = OpLabel
+         %66 = OpAccessChain %23 %21 %22 %28
+         %67 = OpLoad %11 %66
+         %68 = OpConvertSToF %6 %67
+         %69 = OpCompositeConstruct %49 %68 %68 %68 %68
+               OpStore %51 %69
+               OpBranch %48
+         %48 = OpLabel
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# _GLF_uniform_float_values
+BUFFER variant__GLF_uniform_float_values DATA_TYPE float[] STD140 DATA
+ 0.0
+END
+# _GLF_uniform_int_values
+BUFFER variant__GLF_uniform_int_values DATA_TYPE int32[] STD140 DATA
+ 1 0
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 256 256
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant__GLF_uniform_float_values AS uniform DESCRIPTOR_SET 0 BINDING 1
+  BIND BUFFER variant__GLF_uniform_int_values AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256
+
+EXPECT variant_framebuffer IDX 0 0 SIZE 256 256 EQ_RGBA 255 0 0 255
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-constants-combine-add-sub.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-constants-combine-add-sub.amber
new file mode 100644
index 0000000..86ff666
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-constants-combine-add-sub.amber
@@ -0,0 +1,265 @@
+#!amber
+
+# Copyright 2020 Google LLC
+#
+# 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.
+
+
+# A test for a coverage-gap found by the GraphicsFuzz project.
+
+# Short description: A fragment shader that covers a specific constants and add/sub combining path
+
+# The test passes because the shader always writes red.
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+# variant_fragment_shader is derived from the following GLSL:
+# #version 310 es
+# #define _int_7 _GLF_uniform_int_values[0]
+# #define _int_1 _GLF_uniform_int_values[1]
+# #define _int_0 _GLF_uniform_int_values[2]
+# #define _int_5 _GLF_uniform_int_values[3]
+# #define _int_10 _GLF_uniform_int_values[4]
+#
+# precision highp float;
+# precision highp int;
+#
+# // Contents of _GLF_uniform_int_values: [7, 1, 0, 5, 10]
+# layout(set = 0, binding = 0) uniform buf0
+# {
+#     int _GLF_uniform_int_values[5];
+# };
+#
+# layout(location = 0) out vec4 _GLF_color;
+#
+# int func(float f)
+# {
+#     int a = _int_1;
+#     int b = _int_0;
+#     for (int i = _int_0; i < _int_10; i++)
+#     {
+#         if (a > _int_5)
+#         {
+#             break;
+#         }
+#
+#         // Simplifies to a = i.
+#         a = int(f) -_int_1 / 2 + i;
+#
+#         b++;
+#     }
+#     if (b == _int_7)
+#     {
+#         return _int_1;
+#     }
+#     else
+#     {
+#         return _int_0;
+#     }
+# }
+#
+# void main()
+# {
+#     if (func(-9.3 + 10.0) == _int_1)
+#     {
+#         _GLF_color = vec4(_int_1, _int_0, _int_0, _int_1);
+#     }
+#     else
+#     {
+#         _GLF_color = vec4(_int_0);
+#     }
+# }
+SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 8
+; Bound: 107
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %88
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 310
+               OpName %4 "main"
+               OpName %11 "func(f1;"
+               OpName %10 "f"
+               OpName %14 "a"
+               OpName %18 "buf0"
+               OpMemberName %18 0 "_GLF_uniform_int_values"
+               OpName %20 ""
+               OpName %26 "b"
+               OpName %30 "i"
+               OpName %79 "param"
+               OpName %88 "_GLF_color"
+               OpDecorate %17 ArrayStride 16
+               OpMemberDecorate %18 0 Offset 0
+               OpDecorate %18 Block
+               OpDecorate %20 DescriptorSet 0
+               OpDecorate %20 Binding 0
+               OpDecorate %88 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeFloat 32
+          %7 = OpTypePointer Function %6
+          %8 = OpTypeInt 32 1
+          %9 = OpTypeFunction %8 %7
+         %13 = OpTypePointer Function %8
+         %15 = OpTypeInt 32 0
+         %16 = OpConstant %15 5
+         %17 = OpTypeArray %8 %16
+         %18 = OpTypeStruct %17
+         %19 = OpTypePointer Uniform %18
+         %20 = OpVariable %19 Uniform
+         %21 = OpConstant %8 0
+         %22 = OpConstant %8 1
+         %23 = OpTypePointer Uniform %8
+         %27 = OpConstant %8 2
+         %39 = OpConstant %8 4
+         %42 = OpTypeBool
+         %45 = OpConstant %8 3
+         %78 = OpConstant %6 0.699999988
+         %86 = OpTypeVector %6 4
+         %87 = OpTypePointer Output %86
+         %88 = OpVariable %87 Output
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+         %79 = OpVariable %7 Function
+               OpStore %79 %78
+         %80 = OpFunctionCall %8 %11 %79
+         %81 = OpAccessChain %23 %20 %21 %22
+         %82 = OpLoad %8 %81
+         %83 = OpIEqual %42 %80 %82
+               OpSelectionMerge %85 None
+               OpBranchConditional %83 %84 %102
+         %84 = OpLabel
+         %89 = OpAccessChain %23 %20 %21 %22
+         %90 = OpLoad %8 %89
+         %91 = OpConvertSToF %6 %90
+         %92 = OpAccessChain %23 %20 %21 %27
+         %93 = OpLoad %8 %92
+         %94 = OpConvertSToF %6 %93
+         %95 = OpAccessChain %23 %20 %21 %27
+         %96 = OpLoad %8 %95
+         %97 = OpConvertSToF %6 %96
+         %98 = OpAccessChain %23 %20 %21 %22
+         %99 = OpLoad %8 %98
+        %100 = OpConvertSToF %6 %99
+        %101 = OpCompositeConstruct %86 %91 %94 %97 %100
+               OpStore %88 %101
+               OpBranch %85
+        %102 = OpLabel
+        %103 = OpAccessChain %23 %20 %21 %27
+        %104 = OpLoad %8 %103
+        %105 = OpConvertSToF %6 %104
+        %106 = OpCompositeConstruct %86 %105 %105 %105 %105
+               OpStore %88 %106
+               OpBranch %85
+         %85 = OpLabel
+               OpReturn
+               OpFunctionEnd
+         %11 = OpFunction %8 None %9
+         %10 = OpFunctionParameter %7
+         %12 = OpLabel
+         %14 = OpVariable %13 Function
+         %26 = OpVariable %13 Function
+         %30 = OpVariable %13 Function
+         %24 = OpAccessChain %23 %20 %21 %22
+         %25 = OpLoad %8 %24
+               OpStore %14 %25
+         %28 = OpAccessChain %23 %20 %21 %27
+         %29 = OpLoad %8 %28
+               OpStore %26 %29
+         %31 = OpAccessChain %23 %20 %21 %27
+         %32 = OpLoad %8 %31
+               OpStore %30 %32
+               OpBranch %33
+         %33 = OpLabel
+               OpLoopMerge %35 %36 None
+               OpBranch %37
+         %37 = OpLabel
+         %38 = OpLoad %8 %30
+         %40 = OpAccessChain %23 %20 %21 %39
+         %41 = OpLoad %8 %40
+         %43 = OpSLessThan %42 %38 %41
+               OpBranchConditional %43 %34 %35
+         %34 = OpLabel
+         %44 = OpLoad %8 %14
+         %46 = OpAccessChain %23 %20 %21 %45
+         %47 = OpLoad %8 %46
+         %48 = OpSGreaterThan %42 %44 %47
+               OpSelectionMerge %50 None
+               OpBranchConditional %48 %49 %50
+         %49 = OpLabel
+               OpBranch %35
+         %50 = OpLabel
+         %52 = OpLoad %6 %10
+         %53 = OpConvertFToS %8 %52
+         %54 = OpAccessChain %23 %20 %21 %22
+         %55 = OpLoad %8 %54
+         %56 = OpSDiv %8 %55 %27
+         %57 = OpISub %8 %53 %56
+         %58 = OpLoad %8 %30
+         %59 = OpIAdd %8 %57 %58
+               OpStore %14 %59
+         %60 = OpLoad %8 %26
+         %61 = OpIAdd %8 %60 %22
+               OpStore %26 %61
+               OpBranch %36
+         %36 = OpLabel
+         %62 = OpLoad %8 %30
+         %63 = OpIAdd %8 %62 %22
+               OpStore %30 %63
+               OpBranch %33
+         %35 = OpLabel
+         %64 = OpLoad %8 %26
+         %65 = OpAccessChain %23 %20 %21 %21
+         %66 = OpLoad %8 %65
+         %67 = OpIEqual %42 %64 %66
+               OpSelectionMerge %69 None
+               OpBranchConditional %67 %68 %73
+         %68 = OpLabel
+         %70 = OpAccessChain %23 %20 %21 %22
+         %71 = OpLoad %8 %70
+               OpReturnValue %71
+         %73 = OpLabel
+         %74 = OpAccessChain %23 %20 %21 %27
+         %75 = OpLoad %8 %74
+               OpReturnValue %75
+         %69 = OpLabel
+               OpUnreachable
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# _GLF_uniform_int_values
+BUFFER variant__GLF_uniform_int_values DATA_TYPE int32[] STD140 DATA
+ 7 1 0 5 10
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 256 256
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant__GLF_uniform_int_values AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256
+
+EXPECT variant_framebuffer IDX 0 0 SIZE 256 256 EQ_RGBA 255 0 0 255
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-dag-combiner-clamp-undefined-access-array.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-dag-combiner-clamp-undefined-access-array.amber
new file mode 100644
index 0000000..a8da49c
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-dag-combiner-clamp-undefined-access-array.amber
@@ -0,0 +1,247 @@
+#!amber
+
+# Copyright 2020 Google LLC
+#
+# 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.
+
+
+# A test for a coverage-gap found by the GraphicsFuzz project.
+
+# Short description: A fragment shader that covers a specific DAG combiner code path
+
+# The test passes because the shader always writes red.
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+# variant_fragment_shader is derived from the following GLSL:
+# #version 310 es
+# #define _int_1 _GLF_uniform_int_values[0]
+# #define _int_0 _GLF_uniform_int_values[1]
+# #define _int_2 _GLF_uniform_int_values[2]
+# #define _float_1_0 _GLF_uniform_float_values[0]
+# #define _float_2_0 _GLF_uniform_float_values[1]
+# #define _float_0_0 _GLF_uniform_float_values[2]
+#
+# precision highp float;
+# precision highp int;
+#
+# // Contents of _GLF_uniform_int_values: [1, 0, 2]
+# layout(set = 0, binding = 0) uniform buf0 {
+#  int _GLF_uniform_int_values[3];
+# };
+#
+# // Contents of _GLF_uniform_float_values: [1.0, 2.0]
+# layout(set = 0, binding = 1) uniform buf1 {
+#  float _GLF_uniform_float_values[3];
+# };
+#
+# layout(location = 0) out vec4 _GLF_color;
+#
+# void main()
+# {
+#     float A1[3] = float[3](_float_0_0, _float_1_0, _float_2_0);
+#
+#     // a becomes undefined. This results in an undefined value, not undefined behavior.
+#     int a = clamp(_int_1, _int_1, _int_0);
+#
+#     float b = A1[clamp(a, _int_0, _int_1)];
+#
+#     // Always true.
+#     bool c = b < A1[_int_0] ? (_float_1_0 > _float_0_0) : (_float_1_0 < A1[_int_2]);
+#
+#     if (c)
+#         _GLF_color = vec4(_int_1, _int_0, _int_0, _int_1);
+#     else
+#         _GLF_color = vec4(_float_1_0);
+# }
+SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 10
+; Bound: 101
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %83
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 310
+               OpName %4 "main"
+               OpName %11 "A1"
+               OpName %13 "buf1"
+               OpMemberName %13 0 "_GLF_uniform_float_values"
+               OpName %15 ""
+               OpName %29 "a"
+               OpName %31 "buf0"
+               OpMemberName %31 0 "_GLF_uniform_int_values"
+               OpName %33 ""
+               OpName %43 "b"
+               OpName %54 "c"
+               OpName %83 "_GLF_color"
+               OpDecorate %12 ArrayStride 16
+               OpMemberDecorate %13 0 Offset 0
+               OpDecorate %13 Block
+               OpDecorate %15 DescriptorSet 0
+               OpDecorate %15 Binding 1
+               OpDecorate %30 ArrayStride 16
+               OpMemberDecorate %31 0 Offset 0
+               OpDecorate %31 Block
+               OpDecorate %33 DescriptorSet 0
+               OpDecorate %33 Binding 0
+               OpDecorate %83 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeFloat 32
+          %7 = OpTypeInt 32 0
+          %8 = OpConstant %7 3
+          %9 = OpTypeArray %6 %8
+         %10 = OpTypePointer Function %9
+         %12 = OpTypeArray %6 %8
+         %13 = OpTypeStruct %12
+         %14 = OpTypePointer Uniform %13
+         %15 = OpVariable %14 Uniform
+         %16 = OpTypeInt 32 1
+         %17 = OpConstant %16 0
+         %18 = OpConstant %16 2
+         %19 = OpTypePointer Uniform %6
+         %24 = OpConstant %16 1
+         %28 = OpTypePointer Function %16
+         %30 = OpTypeArray %16 %8
+         %31 = OpTypeStruct %30
+         %32 = OpTypePointer Uniform %31
+         %33 = OpVariable %32 Uniform
+         %34 = OpTypePointer Uniform %16
+         %42 = OpTypePointer Function %6
+         %52 = OpTypeBool
+         %53 = OpTypePointer Function %52
+         %81 = OpTypeVector %6 4
+         %82 = OpTypePointer Output %81
+         %83 = OpVariable %82 Output
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+         %11 = OpVariable %10 Function
+         %29 = OpVariable %28 Function
+         %43 = OpVariable %42 Function
+         %54 = OpVariable %53 Function
+         %61 = OpVariable %53 Function
+         %20 = OpAccessChain %19 %15 %17 %18
+         %21 = OpLoad %6 %20
+         %22 = OpAccessChain %19 %15 %17 %17
+         %23 = OpLoad %6 %22
+         %25 = OpAccessChain %19 %15 %17 %24
+         %26 = OpLoad %6 %25
+         %27 = OpCompositeConstruct %9 %21 %23 %26
+               OpStore %11 %27
+         %35 = OpAccessChain %34 %33 %17 %17
+         %36 = OpLoad %16 %35
+         %37 = OpAccessChain %34 %33 %17 %17
+         %38 = OpLoad %16 %37
+         %39 = OpAccessChain %34 %33 %17 %24
+         %40 = OpLoad %16 %39
+         %41 = OpExtInst %16 %1 SClamp %36 %38 %40
+               OpStore %29 %41
+         %44 = OpLoad %16 %29
+         %45 = OpAccessChain %34 %33 %17 %24
+         %46 = OpLoad %16 %45
+         %47 = OpAccessChain %34 %33 %17 %17
+         %48 = OpLoad %16 %47
+         %49 = OpExtInst %16 %1 SClamp %44 %46 %48
+         %50 = OpAccessChain %42 %11 %49
+         %51 = OpLoad %6 %50
+               OpStore %43 %51
+         %55 = OpLoad %6 %43
+         %56 = OpAccessChain %34 %33 %17 %24
+         %57 = OpLoad %16 %56
+         %58 = OpAccessChain %42 %11 %57
+         %59 = OpLoad %6 %58
+         %60 = OpFOrdLessThan %52 %55 %59
+               OpSelectionMerge %63 None
+               OpBranchConditional %60 %62 %69
+         %62 = OpLabel
+         %64 = OpAccessChain %19 %15 %17 %17
+         %65 = OpLoad %6 %64
+         %66 = OpAccessChain %19 %15 %17 %18
+         %67 = OpLoad %6 %66
+         %68 = OpFOrdGreaterThan %52 %65 %67
+               OpStore %61 %68
+               OpBranch %63
+         %69 = OpLabel
+         %70 = OpAccessChain %19 %15 %17 %17
+         %71 = OpLoad %6 %70
+         %72 = OpAccessChain %34 %33 %17 %18
+         %73 = OpLoad %16 %72
+         %74 = OpAccessChain %42 %11 %73
+         %75 = OpLoad %6 %74
+         %76 = OpFOrdLessThan %52 %71 %75
+               OpStore %61 %76
+               OpBranch %63
+         %63 = OpLabel
+         %77 = OpLoad %52 %61
+               OpStore %54 %77
+         %78 = OpLoad %52 %54
+               OpSelectionMerge %80 None
+               OpBranchConditional %78 %79 %97
+         %79 = OpLabel
+         %84 = OpAccessChain %34 %33 %17 %17
+         %85 = OpLoad %16 %84
+         %86 = OpConvertSToF %6 %85
+         %87 = OpAccessChain %34 %33 %17 %24
+         %88 = OpLoad %16 %87
+         %89 = OpConvertSToF %6 %88
+         %90 = OpAccessChain %34 %33 %17 %24
+         %91 = OpLoad %16 %90
+         %92 = OpConvertSToF %6 %91
+         %93 = OpAccessChain %34 %33 %17 %17
+         %94 = OpLoad %16 %93
+         %95 = OpConvertSToF %6 %94
+         %96 = OpCompositeConstruct %81 %86 %89 %92 %95
+               OpStore %83 %96
+               OpBranch %80
+         %97 = OpLabel
+         %98 = OpAccessChain %19 %15 %17 %17
+         %99 = OpLoad %6 %98
+        %100 = OpCompositeConstruct %81 %99 %99 %99 %99
+               OpStore %83 %100
+               OpBranch %80
+         %80 = OpLabel
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# _GLF_uniform_float_values
+BUFFER variant__GLF_uniform_float_values DATA_TYPE float[] STD140 DATA
+ 1.0 2.0 0.0
+END
+# _GLF_uniform_int_values
+BUFFER variant__GLF_uniform_int_values DATA_TYPE int32[] STD140 DATA
+ 1 0 2
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 256 256
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant__GLF_uniform_float_values AS uniform DESCRIPTOR_SET 0 BINDING 1
+  BIND BUFFER variant__GLF_uniform_int_values AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256
+
+EXPECT variant_framebuffer IDX 0 0 SIZE 256 256 EQ_RGBA 255 0 0 255
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-dag-combiner-glf_color.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-dag-combiner-glf_color.amber
new file mode 100644
index 0000000..948a58d
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-dag-combiner-glf_color.amber
@@ -0,0 +1,277 @@
+#!amber
+
+# Copyright 2020 Google LLC
+#
+# 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.
+
+
+# A test for a coverage-gap found by the GraphicsFuzz project.
+
+# Short description: A fragment shader that covers specific dag combiner code path
+
+# The test passes because the shader always writes red.
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+# variant_fragment_shader is derived from the following GLSL:
+# #version 310 es
+# #define _int_1 _GLF_uniform_int_values[0]
+# #define _int_0 _GLF_uniform_int_values[1]
+# #define _float_1_0 _GLF_uniform_float_values[0]
+# #define _float_0_4 _GLF_uniform_float_values[1]
+# #define _float_2_0 _GLF_uniform_float_values[2]
+# #define _float_3_0 _GLF_uniform_float_values[3]
+#
+# precision highp float;
+#
+# // Contents of _GLF_uniform_int_values: [1, 0]
+# layout(set = 0, binding = 0) uniform buf0
+# {
+#     int _GLF_uniform_int_values[2];
+# };
+#
+# // Contents of _GLF_uniform_float_values: [1.0, 0.4, 2.0, 3.0]
+# layout(set = 0, binding = 1) uniform buf1
+# {
+#     float _GLF_uniform_float_values[4];
+# };
+#
+# layout(location = 0) out vec4 _GLF_color;
+#
+# float func(float b)
+# {
+#     _GLF_color = vec4(_float_1_0, _float_1_0, _float_0_4, 1.0);
+#     _GLF_color = _GLF_color;
+#     if (_float_1_0 >= b)
+#     {
+#         return _float_1_0;
+#     }
+#     return _float_2_0;
+# }
+#
+# void main()
+# {
+#     // func returns 1.0.
+#     float a = func(_float_1_0);
+#
+#     // func returns 2.0.
+#     a += func(_float_1_0 + _float_1_0);
+#
+#     if (a == _float_3_0 &&
+#         _GLF_color == vec4(_float_1_0, _float_1_0, _float_0_4, _float_1_0))
+#     {
+#         _GLF_color = vec4(_int_1, _int_0, _int_0, _int_1);
+#     }
+#     else
+#     {
+#         _GLF_color = vec4(_int_0);
+#     }
+# }
+SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 8
+; Bound: 110
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %14
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 310
+               OpName %4 "main"
+               OpName %10 "func(f1;"
+               OpName %9 "b"
+               OpName %14 "_GLF_color"
+               OpName %18 "buf1"
+               OpMemberName %18 0 "_GLF_uniform_float_values"
+               OpName %20 ""
+               OpName %49 "a"
+               OpName %50 "param"
+               OpName %59 "param"
+               OpName %88 "buf0"
+               OpMemberName %88 0 "_GLF_uniform_int_values"
+               OpName %90 ""
+               OpDecorate %14 Location 0
+               OpDecorate %17 ArrayStride 16
+               OpMemberDecorate %18 0 Offset 0
+               OpDecorate %18 Block
+               OpDecorate %20 DescriptorSet 0
+               OpDecorate %20 Binding 1
+               OpDecorate %87 ArrayStride 16
+               OpMemberDecorate %88 0 RelaxedPrecision
+               OpMemberDecorate %88 0 Offset 0
+               OpDecorate %88 Block
+               OpDecorate %90 DescriptorSet 0
+               OpDecorate %90 Binding 0
+               OpDecorate %93 RelaxedPrecision
+               OpDecorate %96 RelaxedPrecision
+               OpDecorate %99 RelaxedPrecision
+               OpDecorate %102 RelaxedPrecision
+               OpDecorate %107 RelaxedPrecision
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeFloat 32
+          %7 = OpTypePointer Function %6
+          %8 = OpTypeFunction %6 %7
+         %12 = OpTypeVector %6 4
+         %13 = OpTypePointer Output %12
+         %14 = OpVariable %13 Output
+         %15 = OpTypeInt 32 0
+         %16 = OpConstant %15 4
+         %17 = OpTypeArray %6 %16
+         %18 = OpTypeStruct %17
+         %19 = OpTypePointer Uniform %18
+         %20 = OpVariable %19 Uniform
+         %21 = OpTypeInt 32 1
+         %22 = OpConstant %21 0
+         %23 = OpTypePointer Uniform %6
+         %28 = OpConstant %21 1
+         %31 = OpConstant %6 1
+         %37 = OpTypeBool
+         %44 = OpConstant %21 2
+         %64 = OpConstant %21 3
+         %80 = OpTypeVector %37 4
+         %86 = OpConstant %15 2
+         %87 = OpTypeArray %21 %86
+         %88 = OpTypeStruct %87
+         %89 = OpTypePointer Uniform %88
+         %90 = OpVariable %89 Uniform
+         %91 = OpTypePointer Uniform %21
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+         %49 = OpVariable %7 Function
+         %50 = OpVariable %7 Function
+         %59 = OpVariable %7 Function
+         %51 = OpAccessChain %23 %20 %22 %22
+         %52 = OpLoad %6 %51
+               OpStore %50 %52
+         %53 = OpFunctionCall %6 %10 %50
+               OpStore %49 %53
+         %54 = OpAccessChain %23 %20 %22 %22
+         %55 = OpLoad %6 %54
+         %56 = OpAccessChain %23 %20 %22 %22
+         %57 = OpLoad %6 %56
+         %58 = OpFAdd %6 %55 %57
+               OpStore %59 %58
+         %60 = OpFunctionCall %6 %10 %59
+         %61 = OpLoad %6 %49
+         %62 = OpFAdd %6 %61 %60
+               OpStore %49 %62
+         %63 = OpLoad %6 %49
+         %65 = OpAccessChain %23 %20 %22 %64
+         %66 = OpLoad %6 %65
+         %67 = OpFOrdEqual %37 %63 %66
+               OpSelectionMerge %69 None
+               OpBranchConditional %67 %68 %69
+         %68 = OpLabel
+         %70 = OpLoad %12 %14
+         %71 = OpAccessChain %23 %20 %22 %22
+         %72 = OpLoad %6 %71
+         %73 = OpAccessChain %23 %20 %22 %22
+         %74 = OpLoad %6 %73
+         %75 = OpAccessChain %23 %20 %22 %28
+         %76 = OpLoad %6 %75
+         %77 = OpAccessChain %23 %20 %22 %22
+         %78 = OpLoad %6 %77
+         %79 = OpCompositeConstruct %12 %72 %74 %76 %78
+         %81 = OpFOrdEqual %80 %70 %79
+         %82 = OpAll %37 %81
+               OpBranch %69
+         %69 = OpLabel
+         %83 = OpPhi %37 %67 %5 %82 %68
+               OpSelectionMerge %85 None
+               OpBranchConditional %83 %84 %105
+         %84 = OpLabel
+         %92 = OpAccessChain %91 %90 %22 %22
+         %93 = OpLoad %21 %92
+         %94 = OpConvertSToF %6 %93
+         %95 = OpAccessChain %91 %90 %22 %28
+         %96 = OpLoad %21 %95
+         %97 = OpConvertSToF %6 %96
+         %98 = OpAccessChain %91 %90 %22 %28
+         %99 = OpLoad %21 %98
+        %100 = OpConvertSToF %6 %99
+        %101 = OpAccessChain %91 %90 %22 %22
+        %102 = OpLoad %21 %101
+        %103 = OpConvertSToF %6 %102
+        %104 = OpCompositeConstruct %12 %94 %97 %100 %103
+               OpStore %14 %104
+               OpBranch %85
+        %105 = OpLabel
+        %106 = OpAccessChain %91 %90 %22 %28
+        %107 = OpLoad %21 %106
+        %108 = OpConvertSToF %6 %107
+        %109 = OpCompositeConstruct %12 %108 %108 %108 %108
+               OpStore %14 %109
+               OpBranch %85
+         %85 = OpLabel
+               OpReturn
+               OpFunctionEnd
+         %10 = OpFunction %6 None %8
+          %9 = OpFunctionParameter %7
+         %11 = OpLabel
+         %24 = OpAccessChain %23 %20 %22 %22
+         %25 = OpLoad %6 %24
+         %26 = OpAccessChain %23 %20 %22 %22
+         %27 = OpLoad %6 %26
+         %29 = OpAccessChain %23 %20 %22 %28
+         %30 = OpLoad %6 %29
+         %32 = OpCompositeConstruct %12 %25 %27 %30 %31
+               OpStore %14 %32
+         %33 = OpLoad %12 %14
+               OpStore %14 %33
+         %34 = OpAccessChain %23 %20 %22 %22
+         %35 = OpLoad %6 %34
+         %36 = OpLoad %6 %9
+         %38 = OpFOrdGreaterThanEqual %37 %35 %36
+               OpSelectionMerge %40 None
+               OpBranchConditional %38 %39 %40
+         %39 = OpLabel
+         %41 = OpAccessChain %23 %20 %22 %22
+         %42 = OpLoad %6 %41
+               OpReturnValue %42
+         %40 = OpLabel
+         %45 = OpAccessChain %23 %20 %22 %44
+         %46 = OpLoad %6 %45
+               OpReturnValue %46
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# _GLF_uniform_float_values
+BUFFER variant__GLF_uniform_float_values DATA_TYPE float[] STD140 DATA
+ 1.0 0.4 2.0 3.0
+END
+# _GLF_uniform_int_values
+BUFFER variant__GLF_uniform_int_values DATA_TYPE int32[] STD140 DATA
+ 1 0
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 256 256
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant__GLF_uniform_float_values AS uniform DESCRIPTOR_SET 0 BINDING 1
+  BIND BUFFER variant__GLF_uniform_int_values AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256
+
+EXPECT variant_framebuffer IDX 0 0 SIZE 256 256 EQ_RGBA 255 0 0 255
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-dag-combiner-loop-bitfieldreverse.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-dag-combiner-loop-bitfieldreverse.amber
new file mode 100644
index 0000000..92c3bc3
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-dag-combiner-loop-bitfieldreverse.amber
@@ -0,0 +1,192 @@
+#!amber
+
+# Copyright 2020 Google LLC
+#
+# 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.
+
+
+# A test for a coverage-gap found by the GraphicsFuzz project.
+
+# Short description: A fragment shader that covers a specific DAG combiner code path
+
+# The test passes because the shader always writes red.
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+# variant_fragment_shader is derived from the following GLSL:
+# #version 310 es
+# #define _int_3 _GLF_uniform_int_values[0]
+# #define _int_0 _GLF_uniform_int_values[1]
+# #define _int_1 _GLF_uniform_int_values[2]
+# #define _int_2 _GLF_uniform_int_values[3]
+#
+# precision highp float;
+# precision highp int;
+#
+# // Contents of _GLF_uniform_int_values: [3, 0, 1, 2]
+# layout(set = 0, binding = 0) uniform buf0
+# {
+#     int _GLF_uniform_int_values[4];
+# };
+#
+# layout(location = 0) out vec4 _GLF_color;
+#
+# void main()
+# {
+#     int a = _int_0;
+#     for (int i = -_int_2; bitfieldReverse(++i) <= _int_1;)
+#     {
+#         a++;
+#     }
+#     if (a == _int_3)
+#     {
+#         _GLF_color = vec4(_int_1, _int_0, _int_0, _int_1);
+#     }
+#     else
+#     {
+#         _GLF_color = vec4(_int_0);
+#     }
+# }
+SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 8
+; Bound: 68
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %49
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 310
+               OpName %4 "main"
+               OpName %8 "a"
+               OpName %12 "buf0"
+               OpMemberName %12 0 "_GLF_uniform_int_values"
+               OpName %14 ""
+               OpName %20 "i"
+               OpName %49 "_GLF_color"
+               OpDecorate %11 ArrayStride 16
+               OpMemberDecorate %12 0 Offset 0
+               OpDecorate %12 Block
+               OpDecorate %14 DescriptorSet 0
+               OpDecorate %14 Binding 0
+               OpDecorate %49 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeInt 32 1
+          %7 = OpTypePointer Function %6
+          %9 = OpTypeInt 32 0
+         %10 = OpConstant %9 4
+         %11 = OpTypeArray %6 %10
+         %12 = OpTypeStruct %11
+         %13 = OpTypePointer Uniform %12
+         %14 = OpVariable %13 Uniform
+         %15 = OpConstant %6 0
+         %16 = OpConstant %6 1
+         %17 = OpTypePointer Uniform %6
+         %21 = OpConstant %6 3
+         %33 = OpConstant %6 2
+         %36 = OpTypeBool
+         %46 = OpTypeFloat 32
+         %47 = OpTypeVector %46 4
+         %48 = OpTypePointer Output %47
+         %49 = OpVariable %48 Output
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+          %8 = OpVariable %7 Function
+         %20 = OpVariable %7 Function
+         %18 = OpAccessChain %17 %14 %15 %16
+         %19 = OpLoad %6 %18
+               OpStore %8 %19
+         %22 = OpAccessChain %17 %14 %15 %21
+         %23 = OpLoad %6 %22
+         %24 = OpSNegate %6 %23
+               OpStore %20 %24
+               OpBranch %25
+         %25 = OpLabel
+               OpLoopMerge %27 %28 None
+               OpBranch %29
+         %29 = OpLabel
+         %30 = OpLoad %6 %20
+         %31 = OpIAdd %6 %30 %16
+               OpStore %20 %31
+         %32 = OpBitReverse %6 %31
+         %34 = OpAccessChain %17 %14 %15 %33
+         %35 = OpLoad %6 %34
+         %37 = OpSLessThanEqual %36 %32 %35
+               OpBranchConditional %37 %26 %27
+         %26 = OpLabel
+         %38 = OpLoad %6 %8
+         %39 = OpIAdd %6 %38 %16
+               OpStore %8 %39
+               OpBranch %28
+         %28 = OpLabel
+               OpBranch %25
+         %27 = OpLabel
+         %40 = OpLoad %6 %8
+         %41 = OpAccessChain %17 %14 %15 %15
+         %42 = OpLoad %6 %41
+         %43 = OpIEqual %36 %40 %42
+               OpSelectionMerge %45 None
+               OpBranchConditional %43 %44 %63
+         %44 = OpLabel
+         %50 = OpAccessChain %17 %14 %15 %33
+         %51 = OpLoad %6 %50
+         %52 = OpConvertSToF %46 %51
+         %53 = OpAccessChain %17 %14 %15 %16
+         %54 = OpLoad %6 %53
+         %55 = OpConvertSToF %46 %54
+         %56 = OpAccessChain %17 %14 %15 %16
+         %57 = OpLoad %6 %56
+         %58 = OpConvertSToF %46 %57
+         %59 = OpAccessChain %17 %14 %15 %33
+         %60 = OpLoad %6 %59
+         %61 = OpConvertSToF %46 %60
+         %62 = OpCompositeConstruct %47 %52 %55 %58 %61
+               OpStore %49 %62
+               OpBranch %45
+         %63 = OpLabel
+         %64 = OpAccessChain %17 %14 %15 %16
+         %65 = OpLoad %6 %64
+         %66 = OpConvertSToF %46 %65
+         %67 = OpCompositeConstruct %47 %66 %66 %66 %66
+               OpStore %49 %67
+               OpBranch %45
+         %45 = OpLabel
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# _GLF_uniform_int_values
+BUFFER variant__GLF_uniform_int_values DATA_TYPE int32[] STD140 DATA
+ 3 0 1 2
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 256 256
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant__GLF_uniform_int_values AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256
+
+EXPECT variant_framebuffer IDX 0 0 SIZE 256 256 EQ_RGBA 255 0 0 255
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-findlsb-division-by-zero.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-findlsb-division-by-zero.amber
new file mode 100644
index 0000000..b81c680
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-findlsb-division-by-zero.amber
@@ -0,0 +1,248 @@
+#!amber
+
+# Copyright 2020 Google LLC
+#
+# 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.
+
+
+# A test for a coverage-gap found by the GraphicsFuzz project.
+
+# Short description: A fragment shader that covers a specific instruction simplify code path
+
+# The test passes because the shader always writes red.
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+# variant_fragment_shader is derived from the following GLSL:
+# #version 310 es
+# #define _int_5 _GLF_uniform_int_values[0]
+# #define _int_2 _GLF_uniform_int_values[1]
+# #define _int_1 _GLF_uniform_int_values[2]
+# #define _int_0 _GLF_uniform_int_values[3]
+# #define _int_9 _GLF_uniform_int_values[4]
+#
+# precision highp int;
+#
+# precision highp float;
+#
+# // Contents of _GLF_uniform_int_values: [5, 2, 1, 0, 9]
+# layout(set = 0, binding = 0) uniform buf0
+# {
+#     int _GLF_uniform_int_values[5];
+# };
+#
+# layout(location = 0) out vec4 _GLF_color;
+#
+# struct S {
+#     int data;
+# };
+#
+# void main()
+# {
+#     int value = -_int_1;
+#     for (int i = _int_1; i < _int_5; i++)
+#     {
+#         // idx becomes undefined during the first and third iteration since i
+#         // is divided by zero. Nevertheless, it becomes 2 in the last iteration.
+#         int idx = clamp(_int_0, (i / findLSB(i)), _int_9);
+#
+#         if (idx == _int_2)
+#         {
+#             value = S[3](S(_int_0), S(_int_1), S(_int_2))[idx].data;
+#         }
+#     }
+#
+#     if (value == _int_2)
+#     {
+#         _GLF_color = vec4(_int_1, _int_0, _int_0, _int_1);
+#     }
+#     else
+#     {
+#         _GLF_color = vec4(_int_0);
+#     }
+# }
+SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 10
+; Bound: 101
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %82
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 310
+               OpName %4 "main"
+               OpName %8 "value"
+               OpName %12 "buf0"
+               OpMemberName %12 0 "_GLF_uniform_int_values"
+               OpName %14 ""
+               OpName %21 "i"
+               OpName %34 "idx"
+               OpName %55 "S"
+               OpMemberName %55 0 "data"
+               OpName %68 "indexable"
+               OpName %82 "_GLF_color"
+               OpDecorate %11 ArrayStride 16
+               OpMemberDecorate %12 0 Offset 0
+               OpDecorate %12 Block
+               OpDecorate %14 DescriptorSet 0
+               OpDecorate %14 Binding 0
+               OpDecorate %82 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeInt 32 1
+          %7 = OpTypePointer Function %6
+          %9 = OpTypeInt 32 0
+         %10 = OpConstant %9 5
+         %11 = OpTypeArray %6 %10
+         %12 = OpTypeStruct %11
+         %13 = OpTypePointer Uniform %12
+         %14 = OpVariable %13 Uniform
+         %15 = OpConstant %6 0
+         %16 = OpConstant %6 2
+         %17 = OpTypePointer Uniform %6
+         %32 = OpTypeBool
+         %35 = OpConstant %6 3
+         %42 = OpConstant %6 4
+         %47 = OpConstant %6 1
+         %55 = OpTypeStruct %6
+         %63 = OpConstant %9 3
+         %64 = OpTypeArray %55 %63
+         %67 = OpTypePointer Function %64
+         %79 = OpTypeFloat 32
+         %80 = OpTypeVector %79 4
+         %81 = OpTypePointer Output %80
+         %82 = OpVariable %81 Output
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+          %8 = OpVariable %7 Function
+         %21 = OpVariable %7 Function
+         %34 = OpVariable %7 Function
+         %68 = OpVariable %67 Function
+         %18 = OpAccessChain %17 %14 %15 %16
+         %19 = OpLoad %6 %18
+         %20 = OpSNegate %6 %19
+               OpStore %8 %20
+         %22 = OpAccessChain %17 %14 %15 %16
+         %23 = OpLoad %6 %22
+               OpStore %21 %23
+               OpBranch %24
+         %24 = OpLabel
+               OpLoopMerge %26 %27 None
+               OpBranch %28
+         %28 = OpLabel
+         %29 = OpLoad %6 %21
+         %30 = OpAccessChain %17 %14 %15 %15
+         %31 = OpLoad %6 %30
+         %33 = OpSLessThan %32 %29 %31
+               OpBranchConditional %33 %25 %26
+         %25 = OpLabel
+         %36 = OpAccessChain %17 %14 %15 %35
+         %37 = OpLoad %6 %36
+         %38 = OpLoad %6 %21
+         %39 = OpLoad %6 %21
+         %40 = OpExtInst %6 %1 FindILsb %39
+         %41 = OpSDiv %6 %38 %40
+         %43 = OpAccessChain %17 %14 %15 %42
+         %44 = OpLoad %6 %43
+         %45 = OpExtInst %6 %1 SClamp %37 %41 %44
+               OpStore %34 %45
+         %46 = OpLoad %6 %34
+         %48 = OpAccessChain %17 %14 %15 %47
+         %49 = OpLoad %6 %48
+         %50 = OpIEqual %32 %46 %49
+               OpSelectionMerge %52 None
+               OpBranchConditional %50 %51 %52
+         %51 = OpLabel
+         %53 = OpAccessChain %17 %14 %15 %35
+         %54 = OpLoad %6 %53
+         %56 = OpCompositeConstruct %55 %54
+         %57 = OpAccessChain %17 %14 %15 %16
+         %58 = OpLoad %6 %57
+         %59 = OpCompositeConstruct %55 %58
+         %60 = OpAccessChain %17 %14 %15 %47
+         %61 = OpLoad %6 %60
+         %62 = OpCompositeConstruct %55 %61
+         %65 = OpCompositeConstruct %64 %56 %59 %62
+         %66 = OpLoad %6 %34
+               OpStore %68 %65
+         %69 = OpAccessChain %7 %68 %66 %15
+         %70 = OpLoad %6 %69
+               OpStore %8 %70
+               OpBranch %52
+         %52 = OpLabel
+               OpBranch %27
+         %27 = OpLabel
+         %71 = OpLoad %6 %21
+         %72 = OpIAdd %6 %71 %47
+               OpStore %21 %72
+               OpBranch %24
+         %26 = OpLabel
+         %73 = OpLoad %6 %8
+         %74 = OpAccessChain %17 %14 %15 %47
+         %75 = OpLoad %6 %74
+         %76 = OpIEqual %32 %73 %75
+               OpSelectionMerge %78 None
+               OpBranchConditional %76 %77 %96
+         %77 = OpLabel
+         %83 = OpAccessChain %17 %14 %15 %16
+         %84 = OpLoad %6 %83
+         %85 = OpConvertSToF %79 %84
+         %86 = OpAccessChain %17 %14 %15 %35
+         %87 = OpLoad %6 %86
+         %88 = OpConvertSToF %79 %87
+         %89 = OpAccessChain %17 %14 %15 %35
+         %90 = OpLoad %6 %89
+         %91 = OpConvertSToF %79 %90
+         %92 = OpAccessChain %17 %14 %15 %16
+         %93 = OpLoad %6 %92
+         %94 = OpConvertSToF %79 %93
+         %95 = OpCompositeConstruct %80 %85 %88 %91 %94
+               OpStore %82 %95
+               OpBranch %78
+         %96 = OpLabel
+         %97 = OpAccessChain %17 %14 %15 %35
+         %98 = OpLoad %6 %97
+         %99 = OpConvertSToF %79 %98
+        %100 = OpCompositeConstruct %80 %99 %99 %99 %99
+               OpStore %82 %100
+               OpBranch %78
+         %78 = OpLabel
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# _GLF_uniform_int_values
+BUFFER variant__GLF_uniform_int_values DATA_TYPE int32[] STD140 DATA
+ 5 2 1 0 9
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 16 16
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant__GLF_uniform_int_values AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 16 16
+
+EXPECT variant_framebuffer IDX 0 0 SIZE 16 16 EQ_RGBA 255 0 0 255
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-fract-smoothstep-undefined.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-fract-smoothstep-undefined.amber
new file mode 100644
index 0000000..014c9ee
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-fract-smoothstep-undefined.amber
@@ -0,0 +1,191 @@
+#!amber
+
+# Copyright 2020 Google LLC
+#
+# 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.
+
+
+# A test for a coverage-gap found by the GraphicsFuzz project.
+
+# Short description: A fragment shader that covers a specific APFloat code path
+
+# The test passes because the shader always writes red.
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+# variant_fragment_shader is derived from the following GLSL:
+# #version 310 es
+# #define _float_1_0 _GLF_uniform_float_values[0]
+#
+# precision highp float;
+#
+# // Contents of _GLF_uniform_float_values: 1.0
+# layout(set = 0, binding = 0) uniform buf0
+# {
+#     float _GLF_uniform_float_values[1];
+# };
+#
+# layout(location = 0) out vec4 _GLF_color;
+#
+# void main()
+# {
+#     vec2 v1 = vec2(_float_1_0);
+#     vec2 b = fract(v1);
+#
+#     // The values of the edges are the same, therefore this results in
+#     // an undefined value, but not in undefined behavior.
+#     float a = smoothstep(vec2(1.0), vec2(1.0), b).x;
+#
+#     _GLF_color = vec4(_float_1_0, a, a, _float_1_0);
+#
+#     // Always true.
+#     if (b.x < 1.0 && b.y < 1.0)
+#     {
+#         _GLF_color = vec4(_float_1_0, b.x, b.y, _float_1_0);
+#     }
+#     else
+#     {
+#         _GLF_color = vec4(_float_1_0);
+#     }
+# }
+SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 10
+; Bound: 68
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %35
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 310
+               OpName %4 "main"
+               OpName %9 "v1"
+               OpName %13 "buf0"
+               OpMemberName %13 0 "_GLF_uniform_float_values"
+               OpName %15 ""
+               OpName %22 "b"
+               OpName %26 "a"
+               OpName %35 "_GLF_color"
+               OpDecorate %12 ArrayStride 16
+               OpMemberDecorate %13 0 Offset 0
+               OpDecorate %13 Block
+               OpDecorate %15 DescriptorSet 0
+               OpDecorate %15 Binding 0
+               OpDecorate %35 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeFloat 32
+          %7 = OpTypeVector %6 2
+          %8 = OpTypePointer Function %7
+         %10 = OpTypeInt 32 0
+         %11 = OpConstant %10 1
+         %12 = OpTypeArray %6 %11
+         %13 = OpTypeStruct %12
+         %14 = OpTypePointer Uniform %13
+         %15 = OpVariable %14 Uniform
+         %16 = OpTypeInt 32 1
+         %17 = OpConstant %16 0
+         %18 = OpTypePointer Uniform %6
+         %25 = OpTypePointer Function %6
+         %27 = OpConstant %6 1
+         %28 = OpConstantComposite %7 %27 %27
+         %31 = OpConstant %10 0
+         %33 = OpTypeVector %6 4
+         %34 = OpTypePointer Output %33
+         %35 = OpVariable %34 Output
+         %43 = OpTypeBool
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+          %9 = OpVariable %8 Function
+         %22 = OpVariable %8 Function
+         %26 = OpVariable %25 Function
+         %19 = OpAccessChain %18 %15 %17 %17
+         %20 = OpLoad %6 %19
+         %21 = OpCompositeConstruct %7 %20 %20
+               OpStore %9 %21
+         %23 = OpLoad %7 %9
+         %24 = OpExtInst %7 %1 Fract %23
+               OpStore %22 %24
+         %29 = OpLoad %7 %22
+         %30 = OpExtInst %7 %1 SmoothStep %28 %28 %29
+         %32 = OpCompositeExtract %6 %30 0
+               OpStore %26 %32
+         %36 = OpAccessChain %18 %15 %17 %17
+         %37 = OpLoad %6 %36
+         %38 = OpLoad %6 %26
+         %39 = OpLoad %6 %26
+         %40 = OpAccessChain %18 %15 %17 %17
+         %41 = OpLoad %6 %40
+         %42 = OpCompositeConstruct %33 %37 %38 %39 %41
+               OpStore %35 %42
+         %44 = OpAccessChain %25 %22 %31
+         %45 = OpLoad %6 %44
+         %46 = OpFOrdLessThan %43 %45 %27
+               OpSelectionMerge %48 None
+               OpBranchConditional %46 %47 %48
+         %47 = OpLabel
+         %49 = OpAccessChain %25 %22 %11
+         %50 = OpLoad %6 %49
+         %51 = OpFOrdLessThan %43 %50 %27
+               OpBranch %48
+         %48 = OpLabel
+         %52 = OpPhi %43 %46 %5 %51 %47
+               OpSelectionMerge %54 None
+               OpBranchConditional %52 %53 %64
+         %53 = OpLabel
+         %55 = OpAccessChain %18 %15 %17 %17
+         %56 = OpLoad %6 %55
+         %57 = OpAccessChain %25 %22 %31
+         %58 = OpLoad %6 %57
+         %59 = OpAccessChain %25 %22 %11
+         %60 = OpLoad %6 %59
+         %61 = OpAccessChain %18 %15 %17 %17
+         %62 = OpLoad %6 %61
+         %63 = OpCompositeConstruct %33 %56 %58 %60 %62
+               OpStore %35 %63
+               OpBranch %54
+         %64 = OpLabel
+         %65 = OpAccessChain %18 %15 %17 %17
+         %66 = OpLoad %6 %65
+         %67 = OpCompositeConstruct %33 %66 %66 %66 %66
+               OpStore %35 %67
+               OpBranch %54
+         %54 = OpLabel
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# _GLF_uniform_float_values
+BUFFER variant__GLF_uniform_float_values DATA_TYPE float[] STD140 DATA
+ 1.0
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 256 256
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant__GLF_uniform_float_values AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256
+
+EXPECT variant_framebuffer IDX 0 0 SIZE 256 256 EQ_RGBA 255 0 0 255
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-fragcoord-clamp-array-access.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-fragcoord-clamp-array-access.amber
new file mode 100644
index 0000000..d01cc6c
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-fragcoord-clamp-array-access.amber
@@ -0,0 +1,293 @@
+#!amber
+
+# Copyright 2020 Google LLC
+#
+# 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.
+
+
+# A test for a coverage-gap found by the GraphicsFuzz project.
+
+# Short description: A fragment shader that covers a specific instruction simplify path
+
+# The test passes because the shader always writes red.
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+# variant_fragment_shader is derived from the following GLSL:
+# #version 310 es
+# #define _int_2 _GLF_uniform_int_values[0]
+# #define _int_1 _GLF_uniform_int_values[1]
+# #define _int_0 _GLF_uniform_int_values[2]
+# #define _int_15 _GLF_uniform_int_values[3]
+# #define _float_1_0 _GLF_uniform_float_values[0]
+#
+# precision highp float;
+#
+# precision highp int;
+#
+# // Contents of _GLF_uniform_float_values: 1.0
+# layout(set = 0, binding = 0) uniform buf0
+# {
+#     float _GLF_uniform_float_values[1];
+# };
+#
+# // Contents of _GLF_uniform_int_values: [2, 1, 0, 15]
+# layout(set = 0, binding = 1) uniform buf1
+# {
+#     int _GLF_uniform_int_values[4];
+# };
+#
+# layout(location = 0) out vec4 _GLF_color;
+#
+# void main()
+# {
+#     vec4 data[2] = vec4[2](vec4(_float_1_0), vec4(_float_1_0));
+#
+#     int b = _int_1;
+#
+#     // This results in an undefined value, but not in undefined behavior. y becomes
+#     // undefined with some of the window coordinate values. Doesn't matter since
+#     // b's value is checked at the same time with y.
+#     int y = clamp(int(gl_FragCoord.y), _int_1 | int(gl_FragCoord.y), _int_1);
+#
+#     for (int i = _int_1; i < _int_2; i++)
+#     {
+#         if (b > _int_2 && y > _int_1)
+#         {
+#             break;
+#         }
+#         b++;
+#     }
+#
+#     if (b == _int_2)
+#     {
+#         data[clamp(_int_0, _int_1, _int_15)] =
+#             vec4(_int_1, _int_0, _int_0, _int_1);
+#     }
+#     _GLF_color = vec4(data[_int_1]);
+# }
+SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 10
+; Bound: 127
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %41 %117
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 310
+               OpName %4 "main"
+               OpName %12 "data"
+               OpName %15 "buf0"
+               OpMemberName %15 0 "_GLF_uniform_float_values"
+               OpName %17 ""
+               OpName %29 "b"
+               OpName %32 "buf1"
+               OpMemberName %32 0 "_GLF_uniform_int_values"
+               OpName %34 ""
+               OpName %39 "y"
+               OpName %41 "gl_FragCoord"
+               OpName %55 "i"
+               OpName %117 "_GLF_color"
+               OpDecorate %14 ArrayStride 16
+               OpMemberDecorate %15 0 Offset 0
+               OpDecorate %15 Block
+               OpDecorate %17 DescriptorSet 0
+               OpDecorate %17 Binding 0
+               OpDecorate %31 ArrayStride 16
+               OpMemberDecorate %32 0 Offset 0
+               OpDecorate %32 Block
+               OpDecorate %34 DescriptorSet 0
+               OpDecorate %34 Binding 1
+               OpDecorate %41 BuiltIn FragCoord
+               OpDecorate %117 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeFloat 32
+          %7 = OpTypeVector %6 4
+          %8 = OpTypeInt 32 0
+          %9 = OpConstant %8 2
+         %10 = OpTypeArray %7 %9
+         %11 = OpTypePointer Function %10
+         %13 = OpConstant %8 1
+         %14 = OpTypeArray %6 %13
+         %15 = OpTypeStruct %14
+         %16 = OpTypePointer Uniform %15
+         %17 = OpVariable %16 Uniform
+         %18 = OpTypeInt 32 1
+         %19 = OpConstant %18 0
+         %20 = OpTypePointer Uniform %6
+         %28 = OpTypePointer Function %18
+         %30 = OpConstant %8 4
+         %31 = OpTypeArray %18 %30
+         %32 = OpTypeStruct %31
+         %33 = OpTypePointer Uniform %32
+         %34 = OpVariable %33 Uniform
+         %35 = OpConstant %18 1
+         %36 = OpTypePointer Uniform %18
+         %40 = OpTypePointer Input %7
+         %41 = OpVariable %40 Input
+         %42 = OpTypePointer Input %6
+         %66 = OpTypeBool
+         %92 = OpConstant %18 2
+         %97 = OpConstant %18 3
+        %114 = OpTypePointer Function %7
+        %116 = OpTypePointer Output %7
+        %117 = OpVariable %116 Output
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+         %12 = OpVariable %11 Function
+         %29 = OpVariable %28 Function
+         %39 = OpVariable %28 Function
+         %55 = OpVariable %28 Function
+         %21 = OpAccessChain %20 %17 %19 %19
+         %22 = OpLoad %6 %21
+         %23 = OpCompositeConstruct %7 %22 %22 %22 %22
+         %24 = OpAccessChain %20 %17 %19 %19
+         %25 = OpLoad %6 %24
+         %26 = OpCompositeConstruct %7 %25 %25 %25 %25
+         %27 = OpCompositeConstruct %10 %23 %26
+               OpStore %12 %27
+         %37 = OpAccessChain %36 %34 %19 %35
+         %38 = OpLoad %18 %37
+               OpStore %29 %38
+         %43 = OpAccessChain %42 %41 %13
+         %44 = OpLoad %6 %43
+         %45 = OpConvertFToS %18 %44
+         %46 = OpAccessChain %36 %34 %19 %35
+         %47 = OpLoad %18 %46
+         %48 = OpAccessChain %42 %41 %13
+         %49 = OpLoad %6 %48
+         %50 = OpConvertFToS %18 %49
+         %51 = OpBitwiseOr %18 %47 %50
+         %52 = OpAccessChain %36 %34 %19 %35
+         %53 = OpLoad %18 %52
+         %54 = OpExtInst %18 %1 SClamp %45 %51 %53
+               OpStore %39 %54
+         %56 = OpAccessChain %36 %34 %19 %35
+         %57 = OpLoad %18 %56
+               OpStore %55 %57
+               OpBranch %58
+         %58 = OpLabel
+               OpLoopMerge %60 %61 None
+               OpBranch %62
+         %62 = OpLabel
+         %63 = OpLoad %18 %55
+         %64 = OpAccessChain %36 %34 %19 %19
+         %65 = OpLoad %18 %64
+         %67 = OpSLessThan %66 %63 %65
+               OpBranchConditional %67 %59 %60
+         %59 = OpLabel
+         %68 = OpLoad %18 %29
+         %69 = OpAccessChain %36 %34 %19 %19
+         %70 = OpLoad %18 %69
+         %71 = OpSGreaterThan %66 %68 %70
+               OpSelectionMerge %73 None
+               OpBranchConditional %71 %72 %73
+         %72 = OpLabel
+         %74 = OpLoad %18 %39
+         %75 = OpAccessChain %36 %34 %19 %35
+         %76 = OpLoad %18 %75
+         %77 = OpSGreaterThan %66 %74 %76
+               OpBranch %73
+         %73 = OpLabel
+         %78 = OpPhi %66 %71 %59 %77 %72
+               OpSelectionMerge %80 None
+               OpBranchConditional %78 %79 %80
+         %79 = OpLabel
+               OpBranch %60
+         %80 = OpLabel
+         %82 = OpLoad %18 %29
+         %83 = OpIAdd %18 %82 %35
+               OpStore %29 %83
+               OpBranch %61
+         %61 = OpLabel
+         %84 = OpLoad %18 %55
+         %85 = OpIAdd %18 %84 %35
+               OpStore %55 %85
+               OpBranch %58
+         %60 = OpLabel
+         %86 = OpLoad %18 %29
+         %87 = OpAccessChain %36 %34 %19 %19
+         %88 = OpLoad %18 %87
+         %89 = OpIEqual %66 %86 %88
+               OpSelectionMerge %91 None
+               OpBranchConditional %89 %90 %91
+         %90 = OpLabel
+         %93 = OpAccessChain %36 %34 %19 %92
+         %94 = OpLoad %18 %93
+         %95 = OpAccessChain %36 %34 %19 %35
+         %96 = OpLoad %18 %95
+         %98 = OpAccessChain %36 %34 %19 %97
+         %99 = OpLoad %18 %98
+        %100 = OpExtInst %18 %1 SClamp %94 %96 %99
+        %101 = OpAccessChain %36 %34 %19 %35
+        %102 = OpLoad %18 %101
+        %103 = OpConvertSToF %6 %102
+        %104 = OpAccessChain %36 %34 %19 %92
+        %105 = OpLoad %18 %104
+        %106 = OpConvertSToF %6 %105
+        %107 = OpAccessChain %36 %34 %19 %92
+        %108 = OpLoad %18 %107
+        %109 = OpConvertSToF %6 %108
+        %110 = OpAccessChain %36 %34 %19 %35
+        %111 = OpLoad %18 %110
+        %112 = OpConvertSToF %6 %111
+        %113 = OpCompositeConstruct %7 %103 %106 %109 %112
+        %115 = OpAccessChain %114 %12 %100
+               OpStore %115 %113
+               OpBranch %91
+         %91 = OpLabel
+        %118 = OpAccessChain %36 %34 %19 %35
+        %119 = OpLoad %18 %118
+        %120 = OpAccessChain %114 %12 %119
+        %121 = OpLoad %7 %120
+        %122 = OpCompositeExtract %6 %121 0
+        %123 = OpCompositeExtract %6 %121 1
+        %124 = OpCompositeExtract %6 %121 2
+        %125 = OpCompositeExtract %6 %121 3
+        %126 = OpCompositeConstruct %7 %122 %123 %124 %125
+               OpStore %117 %126
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# _GLF_uniform_int_values
+BUFFER variant__GLF_uniform_int_values DATA_TYPE int32[] STD140 DATA
+ 2 1 0 15
+END
+# _GLF_uniform_float_values
+BUFFER variant__GLF_uniform_float_values DATA_TYPE float[] STD140 DATA
+ 1.0
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 256 256
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant__GLF_uniform_int_values AS uniform DESCRIPTOR_SET 0 BINDING 1
+  BIND BUFFER variant__GLF_uniform_float_values AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256
+
+EXPECT variant_framebuffer IDX 0 0 SIZE 256 256 EQ_RGBA 255 0 0 255
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-inc-array-element-loop-lsb.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-inc-array-element-loop-lsb.amber
new file mode 100644
index 0000000..f24bd32
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-inc-array-element-loop-lsb.amber
@@ -0,0 +1,286 @@
+#!amber
+
+# Copyright 2020 Google LLC
+#
+# 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.
+
+
+# A test for a coverage-gap found by the GraphicsFuzz project.
+
+# Short description: A fragment shader that covers a specific SSCP path
+
+# The test passes because the shader always writes red.
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+# variant_fragment_shader is derived from the following GLSL:
+# #version 310 es
+# #define _int_50 _GLF_uniform_int_values[0]
+# #define _int_0 _GLF_uniform_int_values[1]
+# #define _int_1 _GLF_uniform_int_values[2]
+# #define _int_49 _GLF_uniform_int_values[3]
+# #define _float_2_0 _GLF_uniform_float_values[0]
+# #define _float_1_0 _GLF_uniform_float_values[1]
+#
+# precision highp float;
+# precision highp int;
+#
+# // Contents of _GLF_uniform_float_values: [2.0, 1.0]
+# layout(set = 0, binding = 0) uniform buf0
+# {
+#     float _GLF_uniform_float_values[2];
+# };
+#
+# // Contents of _GLF_uniform_int_values: [50, 0, 1, 49]
+# layout(set = 0, binding = 1) uniform buf1
+# {
+#     int _GLF_uniform_int_values[4];
+# };
+#
+# layout(location = 0) out vec4 _GLF_color;
+#
+# void main()
+# {
+#     float A[50];
+#     int i = _int_0;
+#
+#     // Initializes all A elements to 1.0 and leaves i at 49.
+#     for( i = _int_0; i < _int_50; i ++)
+#         A[i] = _float_1_0;
+#
+#     // a becomes 0.
+#     int a = findLSB(0);
+#
+#     // Loops once.
+#     do
+#     {
+#         i ++;
+#         A[clamp(a, _int_0, _int_49)] += _float_1_0;
+#     }
+#     while(a < _int_1 && i < _int_50);
+#
+#     // Always true.
+#     if(A[_int_0] == _float_2_0)
+#     {
+#         _GLF_color = vec4(_int_1, _int_0, _int_0, _int_1);
+#     }
+#     else
+#     {
+#         _GLF_color = vec4(_int_0);
+#         return;
+#     }
+# }
+SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 10
+; Bound: 114
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %94
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 310
+               OpName %4 "main"
+               OpName %8 "i"
+               OpName %12 "buf1"
+               OpMemberName %12 0 "_GLF_uniform_int_values"
+               OpName %14 ""
+               OpName %36 "A"
+               OpName %40 "buf0"
+               OpMemberName %40 0 "_GLF_uniform_float_values"
+               OpName %42 ""
+               OpName %50 "a"
+               OpName %94 "_GLF_color"
+               OpDecorate %11 ArrayStride 16
+               OpMemberDecorate %12 0 Offset 0
+               OpDecorate %12 Block
+               OpDecorate %14 DescriptorSet 0
+               OpDecorate %14 Binding 1
+               OpDecorate %39 ArrayStride 16
+               OpMemberDecorate %40 0 Offset 0
+               OpDecorate %40 Block
+               OpDecorate %42 DescriptorSet 0
+               OpDecorate %42 Binding 0
+               OpDecorate %51 RelaxedPrecision
+               OpDecorate %94 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeInt 32 1
+          %7 = OpTypePointer Function %6
+          %9 = OpTypeInt 32 0
+         %10 = OpConstant %9 4
+         %11 = OpTypeArray %6 %10
+         %12 = OpTypeStruct %11
+         %13 = OpTypePointer Uniform %12
+         %14 = OpVariable %13 Uniform
+         %15 = OpConstant %6 0
+         %16 = OpConstant %6 1
+         %17 = OpTypePointer Uniform %6
+         %30 = OpTypeBool
+         %32 = OpTypeFloat 32
+         %33 = OpConstant %9 50
+         %34 = OpTypeArray %32 %33
+         %35 = OpTypePointer Function %34
+         %38 = OpConstant %9 2
+         %39 = OpTypeArray %32 %38
+         %40 = OpTypeStruct %39
+         %41 = OpTypePointer Uniform %40
+         %42 = OpVariable %41 Uniform
+         %43 = OpTypePointer Uniform %32
+         %46 = OpTypePointer Function %32
+         %61 = OpConstant %6 3
+         %72 = OpConstant %6 2
+         %92 = OpTypeVector %32 4
+         %93 = OpTypePointer Output %92
+         %94 = OpVariable %93 Output
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+          %8 = OpVariable %7 Function
+         %36 = OpVariable %35 Function
+         %50 = OpVariable %7 Function
+         %18 = OpAccessChain %17 %14 %15 %16
+         %19 = OpLoad %6 %18
+               OpStore %8 %19
+         %20 = OpAccessChain %17 %14 %15 %16
+         %21 = OpLoad %6 %20
+               OpStore %8 %21
+               OpBranch %22
+         %22 = OpLabel
+               OpLoopMerge %24 %25 None
+               OpBranch %26
+         %26 = OpLabel
+         %27 = OpLoad %6 %8
+         %28 = OpAccessChain %17 %14 %15 %15
+         %29 = OpLoad %6 %28
+         %31 = OpSLessThan %30 %27 %29
+               OpBranchConditional %31 %23 %24
+         %23 = OpLabel
+         %37 = OpLoad %6 %8
+         %44 = OpAccessChain %43 %42 %15 %16
+         %45 = OpLoad %32 %44
+         %47 = OpAccessChain %46 %36 %37
+               OpStore %47 %45
+               OpBranch %25
+         %25 = OpLabel
+         %48 = OpLoad %6 %8
+         %49 = OpIAdd %6 %48 %16
+               OpStore %8 %49
+               OpBranch %22
+         %24 = OpLabel
+         %51 = OpExtInst %6 %1 FindILsb %15
+               OpStore %50 %51
+               OpBranch %52
+         %52 = OpLabel
+               OpLoopMerge %54 %55 None
+               OpBranch %53
+         %53 = OpLabel
+         %56 = OpLoad %6 %8
+         %57 = OpIAdd %6 %56 %16
+               OpStore %8 %57
+         %58 = OpLoad %6 %50
+         %59 = OpAccessChain %17 %14 %15 %16
+         %60 = OpLoad %6 %59
+         %62 = OpAccessChain %17 %14 %15 %61
+         %63 = OpLoad %6 %62
+         %64 = OpExtInst %6 %1 SClamp %58 %60 %63
+         %65 = OpAccessChain %43 %42 %15 %16
+         %66 = OpLoad %32 %65
+         %67 = OpAccessChain %46 %36 %64
+         %68 = OpLoad %32 %67
+         %69 = OpFAdd %32 %68 %66
+         %70 = OpAccessChain %46 %36 %64
+               OpStore %70 %69
+               OpBranch %55
+         %55 = OpLabel
+         %71 = OpLoad %6 %50
+         %73 = OpAccessChain %17 %14 %15 %72
+         %74 = OpLoad %6 %73
+         %75 = OpSLessThan %30 %71 %74
+               OpSelectionMerge %77 None
+               OpBranchConditional %75 %76 %77
+         %76 = OpLabel
+         %78 = OpLoad %6 %8
+         %79 = OpAccessChain %17 %14 %15 %15
+         %80 = OpLoad %6 %79
+         %81 = OpSLessThan %30 %78 %80
+               OpBranch %77
+         %77 = OpLabel
+         %82 = OpPhi %30 %75 %55 %81 %76
+               OpBranchConditional %82 %52 %54
+         %54 = OpLabel
+         %83 = OpAccessChain %17 %14 %15 %16
+         %84 = OpLoad %6 %83
+         %85 = OpAccessChain %46 %36 %84
+         %86 = OpLoad %32 %85
+         %87 = OpAccessChain %43 %42 %15 %15
+         %88 = OpLoad %32 %87
+         %89 = OpFOrdEqual %30 %86 %88
+               OpSelectionMerge %91 None
+               OpBranchConditional %89 %90 %108
+         %90 = OpLabel
+         %95 = OpAccessChain %17 %14 %15 %72
+         %96 = OpLoad %6 %95
+         %97 = OpConvertSToF %32 %96
+         %98 = OpAccessChain %17 %14 %15 %16
+         %99 = OpLoad %6 %98
+        %100 = OpConvertSToF %32 %99
+        %101 = OpAccessChain %17 %14 %15 %16
+        %102 = OpLoad %6 %101
+        %103 = OpConvertSToF %32 %102
+        %104 = OpAccessChain %17 %14 %15 %72
+        %105 = OpLoad %6 %104
+        %106 = OpConvertSToF %32 %105
+        %107 = OpCompositeConstruct %92 %97 %100 %103 %106
+               OpStore %94 %107
+               OpBranch %91
+        %108 = OpLabel
+        %109 = OpAccessChain %17 %14 %15 %16
+        %110 = OpLoad %6 %109
+        %111 = OpConvertSToF %32 %110
+        %112 = OpCompositeConstruct %92 %111 %111 %111 %111
+               OpStore %94 %112
+               OpReturn
+         %91 = OpLabel
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# _GLF_uniform_int_values
+BUFFER variant__GLF_uniform_int_values DATA_TYPE int32[] STD140 DATA
+ 50 0 1 49
+END
+# _GLF_uniform_float_values
+BUFFER variant__GLF_uniform_float_values DATA_TYPE float[] STD140 DATA
+ 2.0 1.0
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 16 16
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant__GLF_uniform_int_values AS uniform DESCRIPTOR_SET 0 BINDING 1
+  BIND BUFFER variant__GLF_uniform_float_values AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 16 16
+
+EXPECT variant_framebuffer IDX 0 0 SIZE 16 16 EQ_RGBA 255 0 0 255
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-inst-combine-add-sub-determinant.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-inst-combine-add-sub-determinant.amber
new file mode 100644
index 0000000..1933978
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-inst-combine-add-sub-determinant.amber
@@ -0,0 +1,230 @@
+#!amber
+
+# Copyright 2020 Google LLC
+#
+# 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.
+
+
+# A test for a coverage-gap found by the GraphicsFuzz project.
+
+# Short description: A fragment shader that covers a specific inst combine add sub code path
+
+# The test passes because the shader always writes red.
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+# variant_fragment_shader is derived from the following GLSL:
+# #version 310 es
+# #define _int_1 _GLF_uniform_int_values[0]
+# #define _int_0 _GLF_uniform_int_values[1]
+# #define _float_1_0 _GLF_uniform_float_values[0]
+# #define _float_4_0 _GLF_uniform_float_values[1]
+# #define _float_3_0 _GLF_uniform_float_values[2]
+# #define _float_2_0 _GLF_uniform_float_values[3]
+# #define _float_0_0 _GLF_uniform_float_values[4]
+#
+# precision highp float;
+# precision highp int;
+#
+# // Contents of _GLF_uniform_float_values: [1.0, 4.0, 3.0, 2.0, 0.0]
+# layout(set = 0, binding = 0) uniform buf0
+# {
+#     float _GLF_uniform_float_values[5];
+# };
+#
+# // Contents of _GLF_uniform_int_values: [1, 0]
+# layout(set = 0, binding = 1) uniform buf1
+# {
+#     int _GLF_uniform_int_values[2];
+# };
+#
+# layout(location = 0) out vec4 _GLF_color;
+#
+# void main()
+# {
+#     // mix() selects 2.0.
+#     float a = mix(-_float_1_0, 2.0, _float_0_0 < _float_1_0);
+#     mat2 m = mat2(1.0, a, 3.0, 4.0);
+#     float ref = _float_1_0 * _float_4_0 - (_float_2_0)*_float_3_0;
+#
+#     if (determinant(m) == ref)
+#     {
+#         _GLF_color = vec4(_int_1, _int_0, _int_0, _int_1);
+#     }
+#     else
+#     {
+#         _GLF_color = vec4(_int_0);
+#     }
+# }
+SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 8
+; Bound: 90
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %65
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 310
+               OpName %4 "main"
+               OpName %8 "a"
+               OpName %12 "buf0"
+               OpMemberName %12 0 "_GLF_uniform_float_values"
+               OpName %14 ""
+               OpName %33 "m"
+               OpName %42 "ref"
+               OpName %65 "_GLF_color"
+               OpName %68 "buf1"
+               OpMemberName %68 0 "_GLF_uniform_int_values"
+               OpName %70 ""
+               OpDecorate %11 ArrayStride 16
+               OpMemberDecorate %12 0 Offset 0
+               OpDecorate %12 Block
+               OpDecorate %14 DescriptorSet 0
+               OpDecorate %14 Binding 0
+               OpDecorate %65 Location 0
+               OpDecorate %67 ArrayStride 16
+               OpMemberDecorate %68 0 Offset 0
+               OpDecorate %68 Block
+               OpDecorate %70 DescriptorSet 0
+               OpDecorate %70 Binding 1
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeFloat 32
+          %7 = OpTypePointer Function %6
+          %9 = OpTypeInt 32 0
+         %10 = OpConstant %9 5
+         %11 = OpTypeArray %6 %10
+         %12 = OpTypeStruct %11
+         %13 = OpTypePointer Uniform %12
+         %14 = OpVariable %13 Uniform
+         %15 = OpTypeInt 32 1
+         %16 = OpConstant %15 0
+         %17 = OpTypePointer Uniform %6
+         %21 = OpConstant %6 2
+         %22 = OpConstant %15 4
+         %27 = OpTypeBool
+         %30 = OpTypeVector %6 2
+         %31 = OpTypeMatrix %30 2
+         %32 = OpTypePointer Function %31
+         %34 = OpConstant %6 1
+         %36 = OpConstant %6 3
+         %37 = OpConstant %6 4
+         %38 = OpConstant %6 0
+         %45 = OpConstant %15 1
+         %49 = OpConstant %15 3
+         %52 = OpConstant %15 2
+         %63 = OpTypeVector %6 4
+         %64 = OpTypePointer Output %63
+         %65 = OpVariable %64 Output
+         %66 = OpConstant %9 2
+         %67 = OpTypeArray %15 %66
+         %68 = OpTypeStruct %67
+         %69 = OpTypePointer Uniform %68
+         %70 = OpVariable %69 Uniform
+         %71 = OpTypePointer Uniform %15
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+          %8 = OpVariable %7 Function
+         %33 = OpVariable %32 Function
+         %42 = OpVariable %7 Function
+         %18 = OpAccessChain %17 %14 %16 %16
+         %19 = OpLoad %6 %18
+         %20 = OpFNegate %6 %19
+         %23 = OpAccessChain %17 %14 %16 %22
+         %24 = OpLoad %6 %23
+         %25 = OpAccessChain %17 %14 %16 %16
+         %26 = OpLoad %6 %25
+         %28 = OpFOrdLessThan %27 %24 %26
+         %29 = OpSelect %6 %28 %21 %20
+               OpStore %8 %29
+         %35 = OpLoad %6 %8
+         %39 = OpCompositeConstruct %30 %34 %35
+         %40 = OpCompositeConstruct %30 %36 %37
+         %41 = OpCompositeConstruct %31 %39 %40
+               OpStore %33 %41
+         %43 = OpAccessChain %17 %14 %16 %16
+         %44 = OpLoad %6 %43
+         %46 = OpAccessChain %17 %14 %16 %45
+         %47 = OpLoad %6 %46
+         %48 = OpFMul %6 %44 %47
+         %50 = OpAccessChain %17 %14 %16 %49
+         %51 = OpLoad %6 %50
+         %53 = OpAccessChain %17 %14 %16 %52
+         %54 = OpLoad %6 %53
+         %55 = OpFMul %6 %51 %54
+         %56 = OpFSub %6 %48 %55
+               OpStore %42 %56
+         %57 = OpLoad %31 %33
+         %58 = OpExtInst %6 %1 Determinant %57
+         %59 = OpLoad %6 %42
+         %60 = OpFOrdEqual %27 %58 %59
+               OpSelectionMerge %62 None
+               OpBranchConditional %60 %61 %85
+         %61 = OpLabel
+         %72 = OpAccessChain %71 %70 %16 %16
+         %73 = OpLoad %15 %72
+         %74 = OpConvertSToF %6 %73
+         %75 = OpAccessChain %71 %70 %16 %45
+         %76 = OpLoad %15 %75
+         %77 = OpConvertSToF %6 %76
+         %78 = OpAccessChain %71 %70 %16 %45
+         %79 = OpLoad %15 %78
+         %80 = OpConvertSToF %6 %79
+         %81 = OpAccessChain %71 %70 %16 %16
+         %82 = OpLoad %15 %81
+         %83 = OpConvertSToF %6 %82
+         %84 = OpCompositeConstruct %63 %74 %77 %80 %83
+               OpStore %65 %84
+               OpBranch %62
+         %85 = OpLabel
+         %86 = OpAccessChain %71 %70 %16 %45
+         %87 = OpLoad %15 %86
+         %88 = OpConvertSToF %6 %87
+         %89 = OpCompositeConstruct %63 %88 %88 %88 %88
+               OpStore %65 %89
+               OpBranch %62
+         %62 = OpLabel
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# _GLF_uniform_int_values
+BUFFER variant__GLF_uniform_int_values DATA_TYPE int32[] STD140 DATA
+ 1 0
+END
+# _GLF_uniform_float_values
+BUFFER variant__GLF_uniform_float_values DATA_TYPE float[] STD140 DATA
+ 1.0 4.0 3.0 2.0 0.0
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 256 256
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant__GLF_uniform_int_values AS uniform DESCRIPTOR_SET 0 BINDING 1
+  BIND BUFFER variant__GLF_uniform_float_values AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256
+
+EXPECT variant_framebuffer IDX 0 0 SIZE 256 256 EQ_RGBA 255 0 0 255
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-inst-combine-add-sub-increase-negative.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-inst-combine-add-sub-increase-negative.amber
new file mode 100644
index 0000000..f768d47
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-inst-combine-add-sub-increase-negative.amber
@@ -0,0 +1,264 @@
+#!amber
+
+# Copyright 2020 Google LLC
+#
+# 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.
+
+
+# A test for a coverage-gap found by the GraphicsFuzz project.
+
+# Short description: A fragment shader that covers a specific inst combine add sub code path
+
+# The test passes because the shader always writes red.
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+# variant_fragment_shader is derived from the following GLSL:
+# #version 310 es
+# #define _int_0 _GLF_uniform_int_values[0]
+# #define _int_1 _GLF_uniform_int_values[1]
+# #define _int_2 _GLF_uniform_int_values[2]
+# #define _float_0_0 _GLF_uniform_float_values[0]
+#
+# precision highp float;
+# precision highp int;
+#
+# // Contents of _GLF_uniform_float_values: 0.0
+# layout(set = 0, binding = 0) uniform buf0
+# {
+#     float _GLF_uniform_float_values[1];
+# };
+#
+# // Contents of _GLF_uniform_int_values: [0, 1, 2]
+# layout(set = 0, binding = 1) uniform buf1
+# {
+#     int _GLF_uniform_int_values[3];
+# };
+#
+# layout(location = 0) out vec4 _GLF_color;
+#
+# void main()
+# {
+#     int arr[2];
+#     for (int i = _int_0; i < _int_2; i++)
+#     {
+#         arr[i] = _int_0;
+#     }
+#
+#     int a = -1;
+#
+#     // Always true.
+#     if (!(gl_FragCoord.y < _float_0_0))
+#     {
+#         arr[++a] = _int_1;
+#     }
+#
+#     arr[++a] = _int_2;
+#
+#     // Checks arr[0] == 1. Always true.
+#     if (arr[_int_0] == _int_1)
+#     {
+#         _GLF_color = vec4(a, _int_0, _int_0, a);
+#     }
+#     else
+#     {
+#         _GLF_color = vec4(_int_0);
+#     }
+# }
+SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 8
+; Bound: 99
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %46 %82
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 310
+               OpName %4 "main"
+               OpName %8 "i"
+               OpName %12 "buf1"
+               OpMemberName %12 0 "_GLF_uniform_int_values"
+               OpName %14 ""
+               OpName %33 "arr"
+               OpName %41 "a"
+               OpName %46 "gl_FragCoord"
+               OpName %52 "buf0"
+               OpMemberName %52 0 "_GLF_uniform_float_values"
+               OpName %54 ""
+               OpName %82 "_GLF_color"
+               OpDecorate %11 ArrayStride 16
+               OpMemberDecorate %12 0 Offset 0
+               OpDecorate %12 Block
+               OpDecorate %14 DescriptorSet 0
+               OpDecorate %14 Binding 1
+               OpDecorate %46 BuiltIn FragCoord
+               OpDecorate %51 ArrayStride 16
+               OpMemberDecorate %52 0 Offset 0
+               OpDecorate %52 Block
+               OpDecorate %54 DescriptorSet 0
+               OpDecorate %54 Binding 0
+               OpDecorate %82 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeInt 32 1
+          %7 = OpTypePointer Function %6
+          %9 = OpTypeInt 32 0
+         %10 = OpConstant %9 3
+         %11 = OpTypeArray %6 %10
+         %12 = OpTypeStruct %11
+         %13 = OpTypePointer Uniform %12
+         %14 = OpVariable %13 Uniform
+         %15 = OpConstant %6 0
+         %16 = OpTypePointer Uniform %6
+         %25 = OpConstant %6 2
+         %28 = OpTypeBool
+         %30 = OpConstant %9 2
+         %31 = OpTypeArray %6 %30
+         %32 = OpTypePointer Function %31
+         %39 = OpConstant %6 1
+         %42 = OpConstant %6 -1
+         %43 = OpTypeFloat 32
+         %44 = OpTypeVector %43 4
+         %45 = OpTypePointer Input %44
+         %46 = OpVariable %45 Input
+         %47 = OpConstant %9 1
+         %48 = OpTypePointer Input %43
+         %51 = OpTypeArray %43 %47
+         %52 = OpTypeStruct %51
+         %53 = OpTypePointer Uniform %52
+         %54 = OpVariable %53 Uniform
+         %55 = OpTypePointer Uniform %43
+         %81 = OpTypePointer Output %44
+         %82 = OpVariable %81 Output
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+          %8 = OpVariable %7 Function
+         %33 = OpVariable %32 Function
+         %41 = OpVariable %7 Function
+         %17 = OpAccessChain %16 %14 %15 %15
+         %18 = OpLoad %6 %17
+               OpStore %8 %18
+               OpBranch %19
+         %19 = OpLabel
+               OpLoopMerge %21 %22 None
+               OpBranch %23
+         %23 = OpLabel
+         %24 = OpLoad %6 %8
+         %26 = OpAccessChain %16 %14 %15 %25
+         %27 = OpLoad %6 %26
+         %29 = OpSLessThan %28 %24 %27
+               OpBranchConditional %29 %20 %21
+         %20 = OpLabel
+         %34 = OpLoad %6 %8
+         %35 = OpAccessChain %16 %14 %15 %15
+         %36 = OpLoad %6 %35
+         %37 = OpAccessChain %7 %33 %34
+               OpStore %37 %36
+               OpBranch %22
+         %22 = OpLabel
+         %38 = OpLoad %6 %8
+         %40 = OpIAdd %6 %38 %39
+               OpStore %8 %40
+               OpBranch %19
+         %21 = OpLabel
+               OpStore %41 %42
+         %49 = OpAccessChain %48 %46 %47
+         %50 = OpLoad %43 %49
+         %56 = OpAccessChain %55 %54 %15 %15
+         %57 = OpLoad %43 %56
+         %58 = OpFOrdLessThan %28 %50 %57
+         %59 = OpLogicalNot %28 %58
+               OpSelectionMerge %61 None
+               OpBranchConditional %59 %60 %61
+         %60 = OpLabel
+         %62 = OpLoad %6 %41
+         %63 = OpIAdd %6 %62 %39
+               OpStore %41 %63
+         %64 = OpAccessChain %16 %14 %15 %39
+         %65 = OpLoad %6 %64
+         %66 = OpAccessChain %7 %33 %63
+               OpStore %66 %65
+               OpBranch %61
+         %61 = OpLabel
+         %67 = OpLoad %6 %41
+         %68 = OpIAdd %6 %67 %39
+               OpStore %41 %68
+         %69 = OpAccessChain %16 %14 %15 %25
+         %70 = OpLoad %6 %69
+         %71 = OpAccessChain %7 %33 %68
+               OpStore %71 %70
+         %72 = OpAccessChain %16 %14 %15 %15
+         %73 = OpLoad %6 %72
+         %74 = OpAccessChain %7 %33 %73
+         %75 = OpLoad %6 %74
+         %76 = OpAccessChain %16 %14 %15 %39
+         %77 = OpLoad %6 %76
+         %78 = OpIEqual %28 %75 %77
+               OpSelectionMerge %80 None
+               OpBranchConditional %78 %79 %94
+         %79 = OpLabel
+         %83 = OpLoad %6 %41
+         %84 = OpConvertSToF %43 %83
+         %85 = OpAccessChain %16 %14 %15 %15
+         %86 = OpLoad %6 %85
+         %87 = OpConvertSToF %43 %86
+         %88 = OpAccessChain %16 %14 %15 %15
+         %89 = OpLoad %6 %88
+         %90 = OpConvertSToF %43 %89
+         %91 = OpLoad %6 %41
+         %92 = OpConvertSToF %43 %91
+         %93 = OpCompositeConstruct %44 %84 %87 %90 %92
+               OpStore %82 %93
+               OpBranch %80
+         %94 = OpLabel
+         %95 = OpAccessChain %16 %14 %15 %15
+         %96 = OpLoad %6 %95
+         %97 = OpConvertSToF %43 %96
+         %98 = OpCompositeConstruct %44 %97 %97 %97 %97
+               OpStore %82 %98
+               OpBranch %80
+         %80 = OpLabel
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# _GLF_uniform_float_values
+BUFFER variant__GLF_uniform_float_values DATA_TYPE float[] STD140 DATA
+ 0.0
+END
+# _GLF_uniform_int_values
+BUFFER variant__GLF_uniform_int_values DATA_TYPE int32[] STD140 DATA
+ 0 1 2
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 256 256
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant__GLF_uniform_float_values AS uniform DESCRIPTOR_SET 0 BINDING 0
+  BIND BUFFER variant__GLF_uniform_int_values AS uniform DESCRIPTOR_SET 0 BINDING 1
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256
+
+EXPECT variant_framebuffer IDX 0 0 SIZE 256 256 EQ_RGBA 255 0 0 255
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-inst-combine-add-sub-neg-func-arg.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-inst-combine-add-sub-neg-func-arg.amber
new file mode 100644
index 0000000..fbe2f0c
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-inst-combine-add-sub-neg-func-arg.amber
@@ -0,0 +1,266 @@
+#!amber
+
+# Copyright 2020 Google LLC
+#
+# 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.
+
+
+# A test for a coverage-gap found by the GraphicsFuzz project.
+
+# Short description: A fragment shader that covers a specific add/sub combining path
+
+# The test passes because the shader always writes red.
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+# variant_fragment_shader is derived from the following GLSL:
+# #version 310 es
+# #define _int_9 _GLF_uniform_int_values[0]
+# #define _int_1 _GLF_uniform_int_values[1]
+# #define _int_0 _GLF_uniform_int_values[2]
+# #define _int_5 _GLF_uniform_int_values[3]
+# #define _int_10 _GLF_uniform_int_values[4]
+#
+# precision highp float;
+# precision highp int;
+#
+# // Contents of _GLF_uniform_int_values: [9, 1, 0, 5, 10]
+# layout(set = 0, binding = 0) uniform buf0
+# {
+#     int _GLF_uniform_int_values[5];
+# };
+#
+# layout(location = 0) out vec4 _GLF_color;
+#
+# int func(float f)
+# {
+#     int a = _int_1;
+#     int b = _int_0;
+#
+#     for (int i = _int_0; i < _int_10; i++)
+#     {
+#         if (a > _int_5)
+#         {
+#             break;
+#         }
+#
+#         // Simplifies to a = i - 2.
+#         a = int(f) - 1 - _int_1 + i;
+#
+#         b++;
+#     }
+#
+#     if (b == _int_9)
+#     {
+#         return _int_1;
+#     }
+#     else
+#     {
+#         return _int_0;
+#     }
+# }
+# void main()
+# {
+#     if (func(-9.3 + 10.0) == _int_1)
+#     {
+#         _GLF_color = vec4(_int_1, _int_0, _int_0, _int_1);
+#     }
+#     else
+#     {
+#         _GLF_color = vec4(_int_0);
+#     }
+# }
+SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 8
+; Bound: 107
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %88
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 310
+               OpName %4 "main"
+               OpName %11 "func(f1;"
+               OpName %10 "f"
+               OpName %14 "a"
+               OpName %18 "buf0"
+               OpMemberName %18 0 "_GLF_uniform_int_values"
+               OpName %20 ""
+               OpName %26 "b"
+               OpName %30 "i"
+               OpName %79 "param"
+               OpName %88 "_GLF_color"
+               OpDecorate %17 ArrayStride 16
+               OpMemberDecorate %18 0 Offset 0
+               OpDecorate %18 Block
+               OpDecorate %20 DescriptorSet 0
+               OpDecorate %20 Binding 0
+               OpDecorate %88 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeFloat 32
+          %7 = OpTypePointer Function %6
+          %8 = OpTypeInt 32 1
+          %9 = OpTypeFunction %8 %7
+         %13 = OpTypePointer Function %8
+         %15 = OpTypeInt 32 0
+         %16 = OpConstant %15 5
+         %17 = OpTypeArray %8 %16
+         %18 = OpTypeStruct %17
+         %19 = OpTypePointer Uniform %18
+         %20 = OpVariable %19 Uniform
+         %21 = OpConstant %8 0
+         %22 = OpConstant %8 1
+         %23 = OpTypePointer Uniform %8
+         %27 = OpConstant %8 2
+         %39 = OpConstant %8 4
+         %42 = OpTypeBool
+         %45 = OpConstant %8 3
+         %78 = OpConstant %6 0.699999988
+         %86 = OpTypeVector %6 4
+         %87 = OpTypePointer Output %86
+         %88 = OpVariable %87 Output
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+         %79 = OpVariable %7 Function
+               OpStore %79 %78
+         %80 = OpFunctionCall %8 %11 %79
+         %81 = OpAccessChain %23 %20 %21 %22
+         %82 = OpLoad %8 %81
+         %83 = OpIEqual %42 %80 %82
+               OpSelectionMerge %85 None
+               OpBranchConditional %83 %84 %102
+         %84 = OpLabel
+         %89 = OpAccessChain %23 %20 %21 %22
+         %90 = OpLoad %8 %89
+         %91 = OpConvertSToF %6 %90
+         %92 = OpAccessChain %23 %20 %21 %27
+         %93 = OpLoad %8 %92
+         %94 = OpConvertSToF %6 %93
+         %95 = OpAccessChain %23 %20 %21 %27
+         %96 = OpLoad %8 %95
+         %97 = OpConvertSToF %6 %96
+         %98 = OpAccessChain %23 %20 %21 %22
+         %99 = OpLoad %8 %98
+        %100 = OpConvertSToF %6 %99
+        %101 = OpCompositeConstruct %86 %91 %94 %97 %100
+               OpStore %88 %101
+               OpBranch %85
+        %102 = OpLabel
+        %103 = OpAccessChain %23 %20 %21 %27
+        %104 = OpLoad %8 %103
+        %105 = OpConvertSToF %6 %104
+        %106 = OpCompositeConstruct %86 %105 %105 %105 %105
+               OpStore %88 %106
+               OpBranch %85
+         %85 = OpLabel
+               OpReturn
+               OpFunctionEnd
+         %11 = OpFunction %8 None %9
+         %10 = OpFunctionParameter %7
+         %12 = OpLabel
+         %14 = OpVariable %13 Function
+         %26 = OpVariable %13 Function
+         %30 = OpVariable %13 Function
+         %24 = OpAccessChain %23 %20 %21 %22
+         %25 = OpLoad %8 %24
+               OpStore %14 %25
+         %28 = OpAccessChain %23 %20 %21 %27
+         %29 = OpLoad %8 %28
+               OpStore %26 %29
+         %31 = OpAccessChain %23 %20 %21 %27
+         %32 = OpLoad %8 %31
+               OpStore %30 %32
+               OpBranch %33
+         %33 = OpLabel
+               OpLoopMerge %35 %36 None
+               OpBranch %37
+         %37 = OpLabel
+         %38 = OpLoad %8 %30
+         %40 = OpAccessChain %23 %20 %21 %39
+         %41 = OpLoad %8 %40
+         %43 = OpSLessThan %42 %38 %41
+               OpBranchConditional %43 %34 %35
+         %34 = OpLabel
+         %44 = OpLoad %8 %14
+         %46 = OpAccessChain %23 %20 %21 %45
+         %47 = OpLoad %8 %46
+         %48 = OpSGreaterThan %42 %44 %47
+               OpSelectionMerge %50 None
+               OpBranchConditional %48 %49 %50
+         %49 = OpLabel
+               OpBranch %35
+         %50 = OpLabel
+         %52 = OpLoad %6 %10
+         %53 = OpConvertFToS %8 %52
+         %54 = OpISub %8 %53 %22
+         %55 = OpAccessChain %23 %20 %21 %22
+         %56 = OpLoad %8 %55
+         %57 = OpISub %8 %54 %56
+         %58 = OpLoad %8 %30
+         %59 = OpIAdd %8 %57 %58
+               OpStore %14 %59
+         %60 = OpLoad %8 %26
+         %61 = OpIAdd %8 %60 %22
+               OpStore %26 %61
+               OpBranch %36
+         %36 = OpLabel
+         %62 = OpLoad %8 %30
+         %63 = OpIAdd %8 %62 %22
+               OpStore %30 %63
+               OpBranch %33
+         %35 = OpLabel
+         %64 = OpLoad %8 %26
+         %65 = OpAccessChain %23 %20 %21 %21
+         %66 = OpLoad %8 %65
+         %67 = OpIEqual %42 %64 %66
+               OpSelectionMerge %69 None
+               OpBranchConditional %67 %68 %73
+         %68 = OpLabel
+         %70 = OpAccessChain %23 %20 %21 %22
+         %71 = OpLoad %8 %70
+               OpReturnValue %71
+         %73 = OpLabel
+         %74 = OpAccessChain %23 %20 %21 %27
+         %75 = OpLoad %8 %74
+               OpReturnValue %75
+         %69 = OpLabel
+               OpUnreachable
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# _GLF_uniform_int_values
+BUFFER variant__GLF_uniform_int_values DATA_TYPE int32[] STD140 DATA
+ 9 1 0 5 10
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 256 256
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant__GLF_uniform_int_values AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256
+
+EXPECT variant_framebuffer IDX 0 0 SIZE 256 256 EQ_RGBA 255 0 0 255
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-inst-combine-and-or-xor-for-bitfieldinsert.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-inst-combine-and-or-xor-for-bitfieldinsert.amber
new file mode 100644
index 0000000..eb436f4
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-inst-combine-and-or-xor-for-bitfieldinsert.amber
@@ -0,0 +1,138 @@
+#!amber
+
+# Copyright 2020 Google LLC
+#
+# 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.
+
+
+# A test for a coverage-gap found by the GraphicsFuzz project.
+
+# Short description: A fragment shader that covers a specific inst combine and or xor code path
+
+# The test passes because the shader always writes red.
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+# variant_fragment_shader is derived from the following GLSL:
+# #version 310 es
+#
+# precision highp int;
+#
+# precision highp float;
+#
+# layout(location = 0) out vec4 _GLF_color;
+#
+# void main()
+# {
+#     int a = 1;
+#
+#     for (int i = 0; i < 2; i++)
+#     {
+#         a = bitfieldInsert(1, 1, 1, i);
+#     }
+#
+#     if (a == 3) {
+#         _GLF_color = vec4(1, 0, 0, 1);
+#     } else {
+#         _GLF_color = vec4(0);
+#     }
+# }
+SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 10
+; Bound: 39
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %33
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 310
+               OpName %4 "main"
+               OpName %8 "a"
+               OpName %10 "i"
+               OpName %33 "_GLF_color"
+               OpDecorate %33 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeInt 32 1
+          %7 = OpTypePointer Function %6
+          %9 = OpConstant %6 1
+         %11 = OpConstant %6 0
+         %18 = OpConstant %6 2
+         %19 = OpTypeBool
+         %26 = OpConstant %6 3
+         %30 = OpTypeFloat 32
+         %31 = OpTypeVector %30 4
+         %32 = OpTypePointer Output %31
+         %33 = OpVariable %32 Output
+         %34 = OpConstant %30 1
+         %35 = OpConstant %30 0
+         %36 = OpConstantComposite %31 %34 %35 %35 %34
+         %38 = OpConstantComposite %31 %35 %35 %35 %35
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+          %8 = OpVariable %7 Function
+         %10 = OpVariable %7 Function
+               OpStore %8 %9
+               OpStore %10 %11
+               OpBranch %12
+         %12 = OpLabel
+               OpLoopMerge %14 %15 None
+               OpBranch %16
+         %16 = OpLabel
+         %17 = OpLoad %6 %10
+         %20 = OpSLessThan %19 %17 %18
+               OpBranchConditional %20 %13 %14
+         %13 = OpLabel
+         %21 = OpLoad %6 %10
+         %22 = OpBitFieldInsert %6 %9 %9 %9 %21
+               OpStore %8 %22
+               OpBranch %15
+         %15 = OpLabel
+         %23 = OpLoad %6 %10
+         %24 = OpIAdd %6 %23 %9
+               OpStore %10 %24
+               OpBranch %12
+         %14 = OpLabel
+         %25 = OpLoad %6 %8
+         %27 = OpIEqual %19 %25 %26
+               OpSelectionMerge %29 None
+               OpBranchConditional %27 %28 %37
+         %28 = OpLabel
+               OpStore %33 %36
+               OpBranch %29
+         %37 = OpLabel
+               OpStore %33 %38
+               OpBranch %29
+         %29 = OpLabel
+               OpReturn
+               OpFunctionEnd
+END
+
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 16 16
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 16 16
+
+EXPECT variant_framebuffer IDX 0 0 SIZE 16 16 EQ_RGBA 255 0 0 255
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-inst-combine-and-or-xor-pack-unpack.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-inst-combine-and-or-xor-pack-unpack.amber
new file mode 100644
index 0000000..125e1b1
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-inst-combine-and-or-xor-pack-unpack.amber
@@ -0,0 +1,288 @@
+#!amber
+
+# Copyright 2020 Google LLC
+#
+# 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.
+
+
+# A test for a coverage-gap found by the GraphicsFuzz project.
+
+# Short description: A fragment shader that covers a specific inst combine and or xor code path
+
+# The test passes because the shader always writes red.
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+# variant_fragment_shader is derived from the following GLSL:
+# #version 310 es
+# #define _int_3 _GLF_uniform_int_values[0]
+# #define _int_0 _GLF_uniform_int_values[1]
+# #define _int_2 _GLF_uniform_int_values[2]
+# #define _int_1 _GLF_uniform_int_values[3]
+# #define _float_1_0 _GLF_uniform_float_values[0]
+# #define _float_127_0 _GLF_uniform_float_values[1]
+#
+# precision highp float;
+# precision highp int;
+#
+# // Contents of _GLF_uniform_float_values: [1.0, 127.0]
+# layout(set = 0, binding = 0) uniform buf0
+# {
+#     float _GLF_uniform_float_values[2];
+# };
+#
+# // Contents of _GLF_uniform_int_values: [3, 0, 2, 1]
+# layout(set = 0, binding = 1) uniform buf1
+# {
+#     int _GLF_uniform_int_values[4];
+# };
+#
+# layout(location = 0) out vec4 _GLF_color;
+#
+# void main()
+# {
+#     // Packs the components into an unsigned integer of 4294967295u.
+#     uint a = packUnorm4x8(vec4(_float_1_0));
+#
+#     // Unpacks the packed integer into signed integers and converts them into
+#     // normalized floating-point values.
+#     vec4 v1 = unpackSnorm4x8(a);
+#
+#     // Reference values. The unpacked values were also divided by 127.0, thus they
+#     // can be compared to the reference value regardless of loss of precision.
+#     vec4 ref = vec4(-_float_1_0 / _float_127_0, -_float_1_0 / _float_127_0,
+#                     -_float_1_0 / _float_127_0, -_float_1_0 / _float_127_0);
+#
+#     if (v1[_int_0] == ref[_int_3] && v1[_int_1] == ref[_int_2] &&
+#         v1[_int_2] == ref[_int_1] && v1[_int_3] == ref[_int_0])
+#     {
+#         _GLF_color = vec4(_int_1, _int_0, _int_0, _int_1);
+#     }
+#     else
+#     {
+#         _GLF_color = vec4(v1[_int_0]);
+#     }
+# }
+SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 8
+; Bound: 132
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %112
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 310
+               OpName %4 "main"
+               OpName %8 "a"
+               OpName %12 "buf0"
+               OpMemberName %12 0 "_GLF_uniform_float_values"
+               OpName %14 ""
+               OpName %24 "v1"
+               OpName %27 "ref"
+               OpName %57 "buf1"
+               OpMemberName %57 0 "_GLF_uniform_int_values"
+               OpName %59 ""
+               OpName %112 "_GLF_color"
+               OpDecorate %11 ArrayStride 16
+               OpMemberDecorate %12 0 Offset 0
+               OpDecorate %12 Block
+               OpDecorate %14 DescriptorSet 0
+               OpDecorate %14 Binding 0
+               OpDecorate %56 ArrayStride 16
+               OpMemberDecorate %57 0 Offset 0
+               OpDecorate %57 Block
+               OpDecorate %59 DescriptorSet 0
+               OpDecorate %59 Binding 1
+               OpDecorate %112 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeInt 32 0
+          %7 = OpTypePointer Function %6
+          %9 = OpTypeFloat 32
+         %10 = OpConstant %6 2
+         %11 = OpTypeArray %9 %10
+         %12 = OpTypeStruct %11
+         %13 = OpTypePointer Uniform %12
+         %14 = OpVariable %13 Uniform
+         %15 = OpTypeInt 32 1
+         %16 = OpConstant %15 0
+         %17 = OpTypePointer Uniform %9
+         %20 = OpTypeVector %9 4
+         %23 = OpTypePointer Function %20
+         %31 = OpConstant %15 1
+         %54 = OpTypeBool
+         %55 = OpConstant %6 4
+         %56 = OpTypeArray %15 %55
+         %57 = OpTypeStruct %56
+         %58 = OpTypePointer Uniform %57
+         %59 = OpVariable %58 Uniform
+         %60 = OpTypePointer Uniform %15
+         %63 = OpTypePointer Function %9
+         %73 = OpConstant %15 3
+         %78 = OpConstant %15 2
+        %111 = OpTypePointer Output %20
+        %112 = OpVariable %111 Output
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+          %8 = OpVariable %7 Function
+         %24 = OpVariable %23 Function
+         %27 = OpVariable %23 Function
+         %18 = OpAccessChain %17 %14 %16 %16
+         %19 = OpLoad %9 %18
+         %21 = OpCompositeConstruct %20 %19 %19 %19 %19
+         %22 = OpExtInst %6 %1 PackUnorm4x8 %21
+               OpStore %8 %22
+         %25 = OpLoad %6 %8
+         %26 = OpExtInst %20 %1 UnpackSnorm4x8 %25
+               OpStore %24 %26
+         %28 = OpAccessChain %17 %14 %16 %16
+         %29 = OpLoad %9 %28
+         %30 = OpFNegate %9 %29
+         %32 = OpAccessChain %17 %14 %16 %31
+         %33 = OpLoad %9 %32
+         %34 = OpFDiv %9 %30 %33
+         %35 = OpAccessChain %17 %14 %16 %16
+         %36 = OpLoad %9 %35
+         %37 = OpFNegate %9 %36
+         %38 = OpAccessChain %17 %14 %16 %31
+         %39 = OpLoad %9 %38
+         %40 = OpFDiv %9 %37 %39
+         %41 = OpAccessChain %17 %14 %16 %16
+         %42 = OpLoad %9 %41
+         %43 = OpFNegate %9 %42
+         %44 = OpAccessChain %17 %14 %16 %31
+         %45 = OpLoad %9 %44
+         %46 = OpFDiv %9 %43 %45
+         %47 = OpAccessChain %17 %14 %16 %16
+         %48 = OpLoad %9 %47
+         %49 = OpFNegate %9 %48
+         %50 = OpAccessChain %17 %14 %16 %31
+         %51 = OpLoad %9 %50
+         %52 = OpFDiv %9 %49 %51
+         %53 = OpCompositeConstruct %20 %34 %40 %46 %52
+               OpStore %27 %53
+         %61 = OpAccessChain %60 %59 %16 %31
+         %62 = OpLoad %15 %61
+         %64 = OpAccessChain %63 %24 %62
+         %65 = OpLoad %9 %64
+         %66 = OpAccessChain %60 %59 %16 %16
+         %67 = OpLoad %15 %66
+         %68 = OpAccessChain %63 %27 %67
+         %69 = OpLoad %9 %68
+         %70 = OpFOrdEqual %54 %65 %69
+               OpSelectionMerge %72 None
+               OpBranchConditional %70 %71 %72
+         %71 = OpLabel
+         %74 = OpAccessChain %60 %59 %16 %73
+         %75 = OpLoad %15 %74
+         %76 = OpAccessChain %63 %24 %75
+         %77 = OpLoad %9 %76
+         %79 = OpAccessChain %60 %59 %16 %78
+         %80 = OpLoad %15 %79
+         %81 = OpAccessChain %63 %27 %80
+         %82 = OpLoad %9 %81
+         %83 = OpFOrdEqual %54 %77 %82
+               OpBranch %72
+         %72 = OpLabel
+         %84 = OpPhi %54 %70 %5 %83 %71
+               OpSelectionMerge %86 None
+               OpBranchConditional %84 %85 %86
+         %85 = OpLabel
+         %87 = OpAccessChain %60 %59 %16 %78
+         %88 = OpLoad %15 %87
+         %89 = OpAccessChain %63 %24 %88
+         %90 = OpLoad %9 %89
+         %91 = OpAccessChain %60 %59 %16 %73
+         %92 = OpLoad %15 %91
+         %93 = OpAccessChain %63 %27 %92
+         %94 = OpLoad %9 %93
+         %95 = OpFOrdEqual %54 %90 %94
+               OpBranch %86
+         %86 = OpLabel
+         %96 = OpPhi %54 %84 %72 %95 %85
+               OpSelectionMerge %98 None
+               OpBranchConditional %96 %97 %98
+         %97 = OpLabel
+         %99 = OpAccessChain %60 %59 %16 %16
+        %100 = OpLoad %15 %99
+        %101 = OpAccessChain %63 %24 %100
+        %102 = OpLoad %9 %101
+        %103 = OpAccessChain %60 %59 %16 %31
+        %104 = OpLoad %15 %103
+        %105 = OpAccessChain %63 %27 %104
+        %106 = OpLoad %9 %105
+        %107 = OpFOrdEqual %54 %102 %106
+               OpBranch %98
+         %98 = OpLabel
+        %108 = OpPhi %54 %96 %86 %107 %97
+               OpSelectionMerge %110 None
+               OpBranchConditional %108 %109 %126
+        %109 = OpLabel
+        %113 = OpAccessChain %60 %59 %16 %73
+        %114 = OpLoad %15 %113
+        %115 = OpConvertSToF %9 %114
+        %116 = OpAccessChain %60 %59 %16 %31
+        %117 = OpLoad %15 %116
+        %118 = OpConvertSToF %9 %117
+        %119 = OpAccessChain %60 %59 %16 %31
+        %120 = OpLoad %15 %119
+        %121 = OpConvertSToF %9 %120
+        %122 = OpAccessChain %60 %59 %16 %73
+        %123 = OpLoad %15 %122
+        %124 = OpConvertSToF %9 %123
+        %125 = OpCompositeConstruct %20 %115 %118 %121 %124
+               OpStore %112 %125
+               OpBranch %110
+        %126 = OpLabel
+        %127 = OpAccessChain %60 %59 %16 %31
+        %128 = OpLoad %15 %127
+        %129 = OpAccessChain %63 %24 %128
+        %130 = OpLoad %9 %129
+        %131 = OpCompositeConstruct %20 %130 %130 %130 %130
+               OpStore %112 %131
+               OpBranch %110
+        %110 = OpLabel
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# _GLF_uniform_int_values
+BUFFER variant__GLF_uniform_int_values DATA_TYPE int32[] STD140 DATA
+ 3 0 2 1
+END
+# _GLF_uniform_float_values
+BUFFER variant__GLF_uniform_float_values DATA_TYPE float[] STD140 DATA
+ 1.0 127.0
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 256 256
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant__GLF_uniform_int_values AS uniform DESCRIPTOR_SET 0 BINDING 1
+  BIND BUFFER variant__GLF_uniform_float_values AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256
+
+EXPECT variant_framebuffer IDX 0 0 SIZE 256 256 EQ_RGBA 255 0 0 255
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-inst-combine-and-or-xor-switch.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-inst-combine-and-or-xor-switch.amber
new file mode 100644
index 0000000..4ba9323
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-inst-combine-and-or-xor-switch.amber
@@ -0,0 +1,235 @@
+#!amber
+
+# Copyright 2020 Google LLC
+#
+# 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.
+
+
+# A test for a coverage-gap found by the GraphicsFuzz project.
+
+# Short description: A fragment shader that covers a specific inst combine and or xor code path
+
+# The test passes because the shader always writes red.
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+# variant_fragment_shader is derived from the following GLSL:
+# #version 310 es
+# #define _int_4 _GLF_uniform_int_values[0]
+# #define _int_2 _GLF_uniform_int_values[1]
+# #define _int_0 _GLF_uniform_int_values[2]
+# #define _int_1 _GLF_uniform_int_values[3]
+# #define _int_10 _GLF_uniform_int_values[4]
+#
+# precision highp float;
+# precision highp int;
+#
+# // Contents of _GLF_uniform_int_values: [4, 2, 0, 1, 10]
+# layout(set = 0, binding = 0) uniform buf0
+# {
+#     int _GLF_uniform_int_values[5];
+# };
+# layout(location = 0) out vec4 _GLF_color;
+#
+# void main()
+# {
+#     int count0 = _int_0;
+#     int count1 = _int_0;
+#     for (int i = _int_0; i < _int_10; i++)
+#     {
+#         switch (i)
+#         {
+#             case 0:
+#             case 1:
+#                 count0++;
+#             case 3:
+#             case 2:
+#                 count1++;
+#         }
+#     }
+#     if (count1 == _int_4)
+#     {
+#         _GLF_color = vec4(_int_1, _int_0, _int_0, _int_1);
+#     }
+#     else
+#     {
+#         _GLF_color = vec4(_int_0);
+#     }
+#     if (count0 != _int_2)
+#     {
+#         _GLF_color = vec4(_int_0);
+#     }
+# }
+SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 8
+; Bound: 88
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %58
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 310
+               OpName %4 "main"
+               OpName %8 "count0"
+               OpName %12 "buf0"
+               OpMemberName %12 0 "_GLF_uniform_int_values"
+               OpName %14 ""
+               OpName %20 "count1"
+               OpName %23 "i"
+               OpName %58 "_GLF_color"
+               OpDecorate %11 ArrayStride 16
+               OpMemberDecorate %12 0 Offset 0
+               OpDecorate %12 Block
+               OpDecorate %14 DescriptorSet 0
+               OpDecorate %14 Binding 0
+               OpDecorate %58 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeInt 32 1
+          %7 = OpTypePointer Function %6
+          %9 = OpTypeInt 32 0
+         %10 = OpConstant %9 5
+         %11 = OpTypeArray %6 %10
+         %12 = OpTypeStruct %11
+         %13 = OpTypePointer Uniform %12
+         %14 = OpVariable %13 Uniform
+         %15 = OpConstant %6 0
+         %16 = OpConstant %6 2
+         %17 = OpTypePointer Uniform %6
+         %32 = OpConstant %6 4
+         %35 = OpTypeBool
+         %42 = OpConstant %6 1
+         %55 = OpTypeFloat 32
+         %56 = OpTypeVector %55 4
+         %57 = OpTypePointer Output %56
+         %58 = OpVariable %57 Output
+         %59 = OpConstant %6 3
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+          %8 = OpVariable %7 Function
+         %20 = OpVariable %7 Function
+         %23 = OpVariable %7 Function
+         %18 = OpAccessChain %17 %14 %15 %16
+         %19 = OpLoad %6 %18
+               OpStore %8 %19
+         %21 = OpAccessChain %17 %14 %15 %16
+         %22 = OpLoad %6 %21
+               OpStore %20 %22
+         %24 = OpAccessChain %17 %14 %15 %16
+         %25 = OpLoad %6 %24
+               OpStore %23 %25
+               OpBranch %26
+         %26 = OpLabel
+               OpLoopMerge %28 %29 None
+               OpBranch %30
+         %30 = OpLabel
+         %31 = OpLoad %6 %23
+         %33 = OpAccessChain %17 %14 %15 %32
+         %34 = OpLoad %6 %33
+         %36 = OpSLessThan %35 %31 %34
+               OpBranchConditional %36 %27 %28
+         %27 = OpLabel
+         %37 = OpLoad %6 %23
+               OpSelectionMerge %40 None
+               OpSwitch %37 %40 0 %38 1 %38 3 %39 2 %39
+         %38 = OpLabel
+         %41 = OpLoad %6 %8
+         %43 = OpIAdd %6 %41 %42
+               OpStore %8 %43
+               OpBranch %39
+         %39 = OpLabel
+         %44 = OpLoad %6 %20
+         %45 = OpIAdd %6 %44 %42
+               OpStore %20 %45
+               OpBranch %40
+         %40 = OpLabel
+               OpBranch %29
+         %29 = OpLabel
+         %47 = OpLoad %6 %23
+         %48 = OpIAdd %6 %47 %42
+               OpStore %23 %48
+               OpBranch %26
+         %28 = OpLabel
+         %49 = OpLoad %6 %20
+         %50 = OpAccessChain %17 %14 %15 %15
+         %51 = OpLoad %6 %50
+         %52 = OpIEqual %35 %49 %51
+               OpSelectionMerge %54 None
+               OpBranchConditional %52 %53 %73
+         %53 = OpLabel
+         %60 = OpAccessChain %17 %14 %15 %59
+         %61 = OpLoad %6 %60
+         %62 = OpConvertSToF %55 %61
+         %63 = OpAccessChain %17 %14 %15 %16
+         %64 = OpLoad %6 %63
+         %65 = OpConvertSToF %55 %64
+         %66 = OpAccessChain %17 %14 %15 %16
+         %67 = OpLoad %6 %66
+         %68 = OpConvertSToF %55 %67
+         %69 = OpAccessChain %17 %14 %15 %59
+         %70 = OpLoad %6 %69
+         %71 = OpConvertSToF %55 %70
+         %72 = OpCompositeConstruct %56 %62 %65 %68 %71
+               OpStore %58 %72
+               OpBranch %54
+         %73 = OpLabel
+         %74 = OpAccessChain %17 %14 %15 %16
+         %75 = OpLoad %6 %74
+         %76 = OpConvertSToF %55 %75
+         %77 = OpCompositeConstruct %56 %76 %76 %76 %76
+               OpStore %58 %77
+               OpBranch %54
+         %54 = OpLabel
+         %78 = OpLoad %6 %8
+         %79 = OpAccessChain %17 %14 %15 %42
+         %80 = OpLoad %6 %79
+         %81 = OpINotEqual %35 %78 %80
+               OpSelectionMerge %83 None
+               OpBranchConditional %81 %82 %83
+         %82 = OpLabel
+         %84 = OpAccessChain %17 %14 %15 %16
+         %85 = OpLoad %6 %84
+         %86 = OpConvertSToF %55 %85
+         %87 = OpCompositeConstruct %56 %86 %86 %86 %86
+               OpStore %58 %87
+               OpBranch %83
+         %83 = OpLabel
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# _GLF_uniform_int_values
+BUFFER variant__GLF_uniform_int_values DATA_TYPE int32[] STD140 DATA
+ 4 2 0 1 10
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 256 256
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant__GLF_uniform_int_values AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256
+
+EXPECT variant_framebuffer IDX 0 0 SIZE 256 256 EQ_RGBA 255 0 0 255
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-inst-combine-and-or-xor-xor-add.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-inst-combine-and-or-xor-xor-add.amber
new file mode 100644
index 0000000..5d427f9
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-inst-combine-and-or-xor-xor-add.amber
@@ -0,0 +1,203 @@
+#!amber
+
+# Copyright 2020 Google LLC
+#
+# 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.
+
+
+# A test for a coverage-gap found by the GraphicsFuzz project.
+
+# Short description: A fragment shader that covers a specific inst combine and or xor code path
+
+# The test passes because the shader always writes red.
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+# variant_fragment_shader is derived from the following GLSL:
+# #version 310 es
+# #define _int_0 _GLF_uniform_int_values[0]
+# #define _int_1 _GLF_uniform_int_values[1]
+# #define _float_0_0 _GLF_uniform_float_values[0]
+# #define _float_1_0 _GLF_uniform_float_values[1]
+#
+# precision highp float;
+#
+# precision highp int;
+#
+# // Contents of _GLF_uniform_int_values: [0, 1]
+# layout(set = 0, binding = 0) uniform buf0
+# {
+#     int _GLF_uniform_int_values[2];
+# };
+#
+# // Contents of _GLF_uniform_float_values: [0.0, 1.0]
+# layout(set = 0, binding = 1) uniform buf1
+# {
+#     float _GLF_uniform_float_values[2];
+# };
+#
+# layout(location = 0) out vec4 _GLF_color;
+#
+# void main()
+# {
+#     float data[2];
+#     data[_int_0] = _float_0_0;
+#     data[_int_1] = _float_1_0;
+#     float a = data[(1 ^ (_int_1 & 2))];
+#     if (a == _float_1_0)
+#     {
+#         _GLF_color = vec4(_float_1_0, _float_0_0, _float_0_0, _float_1_0);
+#     }
+#     else
+#     {
+#         _GLF_color = vec4(_float_0_0);
+#     }
+# }
+SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 8
+; Bound: 67
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %53
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 310
+               OpName %4 "main"
+               OpName %11 "data"
+               OpName %14 "buf0"
+               OpMemberName %14 0 "_GLF_uniform_int_values"
+               OpName %16 ""
+               OpName %22 "buf1"
+               OpMemberName %22 0 "_GLF_uniform_float_values"
+               OpName %24 ""
+               OpName %36 "a"
+               OpName %53 "_GLF_color"
+               OpDecorate %13 ArrayStride 16
+               OpMemberDecorate %14 0 Offset 0
+               OpDecorate %14 Block
+               OpDecorate %16 DescriptorSet 0
+               OpDecorate %16 Binding 0
+               OpDecorate %21 ArrayStride 16
+               OpMemberDecorate %22 0 Offset 0
+               OpDecorate %22 Block
+               OpDecorate %24 DescriptorSet 0
+               OpDecorate %24 Binding 1
+               OpDecorate %53 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeFloat 32
+          %7 = OpTypeInt 32 0
+          %8 = OpConstant %7 2
+          %9 = OpTypeArray %6 %8
+         %10 = OpTypePointer Function %9
+         %12 = OpTypeInt 32 1
+         %13 = OpTypeArray %12 %8
+         %14 = OpTypeStruct %13
+         %15 = OpTypePointer Uniform %14
+         %16 = OpVariable %15 Uniform
+         %17 = OpConstant %12 0
+         %18 = OpTypePointer Uniform %12
+         %21 = OpTypeArray %6 %8
+         %22 = OpTypeStruct %21
+         %23 = OpTypePointer Uniform %22
+         %24 = OpVariable %23 Uniform
+         %25 = OpTypePointer Uniform %6
+         %28 = OpTypePointer Function %6
+         %30 = OpConstant %12 1
+         %39 = OpConstant %12 2
+         %47 = OpTypeBool
+         %51 = OpTypeVector %6 4
+         %52 = OpTypePointer Output %51
+         %53 = OpVariable %52 Output
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+         %11 = OpVariable %10 Function
+         %36 = OpVariable %28 Function
+         %19 = OpAccessChain %18 %16 %17 %17
+         %20 = OpLoad %12 %19
+         %26 = OpAccessChain %25 %24 %17 %17
+         %27 = OpLoad %6 %26
+         %29 = OpAccessChain %28 %11 %20
+               OpStore %29 %27
+         %31 = OpAccessChain %18 %16 %17 %30
+         %32 = OpLoad %12 %31
+         %33 = OpAccessChain %25 %24 %17 %30
+         %34 = OpLoad %6 %33
+         %35 = OpAccessChain %28 %11 %32
+               OpStore %35 %34
+         %37 = OpAccessChain %18 %16 %17 %30
+         %38 = OpLoad %12 %37
+         %40 = OpBitwiseAnd %12 %38 %39
+         %41 = OpBitwiseXor %12 %30 %40
+         %42 = OpAccessChain %28 %11 %41
+         %43 = OpLoad %6 %42
+               OpStore %36 %43
+         %44 = OpLoad %6 %36
+         %45 = OpAccessChain %25 %24 %17 %30
+         %46 = OpLoad %6 %45
+         %48 = OpFOrdEqual %47 %44 %46
+               OpSelectionMerge %50 None
+               OpBranchConditional %48 %49 %63
+         %49 = OpLabel
+         %54 = OpAccessChain %25 %24 %17 %30
+         %55 = OpLoad %6 %54
+         %56 = OpAccessChain %25 %24 %17 %17
+         %57 = OpLoad %6 %56
+         %58 = OpAccessChain %25 %24 %17 %17
+         %59 = OpLoad %6 %58
+         %60 = OpAccessChain %25 %24 %17 %30
+         %61 = OpLoad %6 %60
+         %62 = OpCompositeConstruct %51 %55 %57 %59 %61
+               OpStore %53 %62
+               OpBranch %50
+         %63 = OpLabel
+         %64 = OpAccessChain %25 %24 %17 %17
+         %65 = OpLoad %6 %64
+         %66 = OpCompositeConstruct %51 %65 %65 %65 %65
+               OpStore %53 %66
+               OpBranch %50
+         %50 = OpLabel
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# _GLF_uniform_float_values
+BUFFER variant__GLF_uniform_float_values DATA_TYPE float[] STD140 DATA
+ 0.0 1.0
+END
+# _GLF_uniform_int_values
+BUFFER variant__GLF_uniform_int_values DATA_TYPE int32[] STD140 DATA
+ 0 1
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 256 256
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant__GLF_uniform_float_values AS uniform DESCRIPTOR_SET 0 BINDING 1
+  BIND BUFFER variant__GLF_uniform_int_values AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256
+
+EXPECT variant_framebuffer IDX 0 0 SIZE 256 256 EQ_RGBA 255 0 0 255
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-inst-combine-compares-combine-select-uaddcarry.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-inst-combine-compares-combine-select-uaddcarry.amber
new file mode 100644
index 0000000..4da8d88
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-inst-combine-compares-combine-select-uaddcarry.amber
@@ -0,0 +1,333 @@
+#!amber
+
+# Copyright 2020 Google LLC
+#
+# 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.
+
+
+# A test for a coverage-gap found by the GraphicsFuzz project.
+
+# Short description: Covers a specific instruction combine compares and combine select code paths
+
+# The test passes because the shader always writes red.
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+# variant_fragment_shader is derived from the following GLSL:
+# #version 310 es
+# #define _int_2 _GLF_uniform_int_values[0]
+# #define _int_0 _GLF_uniform_int_values[1]
+# #define _int_1 _GLF_uniform_int_values[2]
+# #define _uint_1 _GLF_uniform_uint_values[0]
+# #define _float_1_0 _GLF_uniform_float_values[0]
+#
+# precision highp float;
+# precision highp int;
+#
+# // Contents of _GLF_uniform_float_values: 1.0
+# layout(set = 0, binding = 0) uniform buf0
+# {
+#     float _GLF_uniform_float_values[1];
+# };
+#
+# // Contents of _GLF_uniform_uint_values: 1
+# layout(set = 0, binding = 1) uniform buf1
+# {
+#     uint _GLF_uniform_uint_values[1];
+# };
+#
+# // Contents of _GLF_uniform_int_values: [2, 0, 1]
+# layout(set = 0, binding = 2) uniform buf2
+# {
+#     int _GLF_uniform_int_values[3];
+# };
+#
+# layout(location = 0) out vec4 _GLF_color;
+#
+# struct S {
+#     int a;
+# };
+#
+# // Always returns 1.
+# int f1()
+# {
+#     S A = S(1);
+#     int i = _int_0;
+#     for (int i = _int_0; i < _int_0 + _int_2; i++)
+#     {
+#         if (A.a == clamp(i, _int_0, 1))
+#         {
+#             return _int_1;
+#         }
+#     }
+#
+#     // The function returns before reaching this.
+#     return _int_2;
+# }
+#
+# // Always returns 1.0.
+# float f2()
+# {
+#     return float(f1());
+# }
+#
+# void main()
+# {
+#     uint a = _uint_1;
+#     uint b = uaddCarry(uint(2 * _int_0), uint(_int_0), a);
+#     if (b == 0u && f2() == _float_1_0)
+#     {
+#         _GLF_color = vec4(_int_1, _int_0, _int_0, _int_1);
+#     }
+#     else
+#     {
+#         _GLF_color = vec4(_int_1);
+#     }
+# }
+SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 8
+; Bound: 130
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %111
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 310
+               OpName %4 "main"
+               OpName %8 "f1("
+               OpName %12 "f2("
+               OpName %14 "S"
+               OpMemberName %14 0 "a"
+               OpName %16 "A"
+               OpName %20 "i"
+               OpName %24 "buf2"
+               OpMemberName %24 0 "_GLF_uniform_int_values"
+               OpName %26 ""
+               OpName %31 "i"
+               OpName %71 "a"
+               OpName %74 "buf1"
+               OpMemberName %74 0 "_GLF_uniform_uint_values"
+               OpName %76 ""
+               OpName %80 "b"
+               OpName %88 "ResType"
+               OpName %99 "buf0"
+               OpMemberName %99 0 "_GLF_uniform_float_values"
+               OpName %101 ""
+               OpName %111 "_GLF_color"
+               OpDecorate %23 ArrayStride 16
+               OpMemberDecorate %24 0 Offset 0
+               OpDecorate %24 Block
+               OpDecorate %26 DescriptorSet 0
+               OpDecorate %26 Binding 2
+               OpDecorate %73 ArrayStride 16
+               OpMemberDecorate %74 0 Offset 0
+               OpDecorate %74 Block
+               OpDecorate %76 DescriptorSet 0
+               OpDecorate %76 Binding 1
+               OpDecorate %98 ArrayStride 16
+               OpMemberDecorate %99 0 Offset 0
+               OpDecorate %99 Block
+               OpDecorate %101 DescriptorSet 0
+               OpDecorate %101 Binding 0
+               OpDecorate %111 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeInt 32 1
+          %7 = OpTypeFunction %6
+         %10 = OpTypeFloat 32
+         %11 = OpTypeFunction %10
+         %14 = OpTypeStruct %6
+         %15 = OpTypePointer Function %14
+         %17 = OpConstant %6 1
+         %18 = OpConstantComposite %14 %17
+         %19 = OpTypePointer Function %6
+         %21 = OpTypeInt 32 0
+         %22 = OpConstant %21 3
+         %23 = OpTypeArray %6 %22
+         %24 = OpTypeStruct %23
+         %25 = OpTypePointer Uniform %24
+         %26 = OpVariable %25 Uniform
+         %27 = OpConstant %6 0
+         %28 = OpTypePointer Uniform %6
+         %45 = OpTypeBool
+         %56 = OpConstant %6 2
+         %70 = OpTypePointer Function %21
+         %72 = OpConstant %21 1
+         %73 = OpTypeArray %21 %72
+         %74 = OpTypeStruct %73
+         %75 = OpTypePointer Uniform %74
+         %76 = OpVariable %75 Uniform
+         %77 = OpTypePointer Uniform %21
+         %88 = OpTypeStruct %21 %21
+         %93 = OpConstant %21 0
+         %98 = OpTypeArray %10 %72
+         %99 = OpTypeStruct %98
+        %100 = OpTypePointer Uniform %99
+        %101 = OpVariable %100 Uniform
+        %102 = OpTypePointer Uniform %10
+        %109 = OpTypeVector %10 4
+        %110 = OpTypePointer Output %109
+        %111 = OpVariable %110 Output
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+         %71 = OpVariable %70 Function
+         %80 = OpVariable %70 Function
+         %78 = OpAccessChain %77 %76 %27 %27
+         %79 = OpLoad %21 %78
+               OpStore %71 %79
+         %81 = OpAccessChain %28 %26 %27 %17
+         %82 = OpLoad %6 %81
+         %83 = OpIMul %6 %56 %82
+         %84 = OpBitcast %21 %83
+         %85 = OpAccessChain %28 %26 %27 %17
+         %86 = OpLoad %6 %85
+         %87 = OpBitcast %21 %86
+         %89 = OpIAddCarry %88 %84 %87
+         %90 = OpCompositeExtract %21 %89 1
+               OpStore %71 %90
+         %91 = OpCompositeExtract %21 %89 0
+               OpStore %80 %91
+         %92 = OpLoad %21 %80
+         %94 = OpIEqual %45 %92 %93
+               OpSelectionMerge %96 None
+               OpBranchConditional %94 %95 %96
+         %95 = OpLabel
+         %97 = OpFunctionCall %10 %12
+        %103 = OpAccessChain %102 %101 %27 %27
+        %104 = OpLoad %10 %103
+        %105 = OpFOrdEqual %45 %97 %104
+               OpBranch %96
+         %96 = OpLabel
+        %106 = OpPhi %45 %94 %5 %105 %95
+               OpSelectionMerge %108 None
+               OpBranchConditional %106 %107 %125
+        %107 = OpLabel
+        %112 = OpAccessChain %28 %26 %27 %56
+        %113 = OpLoad %6 %112
+        %114 = OpConvertSToF %10 %113
+        %115 = OpAccessChain %28 %26 %27 %17
+        %116 = OpLoad %6 %115
+        %117 = OpConvertSToF %10 %116
+        %118 = OpAccessChain %28 %26 %27 %17
+        %119 = OpLoad %6 %118
+        %120 = OpConvertSToF %10 %119
+        %121 = OpAccessChain %28 %26 %27 %56
+        %122 = OpLoad %6 %121
+        %123 = OpConvertSToF %10 %122
+        %124 = OpCompositeConstruct %109 %114 %117 %120 %123
+               OpStore %111 %124
+               OpBranch %108
+        %125 = OpLabel
+        %126 = OpAccessChain %28 %26 %27 %56
+        %127 = OpLoad %6 %126
+        %128 = OpConvertSToF %10 %127
+        %129 = OpCompositeConstruct %109 %128 %128 %128 %128
+               OpStore %111 %129
+               OpBranch %108
+        %108 = OpLabel
+               OpReturn
+               OpFunctionEnd
+          %8 = OpFunction %6 None %7
+          %9 = OpLabel
+         %16 = OpVariable %15 Function
+         %20 = OpVariable %19 Function
+         %31 = OpVariable %19 Function
+               OpStore %16 %18
+         %29 = OpAccessChain %28 %26 %27 %17
+         %30 = OpLoad %6 %29
+               OpStore %20 %30
+         %32 = OpAccessChain %28 %26 %27 %17
+         %33 = OpLoad %6 %32
+               OpStore %31 %33
+               OpBranch %34
+         %34 = OpLabel
+               OpLoopMerge %36 %37 None
+               OpBranch %38
+         %38 = OpLabel
+         %39 = OpLoad %6 %31
+         %40 = OpAccessChain %28 %26 %27 %17
+         %41 = OpLoad %6 %40
+         %42 = OpAccessChain %28 %26 %27 %27
+         %43 = OpLoad %6 %42
+         %44 = OpIAdd %6 %41 %43
+         %46 = OpSLessThan %45 %39 %44
+               OpBranchConditional %46 %35 %36
+         %35 = OpLabel
+         %47 = OpAccessChain %19 %16 %27
+         %48 = OpLoad %6 %47
+         %49 = OpLoad %6 %31
+         %50 = OpAccessChain %28 %26 %27 %17
+         %51 = OpLoad %6 %50
+         %52 = OpExtInst %6 %1 SClamp %49 %51 %17
+         %53 = OpIEqual %45 %48 %52
+               OpSelectionMerge %55 None
+               OpBranchConditional %53 %54 %55
+         %54 = OpLabel
+         %57 = OpAccessChain %28 %26 %27 %56
+         %58 = OpLoad %6 %57
+               OpReturnValue %58
+         %55 = OpLabel
+               OpBranch %37
+         %37 = OpLabel
+         %60 = OpLoad %6 %31
+         %61 = OpIAdd %6 %60 %17
+               OpStore %31 %61
+               OpBranch %34
+         %36 = OpLabel
+         %62 = OpAccessChain %28 %26 %27 %27
+         %63 = OpLoad %6 %62
+               OpReturnValue %63
+               OpFunctionEnd
+         %12 = OpFunction %10 None %11
+         %13 = OpLabel
+         %66 = OpFunctionCall %6 %8
+         %67 = OpConvertSToF %10 %66
+               OpReturnValue %67
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# _GLF_uniform_int_values
+BUFFER variant__GLF_uniform_int_values DATA_TYPE int32[] STD140 DATA
+ 2 0 1
+END
+# _GLF_uniform_uint_values
+BUFFER variant__GLF_uniform_uint_values DATA_TYPE int32[] STD140 DATA
+ 1
+END
+# _GLF_uniform_float_values
+BUFFER variant__GLF_uniform_float_values DATA_TYPE float[] STD140 DATA
+ 1.0
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 256 256
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant__GLF_uniform_int_values AS uniform DESCRIPTOR_SET 0 BINDING 2
+  BIND BUFFER variant__GLF_uniform_uint_values AS uniform DESCRIPTOR_SET 0 BINDING 1
+  BIND BUFFER variant__GLF_uniform_float_values AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256
+
+EXPECT variant_framebuffer IDX 0 0 SIZE 256 256 EQ_RGBA 255 0 0 255
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-inst-combine-compares-isnan.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-inst-combine-compares-isnan.amber
new file mode 100644
index 0000000..a54455b
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-inst-combine-compares-isnan.amber
@@ -0,0 +1,151 @@
+#!amber
+
+# Copyright 2020 Google LLC
+#
+# 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.
+
+
+# A test for a coverage-gap found by the GraphicsFuzz project.
+
+# Short description: A fragment shader that covers a specific instruction combine compare code path
+
+# The test passes because the shader always writes red.
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+# variant_fragment_shader is derived from the following GLSL:
+# #version 310 es
+# #define _int_1 _GLF_uniform_int_values[0]
+# #define _int_0 _GLF_uniform_int_values[1]
+#
+# precision highp float;
+#
+# // Contents of _GLF_uniform_int_values: [1, 0]
+# layout(set = 0, binding = 0) uniform buf0
+# {
+#     int _GLF_uniform_int_values[2];
+# };
+#
+# layout(location = 0) out vec4 _GLF_color;
+#
+# void main()
+# {
+#     _GLF_color = vec4(_int_1, _int_0, _int_0, _int_1);
+#     if (isnan((-_GLF_color).x))
+#     {
+#         _GLF_color = vec4(_int_1);
+#     }
+# }
+SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 8
+; Bound: 45
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %9
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 310
+               OpName %4 "main"
+               OpName %9 "_GLF_color"
+               OpName %14 "buf0"
+               OpMemberName %14 0 "_GLF_uniform_int_values"
+               OpName %16 ""
+               OpDecorate %9 Location 0
+               OpDecorate %13 ArrayStride 16
+               OpMemberDecorate %14 0 RelaxedPrecision
+               OpMemberDecorate %14 0 Offset 0
+               OpDecorate %14 Block
+               OpDecorate %16 DescriptorSet 0
+               OpDecorate %16 Binding 0
+               OpDecorate %20 RelaxedPrecision
+               OpDecorate %24 RelaxedPrecision
+               OpDecorate %27 RelaxedPrecision
+               OpDecorate %30 RelaxedPrecision
+               OpDecorate %42 RelaxedPrecision
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeFloat 32
+          %7 = OpTypeVector %6 4
+          %8 = OpTypePointer Output %7
+          %9 = OpVariable %8 Output
+         %10 = OpTypeInt 32 1
+         %11 = OpTypeInt 32 0
+         %12 = OpConstant %11 2
+         %13 = OpTypeArray %10 %12
+         %14 = OpTypeStruct %13
+         %15 = OpTypePointer Uniform %14
+         %16 = OpVariable %15 Uniform
+         %17 = OpConstant %10 0
+         %18 = OpTypePointer Uniform %10
+         %22 = OpConstant %10 1
+         %35 = OpConstant %11 0
+         %37 = OpTypeBool
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+         %19 = OpAccessChain %18 %16 %17 %17
+         %20 = OpLoad %10 %19
+         %21 = OpConvertSToF %6 %20
+         %23 = OpAccessChain %18 %16 %17 %22
+         %24 = OpLoad %10 %23
+         %25 = OpConvertSToF %6 %24
+         %26 = OpAccessChain %18 %16 %17 %22
+         %27 = OpLoad %10 %26
+         %28 = OpConvertSToF %6 %27
+         %29 = OpAccessChain %18 %16 %17 %17
+         %30 = OpLoad %10 %29
+         %31 = OpConvertSToF %6 %30
+         %32 = OpCompositeConstruct %7 %21 %25 %28 %31
+               OpStore %9 %32
+         %33 = OpLoad %7 %9
+         %34 = OpFNegate %7 %33
+         %36 = OpCompositeExtract %6 %34 0
+         %38 = OpIsNan %37 %36
+               OpSelectionMerge %40 None
+               OpBranchConditional %38 %39 %40
+         %39 = OpLabel
+         %41 = OpAccessChain %18 %16 %17 %17
+         %42 = OpLoad %10 %41
+         %43 = OpConvertSToF %6 %42
+         %44 = OpCompositeConstruct %7 %43 %43 %43 %43
+               OpStore %9 %44
+               OpBranch %40
+         %40 = OpLabel
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# _GLF_uniform_int_values
+BUFFER variant__GLF_uniform_int_values DATA_TYPE int32[] STD140 DATA
+ 1 0
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 256 256
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant__GLF_uniform_int_values AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256
+
+EXPECT variant_framebuffer IDX 0 0 SIZE 256 256 EQ_RGBA 255 0 0 255
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-inst-combine-compares-ldexp.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-inst-combine-compares-ldexp.amber
new file mode 100644
index 0000000..77b17ac
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-inst-combine-compares-ldexp.amber
@@ -0,0 +1,188 @@
+#!amber
+
+# Copyright 2020 Google LLC
+#
+# 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.
+
+
+# A test for a coverage-gap found by the GraphicsFuzz project.
+
+# Short description: A fragment shader that covers a specific instruction combine compares code path
+
+# The test passes because the shader always writes red.
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+# variant_fragment_shader is derived from the following GLSL:
+# #version 310 es
+# #define _int_0 _GLF_uniform_int_values[0]
+# #define _int_1 _GLF_uniform_int_values[1]
+# #define _float_0_0 _GLF_uniform_float_values[0]
+#
+# precision highp float;
+# precision highp int;
+#
+# // Contents of _GLF_uniform_float_values: 0.0
+# layout(set = 0, binding = 0) uniform buf0
+# {
+#     float _GLF_uniform_float_values[1];
+# };
+#
+# // Contents of _GLF_uniform_int_values: [0, 1]
+# layout(set = 0, binding = 1) uniform buf1
+# {
+#     int _GLF_uniform_int_values[2];
+# };
+#
+# layout(location = 0) out vec4 _GLF_color;
+#
+# void main()
+# {
+#     if (ldexp(_float_0_0, 10000) == _float_0_0)
+#     {
+#         _GLF_color = vec4(_int_1, _int_0, _int_0, _int_1);
+#     }
+#     else
+#     {
+#         _GLF_color = vec4(_int_1, _int_0, _int_0, _int_1);
+#     }
+# }
+SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 8
+; Bound: 63
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %28
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 310
+               OpName %4 "main"
+               OpName %10 "buf0"
+               OpMemberName %10 0 "_GLF_uniform_float_values"
+               OpName %12 ""
+               OpName %28 "_GLF_color"
+               OpName %31 "buf1"
+               OpMemberName %31 0 "_GLF_uniform_int_values"
+               OpName %33 ""
+               OpDecorate %9 ArrayStride 16
+               OpMemberDecorate %10 0 Offset 0
+               OpDecorate %10 Block
+               OpDecorate %12 DescriptorSet 0
+               OpDecorate %12 Binding 0
+               OpDecorate %28 Location 0
+               OpDecorate %30 ArrayStride 16
+               OpMemberDecorate %31 0 Offset 0
+               OpDecorate %31 Block
+               OpDecorate %33 DescriptorSet 0
+               OpDecorate %33 Binding 1
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeFloat 32
+          %7 = OpTypeInt 32 0
+          %8 = OpConstant %7 1
+          %9 = OpTypeArray %6 %8
+         %10 = OpTypeStruct %9
+         %11 = OpTypePointer Uniform %10
+         %12 = OpVariable %11 Uniform
+         %13 = OpTypeInt 32 1
+         %14 = OpConstant %13 0
+         %15 = OpTypePointer Uniform %6
+         %18 = OpConstant %13 10000
+         %22 = OpTypeBool
+         %26 = OpTypeVector %6 4
+         %27 = OpTypePointer Output %26
+         %28 = OpVariable %27 Output
+         %29 = OpConstant %7 2
+         %30 = OpTypeArray %13 %29
+         %31 = OpTypeStruct %30
+         %32 = OpTypePointer Uniform %31
+         %33 = OpVariable %32 Uniform
+         %34 = OpConstant %13 1
+         %35 = OpTypePointer Uniform %13
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+         %16 = OpAccessChain %15 %12 %14 %14
+         %17 = OpLoad %6 %16
+         %19 = OpExtInst %6 %1 Ldexp %17 %18
+         %20 = OpAccessChain %15 %12 %14 %14
+         %21 = OpLoad %6 %20
+         %23 = OpFOrdEqual %22 %19 %21
+               OpSelectionMerge %25 None
+               OpBranchConditional %23 %24 %49
+         %24 = OpLabel
+         %36 = OpAccessChain %35 %33 %14 %34
+         %37 = OpLoad %13 %36
+         %38 = OpConvertSToF %6 %37
+         %39 = OpAccessChain %35 %33 %14 %14
+         %40 = OpLoad %13 %39
+         %41 = OpConvertSToF %6 %40
+         %42 = OpAccessChain %35 %33 %14 %14
+         %43 = OpLoad %13 %42
+         %44 = OpConvertSToF %6 %43
+         %45 = OpAccessChain %35 %33 %14 %34
+         %46 = OpLoad %13 %45
+         %47 = OpConvertSToF %6 %46
+         %48 = OpCompositeConstruct %26 %38 %41 %44 %47
+               OpStore %28 %48
+               OpBranch %25
+         %49 = OpLabel
+         %50 = OpAccessChain %35 %33 %14 %34
+         %51 = OpLoad %13 %50
+         %52 = OpConvertSToF %6 %51
+         %53 = OpAccessChain %35 %33 %14 %14
+         %54 = OpLoad %13 %53
+         %55 = OpConvertSToF %6 %54
+         %56 = OpAccessChain %35 %33 %14 %14
+         %57 = OpLoad %13 %56
+         %58 = OpConvertSToF %6 %57
+         %59 = OpAccessChain %35 %33 %14 %34
+         %60 = OpLoad %13 %59
+         %61 = OpConvertSToF %6 %60
+         %62 = OpCompositeConstruct %26 %52 %55 %58 %61
+               OpStore %28 %62
+               OpBranch %25
+         %25 = OpLabel
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# _GLF_uniform_int_values
+BUFFER variant__GLF_uniform_int_values DATA_TYPE int32[] STD140 DATA
+ 0 1
+END
+# _GLF_uniform_float_values
+BUFFER variant__GLF_uniform_float_values DATA_TYPE float[] STD140 DATA
+ 0.0
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 256 256
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant__GLF_uniform_int_values AS uniform DESCRIPTOR_SET 0 BINDING 1
+  BIND BUFFER variant__GLF_uniform_float_values AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256
+
+EXPECT variant_framebuffer IDX 0 0 SIZE 256 256 EQ_RGBA 255 0 0 255
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-inst-combine-compares-pre-increment-clamp.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-inst-combine-compares-pre-increment-clamp.amber
new file mode 100644
index 0000000..2421af2
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-inst-combine-compares-pre-increment-clamp.amber
@@ -0,0 +1,266 @@
+#!amber
+
+# Copyright 2020 Google LLC
+#
+# 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.
+
+
+# A test for a coverage-gap found by the GraphicsFuzz project.
+
+# Short description: A fragment shader that covers a specific inst combine compares code path
+
+# The test passes because the shader always writes red.
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+# variant_fragment_shader is derived from the following GLSL:
+# #version 320 es
+# #define _int_0 _GLF_uniform_int_values[0]
+# #define _int_1 _GLF_uniform_int_values[1]
+# #define _float_0_0 _GLF_uniform_float_values[0]
+# #define _float_1_0 _GLF_uniform_float_values[1]
+# #define _float_2_0 _GLF_uniform_float_values[2]
+#
+# precision highp int;
+#
+# precision highp float;
+#
+# // Contents of _GLF_uniform_float_values: [0.0, 1.0, 2.0]
+# layout(set = 0, binding = 0) uniform buf0
+# {
+#     float _GLF_uniform_float_values[3];
+# };
+#
+# // Contents of _GLF_uniform_int_values: [0, 1]
+# layout(set = 0, binding = 1) uniform buf1
+# {
+#     int _GLF_uniform_int_values[2];
+# };
+#
+# layout(location = 0) out vec4 _GLF_color;
+#
+# float f1(float a)
+# {
+#     int b = 8;
+#
+#     if (gl_FragCoord.y >= _float_0_0)
+#     {
+#         ++b;
+#         ++b;
+#     }
+#
+#     // Always false.
+#     if (a < _float_1_0)
+#     {
+#         return _float_1_0;
+#     }
+#
+#     float c = float(clamp(b, 0, 2));
+#
+#     // Always returns 2.0.
+#     return c;
+# }
+#
+# void main()
+# {
+#     float a = f1(_float_1_0);
+#     if (a == _float_2_0)
+#     {
+#         _GLF_color = vec4(_int_1, _int_0, _int_0, _int_1);
+#     }
+#     else
+#     {
+#         _GLF_color = vec4(_int_0);
+#     }
+# }
+SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 10
+; Bound: 96
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %18 %71
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 320
+               OpName %4 "main"
+               OpName %10 "f1(f1;"
+               OpName %9 "a"
+               OpName %14 "b"
+               OpName %18 "gl_FragCoord"
+               OpName %26 "buf0"
+               OpMemberName %26 0 "_GLF_uniform_float_values"
+               OpName %28 ""
+               OpName %51 "c"
+               OpName %59 "a"
+               OpName %60 "param"
+               OpName %71 "_GLF_color"
+               OpName %74 "buf1"
+               OpMemberName %74 0 "_GLF_uniform_int_values"
+               OpName %76 ""
+               OpDecorate %18 BuiltIn FragCoord
+               OpDecorate %25 ArrayStride 16
+               OpMemberDecorate %26 0 Offset 0
+               OpDecorate %26 Block
+               OpDecorate %28 DescriptorSet 0
+               OpDecorate %28 Binding 0
+               OpDecorate %71 Location 0
+               OpDecorate %73 ArrayStride 16
+               OpMemberDecorate %74 0 Offset 0
+               OpDecorate %74 Block
+               OpDecorate %76 DescriptorSet 0
+               OpDecorate %76 Binding 1
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeFloat 32
+          %7 = OpTypePointer Function %6
+          %8 = OpTypeFunction %6 %7
+         %12 = OpTypeInt 32 1
+         %13 = OpTypePointer Function %12
+         %15 = OpConstant %12 8
+         %16 = OpTypeVector %6 4
+         %17 = OpTypePointer Input %16
+         %18 = OpVariable %17 Input
+         %19 = OpTypeInt 32 0
+         %20 = OpConstant %19 1
+         %21 = OpTypePointer Input %6
+         %24 = OpConstant %19 3
+         %25 = OpTypeArray %6 %24
+         %26 = OpTypeStruct %25
+         %27 = OpTypePointer Uniform %26
+         %28 = OpVariable %27 Uniform
+         %29 = OpConstant %12 0
+         %30 = OpTypePointer Uniform %6
+         %33 = OpTypeBool
+         %38 = OpConstant %12 1
+         %53 = OpConstant %12 2
+         %70 = OpTypePointer Output %16
+         %71 = OpVariable %70 Output
+         %72 = OpConstant %19 2
+         %73 = OpTypeArray %12 %72
+         %74 = OpTypeStruct %73
+         %75 = OpTypePointer Uniform %74
+         %76 = OpVariable %75 Uniform
+         %77 = OpTypePointer Uniform %12
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+         %59 = OpVariable %7 Function
+         %60 = OpVariable %7 Function
+         %61 = OpAccessChain %30 %28 %29 %38
+         %62 = OpLoad %6 %61
+               OpStore %60 %62
+         %63 = OpFunctionCall %6 %10 %60
+               OpStore %59 %63
+         %64 = OpLoad %6 %59
+         %65 = OpAccessChain %30 %28 %29 %53
+         %66 = OpLoad %6 %65
+         %67 = OpFOrdEqual %33 %64 %66
+               OpSelectionMerge %69 None
+               OpBranchConditional %67 %68 %91
+         %68 = OpLabel
+         %78 = OpAccessChain %77 %76 %29 %38
+         %79 = OpLoad %12 %78
+         %80 = OpConvertSToF %6 %79
+         %81 = OpAccessChain %77 %76 %29 %29
+         %82 = OpLoad %12 %81
+         %83 = OpConvertSToF %6 %82
+         %84 = OpAccessChain %77 %76 %29 %29
+         %85 = OpLoad %12 %84
+         %86 = OpConvertSToF %6 %85
+         %87 = OpAccessChain %77 %76 %29 %38
+         %88 = OpLoad %12 %87
+         %89 = OpConvertSToF %6 %88
+         %90 = OpCompositeConstruct %16 %80 %83 %86 %89
+               OpStore %71 %90
+               OpBranch %69
+         %91 = OpLabel
+         %92 = OpAccessChain %77 %76 %29 %29
+         %93 = OpLoad %12 %92
+         %94 = OpConvertSToF %6 %93
+         %95 = OpCompositeConstruct %16 %94 %94 %94 %94
+               OpStore %71 %95
+               OpBranch %69
+         %69 = OpLabel
+               OpReturn
+               OpFunctionEnd
+         %10 = OpFunction %6 None %8
+          %9 = OpFunctionParameter %7
+         %11 = OpLabel
+         %14 = OpVariable %13 Function
+         %51 = OpVariable %7 Function
+               OpStore %14 %15
+         %22 = OpAccessChain %21 %18 %20
+         %23 = OpLoad %6 %22
+         %31 = OpAccessChain %30 %28 %29 %29
+         %32 = OpLoad %6 %31
+         %34 = OpFOrdGreaterThanEqual %33 %23 %32
+               OpSelectionMerge %36 None
+               OpBranchConditional %34 %35 %36
+         %35 = OpLabel
+         %37 = OpLoad %12 %14
+         %39 = OpIAdd %12 %37 %38
+               OpStore %14 %39
+         %40 = OpLoad %12 %14
+         %41 = OpIAdd %12 %40 %38
+               OpStore %14 %41
+               OpBranch %36
+         %36 = OpLabel
+         %42 = OpLoad %6 %9
+         %43 = OpAccessChain %30 %28 %29 %38
+         %44 = OpLoad %6 %43
+         %45 = OpFOrdLessThan %33 %42 %44
+               OpSelectionMerge %47 None
+               OpBranchConditional %45 %46 %47
+         %46 = OpLabel
+         %48 = OpAccessChain %30 %28 %29 %38
+         %49 = OpLoad %6 %48
+               OpReturnValue %49
+         %47 = OpLabel
+         %52 = OpLoad %12 %14
+         %54 = OpExtInst %12 %1 SClamp %52 %29 %53
+         %55 = OpConvertSToF %6 %54
+               OpStore %51 %55
+         %56 = OpLoad %6 %51
+               OpReturnValue %56
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# _GLF_uniform_int_values
+BUFFER variant__GLF_uniform_int_values DATA_TYPE int32[] STD140 DATA
+ 0 1
+END
+# _GLF_uniform_float_values
+BUFFER variant__GLF_uniform_float_values DATA_TYPE float[] STD140 DATA
+ 0.0 1.0 2.0
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 16 16
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant__GLF_uniform_int_values AS uniform DESCRIPTOR_SET 0 BINDING 1
+  BIND BUFFER variant__GLF_uniform_float_values AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 16 16
+
+EXPECT variant_framebuffer IDX 0 0 SIZE 16 16 EQ_RGBA 255 0 0 255
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-inst-combine-compares-ternary-vector-access.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-inst-combine-compares-ternary-vector-access.amber
new file mode 100644
index 0000000..6a1012d
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-inst-combine-compares-ternary-vector-access.amber
@@ -0,0 +1,216 @@
+#!amber
+
+# Copyright 2020 Google LLC
+#
+# 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.
+
+
+# A test for a coverage-gap found by the GraphicsFuzz project.
+
+# Short description: A fragment shader that covers a specific instruction combine compare code path
+
+# The test passes because the shader always writes red.
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+# variant_fragment_shader is derived from the following GLSL:
+# #version 310 es
+# #define _int_1 _GLF_uniform_int_values[0]
+# #define _int_0 _GLF_uniform_int_values[1]
+# #define _float_0_0 _GLF_uniform_float_values[0]
+# #define _float_1_0 _GLF_uniform_float_values[1]
+# #define _float_2_0 _GLF_uniform_float_values[2]
+# #define _float_3_0 _GLF_uniform_float_values[3]
+#
+# precision highp float;
+# precision highp int;
+#
+# // Contents of _GLF_uniform_float_values: [0.0, 1.0, 2.0, 3.0]
+# layout(set = 0, binding = 0) uniform buf0
+# {
+#     float _GLF_uniform_float_values[4];
+# };
+#
+# // Contents of _GLF_uniform_int_values: [1, 0]
+# layout(set = 0, binding = 1) uniform buf1
+# {
+#     int _GLF_uniform_int_values[2];
+# };
+#
+# layout(location = 0) out vec4 _GLF_color;
+#
+# void main()
+# {
+#     // a becomes 0.
+#     int a = (gl_FragCoord.y >= _float_0_0) ? 0 : 2;
+#
+#     float b = vec3(_float_1_0, _float_2_0, _float_3_0)[a];
+#
+#     if (b == _float_1_0)
+#     {
+#         _GLF_color = vec4(_int_1, _int_0, _int_0, _int_1);
+#     }
+#     else
+#     {
+#         _GLF_color = vec4(_int_1);
+#     }
+# }
+SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 8
+; Bound: 77
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %12 %52
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 310
+               OpName %4 "main"
+               OpName %8 "a"
+               OpName %12 "gl_FragCoord"
+               OpName %20 "buf0"
+               OpMemberName %20 0 "_GLF_uniform_float_values"
+               OpName %22 ""
+               OpName %32 "b"
+               OpName %52 "_GLF_color"
+               OpName %55 "buf1"
+               OpMemberName %55 0 "_GLF_uniform_int_values"
+               OpName %57 ""
+               OpDecorate %12 BuiltIn FragCoord
+               OpDecorate %19 ArrayStride 16
+               OpMemberDecorate %20 0 Offset 0
+               OpDecorate %20 Block
+               OpDecorate %22 DescriptorSet 0
+               OpDecorate %22 Binding 0
+               OpDecorate %52 Location 0
+               OpDecorate %54 ArrayStride 16
+               OpMemberDecorate %55 0 Offset 0
+               OpDecorate %55 Block
+               OpDecorate %57 DescriptorSet 0
+               OpDecorate %57 Binding 1
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeInt 32 1
+          %7 = OpTypePointer Function %6
+          %9 = OpTypeFloat 32
+         %10 = OpTypeVector %9 4
+         %11 = OpTypePointer Input %10
+         %12 = OpVariable %11 Input
+         %13 = OpTypeInt 32 0
+         %14 = OpConstant %13 1
+         %15 = OpTypePointer Input %9
+         %18 = OpConstant %13 4
+         %19 = OpTypeArray %9 %18
+         %20 = OpTypeStruct %19
+         %21 = OpTypePointer Uniform %20
+         %22 = OpVariable %21 Uniform
+         %23 = OpConstant %6 0
+         %24 = OpTypePointer Uniform %9
+         %27 = OpTypeBool
+         %29 = OpConstant %6 2
+         %31 = OpTypePointer Function %9
+         %33 = OpConstant %6 1
+         %38 = OpConstant %6 3
+         %41 = OpTypeVector %9 3
+         %51 = OpTypePointer Output %10
+         %52 = OpVariable %51 Output
+         %53 = OpConstant %13 2
+         %54 = OpTypeArray %6 %53
+         %55 = OpTypeStruct %54
+         %56 = OpTypePointer Uniform %55
+         %57 = OpVariable %56 Uniform
+         %58 = OpTypePointer Uniform %6
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+          %8 = OpVariable %7 Function
+         %32 = OpVariable %31 Function
+         %16 = OpAccessChain %15 %12 %14
+         %17 = OpLoad %9 %16
+         %25 = OpAccessChain %24 %22 %23 %23
+         %26 = OpLoad %9 %25
+         %28 = OpFOrdGreaterThanEqual %27 %17 %26
+         %30 = OpSelect %6 %28 %23 %29
+               OpStore %8 %30
+         %34 = OpAccessChain %24 %22 %23 %33
+         %35 = OpLoad %9 %34
+         %36 = OpAccessChain %24 %22 %23 %29
+         %37 = OpLoad %9 %36
+         %39 = OpAccessChain %24 %22 %23 %38
+         %40 = OpLoad %9 %39
+         %42 = OpCompositeConstruct %41 %35 %37 %40
+         %43 = OpLoad %6 %8
+         %44 = OpVectorExtractDynamic %9 %42 %43
+               OpStore %32 %44
+         %45 = OpLoad %9 %32
+         %46 = OpAccessChain %24 %22 %23 %33
+         %47 = OpLoad %9 %46
+         %48 = OpFOrdEqual %27 %45 %47
+               OpSelectionMerge %50 None
+               OpBranchConditional %48 %49 %72
+         %49 = OpLabel
+         %59 = OpAccessChain %58 %57 %23 %23
+         %60 = OpLoad %6 %59
+         %61 = OpConvertSToF %9 %60
+         %62 = OpAccessChain %58 %57 %23 %33
+         %63 = OpLoad %6 %62
+         %64 = OpConvertSToF %9 %63
+         %65 = OpAccessChain %58 %57 %23 %33
+         %66 = OpLoad %6 %65
+         %67 = OpConvertSToF %9 %66
+         %68 = OpAccessChain %58 %57 %23 %23
+         %69 = OpLoad %6 %68
+         %70 = OpConvertSToF %9 %69
+         %71 = OpCompositeConstruct %10 %61 %64 %67 %70
+               OpStore %52 %71
+               OpBranch %50
+         %72 = OpLabel
+         %73 = OpAccessChain %58 %57 %23 %23
+         %74 = OpLoad %6 %73
+         %75 = OpConvertSToF %9 %74
+         %76 = OpCompositeConstruct %10 %75 %75 %75 %75
+               OpStore %52 %76
+               OpBranch %50
+         %50 = OpLabel
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# _GLF_uniform_int_values
+BUFFER variant__GLF_uniform_int_values DATA_TYPE int32[] STD140 DATA
+ 1 0
+END
+# _GLF_uniform_float_values
+BUFFER variant__GLF_uniform_float_values DATA_TYPE float[] STD140 DATA
+ 0.0 1.0 2.0 3.0
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 256 256
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant__GLF_uniform_int_values AS uniform DESCRIPTOR_SET 0 BINDING 1
+  BIND BUFFER variant__GLF_uniform_float_values AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256
+
+EXPECT variant_framebuffer IDX 0 0 SIZE 256 256 EQ_RGBA 255 0 0 255
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-inst-combine-mul-div-rem-if-undefined-divide-mix.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-inst-combine-mul-div-rem-if-undefined-divide-mix.amber
new file mode 100644
index 0000000..ba56643
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-inst-combine-mul-div-rem-if-undefined-divide-mix.amber
@@ -0,0 +1,264 @@
+#!amber
+
+# Copyright 2020 Google LLC
+#
+# 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.
+
+
+# A test for a coverage-gap found by the GraphicsFuzz project.
+
+# Short description: A fragment shader that covers a specific inst combine mul div rem code path
+
+# The test passes because the shader always writes red.
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+# variant_fragment_shader is derived from the following GLSL:
+# #version 310 es
+# #define _int_1 _GLF_uniform_int_values[0]
+# #define _int_0 _GLF_uniform_int_values[1]
+# #define _float_1_0 _GLF_uniform_float_values[0]
+# #define _float_0_0 _GLF_uniform_float_values[1]
+#
+# precision highp float;
+# precision highp int;
+#
+# // Contents of _GLF_uniform_int_values: [1, 0]
+# layout(set = 0, binding = 0) uniform buf0
+# {
+#     int _GLF_uniform_int_values[2];
+# };
+#
+# // Contents of _GLF_uniform_float_values: [1.0, 0.0]
+# layout(set = 0, binding = 1) uniform buf1
+# {
+#     float _GLF_uniform_float_values[2];
+# };
+#
+# layout(location = 0) out vec4 _GLF_color;
+#
+# float f1(float a)
+# {
+#     return dFdx(a);
+# }
+#
+# void main()
+# {
+#     _GLF_color = vec4(_int_1, _int_0, _int_0, _int_1);
+#
+#     vec4 v2;
+#
+#     // Always false.
+#     if (gl_FragCoord.x < _float_0_0)
+#     {
+#         // v2 is undefined. Doesn't matter since this is never executed.
+#         if (!(v2.x < 1.0))
+#         {
+#             float a = _float_0_0 / ((_float_0_0 > _float_1_0) ? f1(_float_1_0) : _float_1_0);
+#             _GLF_color =
+#                 vec4(mix(vec3(_float_1_0), vec3(_float_1_0), a), _float_0_0);
+#         }
+#     }
+# }
+SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 10
+; Bound: 104
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %18 %43
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 310
+               OpName %4 "main"
+               OpName %10 "f1(f1;"
+               OpName %9 "a"
+               OpName %18 "_GLF_color"
+               OpName %23 "buf0"
+               OpMemberName %23 0 "_GLF_uniform_int_values"
+               OpName %25 ""
+               OpName %43 "gl_FragCoord"
+               OpName %49 "buf1"
+               OpMemberName %49 0 "_GLF_uniform_float_values"
+               OpName %51 ""
+               OpName %60 "v2"
+               OpName %68 "a"
+               OpName %79 "param"
+               OpDecorate %18 Location 0
+               OpDecorate %22 ArrayStride 16
+               OpMemberDecorate %23 0 Offset 0
+               OpDecorate %23 Block
+               OpDecorate %25 DescriptorSet 0
+               OpDecorate %25 Binding 0
+               OpDecorate %43 BuiltIn FragCoord
+               OpDecorate %48 ArrayStride 16
+               OpMemberDecorate %49 0 Offset 0
+               OpDecorate %49 Block
+               OpDecorate %51 DescriptorSet 0
+               OpDecorate %51 Binding 1
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeFloat 32
+          %7 = OpTypePointer Function %6
+          %8 = OpTypeFunction %6 %7
+         %16 = OpTypeVector %6 4
+         %17 = OpTypePointer Output %16
+         %18 = OpVariable %17 Output
+         %19 = OpTypeInt 32 1
+         %20 = OpTypeInt 32 0
+         %21 = OpConstant %20 2
+         %22 = OpTypeArray %19 %21
+         %23 = OpTypeStruct %22
+         %24 = OpTypePointer Uniform %23
+         %25 = OpVariable %24 Uniform
+         %26 = OpConstant %19 0
+         %27 = OpTypePointer Uniform %19
+         %31 = OpConstant %19 1
+         %42 = OpTypePointer Input %16
+         %43 = OpVariable %42 Input
+         %44 = OpConstant %20 0
+         %45 = OpTypePointer Input %6
+         %48 = OpTypeArray %6 %21
+         %49 = OpTypeStruct %48
+         %50 = OpTypePointer Uniform %49
+         %51 = OpVariable %50 Uniform
+         %52 = OpTypePointer Uniform %6
+         %55 = OpTypeBool
+         %59 = OpTypePointer Function %16
+         %63 = OpConstant %6 1
+         %90 = OpTypeVector %6 3
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+         %60 = OpVariable %59 Function
+         %68 = OpVariable %7 Function
+         %76 = OpVariable %7 Function
+         %79 = OpVariable %7 Function
+         %28 = OpAccessChain %27 %25 %26 %26
+         %29 = OpLoad %19 %28
+         %30 = OpConvertSToF %6 %29
+         %32 = OpAccessChain %27 %25 %26 %31
+         %33 = OpLoad %19 %32
+         %34 = OpConvertSToF %6 %33
+         %35 = OpAccessChain %27 %25 %26 %31
+         %36 = OpLoad %19 %35
+         %37 = OpConvertSToF %6 %36
+         %38 = OpAccessChain %27 %25 %26 %26
+         %39 = OpLoad %19 %38
+         %40 = OpConvertSToF %6 %39
+         %41 = OpCompositeConstruct %16 %30 %34 %37 %40
+               OpStore %18 %41
+         %46 = OpAccessChain %45 %43 %44
+         %47 = OpLoad %6 %46
+         %53 = OpAccessChain %52 %51 %26 %31
+         %54 = OpLoad %6 %53
+         %56 = OpFOrdLessThan %55 %47 %54
+               OpSelectionMerge %58 None
+               OpBranchConditional %56 %57 %58
+         %57 = OpLabel
+         %61 = OpAccessChain %7 %60 %44
+         %62 = OpLoad %6 %61
+         %64 = OpFOrdLessThan %55 %62 %63
+         %65 = OpLogicalNot %55 %64
+               OpSelectionMerge %67 None
+               OpBranchConditional %65 %66 %67
+         %66 = OpLabel
+         %69 = OpAccessChain %52 %51 %26 %31
+         %70 = OpLoad %6 %69
+         %71 = OpAccessChain %52 %51 %26 %31
+         %72 = OpLoad %6 %71
+         %73 = OpAccessChain %52 %51 %26 %26
+         %74 = OpLoad %6 %73
+         %75 = OpFOrdGreaterThan %55 %72 %74
+               OpSelectionMerge %78 None
+               OpBranchConditional %75 %77 %83
+         %77 = OpLabel
+         %80 = OpAccessChain %52 %51 %26 %26
+         %81 = OpLoad %6 %80
+               OpStore %79 %81
+         %82 = OpFunctionCall %6 %10 %79
+               OpStore %76 %82
+               OpBranch %78
+         %83 = OpLabel
+         %84 = OpAccessChain %52 %51 %26 %26
+         %85 = OpLoad %6 %84
+               OpStore %76 %85
+               OpBranch %78
+         %78 = OpLabel
+         %86 = OpLoad %6 %76
+         %87 = OpFDiv %6 %70 %86
+               OpStore %68 %87
+         %88 = OpAccessChain %52 %51 %26 %26
+         %89 = OpLoad %6 %88
+         %91 = OpCompositeConstruct %90 %89 %89 %89
+         %92 = OpAccessChain %52 %51 %26 %26
+         %93 = OpLoad %6 %92
+         %94 = OpCompositeConstruct %90 %93 %93 %93
+         %95 = OpLoad %6 %68
+         %96 = OpCompositeConstruct %90 %95 %95 %95
+         %97 = OpExtInst %90 %1 FMix %91 %94 %96
+         %98 = OpAccessChain %52 %51 %26 %31
+         %99 = OpLoad %6 %98
+        %100 = OpCompositeExtract %6 %97 0
+        %101 = OpCompositeExtract %6 %97 1
+        %102 = OpCompositeExtract %6 %97 2
+        %103 = OpCompositeConstruct %16 %100 %101 %102 %99
+               OpStore %18 %103
+               OpBranch %67
+         %67 = OpLabel
+               OpBranch %58
+         %58 = OpLabel
+               OpReturn
+               OpFunctionEnd
+         %10 = OpFunction %6 None %8
+          %9 = OpFunctionParameter %7
+         %11 = OpLabel
+         %12 = OpLoad %6 %9
+         %13 = OpDPdx %6 %12
+               OpReturnValue %13
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# injectionSwitch
+BUFFER variant_injectionSwitch DATA_TYPE vec2<float> STD140 DATA
+ 0.0 1.0
+END
+# _GLF_uniform_float_values
+BUFFER variant__GLF_uniform_float_values DATA_TYPE float[] STD140 DATA
+ 1.0 0.0
+END
+# _GLF_uniform_int_values
+BUFFER variant__GLF_uniform_int_values DATA_TYPE int32[] STD140 DATA
+ 1 0
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 16 16
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant_injectionSwitch AS uniform DESCRIPTOR_SET 0 BINDING 2
+  BIND BUFFER variant__GLF_uniform_float_values AS uniform DESCRIPTOR_SET 0 BINDING 1
+  BIND BUFFER variant__GLF_uniform_int_values AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 16 16
+
+EXPECT variant_framebuffer IDX 0 0 SIZE 16 16 EQ_RGBA 255 0 0 255
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-inst-combine-pack-unpack.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-inst-combine-pack-unpack.amber
new file mode 100644
index 0000000..337de64
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-inst-combine-pack-unpack.amber
@@ -0,0 +1,290 @@
+#!amber
+
+# Copyright 2020 Google LLC
+#
+# 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.
+
+
+# A test for a coverage-gap found by the GraphicsFuzz project.
+
+# Short description: Covers specific combine shifts and combine simplify demanded code paths
+
+# The test passes because the shader always writes red.
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+# variant_fragment_shader is derived from the following GLSL:
+# #version 310 es
+# #define _int_3 _GLF_uniform_int_values[0]
+# #define _int_1 _GLF_uniform_int_values[1]
+# #define _int_0 _GLF_uniform_int_values[2]
+# #define _int_2 _GLF_uniform_int_values[3]
+# #define _float_0_25 _GLF_uniform_float_values[0]
+# #define _float_0_75 _GLF_uniform_float_values[1]
+# #define _float_0_0 _GLF_uniform_float_values[2]
+# #define _float_127_0 _GLF_uniform_float_values[3]
+# #define _float_64_0 _GLF_uniform_float_values[4]
+# #define _float_1_0 _GLF_uniform_float_values[5]
+# #define _float_65_0 _GLF_uniform_float_values[6]
+#
+# precision highp float;
+# precision highp int;
+#
+# // Contents of _GLF_uniform_int_values: [3, 1, 0, 2]
+# layout(set = 0, binding = 0) uniform buf0
+# {
+#     int _GLF_uniform_int_values[4];
+# };
+#
+# // Contents of _GLF_uniform_float_values: [0.25, 0.75, 0.0, 127.0, 64.0, 1.0, 65.0]
+# layout(set = 0, binding = 1) uniform buf1
+# {
+#     float _GLF_uniform_float_values[7];
+# };
+#
+# layout(location = 0) out vec4 _GLF_color;
+#
+# void main()
+# {
+#     // Packs the two components into an unsigned integer of 3221176320.
+#     uint a = packUnorm2x16(vec2(_float_0_25, _float_0_75));
+#
+#     // Unpacks the integer into values of 0.0, 64.0, -1.0 and -65.0.
+#     // Then converts them into floating-point values by dividing with 127.0.
+#     vec4 v1 = unpackSnorm4x8(a);
+#
+#     float E = 0.01;
+#     if ( abs(v1[_int_0] - (_float_0_0 / _float_127_0)) < E
+#         && abs(v1[_int_1] - (_float_64_0 / _float_127_0)) < E
+#         && abs(v1[_int_2] - (-_float_1_0 / _float_127_0)) < E
+#         && abs(v1[_int_3] - (-_float_65_0 / _float_127_0)) < E
+#         )
+#     {
+#         _GLF_color = vec4(_int_1, _int_0, _int_0, _int_1);
+#     }
+#     else
+#     {
+#         _GLF_color = vec4(_float_1_0);
+#     }
+# }
+SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 8
+; Bound: 130
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %112
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 310
+               OpName %4 "main"
+               OpName %8 "a"
+               OpName %12 "buf1"
+               OpMemberName %12 0 "_GLF_uniform_float_values"
+               OpName %14 ""
+               OpName %28 "v1"
+               OpName %32 "E"
+               OpName %37 "buf0"
+               OpMemberName %37 0 "_GLF_uniform_int_values"
+               OpName %39 ""
+               OpName %112 "_GLF_color"
+               OpDecorate %11 ArrayStride 16
+               OpMemberDecorate %12 0 Offset 0
+               OpDecorate %12 Block
+               OpDecorate %14 DescriptorSet 0
+               OpDecorate %14 Binding 1
+               OpDecorate %36 ArrayStride 16
+               OpMemberDecorate %37 0 Offset 0
+               OpDecorate %37 Block
+               OpDecorate %39 DescriptorSet 0
+               OpDecorate %39 Binding 0
+               OpDecorate %112 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeInt 32 0
+          %7 = OpTypePointer Function %6
+          %9 = OpTypeFloat 32
+         %10 = OpConstant %6 7
+         %11 = OpTypeArray %9 %10
+         %12 = OpTypeStruct %11
+         %13 = OpTypePointer Uniform %12
+         %14 = OpVariable %13 Uniform
+         %15 = OpTypeInt 32 1
+         %16 = OpConstant %15 0
+         %17 = OpTypePointer Uniform %9
+         %20 = OpConstant %15 1
+         %23 = OpTypeVector %9 2
+         %26 = OpTypeVector %9 4
+         %27 = OpTypePointer Function %26
+         %31 = OpTypePointer Function %9
+         %33 = OpConstant %9 0.00999999978
+         %34 = OpTypeBool
+         %35 = OpConstant %6 4
+         %36 = OpTypeArray %15 %35
+         %37 = OpTypeStruct %36
+         %38 = OpTypePointer Uniform %37
+         %39 = OpVariable %38 Uniform
+         %40 = OpConstant %15 2
+         %41 = OpTypePointer Uniform %15
+         %48 = OpConstant %15 3
+         %62 = OpConstant %15 4
+         %79 = OpConstant %15 5
+         %97 = OpConstant %15 6
+        %111 = OpTypePointer Output %26
+        %112 = OpVariable %111 Output
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+          %8 = OpVariable %7 Function
+         %28 = OpVariable %27 Function
+         %32 = OpVariable %31 Function
+         %18 = OpAccessChain %17 %14 %16 %16
+         %19 = OpLoad %9 %18
+         %21 = OpAccessChain %17 %14 %16 %20
+         %22 = OpLoad %9 %21
+         %24 = OpCompositeConstruct %23 %19 %22
+         %25 = OpExtInst %6 %1 PackUnorm2x16 %24
+               OpStore %8 %25
+         %29 = OpLoad %6 %8
+         %30 = OpExtInst %26 %1 UnpackSnorm4x8 %29
+               OpStore %28 %30
+               OpStore %32 %33
+         %42 = OpAccessChain %41 %39 %16 %40
+         %43 = OpLoad %15 %42
+         %44 = OpAccessChain %31 %28 %43
+         %45 = OpLoad %9 %44
+         %46 = OpAccessChain %17 %14 %16 %40
+         %47 = OpLoad %9 %46
+         %49 = OpAccessChain %17 %14 %16 %48
+         %50 = OpLoad %9 %49
+         %51 = OpFDiv %9 %47 %50
+         %52 = OpFSub %9 %45 %51
+         %53 = OpExtInst %9 %1 FAbs %52
+         %54 = OpLoad %9 %32
+         %55 = OpFOrdLessThan %34 %53 %54
+               OpSelectionMerge %57 None
+               OpBranchConditional %55 %56 %57
+         %56 = OpLabel
+         %58 = OpAccessChain %41 %39 %16 %20
+         %59 = OpLoad %15 %58
+         %60 = OpAccessChain %31 %28 %59
+         %61 = OpLoad %9 %60
+         %63 = OpAccessChain %17 %14 %16 %62
+         %64 = OpLoad %9 %63
+         %65 = OpAccessChain %17 %14 %16 %48
+         %66 = OpLoad %9 %65
+         %67 = OpFDiv %9 %64 %66
+         %68 = OpFSub %9 %61 %67
+         %69 = OpExtInst %9 %1 FAbs %68
+         %70 = OpLoad %9 %32
+         %71 = OpFOrdLessThan %34 %69 %70
+               OpBranch %57
+         %57 = OpLabel
+         %72 = OpPhi %34 %55 %5 %71 %56
+               OpSelectionMerge %74 None
+               OpBranchConditional %72 %73 %74
+         %73 = OpLabel
+         %75 = OpAccessChain %41 %39 %16 %48
+         %76 = OpLoad %15 %75
+         %77 = OpAccessChain %31 %28 %76
+         %78 = OpLoad %9 %77
+         %80 = OpAccessChain %17 %14 %16 %79
+         %81 = OpLoad %9 %80
+         %82 = OpFNegate %9 %81
+         %83 = OpAccessChain %17 %14 %16 %48
+         %84 = OpLoad %9 %83
+         %85 = OpFDiv %9 %82 %84
+         %86 = OpFSub %9 %78 %85
+         %87 = OpExtInst %9 %1 FAbs %86
+         %88 = OpLoad %9 %32
+         %89 = OpFOrdLessThan %34 %87 %88
+               OpBranch %74
+         %74 = OpLabel
+         %90 = OpPhi %34 %72 %57 %89 %73
+               OpSelectionMerge %92 None
+               OpBranchConditional %90 %91 %92
+         %91 = OpLabel
+         %93 = OpAccessChain %41 %39 %16 %16
+         %94 = OpLoad %15 %93
+         %95 = OpAccessChain %31 %28 %94
+         %96 = OpLoad %9 %95
+         %98 = OpAccessChain %17 %14 %16 %97
+         %99 = OpLoad %9 %98
+        %100 = OpFNegate %9 %99
+        %101 = OpAccessChain %17 %14 %16 %48
+        %102 = OpLoad %9 %101
+        %103 = OpFDiv %9 %100 %102
+        %104 = OpFSub %9 %96 %103
+        %105 = OpExtInst %9 %1 FAbs %104
+        %106 = OpLoad %9 %32
+        %107 = OpFOrdLessThan %34 %105 %106
+               OpBranch %92
+         %92 = OpLabel
+        %108 = OpPhi %34 %90 %74 %107 %91
+               OpSelectionMerge %110 None
+               OpBranchConditional %108 %109 %126
+        %109 = OpLabel
+        %113 = OpAccessChain %41 %39 %16 %20
+        %114 = OpLoad %15 %113
+        %115 = OpConvertSToF %9 %114
+        %116 = OpAccessChain %41 %39 %16 %40
+        %117 = OpLoad %15 %116
+        %118 = OpConvertSToF %9 %117
+        %119 = OpAccessChain %41 %39 %16 %40
+        %120 = OpLoad %15 %119
+        %121 = OpConvertSToF %9 %120
+        %122 = OpAccessChain %41 %39 %16 %20
+        %123 = OpLoad %15 %122
+        %124 = OpConvertSToF %9 %123
+        %125 = OpCompositeConstruct %26 %115 %118 %121 %124
+               OpStore %112 %125
+               OpBranch %110
+        %126 = OpLabel
+        %127 = OpAccessChain %17 %14 %16 %79
+        %128 = OpLoad %9 %127
+        %129 = OpCompositeConstruct %26 %128 %128 %128 %128
+               OpStore %112 %129
+               OpBranch %110
+        %110 = OpLabel
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# _GLF_uniform_float_values
+BUFFER variant__GLF_uniform_float_values DATA_TYPE float[] STD140 DATA
+ 0.25 0.75 0.0 127.0 64.0 1.0 65.0
+END
+# _GLF_uniform_int_values
+BUFFER variant__GLF_uniform_int_values DATA_TYPE int32[] STD140 DATA
+ 3 1 0 2
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 16 16
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant__GLF_uniform_float_values AS uniform DESCRIPTOR_SET 0 BINDING 1
+  BIND BUFFER variant__GLF_uniform_int_values AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 16 16
+
+EXPECT variant_framebuffer IDX 0 0 SIZE 16 16 EQ_RGBA 255 0 0 255
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-inst-combine-select-findlsb-uaddcarry.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-inst-combine-select-findlsb-uaddcarry.amber
new file mode 100644
index 0000000..9449f60
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-inst-combine-select-findlsb-uaddcarry.amber
@@ -0,0 +1,415 @@
+#!amber
+
+# Copyright 2020 Google LLC
+#
+# 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.
+
+
+# A test for a coverage-gap found by the GraphicsFuzz project.
+
+# Short description: A fragment shader that covers a specific instruction combine select code path
+
+# The test passes because the shader always writes red.
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+# variant_fragment_shader is derived from the following GLSL:
+# #version 310 es
+# #define _int_10 _GLF_uniform_int_values[0]
+# #define _int_4 _GLF_uniform_int_values[1]
+# #define _int_0 _GLF_uniform_int_values[2]
+# #define _int_1 _GLF_uniform_int_values[3]
+# #define _int_2 _GLF_uniform_int_values[4]
+# #define _uint_0 _GLF_uniform_uint_values[0]
+# #define _float_1_0 _GLF_uniform_float_values[0]
+# #define _float_0_0 _GLF_uniform_float_values[1]
+# #define _uint_4294967294 _GLF_uniform_uint_values[1]
+#
+# precision highp float;
+#
+# precision highp int;
+#
+# // Contents of _GLF_uniform_uint_values: 0
+# layout(set = 0, binding = 0) uniform buf0
+# {
+#     uint _GLF_uniform_uint_values[2];
+# };
+#
+# // Contents of _GLF_uniform_int_values: [10, 4, 0, 1, 2]
+# layout(set = 0, binding = 1) uniform buf1
+# {
+#     int _GLF_uniform_int_values[5];
+# };
+#
+# // Contents of _GLF_uniform_float_values: [1.0, 0.0]
+# layout(set = 0, binding = 2) uniform buf2
+# {
+#     float _GLF_uniform_float_values[2];
+# };
+#
+# // Contents of A: [0.0, 1.0]
+# layout(set = 0, binding = 3) uniform buf3
+# {
+#     vec2 A;
+# };
+# layout(location = 0) out vec4 _GLF_color;
+#
+# float f1()
+# {
+#     // Always false.
+#     if (A.x > A.y)
+#     {
+#         // Always false.
+#         if (gl_FragCoord.y < _float_0_0)
+#         {
+#             return _float_0_0;
+#         }
+#     }
+#
+#     // Always false.
+#     if (_float_0_0 > A.x)
+#     {
+#         // Always false.
+#         if (A.x > A.y)
+#         {
+#             return _float_0_0;
+#         }
+#     }
+#     for (int i = _int_0; i < _int_10; i++)
+#     {
+#         // Always false.
+#         if (gl_FragCoord.x < _float_0_0)
+#         {
+#             return _float_0_0;
+#         }
+#     }
+#
+#     // Always returns 1.0.
+#     return _float_1_0;
+# }
+#
+# void main()
+# {
+#     float data[2];
+#
+#     data[0] = 0.1;
+#     data[1] = 0.2;
+#
+#     // Loops over two times.
+#     for (int j = _int_0; j < findLSB(_int_4); j++)
+#     {
+#         uint index = _uint_0;
+#
+#         uaddCarry(uint(_int_2 * j), _uint_4294967294, index);
+#         data[index] = f1() - float(index);
+#     }
+#
+#     _GLF_color = vec4(data[_int_0], data[_int_1], data[_int_1], data[_int_0]);
+# }
+SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 8
+; Bound: 170
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %30 %151
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 310
+               OpName %4 "main"
+               OpName %8 "f1("
+               OpName %11 "buf3"
+               OpMemberName %11 0 "A"
+               OpName %13 ""
+               OpName %30 "gl_FragCoord"
+               OpName %36 "buf2"
+               OpMemberName %36 0 "_GLF_uniform_float_values"
+               OpName %38 ""
+               OpName %66 "i"
+               OpName %69 "buf1"
+               OpMemberName %69 0 "_GLF_uniform_int_values"
+               OpName %71 ""
+               OpName %102 "data"
+               OpName %108 "j"
+               OpName %122 "index"
+               OpName %124 "buf0"
+               OpMemberName %124 0 "_GLF_uniform_uint_values"
+               OpName %126 ""
+               OpName %138 "ResType"
+               OpName %151 "_GLF_color"
+               OpMemberDecorate %11 0 Offset 0
+               OpDecorate %11 Block
+               OpDecorate %13 DescriptorSet 0
+               OpDecorate %13 Binding 3
+               OpDecorate %30 BuiltIn FragCoord
+               OpDecorate %35 ArrayStride 16
+               OpMemberDecorate %36 0 Offset 0
+               OpDecorate %36 Block
+               OpDecorate %38 DescriptorSet 0
+               OpDecorate %38 Binding 2
+               OpDecorate %68 ArrayStride 16
+               OpMemberDecorate %69 0 Offset 0
+               OpDecorate %69 Block
+               OpDecorate %71 DescriptorSet 0
+               OpDecorate %71 Binding 1
+               OpDecorate %123 ArrayStride 16
+               OpMemberDecorate %124 0 Offset 0
+               OpDecorate %124 Block
+               OpDecorate %126 DescriptorSet 0
+               OpDecorate %126 Binding 0
+               OpDecorate %151 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeFloat 32
+          %7 = OpTypeFunction %6
+         %10 = OpTypeVector %6 2
+         %11 = OpTypeStruct %10
+         %12 = OpTypePointer Uniform %11
+         %13 = OpVariable %12 Uniform
+         %14 = OpTypeInt 32 1
+         %15 = OpConstant %14 0
+         %16 = OpTypeInt 32 0
+         %17 = OpConstant %16 0
+         %18 = OpTypePointer Uniform %6
+         %21 = OpConstant %16 1
+         %24 = OpTypeBool
+         %28 = OpTypeVector %6 4
+         %29 = OpTypePointer Input %28
+         %30 = OpVariable %29 Input
+         %31 = OpTypePointer Input %6
+         %34 = OpConstant %16 2
+         %35 = OpTypeArray %6 %34
+         %36 = OpTypeStruct %35
+         %37 = OpTypePointer Uniform %36
+         %38 = OpVariable %37 Uniform
+         %39 = OpConstant %14 1
+         %65 = OpTypePointer Function %14
+         %67 = OpConstant %16 5
+         %68 = OpTypeArray %14 %67
+         %69 = OpTypeStruct %68
+         %70 = OpTypePointer Uniform %69
+         %71 = OpVariable %70 Uniform
+         %72 = OpConstant %14 2
+         %73 = OpTypePointer Uniform %14
+        %101 = OpTypePointer Function %35
+        %103 = OpConstant %6 0.100000001
+        %104 = OpTypePointer Function %6
+        %106 = OpConstant %6 0.200000003
+        %121 = OpTypePointer Function %16
+        %123 = OpTypeArray %16 %34
+        %124 = OpTypeStruct %123
+        %125 = OpTypePointer Uniform %124
+        %126 = OpVariable %125 Uniform
+        %127 = OpTypePointer Uniform %16
+        %130 = OpConstant %14 4
+        %138 = OpTypeStruct %16 %16
+        %150 = OpTypePointer Output %28
+        %151 = OpVariable %150 Output
+        %156 = OpConstant %14 3
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+        %102 = OpVariable %101 Function
+        %108 = OpVariable %65 Function
+        %122 = OpVariable %121 Function
+        %105 = OpAccessChain %104 %102 %15
+               OpStore %105 %103
+        %107 = OpAccessChain %104 %102 %39
+               OpStore %107 %106
+        %109 = OpAccessChain %73 %71 %15 %72
+        %110 = OpLoad %14 %109
+               OpStore %108 %110
+               OpBranch %111
+        %111 = OpLabel
+               OpLoopMerge %113 %114 None
+               OpBranch %115
+        %115 = OpLabel
+        %116 = OpLoad %14 %108
+        %117 = OpAccessChain %73 %71 %15 %39
+        %118 = OpLoad %14 %117
+        %119 = OpExtInst %14 %1 FindILsb %118
+        %120 = OpSLessThan %24 %116 %119
+               OpBranchConditional %120 %112 %113
+        %112 = OpLabel
+        %128 = OpAccessChain %127 %126 %15 %15
+        %129 = OpLoad %16 %128
+               OpStore %122 %129
+        %131 = OpAccessChain %73 %71 %15 %130
+        %132 = OpLoad %14 %131
+        %133 = OpLoad %14 %108
+        %134 = OpIMul %14 %132 %133
+        %135 = OpBitcast %16 %134
+        %136 = OpAccessChain %127 %126 %15 %39
+        %137 = OpLoad %16 %136
+        %139 = OpIAddCarry %138 %135 %137
+        %140 = OpCompositeExtract %16 %139 1
+               OpStore %122 %140
+        %141 = OpCompositeExtract %16 %139 0
+        %142 = OpLoad %16 %122
+        %143 = OpFunctionCall %6 %8
+        %144 = OpLoad %16 %122
+        %145 = OpConvertUToF %6 %144
+        %146 = OpFSub %6 %143 %145
+        %147 = OpAccessChain %104 %102 %142
+               OpStore %147 %146
+               OpBranch %114
+        %114 = OpLabel
+        %148 = OpLoad %14 %108
+        %149 = OpIAdd %14 %148 %39
+               OpStore %108 %149
+               OpBranch %111
+        %113 = OpLabel
+        %152 = OpAccessChain %73 %71 %15 %72
+        %153 = OpLoad %14 %152
+        %154 = OpAccessChain %104 %102 %153
+        %155 = OpLoad %6 %154
+        %157 = OpAccessChain %73 %71 %15 %156
+        %158 = OpLoad %14 %157
+        %159 = OpAccessChain %104 %102 %158
+        %160 = OpLoad %6 %159
+        %161 = OpAccessChain %73 %71 %15 %156
+        %162 = OpLoad %14 %161
+        %163 = OpAccessChain %104 %102 %162
+        %164 = OpLoad %6 %163
+        %165 = OpAccessChain %73 %71 %15 %72
+        %166 = OpLoad %14 %165
+        %167 = OpAccessChain %104 %102 %166
+        %168 = OpLoad %6 %167
+        %169 = OpCompositeConstruct %28 %155 %160 %164 %168
+               OpStore %151 %169
+               OpReturn
+               OpFunctionEnd
+          %8 = OpFunction %6 None %7
+          %9 = OpLabel
+         %66 = OpVariable %65 Function
+         %19 = OpAccessChain %18 %13 %15 %17
+         %20 = OpLoad %6 %19
+         %22 = OpAccessChain %18 %13 %15 %21
+         %23 = OpLoad %6 %22
+         %25 = OpFOrdGreaterThan %24 %20 %23
+               OpSelectionMerge %27 None
+               OpBranchConditional %25 %26 %27
+         %26 = OpLabel
+         %32 = OpAccessChain %31 %30 %21
+         %33 = OpLoad %6 %32
+         %40 = OpAccessChain %18 %38 %15 %39
+         %41 = OpLoad %6 %40
+         %42 = OpFOrdLessThan %24 %33 %41
+               OpSelectionMerge %44 None
+               OpBranchConditional %42 %43 %44
+         %43 = OpLabel
+         %45 = OpAccessChain %18 %38 %15 %39
+         %46 = OpLoad %6 %45
+               OpReturnValue %46
+         %44 = OpLabel
+               OpBranch %27
+         %27 = OpLabel
+         %48 = OpAccessChain %18 %38 %15 %39
+         %49 = OpLoad %6 %48
+         %50 = OpAccessChain %18 %13 %15 %17
+         %51 = OpLoad %6 %50
+         %52 = OpFOrdGreaterThan %24 %49 %51
+               OpSelectionMerge %54 None
+               OpBranchConditional %52 %53 %54
+         %53 = OpLabel
+         %55 = OpAccessChain %18 %13 %15 %17
+         %56 = OpLoad %6 %55
+         %57 = OpAccessChain %18 %13 %15 %21
+         %58 = OpLoad %6 %57
+         %59 = OpFOrdGreaterThan %24 %56 %58
+               OpSelectionMerge %61 None
+               OpBranchConditional %59 %60 %61
+         %60 = OpLabel
+         %62 = OpAccessChain %18 %38 %15 %39
+         %63 = OpLoad %6 %62
+               OpReturnValue %63
+         %61 = OpLabel
+               OpBranch %54
+         %54 = OpLabel
+         %74 = OpAccessChain %73 %71 %15 %72
+         %75 = OpLoad %14 %74
+               OpStore %66 %75
+               OpBranch %76
+         %76 = OpLabel
+               OpLoopMerge %78 %79 None
+               OpBranch %80
+         %80 = OpLabel
+         %81 = OpLoad %14 %66
+         %82 = OpAccessChain %73 %71 %15 %15
+         %83 = OpLoad %14 %82
+         %84 = OpSLessThan %24 %81 %83
+               OpBranchConditional %84 %77 %78
+         %77 = OpLabel
+         %85 = OpAccessChain %31 %30 %17
+         %86 = OpLoad %6 %85
+         %87 = OpAccessChain %18 %38 %15 %39
+         %88 = OpLoad %6 %87
+         %89 = OpFOrdLessThan %24 %86 %88
+               OpSelectionMerge %91 None
+               OpBranchConditional %89 %90 %91
+         %90 = OpLabel
+         %92 = OpAccessChain %18 %38 %15 %39
+         %93 = OpLoad %6 %92
+               OpReturnValue %93
+         %91 = OpLabel
+               OpBranch %79
+         %79 = OpLabel
+         %95 = OpLoad %14 %66
+         %96 = OpIAdd %14 %95 %39
+               OpStore %66 %96
+               OpBranch %76
+         %78 = OpLabel
+         %97 = OpAccessChain %18 %38 %15 %15
+         %98 = OpLoad %6 %97
+               OpReturnValue %98
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# A
+BUFFER variant_A DATA_TYPE vec2<float> STD140 DATA
+ 0.0 1.0
+END
+# _GLF_uniform_float_values
+BUFFER variant__GLF_uniform_float_values DATA_TYPE float[] STD140 DATA
+ 1.0 0.0
+END
+# _GLF_uniform_int_values
+BUFFER variant__GLF_uniform_int_values DATA_TYPE int32[] STD140 DATA
+ 10 4 0 1 2
+END
+# _GLF_uniform_uint_values
+BUFFER variant__GLF_uniform_uint_values DATA_TYPE int32[] STD140 DATA
+ 0 4294967294
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 16 16
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant_A AS uniform DESCRIPTOR_SET 0 BINDING 3
+  BIND BUFFER variant__GLF_uniform_float_values AS uniform DESCRIPTOR_SET 0 BINDING 2
+  BIND BUFFER variant__GLF_uniform_int_values AS uniform DESCRIPTOR_SET 0 BINDING 1
+  BIND BUFFER variant__GLF_uniform_uint_values AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 16 16
+
+EXPECT variant_framebuffer IDX 0 0 SIZE 16 16 EQ_RGBA 255 0 0 255
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-inst-combine-shifts-bitfield-bitcount.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-inst-combine-shifts-bitfield-bitcount.amber
new file mode 100644
index 0000000..dd85566
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-inst-combine-shifts-bitfield-bitcount.amber
@@ -0,0 +1,161 @@
+#!amber
+
+# Copyright 2020 Google LLC
+#
+# 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.
+
+
+# A test for a coverage-gap found by the GraphicsFuzz project.
+
+# Short description: A fragment shader that covers a specific instruction combine shifts code path
+
+# The test passes because the shader always writes red.
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+# variant_fragment_shader is derived from the following GLSL:
+# #version 310 es
+# #define _int_0 _GLF_uniform_int_values[0]
+# #define _int_1 _GLF_uniform_int_values[1]
+#
+# precision highp float;
+# precision highp int;
+#
+# // Contents of _GLF_uniform_int_values: [0, 1]
+# layout(set = 0, binding = 0) uniform buf0
+# {
+#     int _GLF_uniform_int_values[2];
+# };
+#
+# layout(location = 0) out vec4 _GLF_color;
+#
+# void main()
+# {
+#     // Always zero.
+#     int i = bitfieldExtract(_int_0, bitCount(0), _int_1);
+#
+#     if (i == _int_0)
+#     {
+#         _GLF_color = vec4(_int_1, i, i, _int_1);
+#     }
+#     else
+#     {
+#         _GLF_color = vec4(i);
+#     }
+# }
+SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 8
+; Bound: 50
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %34
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 310
+               OpName %4 "main"
+               OpName %8 "i"
+               OpName %12 "buf0"
+               OpMemberName %12 0 "_GLF_uniform_int_values"
+               OpName %14 ""
+               OpName %34 "_GLF_color"
+               OpDecorate %11 ArrayStride 16
+               OpMemberDecorate %12 0 Offset 0
+               OpDecorate %12 Block
+               OpDecorate %14 DescriptorSet 0
+               OpDecorate %14 Binding 0
+               OpDecorate %19 RelaxedPrecision
+               OpDecorate %34 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeInt 32 1
+          %7 = OpTypePointer Function %6
+          %9 = OpTypeInt 32 0
+         %10 = OpConstant %9 2
+         %11 = OpTypeArray %6 %10
+         %12 = OpTypeStruct %11
+         %13 = OpTypePointer Uniform %12
+         %14 = OpVariable %13 Uniform
+         %15 = OpConstant %6 0
+         %16 = OpTypePointer Uniform %6
+         %20 = OpConstant %6 1
+         %27 = OpTypeBool
+         %31 = OpTypeFloat 32
+         %32 = OpTypeVector %31 4
+         %33 = OpTypePointer Output %32
+         %34 = OpVariable %33 Output
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+          %8 = OpVariable %7 Function
+         %17 = OpAccessChain %16 %14 %15 %15
+         %18 = OpLoad %6 %17
+         %19 = OpBitCount %6 %15
+         %21 = OpAccessChain %16 %14 %15 %20
+         %22 = OpLoad %6 %21
+         %23 = OpBitFieldSExtract %6 %18 %19 %22
+               OpStore %8 %23
+         %24 = OpLoad %6 %8
+         %25 = OpAccessChain %16 %14 %15 %15
+         %26 = OpLoad %6 %25
+         %28 = OpIEqual %27 %24 %26
+               OpSelectionMerge %30 None
+               OpBranchConditional %28 %29 %46
+         %29 = OpLabel
+         %35 = OpAccessChain %16 %14 %15 %20
+         %36 = OpLoad %6 %35
+         %37 = OpConvertSToF %31 %36
+         %38 = OpLoad %6 %8
+         %39 = OpConvertSToF %31 %38
+         %40 = OpLoad %6 %8
+         %41 = OpConvertSToF %31 %40
+         %42 = OpAccessChain %16 %14 %15 %20
+         %43 = OpLoad %6 %42
+         %44 = OpConvertSToF %31 %43
+         %45 = OpCompositeConstruct %32 %37 %39 %41 %44
+               OpStore %34 %45
+               OpBranch %30
+         %46 = OpLabel
+         %47 = OpLoad %6 %8
+         %48 = OpConvertSToF %31 %47
+         %49 = OpCompositeConstruct %32 %48 %48 %48 %48
+               OpStore %34 %49
+               OpBranch %30
+         %30 = OpLabel
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# _GLF_uniform_int_values
+BUFFER variant__GLF_uniform_int_values DATA_TYPE int32[] STD140 DATA
+ 0 1
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 256 256
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant__GLF_uniform_int_values AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256
+
+EXPECT variant_framebuffer IDX 0 0 SIZE 256 256 EQ_RGBA 255 0 0 255
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-inst-combine-shifts-mix-mix-clamp.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-inst-combine-shifts-mix-mix-clamp.amber
new file mode 100644
index 0000000..c879660
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-inst-combine-shifts-mix-mix-clamp.amber
@@ -0,0 +1,313 @@
+#!amber
+
+# Copyright 2020 Google LLC
+#
+# 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.
+
+
+# A test for a coverage-gap found by the GraphicsFuzz project.
+
+# Short description: A fragment shader that covers a specific instruction combine shifts code path
+
+# The test passes because the shader always writes red.
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+# variant_fragment_shader is derived from the following GLSL:
+# #version 310 es
+# #define _int_1 _GLF_uniform_int_values[0]
+# #define _int_2 _GLF_uniform_int_values[1]
+# #define _int_0 _GLF_uniform_int_values[2]
+# #define _float_1_0 _GLF_uniform_float_values[0]
+# #define _float_0_0 _GLF_uniform_float_values[1]
+#
+# precision highp float;
+# precision highp int;
+#
+# // Contents of _GLF_uniform_float_values: [1.0, 0.0]
+# layout(set = 0, binding = 0) uniform buf0
+# {
+#     float _GLF_uniform_float_values[2];
+# };
+#
+# // Contents of _GLF_uniform_int_values: [1, 2, 0]
+# layout(set = 0, binding = 1) uniform buf1
+# {
+#     int _GLF_uniform_int_values[3];
+# };
+#
+# layout(location = 0) out vec4 _GLF_color;
+#
+# void main()
+# {
+#     int A[2];
+#     A[_int_0] = _int_1;
+#     A[_int_1] = _int_2;
+#
+#     int i = _int_1;
+#     while (i > _int_0)
+#     {
+#         i--;
+#     }
+#
+#     int a = A[((_float_0_0 >= _float_0_0) ? 1 : i)];
+#
+#     // v1 becomes vec2(1, 1).
+#     vec2 v1 = mix(vec2(_int_1, a), vec2(_int_1, _int_1), bvec2((_float_0_0 < _float_1_0), true));
+#
+#     // v2 becomes vec2(1, 1).
+#     vec2 v2 = mix(vec2(v1[_int_0]), vec2(v1[_int_1]), bvec2(false));
+#
+#     int b = A[int(clamp(vec2(_int_2), vec2(_int_1), v2).x)];
+#
+#     if (b == _int_2)
+#     {
+#         _GLF_color = vec4(_int_1, _int_0, _int_0, _int_1);
+#     }
+#     else
+#     {
+#         _GLF_color = vec4(_int_0);
+#     }
+# }
+SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 8
+; Bound: 146
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %127
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 310
+               OpName %4 "main"
+               OpName %11 "A"
+               OpName %14 "buf1"
+               OpMemberName %14 0 "_GLF_uniform_int_values"
+               OpName %16 ""
+               OpName %32 "i"
+               OpName %47 "a"
+               OpName %50 "buf0"
+               OpMemberName %50 0 "_GLF_uniform_float_values"
+               OpName %52 ""
+               OpName %65 "v1"
+               OpName %88 "v2"
+               OpName %103 "b"
+               OpName %127 "_GLF_color"
+               OpDecorate %13 ArrayStride 16
+               OpMemberDecorate %14 0 Offset 0
+               OpDecorate %14 Block
+               OpDecorate %16 DescriptorSet 0
+               OpDecorate %16 Binding 1
+               OpDecorate %49 ArrayStride 16
+               OpMemberDecorate %50 0 Offset 0
+               OpDecorate %50 Block
+               OpDecorate %52 DescriptorSet 0
+               OpDecorate %52 Binding 0
+               OpDecorate %127 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeInt 32 1
+          %7 = OpTypeInt 32 0
+          %8 = OpConstant %7 2
+          %9 = OpTypeArray %6 %8
+         %10 = OpTypePointer Function %9
+         %12 = OpConstant %7 3
+         %13 = OpTypeArray %6 %12
+         %14 = OpTypeStruct %13
+         %15 = OpTypePointer Uniform %14
+         %16 = OpVariable %15 Uniform
+         %17 = OpConstant %6 0
+         %18 = OpConstant %6 2
+         %19 = OpTypePointer Uniform %6
+         %24 = OpTypePointer Function %6
+         %28 = OpConstant %6 1
+         %43 = OpTypeBool
+         %48 = OpTypeFloat 32
+         %49 = OpTypeArray %48 %8
+         %50 = OpTypeStruct %49
+         %51 = OpTypePointer Uniform %50
+         %52 = OpVariable %51 Uniform
+         %53 = OpTypePointer Uniform %48
+         %63 = OpTypeVector %48 2
+         %64 = OpTypePointer Function %63
+         %84 = OpConstantTrue %43
+         %85 = OpTypeVector %43 2
+         %91 = OpTypePointer Function %48
+        %100 = OpConstantFalse %43
+        %101 = OpConstantComposite %85 %100 %100
+        %114 = OpConstant %7 0
+        %125 = OpTypeVector %48 4
+        %126 = OpTypePointer Output %125
+        %127 = OpVariable %126 Output
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+         %11 = OpVariable %10 Function
+         %32 = OpVariable %24 Function
+         %47 = OpVariable %24 Function
+         %65 = OpVariable %64 Function
+         %88 = OpVariable %64 Function
+        %103 = OpVariable %24 Function
+         %20 = OpAccessChain %19 %16 %17 %18
+         %21 = OpLoad %6 %20
+         %22 = OpAccessChain %19 %16 %17 %17
+         %23 = OpLoad %6 %22
+         %25 = OpAccessChain %24 %11 %21
+               OpStore %25 %23
+         %26 = OpAccessChain %19 %16 %17 %17
+         %27 = OpLoad %6 %26
+         %29 = OpAccessChain %19 %16 %17 %28
+         %30 = OpLoad %6 %29
+         %31 = OpAccessChain %24 %11 %27
+               OpStore %31 %30
+         %33 = OpAccessChain %19 %16 %17 %17
+         %34 = OpLoad %6 %33
+               OpStore %32 %34
+               OpBranch %35
+         %35 = OpLabel
+               OpLoopMerge %37 %38 None
+               OpBranch %39
+         %39 = OpLabel
+         %40 = OpLoad %6 %32
+         %41 = OpAccessChain %19 %16 %17 %18
+         %42 = OpLoad %6 %41
+         %44 = OpSGreaterThan %43 %40 %42
+               OpBranchConditional %44 %36 %37
+         %36 = OpLabel
+         %45 = OpLoad %6 %32
+         %46 = OpISub %6 %45 %28
+               OpStore %32 %46
+               OpBranch %38
+         %38 = OpLabel
+               OpBranch %35
+         %37 = OpLabel
+         %54 = OpAccessChain %53 %52 %17 %28
+         %55 = OpLoad %48 %54
+         %56 = OpAccessChain %53 %52 %17 %28
+         %57 = OpLoad %48 %56
+         %58 = OpFOrdGreaterThanEqual %43 %55 %57
+         %59 = OpLoad %6 %32
+         %60 = OpSelect %6 %58 %28 %59
+         %61 = OpAccessChain %24 %11 %60
+         %62 = OpLoad %6 %61
+               OpStore %47 %62
+         %66 = OpAccessChain %19 %16 %17 %17
+         %67 = OpLoad %6 %66
+         %68 = OpConvertSToF %48 %67
+         %69 = OpLoad %6 %47
+         %70 = OpConvertSToF %48 %69
+         %71 = OpCompositeConstruct %63 %68 %70
+         %72 = OpAccessChain %19 %16 %17 %17
+         %73 = OpLoad %6 %72
+         %74 = OpConvertSToF %48 %73
+         %75 = OpAccessChain %19 %16 %17 %17
+         %76 = OpLoad %6 %75
+         %77 = OpConvertSToF %48 %76
+         %78 = OpCompositeConstruct %63 %74 %77
+         %79 = OpAccessChain %53 %52 %17 %28
+         %80 = OpLoad %48 %79
+         %81 = OpAccessChain %53 %52 %17 %17
+         %82 = OpLoad %48 %81
+         %83 = OpFOrdLessThan %43 %80 %82
+         %86 = OpCompositeConstruct %85 %83 %84
+         %87 = OpSelect %63 %86 %78 %71
+               OpStore %65 %87
+         %89 = OpAccessChain %19 %16 %17 %18
+         %90 = OpLoad %6 %89
+         %92 = OpAccessChain %91 %65 %90
+         %93 = OpLoad %48 %92
+         %94 = OpCompositeConstruct %63 %93 %93
+         %95 = OpAccessChain %19 %16 %17 %17
+         %96 = OpLoad %6 %95
+         %97 = OpAccessChain %91 %65 %96
+         %98 = OpLoad %48 %97
+         %99 = OpCompositeConstruct %63 %98 %98
+        %102 = OpSelect %63 %101 %99 %94
+               OpStore %88 %102
+        %104 = OpAccessChain %19 %16 %17 %28
+        %105 = OpLoad %6 %104
+        %106 = OpConvertSToF %48 %105
+        %107 = OpCompositeConstruct %63 %106 %106
+        %108 = OpAccessChain %19 %16 %17 %17
+        %109 = OpLoad %6 %108
+        %110 = OpConvertSToF %48 %109
+        %111 = OpCompositeConstruct %63 %110 %110
+        %112 = OpLoad %63 %88
+        %113 = OpExtInst %63 %1 FClamp %107 %111 %112
+        %115 = OpCompositeExtract %48 %113 0
+        %116 = OpConvertFToS %6 %115
+        %117 = OpAccessChain %24 %11 %116
+        %118 = OpLoad %6 %117
+               OpStore %103 %118
+        %119 = OpLoad %6 %103
+        %120 = OpAccessChain %19 %16 %17 %28
+        %121 = OpLoad %6 %120
+        %122 = OpIEqual %43 %119 %121
+               OpSelectionMerge %124 None
+               OpBranchConditional %122 %123 %141
+        %123 = OpLabel
+        %128 = OpAccessChain %19 %16 %17 %17
+        %129 = OpLoad %6 %128
+        %130 = OpConvertSToF %48 %129
+        %131 = OpAccessChain %19 %16 %17 %18
+        %132 = OpLoad %6 %131
+        %133 = OpConvertSToF %48 %132
+        %134 = OpAccessChain %19 %16 %17 %18
+        %135 = OpLoad %6 %134
+        %136 = OpConvertSToF %48 %135
+        %137 = OpAccessChain %19 %16 %17 %17
+        %138 = OpLoad %6 %137
+        %139 = OpConvertSToF %48 %138
+        %140 = OpCompositeConstruct %125 %130 %133 %136 %139
+               OpStore %127 %140
+               OpBranch %124
+        %141 = OpLabel
+        %142 = OpAccessChain %19 %16 %17 %18
+        %143 = OpLoad %6 %142
+        %144 = OpConvertSToF %48 %143
+        %145 = OpCompositeConstruct %125 %144 %144 %144 %144
+               OpStore %127 %145
+               OpBranch %124
+        %124 = OpLabel
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# _GLF_uniform_int_values
+BUFFER variant__GLF_uniform_int_values DATA_TYPE int32[] STD140 DATA
+ 1 2 0
+END
+# _GLF_uniform_float_values
+BUFFER variant__GLF_uniform_float_values DATA_TYPE float[] STD140 DATA
+ 1.0 0.0
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 256 256
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant__GLF_uniform_int_values AS uniform DESCRIPTOR_SET 0 BINDING 1
+  BIND BUFFER variant__GLF_uniform_float_values AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256
+
+EXPECT variant_framebuffer IDX 0 0 SIZE 256 256 EQ_RGBA 255 0 0 255
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-inst-combine-simplify-demanded-pack-unpack.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-inst-combine-simplify-demanded-pack-unpack.amber
new file mode 100644
index 0000000..9d889fc
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-inst-combine-simplify-demanded-pack-unpack.amber
@@ -0,0 +1,281 @@
+#!amber
+
+# Copyright 2020 Google LLC
+#
+# 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.
+
+
+# A test for a coverage-gap found by the GraphicsFuzz project.
+
+# Short description: Covers a specific instruction combine simplify demanded code path
+
+# The test passes because the shader always writes red.
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+# variant_fragment_shader is derived from the following GLSL:
+# #version 310 es
+# #define _int_1 _GLF_uniform_int_values[0]
+# #define _int_0 _GLF_uniform_int_values[1]
+# #define _int_2 _GLF_uniform_int_values[2]
+# #define _int_3 _GLF_uniform_int_values[3]
+# #define _float_0_0 _GLF_uniform_float_values[0]
+# #define _float_127_0 _GLF_uniform_float_values[1]
+# #define _float_60_0 _GLF_uniform_float_values[2]
+#
+# precision highp float;
+#
+# precision highp int;
+#
+# // Contents of _GLF_uniform_float_values: [0.0, 127.0, 60.0]
+# layout(set = 0, binding = 0) uniform buf0
+# {
+#     float _GLF_uniform_float_values[3];
+# };
+#
+# // Contents of _GLF_uniform_int_values: [1, 0, 2, 3]
+# layout(set = 0, binding = 1) uniform buf1
+# {
+#     int _GLF_uniform_int_values[4];
+# };
+#
+# layout(location = 0) out vec4 _GLF_color;
+#
+# void main()
+# {
+#     // Converts the two 32-bit floating-point quantities to 16-bit quantities
+#     // and packs them into a 32-bit unsigned integer of 1006648320.
+#     uint a = packHalf2x16(vec2(1.0));
+#
+#     // Unpacks the integer into 8-bit signed integers of values 0.0, 60.0, 0.0 and 60.0.
+#     // Then converts them into normalized floating-point numbers by dividing 127.0.
+#     vec4 v1 = unpackSnorm4x8(a);
+#
+#     float E = 0.01;
+#     if (abs(v1[_int_0] - (_float_0_0 / _float_127_0)) < E
+#         && abs(v1[_int_1] - (_float_60_0 / _float_127_0)) < E
+#         && abs(v1[_int_2] - (_float_0_0 / _float_127_0)) < E
+#         && abs(v1[_int_3] - (_float_60_0 / _float_127_0)) < E)
+#     {
+#         _GLF_color = vec4(_int_1, _int_0, _int_0, _int_1);
+#     }
+#     else
+#     {
+#         _GLF_color = vec4(v1[_int_0]);
+#     }
+# }
+SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 8
+; Bound: 124
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %104
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 310
+               OpName %4 "main"
+               OpName %8 "a"
+               OpName %16 "v1"
+               OpName %20 "E"
+               OpName %26 "buf1"
+               OpMemberName %26 0 "_GLF_uniform_int_values"
+               OpName %28 ""
+               OpName %38 "buf0"
+               OpMemberName %38 0 "_GLF_uniform_float_values"
+               OpName %40 ""
+               OpName %104 "_GLF_color"
+               OpDecorate %25 ArrayStride 16
+               OpMemberDecorate %26 0 Offset 0
+               OpDecorate %26 Block
+               OpDecorate %28 DescriptorSet 0
+               OpDecorate %28 Binding 1
+               OpDecorate %37 ArrayStride 16
+               OpMemberDecorate %38 0 Offset 0
+               OpDecorate %38 Block
+               OpDecorate %40 DescriptorSet 0
+               OpDecorate %40 Binding 0
+               OpDecorate %104 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeInt 32 0
+          %7 = OpTypePointer Function %6
+          %9 = OpTypeFloat 32
+         %10 = OpTypeVector %9 2
+         %11 = OpConstant %9 1
+         %12 = OpConstantComposite %10 %11 %11
+         %14 = OpTypeVector %9 4
+         %15 = OpTypePointer Function %14
+         %19 = OpTypePointer Function %9
+         %21 = OpConstant %9 0.00999999978
+         %22 = OpTypeBool
+         %23 = OpTypeInt 32 1
+         %24 = OpConstant %6 4
+         %25 = OpTypeArray %23 %24
+         %26 = OpTypeStruct %25
+         %27 = OpTypePointer Uniform %26
+         %28 = OpVariable %27 Uniform
+         %29 = OpConstant %23 0
+         %30 = OpConstant %23 1
+         %31 = OpTypePointer Uniform %23
+         %36 = OpConstant %6 3
+         %37 = OpTypeArray %9 %36
+         %38 = OpTypeStruct %37
+         %39 = OpTypePointer Uniform %38
+         %40 = OpVariable %39 Uniform
+         %41 = OpTypePointer Uniform %9
+         %57 = OpConstant %23 2
+         %86 = OpConstant %23 3
+        %103 = OpTypePointer Output %14
+        %104 = OpVariable %103 Output
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+          %8 = OpVariable %7 Function
+         %16 = OpVariable %15 Function
+         %20 = OpVariable %19 Function
+         %13 = OpExtInst %6 %1 PackHalf2x16 %12
+               OpStore %8 %13
+         %17 = OpLoad %6 %8
+         %18 = OpExtInst %14 %1 UnpackSnorm4x8 %17
+               OpStore %16 %18
+               OpStore %20 %21
+         %32 = OpAccessChain %31 %28 %29 %30
+         %33 = OpLoad %23 %32
+         %34 = OpAccessChain %19 %16 %33
+         %35 = OpLoad %9 %34
+         %42 = OpAccessChain %41 %40 %29 %29
+         %43 = OpLoad %9 %42
+         %44 = OpAccessChain %41 %40 %29 %30
+         %45 = OpLoad %9 %44
+         %46 = OpFDiv %9 %43 %45
+         %47 = OpFSub %9 %35 %46
+         %48 = OpExtInst %9 %1 FAbs %47
+         %49 = OpLoad %9 %20
+         %50 = OpFOrdLessThan %22 %48 %49
+               OpSelectionMerge %52 None
+               OpBranchConditional %50 %51 %52
+         %51 = OpLabel
+         %53 = OpAccessChain %31 %28 %29 %29
+         %54 = OpLoad %23 %53
+         %55 = OpAccessChain %19 %16 %54
+         %56 = OpLoad %9 %55
+         %58 = OpAccessChain %41 %40 %29 %57
+         %59 = OpLoad %9 %58
+         %60 = OpAccessChain %41 %40 %29 %30
+         %61 = OpLoad %9 %60
+         %62 = OpFDiv %9 %59 %61
+         %63 = OpFSub %9 %56 %62
+         %64 = OpExtInst %9 %1 FAbs %63
+         %65 = OpLoad %9 %20
+         %66 = OpFOrdLessThan %22 %64 %65
+               OpBranch %52
+         %52 = OpLabel
+         %67 = OpPhi %22 %50 %5 %66 %51
+               OpSelectionMerge %69 None
+               OpBranchConditional %67 %68 %69
+         %68 = OpLabel
+         %70 = OpAccessChain %31 %28 %29 %57
+         %71 = OpLoad %23 %70
+         %72 = OpAccessChain %19 %16 %71
+         %73 = OpLoad %9 %72
+         %74 = OpAccessChain %41 %40 %29 %29
+         %75 = OpLoad %9 %74
+         %76 = OpAccessChain %41 %40 %29 %30
+         %77 = OpLoad %9 %76
+         %78 = OpFDiv %9 %75 %77
+         %79 = OpFSub %9 %73 %78
+         %80 = OpExtInst %9 %1 FAbs %79
+         %81 = OpLoad %9 %20
+         %82 = OpFOrdLessThan %22 %80 %81
+               OpBranch %69
+         %69 = OpLabel
+         %83 = OpPhi %22 %67 %52 %82 %68
+               OpSelectionMerge %85 None
+               OpBranchConditional %83 %84 %85
+         %84 = OpLabel
+         %87 = OpAccessChain %31 %28 %29 %86
+         %88 = OpLoad %23 %87
+         %89 = OpAccessChain %19 %16 %88
+         %90 = OpLoad %9 %89
+         %91 = OpAccessChain %41 %40 %29 %57
+         %92 = OpLoad %9 %91
+         %93 = OpAccessChain %41 %40 %29 %30
+         %94 = OpLoad %9 %93
+         %95 = OpFDiv %9 %92 %94
+         %96 = OpFSub %9 %90 %95
+         %97 = OpExtInst %9 %1 FAbs %96
+         %98 = OpLoad %9 %20
+         %99 = OpFOrdLessThan %22 %97 %98
+               OpBranch %85
+         %85 = OpLabel
+        %100 = OpPhi %22 %83 %69 %99 %84
+               OpSelectionMerge %102 None
+               OpBranchConditional %100 %101 %118
+        %101 = OpLabel
+        %105 = OpAccessChain %31 %28 %29 %29
+        %106 = OpLoad %23 %105
+        %107 = OpConvertSToF %9 %106
+        %108 = OpAccessChain %31 %28 %29 %30
+        %109 = OpLoad %23 %108
+        %110 = OpConvertSToF %9 %109
+        %111 = OpAccessChain %31 %28 %29 %30
+        %112 = OpLoad %23 %111
+        %113 = OpConvertSToF %9 %112
+        %114 = OpAccessChain %31 %28 %29 %29
+        %115 = OpLoad %23 %114
+        %116 = OpConvertSToF %9 %115
+        %117 = OpCompositeConstruct %14 %107 %110 %113 %116
+               OpStore %104 %117
+               OpBranch %102
+        %118 = OpLabel
+        %119 = OpAccessChain %31 %28 %29 %30
+        %120 = OpLoad %23 %119
+        %121 = OpAccessChain %19 %16 %120
+        %122 = OpLoad %9 %121
+        %123 = OpCompositeConstruct %14 %122 %122 %122 %122
+               OpStore %104 %123
+               OpBranch %102
+        %102 = OpLabel
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# _GLF_uniform_int_values
+BUFFER variant__GLF_uniform_int_values DATA_TYPE int32[] STD140 DATA
+ 1 0 2 3
+END
+# _GLF_uniform_float_values
+BUFFER variant__GLF_uniform_float_values DATA_TYPE float[] STD140 DATA
+ 0.0 127.0 60.0
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 16 16
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant__GLF_uniform_int_values AS uniform DESCRIPTOR_SET 0 BINDING 1
+  BIND BUFFER variant__GLF_uniform_float_values AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 16 16
+
+EXPECT variant_framebuffer IDX 0 0 SIZE 16 16 EQ_RGBA 255 0 0 255
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-inst-combine-simplify-demanded-packsnorm-unpackunorm.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-inst-combine-simplify-demanded-packsnorm-unpackunorm.amber
new file mode 100644
index 0000000..8baff2d
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-inst-combine-simplify-demanded-packsnorm-unpackunorm.amber
@@ -0,0 +1,280 @@
+#!amber
+
+# Copyright 2020 Google LLC
+#
+# 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.
+
+
+# A test for a coverage-gap found by the GraphicsFuzz project.
+
+# Short description: Covers a specific instruction combine simplify demanded code path
+
+# The test passes because the shader always writes red.
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+# variant_fragment_shader is derived from the following GLSL:
+# #version 310 es
+# #define _int_1 _GLF_uniform_int_values[0]
+# #define _int_0 _GLF_uniform_int_values[1]
+# #define _int_3 _GLF_uniform_int_values[2]
+# #define _int_2 _GLF_uniform_int_values[3]
+# #define _float_0_01 _GLF_uniform_float_values[0]
+# #define _float_1_0 _GLF_uniform_float_values[1]
+# #define _float_127_0 _GLF_uniform_float_values[2]
+# #define _float_255_0 _GLF_uniform_float_values[3]
+#
+# precision highp float;
+# precision highp int;
+#
+# // Contents of _GLF_uniform_int_values: [1, 0, 3, 2]
+# layout(set = 0, binding = 0) uniform buf0
+# {
+#     int _GLF_uniform_int_values[4];
+# };
+#
+# // Contents of _GLF_uniform_float_values: [0.01, 1.0, 127.0, 255.0]
+# layout(set = 0, binding = 1) uniform buf1
+# {
+#     float _GLF_uniform_float_values[4];
+# };
+#
+# layout(location = 0) out vec4 _GLF_color;
+#
+# void main()
+# {
+#     // Converts the components into signed 8-bit integers and packs the result
+#     // into an unsigned integer of 2139062143.
+#     uint a = packSnorm4x8(vec4(_float_1_0));
+#
+#     // Unpacks the integer into four 8-bit unsigned integers and converts
+#     // them into a floating-point value of 0.5.
+#     vec4 v1 = unpackUnorm4x8(a);
+#
+#     float E = _float_0_01;
+#     if (abs(v1[_int_0] - (_float_127_0/_float_255_0)) < E &&
+#         abs(v1[_int_1] - (_float_127_0/_float_255_0)) < E &&
+#         abs(v1[_int_2] - (_float_127_0/_float_255_0)) < E &&
+#         abs(v1[_int_3] - (_float_127_0/_float_255_0)) < E)
+#     {
+#         _GLF_color = vec4(_int_1, _int_0, _int_0, _int_1);
+#     }
+#     else
+#     {
+#         _GLF_color = vec4(_int_0);
+#     }
+# }
+SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 8
+; Bound: 123
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %104
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 310
+               OpName %4 "main"
+               OpName %8 "a"
+               OpName %12 "buf1"
+               OpMemberName %12 0 "_GLF_uniform_float_values"
+               OpName %14 ""
+               OpName %25 "v1"
+               OpName %29 "E"
+               OpName %34 "buf0"
+               OpMemberName %34 0 "_GLF_uniform_int_values"
+               OpName %36 ""
+               OpName %104 "_GLF_color"
+               OpDecorate %11 ArrayStride 16
+               OpMemberDecorate %12 0 Offset 0
+               OpDecorate %12 Block
+               OpDecorate %14 DescriptorSet 0
+               OpDecorate %14 Binding 1
+               OpDecorate %33 ArrayStride 16
+               OpMemberDecorate %34 0 Offset 0
+               OpDecorate %34 Block
+               OpDecorate %36 DescriptorSet 0
+               OpDecorate %36 Binding 0
+               OpDecorate %104 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeInt 32 0
+          %7 = OpTypePointer Function %6
+          %9 = OpTypeFloat 32
+         %10 = OpConstant %6 4
+         %11 = OpTypeArray %9 %10
+         %12 = OpTypeStruct %11
+         %13 = OpTypePointer Uniform %12
+         %14 = OpVariable %13 Uniform
+         %15 = OpTypeInt 32 1
+         %16 = OpConstant %15 0
+         %17 = OpConstant %15 1
+         %18 = OpTypePointer Uniform %9
+         %21 = OpTypeVector %9 4
+         %24 = OpTypePointer Function %21
+         %28 = OpTypePointer Function %9
+         %32 = OpTypeBool
+         %33 = OpTypeArray %15 %10
+         %34 = OpTypeStruct %33
+         %35 = OpTypePointer Uniform %34
+         %36 = OpVariable %35 Uniform
+         %37 = OpTypePointer Uniform %15
+         %42 = OpConstant %15 2
+         %45 = OpConstant %15 3
+        %103 = OpTypePointer Output %21
+        %104 = OpVariable %103 Output
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+          %8 = OpVariable %7 Function
+         %25 = OpVariable %24 Function
+         %29 = OpVariable %28 Function
+         %19 = OpAccessChain %18 %14 %16 %17
+         %20 = OpLoad %9 %19
+         %22 = OpCompositeConstruct %21 %20 %20 %20 %20
+         %23 = OpExtInst %6 %1 PackSnorm4x8 %22
+               OpStore %8 %23
+         %26 = OpLoad %6 %8
+         %27 = OpExtInst %21 %1 UnpackUnorm4x8 %26
+               OpStore %25 %27
+         %30 = OpAccessChain %18 %14 %16 %16
+         %31 = OpLoad %9 %30
+               OpStore %29 %31
+         %38 = OpAccessChain %37 %36 %16 %17
+         %39 = OpLoad %15 %38
+         %40 = OpAccessChain %28 %25 %39
+         %41 = OpLoad %9 %40
+         %43 = OpAccessChain %18 %14 %16 %42
+         %44 = OpLoad %9 %43
+         %46 = OpAccessChain %18 %14 %16 %45
+         %47 = OpLoad %9 %46
+         %48 = OpFDiv %9 %44 %47
+         %49 = OpFSub %9 %41 %48
+         %50 = OpExtInst %9 %1 FAbs %49
+         %51 = OpLoad %9 %29
+         %52 = OpFOrdLessThan %32 %50 %51
+               OpSelectionMerge %54 None
+               OpBranchConditional %52 %53 %54
+         %53 = OpLabel
+         %55 = OpAccessChain %37 %36 %16 %16
+         %56 = OpLoad %15 %55
+         %57 = OpAccessChain %28 %25 %56
+         %58 = OpLoad %9 %57
+         %59 = OpAccessChain %18 %14 %16 %42
+         %60 = OpLoad %9 %59
+         %61 = OpAccessChain %18 %14 %16 %45
+         %62 = OpLoad %9 %61
+         %63 = OpFDiv %9 %60 %62
+         %64 = OpFSub %9 %58 %63
+         %65 = OpExtInst %9 %1 FAbs %64
+         %66 = OpLoad %9 %29
+         %67 = OpFOrdLessThan %32 %65 %66
+               OpBranch %54
+         %54 = OpLabel
+         %68 = OpPhi %32 %52 %5 %67 %53
+               OpSelectionMerge %70 None
+               OpBranchConditional %68 %69 %70
+         %69 = OpLabel
+         %71 = OpAccessChain %37 %36 %16 %45
+         %72 = OpLoad %15 %71
+         %73 = OpAccessChain %28 %25 %72
+         %74 = OpLoad %9 %73
+         %75 = OpAccessChain %18 %14 %16 %42
+         %76 = OpLoad %9 %75
+         %77 = OpAccessChain %18 %14 %16 %45
+         %78 = OpLoad %9 %77
+         %79 = OpFDiv %9 %76 %78
+         %80 = OpFSub %9 %74 %79
+         %81 = OpExtInst %9 %1 FAbs %80
+         %82 = OpLoad %9 %29
+         %83 = OpFOrdLessThan %32 %81 %82
+               OpBranch %70
+         %70 = OpLabel
+         %84 = OpPhi %32 %68 %54 %83 %69
+               OpSelectionMerge %86 None
+               OpBranchConditional %84 %85 %86
+         %85 = OpLabel
+         %87 = OpAccessChain %37 %36 %16 %42
+         %88 = OpLoad %15 %87
+         %89 = OpAccessChain %28 %25 %88
+         %90 = OpLoad %9 %89
+         %91 = OpAccessChain %18 %14 %16 %42
+         %92 = OpLoad %9 %91
+         %93 = OpAccessChain %18 %14 %16 %45
+         %94 = OpLoad %9 %93
+         %95 = OpFDiv %9 %92 %94
+         %96 = OpFSub %9 %90 %95
+         %97 = OpExtInst %9 %1 FAbs %96
+         %98 = OpLoad %9 %29
+         %99 = OpFOrdLessThan %32 %97 %98
+               OpBranch %86
+         %86 = OpLabel
+        %100 = OpPhi %32 %84 %70 %99 %85
+               OpSelectionMerge %102 None
+               OpBranchConditional %100 %101 %118
+        %101 = OpLabel
+        %105 = OpAccessChain %37 %36 %16 %16
+        %106 = OpLoad %15 %105
+        %107 = OpConvertSToF %9 %106
+        %108 = OpAccessChain %37 %36 %16 %17
+        %109 = OpLoad %15 %108
+        %110 = OpConvertSToF %9 %109
+        %111 = OpAccessChain %37 %36 %16 %17
+        %112 = OpLoad %15 %111
+        %113 = OpConvertSToF %9 %112
+        %114 = OpAccessChain %37 %36 %16 %16
+        %115 = OpLoad %15 %114
+        %116 = OpConvertSToF %9 %115
+        %117 = OpCompositeConstruct %21 %107 %110 %113 %116
+               OpStore %104 %117
+               OpBranch %102
+        %118 = OpLabel
+        %119 = OpAccessChain %37 %36 %16 %17
+        %120 = OpLoad %15 %119
+        %121 = OpConvertSToF %9 %120
+        %122 = OpCompositeConstruct %21 %121 %121 %121 %121
+               OpStore %104 %122
+               OpBranch %102
+        %102 = OpLabel
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# _GLF_uniform_float_values
+BUFFER variant__GLF_uniform_float_values DATA_TYPE float[] STD140 DATA
+ 0.01 1.0 127.0 255.0
+END
+# _GLF_uniform_int_values
+BUFFER variant__GLF_uniform_int_values DATA_TYPE int32[] STD140 DATA
+ 1 0 3 2
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 16 16
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant__GLF_uniform_float_values AS uniform DESCRIPTOR_SET 0 BINDING 1
+  BIND BUFFER variant__GLF_uniform_int_values AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 16 16
+
+EXPECT variant_framebuffer IDX 0 0 SIZE 16 16 EQ_RGBA 255 0 0 255
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-inst-combine-simplify-demanded-switch-or-xor.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-inst-combine-simplify-demanded-switch-or-xor.amber
new file mode 100644
index 0000000..9c9186a
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-inst-combine-simplify-demanded-switch-or-xor.amber
@@ -0,0 +1,178 @@
+#!amber
+
+# Copyright 2020 Google LLC
+#
+# 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.
+
+
+# A test for a coverage-gap found by the GraphicsFuzz project.
+
+# Short description: A fragment shader that covers a specific inst combine simplify demanded path
+
+# The test passes because the shader always writes red.
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+# variant_fragment_shader is derived from the following GLSL:
+# #version 310 es
+# #define _int_0 _GLF_uniform_int_values[0]
+# #define _int_1 _GLF_uniform_int_values[1]
+# #define _float_0_0 _GLF_uniform_float_values[0]
+# #define _float_1_0 _GLF_uniform_float_values[1]
+#
+# precision highp int;
+#
+# precision highp float;
+#
+# // Contents of _GLF_uniform_float_values: [0.0, 1.0]
+# layout(set = 0, binding = 0) uniform buf0
+# {
+#     float _GLF_uniform_float_values[2];
+# };
+#
+# // Contents of _GLF_uniform_int_values: [0, 1]
+# layout(set = 0, binding = 1) uniform buf1
+# {
+#     int _GLF_uniform_int_values[2];
+# };
+#
+# layout(location = 0) out vec4 _GLF_color;
+#
+# void main()
+# {
+#     vec4 color = vec4(_float_0_0, _float_0_0, _float_0_0, _float_1_0);
+#     switch ((1 | _int_1) ^ 1)
+#     {
+#         case 0:
+#             color[_int_0] = _float_1_0;
+#             break;
+#     }
+#
+#     _GLF_color = color;
+# }
+SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 10
+; Bound: 51
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %49
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 310
+               OpName %4 "main"
+               OpName %9 "color"
+               OpName %13 "buf0"
+               OpMemberName %13 0 "_GLF_uniform_float_values"
+               OpName %15 ""
+               OpName %30 "buf1"
+               OpMemberName %30 0 "_GLF_uniform_int_values"
+               OpName %32 ""
+               OpName %49 "_GLF_color"
+               OpDecorate %12 ArrayStride 16
+               OpMemberDecorate %13 0 Offset 0
+               OpDecorate %13 Block
+               OpDecorate %15 DescriptorSet 0
+               OpDecorate %15 Binding 0
+               OpDecorate %29 ArrayStride 16
+               OpMemberDecorate %30 0 Offset 0
+               OpDecorate %30 Block
+               OpDecorate %32 DescriptorSet 0
+               OpDecorate %32 Binding 1
+               OpDecorate %49 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeFloat 32
+          %7 = OpTypeVector %6 4
+          %8 = OpTypePointer Function %7
+         %10 = OpTypeInt 32 0
+         %11 = OpConstant %10 2
+         %12 = OpTypeArray %6 %11
+         %13 = OpTypeStruct %12
+         %14 = OpTypePointer Uniform %13
+         %15 = OpVariable %14 Uniform
+         %16 = OpTypeInt 32 1
+         %17 = OpConstant %16 0
+         %18 = OpTypePointer Uniform %6
+         %25 = OpConstant %16 1
+         %29 = OpTypeArray %16 %11
+         %30 = OpTypeStruct %29
+         %31 = OpTypePointer Uniform %30
+         %32 = OpVariable %31 Uniform
+         %33 = OpTypePointer Uniform %16
+         %44 = OpTypePointer Function %6
+         %48 = OpTypePointer Output %7
+         %49 = OpVariable %48 Output
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+          %9 = OpVariable %8 Function
+         %19 = OpAccessChain %18 %15 %17 %17
+         %20 = OpLoad %6 %19
+         %21 = OpAccessChain %18 %15 %17 %17
+         %22 = OpLoad %6 %21
+         %23 = OpAccessChain %18 %15 %17 %17
+         %24 = OpLoad %6 %23
+         %26 = OpAccessChain %18 %15 %17 %25
+         %27 = OpLoad %6 %26
+         %28 = OpCompositeConstruct %7 %20 %22 %24 %27
+               OpStore %9 %28
+         %34 = OpAccessChain %33 %32 %17 %25
+         %35 = OpLoad %16 %34
+         %36 = OpBitwiseOr %16 %25 %35
+         %37 = OpBitwiseXor %16 %36 %25
+               OpSelectionMerge %39 None
+               OpSwitch %37 %39 0 %38
+         %38 = OpLabel
+         %40 = OpAccessChain %33 %32 %17 %17
+         %41 = OpLoad %16 %40
+         %42 = OpAccessChain %18 %15 %17 %25
+         %43 = OpLoad %6 %42
+         %45 = OpAccessChain %44 %9 %41
+               OpStore %45 %43
+               OpBranch %39
+         %39 = OpLabel
+         %50 = OpLoad %7 %9
+               OpStore %49 %50
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# _GLF_uniform_int_values
+BUFFER variant__GLF_uniform_int_values DATA_TYPE int32[] STD140 DATA
+ 0 1
+END
+# _GLF_uniform_float_values
+BUFFER variant__GLF_uniform_float_values DATA_TYPE float[] STD140 DATA
+ 0.0 1.0
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 16 16
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant__GLF_uniform_int_values AS uniform DESCRIPTOR_SET 0 BINDING 1
+  BIND BUFFER variant__GLF_uniform_float_values AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 16 16
+
+EXPECT variant_framebuffer IDX 0 0 SIZE 16 16 EQ_RGBA 255 0 0 255
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-inst-combine-vector-ops-asin.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-inst-combine-vector-ops-asin.amber
new file mode 100644
index 0000000..e588df6
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-inst-combine-vector-ops-asin.amber
@@ -0,0 +1,253 @@
+#!amber
+
+# Copyright 2020 Google LLC
+#
+# 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.
+
+
+# A test for a coverage-gap found by the GraphicsFuzz project.
+
+# Short description: A fragment shader that covers specific inst combine vector ops code paths
+
+# The test passes because the shader always writes red.
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+# variant_fragment_shader is derived from the following GLSL:
+# #version 310 es
+# #define _int_10 _GLF_uniform_int_values[0]
+# #define _int_0 _GLF_uniform_int_values[1]
+# #define _int_1 _GLF_uniform_int_values[2]
+# #define _float_0_25 _GLF_uniform_float_values[0]
+# #define _float_1_0 _GLF_uniform_float_values[1]
+# #define _float_0_281 _GLF_uniform_float_values[2]
+# #define _float_0_282 _GLF_uniform_float_values[3]
+#
+# precision highp float;
+#
+# precision highp int;
+#
+# // Contents of _GLF_uniform_float_values: [0.25, 1.0, 0.281, 0.282]
+# layout(set = 0, binding = 0) uniform buf0
+# {
+#     float _GLF_uniform_float_values[4];
+# };
+#
+# // Contents of _GLF_uniform_int_values: [10, 0, 1]
+# layout(set = 0, binding = 1) uniform buf1
+# {
+#     int _GLF_uniform_int_values[3];
+# };
+#
+# layout(location = 0) out vec4 _GLF_color;
+#
+# void main()
+# {
+#     float a = _float_0_25;
+#     float b;
+#     float c;
+#     for (int i = _int_0; i < _int_10; i++)
+#     {
+#         b = a;
+#         c = b;
+#         float d = asin(c);
+#         c = _float_1_0;
+#         a = d;
+#     }
+#
+#     if ((_float_0_281 < a) && (a < _float_0_282))
+#     {
+#         _GLF_color = vec4(_int_1, _int_0, _int_0, _int_1);
+#     }
+#     else
+#     {
+#         _GLF_color = vec4(_int_0);
+#     }
+# }
+SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 8
+; Bound: 89
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %70
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 310
+               OpName %4 "main"
+               OpName %8 "a"
+               OpName %12 "buf0"
+               OpMemberName %12 0 "_GLF_uniform_float_values"
+               OpName %14 ""
+               OpName %21 "i"
+               OpName %24 "buf1"
+               OpMemberName %24 0 "_GLF_uniform_int_values"
+               OpName %26 ""
+               OpName %41 "b"
+               OpName %43 "c"
+               OpName %45 "d"
+               OpName %70 "_GLF_color"
+               OpDecorate %11 ArrayStride 16
+               OpMemberDecorate %12 0 Offset 0
+               OpDecorate %12 Block
+               OpDecorate %14 DescriptorSet 0
+               OpDecorate %14 Binding 0
+               OpDecorate %23 ArrayStride 16
+               OpMemberDecorate %24 0 Offset 0
+               OpDecorate %24 Block
+               OpDecorate %26 DescriptorSet 0
+               OpDecorate %26 Binding 1
+               OpDecorate %70 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeFloat 32
+          %7 = OpTypePointer Function %6
+          %9 = OpTypeInt 32 0
+         %10 = OpConstant %9 4
+         %11 = OpTypeArray %6 %10
+         %12 = OpTypeStruct %11
+         %13 = OpTypePointer Uniform %12
+         %14 = OpVariable %13 Uniform
+         %15 = OpTypeInt 32 1
+         %16 = OpConstant %15 0
+         %17 = OpTypePointer Uniform %6
+         %20 = OpTypePointer Function %15
+         %22 = OpConstant %9 3
+         %23 = OpTypeArray %15 %22
+         %24 = OpTypeStruct %23
+         %25 = OpTypePointer Uniform %24
+         %26 = OpVariable %25 Uniform
+         %27 = OpConstant %15 1
+         %28 = OpTypePointer Uniform %15
+         %39 = OpTypeBool
+         %53 = OpConstant %15 2
+         %61 = OpConstant %15 3
+         %68 = OpTypeVector %6 4
+         %69 = OpTypePointer Output %68
+         %70 = OpVariable %69 Output
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+          %8 = OpVariable %7 Function
+         %21 = OpVariable %20 Function
+         %41 = OpVariable %7 Function
+         %43 = OpVariable %7 Function
+         %45 = OpVariable %7 Function
+         %18 = OpAccessChain %17 %14 %16 %16
+         %19 = OpLoad %6 %18
+               OpStore %8 %19
+         %29 = OpAccessChain %28 %26 %16 %27
+         %30 = OpLoad %15 %29
+               OpStore %21 %30
+               OpBranch %31
+         %31 = OpLabel
+               OpLoopMerge %33 %34 None
+               OpBranch %35
+         %35 = OpLabel
+         %36 = OpLoad %15 %21
+         %37 = OpAccessChain %28 %26 %16 %16
+         %38 = OpLoad %15 %37
+         %40 = OpSLessThan %39 %36 %38
+               OpBranchConditional %40 %32 %33
+         %32 = OpLabel
+         %42 = OpLoad %6 %8
+               OpStore %41 %42
+         %44 = OpLoad %6 %41
+               OpStore %43 %44
+         %46 = OpLoad %6 %43
+         %47 = OpExtInst %6 %1 Asin %46
+               OpStore %45 %47
+         %48 = OpAccessChain %17 %14 %16 %27
+         %49 = OpLoad %6 %48
+               OpStore %43 %49
+         %50 = OpLoad %6 %45
+               OpStore %8 %50
+               OpBranch %34
+         %34 = OpLabel
+         %51 = OpLoad %15 %21
+         %52 = OpIAdd %15 %51 %27
+               OpStore %21 %52
+               OpBranch %31
+         %33 = OpLabel
+         %54 = OpAccessChain %17 %14 %16 %53
+         %55 = OpLoad %6 %54
+         %56 = OpLoad %6 %8
+         %57 = OpFOrdLessThan %39 %55 %56
+               OpSelectionMerge %59 None
+               OpBranchConditional %57 %58 %59
+         %58 = OpLabel
+         %60 = OpLoad %6 %8
+         %62 = OpAccessChain %17 %14 %16 %61
+         %63 = OpLoad %6 %62
+         %64 = OpFOrdLessThan %39 %60 %63
+               OpBranch %59
+         %59 = OpLabel
+         %65 = OpPhi %39 %57 %33 %64 %58
+               OpSelectionMerge %67 None
+               OpBranchConditional %65 %66 %84
+         %66 = OpLabel
+         %71 = OpAccessChain %28 %26 %16 %53
+         %72 = OpLoad %15 %71
+         %73 = OpConvertSToF %6 %72
+         %74 = OpAccessChain %28 %26 %16 %27
+         %75 = OpLoad %15 %74
+         %76 = OpConvertSToF %6 %75
+         %77 = OpAccessChain %28 %26 %16 %27
+         %78 = OpLoad %15 %77
+         %79 = OpConvertSToF %6 %78
+         %80 = OpAccessChain %28 %26 %16 %53
+         %81 = OpLoad %15 %80
+         %82 = OpConvertSToF %6 %81
+         %83 = OpCompositeConstruct %68 %73 %76 %79 %82
+               OpStore %70 %83
+               OpBranch %67
+         %84 = OpLabel
+         %85 = OpAccessChain %28 %26 %16 %27
+         %86 = OpLoad %15 %85
+         %87 = OpConvertSToF %6 %86
+         %88 = OpCompositeConstruct %68 %87 %87 %87 %87
+               OpStore %70 %88
+               OpBranch %67
+         %67 = OpLabel
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# _GLF_uniform_int_values
+BUFFER variant__GLF_uniform_int_values DATA_TYPE int32[] STD140 DATA
+ 10 0 1
+END
+# _GLF_uniform_float_values
+BUFFER variant__GLF_uniform_float_values DATA_TYPE float[] STD140 DATA
+ 0.25 1.0 0.281 0.282
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 16 16
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant__GLF_uniform_int_values AS uniform DESCRIPTOR_SET 0 BINDING 1
+  BIND BUFFER variant__GLF_uniform_float_values AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 16 16
+
+EXPECT variant_framebuffer IDX 0 0 SIZE 16 16 EQ_RGBA 255 0 0 255
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-instr-info-det-mat-min.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-instr-info-det-mat-min.amber
new file mode 100644
index 0000000..a45527b
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-instr-info-det-mat-min.amber
@@ -0,0 +1,338 @@
+#!amber
+
+# Copyright 2020 Google LLC
+#
+# 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.
+
+
+# A test for a coverage-gap found by the GraphicsFuzz project.
+
+# Short description: A fragment shader that covers a specific instr info code path
+
+# The test passes because the shader always writes red.
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+# variant_fragment_shader is derived from the following GLSL:
+# #version 310 es
+# #define _int_0 _GLF_uniform_int_values[0]
+# #define _int_1 _GLF_uniform_int_values[1]
+# #define _int_10 _GLF_uniform_int_values[2]
+# #define _float_0_0 _GLF_uniform_float_values[0]
+# #define _float_1_0 _GLF_uniform_float_values[1]
+#
+# precision highp float;
+#
+# precision highp int;
+#
+# layout(location = 0) out vec4 _GLF_color;
+#
+# // Contents of _GLF_uniform_int_values: [0, 1]
+# layout(set = 0, binding = 0) uniform buf0
+# {
+#     int _GLF_uniform_int_values[3];
+# };
+#
+# // Contents of _GLF_uniform_float_values: [0.0, 1.0]
+# layout(set = 0, binding = 1) uniform buf1
+# {
+#     float _GLF_uniform_float_values[2];
+# };
+#
+# int data[10];
+#
+# void f1()
+# {
+#     _GLF_color = vec4(0);
+#
+#     for (int i = _int_1; i < _int_10; i++)
+#     {
+#         data[i] = _int_0;
+#     }
+#
+#     float a = determinant(mat2(1.0, 1.0, 1.0, 1.0));
+#     float b = determinant(mat2(0.0, 0.0, 0.0, 0.0));
+#
+#     mat2x4 m24a = mat2x4(a, _float_1_0, _float_1_0, _float_1_0, _float_1_0,
+#                          _float_1_0, _float_1_0, _float_1_0);
+#     mat2x4 m24b = mat2x4(b, _float_1_0, _float_1_0, _float_1_0, _float_1_0,
+#                          _float_1_0, _float_1_0, _float_1_0);
+#
+#     float c = min(float(m24a), float(m24b));
+#
+#     if (c < _float_1_0 && a == 0.0 && b == 0.0)
+#     {
+#         data[0] = _int_1;
+#     }
+# }
+#
+# void main()
+# {
+#     for (int i = 0; i <= 10; i++)
+#     {
+#         f1();
+#     }
+#
+#     _GLF_color = vec4(data[0], _float_0_0, _float_0_0, data[0]);
+# }
+SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 8
+; Bound: 152
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %11
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 310
+               OpName %4 "main"
+               OpName %6 "f1("
+               OpName %11 "_GLF_color"
+               OpName %16 "i"
+               OpName %20 "buf0"
+               OpMemberName %20 0 "_GLF_uniform_int_values"
+               OpName %22 ""
+               OpName %42 "data"
+               OpName %51 "a"
+               OpName %58 "b"
+               OpName %64 "m24a"
+               OpName %68 "buf1"
+               OpMemberName %68 0 "_GLF_uniform_float_values"
+               OpName %70 ""
+               OpName %89 "m24b"
+               OpName %108 "c"
+               OpName %129 "i"
+               OpDecorate %11 Location 0
+               OpDecorate %19 ArrayStride 16
+               OpMemberDecorate %20 0 Offset 0
+               OpDecorate %20 Block
+               OpDecorate %22 DescriptorSet 0
+               OpDecorate %22 Binding 0
+               OpDecorate %67 ArrayStride 16
+               OpMemberDecorate %68 0 Offset 0
+               OpDecorate %68 Block
+               OpDecorate %70 DescriptorSet 0
+               OpDecorate %70 Binding 1
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %8 = OpTypeFloat 32
+          %9 = OpTypeVector %8 4
+         %10 = OpTypePointer Output %9
+         %11 = OpVariable %10 Output
+         %12 = OpConstant %8 0
+         %13 = OpConstantComposite %9 %12 %12 %12 %12
+         %14 = OpTypeInt 32 1
+         %15 = OpTypePointer Function %14
+         %17 = OpTypeInt 32 0
+         %18 = OpConstant %17 3
+         %19 = OpTypeArray %14 %18
+         %20 = OpTypeStruct %19
+         %21 = OpTypePointer Uniform %20
+         %22 = OpVariable %21 Uniform
+         %23 = OpConstant %14 0
+         %24 = OpConstant %14 1
+         %25 = OpTypePointer Uniform %14
+         %34 = OpConstant %14 2
+         %37 = OpTypeBool
+         %39 = OpConstant %17 10
+         %40 = OpTypeArray %14 %39
+         %41 = OpTypePointer Private %40
+         %42 = OpVariable %41 Private
+         %46 = OpTypePointer Private %14
+         %50 = OpTypePointer Function %8
+         %52 = OpTypeVector %8 2
+         %53 = OpTypeMatrix %52 2
+         %54 = OpConstant %8 1
+         %55 = OpConstantComposite %52 %54 %54
+         %56 = OpConstantComposite %53 %55 %55
+         %59 = OpConstantComposite %52 %12 %12
+         %60 = OpConstantComposite %53 %59 %59
+         %62 = OpTypeMatrix %9 2
+         %63 = OpTypePointer Function %62
+         %66 = OpConstant %17 2
+         %67 = OpTypeArray %8 %66
+         %68 = OpTypeStruct %67
+         %69 = OpTypePointer Uniform %68
+         %70 = OpVariable %69 Uniform
+         %71 = OpTypePointer Uniform %8
+        %136 = OpConstant %14 10
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+        %129 = OpVariable %15 Function
+               OpStore %129 %23
+               OpBranch %130
+        %130 = OpLabel
+               OpLoopMerge %132 %133 None
+               OpBranch %134
+        %134 = OpLabel
+        %135 = OpLoad %14 %129
+        %137 = OpSLessThanEqual %37 %135 %136
+               OpBranchConditional %137 %131 %132
+        %131 = OpLabel
+        %138 = OpFunctionCall %2 %6
+               OpBranch %133
+        %133 = OpLabel
+        %139 = OpLoad %14 %129
+        %140 = OpIAdd %14 %139 %24
+               OpStore %129 %140
+               OpBranch %130
+        %132 = OpLabel
+        %141 = OpAccessChain %46 %42 %23
+        %142 = OpLoad %14 %141
+        %143 = OpConvertSToF %8 %142
+        %144 = OpAccessChain %71 %70 %23 %23
+        %145 = OpLoad %8 %144
+        %146 = OpAccessChain %71 %70 %23 %23
+        %147 = OpLoad %8 %146
+        %148 = OpAccessChain %46 %42 %23
+        %149 = OpLoad %14 %148
+        %150 = OpConvertSToF %8 %149
+        %151 = OpCompositeConstruct %9 %143 %145 %147 %150
+               OpStore %11 %151
+               OpReturn
+               OpFunctionEnd
+          %6 = OpFunction %2 None %3
+          %7 = OpLabel
+         %16 = OpVariable %15 Function
+         %51 = OpVariable %50 Function
+         %58 = OpVariable %50 Function
+         %64 = OpVariable %63 Function
+         %89 = OpVariable %63 Function
+        %108 = OpVariable %50 Function
+               OpStore %11 %13
+         %26 = OpAccessChain %25 %22 %23 %24
+         %27 = OpLoad %14 %26
+               OpStore %16 %27
+               OpBranch %28
+         %28 = OpLabel
+               OpLoopMerge %30 %31 None
+               OpBranch %32
+         %32 = OpLabel
+         %33 = OpLoad %14 %16
+         %35 = OpAccessChain %25 %22 %23 %34
+         %36 = OpLoad %14 %35
+         %38 = OpSLessThan %37 %33 %36
+               OpBranchConditional %38 %29 %30
+         %29 = OpLabel
+         %43 = OpLoad %14 %16
+         %44 = OpAccessChain %25 %22 %23 %23
+         %45 = OpLoad %14 %44
+         %47 = OpAccessChain %46 %42 %43
+               OpStore %47 %45
+               OpBranch %31
+         %31 = OpLabel
+         %48 = OpLoad %14 %16
+         %49 = OpIAdd %14 %48 %24
+               OpStore %16 %49
+               OpBranch %28
+         %30 = OpLabel
+         %57 = OpExtInst %8 %1 Determinant %56
+               OpStore %51 %57
+         %61 = OpExtInst %8 %1 Determinant %60
+               OpStore %58 %61
+         %65 = OpLoad %8 %51
+         %72 = OpAccessChain %71 %70 %23 %24
+         %73 = OpLoad %8 %72
+         %74 = OpAccessChain %71 %70 %23 %24
+         %75 = OpLoad %8 %74
+         %76 = OpAccessChain %71 %70 %23 %24
+         %77 = OpLoad %8 %76
+         %78 = OpAccessChain %71 %70 %23 %24
+         %79 = OpLoad %8 %78
+         %80 = OpAccessChain %71 %70 %23 %24
+         %81 = OpLoad %8 %80
+         %82 = OpAccessChain %71 %70 %23 %24
+         %83 = OpLoad %8 %82
+         %84 = OpAccessChain %71 %70 %23 %24
+         %85 = OpLoad %8 %84
+         %86 = OpCompositeConstruct %9 %65 %73 %75 %77
+         %87 = OpCompositeConstruct %9 %79 %81 %83 %85
+         %88 = OpCompositeConstruct %62 %86 %87
+               OpStore %64 %88
+         %90 = OpLoad %8 %58
+         %91 = OpAccessChain %71 %70 %23 %24
+         %92 = OpLoad %8 %91
+         %93 = OpAccessChain %71 %70 %23 %24
+         %94 = OpLoad %8 %93
+         %95 = OpAccessChain %71 %70 %23 %24
+         %96 = OpLoad %8 %95
+         %97 = OpAccessChain %71 %70 %23 %24
+         %98 = OpLoad %8 %97
+         %99 = OpAccessChain %71 %70 %23 %24
+        %100 = OpLoad %8 %99
+        %101 = OpAccessChain %71 %70 %23 %24
+        %102 = OpLoad %8 %101
+        %103 = OpAccessChain %71 %70 %23 %24
+        %104 = OpLoad %8 %103
+        %105 = OpCompositeConstruct %9 %90 %92 %94 %96
+        %106 = OpCompositeConstruct %9 %98 %100 %102 %104
+        %107 = OpCompositeConstruct %62 %105 %106
+               OpStore %89 %107
+        %109 = OpLoad %62 %64
+        %110 = OpCompositeExtract %8 %109 0 0
+        %111 = OpLoad %62 %89
+        %112 = OpCompositeExtract %8 %111 0 0
+        %113 = OpExtInst %8 %1 FMin %110 %112
+               OpStore %108 %113
+        %114 = OpLoad %8 %108
+        %115 = OpAccessChain %71 %70 %23 %24
+        %116 = OpLoad %8 %115
+        %117 = OpFOrdLessThan %37 %114 %116
+        %118 = OpLoad %8 %51
+        %119 = OpFOrdEqual %37 %118 %12
+        %120 = OpLogicalAnd %37 %117 %119
+        %121 = OpLoad %8 %58
+        %122 = OpFOrdEqual %37 %121 %12
+        %123 = OpLogicalAnd %37 %120 %122
+               OpSelectionMerge %125 None
+               OpBranchConditional %123 %124 %125
+        %124 = OpLabel
+        %126 = OpAccessChain %25 %22 %23 %24
+        %127 = OpLoad %14 %126
+        %128 = OpAccessChain %46 %42 %23
+               OpStore %128 %127
+               OpBranch %125
+        %125 = OpLabel
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# _GLF_uniform_int_values
+BUFFER variant__GLF_uniform_int_values DATA_TYPE int32[] STD140 DATA
+ 0 1 10
+END
+# _GLF_uniform_float_values
+BUFFER variant__GLF_uniform_float_values DATA_TYPE float[] STD140 DATA
+ 0.0 1.0
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 256 256
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant__GLF_uniform_int_values AS uniform DESCRIPTOR_SET 0 BINDING 0
+  BIND BUFFER variant__GLF_uniform_float_values AS uniform DESCRIPTOR_SET 0 BINDING 1
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256
+
+EXPECT variant_framebuffer IDX 0 0 SIZE 256 256 EQ_RGBA 255 0 0 255
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-instructions-for-if-less-than-equal.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-instructions-for-if-less-than-equal.amber
new file mode 100644
index 0000000..9fcdc0e
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-instructions-for-if-less-than-equal.amber
@@ -0,0 +1,199 @@
+#!amber
+
+# Copyright 2020 Google LLC
+#
+# 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.
+
+
+# A test for a coverage-gap found by the GraphicsFuzz project.
+
+# Short description: Covers specific instruction simplify and combine compare code paths
+
+# The test passes because the shader always writes red.
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+# variant_fragment_shader is derived from the following GLSL:
+# #version 310 es
+# #define _int_0 _GLF_uniform_int_values[0]
+# #define _int_10 _GLF_uniform_int_values[1]
+# #define _float_1_0 _GLF_uniform_float_values[0]
+# #define _float_0_25 _GLF_uniform_float_values[1]
+#
+# precision highp float;
+# precision highp int;
+#
+# // Contents of _GLF_uniform_float_values: [1.0, 0.25]
+# layout(set = 0, binding = 0) uniform buf0
+# {
+#     float _GLF_uniform_float_values[2];
+# };
+#
+# // Contents of _GLF_uniform_int_values: [0, 10]
+# layout(set = 0, binding = 1) uniform buf1
+# {
+#     int _GLF_uniform_int_values[2];
+# };
+#
+# layout(location = 0) out vec4 _GLF_color;
+#
+# void main()
+# {
+#     _GLF_color = vec4(_int_0);
+#     for (int i = _int_0; i < _int_10; i++)
+#     {
+#         // True when i = 0.
+#         if (!(_float_0_25 <= float(i)))
+#         {
+#             _GLF_color += vec4(_float_1_0, i, i, _float_1_0);
+#         }
+#     }
+# }
+SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 8
+; Bound: 64
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %9
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 310
+               OpName %4 "main"
+               OpName %9 "_GLF_color"
+               OpName %14 "buf1"
+               OpMemberName %14 0 "_GLF_uniform_int_values"
+               OpName %16 ""
+               OpName %24 "i"
+               OpName %39 "buf0"
+               OpMemberName %39 0 "_GLF_uniform_float_values"
+               OpName %41 ""
+               OpDecorate %9 Location 0
+               OpDecorate %13 ArrayStride 16
+               OpMemberDecorate %14 0 Offset 0
+               OpDecorate %14 Block
+               OpDecorate %16 DescriptorSet 0
+               OpDecorate %16 Binding 1
+               OpDecorate %38 ArrayStride 16
+               OpMemberDecorate %39 0 Offset 0
+               OpDecorate %39 Block
+               OpDecorate %41 DescriptorSet 0
+               OpDecorate %41 Binding 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeFloat 32
+          %7 = OpTypeVector %6 4
+          %8 = OpTypePointer Output %7
+          %9 = OpVariable %8 Output
+         %10 = OpTypeInt 32 1
+         %11 = OpTypeInt 32 0
+         %12 = OpConstant %11 2
+         %13 = OpTypeArray %10 %12
+         %14 = OpTypeStruct %13
+         %15 = OpTypePointer Uniform %14
+         %16 = OpVariable %15 Uniform
+         %17 = OpConstant %10 0
+         %18 = OpTypePointer Uniform %10
+         %23 = OpTypePointer Function %10
+         %33 = OpConstant %10 1
+         %36 = OpTypeBool
+         %38 = OpTypeArray %6 %12
+         %39 = OpTypeStruct %38
+         %40 = OpTypePointer Uniform %39
+         %41 = OpVariable %40 Uniform
+         %42 = OpTypePointer Uniform %6
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+         %24 = OpVariable %23 Function
+         %19 = OpAccessChain %18 %16 %17 %17
+         %20 = OpLoad %10 %19
+         %21 = OpConvertSToF %6 %20
+         %22 = OpCompositeConstruct %7 %21 %21 %21 %21
+               OpStore %9 %22
+         %25 = OpAccessChain %18 %16 %17 %17
+         %26 = OpLoad %10 %25
+               OpStore %24 %26
+               OpBranch %27
+         %27 = OpLabel
+               OpLoopMerge %29 %30 None
+               OpBranch %31
+         %31 = OpLabel
+         %32 = OpLoad %10 %24
+         %34 = OpAccessChain %18 %16 %17 %33
+         %35 = OpLoad %10 %34
+         %37 = OpSLessThan %36 %32 %35
+               OpBranchConditional %37 %28 %29
+         %28 = OpLabel
+         %43 = OpAccessChain %42 %41 %17 %33
+         %44 = OpLoad %6 %43
+         %45 = OpLoad %10 %24
+         %46 = OpConvertSToF %6 %45
+         %47 = OpFOrdLessThanEqual %36 %44 %46
+         %48 = OpLogicalNot %36 %47
+               OpSelectionMerge %50 None
+               OpBranchConditional %48 %49 %50
+         %49 = OpLabel
+         %51 = OpAccessChain %42 %41 %17 %17
+         %52 = OpLoad %6 %51
+         %53 = OpLoad %10 %24
+         %54 = OpConvertSToF %6 %53
+         %55 = OpLoad %10 %24
+         %56 = OpConvertSToF %6 %55
+         %57 = OpAccessChain %42 %41 %17 %17
+         %58 = OpLoad %6 %57
+         %59 = OpCompositeConstruct %7 %52 %54 %56 %58
+         %60 = OpLoad %7 %9
+         %61 = OpFAdd %7 %60 %59
+               OpStore %9 %61
+               OpBranch %50
+         %50 = OpLabel
+               OpBranch %30
+         %30 = OpLabel
+         %62 = OpLoad %10 %24
+         %63 = OpIAdd %10 %62 %33
+               OpStore %24 %63
+               OpBranch %27
+         %29 = OpLabel
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# _GLF_uniform_int_values
+BUFFER variant__GLF_uniform_int_values DATA_TYPE int32[] STD140 DATA
+ 0 10
+END
+# _GLF_uniform_float_values
+BUFFER variant__GLF_uniform_float_values DATA_TYPE float[] STD140 DATA
+ 1.0 0.25
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 256 256
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant__GLF_uniform_int_values AS uniform DESCRIPTOR_SET 0 BINDING 1
+  BIND BUFFER variant__GLF_uniform_float_values AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256
+
+EXPECT variant_framebuffer IDX 0 0 SIZE 256 256 EQ_RGBA 255 0 0 255
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-integer-modulo-negative.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-integer-modulo-negative.amber
new file mode 100644
index 0000000..2eb8e1a
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-integer-modulo-negative.amber
@@ -0,0 +1,204 @@
+#!amber
+
+# Copyright 2020 Google LLC
+#
+# 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.
+
+
+# A test for a coverage-gap found by the GraphicsFuzz project.
+
+# Short description: A fragment shader that covers specific instruction combining code paths
+
+# The test passes because the shader always writes red.
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+# variant_fragment_shader is derived from the following GLSL:
+# #version 310 es
+# #define _int_10 _GLF_uniform_int_values[0]
+# #define _int_0 _GLF_uniform_int_values[1]
+# #define _int_1 _GLF_uniform_int_values[2]
+#
+# precision highp float;
+#
+# precision highp int;
+#
+# // Contents of _GLF_uniform_int_values: [10, 0, 1]
+# layout(set = 0, binding = 0) uniform buf0
+# {
+#     int _GLF_uniform_int_values[3];
+# };
+# layout(location = 0) out vec4 _GLF_color;
+#
+# void main()
+# {
+#     int count = _int_0;
+#     for (int i = _int_0; i < _int_10; i++)
+#     {
+#         // Always false.
+#         if (count % -93448 > _int_0)
+#         {
+#             count++;
+#         }
+#     }
+#     if (count == _int_0)
+#     {
+#         _GLF_color = vec4(_int_1, _int_0, _int_0, _int_1);
+#     }
+#     else
+#     {
+#         _GLF_color = vec4(_int_0);
+#     }
+# }
+SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 8
+; Bound: 74
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %54
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 310
+               OpName %4 "main"
+               OpName %8 "count"
+               OpName %12 "buf0"
+               OpMemberName %12 0 "_GLF_uniform_int_values"
+               OpName %14 ""
+               OpName %20 "i"
+               OpName %54 "_GLF_color"
+               OpDecorate %11 ArrayStride 16
+               OpMemberDecorate %12 0 Offset 0
+               OpDecorate %12 Block
+               OpDecorate %14 DescriptorSet 0
+               OpDecorate %14 Binding 0
+               OpDecorate %54 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeInt 32 1
+          %7 = OpTypePointer Function %6
+          %9 = OpTypeInt 32 0
+         %10 = OpConstant %9 3
+         %11 = OpTypeArray %6 %10
+         %12 = OpTypeStruct %11
+         %13 = OpTypePointer Uniform %12
+         %14 = OpVariable %13 Uniform
+         %15 = OpConstant %6 0
+         %16 = OpConstant %6 1
+         %17 = OpTypePointer Uniform %6
+         %31 = OpTypeBool
+         %34 = OpConstant %6 -93448
+         %51 = OpTypeFloat 32
+         %52 = OpTypeVector %51 4
+         %53 = OpTypePointer Output %52
+         %54 = OpVariable %53 Output
+         %55 = OpConstant %6 2
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+          %8 = OpVariable %7 Function
+         %20 = OpVariable %7 Function
+         %18 = OpAccessChain %17 %14 %15 %16
+         %19 = OpLoad %6 %18
+               OpStore %8 %19
+         %21 = OpAccessChain %17 %14 %15 %16
+         %22 = OpLoad %6 %21
+               OpStore %20 %22
+               OpBranch %23
+         %23 = OpLabel
+               OpLoopMerge %25 %26 None
+               OpBranch %27
+         %27 = OpLabel
+         %28 = OpLoad %6 %20
+         %29 = OpAccessChain %17 %14 %15 %15
+         %30 = OpLoad %6 %29
+         %32 = OpSLessThan %31 %28 %30
+               OpBranchConditional %32 %24 %25
+         %24 = OpLabel
+         %33 = OpLoad %6 %8
+         %35 = OpSMod %6 %33 %34
+         %36 = OpAccessChain %17 %14 %15 %16
+         %37 = OpLoad %6 %36
+         %38 = OpSGreaterThan %31 %35 %37
+               OpSelectionMerge %40 None
+               OpBranchConditional %38 %39 %40
+         %39 = OpLabel
+         %41 = OpLoad %6 %8
+         %42 = OpIAdd %6 %41 %16
+               OpStore %8 %42
+               OpBranch %40
+         %40 = OpLabel
+               OpBranch %26
+         %26 = OpLabel
+         %43 = OpLoad %6 %20
+         %44 = OpIAdd %6 %43 %16
+               OpStore %20 %44
+               OpBranch %23
+         %25 = OpLabel
+         %45 = OpLoad %6 %8
+         %46 = OpAccessChain %17 %14 %15 %16
+         %47 = OpLoad %6 %46
+         %48 = OpIEqual %31 %45 %47
+               OpSelectionMerge %50 None
+               OpBranchConditional %48 %49 %69
+         %49 = OpLabel
+         %56 = OpAccessChain %17 %14 %15 %55
+         %57 = OpLoad %6 %56
+         %58 = OpConvertSToF %51 %57
+         %59 = OpAccessChain %17 %14 %15 %16
+         %60 = OpLoad %6 %59
+         %61 = OpConvertSToF %51 %60
+         %62 = OpAccessChain %17 %14 %15 %16
+         %63 = OpLoad %6 %62
+         %64 = OpConvertSToF %51 %63
+         %65 = OpAccessChain %17 %14 %15 %55
+         %66 = OpLoad %6 %65
+         %67 = OpConvertSToF %51 %66
+         %68 = OpCompositeConstruct %52 %58 %61 %64 %67
+               OpStore %54 %68
+               OpBranch %50
+         %69 = OpLabel
+         %70 = OpAccessChain %17 %14 %15 %16
+         %71 = OpLoad %6 %70
+         %72 = OpConvertSToF %51 %71
+         %73 = OpCompositeConstruct %52 %72 %72 %72 %72
+               OpStore %54 %73
+               OpBranch %50
+         %50 = OpLabel
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# _GLF_uniform_int_values
+BUFFER variant__GLF_uniform_int_values DATA_TYPE int32[] STD140 DATA
+ 10 0 1
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 16 16
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant__GLF_uniform_int_values AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 16 16
+
+EXPECT variant_framebuffer IDX 0 0 SIZE 16 16 EQ_RGBA 255 0 0 255
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-ldexp-undefined-mat-vec-multiply.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-ldexp-undefined-mat-vec-multiply.amber
new file mode 100644
index 0000000..fca8876
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-ldexp-undefined-mat-vec-multiply.amber
@@ -0,0 +1,200 @@
+#!amber
+
+# Copyright 2020 Google LLC
+#
+# 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.
+
+
+# A test for a coverage-gap found by the GraphicsFuzz project.
+
+# Short description: Covers specific inst combine simplify demanded and inst combine shifts path
+
+# The test passes because the shader always writes red.
+
+# Optimized using spirv-opt with the following arguments:
+# '-O'
+# spirv-opt commit hash: a187dd58a0485988841d325a85c8e6063f53500a
+
+
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+# variant_fragment_shader is derived from the following GLSL:
+# #version 310 es
+# #define _int_1 _GLF_uniform_int_values[0]
+# #define _int_0 _GLF_uniform_int_values[1]
+# #define _float_0_0 _GLF_uniform_float_values[0]
+# #define _float_256_0 _GLF_uniform_float_values[0]
+#
+# precision highp float;
+# precision highp int;
+#
+# // Contents of _GLF_uniform_float_values: [0.0, 256.0]
+# layout(set = 0, binding = 0) uniform buf0
+# {
+#     float _GLF_uniform_float_values[2];
+# };
+#
+# // Contents of _GLF_uniform_int_values: [1, 0]
+# layout(set = 0, binding = 1) uniform buf1
+# {
+#     int _GLF_uniform_int_values[2];
+# };
+#
+# layout(location = 0) out vec4 _GLF_color;
+#
+# void main()
+# {
+#     vec2 v1 = vec2(_float_256_0);
+#
+#     // v1.y becomes undefined. This results in an undefined value, but not in undefined behavior.
+#     v1[_int_1] = ldexp(v1.y, -256);
+#
+#     vec2 v2 = v1 * mat2(_float_0_0);
+#
+#     if (v2.x == _float_0_0)
+#         _GLF_color = vec4(_int_1, _int_0, _int_0, _int_1);
+#     else
+#         _GLF_color = vec4(_int_0);
+# }
+SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 10
+; Bound: 78
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %58
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 310
+               OpName %4 "main"
+               OpName %9 "v1"
+               OpName %13 "buf0"
+               OpMemberName %13 0 "_GLF_uniform_float_values"
+               OpName %15 ""
+               OpName %23 "buf1"
+               OpMemberName %23 0 "_GLF_uniform_int_values"
+               OpName %25 ""
+               OpName %58 "_GLF_color"
+               OpDecorate %12 ArrayStride 16
+               OpMemberDecorate %13 0 Offset 0
+               OpDecorate %13 Block
+               OpDecorate %15 DescriptorSet 0
+               OpDecorate %15 Binding 0
+               OpDecorate %22 ArrayStride 16
+               OpMemberDecorate %23 0 Offset 0
+               OpDecorate %23 Block
+               OpDecorate %25 DescriptorSet 0
+               OpDecorate %25 Binding 1
+               OpDecorate %58 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeFloat 32
+          %7 = OpTypeVector %6 2
+          %8 = OpTypePointer Function %7
+         %10 = OpTypeInt 32 0
+         %11 = OpConstant %10 2
+         %12 = OpTypeArray %6 %11
+         %13 = OpTypeStruct %12
+         %14 = OpTypePointer Uniform %13
+         %15 = OpVariable %14 Uniform
+         %16 = OpTypeInt 32 1
+         %17 = OpConstant %16 0
+         %18 = OpTypePointer Uniform %6
+         %22 = OpTypeArray %16 %11
+         %23 = OpTypeStruct %22
+         %24 = OpTypePointer Uniform %23
+         %25 = OpVariable %24 Uniform
+         %26 = OpTypePointer Uniform %16
+         %29 = OpConstant %10 1
+         %30 = OpTypePointer Function %6
+         %33 = OpConstant %16 -256
+         %40 = OpTypeMatrix %7 2
+         %42 = OpConstant %6 0
+         %52 = OpTypeBool
+         %56 = OpTypeVector %6 4
+         %57 = OpTypePointer Output %56
+         %58 = OpVariable %57 Output
+         %62 = OpConstant %16 1
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+          %9 = OpVariable %8 Function
+         %19 = OpAccessChain %18 %15 %17 %17
+         %20 = OpLoad %6 %19
+         %21 = OpCompositeConstruct %7 %20 %20
+               OpStore %9 %21
+         %27 = OpAccessChain %26 %25 %17 %17
+         %28 = OpLoad %16 %27
+         %31 = OpAccessChain %30 %9 %29
+         %32 = OpLoad %6 %31
+         %34 = OpExtInst %6 %1 Ldexp %32 %33
+         %35 = OpAccessChain %30 %9 %28
+               OpStore %35 %34
+         %37 = OpLoad %7 %9
+         %43 = OpCompositeConstruct %7 %20 %42
+         %44 = OpCompositeConstruct %7 %42 %20
+         %45 = OpCompositeConstruct %40 %43 %44
+         %46 = OpVectorTimesMatrix %7 %37 %45
+         %49 = OpCompositeExtract %6 %46 0
+         %53 = OpFOrdEqual %52 %49 %20
+               OpSelectionMerge %55 None
+               OpBranchConditional %53 %54 %73
+         %54 = OpLabel
+         %61 = OpConvertSToF %6 %28
+         %63 = OpAccessChain %26 %25 %17 %62
+         %64 = OpLoad %16 %63
+         %65 = OpConvertSToF %6 %64
+         %72 = OpCompositeConstruct %56 %61 %65 %65 %61
+               OpStore %58 %72
+               OpBranch %55
+         %73 = OpLabel
+         %74 = OpAccessChain %26 %25 %17 %62
+         %75 = OpLoad %16 %74
+         %76 = OpConvertSToF %6 %75
+         %77 = OpCompositeConstruct %56 %76 %76 %76 %76
+               OpStore %58 %77
+               OpBranch %55
+         %55 = OpLabel
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# _GLF_uniform_int_values
+BUFFER variant__GLF_uniform_int_values DATA_TYPE int32[] STD140 DATA
+ 1 0
+END
+# _GLF_uniform_float_values
+BUFFER variant__GLF_uniform_float_values DATA_TYPE float[] STD140 DATA
+ 0.0 256.0
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 256 256
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant__GLF_uniform_int_values AS uniform DESCRIPTOR_SET 0 BINDING 1
+  BIND BUFFER variant__GLF_uniform_float_values AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256
+
+EXPECT variant_framebuffer IDX 0 0 SIZE 256 256 EQ_RGBA 255 0 0 255
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-machine-basic-block-for-for-for-less-than.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-machine-basic-block-for-for-for-less-than.amber
new file mode 100644
index 0000000..2442671
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-machine-basic-block-for-for-for-less-than.amber
@@ -0,0 +1,337 @@
+#!amber
+
+# Copyright 2020 Google LLC
+#
+# 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.
+
+
+# A test for a coverage-gap found by the GraphicsFuzz project.
+
+# Short description: A fragment shader that covers a specific machine basic block code paths
+
+# The test passes because the shader always writes red.
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+# variant_fragment_shader is derived from the following GLSL:
+# #version 310 es
+# #define _int_1 _GLF_uniform_int_values[0]
+# #define _int_5 _GLF_uniform_int_values[1]
+# #define _int_4 _GLF_uniform_int_values[2]
+# #define _int_3 _GLF_uniform_int_values[3]
+# #define _int_2 _GLF_uniform_int_values[4]
+# #define _int_0 _GLF_uniform_int_values[5]
+# #define _float_0_0 _GLF_uniform_float_values[0]
+#
+# precision highp int;
+# precision highp float;
+#
+# // Contents of _GLF_uniform_float_values: 0.0
+# layout(set = 0, binding = 0) uniform buf0
+# {
+#     float _GLF_uniform_float_values[1];
+# };
+# // Contents of _GLF_uniform_int_values: [1, 5, 4, 3, 2, 0]
+# layout(set = 0, binding = 1) uniform buf1
+# {
+#     int _GLF_uniform_int_values[6];
+# };
+# layout(location = 0) out vec4 _GLF_color;
+#
+# void main()
+# {
+#     _GLF_color = vec4(_int_1, _int_0, _int_0, _int_1);
+#
+#     int data[5] = int[5](_int_5, _int_4, _int_3, _int_2, _int_1);
+#
+#     for (int a = _int_0; a < _int_1; a++)
+#     {
+#         for (int i = _int_0; i < _int_5; i++)
+#         {
+#             for (int j = i; j < _int_5; j++)
+#             {
+#                 if (data[i] < data[j])
+#                 {
+#                     _GLF_color = vec4(_int_0);
+#                 }
+#             }
+#         }
+#     }
+#
+#     // Always false.
+#     while (gl_FragCoord.x < _float_0_0)
+#     {
+#         for (int i = _int_0; i < _int_1; i++)
+#         {
+#             _GLF_color = vec4(_int_0);
+#         }
+#     }
+# }
+SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 10
+; Bound: 146
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %9 %114
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 310
+               OpName %4 "main"
+               OpName %9 "_GLF_color"
+               OpName %14 "buf1"
+               OpMemberName %14 0 "_GLF_uniform_int_values"
+               OpName %16 ""
+               OpName %36 "data"
+               OpName %53 "a"
+               OpName %66 "i"
+               OpName %78 "j"
+               OpName %114 "gl_FragCoord"
+               OpName %121 "buf0"
+               OpMemberName %121 0 "_GLF_uniform_float_values"
+               OpName %123 ""
+               OpName %128 "i"
+               OpDecorate %9 Location 0
+               OpDecorate %13 ArrayStride 16
+               OpMemberDecorate %14 0 Offset 0
+               OpDecorate %14 Block
+               OpDecorate %16 DescriptorSet 0
+               OpDecorate %16 Binding 1
+               OpDecorate %114 BuiltIn FragCoord
+               OpDecorate %120 ArrayStride 16
+               OpMemberDecorate %121 0 Offset 0
+               OpDecorate %121 Block
+               OpDecorate %123 DescriptorSet 0
+               OpDecorate %123 Binding 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeFloat 32
+          %7 = OpTypeVector %6 4
+          %8 = OpTypePointer Output %7
+          %9 = OpVariable %8 Output
+         %10 = OpTypeInt 32 1
+         %11 = OpTypeInt 32 0
+         %12 = OpConstant %11 6
+         %13 = OpTypeArray %10 %12
+         %14 = OpTypeStruct %13
+         %15 = OpTypePointer Uniform %14
+         %16 = OpVariable %15 Uniform
+         %17 = OpConstant %10 0
+         %18 = OpTypePointer Uniform %10
+         %22 = OpConstant %10 5
+         %33 = OpConstant %11 5
+         %34 = OpTypeArray %10 %33
+         %35 = OpTypePointer Function %34
+         %37 = OpConstant %10 1
+         %40 = OpConstant %10 2
+         %43 = OpConstant %10 3
+         %46 = OpConstant %10 4
+         %52 = OpTypePointer Function %10
+         %64 = OpTypeBool
+        %113 = OpTypePointer Input %7
+        %114 = OpVariable %113 Input
+        %115 = OpConstant %11 0
+        %116 = OpTypePointer Input %6
+        %119 = OpConstant %11 1
+        %120 = OpTypeArray %6 %119
+        %121 = OpTypeStruct %120
+        %122 = OpTypePointer Uniform %121
+        %123 = OpVariable %122 Uniform
+        %124 = OpTypePointer Uniform %6
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+         %36 = OpVariable %35 Function
+         %53 = OpVariable %52 Function
+         %66 = OpVariable %52 Function
+         %78 = OpVariable %52 Function
+        %128 = OpVariable %52 Function
+         %19 = OpAccessChain %18 %16 %17 %17
+         %20 = OpLoad %10 %19
+         %21 = OpConvertSToF %6 %20
+         %23 = OpAccessChain %18 %16 %17 %22
+         %24 = OpLoad %10 %23
+         %25 = OpConvertSToF %6 %24
+         %26 = OpAccessChain %18 %16 %17 %22
+         %27 = OpLoad %10 %26
+         %28 = OpConvertSToF %6 %27
+         %29 = OpAccessChain %18 %16 %17 %17
+         %30 = OpLoad %10 %29
+         %31 = OpConvertSToF %6 %30
+         %32 = OpCompositeConstruct %7 %21 %25 %28 %31
+               OpStore %9 %32
+         %38 = OpAccessChain %18 %16 %17 %37
+         %39 = OpLoad %10 %38
+         %41 = OpAccessChain %18 %16 %17 %40
+         %42 = OpLoad %10 %41
+         %44 = OpAccessChain %18 %16 %17 %43
+         %45 = OpLoad %10 %44
+         %47 = OpAccessChain %18 %16 %17 %46
+         %48 = OpLoad %10 %47
+         %49 = OpAccessChain %18 %16 %17 %17
+         %50 = OpLoad %10 %49
+         %51 = OpCompositeConstruct %34 %39 %42 %45 %48 %50
+               OpStore %36 %51
+         %54 = OpAccessChain %18 %16 %17 %22
+         %55 = OpLoad %10 %54
+               OpStore %53 %55
+               OpBranch %56
+         %56 = OpLabel
+               OpLoopMerge %58 %59 None
+               OpBranch %60
+         %60 = OpLabel
+         %61 = OpLoad %10 %53
+         %62 = OpAccessChain %18 %16 %17 %17
+         %63 = OpLoad %10 %62
+         %65 = OpSLessThan %64 %61 %63
+               OpBranchConditional %65 %57 %58
+         %57 = OpLabel
+         %67 = OpAccessChain %18 %16 %17 %22
+         %68 = OpLoad %10 %67
+               OpStore %66 %68
+               OpBranch %69
+         %69 = OpLabel
+               OpLoopMerge %71 %72 None
+               OpBranch %73
+         %73 = OpLabel
+         %74 = OpLoad %10 %66
+         %75 = OpAccessChain %18 %16 %17 %37
+         %76 = OpLoad %10 %75
+         %77 = OpSLessThan %64 %74 %76
+               OpBranchConditional %77 %70 %71
+         %70 = OpLabel
+         %79 = OpLoad %10 %66
+               OpStore %78 %79
+               OpBranch %80
+         %80 = OpLabel
+               OpLoopMerge %82 %83 None
+               OpBranch %84
+         %84 = OpLabel
+         %85 = OpLoad %10 %78
+         %86 = OpAccessChain %18 %16 %17 %37
+         %87 = OpLoad %10 %86
+         %88 = OpSLessThan %64 %85 %87
+               OpBranchConditional %88 %81 %82
+         %81 = OpLabel
+         %89 = OpLoad %10 %66
+         %90 = OpAccessChain %52 %36 %89
+         %91 = OpLoad %10 %90
+         %92 = OpLoad %10 %78
+         %93 = OpAccessChain %52 %36 %92
+         %94 = OpLoad %10 %93
+         %95 = OpSLessThan %64 %91 %94
+               OpSelectionMerge %97 None
+               OpBranchConditional %95 %96 %97
+         %96 = OpLabel
+         %98 = OpAccessChain %18 %16 %17 %22
+         %99 = OpLoad %10 %98
+        %100 = OpConvertSToF %6 %99
+        %101 = OpCompositeConstruct %7 %100 %100 %100 %100
+               OpStore %9 %101
+               OpBranch %97
+         %97 = OpLabel
+               OpBranch %83
+         %83 = OpLabel
+        %102 = OpLoad %10 %78
+        %103 = OpIAdd %10 %102 %37
+               OpStore %78 %103
+               OpBranch %80
+         %82 = OpLabel
+               OpBranch %72
+         %72 = OpLabel
+        %104 = OpLoad %10 %66
+        %105 = OpIAdd %10 %104 %37
+               OpStore %66 %105
+               OpBranch %69
+         %71 = OpLabel
+               OpBranch %59
+         %59 = OpLabel
+        %106 = OpLoad %10 %53
+        %107 = OpIAdd %10 %106 %37
+               OpStore %53 %107
+               OpBranch %56
+         %58 = OpLabel
+               OpBranch %108
+        %108 = OpLabel
+               OpLoopMerge %110 %111 None
+               OpBranch %112
+        %112 = OpLabel
+        %117 = OpAccessChain %116 %114 %115
+        %118 = OpLoad %6 %117
+        %125 = OpAccessChain %124 %123 %17 %17
+        %126 = OpLoad %6 %125
+        %127 = OpFOrdLessThan %64 %118 %126
+               OpBranchConditional %127 %109 %110
+        %109 = OpLabel
+        %129 = OpAccessChain %18 %16 %17 %22
+        %130 = OpLoad %10 %129
+               OpStore %128 %130
+               OpBranch %131
+        %131 = OpLabel
+               OpLoopMerge %133 %134 None
+               OpBranch %135
+        %135 = OpLabel
+        %136 = OpLoad %10 %128
+        %137 = OpAccessChain %18 %16 %17 %17
+        %138 = OpLoad %10 %137
+        %139 = OpSLessThan %64 %136 %138
+               OpBranchConditional %139 %132 %133
+        %132 = OpLabel
+        %140 = OpAccessChain %18 %16 %17 %22
+        %141 = OpLoad %10 %140
+        %142 = OpConvertSToF %6 %141
+        %143 = OpCompositeConstruct %7 %142 %142 %142 %142
+               OpStore %9 %143
+               OpBranch %134
+        %134 = OpLabel
+        %144 = OpLoad %10 %128
+        %145 = OpIAdd %10 %144 %37
+               OpStore %128 %145
+               OpBranch %131
+        %133 = OpLabel
+               OpBranch %111
+        %111 = OpLabel
+               OpBranch %108
+        %110 = OpLabel
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# _GLF_uniform_int_values
+BUFFER variant__GLF_uniform_int_values DATA_TYPE int32[] STD140 DATA
+ 1 5 4 3 2 0
+END
+# _GLF_uniform_float_values
+BUFFER variant__GLF_uniform_float_values DATA_TYPE float[] STD140 DATA
+ 0.0
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 16 16
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant__GLF_uniform_int_values AS uniform DESCRIPTOR_SET 0 BINDING 1
+  BIND BUFFER variant__GLF_uniform_float_values AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 16 16
+
+EXPECT variant_framebuffer IDX 0 0 SIZE 16 16 EQ_RGBA 255 0 0 255
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-machine-scheduler-for-if-pow.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-machine-scheduler-for-if-pow.amber
new file mode 100644
index 0000000..99180e0
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-machine-scheduler-for-if-pow.amber
@@ -0,0 +1,300 @@
+#!amber
+
+# Copyright 2020 Google LLC
+#
+# 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.
+
+
+# A test for a coverage-gap found by the GraphicsFuzz project.
+
+# Short description: A fragment shader that covers a specific machine scheduler path
+
+# The test passes because the shader always writes red.
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+# variant_fragment_shader is derived from the following GLSL:
+# #version 310 es
+# #define _int_10 _GLF_uniform_int_values[0]
+# #define _int_0 _GLF_uniform_int_values[1]
+# #define _float_0_0 _GLF_uniform_float_values[0]
+# #define _float_4_0 _GLF_uniform_float_values[1]
+# #define _float_1_0 _GLF_uniform_float_values[2]
+# #define _float_2_0 _GLF_uniform_float_values[3]
+#
+# precision highp float;
+#
+# // Contents of _GLF_uniform_int_values: [10, 0]
+# layout(set = 0, binding = 0) uniform buf0
+# {
+#     int _GLF_uniform_int_values[2];
+# };
+#
+# // Contents of _GLF_uniform_float_values: [0.0, 4.0, 1.0, 2.0]
+# layout(set = 0, binding = 1) uniform buf1
+# {
+#     float _GLF_uniform_float_values[4];
+# };
+#
+# layout(location = 0) out vec4 _GLF_v1;
+#
+# void main()
+# {
+#     vec2 uv = gl_FragCoord.xy;
+#     vec4 v1 = vec4(_float_0_0);
+#     if (uv.y >= _float_0_0)
+#     {
+#         v1.x = _float_1_0;
+#         v1.y = _float_0_0;
+#         v1.z = _float_0_0;
+#         v1.w = _float_1_0;
+#     }
+#
+#     float a = _float_1_0;
+#     for (int i = _int_0; i < _int_10; i++)
+#     {
+#         // Always false.
+#         if (_float_1_0 < _float_0_0)
+#         {
+#             discard;
+#         }
+#         // a becomes 4.
+#         a = pow(v1.x + v1.y + v1.z + v1.w, _float_2_0);
+#     }
+#
+#     if (a == _float_4_0)
+#     {
+#         _GLF_v1 = v1;
+#     }
+#     else
+#     {
+#         _GLF_v1 = vec4(_int_0);
+#     }
+# }
+SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 8
+; Bound: 116
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %12 %109
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 310
+               OpName %4 "main"
+               OpName %9 "uv"
+               OpName %12 "gl_FragCoord"
+               OpName %16 "v1"
+               OpName %20 "buf1"
+               OpMemberName %20 0 "_GLF_uniform_float_values"
+               OpName %22 ""
+               OpName %55 "a"
+               OpName %59 "i"
+               OpName %61 "buf0"
+               OpMemberName %61 0 "_GLF_uniform_int_values"
+               OpName %63 ""
+               OpName %109 "_GLF_v1"
+               OpDecorate %12 BuiltIn FragCoord
+               OpDecorate %19 ArrayStride 16
+               OpMemberDecorate %20 0 Offset 0
+               OpDecorate %20 Block
+               OpDecorate %22 DescriptorSet 0
+               OpDecorate %22 Binding 1
+               OpDecorate %59 RelaxedPrecision
+               OpDecorate %60 ArrayStride 16
+               OpMemberDecorate %61 0 RelaxedPrecision
+               OpMemberDecorate %61 0 Offset 0
+               OpDecorate %61 Block
+               OpDecorate %63 DescriptorSet 0
+               OpDecorate %63 Binding 0
+               OpDecorate %67 RelaxedPrecision
+               OpDecorate %73 RelaxedPrecision
+               OpDecorate %75 RelaxedPrecision
+               OpDecorate %100 RelaxedPrecision
+               OpDecorate %101 RelaxedPrecision
+               OpDecorate %109 Location 0
+               OpDecorate %113 RelaxedPrecision
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeFloat 32
+          %7 = OpTypeVector %6 2
+          %8 = OpTypePointer Function %7
+         %10 = OpTypeVector %6 4
+         %11 = OpTypePointer Input %10
+         %12 = OpVariable %11 Input
+         %15 = OpTypePointer Function %10
+         %17 = OpTypeInt 32 0
+         %18 = OpConstant %17 4
+         %19 = OpTypeArray %6 %18
+         %20 = OpTypeStruct %19
+         %21 = OpTypePointer Uniform %20
+         %22 = OpVariable %21 Uniform
+         %23 = OpTypeInt 32 1
+         %24 = OpConstant %23 0
+         %25 = OpTypePointer Uniform %6
+         %29 = OpConstant %17 1
+         %30 = OpTypePointer Function %6
+         %35 = OpTypeBool
+         %39 = OpConstant %23 2
+         %42 = OpConstant %17 0
+         %49 = OpConstant %17 2
+         %53 = OpConstant %17 3
+         %58 = OpTypePointer Function %23
+         %60 = OpTypeArray %23 %49
+         %61 = OpTypeStruct %60
+         %62 = OpTypePointer Uniform %61
+         %63 = OpVariable %62 Uniform
+         %64 = OpConstant %23 1
+         %65 = OpTypePointer Uniform %23
+         %96 = OpConstant %23 3
+        %108 = OpTypePointer Output %10
+        %109 = OpVariable %108 Output
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+          %9 = OpVariable %8 Function
+         %16 = OpVariable %15 Function
+         %55 = OpVariable %30 Function
+         %59 = OpVariable %58 Function
+         %13 = OpLoad %10 %12
+         %14 = OpVectorShuffle %7 %13 %13 0 1
+               OpStore %9 %14
+         %26 = OpAccessChain %25 %22 %24 %24
+         %27 = OpLoad %6 %26
+         %28 = OpCompositeConstruct %10 %27 %27 %27 %27
+               OpStore %16 %28
+         %31 = OpAccessChain %30 %9 %29
+         %32 = OpLoad %6 %31
+         %33 = OpAccessChain %25 %22 %24 %24
+         %34 = OpLoad %6 %33
+         %36 = OpFOrdGreaterThanEqual %35 %32 %34
+               OpSelectionMerge %38 None
+               OpBranchConditional %36 %37 %38
+         %37 = OpLabel
+         %40 = OpAccessChain %25 %22 %24 %39
+         %41 = OpLoad %6 %40
+         %43 = OpAccessChain %30 %16 %42
+               OpStore %43 %41
+         %44 = OpAccessChain %25 %22 %24 %24
+         %45 = OpLoad %6 %44
+         %46 = OpAccessChain %30 %16 %29
+               OpStore %46 %45
+         %47 = OpAccessChain %25 %22 %24 %24
+         %48 = OpLoad %6 %47
+         %50 = OpAccessChain %30 %16 %49
+               OpStore %50 %48
+         %51 = OpAccessChain %25 %22 %24 %39
+         %52 = OpLoad %6 %51
+         %54 = OpAccessChain %30 %16 %53
+               OpStore %54 %52
+               OpBranch %38
+         %38 = OpLabel
+         %56 = OpAccessChain %25 %22 %24 %39
+         %57 = OpLoad %6 %56
+               OpStore %55 %57
+         %66 = OpAccessChain %65 %63 %24 %64
+         %67 = OpLoad %23 %66
+               OpStore %59 %67
+               OpBranch %68
+         %68 = OpLabel
+               OpLoopMerge %70 %71 None
+               OpBranch %72
+         %72 = OpLabel
+         %73 = OpLoad %23 %59
+         %74 = OpAccessChain %65 %63 %24 %24
+         %75 = OpLoad %23 %74
+         %76 = OpSLessThan %35 %73 %75
+               OpBranchConditional %76 %69 %70
+         %69 = OpLabel
+         %77 = OpAccessChain %25 %22 %24 %39
+         %78 = OpLoad %6 %77
+         %79 = OpAccessChain %25 %22 %24 %24
+         %80 = OpLoad %6 %79
+         %81 = OpFOrdLessThan %35 %78 %80
+               OpSelectionMerge %83 None
+               OpBranchConditional %81 %82 %83
+         %82 = OpLabel
+               OpKill
+         %83 = OpLabel
+         %85 = OpAccessChain %30 %16 %42
+         %86 = OpLoad %6 %85
+         %87 = OpAccessChain %30 %16 %29
+         %88 = OpLoad %6 %87
+         %89 = OpFAdd %6 %86 %88
+         %90 = OpAccessChain %30 %16 %49
+         %91 = OpLoad %6 %90
+         %92 = OpFAdd %6 %89 %91
+         %93 = OpAccessChain %30 %16 %53
+         %94 = OpLoad %6 %93
+         %95 = OpFAdd %6 %92 %94
+         %97 = OpAccessChain %25 %22 %24 %96
+         %98 = OpLoad %6 %97
+         %99 = OpExtInst %6 %1 Pow %95 %98
+               OpStore %55 %99
+               OpBranch %71
+         %71 = OpLabel
+        %100 = OpLoad %23 %59
+        %101 = OpIAdd %23 %100 %64
+               OpStore %59 %101
+               OpBranch %68
+         %70 = OpLabel
+        %102 = OpLoad %6 %55
+        %103 = OpAccessChain %25 %22 %24 %64
+        %104 = OpLoad %6 %103
+        %105 = OpFOrdEqual %35 %102 %104
+               OpSelectionMerge %107 None
+               OpBranchConditional %105 %106 %111
+        %106 = OpLabel
+        %110 = OpLoad %10 %16
+               OpStore %109 %110
+               OpBranch %107
+        %111 = OpLabel
+        %112 = OpAccessChain %65 %63 %24 %64
+        %113 = OpLoad %23 %112
+        %114 = OpConvertSToF %6 %113
+        %115 = OpCompositeConstruct %10 %114 %114 %114 %114
+               OpStore %109 %115
+               OpBranch %107
+        %107 = OpLabel
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# _GLF_uniform_float_values
+BUFFER variant__GLF_uniform_float_values DATA_TYPE float[] STD140 DATA
+ 0.0 4.0 1.0 2.0
+END
+# _GLF_uniform_int_values
+BUFFER variant__GLF_uniform_int_values DATA_TYPE int32[] STD140 DATA
+ 10 0
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 256 256
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant__GLF_uniform_float_values AS uniform DESCRIPTOR_SET 0 BINDING 1
+  BIND BUFFER variant__GLF_uniform_int_values AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256
+
+EXPECT variant_framebuffer IDX 0 0 SIZE 256 256 EQ_RGBA 255 0 0 255
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-mod-acosh.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-mod-acosh.amber
new file mode 100644
index 0000000..4d92f82
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-mod-acosh.amber
@@ -0,0 +1,193 @@
+#!amber
+
+# Copyright 2020 Google LLC
+#
+# 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.
+
+
+# A test for a coverage-gap found by the GraphicsFuzz project.
+
+# Short description: A fragment shader that calculates modulo of an acosh result
+
+# The test passes because the shader always writes red.
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+# variant_fragment_shader is derived from the following GLSL:
+# #version 310 es
+# #define _int_0 _GLF_uniform_int_values[0]
+# #define _int_1 _GLF_uniform_int_values[1]
+# #define _float_2_6 _GLF_uniform_float_values[0]
+# #define _float_1_61 _GLF_uniform_float_values[1]
+# #define _float_0_1 _GLF_uniform_float_values[2]
+#
+# precision highp float;
+# precision highp int;
+#
+# // Contents of _GLF_uniform_float_values: [2.6, 1.61, 0.1]
+# layout(set = 0, binding = 0) uniform buf0
+# {
+#     float _GLF_uniform_float_values[3];
+# };
+#
+# // Contents of _GLF_uniform_int_values: [0, 1]
+# layout(set = 0, binding = 1) uniform buf1
+# {
+#     int _GLF_uniform_int_values[2];
+# };
+#
+# layout(location = 0) out vec4 _GLF_color;
+#
+# void main()
+# {
+#     float f = mod(acosh(_float_2_6), 7938.0);
+#     if (abs(f - _float_1_61) < _float_0_1)
+#     {
+#         _GLF_color = vec4(_int_1, _int_0, _int_0, _int_1);
+#     }
+#     else
+#     {
+#         _GLF_color = vec4(_int_0);
+#     }
+# }
+SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 8
+; Bound: 63
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %38
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 310
+               OpName %4 "main"
+               OpName %8 "f"
+               OpName %12 "buf0"
+               OpMemberName %12 0 "_GLF_uniform_float_values"
+               OpName %14 ""
+               OpName %38 "_GLF_color"
+               OpName %41 "buf1"
+               OpMemberName %41 0 "_GLF_uniform_int_values"
+               OpName %43 ""
+               OpDecorate %11 ArrayStride 16
+               OpMemberDecorate %12 0 Offset 0
+               OpDecorate %12 Block
+               OpDecorate %14 DescriptorSet 0
+               OpDecorate %14 Binding 0
+               OpDecorate %38 Location 0
+               OpDecorate %40 ArrayStride 16
+               OpMemberDecorate %41 0 Offset 0
+               OpDecorate %41 Block
+               OpDecorate %43 DescriptorSet 0
+               OpDecorate %43 Binding 1
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeFloat 32
+          %7 = OpTypePointer Function %6
+          %9 = OpTypeInt 32 0
+         %10 = OpConstant %9 3
+         %11 = OpTypeArray %6 %10
+         %12 = OpTypeStruct %11
+         %13 = OpTypePointer Uniform %12
+         %14 = OpVariable %13 Uniform
+         %15 = OpTypeInt 32 1
+         %16 = OpConstant %15 0
+         %17 = OpTypePointer Uniform %6
+         %21 = OpConstant %6 7938
+         %24 = OpConstant %15 1
+         %29 = OpConstant %15 2
+         %32 = OpTypeBool
+         %36 = OpTypeVector %6 4
+         %37 = OpTypePointer Output %36
+         %38 = OpVariable %37 Output
+         %39 = OpConstant %9 2
+         %40 = OpTypeArray %15 %39
+         %41 = OpTypeStruct %40
+         %42 = OpTypePointer Uniform %41
+         %43 = OpVariable %42 Uniform
+         %44 = OpTypePointer Uniform %15
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+          %8 = OpVariable %7 Function
+         %18 = OpAccessChain %17 %14 %16 %16
+         %19 = OpLoad %6 %18
+         %20 = OpExtInst %6 %1 Acosh %19
+         %22 = OpFMod %6 %20 %21
+               OpStore %8 %22
+         %23 = OpLoad %6 %8
+         %25 = OpAccessChain %17 %14 %16 %24
+         %26 = OpLoad %6 %25
+         %27 = OpFSub %6 %23 %26
+         %28 = OpExtInst %6 %1 FAbs %27
+         %30 = OpAccessChain %17 %14 %16 %29
+         %31 = OpLoad %6 %30
+         %33 = OpFOrdLessThan %32 %28 %31
+               OpSelectionMerge %35 None
+               OpBranchConditional %33 %34 %58
+         %34 = OpLabel
+         %45 = OpAccessChain %44 %43 %16 %24
+         %46 = OpLoad %15 %45
+         %47 = OpConvertSToF %6 %46
+         %48 = OpAccessChain %44 %43 %16 %16
+         %49 = OpLoad %15 %48
+         %50 = OpConvertSToF %6 %49
+         %51 = OpAccessChain %44 %43 %16 %16
+         %52 = OpLoad %15 %51
+         %53 = OpConvertSToF %6 %52
+         %54 = OpAccessChain %44 %43 %16 %24
+         %55 = OpLoad %15 %54
+         %56 = OpConvertSToF %6 %55
+         %57 = OpCompositeConstruct %36 %47 %50 %53 %56
+               OpStore %38 %57
+               OpBranch %35
+         %58 = OpLabel
+         %59 = OpAccessChain %44 %43 %16 %16
+         %60 = OpLoad %15 %59
+         %61 = OpConvertSToF %6 %60
+         %62 = OpCompositeConstruct %36 %61 %61 %61 %61
+               OpStore %38 %62
+               OpBranch %35
+         %35 = OpLabel
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# _GLF_uniform_int_values
+BUFFER variant__GLF_uniform_int_values DATA_TYPE int32[] STD140 DATA
+ 0 1
+END
+# _GLF_uniform_float_values
+BUFFER variant__GLF_uniform_float_values DATA_TYPE float[] STD140 DATA
+ 2.6 1.61 0.1
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 16 16
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant__GLF_uniform_int_values AS uniform DESCRIPTOR_SET 0 BINDING 1
+  BIND BUFFER variant__GLF_uniform_float_values AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 16 16
+
+EXPECT variant_framebuffer IDX 0 0 SIZE 16 16 EQ_RGBA 255 0 0 255
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-modf-clamp-for.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-modf-clamp-for.amber
new file mode 100644
index 0000000..701f284
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-modf-clamp-for.amber
@@ -0,0 +1,280 @@
+#!amber
+
+# Copyright 2020 Google LLC
+#
+# 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.
+
+
+# A test for a coverage-gap found by the GraphicsFuzz project.
+
+# Short description: A fragment shader that covers a specific live intervals code path
+
+# The test passes because the shader always writes red.
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+# variant_fragment_shader is derived from the following GLSL:
+# #version 310 es
+# #define _int_0 _GLF_uniform_int_values[0]
+# #define _int_2 _GLF_uniform_int_values[1]
+# #define _int_1 _GLF_uniform_int_values[2]
+# #define _int_10 _GLF_uniform_int_values[3]
+# #define _float_1_0 _GLF_uniform_float_values[0]
+# #define _float_2_0 _GLF_uniform_float_values[1]
+# #define _float_0_0 _GLF_uniform_float_values[2]
+#
+# precision highp int;
+#
+# precision highp float;
+#
+# // Contents of _GLF_uniform_int_values: [0, 2, 1, 10]
+# layout(set = 0, binding = 0) uniform buf0
+# {
+#     int _GLF_uniform_int_values[4];
+# };
+#
+# // Contents of _GLF_uniform_float_values: [1.0, 2.0, 0.0]
+# layout(set = 0, binding = 1) uniform buf1
+# {
+#     float _GLF_uniform_float_values[3];
+# };
+#
+# layout(location = 0) out vec4 _GLF_color;
+#
+# void main()
+# {
+#     float a = _float_1_0;
+#
+#     // b becomes 0.
+#     int b = int(modf(_float_0_0, a));
+#
+#     vec2 v1 = vec2(_float_1_0);
+#
+#     // Always true.
+#     if (v1[clamp(_int_0, b, _int_2)] >= _float_1_0)
+#     {
+#         float c = _float_2_0;
+#         for (int i = _int_0; (c >= _float_2_0) && (i < _int_10); i++)
+#         {
+#             a = c;
+#             c = a;
+#         }
+#     }
+#     if (a == _float_2_0)
+#     {
+#         _GLF_color = vec4(_int_1, _int_0, _int_0, _int_1);
+#     }
+#     else
+#     {
+#         _GLF_color = vec4(_int_0);
+#     }
+# }
+SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 10
+; Bound: 108
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %89
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 310
+               OpName %4 "main"
+               OpName %8 "a"
+               OpName %12 "buf1"
+               OpMemberName %12 0 "_GLF_uniform_float_values"
+               OpName %14 ""
+               OpName %21 "b"
+               OpName %29 "v1"
+               OpName %35 "buf0"
+               OpMemberName %35 0 "_GLF_uniform_int_values"
+               OpName %37 ""
+               OpName %54 "c"
+               OpName %57 "i"
+               OpName %89 "_GLF_color"
+               OpDecorate %11 ArrayStride 16
+               OpMemberDecorate %12 0 Offset 0
+               OpDecorate %12 Block
+               OpDecorate %14 DescriptorSet 0
+               OpDecorate %14 Binding 1
+               OpDecorate %34 ArrayStride 16
+               OpMemberDecorate %35 0 Offset 0
+               OpDecorate %35 Block
+               OpDecorate %37 DescriptorSet 0
+               OpDecorate %37 Binding 0
+               OpDecorate %89 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeFloat 32
+          %7 = OpTypePointer Function %6
+          %9 = OpTypeInt 32 0
+         %10 = OpConstant %9 3
+         %11 = OpTypeArray %6 %10
+         %12 = OpTypeStruct %11
+         %13 = OpTypePointer Uniform %12
+         %14 = OpVariable %13 Uniform
+         %15 = OpTypeInt 32 1
+         %16 = OpConstant %15 0
+         %17 = OpTypePointer Uniform %6
+         %20 = OpTypePointer Function %15
+         %22 = OpConstant %15 2
+         %27 = OpTypeVector %6 2
+         %28 = OpTypePointer Function %27
+         %33 = OpConstant %9 4
+         %34 = OpTypeArray %15 %33
+         %35 = OpTypeStruct %34
+         %36 = OpTypePointer Uniform %35
+         %37 = OpVariable %36 Uniform
+         %38 = OpTypePointer Uniform %15
+         %42 = OpConstant %15 1
+         %50 = OpTypeBool
+         %72 = OpConstant %15 3
+         %87 = OpTypeVector %6 4
+         %88 = OpTypePointer Output %87
+         %89 = OpVariable %88 Output
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+          %8 = OpVariable %7 Function
+         %21 = OpVariable %20 Function
+         %29 = OpVariable %28 Function
+         %54 = OpVariable %7 Function
+         %57 = OpVariable %20 Function
+         %18 = OpAccessChain %17 %14 %16 %16
+         %19 = OpLoad %6 %18
+               OpStore %8 %19
+         %23 = OpAccessChain %17 %14 %16 %22
+         %24 = OpLoad %6 %23
+         %25 = OpExtInst %6 %1 Modf %24 %8
+         %26 = OpConvertFToS %15 %25
+               OpStore %21 %26
+         %30 = OpAccessChain %17 %14 %16 %16
+         %31 = OpLoad %6 %30
+         %32 = OpCompositeConstruct %27 %31 %31
+               OpStore %29 %32
+         %39 = OpAccessChain %38 %37 %16 %16
+         %40 = OpLoad %15 %39
+         %41 = OpLoad %15 %21
+         %43 = OpAccessChain %38 %37 %16 %42
+         %44 = OpLoad %15 %43
+         %45 = OpExtInst %15 %1 SClamp %40 %41 %44
+         %46 = OpAccessChain %7 %29 %45
+         %47 = OpLoad %6 %46
+         %48 = OpAccessChain %17 %14 %16 %16
+         %49 = OpLoad %6 %48
+         %51 = OpFOrdGreaterThanEqual %50 %47 %49
+               OpSelectionMerge %53 None
+               OpBranchConditional %51 %52 %53
+         %52 = OpLabel
+         %55 = OpAccessChain %17 %14 %16 %42
+         %56 = OpLoad %6 %55
+               OpStore %54 %56
+         %58 = OpAccessChain %38 %37 %16 %16
+         %59 = OpLoad %15 %58
+               OpStore %57 %59
+               OpBranch %60
+         %60 = OpLabel
+               OpLoopMerge %62 %63 None
+               OpBranch %64
+         %64 = OpLabel
+         %65 = OpLoad %6 %54
+         %66 = OpAccessChain %17 %14 %16 %42
+         %67 = OpLoad %6 %66
+         %68 = OpFOrdGreaterThanEqual %50 %65 %67
+               OpSelectionMerge %70 None
+               OpBranchConditional %68 %69 %70
+         %69 = OpLabel
+         %71 = OpLoad %15 %57
+         %73 = OpAccessChain %38 %37 %16 %72
+         %74 = OpLoad %15 %73
+         %75 = OpSLessThan %50 %71 %74
+               OpBranch %70
+         %70 = OpLabel
+         %76 = OpPhi %50 %68 %64 %75 %69
+               OpBranchConditional %76 %61 %62
+         %61 = OpLabel
+         %77 = OpLoad %6 %54
+               OpStore %8 %77
+         %78 = OpLoad %6 %8
+               OpStore %54 %78
+               OpBranch %63
+         %63 = OpLabel
+         %79 = OpLoad %15 %57
+         %80 = OpIAdd %15 %79 %42
+               OpStore %57 %80
+               OpBranch %60
+         %62 = OpLabel
+               OpBranch %53
+         %53 = OpLabel
+         %81 = OpLoad %6 %8
+         %82 = OpAccessChain %17 %14 %16 %42
+         %83 = OpLoad %6 %82
+         %84 = OpFOrdEqual %50 %81 %83
+               OpSelectionMerge %86 None
+               OpBranchConditional %84 %85 %103
+         %85 = OpLabel
+         %90 = OpAccessChain %38 %37 %16 %22
+         %91 = OpLoad %15 %90
+         %92 = OpConvertSToF %6 %91
+         %93 = OpAccessChain %38 %37 %16 %16
+         %94 = OpLoad %15 %93
+         %95 = OpConvertSToF %6 %94
+         %96 = OpAccessChain %38 %37 %16 %16
+         %97 = OpLoad %15 %96
+         %98 = OpConvertSToF %6 %97
+         %99 = OpAccessChain %38 %37 %16 %22
+        %100 = OpLoad %15 %99
+        %101 = OpConvertSToF %6 %100
+        %102 = OpCompositeConstruct %87 %92 %95 %98 %101
+               OpStore %89 %102
+               OpBranch %86
+        %103 = OpLabel
+        %104 = OpAccessChain %38 %37 %16 %16
+        %105 = OpLoad %15 %104
+        %106 = OpConvertSToF %6 %105
+        %107 = OpCompositeConstruct %87 %106 %106 %106 %106
+               OpStore %89 %107
+               OpBranch %86
+         %86 = OpLabel
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# _GLF_uniform_float_values
+BUFFER variant__GLF_uniform_float_values DATA_TYPE float[] STD140 DATA
+ 1.0 2.0 0.0
+END
+# _GLF_uniform_int_values
+BUFFER variant__GLF_uniform_int_values DATA_TYPE int32[] STD140 DATA
+ 0 2 1 10
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 16 16
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant__GLF_uniform_float_values AS uniform DESCRIPTOR_SET 0 BINDING 1
+  BIND BUFFER variant__GLF_uniform_int_values AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 16 16
+
+EXPECT variant_framebuffer IDX 0 0 SIZE 16 16 EQ_RGBA 255 0 0 255
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-not-clamp-matrix-access.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-not-clamp-matrix-access.amber
new file mode 100644
index 0000000..91fb2cd
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-not-clamp-matrix-access.amber
@@ -0,0 +1,252 @@
+#!amber
+
+# Copyright 2020 Google LLC
+#
+# 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.
+
+
+# A test for a coverage-gap found by the GraphicsFuzz project.
+
+# Short description: A fragment shader that covers a specific selection dag code path
+
+# The test passes because the shader always writes red.
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+# variant_fragment_shader is derived from the following GLSL:
+# #version 310 es
+# #define _int_3 _GLF_uniform_int_values[0]
+# #define _int_0 _GLF_uniform_int_values[1]
+# #define _int_1 _GLF_uniform_int_values[2]
+# #define _float_10_0 _GLF_uniform_float_values[0]
+# #define _float_1_0 _GLF_uniform_float_values[1]
+# #define _float_2_0 _GLF_uniform_float_values[2]
+# #define _float_3_0 _GLF_uniform_float_values[3]
+# #define _float_4_0 _GLF_uniform_float_values[4]
+#
+# precision highp int;
+# precision highp float;
+#
+# // Contents of _GLF_uniform_float_values: [10.0, 1.0, 2.0, 3.0, 4.0]
+# layout(set = 0, binding = 0) uniform buf0
+# {
+#     float _GLF_uniform_float_values[5];
+# };
+#
+# // Contents of _GLF_uniform_int_values: [3, 0, 1]
+# layout(set = 0, binding = 1) uniform buf1
+# {
+#     int _GLF_uniform_int_values[3];
+# };
+#
+# layout(location = 0) out vec4 _GLF_color;
+#
+# void main()
+# {
+#     mat2 M1 = mat2(_float_1_0, _float_2_0, _float_3_0, _float_4_0);
+#     float a = _float_1_0;
+#
+#     for (int c = _int_0; c < _int_3; c++)
+#     {
+#         // At each iteration, clamp returns 0.
+#         a += M1[_int_1][clamp(~c, 0, 1)];
+#     }
+#
+#     if (a == _float_10_0)
+#     {
+#         _GLF_color = vec4(_int_1, _int_0, _int_0, _int_1);
+#     }
+#     else
+#     {
+#         _GLF_color = vec4(_int_1);
+#     }
+# }
+SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 10
+; Bound: 99
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %80
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 310
+               OpName %4 "main"
+               OpName %10 "M1"
+               OpName %14 "buf0"
+               OpMemberName %14 0 "_GLF_uniform_float_values"
+               OpName %16 ""
+               OpName %38 "a"
+               OpName %42 "c"
+               OpName %45 "buf1"
+               OpMemberName %45 0 "_GLF_uniform_int_values"
+               OpName %47 ""
+               OpName %80 "_GLF_color"
+               OpDecorate %13 ArrayStride 16
+               OpMemberDecorate %14 0 Offset 0
+               OpDecorate %14 Block
+               OpDecorate %16 DescriptorSet 0
+               OpDecorate %16 Binding 0
+               OpDecorate %44 ArrayStride 16
+               OpMemberDecorate %45 0 Offset 0
+               OpDecorate %45 Block
+               OpDecorate %47 DescriptorSet 0
+               OpDecorate %47 Binding 1
+               OpDecorate %80 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeFloat 32
+          %7 = OpTypeVector %6 2
+          %8 = OpTypeMatrix %7 2
+          %9 = OpTypePointer Function %8
+         %11 = OpTypeInt 32 0
+         %12 = OpConstant %11 5
+         %13 = OpTypeArray %6 %12
+         %14 = OpTypeStruct %13
+         %15 = OpTypePointer Uniform %14
+         %16 = OpVariable %15 Uniform
+         %17 = OpTypeInt 32 1
+         %18 = OpConstant %17 0
+         %19 = OpConstant %17 1
+         %20 = OpTypePointer Uniform %6
+         %23 = OpConstant %17 2
+         %26 = OpConstant %17 3
+         %29 = OpConstant %17 4
+         %32 = OpConstant %6 1
+         %33 = OpConstant %6 0
+         %37 = OpTypePointer Function %6
+         %41 = OpTypePointer Function %17
+         %43 = OpConstant %11 3
+         %44 = OpTypeArray %17 %43
+         %45 = OpTypeStruct %44
+         %46 = OpTypePointer Uniform %45
+         %47 = OpVariable %46 Uniform
+         %48 = OpTypePointer Uniform %17
+         %59 = OpTypeBool
+         %78 = OpTypeVector %6 4
+         %79 = OpTypePointer Output %78
+         %80 = OpVariable %79 Output
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+         %10 = OpVariable %9 Function
+         %38 = OpVariable %37 Function
+         %42 = OpVariable %41 Function
+         %21 = OpAccessChain %20 %16 %18 %19
+         %22 = OpLoad %6 %21
+         %24 = OpAccessChain %20 %16 %18 %23
+         %25 = OpLoad %6 %24
+         %27 = OpAccessChain %20 %16 %18 %26
+         %28 = OpLoad %6 %27
+         %30 = OpAccessChain %20 %16 %18 %29
+         %31 = OpLoad %6 %30
+         %34 = OpCompositeConstruct %7 %22 %25
+         %35 = OpCompositeConstruct %7 %28 %31
+         %36 = OpCompositeConstruct %8 %34 %35
+               OpStore %10 %36
+         %39 = OpAccessChain %20 %16 %18 %19
+         %40 = OpLoad %6 %39
+               OpStore %38 %40
+         %49 = OpAccessChain %48 %47 %18 %19
+         %50 = OpLoad %17 %49
+               OpStore %42 %50
+               OpBranch %51
+         %51 = OpLabel
+               OpLoopMerge %53 %54 None
+               OpBranch %55
+         %55 = OpLabel
+         %56 = OpLoad %17 %42
+         %57 = OpAccessChain %48 %47 %18 %18
+         %58 = OpLoad %17 %57
+         %60 = OpSLessThan %59 %56 %58
+               OpBranchConditional %60 %52 %53
+         %52 = OpLabel
+         %61 = OpAccessChain %48 %47 %18 %23
+         %62 = OpLoad %17 %61
+         %63 = OpLoad %17 %42
+         %64 = OpNot %17 %63
+         %65 = OpExtInst %17 %1 SClamp %64 %18 %19
+         %66 = OpAccessChain %37 %10 %62 %65
+         %67 = OpLoad %6 %66
+         %68 = OpLoad %6 %38
+         %69 = OpFAdd %6 %68 %67
+               OpStore %38 %69
+               OpBranch %54
+         %54 = OpLabel
+         %70 = OpLoad %17 %42
+         %71 = OpIAdd %17 %70 %19
+               OpStore %42 %71
+               OpBranch %51
+         %53 = OpLabel
+         %72 = OpLoad %6 %38
+         %73 = OpAccessChain %20 %16 %18 %18
+         %74 = OpLoad %6 %73
+         %75 = OpFOrdEqual %59 %72 %74
+               OpSelectionMerge %77 None
+               OpBranchConditional %75 %76 %94
+         %76 = OpLabel
+         %81 = OpAccessChain %48 %47 %18 %23
+         %82 = OpLoad %17 %81
+         %83 = OpConvertSToF %6 %82
+         %84 = OpAccessChain %48 %47 %18 %19
+         %85 = OpLoad %17 %84
+         %86 = OpConvertSToF %6 %85
+         %87 = OpAccessChain %48 %47 %18 %19
+         %88 = OpLoad %17 %87
+         %89 = OpConvertSToF %6 %88
+         %90 = OpAccessChain %48 %47 %18 %23
+         %91 = OpLoad %17 %90
+         %92 = OpConvertSToF %6 %91
+         %93 = OpCompositeConstruct %78 %83 %86 %89 %92
+               OpStore %80 %93
+               OpBranch %77
+         %94 = OpLabel
+         %95 = OpAccessChain %48 %47 %18 %23
+         %96 = OpLoad %17 %95
+         %97 = OpConvertSToF %6 %96
+         %98 = OpCompositeConstruct %78 %97 %97 %97 %97
+               OpStore %80 %98
+               OpBranch %77
+         %77 = OpLabel
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# _GLF_uniform_int_values
+BUFFER variant__GLF_uniform_int_values DATA_TYPE int32[] STD140 DATA
+ 3 0 1
+END
+# _GLF_uniform_float_values
+BUFFER variant__GLF_uniform_float_values DATA_TYPE float[] STD140 DATA
+ 10.0 1.0 2.0 3.0 4.0
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 16 16
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant__GLF_uniform_int_values AS uniform DESCRIPTOR_SET 0 BINDING 1
+  BIND BUFFER variant__GLF_uniform_float_values AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 16 16
+
+EXPECT variant_framebuffer IDX 0 0 SIZE 16 16 EQ_RGBA 255 0 0 255
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-pow-undefined.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-pow-undefined.amber
new file mode 100644
index 0000000..890ee6f
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-pow-undefined.amber
@@ -0,0 +1,171 @@
+#!amber
+
+# Copyright 2020 Google LLC
+#
+# 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.
+
+
+# A test for a coverage-gap found by the GraphicsFuzz project.
+
+# Short description: A fragment shader that covers specific constant fold and selection dag code paths
+
+# The test passes because the shader always writes red.
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+# variant_fragment_shader is derived from the following GLSL:
+# #version 310 es
+# #define _float_1_0 _GLF_uniform_float_values[0]
+# #define _float_0_0 _GLF_uniform_float_values[1]
+#
+# precision highp float;
+#
+# // Contents of _GLF_uniform_float_values: [1.0, 0.0]
+# layout(set = 0, binding = 0) uniform buf0
+# {
+#     float _GLF_uniform_float_values[2];
+# };
+#
+# layout(location = 0) out vec4 _GLF_color;
+#
+# void main()
+# {
+#     float a = -1.0;
+#     float b = 1.7;
+#
+#     // c becomes undefined since a < 0. This results in an undefined value, but not in undefined behavior.
+#     float c = pow(a, b);
+#
+#     _GLF_color = vec4(c);
+#
+#     if (a == -1.0 && b == 1.7)
+#     {
+#         _GLF_color = vec4(_float_1_0, _float_0_0, _float_0_0, _float_1_0);
+#     }
+#     else
+#     {
+#         _GLF_color = vec4(_float_1_0);
+#     }
+# }
+SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 10
+; Bound: 52
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %18
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 310
+               OpName %4 "main"
+               OpName %8 "a"
+               OpName %10 "b"
+               OpName %12 "c"
+               OpName %18 "_GLF_color"
+               OpName %32 "buf0"
+               OpMemberName %32 0 "_GLF_uniform_float_values"
+               OpName %34 ""
+               OpDecorate %18 Location 0
+               OpDecorate %31 ArrayStride 16
+               OpMemberDecorate %32 0 Offset 0
+               OpDecorate %32 Block
+               OpDecorate %34 DescriptorSet 0
+               OpDecorate %34 Binding 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeFloat 32
+          %7 = OpTypePointer Function %6
+          %9 = OpConstant %6 -1
+         %11 = OpConstant %6 1.70000005
+         %16 = OpTypeVector %6 4
+         %17 = OpTypePointer Output %16
+         %18 = OpVariable %17 Output
+         %22 = OpTypeBool
+         %29 = OpTypeInt 32 0
+         %30 = OpConstant %29 2
+         %31 = OpTypeArray %6 %30
+         %32 = OpTypeStruct %31
+         %33 = OpTypePointer Uniform %32
+         %34 = OpVariable %33 Uniform
+         %35 = OpTypeInt 32 1
+         %36 = OpConstant %35 0
+         %37 = OpTypePointer Uniform %6
+         %40 = OpConstant %35 1
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+          %8 = OpVariable %7 Function
+         %10 = OpVariable %7 Function
+         %12 = OpVariable %7 Function
+               OpStore %8 %9
+               OpStore %10 %11
+         %13 = OpLoad %6 %8
+         %14 = OpLoad %6 %10
+         %15 = OpExtInst %6 %1 Pow %13 %14
+               OpStore %12 %15
+         %19 = OpLoad %6 %12
+         %20 = OpCompositeConstruct %16 %19 %19 %19 %19
+               OpStore %18 %20
+         %21 = OpLoad %6 %8
+         %23 = OpFOrdEqual %22 %21 %9
+         %24 = OpLoad %6 %10
+         %25 = OpFOrdEqual %22 %24 %11
+         %26 = OpLogicalAnd %22 %23 %25
+               OpSelectionMerge %28 None
+               OpBranchConditional %26 %27 %48
+         %27 = OpLabel
+         %38 = OpAccessChain %37 %34 %36 %36
+         %39 = OpLoad %6 %38
+         %41 = OpAccessChain %37 %34 %36 %40
+         %42 = OpLoad %6 %41
+         %43 = OpAccessChain %37 %34 %36 %40
+         %44 = OpLoad %6 %43
+         %45 = OpAccessChain %37 %34 %36 %36
+         %46 = OpLoad %6 %45
+         %47 = OpCompositeConstruct %16 %39 %42 %44 %46
+               OpStore %18 %47
+               OpBranch %28
+         %48 = OpLabel
+         %49 = OpAccessChain %37 %34 %36 %36
+         %50 = OpLoad %6 %49
+         %51 = OpCompositeConstruct %16 %50 %50 %50 %50
+               OpStore %18 %51
+               OpBranch %28
+         %28 = OpLabel
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# _GLF_uniform_float_values
+BUFFER variant__GLF_uniform_float_values DATA_TYPE float[] STD140 DATA
+ 1.0 0.0
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 256 256
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant__GLF_uniform_float_values AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256
+
+EXPECT variant_framebuffer IDX 0 0 SIZE 256 256 EQ_RGBA 255 0 0 255
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-register-coalescer-live-intervals-target-instr-info-for-discard-for-discard.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-register-coalescer-live-intervals-target-instr-info-for-discard-for-discard.amber
new file mode 100644
index 0000000..7bf46aa
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-register-coalescer-live-intervals-target-instr-info-for-discard-for-discard.amber
@@ -0,0 +1,245 @@
+#!amber
+
+# Copyright 2020 Google LLC
+#
+# 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.
+
+
+# A test for a coverage-gap found by the GraphicsFuzz project.
+
+# Short description: Covers register coalescer, live intervals and target instr info code paths
+
+# The test passes because the shader always writes red.
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+# variant_fragment_shader is derived from the following GLSL:
+# #version 310 es
+# #define _int_10 _GLF_uniform_int_values[0]
+# #define _int_0 _GLF_uniform_int_values[1]
+# #define _int_1 _GLF_uniform_int_values[2]
+# #define _float_0_0 _GLF_uniform_float_values[0]
+# #define _float_1_0 _GLF_uniform_float_values[1]
+#
+# precision highp float;
+# precision highp int;
+#
+# // Contents of _GLF_uniform_float_values: [0.0, 1.0]
+# layout(set = 0, binding = 0) uniform buf0
+# {
+#     float _GLF_uniform_float_values[2];
+# };
+#
+# // Contents of _GLF_uniform_int_values: [10, 0, 1]
+# layout(set = 0, binding = 1) uniform buf1
+# {
+#     int _GLF_uniform_int_values[3];
+# };
+#
+# layout(location = 0) out vec4 _GLF_v1;
+#
+# void main()
+# {
+#     for (int i = _int_0; i < _int_10; i++)
+#     {
+#         // Always false.
+#         if (_float_0_0 > _float_1_0)
+#         {
+#             discard;
+#         }
+#         for (int j = _int_0; j < _int_10; j++)
+#         {
+#             // Always false.
+#             if (gl_FragCoord.x < _float_0_0)
+#             {
+#                 discard;
+#             }
+#             _GLF_v1 = vec4(_int_1, _int_0, _int_0, _int_1);
+#         }
+#     }
+# }
+SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 8
+; Bound: 90
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %59 %71
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 310
+               OpName %4 "main"
+               OpName %8 "i"
+               OpName %12 "buf1"
+               OpMemberName %12 0 "_GLF_uniform_int_values"
+               OpName %14 ""
+               OpName %33 "buf0"
+               OpMemberName %33 0 "_GLF_uniform_float_values"
+               OpName %35 ""
+               OpName %45 "j"
+               OpName %59 "gl_FragCoord"
+               OpName %71 "_GLF_v1"
+               OpDecorate %11 ArrayStride 16
+               OpMemberDecorate %12 0 Offset 0
+               OpDecorate %12 Block
+               OpDecorate %14 DescriptorSet 0
+               OpDecorate %14 Binding 1
+               OpDecorate %32 ArrayStride 16
+               OpMemberDecorate %33 0 Offset 0
+               OpDecorate %33 Block
+               OpDecorate %35 DescriptorSet 0
+               OpDecorate %35 Binding 0
+               OpDecorate %59 BuiltIn FragCoord
+               OpDecorate %71 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeInt 32 1
+          %7 = OpTypePointer Function %6
+          %9 = OpTypeInt 32 0
+         %10 = OpConstant %9 3
+         %11 = OpTypeArray %6 %10
+         %12 = OpTypeStruct %11
+         %13 = OpTypePointer Uniform %12
+         %14 = OpVariable %13 Uniform
+         %15 = OpConstant %6 0
+         %16 = OpConstant %6 1
+         %17 = OpTypePointer Uniform %6
+         %28 = OpTypeBool
+         %30 = OpTypeFloat 32
+         %31 = OpConstant %9 2
+         %32 = OpTypeArray %30 %31
+         %33 = OpTypeStruct %32
+         %34 = OpTypePointer Uniform %33
+         %35 = OpVariable %34 Uniform
+         %36 = OpTypePointer Uniform %30
+         %57 = OpTypeVector %30 4
+         %58 = OpTypePointer Input %57
+         %59 = OpVariable %58 Input
+         %60 = OpConstant %9 0
+         %61 = OpTypePointer Input %30
+         %70 = OpTypePointer Output %57
+         %71 = OpVariable %70 Output
+         %72 = OpConstant %6 2
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+          %8 = OpVariable %7 Function
+         %45 = OpVariable %7 Function
+         %18 = OpAccessChain %17 %14 %15 %16
+         %19 = OpLoad %6 %18
+               OpStore %8 %19
+               OpBranch %20
+         %20 = OpLabel
+               OpLoopMerge %22 %23 None
+               OpBranch %24
+         %24 = OpLabel
+         %25 = OpLoad %6 %8
+         %26 = OpAccessChain %17 %14 %15 %15
+         %27 = OpLoad %6 %26
+         %29 = OpSLessThan %28 %25 %27
+               OpBranchConditional %29 %21 %22
+         %21 = OpLabel
+         %37 = OpAccessChain %36 %35 %15 %15
+         %38 = OpLoad %30 %37
+         %39 = OpAccessChain %36 %35 %15 %16
+         %40 = OpLoad %30 %39
+         %41 = OpFOrdGreaterThan %28 %38 %40
+               OpSelectionMerge %43 None
+               OpBranchConditional %41 %42 %43
+         %42 = OpLabel
+               OpKill
+         %43 = OpLabel
+         %46 = OpAccessChain %17 %14 %15 %16
+         %47 = OpLoad %6 %46
+               OpStore %45 %47
+               OpBranch %48
+         %48 = OpLabel
+               OpLoopMerge %50 %51 None
+               OpBranch %52
+         %52 = OpLabel
+         %53 = OpLoad %6 %45
+         %54 = OpAccessChain %17 %14 %15 %15
+         %55 = OpLoad %6 %54
+         %56 = OpSLessThan %28 %53 %55
+               OpBranchConditional %56 %49 %50
+         %49 = OpLabel
+         %62 = OpAccessChain %61 %59 %60
+         %63 = OpLoad %30 %62
+         %64 = OpAccessChain %36 %35 %15 %15
+         %65 = OpLoad %30 %64
+         %66 = OpFOrdLessThan %28 %63 %65
+               OpSelectionMerge %68 None
+               OpBranchConditional %66 %67 %68
+         %67 = OpLabel
+               OpKill
+         %68 = OpLabel
+         %73 = OpAccessChain %17 %14 %15 %72
+         %74 = OpLoad %6 %73
+         %75 = OpConvertSToF %30 %74
+         %76 = OpAccessChain %17 %14 %15 %16
+         %77 = OpLoad %6 %76
+         %78 = OpConvertSToF %30 %77
+         %79 = OpAccessChain %17 %14 %15 %16
+         %80 = OpLoad %6 %79
+         %81 = OpConvertSToF %30 %80
+         %82 = OpAccessChain %17 %14 %15 %72
+         %83 = OpLoad %6 %82
+         %84 = OpConvertSToF %30 %83
+         %85 = OpCompositeConstruct %57 %75 %78 %81 %84
+               OpStore %71 %85
+               OpBranch %51
+         %51 = OpLabel
+         %86 = OpLoad %6 %45
+         %87 = OpIAdd %6 %86 %16
+               OpStore %45 %87
+               OpBranch %48
+         %50 = OpLabel
+               OpBranch %23
+         %23 = OpLabel
+         %88 = OpLoad %6 %8
+         %89 = OpIAdd %6 %88 %16
+               OpStore %8 %89
+               OpBranch %20
+         %22 = OpLabel
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# _GLF_uniform_int_values
+BUFFER variant__GLF_uniform_int_values DATA_TYPE int32[] STD140 DATA
+ 10 0 1
+END
+# _GLF_uniform_float_values
+BUFFER variant__GLF_uniform_float_values DATA_TYPE float[] STD140 DATA
+ 0.0 1.0
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 256 256
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant__GLF_uniform_int_values AS uniform DESCRIPTOR_SET 0 BINDING 1
+  BIND BUFFER variant__GLF_uniform_float_values AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256
+
+EXPECT variant_framebuffer IDX 0 0 SIZE 256 256 EQ_RGBA 255 0 0 255
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-return-after-do-while.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-return-after-do-while.amber
new file mode 100644
index 0000000..8c658a1
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-return-after-do-while.amber
@@ -0,0 +1,168 @@
+#!amber
+
+# Copyright 2020 Google LLC
+#
+# 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.
+
+
+# A test for a coverage-gap found by the GraphicsFuzz project.
+
+# Short description: A fragment shader that covers a specific simplify cfg code path
+
+# The test passes because the shader always writes red.
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+# variant_fragment_shader is derived from the following GLSL:
+# #version 310 es
+# #define _int_1 _GLF_uniform_int_values[0]
+# #define _int_0 _GLF_uniform_int_values[1]
+#
+# precision highp float;
+# precision highp int;
+#
+# // Contents of _GLF_uniform_int_values: [1, 0]
+# layout(set = 0, binding = 0) uniform buf1
+# {
+#     int _GLF_uniform_int_values[2];
+# };
+#
+# layout(location = 0) out vec4 _GLF_color;
+#
+# void main()
+# {
+#     _GLF_color = vec4(_int_1, _int_0, _int_0, _int_1);
+#
+#     // Always false.
+#     if(_int_0 > _int_1)
+#     {
+#         do
+#         {
+#             _GLF_color = vec4(_int_1);
+#         }
+#         while(_int_0 > _int_1);
+#
+#         return;
+#     }
+# }
+SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 10
+; Bound: 55
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %9
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 310
+               OpName %4 "main"
+               OpName %9 "_GLF_color"
+               OpName %14 "buf1"
+               OpMemberName %14 0 "_GLF_uniform_int_values"
+               OpName %16 ""
+               OpDecorate %9 Location 0
+               OpDecorate %13 ArrayStride 16
+               OpMemberDecorate %14 0 Offset 0
+               OpDecorate %14 Block
+               OpDecorate %16 DescriptorSet 0
+               OpDecorate %16 Binding 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeFloat 32
+          %7 = OpTypeVector %6 4
+          %8 = OpTypePointer Output %7
+          %9 = OpVariable %8 Output
+         %10 = OpTypeInt 32 1
+         %11 = OpTypeInt 32 0
+         %12 = OpConstant %11 2
+         %13 = OpTypeArray %10 %12
+         %14 = OpTypeStruct %13
+         %15 = OpTypePointer Uniform %14
+         %16 = OpVariable %15 Uniform
+         %17 = OpConstant %10 0
+         %18 = OpTypePointer Uniform %10
+         %22 = OpConstant %10 1
+         %37 = OpTypeBool
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+         %19 = OpAccessChain %18 %16 %17 %17
+         %20 = OpLoad %10 %19
+         %21 = OpConvertSToF %6 %20
+         %23 = OpAccessChain %18 %16 %17 %22
+         %24 = OpLoad %10 %23
+         %25 = OpConvertSToF %6 %24
+         %26 = OpAccessChain %18 %16 %17 %22
+         %27 = OpLoad %10 %26
+         %28 = OpConvertSToF %6 %27
+         %29 = OpAccessChain %18 %16 %17 %17
+         %30 = OpLoad %10 %29
+         %31 = OpConvertSToF %6 %30
+         %32 = OpCompositeConstruct %7 %21 %25 %28 %31
+               OpStore %9 %32
+         %33 = OpAccessChain %18 %16 %17 %22
+         %34 = OpLoad %10 %33
+         %35 = OpAccessChain %18 %16 %17 %17
+         %36 = OpLoad %10 %35
+         %38 = OpSGreaterThan %37 %34 %36
+               OpSelectionMerge %40 None
+               OpBranchConditional %38 %39 %40
+         %39 = OpLabel
+               OpBranch %41
+         %41 = OpLabel
+               OpLoopMerge %43 %44 None
+               OpBranch %42
+         %42 = OpLabel
+         %45 = OpAccessChain %18 %16 %17 %17
+         %46 = OpLoad %10 %45
+         %47 = OpConvertSToF %6 %46
+         %48 = OpCompositeConstruct %7 %47 %47 %47 %47
+               OpStore %9 %48
+               OpBranch %44
+         %44 = OpLabel
+         %49 = OpAccessChain %18 %16 %17 %22
+         %50 = OpLoad %10 %49
+         %51 = OpAccessChain %18 %16 %17 %17
+         %52 = OpLoad %10 %51
+         %53 = OpSGreaterThan %37 %50 %52
+               OpBranchConditional %53 %41 %43
+         %43 = OpLabel
+               OpReturn
+         %40 = OpLabel
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# _GLF_uniform_int_values
+BUFFER variant__GLF_uniform_int_values DATA_TYPE int32[] STD140 DATA
+ 1 0
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 16 16
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant__GLF_uniform_int_values AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 16 16
+
+EXPECT variant_framebuffer IDX 0 0 SIZE 16 16 EQ_RGBA 255 0 0 255
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-scaled-number-nested-loops-array-access.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-scaled-number-nested-loops-array-access.amber
new file mode 100644
index 0000000..d847094
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-scaled-number-nested-loops-array-access.amber
@@ -0,0 +1,545 @@
+#!amber
+
+# Copyright 2020 Google LLC
+#
+# 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.
+
+
+# A test for a coverage-gap found by the GraphicsFuzz project.
+
+# Short description: A fragment shader that covers a specific scaled number path
+
+# The test passes because the shader always writes red.
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+# variant_fragment_shader is derived from the following GLSL:
+# #version 310 es
+# #define _int_2 _GLF_uniform_int_values[0]
+# #define _int_0 _GLF_uniform_int_values[1]
+# #define _int_1 _GLF_uniform_int_values[2]
+# #define _int_12 _GLF_uniform_int_values[3]
+# #define _int_4 _GLF_uniform_int_values[4]
+# #define _int_8 _GLF_uniform_int_values[5]
+# #define _int_3 _GLF_uniform_int_values[6]
+# #define _float_0_0 _GLF_uniform_float_values[0]
+# #define _float_6912_0 _GLF_uniform_float_values[1]
+# #define _float_1_0 _GLF_uniform_float_values[2]
+#
+# precision highp float;
+#
+# // Contents of _GLF_uniform_int_values: [2, 0, 1, 12, 4, 8, 3]
+# layout(set = 0, binding = 0) uniform buf0 {
+#     int _GLF_uniform_int_values[7];
+# };
+# // Contents of _GLF_uniform_float_values: [0.0, 6912.0, 1.0]
+# layout(set = 0, binding = 1) uniform buf1 {
+#     float _GLF_uniform_float_values[3];
+# };
+# layout(location = 0) out vec4 _GLF_color;
+#
+# void main()
+# {
+#     float sums[2];
+#     sums[_int_0] = _float_0_0;
+#     sums[_int_1] = _float_0_0;
+#
+#     for(int a = _int_0; a < _int_2; a ++)
+#         for(int b = _int_8; b < _int_12; b ++) // Loops 4 times.
+#             for(int c = _int_3; c <= _int_4; c ++) // Loops 2 times.
+#                 for(int d = _int_0; d < _int_3; d ++) // Loops 3 times.
+#                     for(int e = _int_2; e <= _int_4; e ++) // Loops 3 times.
+#                         for(int f = _int_0; f < _int_2; f ++) // Loops 2 times.
+#                             for(int g = _int_0; g < _int_3; g ++) // Loops 3 times.
+#                                 for(int h = _int_0; h < _int_2; h ++) // Loops 2 times.
+#                                     for(int i = _int_0; i < _int_4; i ++) // Loops 4 times.
+#                                         for(int j = _int_2; j > _int_0; j --) // Loops 2 times.
+#                                         {
+#                                             sums[a] += _float_1_0;
+#                                         }
+#
+#     if(sums[_int_0] == _float_6912_0 && sums[_int_1] == _float_6912_0)
+#     {
+#         _GLF_color = vec4(_int_1, _int_0, _int_0, _int_1);
+#     }
+#     else
+#     {
+#         _GLF_color = vec4(_int_0);
+#     }
+# }
+SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 8
+; Bound: 232
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %213
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 310
+               OpName %4 "main"
+               OpName %11 "sums"
+               OpName %15 "buf0"
+               OpMemberName %15 0 "_GLF_uniform_int_values"
+               OpName %17 ""
+               OpName %25 "buf1"
+               OpMemberName %25 0 "_GLF_uniform_float_values"
+               OpName %27 ""
+               OpName %40 "a"
+               OpName %53 "b"
+               OpName %67 "c"
+               OpName %81 "d"
+               OpName %93 "e"
+               OpName %105 "f"
+               OpName %117 "g"
+               OpName %129 "h"
+               OpName %141 "i"
+               OpName %153 "j"
+               OpName %213 "_GLF_color"
+               OpDecorate %14 ArrayStride 16
+               OpMemberDecorate %15 0 RelaxedPrecision
+               OpMemberDecorate %15 0 Offset 0
+               OpDecorate %15 Block
+               OpDecorate %17 DescriptorSet 0
+               OpDecorate %17 Binding 0
+               OpDecorate %22 RelaxedPrecision
+               OpDecorate %24 ArrayStride 16
+               OpMemberDecorate %25 0 Offset 0
+               OpDecorate %25 Block
+               OpDecorate %27 DescriptorSet 0
+               OpDecorate %27 Binding 1
+               OpDecorate %35 RelaxedPrecision
+               OpDecorate %40 RelaxedPrecision
+               OpDecorate %42 RelaxedPrecision
+               OpDecorate %48 RelaxedPrecision
+               OpDecorate %50 RelaxedPrecision
+               OpDecorate %53 RelaxedPrecision
+               OpDecorate %56 RelaxedPrecision
+               OpDecorate %62 RelaxedPrecision
+               OpDecorate %65 RelaxedPrecision
+               OpDecorate %67 RelaxedPrecision
+               OpDecorate %70 RelaxedPrecision
+               OpDecorate %76 RelaxedPrecision
+               OpDecorate %79 RelaxedPrecision
+               OpDecorate %81 RelaxedPrecision
+               OpDecorate %83 RelaxedPrecision
+               OpDecorate %89 RelaxedPrecision
+               OpDecorate %91 RelaxedPrecision
+               OpDecorate %93 RelaxedPrecision
+               OpDecorate %95 RelaxedPrecision
+               OpDecorate %101 RelaxedPrecision
+               OpDecorate %103 RelaxedPrecision
+               OpDecorate %105 RelaxedPrecision
+               OpDecorate %107 RelaxedPrecision
+               OpDecorate %113 RelaxedPrecision
+               OpDecorate %115 RelaxedPrecision
+               OpDecorate %117 RelaxedPrecision
+               OpDecorate %119 RelaxedPrecision
+               OpDecorate %125 RelaxedPrecision
+               OpDecorate %127 RelaxedPrecision
+               OpDecorate %129 RelaxedPrecision
+               OpDecorate %131 RelaxedPrecision
+               OpDecorate %137 RelaxedPrecision
+               OpDecorate %139 RelaxedPrecision
+               OpDecorate %141 RelaxedPrecision
+               OpDecorate %143 RelaxedPrecision
+               OpDecorate %149 RelaxedPrecision
+               OpDecorate %151 RelaxedPrecision
+               OpDecorate %153 RelaxedPrecision
+               OpDecorate %155 RelaxedPrecision
+               OpDecorate %161 RelaxedPrecision
+               OpDecorate %163 RelaxedPrecision
+               OpDecorate %165 RelaxedPrecision
+               OpDecorate %172 RelaxedPrecision
+               OpDecorate %173 RelaxedPrecision
+               OpDecorate %174 RelaxedPrecision
+               OpDecorate %175 RelaxedPrecision
+               OpDecorate %176 RelaxedPrecision
+               OpDecorate %177 RelaxedPrecision
+               OpDecorate %178 RelaxedPrecision
+               OpDecorate %179 RelaxedPrecision
+               OpDecorate %180 RelaxedPrecision
+               OpDecorate %181 RelaxedPrecision
+               OpDecorate %182 RelaxedPrecision
+               OpDecorate %183 RelaxedPrecision
+               OpDecorate %184 RelaxedPrecision
+               OpDecorate %185 RelaxedPrecision
+               OpDecorate %186 RelaxedPrecision
+               OpDecorate %187 RelaxedPrecision
+               OpDecorate %188 RelaxedPrecision
+               OpDecorate %189 RelaxedPrecision
+               OpDecorate %190 RelaxedPrecision
+               OpDecorate %191 RelaxedPrecision
+               OpDecorate %193 RelaxedPrecision
+               OpDecorate %202 RelaxedPrecision
+               OpDecorate %213 Location 0
+               OpDecorate %215 RelaxedPrecision
+               OpDecorate %218 RelaxedPrecision
+               OpDecorate %221 RelaxedPrecision
+               OpDecorate %224 RelaxedPrecision
+               OpDecorate %229 RelaxedPrecision
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeFloat 32
+          %7 = OpTypeInt 32 0
+          %8 = OpConstant %7 2
+          %9 = OpTypeArray %6 %8
+         %10 = OpTypePointer Function %9
+         %12 = OpTypeInt 32 1
+         %13 = OpConstant %7 7
+         %14 = OpTypeArray %12 %13
+         %15 = OpTypeStruct %14
+         %16 = OpTypePointer Uniform %15
+         %17 = OpVariable %16 Uniform
+         %18 = OpConstant %12 0
+         %19 = OpConstant %12 1
+         %20 = OpTypePointer Uniform %12
+         %23 = OpConstant %7 3
+         %24 = OpTypeArray %6 %23
+         %25 = OpTypeStruct %24
+         %26 = OpTypePointer Uniform %25
+         %27 = OpVariable %26 Uniform
+         %28 = OpTypePointer Uniform %6
+         %31 = OpTypePointer Function %6
+         %33 = OpConstant %12 2
+         %39 = OpTypePointer Function %12
+         %51 = OpTypeBool
+         %54 = OpConstant %12 5
+         %63 = OpConstant %12 3
+         %68 = OpConstant %12 6
+         %77 = OpConstant %12 4
+        %211 = OpTypeVector %6 4
+        %212 = OpTypePointer Output %211
+        %213 = OpVariable %212 Output
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+         %11 = OpVariable %10 Function
+         %40 = OpVariable %39 Function
+         %53 = OpVariable %39 Function
+         %67 = OpVariable %39 Function
+         %81 = OpVariable %39 Function
+         %93 = OpVariable %39 Function
+        %105 = OpVariable %39 Function
+        %117 = OpVariable %39 Function
+        %129 = OpVariable %39 Function
+        %141 = OpVariable %39 Function
+        %153 = OpVariable %39 Function
+         %21 = OpAccessChain %20 %17 %18 %19
+         %22 = OpLoad %12 %21
+         %29 = OpAccessChain %28 %27 %18 %18
+         %30 = OpLoad %6 %29
+         %32 = OpAccessChain %31 %11 %22
+               OpStore %32 %30
+         %34 = OpAccessChain %20 %17 %18 %33
+         %35 = OpLoad %12 %34
+         %36 = OpAccessChain %28 %27 %18 %18
+         %37 = OpLoad %6 %36
+         %38 = OpAccessChain %31 %11 %35
+               OpStore %38 %37
+         %41 = OpAccessChain %20 %17 %18 %19
+         %42 = OpLoad %12 %41
+               OpStore %40 %42
+               OpBranch %43
+         %43 = OpLabel
+               OpLoopMerge %45 %46 None
+               OpBranch %47
+         %47 = OpLabel
+         %48 = OpLoad %12 %40
+         %49 = OpAccessChain %20 %17 %18 %18
+         %50 = OpLoad %12 %49
+         %52 = OpSLessThan %51 %48 %50
+               OpBranchConditional %52 %44 %45
+         %44 = OpLabel
+         %55 = OpAccessChain %20 %17 %18 %54
+         %56 = OpLoad %12 %55
+               OpStore %53 %56
+               OpBranch %57
+         %57 = OpLabel
+               OpLoopMerge %59 %60 None
+               OpBranch %61
+         %61 = OpLabel
+         %62 = OpLoad %12 %53
+         %64 = OpAccessChain %20 %17 %18 %63
+         %65 = OpLoad %12 %64
+         %66 = OpSLessThan %51 %62 %65
+               OpBranchConditional %66 %58 %59
+         %58 = OpLabel
+         %69 = OpAccessChain %20 %17 %18 %68
+         %70 = OpLoad %12 %69
+               OpStore %67 %70
+               OpBranch %71
+         %71 = OpLabel
+               OpLoopMerge %73 %74 None
+               OpBranch %75
+         %75 = OpLabel
+         %76 = OpLoad %12 %67
+         %78 = OpAccessChain %20 %17 %18 %77
+         %79 = OpLoad %12 %78
+         %80 = OpSLessThanEqual %51 %76 %79
+               OpBranchConditional %80 %72 %73
+         %72 = OpLabel
+         %82 = OpAccessChain %20 %17 %18 %19
+         %83 = OpLoad %12 %82
+               OpStore %81 %83
+               OpBranch %84
+         %84 = OpLabel
+               OpLoopMerge %86 %87 None
+               OpBranch %88
+         %88 = OpLabel
+         %89 = OpLoad %12 %81
+         %90 = OpAccessChain %20 %17 %18 %68
+         %91 = OpLoad %12 %90
+         %92 = OpSLessThan %51 %89 %91
+               OpBranchConditional %92 %85 %86
+         %85 = OpLabel
+         %94 = OpAccessChain %20 %17 %18 %18
+         %95 = OpLoad %12 %94
+               OpStore %93 %95
+               OpBranch %96
+         %96 = OpLabel
+               OpLoopMerge %98 %99 None
+               OpBranch %100
+        %100 = OpLabel
+        %101 = OpLoad %12 %93
+        %102 = OpAccessChain %20 %17 %18 %77
+        %103 = OpLoad %12 %102
+        %104 = OpSLessThanEqual %51 %101 %103
+               OpBranchConditional %104 %97 %98
+         %97 = OpLabel
+        %106 = OpAccessChain %20 %17 %18 %19
+        %107 = OpLoad %12 %106
+               OpStore %105 %107
+               OpBranch %108
+        %108 = OpLabel
+               OpLoopMerge %110 %111 None
+               OpBranch %112
+        %112 = OpLabel
+        %113 = OpLoad %12 %105
+        %114 = OpAccessChain %20 %17 %18 %18
+        %115 = OpLoad %12 %114
+        %116 = OpSLessThan %51 %113 %115
+               OpBranchConditional %116 %109 %110
+        %109 = OpLabel
+        %118 = OpAccessChain %20 %17 %18 %19
+        %119 = OpLoad %12 %118
+               OpStore %117 %119
+               OpBranch %120
+        %120 = OpLabel
+               OpLoopMerge %122 %123 None
+               OpBranch %124
+        %124 = OpLabel
+        %125 = OpLoad %12 %117
+        %126 = OpAccessChain %20 %17 %18 %68
+        %127 = OpLoad %12 %126
+        %128 = OpSLessThan %51 %125 %127
+               OpBranchConditional %128 %121 %122
+        %121 = OpLabel
+        %130 = OpAccessChain %20 %17 %18 %19
+        %131 = OpLoad %12 %130
+               OpStore %129 %131
+               OpBranch %132
+        %132 = OpLabel
+               OpLoopMerge %134 %135 None
+               OpBranch %136
+        %136 = OpLabel
+        %137 = OpLoad %12 %129
+        %138 = OpAccessChain %20 %17 %18 %18
+        %139 = OpLoad %12 %138
+        %140 = OpSLessThan %51 %137 %139
+               OpBranchConditional %140 %133 %134
+        %133 = OpLabel
+        %142 = OpAccessChain %20 %17 %18 %19
+        %143 = OpLoad %12 %142
+               OpStore %141 %143
+               OpBranch %144
+        %144 = OpLabel
+               OpLoopMerge %146 %147 None
+               OpBranch %148
+        %148 = OpLabel
+        %149 = OpLoad %12 %141
+        %150 = OpAccessChain %20 %17 %18 %77
+        %151 = OpLoad %12 %150
+        %152 = OpSLessThan %51 %149 %151
+               OpBranchConditional %152 %145 %146
+        %145 = OpLabel
+        %154 = OpAccessChain %20 %17 %18 %18
+        %155 = OpLoad %12 %154
+               OpStore %153 %155
+               OpBranch %156
+        %156 = OpLabel
+               OpLoopMerge %158 %159 None
+               OpBranch %160
+        %160 = OpLabel
+        %161 = OpLoad %12 %153
+        %162 = OpAccessChain %20 %17 %18 %19
+        %163 = OpLoad %12 %162
+        %164 = OpSGreaterThan %51 %161 %163
+               OpBranchConditional %164 %157 %158
+        %157 = OpLabel
+        %165 = OpLoad %12 %40
+        %166 = OpAccessChain %28 %27 %18 %33
+        %167 = OpLoad %6 %166
+        %168 = OpAccessChain %31 %11 %165
+        %169 = OpLoad %6 %168
+        %170 = OpFAdd %6 %169 %167
+        %171 = OpAccessChain %31 %11 %165
+               OpStore %171 %170
+               OpBranch %159
+        %159 = OpLabel
+        %172 = OpLoad %12 %153
+        %173 = OpISub %12 %172 %19
+               OpStore %153 %173
+               OpBranch %156
+        %158 = OpLabel
+               OpBranch %147
+        %147 = OpLabel
+        %174 = OpLoad %12 %141
+        %175 = OpIAdd %12 %174 %19
+               OpStore %141 %175
+               OpBranch %144
+        %146 = OpLabel
+               OpBranch %135
+        %135 = OpLabel
+        %176 = OpLoad %12 %129
+        %177 = OpIAdd %12 %176 %19
+               OpStore %129 %177
+               OpBranch %132
+        %134 = OpLabel
+               OpBranch %123
+        %123 = OpLabel
+        %178 = OpLoad %12 %117
+        %179 = OpIAdd %12 %178 %19
+               OpStore %117 %179
+               OpBranch %120
+        %122 = OpLabel
+               OpBranch %111
+        %111 = OpLabel
+        %180 = OpLoad %12 %105
+        %181 = OpIAdd %12 %180 %19
+               OpStore %105 %181
+               OpBranch %108
+        %110 = OpLabel
+               OpBranch %99
+         %99 = OpLabel
+        %182 = OpLoad %12 %93
+        %183 = OpIAdd %12 %182 %19
+               OpStore %93 %183
+               OpBranch %96
+         %98 = OpLabel
+               OpBranch %87
+         %87 = OpLabel
+        %184 = OpLoad %12 %81
+        %185 = OpIAdd %12 %184 %19
+               OpStore %81 %185
+               OpBranch %84
+         %86 = OpLabel
+               OpBranch %74
+         %74 = OpLabel
+        %186 = OpLoad %12 %67
+        %187 = OpIAdd %12 %186 %19
+               OpStore %67 %187
+               OpBranch %71
+         %73 = OpLabel
+               OpBranch %60
+         %60 = OpLabel
+        %188 = OpLoad %12 %53
+        %189 = OpIAdd %12 %188 %19
+               OpStore %53 %189
+               OpBranch %57
+         %59 = OpLabel
+               OpBranch %46
+         %46 = OpLabel
+        %190 = OpLoad %12 %40
+        %191 = OpIAdd %12 %190 %19
+               OpStore %40 %191
+               OpBranch %43
+         %45 = OpLabel
+        %192 = OpAccessChain %20 %17 %18 %19
+        %193 = OpLoad %12 %192
+        %194 = OpAccessChain %31 %11 %193
+        %195 = OpLoad %6 %194
+        %196 = OpAccessChain %28 %27 %18 %19
+        %197 = OpLoad %6 %196
+        %198 = OpFOrdEqual %51 %195 %197
+               OpSelectionMerge %200 None
+               OpBranchConditional %198 %199 %200
+        %199 = OpLabel
+        %201 = OpAccessChain %20 %17 %18 %33
+        %202 = OpLoad %12 %201
+        %203 = OpAccessChain %31 %11 %202
+        %204 = OpLoad %6 %203
+        %205 = OpAccessChain %28 %27 %18 %19
+        %206 = OpLoad %6 %205
+        %207 = OpFOrdEqual %51 %204 %206
+               OpBranch %200
+        %200 = OpLabel
+        %208 = OpPhi %51 %198 %45 %207 %199
+               OpSelectionMerge %210 None
+               OpBranchConditional %208 %209 %227
+        %209 = OpLabel
+        %214 = OpAccessChain %20 %17 %18 %33
+        %215 = OpLoad %12 %214
+        %216 = OpConvertSToF %6 %215
+        %217 = OpAccessChain %20 %17 %18 %19
+        %218 = OpLoad %12 %217
+        %219 = OpConvertSToF %6 %218
+        %220 = OpAccessChain %20 %17 %18 %19
+        %221 = OpLoad %12 %220
+        %222 = OpConvertSToF %6 %221
+        %223 = OpAccessChain %20 %17 %18 %33
+        %224 = OpLoad %12 %223
+        %225 = OpConvertSToF %6 %224
+        %226 = OpCompositeConstruct %211 %216 %219 %222 %225
+               OpStore %213 %226
+               OpBranch %210
+        %227 = OpLabel
+        %228 = OpAccessChain %20 %17 %18 %19
+        %229 = OpLoad %12 %228
+        %230 = OpConvertSToF %6 %229
+        %231 = OpCompositeConstruct %211 %230 %230 %230 %230
+               OpStore %213 %231
+               OpBranch %210
+        %210 = OpLabel
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# _GLF_uniform_float_values
+BUFFER variant__GLF_uniform_float_values DATA_TYPE float[] STD140 DATA
+ 0.0 6912.0 1.0
+END
+# _GLF_uniform_int_values
+BUFFER variant__GLF_uniform_int_values DATA_TYPE int32[] STD140 DATA
+ 2 0 1 12 4 8 3
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 16 16
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant__GLF_uniform_float_values AS uniform DESCRIPTOR_SET 0 BINDING 1
+  BIND BUFFER variant__GLF_uniform_int_values AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 16 16
+
+EXPECT variant_framebuffer IDX 0 0 SIZE 16 16 EQ_RGBA 255 0 0 255
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-schedule-dag-rrlist-mix-log-cos.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-schedule-dag-rrlist-mix-log-cos.amber
new file mode 100644
index 0000000..690abbc
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-schedule-dag-rrlist-mix-log-cos.amber
@@ -0,0 +1,180 @@
+#!amber
+
+# Copyright 2020 Google LLC
+#
+# 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.
+
+
+# A test for a coverage-gap found by the GraphicsFuzz project.
+
+# Short description: Covers a specific schedule dag register reduction list code path
+
+# The test passes because the shader always writes red.
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+# variant_fragment_shader is derived from the following GLSL:
+# #version 310 es
+# #define _float_0_0446 _GLF_uniform_float_values[0]
+# #define _float_0_0448 _GLF_uniform_float_values[1]
+# #define _float_4_6 _GLF_uniform_float_values[2]
+# #define _float_1_0 _GLF_uniform_float_values[3]
+# #define _float_0_0 _GLF_uniform_float_values[4]
+#
+# precision highp float;
+#
+# // Contents of _GLF_uniform_float_values: [0.0446, 0.0448, 4.6, 1.0, 0.0]
+# layout(set = 0, binding = 0) uniform buf0
+# {
+#     float _GLF_uniform_float_values[5];
+# };
+#
+# layout(location = 0) out vec4 _GLF_color;
+#
+# void main()
+# {
+#     // a becomes 4.6.
+#     float a = mix(_float_4_6, _float_1_0, _float_1_0 > _float_4_6);
+#
+#     float b = cos(log(a));
+#
+#     _GLF_color = vec4(b);
+#
+#     if (b > _float_0_0446 && b < _float_0_0448)
+#     {
+#         _GLF_color = vec4(_float_1_0, _float_0_0, _float_0_0, _float_1_0);
+#     }
+# }
+SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 10
+; Bound: 64
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %37
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 310
+               OpName %4 "main"
+               OpName %8 "a"
+               OpName %12 "buf0"
+               OpMemberName %12 0 "_GLF_uniform_float_values"
+               OpName %14 ""
+               OpName %31 "b"
+               OpName %37 "_GLF_color"
+               OpDecorate %11 ArrayStride 16
+               OpMemberDecorate %12 0 Offset 0
+               OpDecorate %12 Block
+               OpDecorate %14 DescriptorSet 0
+               OpDecorate %14 Binding 0
+               OpDecorate %37 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeFloat 32
+          %7 = OpTypePointer Function %6
+          %9 = OpTypeInt 32 0
+         %10 = OpConstant %9 5
+         %11 = OpTypeArray %6 %10
+         %12 = OpTypeStruct %11
+         %13 = OpTypePointer Uniform %12
+         %14 = OpVariable %13 Uniform
+         %15 = OpTypeInt 32 1
+         %16 = OpConstant %15 0
+         %17 = OpConstant %15 2
+         %18 = OpTypePointer Uniform %6
+         %21 = OpConstant %15 3
+         %28 = OpTypeBool
+         %35 = OpTypeVector %6 4
+         %36 = OpTypePointer Output %35
+         %37 = OpVariable %36 Output
+         %47 = OpConstant %15 1
+         %56 = OpConstant %15 4
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+          %8 = OpVariable %7 Function
+         %31 = OpVariable %7 Function
+         %19 = OpAccessChain %18 %14 %16 %17
+         %20 = OpLoad %6 %19
+         %22 = OpAccessChain %18 %14 %16 %21
+         %23 = OpLoad %6 %22
+         %24 = OpAccessChain %18 %14 %16 %21
+         %25 = OpLoad %6 %24
+         %26 = OpAccessChain %18 %14 %16 %17
+         %27 = OpLoad %6 %26
+         %29 = OpFOrdGreaterThan %28 %25 %27
+         %30 = OpSelect %6 %29 %23 %20
+               OpStore %8 %30
+         %32 = OpLoad %6 %8
+         %33 = OpExtInst %6 %1 Log %32
+         %34 = OpExtInst %6 %1 Cos %33
+               OpStore %31 %34
+         %38 = OpLoad %6 %31
+         %39 = OpCompositeConstruct %35 %38 %38 %38 %38
+               OpStore %37 %39
+         %40 = OpLoad %6 %31
+         %41 = OpAccessChain %18 %14 %16 %16
+         %42 = OpLoad %6 %41
+         %43 = OpFOrdGreaterThan %28 %40 %42
+               OpSelectionMerge %45 None
+               OpBranchConditional %43 %44 %45
+         %44 = OpLabel
+         %46 = OpLoad %6 %31
+         %48 = OpAccessChain %18 %14 %16 %47
+         %49 = OpLoad %6 %48
+         %50 = OpFOrdLessThan %28 %46 %49
+               OpBranch %45
+         %45 = OpLabel
+         %51 = OpPhi %28 %43 %5 %50 %44
+               OpSelectionMerge %53 None
+               OpBranchConditional %51 %52 %53
+         %52 = OpLabel
+         %54 = OpAccessChain %18 %14 %16 %21
+         %55 = OpLoad %6 %54
+         %57 = OpAccessChain %18 %14 %16 %56
+         %58 = OpLoad %6 %57
+         %59 = OpAccessChain %18 %14 %16 %56
+         %60 = OpLoad %6 %59
+         %61 = OpAccessChain %18 %14 %16 %21
+         %62 = OpLoad %6 %61
+         %63 = OpCompositeConstruct %35 %55 %58 %60 %62
+               OpStore %37 %63
+               OpBranch %53
+         %53 = OpLabel
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# _GLF_uniform_float_values
+BUFFER variant__GLF_uniform_float_values DATA_TYPE float[] STD140 DATA
+ 0.0446 0.0448 4.6 1.0 0.0
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 16 16
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant__GLF_uniform_float_values AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 16 16
+
+EXPECT variant_framebuffer IDX 0 0 SIZE 16 16 EQ_RGBA 255 0 0 255
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-selection-dag-inverse-clamp.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-selection-dag-inverse-clamp.amber
new file mode 100644
index 0000000..a832438
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-selection-dag-inverse-clamp.amber
@@ -0,0 +1,194 @@
+#!amber
+
+# Copyright 2020 Google LLC
+#
+# 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.
+
+
+# A test for a coverage-gap found by the GraphicsFuzz project.
+
+# Short description: A fragment shader that covers a specific selection DAG code path
+
+# The test passes because the shader always writes red.
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+# variant_fragment_shader is derived from the following GLSL:
+# #version 310 es
+# #define _int_10 _GLF_uniform_int_values[0]
+# #define _int_0 _GLF_uniform_int_values[1]
+# #define _int_1 _GLF_uniform_int_values[2]
+#
+# precision highp int;
+#
+# precision highp float;
+#
+# // Contents of _GLF_uniform_int_values: [10, 0, 1]
+# layout(set = 0, binding = 0) uniform buf0
+# {
+#     int _GLF_uniform_int_values[3];
+# };
+#
+# layout(location = 0) out vec4 _GLF_color;
+#
+# void main()
+# {
+#     int c = _int_1;
+#
+#     for (int i = _int_1; i < _int_10; i++)
+#     {
+#         c = ~i;
+#
+#         c = clamp(c, 0, 3);
+#     }
+#
+#     _GLF_color = vec4(_int_0);
+#
+#     if (c == _int_0)
+#     {
+#         _GLF_color = vec4(_int_1, _int_0, _int_0, _int_1);
+#     }
+# }
+SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 10
+; Bound: 68
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %44
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 310
+               OpName %4 "main"
+               OpName %8 "c"
+               OpName %12 "buf0"
+               OpMemberName %12 0 "_GLF_uniform_int_values"
+               OpName %14 ""
+               OpName %20 "i"
+               OpName %44 "_GLF_color"
+               OpDecorate %11 ArrayStride 16
+               OpMemberDecorate %12 0 Offset 0
+               OpDecorate %12 Block
+               OpDecorate %14 DescriptorSet 0
+               OpDecorate %14 Binding 0
+               OpDecorate %44 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeInt 32 1
+          %7 = OpTypePointer Function %6
+          %9 = OpTypeInt 32 0
+         %10 = OpConstant %9 3
+         %11 = OpTypeArray %6 %10
+         %12 = OpTypeStruct %11
+         %13 = OpTypePointer Uniform %12
+         %14 = OpVariable %13 Uniform
+         %15 = OpConstant %6 0
+         %16 = OpConstant %6 2
+         %17 = OpTypePointer Uniform %6
+         %31 = OpTypeBool
+         %36 = OpConstant %6 3
+         %39 = OpConstant %6 1
+         %41 = OpTypeFloat 32
+         %42 = OpTypeVector %41 4
+         %43 = OpTypePointer Output %42
+         %44 = OpVariable %43 Output
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+          %8 = OpVariable %7 Function
+         %20 = OpVariable %7 Function
+         %18 = OpAccessChain %17 %14 %15 %16
+         %19 = OpLoad %6 %18
+               OpStore %8 %19
+         %21 = OpAccessChain %17 %14 %15 %16
+         %22 = OpLoad %6 %21
+               OpStore %20 %22
+               OpBranch %23
+         %23 = OpLabel
+               OpLoopMerge %25 %26 None
+               OpBranch %27
+         %27 = OpLabel
+         %28 = OpLoad %6 %20
+         %29 = OpAccessChain %17 %14 %15 %15
+         %30 = OpLoad %6 %29
+         %32 = OpSLessThan %31 %28 %30
+               OpBranchConditional %32 %24 %25
+         %24 = OpLabel
+         %33 = OpLoad %6 %20
+         %34 = OpNot %6 %33
+               OpStore %8 %34
+         %35 = OpLoad %6 %8
+         %37 = OpExtInst %6 %1 SClamp %35 %15 %36
+               OpStore %8 %37
+               OpBranch %26
+         %26 = OpLabel
+         %38 = OpLoad %6 %20
+         %40 = OpIAdd %6 %38 %39
+               OpStore %20 %40
+               OpBranch %23
+         %25 = OpLabel
+         %45 = OpAccessChain %17 %14 %15 %39
+         %46 = OpLoad %6 %45
+         %47 = OpConvertSToF %41 %46
+         %48 = OpCompositeConstruct %42 %47 %47 %47 %47
+               OpStore %44 %48
+         %49 = OpLoad %6 %8
+         %50 = OpAccessChain %17 %14 %15 %39
+         %51 = OpLoad %6 %50
+         %52 = OpIEqual %31 %49 %51
+               OpSelectionMerge %54 None
+               OpBranchConditional %52 %53 %54
+         %53 = OpLabel
+         %55 = OpAccessChain %17 %14 %15 %16
+         %56 = OpLoad %6 %55
+         %57 = OpConvertSToF %41 %56
+         %58 = OpAccessChain %17 %14 %15 %39
+         %59 = OpLoad %6 %58
+         %60 = OpConvertSToF %41 %59
+         %61 = OpAccessChain %17 %14 %15 %39
+         %62 = OpLoad %6 %61
+         %63 = OpConvertSToF %41 %62
+         %64 = OpAccessChain %17 %14 %15 %16
+         %65 = OpLoad %6 %64
+         %66 = OpConvertSToF %41 %65
+         %67 = OpCompositeConstruct %42 %57 %60 %63 %66
+               OpStore %44 %67
+               OpBranch %54
+         %54 = OpLabel
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# _GLF_uniform_int_values
+BUFFER variant__GLF_uniform_int_values DATA_TYPE int32[] STD140 DATA
+ 10 0 1
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 16 16
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant__GLF_uniform_int_values AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 16 16
+
+EXPECT variant_framebuffer IDX 0 0 SIZE 16 16 EQ_RGBA 255 0 0 255
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-simplify-combine-compares-max-max-one.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-simplify-combine-compares-max-max-one.amber
new file mode 100644
index 0000000..3992c4c
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-simplify-combine-compares-max-max-one.amber
@@ -0,0 +1,159 @@
+#!amber
+
+# Copyright 2020 Google LLC
+#
+# 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.
+
+
+# A test for a coverage-gap found by the GraphicsFuzz project.
+
+# Short description: Covers specific instruction simplifying and combining code paths
+
+# The test passes because the shader always writes red.
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+# variant_fragment_shader is derived from the following GLSL:
+# #version 310 es
+# #define _int_1 _GLF_uniform_int_values[0]
+# #define _int_0 _GLF_uniform_int_values[1]
+# #define _int_5 _GLF_uniform_int_values[1]
+#
+# precision highp float;
+#
+# precision highp int;
+#
+# // Contents of _GLF_uniform_int_values: [1, 0]
+# layout(set = 0, binding = 0) uniform buf0
+# {
+#     int _GLF_uniform_int_values[2];
+# };
+# layout(location = 0) out vec4 _GLF_color;
+#
+# void main()
+# {
+#     int a = max(_int_1, max(_int_1, 1));
+#     if (a == _int_1)
+#     {
+#         _GLF_color = vec4(a, _int_0, _int_0, a);
+#     }
+#     else
+#     {
+#         _GLF_color = vec4(a);
+#     }
+# }
+SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 8
+; Bound: 50
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %34
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 310
+               OpName %4 "main"
+               OpName %8 "a"
+               OpName %12 "buf0"
+               OpMemberName %12 0 "_GLF_uniform_int_values"
+               OpName %14 ""
+               OpName %34 "_GLF_color"
+               OpDecorate %11 ArrayStride 16
+               OpMemberDecorate %12 0 Offset 0
+               OpDecorate %12 Block
+               OpDecorate %14 DescriptorSet 0
+               OpDecorate %14 Binding 0
+               OpDecorate %34 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeInt 32 1
+          %7 = OpTypePointer Function %6
+          %9 = OpTypeInt 32 0
+         %10 = OpConstant %9 2
+         %11 = OpTypeArray %6 %10
+         %12 = OpTypeStruct %11
+         %13 = OpTypePointer Uniform %12
+         %14 = OpVariable %13 Uniform
+         %15 = OpConstant %6 0
+         %16 = OpTypePointer Uniform %6
+         %21 = OpConstant %6 1
+         %27 = OpTypeBool
+         %31 = OpTypeFloat 32
+         %32 = OpTypeVector %31 4
+         %33 = OpTypePointer Output %32
+         %34 = OpVariable %33 Output
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+          %8 = OpVariable %7 Function
+         %17 = OpAccessChain %16 %14 %15 %15
+         %18 = OpLoad %6 %17
+         %19 = OpAccessChain %16 %14 %15 %15
+         %20 = OpLoad %6 %19
+         %22 = OpExtInst %6 %1 SMax %20 %21
+         %23 = OpExtInst %6 %1 SMax %18 %22
+               OpStore %8 %23
+         %24 = OpLoad %6 %8
+         %25 = OpAccessChain %16 %14 %15 %15
+         %26 = OpLoad %6 %25
+         %28 = OpIEqual %27 %24 %26
+               OpSelectionMerge %30 None
+               OpBranchConditional %28 %29 %46
+         %29 = OpLabel
+         %35 = OpLoad %6 %8
+         %36 = OpConvertSToF %31 %35
+         %37 = OpAccessChain %16 %14 %15 %21
+         %38 = OpLoad %6 %37
+         %39 = OpConvertSToF %31 %38
+         %40 = OpAccessChain %16 %14 %15 %21
+         %41 = OpLoad %6 %40
+         %42 = OpConvertSToF %31 %41
+         %43 = OpLoad %6 %8
+         %44 = OpConvertSToF %31 %43
+         %45 = OpCompositeConstruct %32 %36 %39 %42 %44
+               OpStore %34 %45
+               OpBranch %30
+         %46 = OpLabel
+         %47 = OpLoad %6 %8
+         %48 = OpConvertSToF %31 %47
+         %49 = OpCompositeConstruct %32 %48 %48 %48 %48
+               OpStore %34 %49
+               OpBranch %30
+         %30 = OpLabel
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# _GLF_uniform_int_values
+BUFFER variant__GLF_uniform_int_values DATA_TYPE int32[] STD140 DATA
+ 1 0
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 16 16
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant__GLF_uniform_int_values AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 16 16
+
+EXPECT variant_framebuffer IDX 0 0 SIZE 16 16 EQ_RGBA 255 0 0 255
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-simplify-for-bitwise-condition.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-simplify-for-bitwise-condition.amber
new file mode 100644
index 0000000..58d0e06
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-simplify-for-bitwise-condition.amber
@@ -0,0 +1,193 @@
+#!amber
+
+# Copyright 2020 Google LLC
+#
+# 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.
+
+
+# A test for a coverage-gap found by the GraphicsFuzz project.
+
+# Short description: A fragment shader that covers a specific instruction simplify code path
+
+# The test passes because the shader always writes red.
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+# variant_fragment_shader is derived from the following GLSL:
+# #version 310 es
+# #define _int_1 _GLF_uniform_int_values[0]
+# #define _int_0 _GLF_uniform_int_values[1]
+#
+# precision highp float;
+# precision highp int;
+#
+# // Contents of _GLF_uniform_int_values: [1, 0]
+# layout(set = 0, binding = 0) uniform buf0 {
+#  int _GLF_uniform_int_values[2];
+# };
+#
+# layout(location = 0) out vec4 _GLF_color;
+#
+# void main()
+# {
+#     int a = _int_0;
+#     for (int i = -_int_1; (i | _int_1) < _int_1; i++)
+#     {
+#         a = i * _int_1;
+#     }
+#
+#     if (a == -_int_1)
+#     {
+#         _GLF_color = vec4(_int_1, _int_0, _int_0, _int_1);
+#     }
+#     else
+#     {
+#         _GLF_color = vec4(a);
+#     }
+# }
+SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 8
+; Bound: 71
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %53
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 310
+               OpName %4 "main"
+               OpName %8 "a"
+               OpName %12 "buf0"
+               OpMemberName %12 0 "_GLF_uniform_int_values"
+               OpName %14 ""
+               OpName %20 "i"
+               OpName %53 "_GLF_color"
+               OpDecorate %11 ArrayStride 16
+               OpMemberDecorate %12 0 Offset 0
+               OpDecorate %12 Block
+               OpDecorate %14 DescriptorSet 0
+               OpDecorate %14 Binding 0
+               OpDecorate %53 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeInt 32 1
+          %7 = OpTypePointer Function %6
+          %9 = OpTypeInt 32 0
+         %10 = OpConstant %9 2
+         %11 = OpTypeArray %6 %10
+         %12 = OpTypeStruct %11
+         %13 = OpTypePointer Uniform %12
+         %14 = OpVariable %13 Uniform
+         %15 = OpConstant %6 0
+         %16 = OpConstant %6 1
+         %17 = OpTypePointer Uniform %6
+         %35 = OpTypeBool
+         %50 = OpTypeFloat 32
+         %51 = OpTypeVector %50 4
+         %52 = OpTypePointer Output %51
+         %53 = OpVariable %52 Output
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+          %8 = OpVariable %7 Function
+         %20 = OpVariable %7 Function
+         %18 = OpAccessChain %17 %14 %15 %16
+         %19 = OpLoad %6 %18
+               OpStore %8 %19
+         %21 = OpAccessChain %17 %14 %15 %15
+         %22 = OpLoad %6 %21
+         %23 = OpSNegate %6 %22
+               OpStore %20 %23
+               OpBranch %24
+         %24 = OpLabel
+               OpLoopMerge %26 %27 None
+               OpBranch %28
+         %28 = OpLabel
+         %29 = OpLoad %6 %20
+         %30 = OpAccessChain %17 %14 %15 %15
+         %31 = OpLoad %6 %30
+         %32 = OpBitwiseOr %6 %29 %31
+         %33 = OpAccessChain %17 %14 %15 %15
+         %34 = OpLoad %6 %33
+         %36 = OpSLessThan %35 %32 %34
+               OpBranchConditional %36 %25 %26
+         %25 = OpLabel
+         %37 = OpLoad %6 %20
+         %38 = OpAccessChain %17 %14 %15 %15
+         %39 = OpLoad %6 %38
+         %40 = OpIMul %6 %37 %39
+               OpStore %8 %40
+               OpBranch %27
+         %27 = OpLabel
+         %41 = OpLoad %6 %20
+         %42 = OpIAdd %6 %41 %16
+               OpStore %20 %42
+               OpBranch %24
+         %26 = OpLabel
+         %43 = OpLoad %6 %8
+         %44 = OpAccessChain %17 %14 %15 %15
+         %45 = OpLoad %6 %44
+         %46 = OpSNegate %6 %45
+         %47 = OpIEqual %35 %43 %46
+               OpSelectionMerge %49 None
+               OpBranchConditional %47 %48 %67
+         %48 = OpLabel
+         %54 = OpAccessChain %17 %14 %15 %15
+         %55 = OpLoad %6 %54
+         %56 = OpConvertSToF %50 %55
+         %57 = OpAccessChain %17 %14 %15 %16
+         %58 = OpLoad %6 %57
+         %59 = OpConvertSToF %50 %58
+         %60 = OpAccessChain %17 %14 %15 %16
+         %61 = OpLoad %6 %60
+         %62 = OpConvertSToF %50 %61
+         %63 = OpAccessChain %17 %14 %15 %15
+         %64 = OpLoad %6 %63
+         %65 = OpConvertSToF %50 %64
+         %66 = OpCompositeConstruct %51 %56 %59 %62 %65
+               OpStore %53 %66
+               OpBranch %49
+         %67 = OpLabel
+         %68 = OpLoad %6 %8
+         %69 = OpConvertSToF %50 %68
+         %70 = OpCompositeConstruct %51 %69 %69 %69 %69
+               OpStore %53 %70
+               OpBranch %49
+         %49 = OpLabel
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# _GLF_uniform_int_values
+BUFFER variant__GLF_uniform_int_values DATA_TYPE int32[] STD140 DATA
+ 1 0
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 256 256
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant__GLF_uniform_int_values AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256
+
+EXPECT variant_framebuffer IDX 0 0 SIZE 256 256 EQ_RGBA 255 0 0 255
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-simplify-max-multiplied-values.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-simplify-max-multiplied-values.amber
new file mode 100644
index 0000000..52950ac
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-simplify-max-multiplied-values.amber
@@ -0,0 +1,261 @@
+#!amber
+
+# Copyright 2020 Google LLC
+#
+# 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.
+
+
+# A test for a coverage-gap found by the GraphicsFuzz project.
+
+# Short description: A fragment shader that covers a specific instruction simplify code path
+
+# The test passes because the shader always writes red.
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+# variant_fragment_shader is derived from the following GLSL:
+# #version 310 es
+# #define _int_0 _GLF_uniform_int_values[0]
+# #define _int_2 _GLF_uniform_int_values[1]
+# #define _int_3 _GLF_uniform_int_values[2]
+# #define _int_1 _GLF_uniform_int_values[3]
+# #define _int_4 _GLF_uniform_int_values[4]
+#
+# precision highp float;
+#
+# precision highp int;
+#
+# // Contents of _GLF_uniform_int_values: [0, 2, 3, 1, 4]
+# layout(set = 0, binding = 0) uniform buf0
+# {
+#     int _GLF_uniform_int_values[5];
+# };
+#
+# layout(location = 0) out vec4 _GLF_color;
+#
+# void main()
+# {
+#     int A[4];
+#     for (int i = _int_0; i < _int_4; i++)
+#     {
+#         A[i] = _int_0;
+#
+#         // Sets the first two elements of A to 1.
+#         if (max(2 * i, 2 * _int_1) == _int_2)
+#         {
+#             A[i] = 1;
+#         }
+#     }
+#
+#     if (A[_int_0] == _int_1 && A[_int_1] == _int_1 && A[_int_2] == _int_0 &&
+#         A[_int_3] == _int_0)
+#     {
+#         _GLF_color = vec4(_int_1, _int_0, _int_0, _int_1);
+#     }
+#     else
+#     {
+#         _GLF_color = vec4(1);
+#     }
+# }
+SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 8
+; Bound: 115
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %98
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 310
+               OpName %4 "main"
+               OpName %8 "i"
+               OpName %12 "buf0"
+               OpMemberName %12 0 "_GLF_uniform_int_values"
+               OpName %14 ""
+               OpName %33 "A"
+               OpName %98 "_GLF_color"
+               OpDecorate %11 ArrayStride 16
+               OpMemberDecorate %12 0 Offset 0
+               OpDecorate %12 Block
+               OpDecorate %14 DescriptorSet 0
+               OpDecorate %14 Binding 0
+               OpDecorate %98 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeInt 32 1
+          %7 = OpTypePointer Function %6
+          %9 = OpTypeInt 32 0
+         %10 = OpConstant %9 5
+         %11 = OpTypeArray %6 %10
+         %12 = OpTypeStruct %11
+         %13 = OpTypePointer Uniform %12
+         %14 = OpVariable %13 Uniform
+         %15 = OpConstant %6 0
+         %16 = OpTypePointer Uniform %6
+         %25 = OpConstant %6 4
+         %28 = OpTypeBool
+         %30 = OpConstant %9 4
+         %31 = OpTypeArray %6 %30
+         %32 = OpTypePointer Function %31
+         %38 = OpConstant %6 2
+         %41 = OpConstant %6 3
+         %46 = OpConstant %6 1
+         %95 = OpTypeFloat 32
+         %96 = OpTypeVector %95 4
+         %97 = OpTypePointer Output %96
+         %98 = OpVariable %97 Output
+        %113 = OpConstant %95 1
+        %114 = OpConstantComposite %96 %113 %113 %113 %113
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+          %8 = OpVariable %7 Function
+         %33 = OpVariable %32 Function
+         %17 = OpAccessChain %16 %14 %15 %15
+         %18 = OpLoad %6 %17
+               OpStore %8 %18
+               OpBranch %19
+         %19 = OpLabel
+               OpLoopMerge %21 %22 None
+               OpBranch %23
+         %23 = OpLabel
+         %24 = OpLoad %6 %8
+         %26 = OpAccessChain %16 %14 %15 %25
+         %27 = OpLoad %6 %26
+         %29 = OpSLessThan %28 %24 %27
+               OpBranchConditional %29 %20 %21
+         %20 = OpLabel
+         %34 = OpLoad %6 %8
+         %35 = OpAccessChain %16 %14 %15 %15
+         %36 = OpLoad %6 %35
+         %37 = OpAccessChain %7 %33 %34
+               OpStore %37 %36
+         %39 = OpLoad %6 %8
+         %40 = OpIMul %6 %38 %39
+         %42 = OpAccessChain %16 %14 %15 %41
+         %43 = OpLoad %6 %42
+         %44 = OpIMul %6 %38 %43
+         %45 = OpExtInst %6 %1 SMax %40 %44
+         %47 = OpAccessChain %16 %14 %15 %46
+         %48 = OpLoad %6 %47
+         %49 = OpIEqual %28 %45 %48
+               OpSelectionMerge %51 None
+               OpBranchConditional %49 %50 %51
+         %50 = OpLabel
+         %52 = OpLoad %6 %8
+         %53 = OpAccessChain %7 %33 %52
+               OpStore %53 %46
+               OpBranch %51
+         %51 = OpLabel
+               OpBranch %22
+         %22 = OpLabel
+         %54 = OpLoad %6 %8
+         %55 = OpIAdd %6 %54 %46
+               OpStore %8 %55
+               OpBranch %19
+         %21 = OpLabel
+         %56 = OpAccessChain %16 %14 %15 %15
+         %57 = OpLoad %6 %56
+         %58 = OpAccessChain %7 %33 %57
+         %59 = OpLoad %6 %58
+         %60 = OpAccessChain %16 %14 %15 %41
+         %61 = OpLoad %6 %60
+         %62 = OpIEqual %28 %59 %61
+               OpSelectionMerge %64 None
+               OpBranchConditional %62 %63 %64
+         %63 = OpLabel
+         %65 = OpAccessChain %16 %14 %15 %41
+         %66 = OpLoad %6 %65
+         %67 = OpAccessChain %7 %33 %66
+         %68 = OpLoad %6 %67
+         %69 = OpAccessChain %16 %14 %15 %41
+         %70 = OpLoad %6 %69
+         %71 = OpIEqual %28 %68 %70
+               OpBranch %64
+         %64 = OpLabel
+         %72 = OpPhi %28 %62 %21 %71 %63
+               OpSelectionMerge %74 None
+               OpBranchConditional %72 %73 %74
+         %73 = OpLabel
+         %75 = OpAccessChain %16 %14 %15 %46
+         %76 = OpLoad %6 %75
+         %77 = OpAccessChain %7 %33 %76
+         %78 = OpLoad %6 %77
+         %79 = OpAccessChain %16 %14 %15 %15
+         %80 = OpLoad %6 %79
+         %81 = OpIEqual %28 %78 %80
+               OpBranch %74
+         %74 = OpLabel
+         %82 = OpPhi %28 %72 %64 %81 %73
+               OpSelectionMerge %84 None
+               OpBranchConditional %82 %83 %84
+         %83 = OpLabel
+         %85 = OpAccessChain %16 %14 %15 %38
+         %86 = OpLoad %6 %85
+         %87 = OpAccessChain %7 %33 %86
+         %88 = OpLoad %6 %87
+         %89 = OpAccessChain %16 %14 %15 %15
+         %90 = OpLoad %6 %89
+         %91 = OpIEqual %28 %88 %90
+               OpBranch %84
+         %84 = OpLabel
+         %92 = OpPhi %28 %82 %74 %91 %83
+               OpSelectionMerge %94 None
+               OpBranchConditional %92 %93 %112
+         %93 = OpLabel
+         %99 = OpAccessChain %16 %14 %15 %41
+        %100 = OpLoad %6 %99
+        %101 = OpConvertSToF %95 %100
+        %102 = OpAccessChain %16 %14 %15 %15
+        %103 = OpLoad %6 %102
+        %104 = OpConvertSToF %95 %103
+        %105 = OpAccessChain %16 %14 %15 %15
+        %106 = OpLoad %6 %105
+        %107 = OpConvertSToF %95 %106
+        %108 = OpAccessChain %16 %14 %15 %41
+        %109 = OpLoad %6 %108
+        %110 = OpConvertSToF %95 %109
+        %111 = OpCompositeConstruct %96 %101 %104 %107 %110
+               OpStore %98 %111
+               OpBranch %94
+        %112 = OpLabel
+               OpStore %98 %114
+               OpBranch %94
+         %94 = OpLabel
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# _GLF_uniform_int_values
+BUFFER variant__GLF_uniform_int_values DATA_TYPE int32[] STD140 DATA
+ 0 2 3 1 4
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 16 16
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant__GLF_uniform_int_values AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 16 16
+
+EXPECT variant_framebuffer IDX 0 0 SIZE 16 16 EQ_RGBA 255 0 0 255
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-simplify-modulo-1.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-simplify-modulo-1.amber
new file mode 100644
index 0000000..ccbc652
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-simplify-modulo-1.amber
@@ -0,0 +1,180 @@
+#!amber
+
+# Copyright 2020 Google LLC
+#
+# 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.
+
+
+# A test for a coverage-gap found by the GraphicsFuzz project.
+
+# Short description: A fragment shader that covers a specific instruction simplification code path
+
+# The test passes because the shader always writes red.
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+# variant_fragment_shader is derived from the following GLSL:
+# #version 310 es
+# #define _int_1 _GLF_uniform_int_values[0]
+# #define _float_0_0 _GLF_uniform_float_values[0]
+# #define _float_10_0 _GLF_uniform_float_values[0]
+#
+# precision highp float;
+#
+# precision highp int;
+#
+# // Contents of _GLF_uniform_float_values: [0.0, 10.0]
+# layout(set = 0, binding = 0) uniform buf0
+# {
+#     float _GLF_uniform_float_values[2];
+# };
+#
+# // Contents of _GLF_uniform_int_values: 1
+# layout(set = 0, binding = 1) uniform buf1
+# {
+#     int _GLF_uniform_int_values[1];
+# };
+#
+# layout(location = 0) out vec4 _GLF_color;
+#
+# void main()
+# {
+#     float a = mod(_float_10_0, 1.);
+#
+#     if (a == _float_0_0)
+#     {
+#         _GLF_color = vec4(_int_1, a, a, _int_1);
+#     }
+#     else
+#     {
+#         _GLF_color = vec4(a);
+#     }
+# }
+SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 8
+; Bound: 50
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %31
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 310
+               OpName %4 "main"
+               OpName %8 "a"
+               OpName %12 "buf0"
+               OpMemberName %12 0 "_GLF_uniform_float_values"
+               OpName %14 ""
+               OpName %31 "_GLF_color"
+               OpName %34 "buf1"
+               OpMemberName %34 0 "_GLF_uniform_int_values"
+               OpName %36 ""
+               OpDecorate %11 ArrayStride 16
+               OpMemberDecorate %12 0 Offset 0
+               OpDecorate %12 Block
+               OpDecorate %14 DescriptorSet 0
+               OpDecorate %14 Binding 0
+               OpDecorate %31 Location 0
+               OpDecorate %33 ArrayStride 16
+               OpMemberDecorate %34 0 Offset 0
+               OpDecorate %34 Block
+               OpDecorate %36 DescriptorSet 0
+               OpDecorate %36 Binding 1
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeFloat 32
+          %7 = OpTypePointer Function %6
+          %9 = OpTypeInt 32 0
+         %10 = OpConstant %9 2
+         %11 = OpTypeArray %6 %10
+         %12 = OpTypeStruct %11
+         %13 = OpTypePointer Uniform %12
+         %14 = OpVariable %13 Uniform
+         %15 = OpTypeInt 32 1
+         %16 = OpConstant %15 0
+         %17 = OpTypePointer Uniform %6
+         %20 = OpConstant %6 1
+         %25 = OpTypeBool
+         %29 = OpTypeVector %6 4
+         %30 = OpTypePointer Output %29
+         %31 = OpVariable %30 Output
+         %32 = OpConstant %9 1
+         %33 = OpTypeArray %15 %32
+         %34 = OpTypeStruct %33
+         %35 = OpTypePointer Uniform %34
+         %36 = OpVariable %35 Uniform
+         %37 = OpTypePointer Uniform %15
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+          %8 = OpVariable %7 Function
+         %18 = OpAccessChain %17 %14 %16 %16
+         %19 = OpLoad %6 %18
+         %21 = OpFMod %6 %19 %20
+               OpStore %8 %21
+         %22 = OpLoad %6 %8
+         %23 = OpAccessChain %17 %14 %16 %16
+         %24 = OpLoad %6 %23
+         %26 = OpFOrdEqual %25 %22 %24
+               OpSelectionMerge %28 None
+               OpBranchConditional %26 %27 %47
+         %27 = OpLabel
+         %38 = OpAccessChain %37 %36 %16 %16
+         %39 = OpLoad %15 %38
+         %40 = OpConvertSToF %6 %39
+         %41 = OpLoad %6 %8
+         %42 = OpLoad %6 %8
+         %43 = OpAccessChain %37 %36 %16 %16
+         %44 = OpLoad %15 %43
+         %45 = OpConvertSToF %6 %44
+         %46 = OpCompositeConstruct %29 %40 %41 %42 %45
+               OpStore %31 %46
+               OpBranch %28
+         %47 = OpLabel
+         %48 = OpLoad %6 %8
+         %49 = OpCompositeConstruct %29 %48 %48 %48 %48
+               OpStore %31 %49
+               OpBranch %28
+         %28 = OpLabel
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# _GLF_uniform_int_values
+BUFFER variant__GLF_uniform_int_values DATA_TYPE int32[] STD140 DATA
+ 1
+END
+# _GLF_uniform_float_values
+BUFFER variant__GLF_uniform_float_values DATA_TYPE float[] STD140 DATA
+ 0.0 10.0
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 16 16
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant__GLF_uniform_int_values AS uniform DESCRIPTOR_SET 0 BINDING 1
+  BIND BUFFER variant__GLF_uniform_float_values AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 16 16
+
+EXPECT variant_framebuffer IDX 0 0 SIZE 16 16 EQ_RGBA 255 0 0 255
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-simplify-right-shift-greater-than-zero.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-simplify-right-shift-greater-than-zero.amber
new file mode 100644
index 0000000..d665a7d
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-simplify-right-shift-greater-than-zero.amber
@@ -0,0 +1,150 @@
+#!amber
+
+# Copyright 2020 Google LLC
+#
+# 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.
+
+
+# A test for a coverage-gap found by the GraphicsFuzz project.
+
+# Short description: Covers specific instruction simplify and combine compare code paths
+
+# The test passes because the shader always writes red.
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+# variant_fragment_shader is derived from the following GLSL:
+# #version 310 es
+# #define _int_0 _GLF_uniform_int_values[0]
+# #define _int_1 _GLF_uniform_int_values[1]
+#
+# precision highp float;
+# precision highp int;
+#
+# // Contents of _GLF_uniform_int_values: [0, 1]
+# layout(set = 0, binding = 0) uniform buf0
+# {
+#     int _GLF_uniform_int_values[2];
+# };
+#
+# layout(location = 0) out vec4 _GLF_color;
+#
+# void main()
+# {
+#     if ((1 >> _int_0) > 0)
+#     {
+#         _GLF_color = vec4(_int_1, _int_0, _int_0, _int_1);
+#     }
+#     else
+#     {
+#         _GLF_color = vec4(_int_0);
+#     }
+# }
+SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 8
+; Bound: 45
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %26
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 310
+               OpName %4 "main"
+               OpName %11 "buf0"
+               OpMemberName %11 0 "_GLF_uniform_int_values"
+               OpName %13 ""
+               OpName %26 "_GLF_color"
+               OpDecorate %10 ArrayStride 16
+               OpMemberDecorate %11 0 Offset 0
+               OpDecorate %11 Block
+               OpDecorate %13 DescriptorSet 0
+               OpDecorate %13 Binding 0
+               OpDecorate %26 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeInt 32 1
+          %7 = OpConstant %6 1
+          %8 = OpTypeInt 32 0
+          %9 = OpConstant %8 2
+         %10 = OpTypeArray %6 %9
+         %11 = OpTypeStruct %10
+         %12 = OpTypePointer Uniform %11
+         %13 = OpVariable %12 Uniform
+         %14 = OpConstant %6 0
+         %15 = OpTypePointer Uniform %6
+         %19 = OpTypeBool
+         %23 = OpTypeFloat 32
+         %24 = OpTypeVector %23 4
+         %25 = OpTypePointer Output %24
+         %26 = OpVariable %25 Output
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+         %16 = OpAccessChain %15 %13 %14 %14
+         %17 = OpLoad %6 %16
+         %18 = OpShiftRightArithmetic %6 %7 %17
+         %20 = OpSGreaterThan %19 %18 %14
+               OpSelectionMerge %22 None
+               OpBranchConditional %20 %21 %40
+         %21 = OpLabel
+         %27 = OpAccessChain %15 %13 %14 %7
+         %28 = OpLoad %6 %27
+         %29 = OpConvertSToF %23 %28
+         %30 = OpAccessChain %15 %13 %14 %14
+         %31 = OpLoad %6 %30
+         %32 = OpConvertSToF %23 %31
+         %33 = OpAccessChain %15 %13 %14 %14
+         %34 = OpLoad %6 %33
+         %35 = OpConvertSToF %23 %34
+         %36 = OpAccessChain %15 %13 %14 %7
+         %37 = OpLoad %6 %36
+         %38 = OpConvertSToF %23 %37
+         %39 = OpCompositeConstruct %24 %29 %32 %35 %38
+               OpStore %26 %39
+               OpBranch %22
+         %40 = OpLabel
+         %41 = OpAccessChain %15 %13 %14 %14
+         %42 = OpLoad %6 %41
+         %43 = OpConvertSToF %23 %42
+         %44 = OpCompositeConstruct %24 %43 %43 %43 %43
+               OpStore %26 %44
+               OpBranch %22
+         %22 = OpLabel
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# _GLF_uniform_int_values
+BUFFER variant__GLF_uniform_int_values DATA_TYPE int32[] STD140 DATA
+ 0 1
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 256 256
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant__GLF_uniform_int_values AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256
+
+EXPECT variant_framebuffer IDX 0 0 SIZE 256 256 EQ_RGBA 255 0 0 255
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-sinh-ldexp.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-sinh-ldexp.amber
new file mode 100644
index 0000000..7332fbb
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-sinh-ldexp.amber
@@ -0,0 +1,241 @@
+#!amber
+
+# Copyright 2020 Google LLC
+#
+# 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.
+
+
+# A test for a coverage-gap found by the GraphicsFuzz project.
+
+# Short description: A fragment shader that covers a specific inst combine compares code path
+
+# The test passes because the shader always writes red.
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+# variant_fragment_shader is derived from the following GLSL:
+# #version 310 es
+# #define _int_1 _GLF_uniform_int_values[0]
+# #define _int_0 _GLF_uniform_int_values[1]
+# #define _float_2_3503 _GLF_uniform_float_values[0]
+# #define _float_2_3505 _GLF_uniform_float_values[1]
+# #define _float_1_0 _GLF_uniform_float_values[2]
+# #define _float_800_0 _GLF_uniform_float_values[3]
+#
+# precision highp int;
+#
+# precision highp float;
+#
+# // Contents of _GLF_uniform_int_values: [1, 0]
+# layout(set = 0, binding = 0) uniform buf0
+# {
+#     int _GLF_uniform_int_values[2];
+# };
+#
+# // Contents of _GLF_uniform_float_values: [2.3503, 2.3505, 1.0, 800.0]
+# layout(set = 0, binding = 1) uniform buf1
+# {
+#     float _GLF_uniform_float_values[4];
+# };
+#
+# layout(location = 0) out vec4 _GLF_color;
+#
+# void main()
+# {
+#     // This results in an undefined value, but not in undefined behavior.
+#     // v1.x becomes approximately 1.1752 and v1.y becomes undefined.
+#     vec2 v1 = sinh(vec2(_float_1_0, _float_800_0));
+#
+#     ivec2 v2 = ivec2(_int_1, -3000);
+#
+#     // This results in an undefined value, but not in undefined behavior.
+#     // v3.x becomes approximately 2.3504 and v3.y becomes undefined.
+#     vec2 v3 = ldexp(v1, v2);
+#
+#     // Assigning an undefined value doesn't matter since the variable will be
+#     // reassigned later with a sensible value.
+#     _GLF_color = vec4(v3.y);
+#
+#     if (v3.x > _float_2_3503 && v3.x < _float_2_3505)
+#     {
+#         _GLF_color = vec4(_int_1, _int_0, _int_0, _int_1);
+#     }
+#     else
+#     {
+#         _GLF_color = vec4(_int_0);
+#     }
+# }
+SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 10
+; Bound: 88
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %46
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 310
+               OpName %4 "main"
+               OpName %9 "v1"
+               OpName %13 "buf1"
+               OpMemberName %13 0 "_GLF_uniform_float_values"
+               OpName %15 ""
+               OpName %29 "v2"
+               OpName %32 "buf0"
+               OpMemberName %32 0 "_GLF_uniform_int_values"
+               OpName %34 ""
+               OpName %40 "v3"
+               OpName %46 "_GLF_color"
+               OpDecorate %12 ArrayStride 16
+               OpMemberDecorate %13 0 Offset 0
+               OpDecorate %13 Block
+               OpDecorate %15 DescriptorSet 0
+               OpDecorate %15 Binding 1
+               OpDecorate %31 ArrayStride 16
+               OpMemberDecorate %32 0 Offset 0
+               OpDecorate %32 Block
+               OpDecorate %34 DescriptorSet 0
+               OpDecorate %34 Binding 0
+               OpDecorate %46 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeFloat 32
+          %7 = OpTypeVector %6 2
+          %8 = OpTypePointer Function %7
+         %10 = OpTypeInt 32 0
+         %11 = OpConstant %10 4
+         %12 = OpTypeArray %6 %11
+         %13 = OpTypeStruct %12
+         %14 = OpTypePointer Uniform %13
+         %15 = OpVariable %14 Uniform
+         %16 = OpTypeInt 32 1
+         %17 = OpConstant %16 0
+         %18 = OpConstant %16 2
+         %19 = OpTypePointer Uniform %6
+         %22 = OpConstant %16 3
+         %27 = OpTypeVector %16 2
+         %28 = OpTypePointer Function %27
+         %30 = OpConstant %10 2
+         %31 = OpTypeArray %16 %30
+         %32 = OpTypeStruct %31
+         %33 = OpTypePointer Uniform %32
+         %34 = OpVariable %33 Uniform
+         %35 = OpTypePointer Uniform %16
+         %38 = OpConstant %16 -3000
+         %44 = OpTypeVector %6 4
+         %45 = OpTypePointer Output %44
+         %46 = OpVariable %45 Output
+         %47 = OpConstant %10 1
+         %48 = OpTypePointer Function %6
+         %52 = OpTypeBool
+         %53 = OpConstant %10 0
+         %63 = OpConstant %16 1
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+          %9 = OpVariable %8 Function
+         %29 = OpVariable %28 Function
+         %40 = OpVariable %8 Function
+         %20 = OpAccessChain %19 %15 %17 %18
+         %21 = OpLoad %6 %20
+         %23 = OpAccessChain %19 %15 %17 %22
+         %24 = OpLoad %6 %23
+         %25 = OpCompositeConstruct %7 %21 %24
+         %26 = OpExtInst %7 %1 Sinh %25
+               OpStore %9 %26
+         %36 = OpAccessChain %35 %34 %17 %17
+         %37 = OpLoad %16 %36
+         %39 = OpCompositeConstruct %27 %37 %38
+               OpStore %29 %39
+         %41 = OpLoad %7 %9
+         %42 = OpLoad %27 %29
+         %43 = OpExtInst %7 %1 Ldexp %41 %42
+               OpStore %40 %43
+         %49 = OpAccessChain %48 %40 %47
+         %50 = OpLoad %6 %49
+         %51 = OpCompositeConstruct %44 %50 %50 %50 %50
+               OpStore %46 %51
+         %54 = OpAccessChain %48 %40 %53
+         %55 = OpLoad %6 %54
+         %56 = OpAccessChain %19 %15 %17 %17
+         %57 = OpLoad %6 %56
+         %58 = OpFOrdGreaterThan %52 %55 %57
+               OpSelectionMerge %60 None
+               OpBranchConditional %58 %59 %60
+         %59 = OpLabel
+         %61 = OpAccessChain %48 %40 %53
+         %62 = OpLoad %6 %61
+         %64 = OpAccessChain %19 %15 %17 %63
+         %65 = OpLoad %6 %64
+         %66 = OpFOrdLessThan %52 %62 %65
+               OpBranch %60
+         %60 = OpLabel
+         %67 = OpPhi %52 %58 %5 %66 %59
+               OpSelectionMerge %69 None
+               OpBranchConditional %67 %68 %83
+         %68 = OpLabel
+         %70 = OpAccessChain %35 %34 %17 %17
+         %71 = OpLoad %16 %70
+         %72 = OpConvertSToF %6 %71
+         %73 = OpAccessChain %35 %34 %17 %63
+         %74 = OpLoad %16 %73
+         %75 = OpConvertSToF %6 %74
+         %76 = OpAccessChain %35 %34 %17 %63
+         %77 = OpLoad %16 %76
+         %78 = OpConvertSToF %6 %77
+         %79 = OpAccessChain %35 %34 %17 %17
+         %80 = OpLoad %16 %79
+         %81 = OpConvertSToF %6 %80
+         %82 = OpCompositeConstruct %44 %72 %75 %78 %81
+               OpStore %46 %82
+               OpBranch %69
+         %83 = OpLabel
+         %84 = OpAccessChain %35 %34 %17 %63
+         %85 = OpLoad %16 %84
+         %86 = OpConvertSToF %6 %85
+         %87 = OpCompositeConstruct %44 %86 %86 %86 %86
+               OpStore %46 %87
+               OpBranch %69
+         %69 = OpLabel
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# _GLF_uniform_float_values
+BUFFER variant__GLF_uniform_float_values DATA_TYPE float[] STD140 DATA
+ 2.3503 2.3505 1.0 800.0
+END
+# _GLF_uniform_int_values
+BUFFER variant__GLF_uniform_int_values DATA_TYPE int32[] STD140 DATA
+ 1 0
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 256 256
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant__GLF_uniform_float_values AS uniform DESCRIPTOR_SET 0 BINDING 1
+  BIND BUFFER variant__GLF_uniform_int_values AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256
+
+EXPECT variant_framebuffer IDX 0 0 SIZE 256 256 EQ_RGBA 255 0 0 255
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-tail-duplicator-for-for-for.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-tail-duplicator-for-for-for.amber
new file mode 100644
index 0000000..66614f2
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-tail-duplicator-for-for-for.amber
@@ -0,0 +1,265 @@
+#!amber
+
+# Copyright 2020 Google LLC
+#
+# 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.
+
+
+# A test for a coverage-gap found by the GraphicsFuzz project.
+
+# Short description: A fragment shader that covers a specific tail duplicator code path
+
+# The test passes because the shader always writes red.
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+# variant_fragment_shader is derived from the following GLSL:
+# #version 310 es
+# #define _int_0 _GLF_uniform_int_values[0]
+# #define _int_4 _GLF_uniform_int_values[1]
+# #define _float_0_0 _GLF_uniform_float_values[0]
+#
+# precision highp float;
+#
+# precision highp int;
+#
+# // Contents of _GLF_uniform_int_values: 0
+# layout(set = 0, binding = 0) uniform buf0
+# {
+#     int _GLF_uniform_int_values[2];
+# };
+#
+# // Contents of _GLF_uniform_float_values: 0.0
+# layout(set = 0, binding = 1) uniform buf1
+# {
+#     float _GLF_uniform_float_values[1];
+# };
+#
+# layout(location = 0) out vec4 _GLF_color;
+#
+# void main()
+# {
+#     vec4 color = vec4(1.0);
+#
+#     for (int i = _int_0; i < _int_4; i++)
+#     {
+#         switch (i)
+#         {
+#             case 1:
+#                 // Never entered.
+#                 for (int j = _int_0; i > i; j++)
+#                 {
+#                     for (int k = _int_0; k < i; k++)
+#                     {
+#                         color[k] = _float_0_0;
+#                     }
+#                 }
+#
+#                 color[i] = _float_0_0;
+#                 break;
+#
+#             case 2:
+#                 color[i] = _float_0_0;
+#                 break;
+#         }
+#     }
+#
+#     _GLF_color = color;
+# }
+SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 8
+; Bound: 93
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %91
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 310
+               OpName %4 "main"
+               OpName %9 "color"
+               OpName %14 "i"
+               OpName %18 "buf0"
+               OpMemberName %18 0 "_GLF_uniform_int_values"
+               OpName %20 ""
+               OpName %40 "j"
+               OpName %51 "k"
+               OpName %65 "buf1"
+               OpMemberName %65 0 "_GLF_uniform_float_values"
+               OpName %67 ""
+               OpName %91 "_GLF_color"
+               OpDecorate %17 ArrayStride 16
+               OpMemberDecorate %18 0 Offset 0
+               OpDecorate %18 Block
+               OpDecorate %20 DescriptorSet 0
+               OpDecorate %20 Binding 0
+               OpDecorate %64 ArrayStride 16
+               OpMemberDecorate %65 0 Offset 0
+               OpDecorate %65 Block
+               OpDecorate %67 DescriptorSet 0
+               OpDecorate %67 Binding 1
+               OpDecorate %91 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeFloat 32
+          %7 = OpTypeVector %6 4
+          %8 = OpTypePointer Function %7
+         %10 = OpConstant %6 1
+         %11 = OpConstantComposite %7 %10 %10 %10 %10
+         %12 = OpTypeInt 32 1
+         %13 = OpTypePointer Function %12
+         %15 = OpTypeInt 32 0
+         %16 = OpConstant %15 2
+         %17 = OpTypeArray %12 %16
+         %18 = OpTypeStruct %17
+         %19 = OpTypePointer Uniform %18
+         %20 = OpVariable %19 Uniform
+         %21 = OpConstant %12 0
+         %22 = OpTypePointer Uniform %12
+         %31 = OpConstant %12 1
+         %34 = OpTypeBool
+         %63 = OpConstant %15 1
+         %64 = OpTypeArray %6 %63
+         %65 = OpTypeStruct %64
+         %66 = OpTypePointer Uniform %65
+         %67 = OpVariable %66 Uniform
+         %68 = OpTypePointer Uniform %6
+         %71 = OpTypePointer Function %6
+         %90 = OpTypePointer Output %7
+         %91 = OpVariable %90 Output
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+          %9 = OpVariable %8 Function
+         %14 = OpVariable %13 Function
+         %40 = OpVariable %13 Function
+         %51 = OpVariable %13 Function
+               OpStore %9 %11
+         %23 = OpAccessChain %22 %20 %21 %21
+         %24 = OpLoad %12 %23
+               OpStore %14 %24
+               OpBranch %25
+         %25 = OpLabel
+               OpLoopMerge %27 %28 None
+               OpBranch %29
+         %29 = OpLabel
+         %30 = OpLoad %12 %14
+         %32 = OpAccessChain %22 %20 %21 %31
+         %33 = OpLoad %12 %32
+         %35 = OpSLessThan %34 %30 %33
+               OpBranchConditional %35 %26 %27
+         %26 = OpLabel
+         %36 = OpLoad %12 %14
+               OpSelectionMerge %39 None
+               OpSwitch %36 %39 1 %37 2 %38
+         %37 = OpLabel
+         %41 = OpAccessChain %22 %20 %21 %21
+         %42 = OpLoad %12 %41
+               OpStore %40 %42
+               OpBranch %43
+         %43 = OpLabel
+               OpLoopMerge %45 %46 None
+               OpBranch %47
+         %47 = OpLabel
+         %48 = OpLoad %12 %14
+         %49 = OpLoad %12 %14
+         %50 = OpSGreaterThan %34 %48 %49
+               OpBranchConditional %50 %44 %45
+         %44 = OpLabel
+         %52 = OpAccessChain %22 %20 %21 %21
+         %53 = OpLoad %12 %52
+               OpStore %51 %53
+               OpBranch %54
+         %54 = OpLabel
+               OpLoopMerge %56 %57 None
+               OpBranch %58
+         %58 = OpLabel
+         %59 = OpLoad %12 %51
+         %60 = OpLoad %12 %14
+         %61 = OpSLessThan %34 %59 %60
+               OpBranchConditional %61 %55 %56
+         %55 = OpLabel
+         %62 = OpLoad %12 %51
+         %69 = OpAccessChain %68 %67 %21 %21
+         %70 = OpLoad %6 %69
+         %72 = OpAccessChain %71 %9 %62
+               OpStore %72 %70
+               OpBranch %57
+         %57 = OpLabel
+         %73 = OpLoad %12 %51
+         %74 = OpIAdd %12 %73 %31
+               OpStore %51 %74
+               OpBranch %54
+         %56 = OpLabel
+               OpBranch %46
+         %46 = OpLabel
+         %75 = OpLoad %12 %40
+         %76 = OpIAdd %12 %75 %31
+               OpStore %40 %76
+               OpBranch %43
+         %45 = OpLabel
+         %77 = OpLoad %12 %14
+         %78 = OpAccessChain %68 %67 %21 %21
+         %79 = OpLoad %6 %78
+         %80 = OpAccessChain %71 %9 %77
+               OpStore %80 %79
+               OpBranch %39
+         %38 = OpLabel
+         %82 = OpLoad %12 %14
+         %83 = OpAccessChain %68 %67 %21 %21
+         %84 = OpLoad %6 %83
+         %85 = OpAccessChain %71 %9 %82
+               OpStore %85 %84
+               OpBranch %39
+         %39 = OpLabel
+               OpBranch %28
+         %28 = OpLabel
+         %88 = OpLoad %12 %14
+         %89 = OpIAdd %12 %88 %31
+               OpStore %14 %89
+               OpBranch %25
+         %27 = OpLabel
+         %92 = OpLoad %7 %9
+               OpStore %91 %92
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# _GLF_uniform_int_values
+BUFFER variant__GLF_uniform_int_values DATA_TYPE int32[] STD140 DATA
+ 0 4
+END
+# _GLF_uniform_float_values
+BUFFER variant__GLF_uniform_float_values DATA_TYPE float[] STD140 DATA
+ 0.0
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 256 256
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant__GLF_uniform_int_values AS uniform DESCRIPTOR_SET 0 BINDING 0
+  BIND BUFFER variant__GLF_uniform_float_values AS uniform DESCRIPTOR_SET 0 BINDING 1
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256
+
+EXPECT variant_framebuffer IDX 0 0 SIZE 256 256 EQ_RGBA 255 0 0 255
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-tail-duplicator-infinite-loops.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-tail-duplicator-infinite-loops.amber
new file mode 100644
index 0000000..7c51c19
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-tail-duplicator-infinite-loops.amber
@@ -0,0 +1,275 @@
+#!amber
+
+# Copyright 2020 Google LLC
+#
+# 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.
+
+
+# A test for a coverage-gap found by the GraphicsFuzz project.
+
+# Short description: A fragment shader that covers a specific tail duplicator code path
+
+# The test passes because the shader always writes red.
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+# variant_fragment_shader is derived from the following GLSL:
+# #version 310 es
+# #define _int_5 _GLF_uniform_int_values[0]
+# #define _int_0 _GLF_uniform_int_values[1]
+# #define _float_0_0 _GLF_uniform_float_values[0]
+# #define _float_1_0 _GLF_uniform_float_values[1]
+#
+# precision highp float;
+#
+# // Contents of _GLF_uniform_int_values: [5, 0]
+# layout(set = 0, binding = 0) uniform buf0 {
+#     int _GLF_uniform_int_values[2];
+# };
+# // Contents of _GLF_uniform_float_values: [0.0, 1.0]
+# layout(set = 0, binding = 1) uniform buf1 {
+#     float _GLF_uniform_float_values[2];
+# };
+# // Contents of zero: 0.0
+# layout(set = 0, binding = 2) uniform buf2 {
+#     float zero;
+# };
+# layout(location = 0) out vec4 _GLF_color;
+#
+# void main()
+# {
+#     _GLF_color = vec4(_float_0_0);
+#
+#     // Always false.
+#     if(zero > _float_0_0)
+#     {
+#         do
+#         {
+#             _GLF_color = vec4(_float_1_0);
+#         }
+#         while(true);
+#     }
+#     else
+#     {
+#         do
+#         {
+#             // Loops once because of the break inside.
+#             while(true)
+#             {
+#                 for(int i = _int_0; i < _int_5; i ++)
+#                 {
+#                     _GLF_color = vec4(_float_1_0, _float_0_0, _float_0_0, _float_1_0);
+#                 }
+#                 break;
+#             }
+#         }
+#         while(zero > _float_0_0); // Always false.
+#     }
+# }
+SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 10
+; Bound: 87
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %9
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 310
+               OpName %4 "main"
+               OpName %9 "_GLF_color"
+               OpName %13 "buf1"
+               OpMemberName %13 0 "_GLF_uniform_float_values"
+               OpName %15 ""
+               OpName %22 "buf2"
+               OpMemberName %22 0 "zero"
+               OpName %24 ""
+               OpName %53 "i"
+               OpName %55 "buf0"
+               OpMemberName %55 0 "_GLF_uniform_int_values"
+               OpName %57 ""
+               OpDecorate %9 Location 0
+               OpDecorate %12 ArrayStride 16
+               OpMemberDecorate %13 0 Offset 0
+               OpDecorate %13 Block
+               OpDecorate %15 DescriptorSet 0
+               OpDecorate %15 Binding 1
+               OpMemberDecorate %22 0 Offset 0
+               OpDecorate %22 Block
+               OpDecorate %24 DescriptorSet 0
+               OpDecorate %24 Binding 2
+               OpDecorate %53 RelaxedPrecision
+               OpDecorate %54 ArrayStride 16
+               OpMemberDecorate %55 0 RelaxedPrecision
+               OpMemberDecorate %55 0 Offset 0
+               OpDecorate %55 Block
+               OpDecorate %57 DescriptorSet 0
+               OpDecorate %57 Binding 0
+               OpDecorate %60 RelaxedPrecision
+               OpDecorate %66 RelaxedPrecision
+               OpDecorate %68 RelaxedPrecision
+               OpDecorate %79 RelaxedPrecision
+               OpDecorate %80 RelaxedPrecision
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeFloat 32
+          %7 = OpTypeVector %6 4
+          %8 = OpTypePointer Output %7
+          %9 = OpVariable %8 Output
+         %10 = OpTypeInt 32 0
+         %11 = OpConstant %10 2
+         %12 = OpTypeArray %6 %11
+         %13 = OpTypeStruct %12
+         %14 = OpTypePointer Uniform %13
+         %15 = OpVariable %14 Uniform
+         %16 = OpTypeInt 32 1
+         %17 = OpConstant %16 0
+         %18 = OpTypePointer Uniform %6
+         %22 = OpTypeStruct %6
+         %23 = OpTypePointer Uniform %22
+         %24 = OpVariable %23 Uniform
+         %29 = OpTypeBool
+         %37 = OpConstant %16 1
+         %41 = OpConstantTrue %29
+         %52 = OpTypePointer Function %16
+         %54 = OpTypeArray %16 %11
+         %55 = OpTypeStruct %54
+         %56 = OpTypePointer Uniform %55
+         %57 = OpVariable %56 Uniform
+         %58 = OpTypePointer Uniform %16
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+         %53 = OpVariable %52 Function
+         %19 = OpAccessChain %18 %15 %17 %17
+         %20 = OpLoad %6 %19
+         %21 = OpCompositeConstruct %7 %20 %20 %20 %20
+               OpStore %9 %21
+         %25 = OpAccessChain %18 %24 %17
+         %26 = OpLoad %6 %25
+         %27 = OpAccessChain %18 %15 %17 %17
+         %28 = OpLoad %6 %27
+         %30 = OpFOrdGreaterThan %29 %26 %28
+               OpSelectionMerge %32 None
+               OpBranchConditional %30 %31 %42
+         %31 = OpLabel
+               OpBranch %33
+         %33 = OpLabel
+               OpLoopMerge %35 %36 None
+               OpBranch %34
+         %34 = OpLabel
+         %38 = OpAccessChain %18 %15 %17 %37
+         %39 = OpLoad %6 %38
+         %40 = OpCompositeConstruct %7 %39 %39 %39 %39
+               OpStore %9 %40
+               OpBranch %36
+         %36 = OpLabel
+               OpBranchConditional %41 %33 %35
+         %35 = OpLabel
+               OpBranch %32
+         %42 = OpLabel
+               OpBranch %43
+         %43 = OpLabel
+               OpLoopMerge %45 %46 None
+               OpBranch %44
+         %44 = OpLabel
+               OpBranch %47
+         %47 = OpLabel
+               OpLoopMerge %49 %50 None
+               OpBranch %51
+         %51 = OpLabel
+               OpBranchConditional %41 %48 %49
+         %48 = OpLabel
+         %59 = OpAccessChain %58 %57 %17 %37
+         %60 = OpLoad %16 %59
+               OpStore %53 %60
+               OpBranch %61
+         %61 = OpLabel
+               OpLoopMerge %63 %64 None
+               OpBranch %65
+         %65 = OpLabel
+         %66 = OpLoad %16 %53
+         %67 = OpAccessChain %58 %57 %17 %17
+         %68 = OpLoad %16 %67
+         %69 = OpSLessThan %29 %66 %68
+               OpBranchConditional %69 %62 %63
+         %62 = OpLabel
+         %70 = OpAccessChain %18 %15 %17 %37
+         %71 = OpLoad %6 %70
+         %72 = OpAccessChain %18 %15 %17 %17
+         %73 = OpLoad %6 %72
+         %74 = OpAccessChain %18 %15 %17 %17
+         %75 = OpLoad %6 %74
+         %76 = OpAccessChain %18 %15 %17 %37
+         %77 = OpLoad %6 %76
+         %78 = OpCompositeConstruct %7 %71 %73 %75 %77
+               OpStore %9 %78
+               OpBranch %64
+         %64 = OpLabel
+         %79 = OpLoad %16 %53
+         %80 = OpIAdd %16 %79 %37
+               OpStore %53 %80
+               OpBranch %61
+         %63 = OpLabel
+               OpBranch %49
+         %50 = OpLabel
+               OpBranch %47
+         %49 = OpLabel
+               OpBranch %46
+         %46 = OpLabel
+         %82 = OpAccessChain %18 %24 %17
+         %83 = OpLoad %6 %82
+         %84 = OpAccessChain %18 %15 %17 %17
+         %85 = OpLoad %6 %84
+         %86 = OpFOrdGreaterThan %29 %83 %85
+               OpBranchConditional %86 %43 %45
+         %45 = OpLabel
+               OpBranch %32
+         %32 = OpLabel
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# zero
+BUFFER variant_zero DATA_TYPE float STD140 DATA
+ 0.0
+END
+# _GLF_uniform_float_values
+BUFFER variant__GLF_uniform_float_values DATA_TYPE float[] STD140 DATA
+ 0.0 1.0
+END
+# _GLF_uniform_int_values
+BUFFER variant__GLF_uniform_int_values DATA_TYPE int32[] STD140 DATA
+ 5 0
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 16 16
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant_zero AS uniform DESCRIPTOR_SET 0 BINDING 2
+  BIND BUFFER variant__GLF_uniform_float_values AS uniform DESCRIPTOR_SET 0 BINDING 1
+  BIND BUFFER variant__GLF_uniform_int_values AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 16 16
+
+EXPECT variant_framebuffer IDX 0 0 SIZE 16 16 EQ_RGBA 255 0 0 255
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-undefined-inversesqrt-reflect.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-undefined-inversesqrt-reflect.amber
new file mode 100644
index 0000000..632073c
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-undefined-inversesqrt-reflect.amber
@@ -0,0 +1,220 @@
+#!amber
+
+# Copyright 2020 Google LLC
+#
+# 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.
+
+
+# A test for a coverage-gap found by the GraphicsFuzz project.
+
+# Short description: A fragment shader that covers a specific APFloat code path
+
+# The test passes because the shader always writes red.
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+# variant_fragment_shader is derived from the following GLSL:
+# #version 310 es
+# #define _float_1_0 _GLF_uniform_float_values[0]
+#
+# precision highp float;
+#
+# // Contents of _GLF_uniform_float_values: 1.0
+# layout(set = 0, binding = 0) uniform buf0
+# {
+#     float _GLF_uniform_float_values[1];
+# };
+#
+# // Contents of v1: [0.0, 1.0]
+# layout(set = 0, binding = 1) uniform buf1
+# {
+#     highp vec2 v1;
+# };
+#
+# layout(location = 0) out vec4 _GLF_color;
+#
+# void main()
+# {
+#     mat2 m24 = mat2x2(_float_1_0, _float_1_0, dot(v1.x, 1.0), _float_1_0);
+#
+#     // a becomes 0.0.
+#     float a = float(m24);
+#
+#     // Since a negative value is given to inversesqrt this results in an undefined value,
+#     // but not in undefined behavior.
+#     vec2 v2 = inversesqrt(vec2(-1.0, 1.0));
+#
+#     // Since v2 includes an undefined value this results in an undefined value,
+#     // but not in undefined behavior.
+#     vec2 v3 = reflect(v2, vec2(a, 1.0));
+#
+#     _GLF_color = vec4(_float_1_0, v3, _float_1_0);
+#
+#     if (v1.y == _float_1_0)
+#     {
+#         _GLF_color.yz = vec2(0.0);
+#     }
+#     else
+#     {
+#         _GLF_color = vec4(0.0);
+#     }
+# }
+SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 10
+; Bound: 75
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %53
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 310
+               OpName %4 "main"
+               OpName %10 "m24"
+               OpName %14 "buf0"
+               OpMemberName %14 0 "_GLF_uniform_float_values"
+               OpName %16 ""
+               OpName %24 "buf1"
+               OpMemberName %24 0 "v1"
+               OpName %26 ""
+               OpName %39 "a"
+               OpName %43 "v2"
+               OpName %46 "v3"
+               OpName %53 "_GLF_color"
+               OpDecorate %13 ArrayStride 16
+               OpMemberDecorate %14 0 Offset 0
+               OpDecorate %14 Block
+               OpDecorate %16 DescriptorSet 0
+               OpDecorate %16 Binding 0
+               OpMemberDecorate %24 0 Offset 0
+               OpDecorate %24 Block
+               OpDecorate %26 DescriptorSet 0
+               OpDecorate %26 Binding 1
+               OpDecorate %53 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeFloat 32
+          %7 = OpTypeVector %6 2
+          %8 = OpTypeMatrix %7 2
+          %9 = OpTypePointer Function %8
+         %11 = OpTypeInt 32 0
+         %12 = OpConstant %11 1
+         %13 = OpTypeArray %6 %12
+         %14 = OpTypeStruct %13
+         %15 = OpTypePointer Uniform %14
+         %16 = OpVariable %15 Uniform
+         %17 = OpTypeInt 32 1
+         %18 = OpConstant %17 0
+         %19 = OpTypePointer Uniform %6
+         %24 = OpTypeStruct %7
+         %25 = OpTypePointer Uniform %24
+         %26 = OpVariable %25 Uniform
+         %27 = OpConstant %11 0
+         %30 = OpConstant %6 1
+         %34 = OpConstant %6 0
+         %38 = OpTypePointer Function %6
+         %42 = OpTypePointer Function %7
+         %44 = OpConstant %6 -0x1.8p+128
+         %45 = OpConstantComposite %7 %44 %30
+         %51 = OpTypeVector %6 4
+         %52 = OpTypePointer Output %51
+         %53 = OpVariable %52 Output
+         %66 = OpTypeBool
+         %70 = OpConstantComposite %7 %34 %34
+         %74 = OpConstantComposite %51 %34 %34 %34 %34
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+         %10 = OpVariable %9 Function
+         %39 = OpVariable %38 Function
+         %43 = OpVariable %42 Function
+         %46 = OpVariable %42 Function
+         %20 = OpAccessChain %19 %16 %18 %18
+         %21 = OpLoad %6 %20
+         %22 = OpAccessChain %19 %16 %18 %18
+         %23 = OpLoad %6 %22
+         %28 = OpAccessChain %19 %26 %18 %27
+         %29 = OpLoad %6 %28
+         %31 = OpFMul %6 %29 %30
+         %32 = OpAccessChain %19 %16 %18 %18
+         %33 = OpLoad %6 %32
+         %35 = OpCompositeConstruct %7 %21 %23
+         %36 = OpCompositeConstruct %7 %31 %33
+         %37 = OpCompositeConstruct %8 %35 %36
+               OpStore %10 %37
+         %40 = OpLoad %8 %10
+         %41 = OpCompositeExtract %6 %40 0 0
+               OpStore %39 %41
+               OpStore %43 %45
+         %47 = OpLoad %7 %43
+         %48 = OpLoad %6 %39
+         %49 = OpCompositeConstruct %7 %48 %30
+         %50 = OpExtInst %7 %1 Reflect %47 %49
+               OpStore %46 %50
+         %54 = OpAccessChain %19 %16 %18 %18
+         %55 = OpLoad %6 %54
+         %56 = OpLoad %7 %46
+         %57 = OpAccessChain %19 %16 %18 %18
+         %58 = OpLoad %6 %57
+         %59 = OpCompositeExtract %6 %56 0
+         %60 = OpCompositeExtract %6 %56 1
+         %61 = OpCompositeConstruct %51 %55 %59 %60 %58
+               OpStore %53 %61
+         %62 = OpAccessChain %19 %26 %18 %12
+         %63 = OpLoad %6 %62
+         %64 = OpAccessChain %19 %16 %18 %18
+         %65 = OpLoad %6 %64
+         %67 = OpFOrdEqual %66 %63 %65
+               OpSelectionMerge %69 None
+               OpBranchConditional %67 %68 %73
+         %68 = OpLabel
+         %71 = OpLoad %51 %53
+         %72 = OpVectorShuffle %51 %71 %70 0 4 5 3
+               OpStore %53 %72
+               OpBranch %69
+         %73 = OpLabel
+               OpStore %53 %74
+               OpBranch %69
+         %69 = OpLabel
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# v1
+BUFFER variant_v1 DATA_TYPE vec2<float> STD140 DATA
+ 0.0 1.0
+END
+# _GLF_uniform_float_values
+BUFFER variant__GLF_uniform_float_values DATA_TYPE float[] STD140 DATA
+ 1.0
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 256 256
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant_v1 AS uniform DESCRIPTOR_SET 0 BINDING 1
+  BIND BUFFER variant__GLF_uniform_float_values AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256
+
+EXPECT variant_framebuffer IDX 0 0 SIZE 256 256 EQ_RGBA 255 0 0 255
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-x86-isel-lowering-apfloat-nan-cos-cos.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-x86-isel-lowering-apfloat-nan-cos-cos.amber
new file mode 100644
index 0000000..9e14b29
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-x86-isel-lowering-apfloat-nan-cos-cos.amber
@@ -0,0 +1,215 @@
+#!amber
+
+# Copyright 2020 Google LLC
+#
+# 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.
+
+
+# A test for a coverage-gap found by the GraphicsFuzz project.
+
+# Short description: A fragment shader that covers a specific X86 ISel lowering and AP Float code paths
+
+# The test passes because the shader always writes red.
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+# variant_fragment_shader is derived from the following GLSL:
+# #version 310 es
+# #define _int_1 _GLF_uniform_int_values[0]
+# #define _int_0 _GLF_uniform_int_values[1]
+# #define _float_0_54 _GLF_uniform_float_values[0]
+# #define _float_0_55 _GLF_uniform_float_values[1]
+#
+# precision highp float;
+# precision highp int;
+#
+# // Contents of _GLF_uniform_int_values: [1, 0]
+# layout(set = 0, binding = 0) uniform buf0
+# {
+#     int _GLF_uniform_int_values[2];
+# };
+#
+# // Contents of _GLF_uniform_float_values: [0.54, 0.55]
+# layout(set = 0, binding = 1) uniform buf1
+# {
+#     float _GLF_uniform_float_values[2];
+# };
+#
+# layout(location = 0) out vec4 _GLF_color;
+#
+# void main()
+# {
+#     // uintbitstofloat(1) gives a very small denormalized value. The cos of this value
+#     // should be very close to 1; perhaps marginally smaller.  The cosine of *that* value
+#     // should then be bounded below by 0.54, and might be slightly larger,
+#     // so that 0.55 is a suitable upper bound.
+#     vec2 v1 = cos(cos(intBitsToFloat(ivec2(-1, _int_1))));
+#     _GLF_color = vec4(v1.x);
+#
+#     if (v1.y > _float_0_54 && v1.y < _float_0_55)
+#     {
+#         _GLF_color = vec4(_int_1, _int_0, _int_0, _int_1);
+#     }
+#     else
+#     {
+#         _GLF_color = vec4(_int_0);
+#     }
+# }
+SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 8
+; Bound: 76
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %29
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 310
+               OpName %4 "main"
+               OpName %9 "v1"
+               OpName %15 "buf0"
+               OpMemberName %15 0 "_GLF_uniform_int_values"
+               OpName %17 ""
+               OpName %29 "_GLF_color"
+               OpName %40 "buf1"
+               OpMemberName %40 0 "_GLF_uniform_float_values"
+               OpName %42 ""
+               OpDecorate %14 ArrayStride 16
+               OpMemberDecorate %15 0 Offset 0
+               OpDecorate %15 Block
+               OpDecorate %17 DescriptorSet 0
+               OpDecorate %17 Binding 0
+               OpDecorate %29 Location 0
+               OpDecorate %39 ArrayStride 16
+               OpMemberDecorate %40 0 Offset 0
+               OpDecorate %40 Block
+               OpDecorate %42 DescriptorSet 0
+               OpDecorate %42 Binding 1
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeFloat 32
+          %7 = OpTypeVector %6 2
+          %8 = OpTypePointer Function %7
+         %10 = OpTypeInt 32 1
+         %11 = OpConstant %10 -1
+         %12 = OpTypeInt 32 0
+         %13 = OpConstant %12 2
+         %14 = OpTypeArray %10 %13
+         %15 = OpTypeStruct %14
+         %16 = OpTypePointer Uniform %15
+         %17 = OpVariable %16 Uniform
+         %18 = OpConstant %10 0
+         %19 = OpTypePointer Uniform %10
+         %22 = OpTypeVector %10 2
+         %27 = OpTypeVector %6 4
+         %28 = OpTypePointer Output %27
+         %29 = OpVariable %28 Output
+         %30 = OpConstant %12 0
+         %31 = OpTypePointer Function %6
+         %35 = OpTypeBool
+         %36 = OpConstant %12 1
+         %39 = OpTypeArray %6 %13
+         %40 = OpTypeStruct %39
+         %41 = OpTypePointer Uniform %40
+         %42 = OpVariable %41 Uniform
+         %43 = OpTypePointer Uniform %6
+         %51 = OpConstant %10 1
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+          %9 = OpVariable %8 Function
+         %20 = OpAccessChain %19 %17 %18 %18
+         %21 = OpLoad %10 %20
+         %23 = OpCompositeConstruct %22 %11 %21
+         %24 = OpBitcast %7 %23
+         %25 = OpExtInst %7 %1 Cos %24
+         %26 = OpExtInst %7 %1 Cos %25
+               OpStore %9 %26
+         %32 = OpAccessChain %31 %9 %30
+         %33 = OpLoad %6 %32
+         %34 = OpCompositeConstruct %27 %33 %33 %33 %33
+               OpStore %29 %34
+         %37 = OpAccessChain %31 %9 %36
+         %38 = OpLoad %6 %37
+         %44 = OpAccessChain %43 %42 %18 %18
+         %45 = OpLoad %6 %44
+         %46 = OpFOrdGreaterThan %35 %38 %45
+               OpSelectionMerge %48 None
+               OpBranchConditional %46 %47 %48
+         %47 = OpLabel
+         %49 = OpAccessChain %31 %9 %36
+         %50 = OpLoad %6 %49
+         %52 = OpAccessChain %43 %42 %18 %51
+         %53 = OpLoad %6 %52
+         %54 = OpFOrdLessThan %35 %50 %53
+               OpBranch %48
+         %48 = OpLabel
+         %55 = OpPhi %35 %46 %5 %54 %47
+               OpSelectionMerge %57 None
+               OpBranchConditional %55 %56 %71
+         %56 = OpLabel
+         %58 = OpAccessChain %19 %17 %18 %18
+         %59 = OpLoad %10 %58
+         %60 = OpConvertSToF %6 %59
+         %61 = OpAccessChain %19 %17 %18 %51
+         %62 = OpLoad %10 %61
+         %63 = OpConvertSToF %6 %62
+         %64 = OpAccessChain %19 %17 %18 %51
+         %65 = OpLoad %10 %64
+         %66 = OpConvertSToF %6 %65
+         %67 = OpAccessChain %19 %17 %18 %18
+         %68 = OpLoad %10 %67
+         %69 = OpConvertSToF %6 %68
+         %70 = OpCompositeConstruct %27 %60 %63 %66 %69
+               OpStore %29 %70
+               OpBranch %57
+         %71 = OpLabel
+         %72 = OpAccessChain %19 %17 %18 %51
+         %73 = OpLoad %10 %72
+         %74 = OpConvertSToF %6 %73
+         %75 = OpCompositeConstruct %27 %74 %74 %74 %74
+               OpStore %29 %75
+               OpBranch %57
+         %57 = OpLabel
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# _GLF_uniform_float_values
+BUFFER variant__GLF_uniform_float_values DATA_TYPE float[] STD140 DATA
+ 0.54 0.55
+END
+# _GLF_uniform_int_values
+BUFFER variant__GLF_uniform_int_values DATA_TYPE int32[] STD140 DATA
+ 1 0
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 16 16
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant__GLF_uniform_float_values AS uniform DESCRIPTOR_SET 0 BINDING 1
+  BIND BUFFER variant__GLF_uniform_int_values AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 16 16
+
+EXPECT variant_framebuffer IDX 0 0 SIZE 16 16 EQ_RGBA 255 0 0 255
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-x86-isel-lowering-determinant-exp-acos.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-x86-isel-lowering-determinant-exp-acos.amber
new file mode 100644
index 0000000..6e2615b
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-x86-isel-lowering-determinant-exp-acos.amber
@@ -0,0 +1,206 @@
+#!amber
+
+# Copyright 2020 Google LLC
+#
+# 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.
+
+
+# A test for a coverage-gap found by the GraphicsFuzz project.
+
+# Short description: A fragment shader that covers a specific x86 isel lowering code path
+
+# The test passes because the shader always writes red.
+
+# Optimized using spirv-opt with the following arguments:
+# '--eliminate-dead-branches'
+# '--merge-return'
+# '--eliminate-dead-branches'
+# '--merge-blocks'
+# spirv-opt commit hash: a187dd58a0485988841d325a85c8e6063f53500a
+
+
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+# variant_fragment_shader is derived from the following GLSL:
+# #version 310 es
+# #define _float_0_0 _GLF_uniform_float_values[0]
+# #define _float_790_0 _GLF_uniform_float_values[1]
+# #define _float_2_0 _GLF_uniform_float_values[2]
+# #define _float_4_0 _GLF_uniform_float_values[3]
+# #define _float_1_0 _GLF_uniform_float_values[4]
+#
+# precision highp float;
+#
+# // Contents of _GLF_uniform_float_values: [0.0, 790.0, 2.0, 4.0, 1.0]
+# layout(set = 0, binding = 0) uniform buf0
+# {
+#     float _GLF_uniform_float_values[5];
+# };
+#
+# layout(location = 0) out vec4 _GLF_color;
+#
+# void main()
+# {
+#     // a becomes 0.
+#     float a = determinant(mat2(_float_2_0, _float_4_0, _float_1_0, _float_2_0));
+#
+#     //b becomes 0.
+#     float b = float(mat2(a));
+#
+#     // This results in an undefined value, but not in undefined behavior.
+#     // v1.x becomes undefined and v1.y becomes 0.
+#     vec2 v1 = acos(exp(vec2(_float_790_0, b)));
+#
+#     _GLF_color = vec4(v1.x);
+#
+#     if (v1.y == _float_0_0)
+#     {
+#         _GLF_color = vec4(_float_1_0, _float_0_0, _float_0_0, _float_1_0);
+#     }
+# }
+SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 10
+; Bound: 77
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %54
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 310
+               OpName %4 "main"
+               OpName %8 "a"
+               OpName %12 "buf0"
+               OpMemberName %12 0 "_GLF_uniform_float_values"
+               OpName %14 ""
+               OpName %37 "b"
+               OpName %44 "v1"
+               OpName %54 "_GLF_color"
+               OpDecorate %11 ArrayStride 16
+               OpMemberDecorate %12 0 Offset 0
+               OpDecorate %12 Block
+               OpDecorate %14 DescriptorSet 0
+               OpDecorate %14 Binding 0
+               OpDecorate %54 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeFloat 32
+          %7 = OpTypePointer Function %6
+          %9 = OpTypeInt 32 0
+         %10 = OpConstant %9 5
+         %11 = OpTypeArray %6 %10
+         %12 = OpTypeStruct %11
+         %13 = OpTypePointer Uniform %12
+         %14 = OpVariable %13 Uniform
+         %15 = OpTypeInt 32 1
+         %16 = OpConstant %15 0
+         %17 = OpConstant %15 2
+         %18 = OpTypePointer Uniform %6
+         %21 = OpConstant %15 3
+         %24 = OpConstant %15 4
+         %29 = OpTypeVector %6 2
+         %30 = OpTypeMatrix %29 2
+         %31 = OpConstant %6 1
+         %32 = OpConstant %6 0
+         %43 = OpTypePointer Function %29
+         %45 = OpConstant %15 1
+         %52 = OpTypeVector %6 4
+         %53 = OpTypePointer Output %52
+         %54 = OpVariable %53 Output
+         %55 = OpConstant %9 0
+         %59 = OpConstant %9 1
+         %64 = OpTypeBool
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+          %8 = OpVariable %7 Function
+         %37 = OpVariable %7 Function
+         %44 = OpVariable %43 Function
+         %19 = OpAccessChain %18 %14 %16 %17
+         %20 = OpLoad %6 %19
+         %22 = OpAccessChain %18 %14 %16 %21
+         %23 = OpLoad %6 %22
+         %25 = OpAccessChain %18 %14 %16 %24
+         %26 = OpLoad %6 %25
+         %27 = OpAccessChain %18 %14 %16 %17
+         %28 = OpLoad %6 %27
+         %33 = OpCompositeConstruct %29 %20 %23
+         %34 = OpCompositeConstruct %29 %26 %28
+         %35 = OpCompositeConstruct %30 %33 %34
+         %36 = OpExtInst %6 %1 Determinant %35
+               OpStore %8 %36
+         %38 = OpLoad %6 %8
+         %39 = OpCompositeConstruct %29 %38 %32
+         %40 = OpCompositeConstruct %29 %32 %38
+         %41 = OpCompositeConstruct %30 %39 %40
+         %42 = OpCompositeExtract %6 %41 0 0
+               OpStore %37 %42
+         %46 = OpAccessChain %18 %14 %16 %45
+         %47 = OpLoad %6 %46
+         %48 = OpLoad %6 %37
+         %49 = OpCompositeConstruct %29 %47 %48
+         %50 = OpExtInst %29 %1 Exp %49
+         %51 = OpExtInst %29 %1 Acos %50
+               OpStore %44 %51
+         %56 = OpAccessChain %7 %44 %55
+         %57 = OpLoad %6 %56
+         %58 = OpCompositeConstruct %52 %57 %57 %57 %57
+               OpStore %54 %58
+         %60 = OpAccessChain %7 %44 %59
+         %61 = OpLoad %6 %60
+         %62 = OpAccessChain %18 %14 %16 %16
+         %63 = OpLoad %6 %62
+         %65 = OpFOrdEqual %64 %61 %63
+               OpSelectionMerge %67 None
+               OpBranchConditional %65 %66 %67
+         %66 = OpLabel
+         %68 = OpAccessChain %18 %14 %16 %24
+         %69 = OpLoad %6 %68
+         %70 = OpAccessChain %18 %14 %16 %16
+         %71 = OpLoad %6 %70
+         %72 = OpAccessChain %18 %14 %16 %16
+         %73 = OpLoad %6 %72
+         %74 = OpAccessChain %18 %14 %16 %24
+         %75 = OpLoad %6 %74
+         %76 = OpCompositeConstruct %52 %69 %71 %73 %75
+               OpStore %54 %76
+               OpBranch %67
+         %67 = OpLabel
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# _GLF_uniform_float_values
+BUFFER variant__GLF_uniform_float_values DATA_TYPE float[] STD140 DATA
+ 0.0 790.0 2.0 4.0 1.0
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 256 256
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant__GLF_uniform_float_values AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256
+
+EXPECT variant_framebuffer IDX 0 0 SIZE 256 256 EQ_RGBA 255 0 0 255
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-x86-isel-lowering-machine-value-type-uint-to-float.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-x86-isel-lowering-machine-value-type-uint-to-float.amber
new file mode 100644
index 0000000..751206e
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-x86-isel-lowering-machine-value-type-uint-to-float.amber
@@ -0,0 +1,225 @@
+#!amber
+
+# Copyright 2020 Google LLC
+#
+# 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.
+
+
+# A test for a coverage-gap found by the GraphicsFuzz project.
+
+# Short description: Covers specific X86 ISel lowering and machine value type code paths
+
+# The test passes because the shader always writes red.
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+# variant_fragment_shader is derived from the following GLSL:
+# #version 310 es
+# #define _int_1 _GLF_uniform_int_values[0]
+# #define _int_0 _GLF_uniform_int_values[1]
+# #define _uint_1 _GLF_uniform_uint_values[0]
+# #define _uint_0 _GLF_uniform_uint_values[1]
+# #define _float_0_0 _GLF_uniform_float_values[0]
+#
+# precision highp float;
+# precision highp int;
+#
+# // Contents of _GLF_uniform_int_values: [1, 0]
+# layout(set = 0, binding = 0) uniform buf0
+# {
+#     int _GLF_uniform_int_values[2];
+# };
+#
+# // Contents of _GLF_uniform_uint_values: 1
+# layout(set = 0, binding = 1) uniform buf1
+# {
+#     uint _GLF_uniform_uint_values[2];
+# };
+#
+# // Contents of _GLF_uniform_float_values: 0.0
+# layout(set = 0, binding = 2) uniform buf2
+# {
+#     float _GLF_uniform_float_values[1];
+# };
+#
+# layout(location = 0) out vec4 _GLF_color;
+#
+# void main()
+# {
+#     uint a = _uint_1 >> uint(_float_0_0);
+#     float b = uintBitsToFloat(a);
+#     uint c = floatBitsToUint(b);
+#
+#     if (c == _uint_1)
+#     {
+#         _GLF_color = vec4(_int_1, _int_0, _int_0, _int_1);
+#     }
+#     else
+#     {
+#         _GLF_color = vec4(b);
+#     }
+# }
+SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 8
+; Bound: 69
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %46
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 310
+               OpName %4 "main"
+               OpName %8 "a"
+               OpName %11 "buf1"
+               OpMemberName %11 0 "_GLF_uniform_uint_values"
+               OpName %13 ""
+               OpName %22 "buf2"
+               OpMemberName %22 0 "_GLF_uniform_float_values"
+               OpName %24 ""
+               OpName %31 "b"
+               OpName %34 "c"
+               OpName %46 "_GLF_color"
+               OpName %48 "buf0"
+               OpMemberName %48 0 "_GLF_uniform_int_values"
+               OpName %50 ""
+               OpDecorate %10 ArrayStride 16
+               OpMemberDecorate %11 0 Offset 0
+               OpDecorate %11 Block
+               OpDecorate %13 DescriptorSet 0
+               OpDecorate %13 Binding 1
+               OpDecorate %21 ArrayStride 16
+               OpMemberDecorate %22 0 Offset 0
+               OpDecorate %22 Block
+               OpDecorate %24 DescriptorSet 0
+               OpDecorate %24 Binding 2
+               OpDecorate %46 Location 0
+               OpDecorate %47 ArrayStride 16
+               OpMemberDecorate %48 0 Offset 0
+               OpDecorate %48 Block
+               OpDecorate %50 DescriptorSet 0
+               OpDecorate %50 Binding 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeInt 32 0
+          %7 = OpTypePointer Function %6
+          %9 = OpConstant %6 2
+         %10 = OpTypeArray %6 %9
+         %11 = OpTypeStruct %10
+         %12 = OpTypePointer Uniform %11
+         %13 = OpVariable %12 Uniform
+         %14 = OpTypeInt 32 1
+         %15 = OpConstant %14 0
+         %16 = OpTypePointer Uniform %6
+         %19 = OpTypeFloat 32
+         %20 = OpConstant %6 1
+         %21 = OpTypeArray %19 %20
+         %22 = OpTypeStruct %21
+         %23 = OpTypePointer Uniform %22
+         %24 = OpVariable %23 Uniform
+         %25 = OpTypePointer Uniform %19
+         %30 = OpTypePointer Function %19
+         %40 = OpTypeBool
+         %44 = OpTypeVector %19 4
+         %45 = OpTypePointer Output %44
+         %46 = OpVariable %45 Output
+         %47 = OpTypeArray %14 %9
+         %48 = OpTypeStruct %47
+         %49 = OpTypePointer Uniform %48
+         %50 = OpVariable %49 Uniform
+         %51 = OpTypePointer Uniform %14
+         %55 = OpConstant %14 1
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+          %8 = OpVariable %7 Function
+         %31 = OpVariable %30 Function
+         %34 = OpVariable %7 Function
+         %17 = OpAccessChain %16 %13 %15 %15
+         %18 = OpLoad %6 %17
+         %26 = OpAccessChain %25 %24 %15 %15
+         %27 = OpLoad %19 %26
+         %28 = OpConvertFToU %6 %27
+         %29 = OpShiftRightLogical %6 %18 %28
+               OpStore %8 %29
+         %32 = OpLoad %6 %8
+         %33 = OpBitcast %19 %32
+               OpStore %31 %33
+         %35 = OpLoad %19 %31
+         %36 = OpBitcast %6 %35
+               OpStore %34 %36
+         %37 = OpLoad %6 %34
+         %38 = OpAccessChain %16 %13 %15 %15
+         %39 = OpLoad %6 %38
+         %41 = OpIEqual %40 %37 %39
+               OpSelectionMerge %43 None
+               OpBranchConditional %41 %42 %66
+         %42 = OpLabel
+         %52 = OpAccessChain %51 %50 %15 %15
+         %53 = OpLoad %14 %52
+         %54 = OpConvertSToF %19 %53
+         %56 = OpAccessChain %51 %50 %15 %55
+         %57 = OpLoad %14 %56
+         %58 = OpConvertSToF %19 %57
+         %59 = OpAccessChain %51 %50 %15 %55
+         %60 = OpLoad %14 %59
+         %61 = OpConvertSToF %19 %60
+         %62 = OpAccessChain %51 %50 %15 %15
+         %63 = OpLoad %14 %62
+         %64 = OpConvertSToF %19 %63
+         %65 = OpCompositeConstruct %44 %54 %58 %61 %64
+               OpStore %46 %65
+               OpBranch %43
+         %66 = OpLabel
+         %67 = OpLoad %19 %31
+         %68 = OpCompositeConstruct %44 %67 %67 %67 %67
+               OpStore %46 %68
+               OpBranch %43
+         %43 = OpLabel
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# _GLF_uniform_float_values
+BUFFER variant__GLF_uniform_float_values DATA_TYPE float[] STD140 DATA
+ 0.0
+END
+# _GLF_uniform_uint_values
+BUFFER variant__GLF_uniform_uint_values DATA_TYPE int32[] STD140 DATA
+ 1 0
+END
+# _GLF_uniform_int_values
+BUFFER variant__GLF_uniform_int_values DATA_TYPE int32[] STD140 DATA
+ 1 0
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 256 256
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant__GLF_uniform_float_values AS uniform DESCRIPTOR_SET 0 BINDING 2
+  BIND BUFFER variant__GLF_uniform_uint_values AS uniform DESCRIPTOR_SET 0 BINDING 1
+  BIND BUFFER variant__GLF_uniform_int_values AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256
+
+EXPECT variant_framebuffer IDX 0 0 SIZE 256 256 EQ_RGBA 255 0 0 255
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-x86-isel-lowering-negative-left-shift.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-x86-isel-lowering-negative-left-shift.amber
new file mode 100644
index 0000000..10a5501
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-x86-isel-lowering-negative-left-shift.amber
@@ -0,0 +1,311 @@
+#!amber
+
+# Copyright 2020 Google LLC
+#
+# 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.
+
+
+# A test for a coverage-gap found by the GraphicsFuzz project.
+
+# Short description: A fragment shader that covers a specific X86 ISel lowering code path
+
+# The test passes because the shader always writes red.
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+# variant_fragment_shader is derived from the following GLSL:
+# #version 310 es
+# #define _int_0 _GLF_uniform_int_values[0]
+# #define _int_1 _GLF_uniform_int_values[1]
+# #define _int_4 _GLF_uniform_int_values[2]
+# #define _int_2 _GLF_uniform_int_values[3]
+# #define _float_1_0 _GLF_uniform_float_values[0]
+# #define _float_0_0 _GLF_uniform_float_values[1]
+# #define _float_2_0 _GLF_uniform_float_values[2]
+#
+# precision highp float;
+#
+# precision highp int;
+#
+# // Contents of _GLF_uniform_int_values: [0, 1, 4, 2]
+# layout(set = 0, binding = 0) uniform buf0
+# {
+#     int _GLF_uniform_int_values[4];
+# };
+#
+# // Contents of _GLF_uniform_float_values: [1.0, 0.0, 2.0]
+# layout(set = 0, binding = 1) uniform buf1
+# {
+#     float _GLF_uniform_float_values[3];
+# };
+#
+# layout(location = 0) out vec4 _GLF_color;
+#
+# void main()
+# {
+#     float A[2];
+#     A[0] = _float_0_0;
+#     A[1] = _float_0_0;
+#
+#     for (int i = _int_0; i < _int_2; i++)
+#     {
+#         for (int j = _int_0; j < _int_4; j++)
+#         {
+#             switch (j)
+#             {
+#                 case 0:
+#                     // Undefined behavior but doesn't matter because the value will be
+#                     // overwritten in the next iteration.
+#                     if ((1 << -1) < i)
+#                     {
+#                         continue;
+#                     }
+#                     A[i] = _float_2_0;
+#                     break;
+#                 case 1:
+#                     A[i] = _float_1_0;
+#                     break;
+#             }
+#         }
+#     }
+#     if (A[_int_0] == _float_1_0 && A[_int_1] == _float_1_0)
+#     {
+#         _GLF_color = vec4(_int_1, _int_0, _int_0, _int_1);
+#     }
+#     else
+#     {
+#         _GLF_color = vec4(_int_1);
+#     }
+# }
+SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 8
+; Bound: 127
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %108
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 310
+               OpName %4 "main"
+               OpName %11 "A"
+               OpName %16 "buf1"
+               OpMemberName %16 0 "_GLF_uniform_float_values"
+               OpName %18 ""
+               OpName %29 "i"
+               OpName %32 "buf0"
+               OpMemberName %32 0 "_GLF_uniform_int_values"
+               OpName %34 ""
+               OpName %49 "j"
+               OpName %108 "_GLF_color"
+               OpDecorate %15 ArrayStride 16
+               OpMemberDecorate %16 0 Offset 0
+               OpDecorate %16 Block
+               OpDecorate %18 DescriptorSet 0
+               OpDecorate %18 Binding 1
+               OpDecorate %31 ArrayStride 16
+               OpMemberDecorate %32 0 Offset 0
+               OpDecorate %32 Block
+               OpDecorate %34 DescriptorSet 0
+               OpDecorate %34 Binding 0
+               OpDecorate %108 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeFloat 32
+          %7 = OpTypeInt 32 0
+          %8 = OpConstant %7 2
+          %9 = OpTypeArray %6 %8
+         %10 = OpTypePointer Function %9
+         %12 = OpTypeInt 32 1
+         %13 = OpConstant %12 0
+         %14 = OpConstant %7 3
+         %15 = OpTypeArray %6 %14
+         %16 = OpTypeStruct %15
+         %17 = OpTypePointer Uniform %16
+         %18 = OpVariable %17 Uniform
+         %19 = OpConstant %12 1
+         %20 = OpTypePointer Uniform %6
+         %23 = OpTypePointer Function %6
+         %28 = OpTypePointer Function %12
+         %30 = OpConstant %7 4
+         %31 = OpTypeArray %12 %30
+         %32 = OpTypeStruct %31
+         %33 = OpTypePointer Uniform %32
+         %34 = OpVariable %33 Uniform
+         %35 = OpTypePointer Uniform %12
+         %44 = OpConstant %12 3
+         %47 = OpTypeBool
+         %58 = OpConstant %12 2
+         %66 = OpConstant %12 -2147483648
+        %106 = OpTypeVector %6 4
+        %107 = OpTypePointer Output %106
+        %108 = OpVariable %107 Output
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+         %11 = OpVariable %10 Function
+         %29 = OpVariable %28 Function
+         %49 = OpVariable %28 Function
+         %21 = OpAccessChain %20 %18 %13 %19
+         %22 = OpLoad %6 %21
+         %24 = OpAccessChain %23 %11 %13
+               OpStore %24 %22
+         %25 = OpAccessChain %20 %18 %13 %19
+         %26 = OpLoad %6 %25
+         %27 = OpAccessChain %23 %11 %19
+               OpStore %27 %26
+         %36 = OpAccessChain %35 %34 %13 %13
+         %37 = OpLoad %12 %36
+               OpStore %29 %37
+               OpBranch %38
+         %38 = OpLabel
+               OpLoopMerge %40 %41 None
+               OpBranch %42
+         %42 = OpLabel
+         %43 = OpLoad %12 %29
+         %45 = OpAccessChain %35 %34 %13 %44
+         %46 = OpLoad %12 %45
+         %48 = OpSLessThan %47 %43 %46
+               OpBranchConditional %48 %39 %40
+         %39 = OpLabel
+         %50 = OpAccessChain %35 %34 %13 %13
+         %51 = OpLoad %12 %50
+               OpStore %49 %51
+               OpBranch %52
+         %52 = OpLabel
+               OpLoopMerge %54 %55 None
+               OpBranch %56
+         %56 = OpLabel
+         %57 = OpLoad %12 %49
+         %59 = OpAccessChain %35 %34 %13 %58
+         %60 = OpLoad %12 %59
+         %61 = OpSLessThan %47 %57 %60
+               OpBranchConditional %61 %53 %54
+         %53 = OpLabel
+         %62 = OpLoad %12 %49
+               OpSelectionMerge %65 None
+               OpSwitch %62 %65 0 %63 1 %64
+         %63 = OpLabel
+         %67 = OpLoad %12 %29
+         %68 = OpSLessThan %47 %66 %67
+               OpSelectionMerge %70 None
+               OpBranchConditional %68 %69 %70
+         %69 = OpLabel
+               OpBranch %55
+         %70 = OpLabel
+         %72 = OpLoad %12 %29
+         %73 = OpAccessChain %20 %18 %13 %58
+         %74 = OpLoad %6 %73
+         %75 = OpAccessChain %23 %11 %72
+               OpStore %75 %74
+               OpBranch %65
+         %64 = OpLabel
+         %77 = OpLoad %12 %29
+         %78 = OpAccessChain %20 %18 %13 %13
+         %79 = OpLoad %6 %78
+         %80 = OpAccessChain %23 %11 %77
+               OpStore %80 %79
+               OpBranch %65
+         %65 = OpLabel
+               OpBranch %55
+         %55 = OpLabel
+         %83 = OpLoad %12 %49
+         %84 = OpIAdd %12 %83 %19
+               OpStore %49 %84
+               OpBranch %52
+         %54 = OpLabel
+               OpBranch %41
+         %41 = OpLabel
+         %85 = OpLoad %12 %29
+         %86 = OpIAdd %12 %85 %19
+               OpStore %29 %86
+               OpBranch %38
+         %40 = OpLabel
+         %87 = OpAccessChain %35 %34 %13 %13
+         %88 = OpLoad %12 %87
+         %89 = OpAccessChain %23 %11 %88
+         %90 = OpLoad %6 %89
+         %91 = OpAccessChain %20 %18 %13 %13
+         %92 = OpLoad %6 %91
+         %93 = OpFOrdEqual %47 %90 %92
+               OpSelectionMerge %95 None
+               OpBranchConditional %93 %94 %95
+         %94 = OpLabel
+         %96 = OpAccessChain %35 %34 %13 %19
+         %97 = OpLoad %12 %96
+         %98 = OpAccessChain %23 %11 %97
+         %99 = OpLoad %6 %98
+        %100 = OpAccessChain %20 %18 %13 %13
+        %101 = OpLoad %6 %100
+        %102 = OpFOrdEqual %47 %99 %101
+               OpBranch %95
+         %95 = OpLabel
+        %103 = OpPhi %47 %93 %40 %102 %94
+               OpSelectionMerge %105 None
+               OpBranchConditional %103 %104 %122
+        %104 = OpLabel
+        %109 = OpAccessChain %35 %34 %13 %19
+        %110 = OpLoad %12 %109
+        %111 = OpConvertSToF %6 %110
+        %112 = OpAccessChain %35 %34 %13 %13
+        %113 = OpLoad %12 %112
+        %114 = OpConvertSToF %6 %113
+        %115 = OpAccessChain %35 %34 %13 %13
+        %116 = OpLoad %12 %115
+        %117 = OpConvertSToF %6 %116
+        %118 = OpAccessChain %35 %34 %13 %19
+        %119 = OpLoad %12 %118
+        %120 = OpConvertSToF %6 %119
+        %121 = OpCompositeConstruct %106 %111 %114 %117 %120
+               OpStore %108 %121
+               OpBranch %105
+        %122 = OpLabel
+        %123 = OpAccessChain %35 %34 %13 %19
+        %124 = OpLoad %12 %123
+        %125 = OpConvertSToF %6 %124
+        %126 = OpCompositeConstruct %106 %125 %125 %125 %125
+               OpStore %108 %126
+               OpBranch %105
+        %105 = OpLabel
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# _GLF_uniform_float_values
+BUFFER variant__GLF_uniform_float_values DATA_TYPE float[] STD140 DATA
+ 1.0 0.0 2.0
+END
+# _GLF_uniform_int_values
+BUFFER variant__GLF_uniform_int_values DATA_TYPE int32[] STD140 DATA
+ 0 1 4 2
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 16 16
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant__GLF_uniform_float_values AS uniform DESCRIPTOR_SET 0 BINDING 1
+  BIND BUFFER variant__GLF_uniform_int_values AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 16 16
+
+EXPECT variant_framebuffer IDX 0 0 SIZE 16 16 EQ_RGBA 255 0 0 255
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-x86-isel-lowering-selection-dag-struct-array-clamp-index.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-x86-isel-lowering-selection-dag-struct-array-clamp-index.amber
new file mode 100644
index 0000000..c73b000
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-x86-isel-lowering-selection-dag-struct-array-clamp-index.amber
@@ -0,0 +1,224 @@
+#!amber
+
+# Copyright 2020 Google LLC
+#
+# 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.
+
+
+# A test for a coverage-gap found by the GraphicsFuzz project.
+
+# Short description: Covers a specific X86 ISel lowering and DAG selection code paths
+
+# The test passes because the shader always writes red.
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+# variant_fragment_shader is derived from the following GLSL:
+# #version 310 es
+# #define _int_1 _GLF_uniform_int_values[0]
+# #define _int_0 _GLF_uniform_int_values[1]
+#
+# precision highp float;
+# precision highp int;
+#
+# // Contents of _GLF_uniform_int_values: [1, 0]
+# layout(set = 0, binding = 0) uniform buf0
+# {
+#     int _GLF_uniform_int_values[2];
+# };
+#
+# layout(location = 0) out vec4 _GLF_color;
+#
+# struct S {
+#     int a;
+#     int b;
+#     int c;
+# };
+#
+# void main()
+# {
+#     S A[2];
+#
+#     A[_int_0] = S(_int_0, _int_0, _int_0);
+#     A[_int_1] = S(_int_0, _int_0, _int_0);
+#
+#     // Always true.
+#     if (A[_int_0].b == _int_0)
+#     {
+#         // A[1].b becomes 1.
+#         A[clamp(_int_0, 1, 2)].b = _int_1;
+#     }
+#
+#     if (A[_int_1].b == _int_1)
+#     {
+#         _GLF_color = vec4(_int_1, _int_0, _int_0, _int_1);
+#     }
+#     else
+#     {
+#         _GLF_color = vec4(_int_1);
+#     }
+# }
+SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 8
+; Bound: 90
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %71
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 310
+               OpName %4 "main"
+               OpName %7 "S"
+               OpMemberName %7 0 "a"
+               OpMemberName %7 1 "b"
+               OpMemberName %7 2 "c"
+               OpName %12 "A"
+               OpName %14 "buf0"
+               OpMemberName %14 0 "_GLF_uniform_int_values"
+               OpName %16 ""
+               OpName %71 "_GLF_color"
+               OpDecorate %13 ArrayStride 16
+               OpMemberDecorate %14 0 Offset 0
+               OpDecorate %14 Block
+               OpDecorate %16 DescriptorSet 0
+               OpDecorate %16 Binding 0
+               OpDecorate %71 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeInt 32 1
+          %7 = OpTypeStruct %6 %6 %6
+          %8 = OpTypeInt 32 0
+          %9 = OpConstant %8 2
+         %10 = OpTypeArray %7 %9
+         %11 = OpTypePointer Function %10
+         %13 = OpTypeArray %6 %9
+         %14 = OpTypeStruct %13
+         %15 = OpTypePointer Uniform %14
+         %16 = OpVariable %15 Uniform
+         %17 = OpConstant %6 0
+         %18 = OpConstant %6 1
+         %19 = OpTypePointer Uniform %6
+         %29 = OpTypePointer Function %7
+         %43 = OpTypePointer Function %6
+         %48 = OpTypeBool
+         %54 = OpConstant %6 2
+         %68 = OpTypeFloat 32
+         %69 = OpTypeVector %68 4
+         %70 = OpTypePointer Output %69
+         %71 = OpVariable %70 Output
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+         %12 = OpVariable %11 Function
+         %20 = OpAccessChain %19 %16 %17 %18
+         %21 = OpLoad %6 %20
+         %22 = OpAccessChain %19 %16 %17 %18
+         %23 = OpLoad %6 %22
+         %24 = OpAccessChain %19 %16 %17 %18
+         %25 = OpLoad %6 %24
+         %26 = OpAccessChain %19 %16 %17 %18
+         %27 = OpLoad %6 %26
+         %28 = OpCompositeConstruct %7 %23 %25 %27
+         %30 = OpAccessChain %29 %12 %21
+               OpStore %30 %28
+         %31 = OpAccessChain %19 %16 %17 %17
+         %32 = OpLoad %6 %31
+         %33 = OpAccessChain %19 %16 %17 %18
+         %34 = OpLoad %6 %33
+         %35 = OpAccessChain %19 %16 %17 %18
+         %36 = OpLoad %6 %35
+         %37 = OpAccessChain %19 %16 %17 %18
+         %38 = OpLoad %6 %37
+         %39 = OpCompositeConstruct %7 %34 %36 %38
+         %40 = OpAccessChain %29 %12 %32
+               OpStore %40 %39
+         %41 = OpAccessChain %19 %16 %17 %18
+         %42 = OpLoad %6 %41
+         %44 = OpAccessChain %43 %12 %42 %18
+         %45 = OpLoad %6 %44
+         %46 = OpAccessChain %19 %16 %17 %18
+         %47 = OpLoad %6 %46
+         %49 = OpIEqual %48 %45 %47
+               OpSelectionMerge %51 None
+               OpBranchConditional %49 %50 %51
+         %50 = OpLabel
+         %52 = OpAccessChain %19 %16 %17 %18
+         %53 = OpLoad %6 %52
+         %55 = OpExtInst %6 %1 SClamp %53 %18 %54
+         %56 = OpAccessChain %19 %16 %17 %17
+         %57 = OpLoad %6 %56
+         %58 = OpAccessChain %43 %12 %55 %18
+               OpStore %58 %57
+               OpBranch %51
+         %51 = OpLabel
+         %59 = OpAccessChain %19 %16 %17 %17
+         %60 = OpLoad %6 %59
+         %61 = OpAccessChain %43 %12 %60 %18
+         %62 = OpLoad %6 %61
+         %63 = OpAccessChain %19 %16 %17 %17
+         %64 = OpLoad %6 %63
+         %65 = OpIEqual %48 %62 %64
+               OpSelectionMerge %67 None
+               OpBranchConditional %65 %66 %85
+         %66 = OpLabel
+         %72 = OpAccessChain %19 %16 %17 %17
+         %73 = OpLoad %6 %72
+         %74 = OpConvertSToF %68 %73
+         %75 = OpAccessChain %19 %16 %17 %18
+         %76 = OpLoad %6 %75
+         %77 = OpConvertSToF %68 %76
+         %78 = OpAccessChain %19 %16 %17 %18
+         %79 = OpLoad %6 %78
+         %80 = OpConvertSToF %68 %79
+         %81 = OpAccessChain %19 %16 %17 %17
+         %82 = OpLoad %6 %81
+         %83 = OpConvertSToF %68 %82
+         %84 = OpCompositeConstruct %69 %74 %77 %80 %83
+               OpStore %71 %84
+               OpBranch %67
+         %85 = OpLabel
+         %86 = OpAccessChain %19 %16 %17 %17
+         %87 = OpLoad %6 %86
+         %88 = OpConvertSToF %68 %87
+         %89 = OpCompositeConstruct %69 %88 %88 %88 %88
+               OpStore %71 %89
+               OpBranch %67
+         %67 = OpLabel
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# _GLF_uniform_int_values
+BUFFER variant__GLF_uniform_int_values DATA_TYPE int32[] STD140 DATA
+ 1 0
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 256 256
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant__GLF_uniform_int_values AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256
+
+EXPECT variant_framebuffer IDX 0 0 SIZE 256 256 EQ_RGBA 255 0 0 255
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/do-while-if-return.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/do-while-if-return.amber
new file mode 100644
index 0000000..81113bf
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/do-while-if-return.amber
@@ -0,0 +1,231 @@
+#!amber
+
+# Copyright 2020 Google LLC
+#
+# 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.
+
+
+# A test for a bug found by the GraphicsFuzz project.
+
+# Short description: A fragment shader with true if in a nested do while loop
+
+# The test passes because the shader always writes color red.
+
+# Optimized using spirv-opt with the following arguments:
+# '--simplify-instructions'
+# '--private-to-local'
+# '--eliminate-local-multi-store'
+# '--convert-local-access-chains'
+# '--inline-entry-points-exhaustive'
+# '--simplify-instructions'
+# '--eliminate-dead-inserts'
+# '--vector-dce'
+# '--combine-access-chains'
+# '--convert-local-access-chains'
+# '--if-conversion'
+# '--private-to-local'
+# '--eliminate-local-single-store'
+# '--copy-propagate-arrays'
+# spirv-opt commit hash: 230f363e6da32791f640b02205e0645cc67c3f1d
+
+
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+# variant_fragment_shader is derived from the following GLSL:
+# #version 320 es
+# precision highp float;
+#
+# precision highp int;
+#
+# layout(location = 0) out vec4 _GLF_color;
+# layout(set = 0, binding = 0) uniform buf0
+# {
+#     vec2 injectionSwitch;   // x == 0.0, y == 1.0
+# };
+#
+# int func()
+# {
+#     const int loop_limit = 100;
+#     int loop_count = 0;
+#     do
+#     {
+#         loop_count++;
+#         do
+#         {
+#             loop_count++;
+#             // Always true.
+#             if (injectionSwitch.x < injectionSwitch.y)
+#             {
+#                 return 1;
+#             }
+#             // Always true.
+#             if (injectionSwitch.x < injectionSwitch.y)
+#             {
+#                 break;
+#             }
+#         } while (loop_count < loop_limit);
+#     } while (loop_count < loop_limit);
+#     return 0;
+# }
+# void main()
+# {
+#     if(func() == 1)
+#     {
+#         _GLF_color = vec4(1.0, 0.0, 0.0, 1.0);
+#     }
+#     else
+#     {
+#         _GLF_color = vec4(1.0);
+#     }
+# }
+SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 10
+; Bound: 73
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %65
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 320
+               OpName %4 "main"
+               OpName %8 "func("
+               OpName %11 "loop_count"
+               OpName %28 "buf0"
+               OpMemberName %28 0 "injectionSwitch"
+               OpName %30 ""
+               OpName %65 "_GLF_color"
+               OpMemberDecorate %28 0 Offset 0
+               OpDecorate %28 Block
+               OpDecorate %30 DescriptorSet 0
+               OpDecorate %30 Binding 0
+               OpDecorate %65 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeInt 32 1
+          %7 = OpTypeFunction %6
+         %10 = OpTypePointer Function %6
+         %12 = OpConstant %6 0
+         %18 = OpConstant %6 1
+         %26 = OpTypeFloat 32
+         %27 = OpTypeVector %26 2
+         %28 = OpTypeStruct %27
+         %29 = OpTypePointer Uniform %28
+         %30 = OpVariable %29 Uniform
+         %31 = OpTypeInt 32 0
+         %32 = OpConstant %31 0
+         %33 = OpTypePointer Uniform %26
+         %36 = OpConstant %31 1
+         %39 = OpTypeBool
+         %53 = OpConstant %6 100
+         %63 = OpTypeVector %26 4
+         %64 = OpTypePointer Output %63
+         %65 = OpVariable %64 Output
+         %66 = OpConstant %26 1
+         %67 = OpConstant %26 0
+         %68 = OpConstantComposite %63 %66 %67 %67 %66
+         %70 = OpConstantComposite %63 %66 %66 %66 %66
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+         %59 = OpFunctionCall %6 %8
+         %60 = OpIEqual %39 %59 %18
+               OpSelectionMerge %62 None
+               OpBranchConditional %60 %61 %69
+         %61 = OpLabel
+               OpStore %65 %68
+               OpBranch %62
+         %69 = OpLabel
+               OpStore %65 %70
+               OpBranch %62
+         %62 = OpLabel
+               OpReturn
+               OpFunctionEnd
+          %8 = OpFunction %6 None %7
+          %9 = OpLabel
+         %11 = OpVariable %10 Function
+               OpStore %11 %12
+               OpBranch %13
+         %13 = OpLabel
+         %71 = OpPhi %6 %12 %9 %25 %16
+               OpLoopMerge %15 %16 None
+               OpBranch %14
+         %14 = OpLabel
+         %19 = OpIAdd %6 %71 %18
+               OpStore %11 %19
+               OpBranch %20
+         %20 = OpLabel
+         %72 = OpPhi %6 %19 %14 %25 %23
+               OpLoopMerge %22 %23 None
+               OpBranch %21
+         %21 = OpLabel
+         %25 = OpIAdd %6 %72 %18
+               OpStore %11 %25
+         %34 = OpAccessChain %33 %30 %12 %32
+         %35 = OpLoad %26 %34
+         %37 = OpAccessChain %33 %30 %12 %36
+         %38 = OpLoad %26 %37
+         %40 = OpFOrdLessThan %39 %35 %38
+               OpSelectionMerge %42 None
+               OpBranchConditional %40 %41 %42
+         %41 = OpLabel
+               OpReturnValue %18
+         %42 = OpLabel
+         %44 = OpAccessChain %33 %30 %12 %32
+         %45 = OpLoad %26 %44
+         %46 = OpAccessChain %33 %30 %12 %36
+         %47 = OpLoad %26 %46
+         %48 = OpFOrdLessThan %39 %45 %47
+               OpSelectionMerge %50 None
+               OpBranchConditional %48 %49 %50
+         %49 = OpLabel
+               OpBranch %22
+         %50 = OpLabel
+               OpBranch %23
+         %23 = OpLabel
+         %54 = OpSLessThan %39 %25 %53
+               OpBranchConditional %54 %20 %22
+         %22 = OpLabel
+               OpBranch %16
+         %16 = OpLabel
+         %56 = OpSLessThan %39 %25 %53
+               OpBranchConditional %56 %13 %15
+         %15 = OpLabel
+               OpReturnValue %12
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# injectionSwitch
+BUFFER variant_injectionSwitch DATA_TYPE vec2<float> STD140 DATA
+ 0.0 1.0
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 256 256
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant_injectionSwitch AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256
+
+EXPECT variant_framebuffer IDX 0 0 SIZE 256 256 EQ_RGBA 255 0 0 255
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/flag-always-false-if.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/flag-always-false-if.amber
new file mode 100644
index 0000000..27acd10
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/flag-always-false-if.amber
@@ -0,0 +1,299 @@
+#!amber
+
+# Copyright 2020 Google LLC
+#
+# 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.
+
+
+# A test for a bug found by the GraphicsFuzz project.
+
+# Short description: A fragment shader with recurrent always false if statement
+
+# The test passes because the shader always writes color red.
+
+# Optimized using spirv-opt with the following arguments:
+# '--vector-dce'
+# '--vector-dce'
+# '--scalar-replacement=100'
+# '--redundancy-elimination'
+# '--redundancy-elimination'
+# '--eliminate-dead-branches'
+# '--eliminate-dead-branches'
+# '--merge-blocks'
+# '--scalar-replacement=100'
+# '--reduce-load-size'
+# '--copy-propagate-arrays'
+# '--eliminate-dead-branches'
+# '--merge-blocks'
+# '--eliminate-dead-code-aggressive'
+# '--inline-entry-points-exhaustive'
+# '--simplify-instructions'
+# '--redundancy-elimination'
+# '--ccp'
+# '--eliminate-local-single-block'
+# '--scalar-replacement=100'
+# '--reduce-load-size'
+# '--eliminate-local-single-block'
+# '--reduce-load-size'
+# '--eliminate-local-single-store'
+# '--inline-entry-points-exhaustive'
+# spirv-opt commit hash: 230f363e6da32791f640b02205e0645cc67c3f1d
+
+
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+# variant_fragment_shader is derived from the following GLSL:
+# #version 320 es
+# precision highp float;
+#
+# precision highp int;
+#
+#
+# layout(location = 0) out vec4 _GLF_color;
+#
+# layout(set = 0, binding = 0) uniform buf0
+# {
+#     vec2 injectionSwitch; // x == 0.0, y == 1.0
+# };
+# void main()
+# {
+#     const int loop_limit = 100;
+#     int loop_count = 0;
+#     // Always false.
+#     if (injectionSwitch.x > injectionSwitch.y)
+#     {
+#         return;
+#     }
+#     // Always false.
+#     gl_FragCoord.x < log(1.0);
+#     for (; loop_count < loop_limit; loop_count++)
+#     {
+#         // Always false.
+#         if (injectionSwitch.x > injectionSwitch.y)
+#         {
+#             break;
+#         }
+#         // Always false.
+#         if (injectionSwitch.x > injectionSwitch.y)
+#         {
+#             _GLF_color = vec4(1.0);
+#         }
+#         else
+#         {
+#             // Always false.
+#             if (gl_FragCoord.x < 0.0)
+#             {
+#                 return;
+#             }
+#         }
+#         // Always false.
+#         if (injectionSwitch.x > injectionSwitch.y)
+#         {
+#             _GLF_color = vec4(1.0);
+#         }
+#         else
+#         {
+#             _GLF_color = vec4(1.0, 0.0, 0.0, 1.0);
+#         }
+#         // Always false.
+#         if (injectionSwitch.x > injectionSwitch.y)
+#         {
+#             return;
+#         }
+#         // Always false.
+#         if (gl_FragCoord.x < 0.0)
+#         {
+#             for (;  loop_count < loop_limit; loop_count++)
+#             {
+#             }
+#         }
+#     }
+#     if(loop_count >= loop_limit)
+#     {
+#         _GLF_color = vec4(1.0, 0.0, 0.0, 1.0);
+#     }
+#     else
+#     {
+#         _GLF_color = vec4(1.0);
+#     }
+# }
+SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 10
+; Bound: 109
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %30 %60
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 320
+               OpName %4 "main"
+               OpName %8 "loop_count"
+               OpName %12 "buf0"
+               OpMemberName %12 0 "injectionSwitch"
+               OpName %14 ""
+               OpName %30 "gl_FragCoord"
+               OpName %60 "_GLF_color"
+               OpMemberDecorate %12 0 Offset 0
+               OpDecorate %12 Block
+               OpDecorate %14 DescriptorSet 0
+               OpDecorate %14 Binding 0
+               OpDecorate %30 BuiltIn FragCoord
+               OpDecorate %60 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeInt 32 1
+          %7 = OpTypePointer Function %6
+          %9 = OpConstant %6 0
+         %10 = OpTypeFloat 32
+         %11 = OpTypeVector %10 2
+         %12 = OpTypeStruct %11
+         %13 = OpTypePointer Uniform %12
+         %14 = OpVariable %13 Uniform
+         %15 = OpTypeInt 32 0
+         %16 = OpConstant %15 0
+         %17 = OpTypePointer Uniform %10
+         %20 = OpConstant %15 1
+         %23 = OpTypeBool
+         %28 = OpTypeVector %10 4
+         %29 = OpTypePointer Input %28
+         %30 = OpVariable %29 Input
+         %31 = OpTypePointer Input %10
+         %34 = OpConstant %10 0
+         %42 = OpConstant %6 100
+         %59 = OpTypePointer Output %28
+         %60 = OpVariable %59 Output
+         %61 = OpConstant %10 1
+         %62 = OpConstantComposite %28 %61 %61 %61 %61
+         %78 = OpConstantComposite %28 %61 %34 %34 %61
+        %100 = OpConstant %6 1
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+          %8 = OpVariable %7 Function
+               OpStore %8 %9
+         %18 = OpAccessChain %17 %14 %9 %16
+         %19 = OpLoad %10 %18
+         %21 = OpAccessChain %17 %14 %9 %20
+         %22 = OpLoad %10 %21
+         %24 = OpFOrdGreaterThan %23 %19 %22
+               OpSelectionMerge %26 None
+               OpBranchConditional %24 %25 %26
+         %25 = OpLabel
+               OpReturn
+         %26 = OpLabel
+         %32 = OpAccessChain %31 %30 %16
+         %33 = OpLoad %10 %32
+         %35 = OpFOrdLessThan %23 %33 %34
+               OpBranch %36
+         %36 = OpLabel
+         %41 = OpLoad %6 %8
+         %43 = OpSLessThan %23 %41 %42
+               OpLoopMerge %38 %39 None
+               OpBranchConditional %43 %37 %38
+         %37 = OpLabel
+               OpSelectionMerge %50 None
+               OpBranchConditional %24 %49 %50
+         %49 = OpLabel
+               OpBranch %38
+         %50 = OpLabel
+               OpSelectionMerge %58 None
+               OpBranchConditional %24 %57 %63
+         %57 = OpLabel
+               OpStore %60 %62
+               OpBranch %58
+         %63 = OpLabel
+               OpSelectionMerge %68 None
+               OpBranchConditional %35 %67 %68
+         %67 = OpLabel
+               OpReturn
+         %68 = OpLabel
+               OpBranch %58
+         %58 = OpLabel
+               OpSelectionMerge %76 None
+               OpBranchConditional %24 %75 %77
+         %75 = OpLabel
+               OpStore %60 %62
+               OpBranch %76
+         %77 = OpLabel
+               OpStore %60 %78
+               OpBranch %76
+         %76 = OpLabel
+               OpSelectionMerge %85 None
+               OpBranchConditional %24 %84 %85
+         %84 = OpLabel
+               OpReturn
+         %85 = OpLabel
+               OpSelectionMerge %91 None
+               OpBranchConditional %35 %90 %91
+         %90 = OpLabel
+               OpBranch %92
+         %92 = OpLabel
+         %97 = OpLoad %6 %8
+         %98 = OpSLessThan %23 %97 %42
+               OpLoopMerge %94 %93 None
+               OpBranchConditional %98 %93 %94
+         %93 = OpLabel
+         %99 = OpLoad %6 %8
+        %101 = OpIAdd %6 %99 %100
+               OpStore %8 %101
+               OpBranch %92
+         %94 = OpLabel
+               OpBranch %91
+         %91 = OpLabel
+               OpBranch %39
+         %39 = OpLabel
+        %102 = OpLoad %6 %8
+        %103 = OpIAdd %6 %102 %100
+               OpStore %8 %103
+               OpBranch %36
+         %38 = OpLabel
+        %104 = OpLoad %6 %8
+        %105 = OpSGreaterThanEqual %23 %104 %42
+               OpSelectionMerge %107 None
+               OpBranchConditional %105 %106 %108
+        %106 = OpLabel
+               OpStore %60 %78
+               OpBranch %107
+        %108 = OpLabel
+               OpStore %60 %62
+               OpBranch %107
+        %107 = OpLabel
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# injectionSwitch
+BUFFER variant_injectionSwitch DATA_TYPE vec2<float> STD140 DATA
+ 0.0 1.0
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 256 256
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant_injectionSwitch AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256
+
+EXPECT variant_framebuffer IDX 0 0 SIZE 256 256 EQ_RGBA 255 0 0 255
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/index.txt b/external/vulkancts/data/vulkan/amber/graphicsfuzz/index.txt
index 8049fa1..36eb6e1 100644
--- a/external/vulkancts/data/vulkan/amber/graphicsfuzz/index.txt
+++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/index.txt
@@ -18,14 +18,29 @@
 {	"control-flow-in-function.amber",															"control-flow-in-function",															"A fragment shader with a lot of control flow"										},
 {	"control-flow-switch.amber",																"control-flow-switch",																"A fragment shader with somewhat complex control flow and a switch"					},
 {	"cosh-return-inf-unused.amber",																"cosh-return-inf-unused",															"Cosh returns inf for one component which is never used"							},
+{	"cov-access-array-dot.amber",																"cov-access-array-dot",																"Covers instruction combine casting, combine shifting and DAG code paths"			},
 {	"cov-analysis-reachable-from-many.amber",													"cov-analysis-reachable-from-many",													"A fragment shader that covers a specific LLVM analysis code path."					},
 {	"cov-apfloat-acos-ldexp.amber",																"cov-apfloat-acos-ldexp",															"A fragment shader that covers a specific AP float code path."						},
 {	"cov-apfloat-determinant.amber",															"cov-apfloat-determinant",															"A fragment shader that covers a specific arbitrary precision float usage."			},
+{	"cov-apfloat-mix-nan.amber",																"cov-apfloat-mix-nan",																"A fragment shader that covers a specific floating point code path"					},
+{	"cov-apfloat-mod-zero.amber",																"cov-apfloat-mod-zero",																"A fragment shader that covers a specific floating point code path"					},
+{	"cov-apfloat-negative-step-func.amber",														"cov-apfloat-negative-step-func",													"A fragment shader that covers a specific floating point code path"					},
+{	"cov-apfloat-sinh-negative-log2.amber",														"cov-apfloat-sinh-negative-log2",													"A fragment shader that covers a specific floating point code path"					},
 {	"cov-apfloat-tanh.amber",																	"cov-apfloat-tanh",																	"A fragment shader that covers a specific arbitrary precision float usage."			},
+{	"cov-apfloat-undefined-matrix-mul.amber",													"cov-apfloat-undefined-matrix-mul",													"A fragment shader that covers a specific floating point code path"					},
+{	"cov-apfloat-determinant-for-if.amber",														"cov-apfloat-determinant-for-if",													"A fragment shader that covers a specific APFloat code path"						},
+{	"cov-apfloat-reflect-denorm.amber",															"cov-apfloat-reflect-denorm",														"A fragment shader that covers a specific floating point code path"					},
+{	"cov-apfloat-unpackunorm-loop.amber",														"cov-apfloat-unpackunorm-loop",														"A fragment shader that covers a specific floating point code path"					},
+{	"cov-asin-undefined-smoothstep.amber",														"cov-asin-undefined-smoothstep",													"A fragment shader that covers a specific instruction simplify code path"			},
 {	"cov-basic-block-discard-in-function.amber",												"cov-basic-block-discard-in-function",												"A fragment shader that covers a specific basic block code path"					},
+{	"cov-bitfieldExtract-undefined.amber",														"cov-bitfieldExtract-undefined",													"A fragment shader that covers a specific constant fold code path"					},
+{	"cov-bitfieldinsert-undefined.amber",														"cov-bitfieldinsert-undefined",														"A fragment shader that covers a specific instruction simplify code path"			},
+{	"cov-bitfieldreverse-left-shift-findmsb.amber",												"cov-bitfieldreverse-left-shift-findmsb",											"Covers specific DAG combiner and legalize vector ops code paths"					},
 {	"cov-blockfrequency-several-for-loops.amber",												"cov-blockfrequency-several-for-loops",												"A fragment shader that covers a specific block frequency info code path."			},
 {	"cov-branch-probability-identity-matrix.amber",												"cov-branch-probability-identity-matrix",											"A fragment shader that covers a specific branch propability path"					},
 {	"cov-combine-and-or-xor-gt-lt.amber",														"cov-combine-and-or-xor-gt-lt",														"A fragment shader that covers a specific bitwise operator cobmining code path"		},
+{	"cov-const-folding-bitfieldinsert-div-one.amber",											"cov-const-folding-bitfieldinsert-div-one",											"A fragment shader that covers a specific const folding path"						},
+{	"cov-color-overwrite-identity-matrix-multiply.amber",										"cov-color-overwrite-identity-matrix-multiply",										"A fragment shader that covers a specific DAG code paths"							},
 {	"cov-const-folding-ceil-vec4.amber",														"cov-const-folding-ceil-vec4",														"A fragment shader that covers a specific constant folding code path"				},
 {	"cov-const-folding-clamp.amber",															"cov-const-folding-clamp",															"A fragment shader that covers a specific const folding rule path."					},
 {	"cov-const-folding-clamp-inside-while.amber",												"cov-const-folding-clamp-inside-while",												"A fragment shader that covers a specific constant folding path"					},
@@ -37,21 +52,28 @@
 {	"cov-const-folding-dot-determinant.amber",													"cov-const-folding-dot-determinant",												"A fragment shader that covers a specific const folding rule path."					},
 {	"cov-const-folding-gte-const-first.amber",													"cov-const-folding-gte-const-first",												"A fragment shader that covers a specific constant folding path"					},
 {	"cov-const-folding-min-as-loop-range.amber",												"cov-const-folding-min-as-loop-range",												"A fragment shader that covers a specific constant folding path"					},
+{	"cov-const-folding-mod-one-one-lte.amber",													"cov-const-folding-mod-one-one-lte",												"A fragment shader that covers a specific const folding path"						},
+{	"cov-const-folding-pow-large-exp.amber",													"cov-const-folding-pow-large-exp",													"A fragment shader that covers a specific const folding path"						},
 {	"cov-const-folding-same-condition.amber",													"cov-const-folding-same-condition",													"A fragment shader that covers a specific constant folding code path"				},
 {	"cov-const-folding-sinh-inf.amber",															"cov-const-folding-sinh-inf",														"A fragment shader that covers a specific const folding path"						},
 {	"cov-const-folding-vector-shuffle.amber",													"cov-const-folding-vector-shuffle",													"A fragment shader that covers a specific const folding rule path."					},
 {	"cov-constant-folding-atan-over-tanh.amber",												"cov-constant-folding-atan-over-tanh",												"A fragment shader that covers a specific constant folding code path."				},
+{	"cov-constants-combine-add-sub.amber",														"cov-constants-combine-add-sub",													"A fragment shader that covers a specific constants and add/sub combining path"		},
 {	"cov-constants-mix-uniform.amber",															"cov-constants-mix-uniform",														"A fragment shader that covers a specific constant handling path."					},
 {	"cov-copy-prop-arrays-func-argument.amber",													"cov-copy-prop-arrays-func-argument",												"A fragment shader that covers a specific propagate array copy path."				},
 {	"cov-copy-prop-arrays-no-stores.amber",														"cov-copy-prop-arrays-no-stores",													"A fragment shader that covers a specific propagate array copy path."				},
 {	"cov-copy-prop-arrays-param-uniform.amber",													"cov-copy-prop-arrays-param-uniform",												"A fragment shader that covers a specific propagate array copy path."				},
+{	"cov-dag-combiner-clamp-undefined-access-array.amber",										"cov-dag-combiner-clamp-undefined-access-array",									"A fragment shader that covers a specific DAG combiner code path"					},
 {	"cov-dag-combiner-combine-casts-legalize-vector-types-xyz-swizzle-for-loop.amber",			"cov-dag-combiner-combine-casts-legalize-vector-types-xyz-swizzle-for-loop",		"Covers DAG combiner, cast combining and legalize vector types code paths"			},
 {	"cov-dag-combiner-findmsb-loop.amber",														"cov-dag-combiner-findmsb-loop",													"A fragment shader that covers a specific DAG combiner code path"					},
 {	"cov-dag-combiner-increment-color.amber",													"cov-dag-combiner-increment-color",													"A fragment shader that covers a specific DAG combiner code path"					},
+{	"cov-dag-combiner-glf_color.amber",															"cov-dag-combiner-glf_color",														"A fragment shader that covers specific dag combiner code path"						},
+{	"cov-dag-combiner-loop-bitfieldreverse.amber",												"cov-dag-combiner-loop-bitfieldreverse",											"A fragment shader that covers a specific DAG combiner code path"					},
 {	"cov-dag-combiner-neg-div-pow2.amber",														"cov-dag-combiner-neg-div-pow2",													"A fragment shader that covers a specific DAG combiner code path"					},
 {	"cov-dag-combiner-same-cond-nested.amber",													"cov-dag-combiner-same-cond-nested",												"A fragment shader that covers a specific DAG combiner code path"					},
 {	"cov-dead-branch-func-return-arg.amber",													"cov-dead-branch-func-return-arg",													"A fragment shader that covers a specific dead branch elimination path"				},
 {	"cov-dead-code-unreachable-merge.amber",													"cov-dead-code-unreachable-merge",													"A fragment shader that covers a specific dead code elimination path."				},
+{	"cov-findlsb-division-by-zero.amber",														"cov-findlsb-division-by-zero",														"A fragment shader that covers a specific instruction simplify code path"			},
 {	"cov-fold-and-in-for-loop-range.amber",														"cov-fold-and-in-for-loop-range",													"A fragment shader that covers a specific folding path"								},
 {	"cov-fold-bitwise-and-zero.amber",															"cov-fold-bitwise-and-zero",														"A fragment shader that covers a specific instruction folding path."				},
 {	"cov-fold-bitwise-or-full-mask.amber",														"cov-fold-bitwise-or-full-mask",													"A fragment shader that covers a specific instruction folding path."				},
@@ -84,7 +106,10 @@
 {	"cov-folding-rules-shuffle-mix.amber",														"cov-folding-rules-shuffle-mix",													"A fragment shader that covers a specific instruction folding path."				},
 {	"cov-folding-rules-split-vector-init.amber",												"cov-folding-rules-split-vector-init",												"A fragment shader that covers a specific instruction folding path."				},
 {	"cov-folding-rules-vec-mix-uniform.amber",													"cov-folding-rules-vec-mix-uniform",												"A fragment shader that covers a specific instruction folding path."				},
+{	"cov-fract-smoothstep-undefined.amber",														"cov-fract-smoothstep-undefined",													"A fragment shader that covers a specific APFloat code path"						},
+{	"cov-fragcoord-clamp-array-access.amber",													"cov-fragcoord-clamp-array-access",													"A fragment shader that covers a specific instruction simplify path"				},
 {	"cov-if-conversion-identical-branches.amber",												"cov-if-conversion-identical-branches",												"A fragment shader that covers a specific if condition conversion path."			},
+{	"cov-inc-array-element-loop-lsb.amber",														"cov-inc-array-element-loop-lsb",													"A fragment shader that covers a specific SSCP path"								},
 {	"cov-inc-inside-switch-and-for.amber",														"cov-inc-inside-switch-and-for",													"A fragment shader that covers a specific LLVM analysis code path."					},
 {	"cov-increment-inside-clamp.amber",															"cov-increment-inside-clamp",														"A fragment shader that covers specific value tracking and simplification paths"	},
 {	"cov-inline-pass-empty-block.amber",														"cov-inline-pass-empty-block",														"A fragment shader that covers a specific inlining optimization path."				},
@@ -103,46 +128,91 @@
 {	"cov-instruction-simplify-mod-sqrt-undefined.amber",										"cov-instruction-simplify-mod-sqrt-undefined",										"A fragment shader that covers a specific instruction simplification path"			},
 {	"cov-instruction-simplify-sqrt.amber",														"cov-instruction-simplify-sqrt",													"A fragment shader that covers a specific instruction simplify code path"			},
 {	"cov-instructions-first-value-phi.amber",													"cov-instructions-first-value-phi",													"A fragment shader that covers a specific instructions code path"					},
+{	"cov-inst-combine-add-sub-determinant.amber",												"cov-inst-combine-add-sub-determinant",												"A fragment shader that covers a specific inst combine add sub code path"			},
+{	"cov-inst-combine-add-sub-increase-negative.amber",											"cov-inst-combine-add-sub-increase-negative",										"A fragment shader that covers a specific inst combine add sub code path"			},
+{	"cov-inst-combine-add-sub-neg-func-arg.amber",												"cov-inst-combine-add-sub-neg-func-arg",											"A fragment shader that covers a specific add/sub combining path"					},
+{	"cov-inst-combine-and-or-xor-pack-unpack.amber",											"cov-inst-combine-and-or-xor-pack-unpack",											"A fragment shader that covers a specific inst combine and or xor code path"		},
+{	"cov-inst-combine-and-or-xor-switch.amber",													"cov-inst-combine-and-or-xor-switch",												"A fragment shader that covers a specific inst combine and or xor code path"		},
+{	"cov-inst-combine-and-or-xor-xor-add.amber",												"cov-inst-combine-and-or-xor-xor-add",												"A fragment shader that covers a specific inst combine and or xor code path"		},
+{	"cov-inst-combine-compares-combine-select-uaddcarry.amber",									"cov-inst-combine-compares-combine-select-uaddcarry",								"Covers a specific instruction combine compares and combine select code paths"		},
+{	"cov-inst-combine-compares-isnan.amber",													"cov-inst-combine-compares-isnan",													"A fragment shader that covers a specific instruction combine compare code path"	},
+{	"cov-inst-combine-compares-ldexp.amber",													"cov-inst-combine-compares-ldexp",													"A fragment shader that covers a specific instruction combine compares code path"	},
+{	"cov-inst-combine-compares-ternary-vector-access.amber",									"cov-inst-combine-compares-ternary-vector-access",									"A fragment shader that covers a specific instruction combine compare code path"	},
+{	"cov-inst-combine-shifts-bitfield-bitcount.amber",											"cov-inst-combine-shifts-bitfield-bitcount",										"A fragment shader that covers a specific instruction combine shifts code path"		},
+{	"cov-inst-combine-shifts-mix-mix-clamp.amber",												"cov-inst-combine-shifts-mix-mix-clamp",											"A fragment shader that covers a specific instruction combine shifts code path"		},
+{	"cov-instr-info-det-mat-min.amber",															"cov-instr-info-det-mat-min",														"A fragment shader that covers a specific instr info code path"						},
+{	"cov-instructions-for-if-less-than-equal.amber",											"cov-instructions-for-if-less-than-equal",											"Covers specific instruction simplify and combine compare code paths"				},
+{	"cov-inst-combine-and-or-xor-for-bitfieldinsert.amber",										"cov-inst-combine-and-or-xor-for-bitfieldinsert",									"A fragment shader that covers a specific inst combine and or xor code path"		},
+{	"cov-inst-combine-compares-pre-increment-clamp.amber",										"cov-inst-combine-compares-pre-increment-clamp",									"A fragment shader that covers a specific inst combine compares code path"			},
+{	"cov-inst-combine-mul-div-rem-if-undefined-divide-mix.amber",								"cov-inst-combine-mul-div-rem-if-undefined-divide-mix",								"A fragment shader that covers a specific inst combine mul div rem code path"		},
+{	"cov-inst-combine-pack-unpack.amber",														"cov-inst-combine-pack-unpack",														"Covers specific combine shifts and combine simplify demanded code paths"			},
+{	"cov-inst-combine-select-findlsb-uaddcarry.amber",											"cov-inst-combine-select-findlsb-uaddcarry",										"A fragment shader that covers a specific instruction combine select code path"		},
+{	"cov-inst-combine-simplify-demanded-pack-unpack.amber",										"cov-inst-combine-simplify-demanded-pack-unpack",									"Covers a specific instruction combine simplify demanded code path"					},
+{	"cov-inst-combine-simplify-demanded-packsnorm-unpackunorm.amber",							"cov-inst-combine-simplify-demanded-packsnorm-unpackunorm",							"Covers a specific instruction combine simplify demanded code path"					},
+{	"cov-inst-combine-simplify-demanded-switch-or-xor.amber",									"cov-inst-combine-simplify-demanded-switch-or-xor",									"A fragment shader that covers a specific inst combine simplify demanded path"		},
+{	"cov-inst-combine-vector-ops-asin.amber",													"cov-inst-combine-vector-ops-asin",													"A fragment shader that covers specific inst combine vector ops code paths"			},
+{	"cov-integer-modulo-negative.amber",														"cov-integer-modulo-negative",														"A fragment shader that covers specific instruction combining code paths"			},
 {	"cov-intervalmap-set-stop.amber",															"cov-intervalmap-set-stop",															"A fragment shader that covers a specific interval map code path."					},
 {	"cov-ir-builder-constant-fold-inst-combine-calls-value-tracking-findmsb-incr-if.amber",		"cov-ir-builder-constant-fold-inst-combine-calls-value-tracking-findmsb-incr-if",	"Covers IR builder, constant fold, inst combine calls and value tracking code paths"},
 {	"cov-irbuilder-matrix-cell-uniform.amber",													"cov-irbuilder-matrix-cell-uniform",												"A fragment shader that covers a specific IR builder path."							},
+{	"cov-ldexp-undefined-mat-vec-multiply.amber",												"cov-ldexp-undefined-mat-vec-multiply",												"Covers specific inst combine simplify demanded and inst combine shifts path"		},
 {	"cov-liveinterval-different-dest.amber",													"cov-liveinterval-different-dest",													"A fragment shader that covers a specific live interval code path."					},
 {	"cov-loop-findmsb-findlsb.amber",															"cov-loop-findmsb-findlsb",															"A fragment shader that covers specific simplification and value tracking paths"	},
+{	"cov-machine-scheduler-for-if-pow.amber",													"cov-machine-scheduler-for-if-pow",													"A fragment shader that covers a specific machine scheduler path"					},
+{	"cov-machine-basic-block-for-for-for-less-than.amber",										"cov-machine-basic-block-for-for-for-less-than",									"A fragment shader that covers a specific machine basic block code paths"			},
 {	"cov-machinevaluetype-one-iter-loop.amber",													"cov-machinevaluetype-one-iter-loop",												"A fragment shader that covers a specific machine value type code path"				},
 {	"cov-max-clamp-same-minval.amber",															"cov-max-clamp-same-minval",														"A fragment shader that covers a specific instruction simplification path"			},
 {	"cov-mem-pass-sum-struct-members.amber",													"cov-mem-pass-sum-struct-members",													"A fragment shader that covers a specific mem pass code path."						},
 {	"cov-mem-pass-unused-component.amber",														"cov-mem-pass-unused-component",													"A fragment shader that covers a specific mem pass code path."						},
 {	"cov-merge-return-condition-twice.amber",													"cov-merge-return-condition-twice",													"A fragment shader that covers a specific return merge path."						},
+{	"cov-mod-acosh.amber",																		"cov-mod-acosh",																	"A fragment shader that calculates modulo of an acosh result"						},
+{	"cov-modf-clamp-for.amber",																	"cov-modf-clamp-for",																"A fragment shader that covers a specific live intervals code path"					},
 {	"cov-modf-integer-to-private.amber",														"cov-modf-integer-to-private",														"A fragment shader that covers a specific private to local path."					},
 {	"cov-optimize-phis-for.amber",																"cov-optimize-phis-for",															"A fragment shader that cover specific optimize phis code paths"					},
 {	"cov-optimize-phis-for-for-do-while-if-if.amber",											"cov-optimize-phis-for-for-do-while-if-if",											"A fragment shader that covers a specific optimize PHIs code path"					},
+{	"cov-not-clamp-matrix-access.amber",														"cov-not-clamp-matrix-access",														"A fragment shader that covers a specific selection dag code path"					},
 {	"cov-pattern-match-signum.amber",															"cov-pattern-match-signum",															"A fragment shader that covers a specific pattern matching path."					},
 {	"cov-pattern-match-single-bit.amber",														"cov-pattern-match-single-bit",														"A fragment shader that covers a specific pattern matching path."					},
 {	"cov-peephole-optimizer-target-instr-info-for-if-if-if.amber",								"cov-peephole-optimizer-target-instr-info-for-if-if-if",							"Covers peephole optimizer and instr info code paths"								},
+{	"cov-pow-undefined.amber",																	"cov-pow-undefined",																"A fragment shader that covers specific constant fold and selection dag code paths"	},
 {	"cov-reduce-load-replace-extract.amber",													"cov-reduce-load-replace-extract",													"A fragment shader that covers a specific load size reduction path."				},
+{	"cov-register-coalescer-live-intervals-target-instr-info-for-discard-for-discard.amber",	"cov-register-coalescer-live-intervals-target-instr-info-for-discard-for-discard",	"Covers register coalescer, live intervals and target instr info code paths"		},
 {	"cov-replace-copy-object.amber",															"cov-replace-copy-object",															"A fragment shader that covers a specific shader simplification path."				},
+{	"cov-return-after-do-while.amber",															"cov-return-after-do-while",														"A fragment shader that covers a specific simplify cfg code path"					},
 {	"cov-scaled-number-nested-loops.amber",														"cov-scaled-number-nested-loops",													"A fragment shader that covers a specific scaled number code path."					},
 {	"cov-selection-dag-assign-back-and-forth.amber",											"cov-selection-dag-assign-back-and-forth",											"A fragment shader that covers a specific selection DAG code path"					},
 {	"cov-selection-dag-lt-gt.amber",															"cov-selection-dag-lt-gt",															"A fragment shader that covers a specific selection DAG code path"					},
+{	"cov-scaled-number-nested-loops-array-access.amber",										"cov-scaled-number-nested-loops-array-access",										"A fragment shader that covers a specific scaled number path"						},
+{	"cov-schedule-dag-rrlist-mix-log-cos.amber",												"cov-schedule-dag-rrlist-mix-log-cos",												"Covers a specific schedule dag register reduction list code path"					},
+{	"cov-selection-dag-inverse-clamp.amber",													"cov-selection-dag-inverse-clamp",													"A fragment shader that covers a specific selection DAG code path"					},
 {	"cov-selection-dag-same-cond-twice.amber",													"cov-selection-dag-same-cond-twice",												"A fragment shader that covers a specific selection DAG code path"					},
 {	"cov-set-vector-cos-fragcoord.amber",														"cov-set-vector-cos-fragcoord",														"A fragment shader that covers a specific set vector code path."					},
 {	"cov-simplification-unused-struct.amber",													"cov-simplification-unused-struct",													"A fragment shader that covers a specific shader simplification path."				},
 {	"cov-simplification-while-inside-for.amber",												"cov-simplification-while-inside-for",												"A fragment shader that covers a specific code simplification path."				},
 {	"cov-simplify-clamp-max-itself.amber",														"cov-simplify-clamp-max-itself",													"A fragment shader that covers a specific instruction simplification code path"		},
+{	"cov-simplify-combine-compares-max-max-one.amber",											"cov-simplify-combine-compares-max-max-one",										"Covers specific instruction simplifying and combining code paths"					},
 {	"cov-simplify-component-uniform-idx.amber",													"cov-simplify-component-uniform-idx",												"A fragment shader that covers a specific instruction simplification code path"		},
 {	"cov-simplify-div-by-uint-one.amber",														"cov-simplify-div-by-uint-one",														"A fragment shader that covers a specific instruction simplification code path"		},
+{	"cov-simplify-for-bitwise-condition.amber",													"cov-simplify-for-bitwise-condition",												"A fragment shader that covers a specific instruction simplify code path"			},
 {	"cov-simplify-ldexp-exponent-zero.amber",													"cov-simplify-ldexp-exponent-zero",													"A fragment shader that covers a specific instruction simplification code path"		},
+{	"cov-simplify-max-multiplied-values.amber",													"cov-simplify-max-multiplied-values",												"A fragment shader that covers a specific instruction simplify code path"			},
+{	"cov-simplify-modulo-1.amber",																"cov-simplify-modulo-1",															"A fragment shader that covers a specific instruction simplification code path"		},
 {	"cov-simplify-mul-identity.amber",															"cov-simplify-mul-identity",														"A fragment shader that covers a specific instruction simplification code path"		},
 {	"cov-simplify-not-less-than-neg.amber",														"cov-simplify-not-less-than-neg",													"A fragment shader that covers a specific instruction simplification code path"		},
+{	"cov-simplify-right-shift-greater-than-zero.amber",											"cov-simplify-right-shift-greater-than-zero",										"Covers specific instruction simplify and combine compare code paths"				},
 {	"cov-simplify-select-fragcoord.amber",														"cov-simplify-select-fragcoord",													"A fragment shader that covers a specific instruction simplification code path"		},
 {	"cov-simplify-sign-cosh.amber",																"cov-simplify-sign-cosh",															"A fragment shader that covers a specific instruction simplification path"			},
 {	"cov-simplify-smoothstep-undef.amber",														"cov-simplify-smoothstep-undef",													"A fragment shader that covers a specific instruction simplification code path"		},
 {	"cov-single-block-elim-self-assign.amber",													"cov-single-block-elim-self-assign",												"A fragment shader that covers a specific single block elimination path."			},
 {	"cov-single-store-elim-assume-store.amber",													"cov-single-store-elim-assume-store",												"A fragment shader that covers a specific single store elimination path."			},
+{	"cov-sinh-ldexp.amber",																		"cov-sinh-ldexp",																	"A fragment shader that covers a specific inst combine compares code path"			},
 {	"cov-ssa-rewrite-case-with-default.amber",													"cov-ssa-rewrite-case-with-default",												"A fragment shader that covers a specific SSA rewrite path."						},
+{	"cov-tail-duplicator-for-for-for.amber",													"cov-tail-duplicator-for-for-for",													"A fragment shader that covers a specific tail duplicator code path"				},
+{	"cov-tail-duplicator-infinite-loops.amber",													"cov-tail-duplicator-infinite-loops",												"A fragment shader that covers a specific tail duplicator code path"				},
 {	"cov-target-lowering-dfdx-cos.amber",														"cov-target-lowering-dfdx-cos",														"A fragment shader that covers a specific target lowering code path."				},
 {	"cov-target-lowering-inst-combine-compares-struct-array-clamp-function-cal.amber",			"cov-target-lowering-inst-combine-compares-struct-array-clamp-function-cal",		"Covers target lowering and compare combining code paths"							},
 {	"cov-types-return-in-main-never-hit.amber",													"cov-types-return-in-main-never-hit",												"A fragment shader that covers a specific types optimization path."					},
+{	"cov-undefined-inversesqrt-reflect.amber",													"cov-undefined-inversesqrt-reflect",												"A fragment shader that covers a specific APFloat code path"						},
 {	"cov-val-cfg-case-fallthrough.amber",														"cov-val-cfg-case-fallthrough",														"A fragment shader that covers a specific shader validation path."					},
 {	"cov-value-inst-combine-select-value-tracking-flip-bits.amber",								"cov-value-inst-combine-select-value-tracking-flip-bits",							"Covers value, inst combine select and value tracking code paths"					},
 {	"cov-value-tracking-apint-inst-combine-simplify-one-mod-loop-iterator.amber",				"cov-value-tracking-apint-inst-combine-simplify-one-mod-loop-iterator",				"A fragment shader that calculates modulo of constant one with a loop iterator"		},
@@ -158,6 +228,11 @@
 {	"cov-vector-log2-cosh.amber",																"cov-vector-log2-cosh",																"A fragment shader that covers a specific vector log2 and cosh code path."			},
 {	"cov-wrap-op-kill-for-loop.amber",															"cov-wrap-op-kill-for-loop",														"A fragment shader that covers a specific OpKill wrapping code path"				},
 {	"cov-wrap-op-kill-two-branches.amber",														"cov-wrap-op-kill-two-branches",													"A fragment shader that covers a specific OpKill wrapping path."					},
+{	"cov-x86-isel-lowering-determinant-exp-acos.amber",											"cov-x86-isel-lowering-determinant-exp-acos",										"A fragment shader that covers a specific x86 isel lowering code path"				},
+{	"cov-x86-isel-lowering-machine-value-type-uint-to-float.amber",								"cov-x86-isel-lowering-machine-value-type-uint-to-float",							"Covers specific X86 ISel lowering and machine value type code paths"				},
+{	"cov-x86-isel-lowering-selection-dag-struct-array-clamp-index.amber",						"cov-x86-isel-lowering-selection-dag-struct-array-clamp-index",						"Covers a specific X86 ISel lowering and DAG selection code paths"					},
+{	"cov-x86-isel-lowering-apfloat-nan-cos-cos.amber",											"cov-x86-isel-lowering-apfloat-nan-cos-cos",										"A fragment shader that covers a specific X86 ISel lowering and AP Float code paths"},
+{	"cov-x86-isel-lowering-negative-left-shift.amber",											"cov-x86-isel-lowering-negative-left-shift",										"A fragment shader that covers a specific X86 ISel lowering code path"				},
 {	"create-color-in-do-while-for-loop.amber",													"create-color-in-do-while-for-loop",												"A fragment shader that creates the color inside two loops"							},
 {	"dead-barriers-in-loops.amber",																"dead-barriers-in-loops",															"A compute shader with dead barriers"												},
 {	"dead-struct-init.amber",																	"dead-struct-init",																	"A fragment shader that uses struct initializers"									},
@@ -168,11 +243,13 @@
 {	"discard-in-loop-in-function.amber",														"discard-in-loop-in-function",														"A shader with a discard nested in a loop in a function"							},
 {	"discards-in-control-flow.amber",															"discards-in-control-flow",															"A fragment shader with discards in loops and conditionals"							},
 {	"do-while-false-loops.amber",																"do-while-false-loops",																"Code wrapped in nested single iteration loops"										},
+{	"do-while-if-return.amber",																	"do-while-if-return",																"A fragment shader with true if in a nested do while loop"							},
 {	"do-while-loop-in-conditionals.amber",														"do-while-loop-in-conditionals",													"A fragment shader with do-while loop in conditional nest"							},
 {	"do-while-with-always-true-if.amber",														"do-while-with-always-true-if",														"A fragment shader with a do while that always returns"								},
 {	"do-while-with-if-condition.amber",															"do-while-with-if-condition",														"A fragment shader that has nested if condition in do while"						},
 {	"early-return-and-barrier.amber",															"early-return-and-barrier",															"A compute shader with an early return and a barrier"								},
 {	"find-msb-from-lsb.amber",																	"find-msb-from-lsb",																"A fragment shader that finds MSB from LSB"											},
+{	"flag-always-false-if.amber",																"flag-always-false-if",																"A fragment shader with recurrent always false if statement"						},
 {	"for-condition-always-false.amber",															"for-condition-always-false",														"A fragment shader that uses a for loop with condition always false"				},
 {	"for-loop-with-return.amber",																"for-loop-with-return",																"A fragment shader with a for loop that loops only once"							},
 {	"for-with-ifs-and-return.amber",															"for-with-ifs-and-return",															"A fragment shader with two ifs and return/continue inside a for loop"				},
@@ -227,14 +304,35 @@
 {	"spv-double-branch-to-same-block3.amber",													"spv-double-branch-to-same-block3",													"Equivalent shaders, one with more complex branching"								},
 {	"spv-load-from-frag-color.amber",															"spv-load-from-frag-color",															"Equivalent shaders, one with extra access chains and load"							},
 {	"spv-null-in-phi-and-unroll.amber",															"spv-null-in-phi-and-unroll",														"Equivalent shaders, one that uses null for 0 and an Unroll annotation"				},
+{	"spv-stable-bifurcation-Os-mutate-var-vector-shuffle.amber",								"spv-stable-bifurcation-Os-mutate-var-vector-shuffle",								"Three shaders diff: mutate var, vector shuffle"									},
+{	"spv-stable-collatz-O-mutate-composite-construct-extract.amber",							"spv-stable-collatz-O-mutate-composite-construct-extract",							"Two shaders diff: mutate var, comp extract/construct"								},
+{	"spv-stable-colorgrid-modulo-O-move-block-down.amber",										"spv-stable-colorgrid-modulo-O-move-block-down",									"Two shaders with diff: some blocks moved down"										},
+{	"spv-stable-maze-flatten-copy-composite.amber",												"spv-stable-maze-flatten-copy-composite",											"Three shaders with diff: conditional %270 is flattened"							},
+{	"spv-stable-mergesort-O-prop-up-mutate-var.amber",											"spv-stable-mergesort-O-prop-up-mutate-var",										"Three shaders with diff: mutate var"												},
+{	"spv-stable-mergesort-flatten-selection-dead-continues.amber",								"spv-stable-mergesort-flatten-selection-dead-continues",							"Shaders diff: selection %25 flattened; dead continues"								},
+{	"spv-stable-mergesort-func-inline-mutate-var.amber",										"spv-stable-mergesort-func-inline-mutate-var",										"Three shaders diff: mutated var"													},
+{	"spv-stable-orbit-O-mutate-variable.amber",													"spv-stable-orbit-O-mutate-variable",												"Two shaders with diff: variable mutated"											},
+{	"spv-stable-orbit-Os-access-chain-mutate-pointer.amber",									"spv-stable-orbit-Os-access-chain-mutate-pointer",									"Three shaders with diff: added mutate pointer"										},
+{	"spv-stable-pillars-O-op-select-to-op-phi.amber",											"spv-stable-pillars-O-op-select-to-op-phi",											"Three shaders diff: OpSelect -> OpPhi"												},
+{	"spv-stable-quicksort-mat-func-param.amber",												"spv-stable-quicksort-mat-func-param",												"Two shaders with diff: added mat3x3 func param"									},
+{	"spv-stable-rects-Os-mutate-var-push-through-var.amber",									"spv-stable-rects-Os-mutate-var-push-through-var",									"Three shaders diff: new variable used and mutated"									},
+{	"stable-binarysearch-tree-false-if-discard-loop.amber",										"stable-binarysearch-tree-false-if-discard-loop",									"A fragment shader with always false if with discard loop"							},
+{	"stable-binarysearch-tree-fragcoord-less-than-zero.amber",									"stable-binarysearch-tree-fragcoord-less-than-zero",								"A fragment shader with gl_FragCoord.x less than zero"								},
+{	"stable-binarysearch-tree-nested-if-and-conditional.amber",									"stable-binarysearch-tree-nested-if-and-conditional",								"A fragment shader with nested if and conditional statement"						},
 {	"stable-binarysearch-tree-with-loop-read-write-global.amber",								"stable-binarysearch-tree-with-loop-read-write-global",								"A pair of fragment shaders that both render red"									},
+{	"stable-collatz-push-constant-with-nested-min-max.amber",									"stable-collatz-push-constant-with-nested-min-max",									"A fragment shader with push constant and nested min max"							},
+{	"stable-colorgrid-modulo-double-always-false-discard.amber",								"stable-colorgrid-modulo-double-always-false-discard",								"A fragment shader with two always false discards"									},
 {	"stable-colorgrid-modulo-injected-conditional-true.amber",									"stable-colorgrid-modulo-injected-conditional-true",								"A fragment shader with an always true conditional"									},
 {	"stable-colorgrid-modulo-true-conditional-simple-loop.amber",								"stable-colorgrid-modulo-true-conditional-simple-loop",								"A fragment shader with conditional and simple loop"								},
 {	"stable-colorgrid-modulo-vec3-values-from-matrix.amber",									"stable-colorgrid-modulo-vec3-values-from-matrix",									"A fragment shader with vec3 values set from matrix4x2"								},
+{	"stable-mergesort-for-always-false-if-discard.amber",										"stable-mergesort-for-always-false-if-discard",										"A fragment shader with for loop and always false if"								},
+{	"stable-mergesort-reversed-for-loop.amber",													"stable-mergesort-reversed-for-loop",												"A fragment shader with once iterated reversed for loop"							},
 {	"stable-quicksort-for-loop-with-injection.amber",											"stable-quicksort-for-loop-with-injection",											"A fragment shader with a for loop containing injection"							},
 {	"stable-quicksort-if-false-else-return.amber",												"stable-quicksort-if-false-else-return",											"A fragment shader with an always false if statement"								},
 {	"stable-quicksort-max-value-as-index.amber",												"stable-quicksort-max-value-as-index",												"A fragment shader with greater of two values as index"								},
 {	"stable-rects-vec4-clamp-conditional-min-mix.amber",										"stable-rects-vec4-clamp-conditional-min-mix",										"A fragment shader with min-mix in always false conditional"						},
+{	"stable-triangle-array-nested-loop.amber",													"stable-triangle-array-nested-loop",												"A fragment shader with array and nested loops"										},
+{	"stable-triangle-nested-for-loop-and-true-if.amber",										"stable-triangle-nested-for-loop-and-true-if",										"A fragment shader with nested for loop and always true if"							},
 {	"struct-and-unreachable-infinite-loop.amber",												"struct-and-unreachable-infinite-loop",												"Fragment shader with struct and unreachable infinite loop"							},
 {	"struct-array-data-as-loop-iterator.amber",													"struct-array-data-as-loop-iterator",												"A fragment shader that uses struct array data for loop iterator value"				},
 {	"struct-controlled-loop.amber",																"struct-controlled-loop",															"Shader with loop controlled by struct"												},
@@ -269,6 +367,7 @@
 {	"unreachable-return-in-loop.amber",															"unreachable-return-in-loop",														"A fragment shader with an unreachable return in a loop"							},
 {	"unreachable-switch-case-with-discards.amber",												"unreachable-switch-case-with-discards",											"A shader with a switch statement containing unreachable discards"					},
 {	"uv-value-comparison-as-boolean.amber",														"uv-value-comparison-as-boolean",													"A fragment shader with uv value comparison as boolean"								},
+{	"vec2-modf.amber",																			"vec2-modf",																		"A fragment shader with vec2 in modulus fraction function"							},
 {	"vector-values-multiplied-by-fragcoord.amber",												"vector-values-multiplied-by-fragcoord",											"A shader that multiplies a vector by fragcoord"									},
 {	"vectors-and-discard-in-function.amber",													"vectors-and-discard-in-function",													"A fragment shader that assigns vector values"										},
 {	"while-function-always-false.amber",														"while-function-always-false",														"A fragment shader with an always false while function"								},
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/nested-for-loops-switch-fallthrough.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/nested-for-loops-switch-fallthrough.amber
index 7cbee38..91b2100 100644
--- a/external/vulkancts/data/vulkan/amber/graphicsfuzz/nested-for-loops-switch-fallthrough.amber
+++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/nested-for-loops-switch-fallthrough.amber
@@ -543,13 +543,13 @@
 PIPELINE graphics variant_pipeline
   ATTACH variant_vertex_shader
   ATTACH variant_fragment_shader
-  FRAMEBUFFER_SIZE 256 256
+  FRAMEBUFFER_SIZE 64 64
   BIND BUFFER variant_framebuffer AS color LOCATION 0
   BIND BUFFER variant_zero AS uniform DESCRIPTOR_SET 0 BINDING 0
 END
 CLEAR_COLOR variant_pipeline 0 0 0 255
 
 CLEAR variant_pipeline
-RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 64 64
 
-EXPECT variant_framebuffer IDX 0 0 SIZE 256 256 EQ_RGBA 255 0 0 255
+EXPECT variant_framebuffer IDX 0 0 SIZE 64 64 EQ_RGBA 255 0 0 255
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/spv-access-chains.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/spv-access-chains.amber
index 4960622..fa77d83 100644
--- a/external/vulkancts/data/vulkan/amber/graphicsfuzz/spv-access-chains.amber
+++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/spv-access-chains.amber
@@ -644,7 +644,7 @@
 
 # resolution
 BUFFER reference_resolution DATA_TYPE vec2<float> DATA
- 256.0 256.0
+ 64.0 64.0
 END
 
 BUFFER reference_framebuffer FORMAT B8G8R8A8_UNORM
@@ -652,14 +652,14 @@
 PIPELINE graphics reference_pipeline
   ATTACH reference_vertex_shader
   ATTACH reference_fragment_shader
-  FRAMEBUFFER_SIZE 256 256
+  FRAMEBUFFER_SIZE 64 64
   BIND BUFFER reference_framebuffer AS color LOCATION 0
   BIND BUFFER reference_resolution AS uniform DESCRIPTOR_SET 0 BINDING 0
 END
 CLEAR_COLOR reference_pipeline 0 0 0 255
 
 CLEAR reference_pipeline
-RUN reference_pipeline DRAW_RECT POS 0 0 SIZE 256 256
+RUN reference_pipeline DRAW_RECT POS 0 0 SIZE 64 64
 
 
 SHADER vertex variant_vertex_shader PASSTHROUGH
@@ -1287,7 +1287,7 @@
 
 # resolution
 BUFFER variant_resolution DATA_TYPE vec2<float> DATA
- 256.0 256.0
+ 64.0 64.0
 END
 
 BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
@@ -1295,13 +1295,13 @@
 PIPELINE graphics variant_pipeline
   ATTACH variant_vertex_shader
   ATTACH variant_fragment_shader
-  FRAMEBUFFER_SIZE 256 256
+  FRAMEBUFFER_SIZE 64 64
   BIND BUFFER variant_framebuffer AS color LOCATION 0
   BIND BUFFER variant_resolution AS uniform DESCRIPTOR_SET 0 BINDING 0
 END
 CLEAR_COLOR variant_pipeline 0 0 0 255
 
 CLEAR variant_pipeline
-RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 64 64
 
 EXPECT reference_framebuffer EQ_HISTOGRAM_EMD_BUFFER variant_framebuffer TOLERANCE 0.005
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/spv-copy-object.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/spv-copy-object.amber
index 7286518..fa4af4a 100644
--- a/external/vulkancts/data/vulkan/amber/graphicsfuzz/spv-copy-object.amber
+++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/spv-copy-object.amber
@@ -644,7 +644,7 @@
 
 # resolution
 BUFFER reference_resolution DATA_TYPE vec2<float> DATA
- 256.0 256.0
+ 64.0 64.0
 END
 
 BUFFER reference_framebuffer FORMAT B8G8R8A8_UNORM
@@ -652,14 +652,14 @@
 PIPELINE graphics reference_pipeline
   ATTACH reference_vertex_shader
   ATTACH reference_fragment_shader
-  FRAMEBUFFER_SIZE 256 256
+  FRAMEBUFFER_SIZE 64 64
   BIND BUFFER reference_framebuffer AS color LOCATION 0
   BIND BUFFER reference_resolution AS uniform DESCRIPTOR_SET 0 BINDING 0
 END
 CLEAR_COLOR reference_pipeline 0 0 0 255
 
 CLEAR reference_pipeline
-RUN reference_pipeline DRAW_RECT POS 0 0 SIZE 256 256
+RUN reference_pipeline DRAW_RECT POS 0 0 SIZE 64 64
 
 
 SHADER vertex variant_vertex_shader PASSTHROUGH
@@ -1288,7 +1288,7 @@
 
 # resolution
 BUFFER variant_resolution DATA_TYPE vec2<float> DATA
- 256.0 256.0
+ 64.0 64.0
 END
 
 BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
@@ -1296,13 +1296,13 @@
 PIPELINE graphics variant_pipeline
   ATTACH variant_vertex_shader
   ATTACH variant_fragment_shader
-  FRAMEBUFFER_SIZE 256 256
+  FRAMEBUFFER_SIZE 64 64
   BIND BUFFER variant_framebuffer AS color LOCATION 0
   BIND BUFFER variant_resolution AS uniform DESCRIPTOR_SET 0 BINDING 0
 END
 CLEAR_COLOR variant_pipeline 0 0 0 255
 
 CLEAR variant_pipeline
-RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 64 64
 
 EXPECT reference_framebuffer EQ_HISTOGRAM_EMD_BUFFER variant_framebuffer TOLERANCE 0.005
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/spv-dead-break-and-unroll.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/spv-dead-break-and-unroll.amber
index 6bf3d19..07d752d 100644
--- a/external/vulkancts/data/vulkan/amber/graphicsfuzz/spv-dead-break-and-unroll.amber
+++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/spv-dead-break-and-unroll.amber
@@ -644,7 +644,7 @@
 
 # resolution
 BUFFER reference_resolution DATA_TYPE vec2<float> DATA
- 256.0 256.0
+ 64.0 64.0
 END
 
 BUFFER reference_framebuffer FORMAT B8G8R8A8_UNORM
@@ -652,14 +652,14 @@
 PIPELINE graphics reference_pipeline
   ATTACH reference_vertex_shader
   ATTACH reference_fragment_shader
-  FRAMEBUFFER_SIZE 256 256
+  FRAMEBUFFER_SIZE 64 64
   BIND BUFFER reference_framebuffer AS color LOCATION 0
   BIND BUFFER reference_resolution AS uniform DESCRIPTOR_SET 0 BINDING 0
 END
 CLEAR_COLOR reference_pipeline 0 0 0 255
 
 CLEAR reference_pipeline
-RUN reference_pipeline DRAW_RECT POS 0 0 SIZE 256 256
+RUN reference_pipeline DRAW_RECT POS 0 0 SIZE 64 64
 
 
 SHADER vertex variant_vertex_shader PASSTHROUGH
@@ -1296,7 +1296,7 @@
 
 # resolution
 BUFFER variant_resolution DATA_TYPE vec2<float> DATA
- 256.0 256.0
+ 64.0 64.0
 END
 
 BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
@@ -1304,13 +1304,13 @@
 PIPELINE graphics variant_pipeline
   ATTACH variant_vertex_shader
   ATTACH variant_fragment_shader
-  FRAMEBUFFER_SIZE 256 256
+  FRAMEBUFFER_SIZE 64 64
   BIND BUFFER variant_framebuffer AS color LOCATION 0
   BIND BUFFER variant_resolution AS uniform DESCRIPTOR_SET 0 BINDING 0
 END
 CLEAR_COLOR variant_pipeline 0 0 0 255
 
 CLEAR variant_pipeline
-RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 64 64
 
 EXPECT reference_framebuffer EQ_HISTOGRAM_EMD_BUFFER variant_framebuffer TOLERANCE 0.005
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/spv-stable-bifurcation-Os-mutate-var-vector-shuffle.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/spv-stable-bifurcation-Os-mutate-var-vector-shuffle.amber
new file mode 100644
index 0000000..7fe3860
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/spv-stable-bifurcation-Os-mutate-var-vector-shuffle.amber
@@ -0,0 +1,446 @@
+#!amber
+
+# Copyright 2020 Google LLC
+#
+# 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.
+
+
+# A test for a bug found by the GraphicsFuzz project.
+
+# Short description: Three shaders diff: mutate var, vector shuffle
+
+# The test renders three images using semantically equivalent shaders, and then
+# checks that the images are similar.
+# The test passes because the shaders have the same semantics and so the images
+# should be the same.
+
+SHADER vertex reference_vertex_shader PASSTHROUGH
+
+SHADER fragment reference_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 7
+; Bound: 107
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %12 %74
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 320
+               OpName %4 "main"
+               OpName %12 "gl_FragCoord"
+               OpName %15 "buf0"
+               OpMemberName %15 0 "resolution"
+               OpName %17 ""
+               OpName %74 "_GLF_color"
+               OpName %100 "indexable"
+               OpDecorate %12 BuiltIn FragCoord
+               OpMemberDecorate %15 0 Offset 0
+               OpDecorate %15 Block
+               OpDecorate %17 DescriptorSet 0
+               OpDecorate %17 Binding 0
+               OpDecorate %74 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeFloat 32
+          %7 = OpTypeVector %6 2
+         %10 = OpTypeVector %6 4
+         %11 = OpTypePointer Input %10
+         %12 = OpVariable %11 Input
+         %15 = OpTypeStruct %7
+         %16 = OpTypePointer Uniform %15
+         %17 = OpVariable %16 Uniform
+         %18 = OpTypeInt 32 1
+         %19 = OpConstant %18 0
+         %20 = OpTypePointer Uniform %7
+         %27 = OpTypeInt 32 0
+         %32 = OpConstant %6 10
+         %47 = OpConstant %18 10
+         %51 = OpConstant %18 100
+         %60 = OpTypeBool
+         %62 = OpConstant %18 4
+         %65 = OpConstant %18 1000
+         %71 = OpConstant %18 1
+         %73 = OpTypePointer Output %10
+         %74 = OpVariable %73 Output
+         %75 = OpConstant %27 16
+         %76 = OpTypeArray %10 %75
+         %77 = OpConstant %6 0
+         %78 = OpConstant %6 1
+         %79 = OpConstantComposite %10 %77 %77 %77 %78
+         %80 = OpConstant %6 0.5
+         %81 = OpConstantComposite %10 %80 %77 %77 %78
+         %82 = OpConstantComposite %10 %77 %80 %77 %78
+         %83 = OpConstantComposite %10 %80 %80 %77 %78
+         %84 = OpConstantComposite %10 %77 %77 %80 %78
+         %85 = OpConstantComposite %10 %80 %77 %80 %78
+         %86 = OpConstantComposite %10 %77 %80 %80 %78
+         %87 = OpConstantComposite %10 %80 %80 %80 %78
+         %88 = OpConstantComposite %10 %78 %77 %77 %78
+         %89 = OpConstantComposite %10 %77 %78 %77 %78
+         %90 = OpConstantComposite %10 %78 %78 %77 %78
+         %91 = OpConstantComposite %10 %77 %77 %78 %78
+         %92 = OpConstantComposite %10 %78 %77 %78 %78
+         %93 = OpConstantComposite %10 %77 %78 %78 %78
+         %94 = OpConstantComposite %10 %78 %78 %78 %78
+         %95 = OpConstantComposite %76 %79 %81 %82 %83 %84 %85 %86 %87 %79 %88 %89 %90 %91 %92 %93 %94
+         %97 = OpConstant %18 16
+         %99 = OpTypePointer Function %76
+        %101 = OpTypePointer Function %10
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+        %100 = OpVariable %99 Function
+         %13 = OpLoad %10 %12
+         %14 = OpVectorShuffle %7 %13 %13 0 1
+         %21 = OpAccessChain %20 %17 %19
+         %22 = OpLoad %7 %21
+         %23 = OpFDiv %7 %14 %22
+         %31 = OpCompositeExtract %6 %23 0
+         %33 = OpFMul %6 %31 %32
+         %34 = OpConvertFToS %18 %33
+         %37 = OpCompositeExtract %6 %23 1
+         %38 = OpFMul %6 %37 %32
+         %39 = OpConvertFToS %18 %38
+         %48 = OpIMul %18 %39 %47
+         %49 = OpIAdd %18 %34 %48
+               OpBranch %53
+         %53 = OpLabel
+        %106 = OpPhi %18 %51 %5 %69 %54
+        %104 = OpPhi %18 %19 %5 %72 %54
+         %61 = OpSLessThan %60 %104 %49
+               OpLoopMerge %55 %54 None
+               OpBranchConditional %61 %54 %55
+         %54 = OpLabel
+         %64 = OpIMul %18 %62 %106
+         %67 = OpISub %18 %65 %106
+         %68 = OpIMul %18 %64 %67
+         %69 = OpSDiv %18 %68 %65
+         %72 = OpIAdd %18 %104 %71
+               OpBranch %53
+         %55 = OpLabel
+         %98 = OpSMod %18 %106 %97
+               OpStore %100 %95
+        %102 = OpAccessChain %101 %100 %98
+        %103 = OpLoad %10 %102
+               OpStore %74 %103
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for reference
+
+# resolution
+BUFFER reference_resolution DATA_TYPE vec2<float> STD140 DATA
+ 256.0 256.0
+END
+
+BUFFER reference_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics reference_pipeline
+  ATTACH reference_vertex_shader
+  ATTACH reference_fragment_shader
+  FRAMEBUFFER_SIZE 256 256
+  BIND BUFFER reference_framebuffer AS color LOCATION 0
+  BIND BUFFER reference_resolution AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR reference_pipeline 0 0 0 255
+
+CLEAR reference_pipeline
+RUN reference_pipeline DRAW_RECT POS 0 0 SIZE 256 256
+
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 7
+; Bound: 263
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %12 %74
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 320
+               OpName %4 "main"
+               OpName %12 "gl_FragCoord"
+               OpName %15 "buf0"
+               OpMemberName %15 0 "resolution"
+               OpName %17 ""
+               OpName %74 "_GLF_color"
+               OpName %100 "indexable"
+               OpDecorate %12 BuiltIn FragCoord
+               OpMemberDecorate %15 0 Offset 0
+               OpDecorate %15 Block
+               OpDecorate %17 DescriptorSet 0
+               OpDecorate %17 Binding 0
+               OpDecorate %74 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeFloat 32
+          %7 = OpTypeVector %6 2
+         %10 = OpTypeVector %6 4
+         %11 = OpTypePointer Input %10
+         %12 = OpVariable %11 Input
+         %15 = OpTypeStruct %7
+         %16 = OpTypePointer Uniform %15
+         %17 = OpVariable %16 Uniform
+         %18 = OpTypeInt 32 1
+         %19 = OpConstant %18 0
+         %20 = OpTypePointer Uniform %7
+         %27 = OpTypeInt 32 0
+         %32 = OpConstant %6 10
+         %47 = OpConstant %18 10
+         %51 = OpConstant %18 100
+         %60 = OpTypeBool
+         %62 = OpConstant %18 4
+         %65 = OpConstant %18 1000
+         %71 = OpConstant %18 1
+         %73 = OpTypePointer Output %10
+         %74 = OpVariable %73 Output
+         %75 = OpConstant %27 16
+         %76 = OpTypeArray %10 %75
+         %77 = OpConstant %6 0
+         %78 = OpConstant %6 1
+         %79 = OpConstantComposite %10 %77 %77 %77 %78
+         %80 = OpConstant %6 0.5
+         %81 = OpConstantComposite %10 %80 %77 %77 %78
+         %82 = OpConstantComposite %10 %77 %80 %77 %78
+         %83 = OpConstantComposite %10 %80 %80 %77 %78
+         %84 = OpConstantComposite %10 %77 %77 %80 %78
+         %85 = OpConstantComposite %10 %80 %77 %80 %78
+         %86 = OpConstantComposite %10 %77 %80 %80 %78
+         %87 = OpConstantComposite %10 %80 %80 %80 %78
+         %88 = OpConstantComposite %10 %78 %77 %77 %78
+         %89 = OpConstantComposite %10 %77 %78 %77 %78
+         %90 = OpConstantComposite %10 %78 %78 %77 %78
+         %91 = OpConstantComposite %10 %77 %77 %78 %78
+         %92 = OpConstantComposite %10 %78 %77 %78 %78
+         %93 = OpConstantComposite %10 %77 %78 %78 %78
+         %94 = OpConstantComposite %10 %78 %78 %78 %78
+         %95 = OpConstantComposite %76 %79 %81 %82 %83 %84 %85 %86 %87 %79 %88 %89 %90 %91 %92 %93 %94
+         %97 = OpConstant %18 16
+         %99 = OpTypePointer Function %76
+        %101 = OpTypePointer Function %10
+        %234 = OpConstant %6 0
+        %235 = OpConstantComposite %10 %234 %234 %234 %234
+        %236 = OpConstantComposite %76 %235 %235 %235 %235 %235 %235 %235 %235 %235 %235 %235 %235 %235 %235 %235 %235
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+        %100 = OpVariable %99 Function
+         %13 = OpLoad %10 %12
+         %14 = OpVectorShuffle %7 %13 %13 0 1
+         %21 = OpAccessChain %20 %17 %19
+         %22 = OpLoad %7 %21
+         %23 = OpFDiv %7 %14 %22
+         %31 = OpCompositeExtract %6 %23 0
+         %33 = OpFMul %6 %31 %32
+         %34 = OpConvertFToS %18 %33
+         %37 = OpCompositeExtract %6 %23 1
+         %38 = OpFMul %6 %37 %32
+         %39 = OpConvertFToS %18 %38
+         %48 = OpIMul %18 %39 %47
+         %49 = OpIAdd %18 %34 %48
+               OpBranch %53
+         %53 = OpLabel
+        %106 = OpPhi %18 %51 %5 %69 %54
+        %104 = OpPhi %18 %19 %5 %72 %54
+         %61 = OpSLessThan %60 %104 %49
+               OpLoopMerge %55 %54 None
+               OpBranchConditional %61 %54 %55
+         %54 = OpLabel
+         %64 = OpIMul %18 %62 %106
+         %67 = OpISub %18 %65 %106
+         %68 = OpIMul %18 %64 %67
+         %69 = OpSDiv %18 %68 %65
+         %72 = OpIAdd %18 %104 %71
+               OpBranch %53
+         %55 = OpLabel
+         %98 = OpSMod %18 %106 %97
+               OpStore %100 %95
+        %262 = OpLoad %76 %100
+               OpStore %100 %236
+               OpStore %100 %262
+        %231 = OpVectorShuffle %7 %89 %85 1 4
+        %102 = OpAccessChain %101 %100 %98
+        %103 = OpLoad %10 %102
+               OpStore %74 %103
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# resolution
+BUFFER variant_resolution DATA_TYPE vec2<float> STD140 DATA
+ 256.0 256.0
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 256 256
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant_resolution AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256
+
+
+SHADER vertex variant_2_vertex_shader PASSTHROUGH
+
+SHADER fragment variant_2_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 7
+; Bound: 237
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %12 %74
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 320
+               OpName %4 "main"
+               OpName %12 "gl_FragCoord"
+               OpName %15 "buf0"
+               OpMemberName %15 0 "resolution"
+               OpName %17 ""
+               OpName %74 "_GLF_color"
+               OpName %100 "indexable"
+               OpDecorate %12 BuiltIn FragCoord
+               OpMemberDecorate %15 0 Offset 0
+               OpDecorate %15 Block
+               OpDecorate %17 DescriptorSet 0
+               OpDecorate %17 Binding 0
+               OpDecorate %74 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeFloat 32
+          %7 = OpTypeVector %6 2
+         %10 = OpTypeVector %6 4
+         %11 = OpTypePointer Input %10
+         %12 = OpVariable %11 Input
+         %15 = OpTypeStruct %7
+         %16 = OpTypePointer Uniform %15
+         %17 = OpVariable %16 Uniform
+         %18 = OpTypeInt 32 1
+         %19 = OpConstant %18 0
+         %20 = OpTypePointer Uniform %7
+         %27 = OpTypeInt 32 0
+         %32 = OpConstant %6 10
+         %47 = OpConstant %18 10
+         %51 = OpConstant %18 100
+         %60 = OpTypeBool
+         %62 = OpConstant %18 4
+         %65 = OpConstant %18 1000
+         %71 = OpConstant %18 1
+         %73 = OpTypePointer Output %10
+         %74 = OpVariable %73 Output
+         %75 = OpConstant %27 16
+         %76 = OpTypeArray %10 %75
+         %77 = OpConstant %6 0
+         %78 = OpConstant %6 1
+         %79 = OpConstantComposite %10 %77 %77 %77 %78
+         %80 = OpConstant %6 0.5
+         %81 = OpConstantComposite %10 %80 %77 %77 %78
+         %82 = OpConstantComposite %10 %77 %80 %77 %78
+         %83 = OpConstantComposite %10 %80 %80 %77 %78
+         %84 = OpConstantComposite %10 %77 %77 %80 %78
+         %85 = OpConstantComposite %10 %80 %77 %80 %78
+         %86 = OpConstantComposite %10 %77 %80 %80 %78
+         %87 = OpConstantComposite %10 %80 %80 %80 %78
+         %88 = OpConstantComposite %10 %78 %77 %77 %78
+         %89 = OpConstantComposite %10 %77 %78 %77 %78
+         %90 = OpConstantComposite %10 %78 %78 %77 %78
+         %91 = OpConstantComposite %10 %77 %77 %78 %78
+         %92 = OpConstantComposite %10 %78 %77 %78 %78
+         %93 = OpConstantComposite %10 %77 %78 %78 %78
+         %94 = OpConstantComposite %10 %78 %78 %78 %78
+         %95 = OpConstantComposite %76 %79 %81 %82 %83 %84 %85 %86 %87 %79 %88 %89 %90 %91 %92 %93 %94
+         %97 = OpConstant %18 16
+         %99 = OpTypePointer Function %76
+        %101 = OpTypePointer Function %10
+        %234 = OpConstant %6 0
+        %235 = OpConstantComposite %10 %234 %234 %234 %234
+        %236 = OpConstantComposite %76 %235 %235 %235 %235 %235 %235 %235 %235 %235 %235 %235 %235 %235 %235 %235 %235
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+        %100 = OpVariable %99 Function
+         %13 = OpLoad %10 %12
+         %14 = OpVectorShuffle %7 %13 %13 0 1
+         %21 = OpAccessChain %20 %17 %19
+         %22 = OpLoad %7 %21
+         %23 = OpFDiv %7 %14 %22
+         %31 = OpCompositeExtract %6 %23 0
+         %33 = OpFMul %6 %31 %32
+         %34 = OpConvertFToS %18 %33
+         %37 = OpCompositeExtract %6 %23 1
+         %38 = OpFMul %6 %37 %32
+         %39 = OpConvertFToS %18 %38
+         %48 = OpIMul %18 %39 %47
+         %49 = OpIAdd %18 %34 %48
+               OpBranch %53
+         %53 = OpLabel
+        %106 = OpPhi %18 %51 %5 %69 %54
+        %104 = OpPhi %18 %19 %5 %72 %54
+         %61 = OpSLessThan %60 %104 %49
+               OpLoopMerge %55 %54 None
+               OpBranchConditional %61 %54 %55
+         %54 = OpLabel
+         %64 = OpIMul %18 %62 %106
+         %67 = OpISub %18 %65 %106
+         %68 = OpIMul %18 %64 %67
+         %69 = OpSDiv %18 %68 %65
+         %72 = OpIAdd %18 %104 %71
+               OpBranch %53
+         %55 = OpLabel
+         %98 = OpSMod %18 %106 %97
+               OpStore %100 %95
+        %231 = OpVectorShuffle %7 %89 %85 1 4
+        %102 = OpAccessChain %101 %100 %98
+        %103 = OpLoad %10 %102
+               OpStore %74 %103
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for variant_2
+
+# resolution
+BUFFER variant_2_resolution DATA_TYPE vec2<float> STD140 DATA
+ 256.0 256.0
+END
+
+BUFFER variant_2_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_2_pipeline
+  ATTACH variant_2_vertex_shader
+  ATTACH variant_2_fragment_shader
+  FRAMEBUFFER_SIZE 256 256
+  BIND BUFFER variant_2_framebuffer AS color LOCATION 0
+  BIND BUFFER variant_2_resolution AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_2_pipeline 0 0 0 255
+
+CLEAR variant_2_pipeline
+RUN variant_2_pipeline DRAW_RECT POS 0 0 SIZE 256 256
+
+EXPECT reference_framebuffer EQ_HISTOGRAM_EMD_BUFFER variant_framebuffer TOLERANCE 0.005
+EXPECT reference_framebuffer EQ_HISTOGRAM_EMD_BUFFER variant_2_framebuffer TOLERANCE 0.005
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/spv-stable-collatz-O-mutate-composite-construct-extract.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/spv-stable-collatz-O-mutate-composite-construct-extract.amber
new file mode 100644
index 0000000..c9766f5
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/spv-stable-collatz-O-mutate-composite-construct-extract.amber
@@ -0,0 +1,329 @@
+#!amber
+
+# Copyright 2020 Google LLC
+#
+# 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.
+
+
+# A test for a bug found by the GraphicsFuzz project.
+
+# Short description: Two shaders diff: mutate var, comp extract/construct
+
+# The test renders two images using semantically equivalent shaders, and then
+# checks that the images are similar.
+# The test passes because the shaders have the same semantics and so the images
+# should be the same.
+
+SHADER vertex reference_vertex_shader PASSTHROUGH
+
+SHADER fragment reference_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 7
+; Bound: 138
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %47 %76
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 320
+               OpName %4 "main"
+               OpName %47 "gl_FragCoord"
+               OpName %50 "buf0"
+               OpMemberName %50 0 "resolution"
+               OpName %52 ""
+               OpName %76 "_GLF_color"
+               OpName %104 "indexable"
+               OpDecorate %47 BuiltIn FragCoord
+               OpMemberDecorate %50 0 Offset 0
+               OpDecorate %50 Block
+               OpDecorate %52 DescriptorSet 0
+               OpDecorate %52 Binding 0
+               OpDecorate %76 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeInt 32 1
+         %13 = OpConstant %6 0
+         %20 = OpConstant %6 1
+         %21 = OpTypeBool
+         %28 = OpConstant %6 3
+         %33 = OpConstant %6 2
+         %41 = OpTypeFloat 32
+         %42 = OpTypeVector %41 2
+         %45 = OpTypeVector %41 4
+         %46 = OpTypePointer Input %45
+         %47 = OpVariable %46 Input
+         %50 = OpTypeStruct %42
+         %51 = OpTypePointer Uniform %50
+         %52 = OpVariable %51 Uniform
+         %53 = OpTypePointer Uniform %42
+         %58 = OpConstant %41 8
+         %62 = OpTypeInt 32 0
+         %68 = OpConstant %6 8
+         %75 = OpTypePointer Output %45
+         %76 = OpVariable %75 Output
+         %77 = OpConstant %62 16
+         %78 = OpTypeArray %45 %77
+         %79 = OpConstant %41 0
+         %80 = OpConstant %41 1
+         %81 = OpConstantComposite %45 %79 %79 %79 %80
+         %82 = OpConstant %41 0.5
+         %83 = OpConstantComposite %45 %82 %79 %79 %80
+         %84 = OpConstantComposite %45 %79 %82 %79 %80
+         %85 = OpConstantComposite %45 %82 %82 %79 %80
+         %86 = OpConstantComposite %45 %79 %79 %82 %80
+         %87 = OpConstantComposite %45 %82 %79 %82 %80
+         %88 = OpConstantComposite %45 %79 %82 %82 %80
+         %89 = OpConstantComposite %45 %82 %82 %82 %80
+         %90 = OpConstantComposite %45 %80 %79 %79 %80
+         %91 = OpConstantComposite %45 %79 %80 %79 %80
+         %92 = OpConstantComposite %45 %80 %80 %79 %80
+         %93 = OpConstantComposite %45 %79 %79 %80 %80
+         %94 = OpConstantComposite %45 %80 %79 %80 %80
+         %95 = OpConstantComposite %45 %79 %80 %80 %80
+         %96 = OpConstantComposite %45 %80 %80 %80 %80
+         %97 = OpConstantComposite %78 %81 %83 %84 %85 %86 %87 %88 %89 %81 %90 %91 %92 %93 %94 %95 %96
+        %101 = OpConstant %6 16
+        %103 = OpTypePointer Function %78
+        %105 = OpTypePointer Function %45
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+        %104 = OpVariable %103 Function
+         %48 = OpLoad %45 %47
+         %49 = OpVectorShuffle %42 %48 %48 0 1
+         %54 = OpAccessChain %53 %52 %13
+         %55 = OpLoad %42 %54
+         %56 = OpFDiv %42 %49 %55
+         %59 = OpVectorTimesScalar %42 %56 %58
+         %60 = OpExtInst %42 %1 Floor %59
+         %66 = OpCompositeExtract %41 %60 0
+         %67 = OpConvertFToS %6 %66
+         %69 = OpIMul %6 %67 %68
+         %72 = OpCompositeExtract %41 %60 1
+         %73 = OpConvertFToS %6 %72
+         %74 = OpIAdd %6 %69 %73
+               OpBranch %111
+        %111 = OpLabel
+        %135 = OpPhi %6 %13 %5 %128 %129
+        %134 = OpPhi %6 %74 %5 %137 %129
+        %114 = OpSGreaterThan %21 %134 %20
+               OpLoopMerge %130 %129 None
+               OpBranchConditional %114 %115 %130
+        %115 = OpLabel
+        %117 = OpBitwiseAnd %6 %134 %20
+        %118 = OpIEqual %21 %117 %20
+               OpSelectionMerge %126 None
+               OpBranchConditional %118 %119 %123
+        %119 = OpLabel
+        %121 = OpIMul %6 %28 %134
+        %122 = OpIAdd %6 %121 %20
+               OpBranch %126
+        %123 = OpLabel
+        %125 = OpSDiv %6 %134 %33
+               OpBranch %126
+        %126 = OpLabel
+        %137 = OpPhi %6 %122 %119 %125 %123
+        %128 = OpIAdd %6 %135 %20
+               OpBranch %129
+        %129 = OpLabel
+               OpBranch %111
+        %130 = OpLabel
+        %102 = OpSMod %6 %135 %101
+               OpStore %104 %97
+        %106 = OpAccessChain %105 %104 %102
+        %107 = OpLoad %45 %106
+               OpStore %76 %107
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for reference
+
+# resolution
+BUFFER reference_resolution DATA_TYPE vec2<float> STD140 DATA
+ 256.0 256.0
+END
+
+BUFFER reference_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics reference_pipeline
+  ATTACH reference_vertex_shader
+  ATTACH reference_fragment_shader
+  FRAMEBUFFER_SIZE 256 256
+  BIND BUFFER reference_framebuffer AS color LOCATION 0
+  BIND BUFFER reference_resolution AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR reference_pipeline 0 0 0 255
+
+CLEAR reference_pipeline
+RUN reference_pipeline DRAW_RECT POS 0 0 SIZE 256 256
+
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 7
+; Bound: 502
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %47 %76
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 320
+               OpName %4 "main"
+               OpName %47 "gl_FragCoord"
+               OpName %50 "buf0"
+               OpMemberName %50 0 "resolution"
+               OpName %52 ""
+               OpName %76 "_GLF_color"
+               OpName %104 "indexable"
+               OpDecorate %47 BuiltIn FragCoord
+               OpMemberDecorate %50 0 Offset 0
+               OpDecorate %50 Block
+               OpDecorate %52 DescriptorSet 0
+               OpDecorate %52 Binding 0
+               OpDecorate %76 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeInt 32 1
+         %13 = OpConstant %6 0
+         %20 = OpConstant %6 1
+         %21 = OpTypeBool
+         %28 = OpConstant %6 3
+         %33 = OpConstant %6 2
+         %41 = OpTypeFloat 32
+         %42 = OpTypeVector %41 2
+         %45 = OpTypeVector %41 4
+         %46 = OpTypePointer Input %45
+         %47 = OpVariable %46 Input
+         %50 = OpTypeStruct %42
+         %51 = OpTypePointer Uniform %50
+         %52 = OpVariable %51 Uniform
+         %53 = OpTypePointer Uniform %42
+         %58 = OpConstant %41 8
+         %62 = OpTypeInt 32 0
+         %68 = OpConstant %6 8
+         %75 = OpTypePointer Output %45
+         %76 = OpVariable %75 Output
+         %77 = OpConstant %62 16
+         %78 = OpTypeArray %45 %77
+         %79 = OpConstant %41 0
+         %80 = OpConstant %41 1
+         %81 = OpConstantComposite %45 %79 %79 %79 %80
+         %82 = OpConstant %41 0.5
+         %83 = OpConstantComposite %45 %82 %79 %79 %80
+         %84 = OpConstantComposite %45 %79 %82 %79 %80
+         %85 = OpConstantComposite %45 %82 %82 %79 %80
+         %86 = OpConstantComposite %45 %79 %79 %82 %80
+         %87 = OpConstantComposite %45 %82 %79 %82 %80
+         %88 = OpConstantComposite %45 %79 %82 %82 %80
+         %89 = OpConstantComposite %45 %82 %82 %82 %80
+         %90 = OpConstantComposite %45 %80 %79 %79 %80
+         %91 = OpConstantComposite %45 %79 %80 %79 %80
+         %92 = OpConstantComposite %45 %80 %80 %79 %80
+         %93 = OpConstantComposite %45 %79 %79 %80 %80
+         %94 = OpConstantComposite %45 %80 %79 %80 %80
+         %95 = OpConstantComposite %45 %79 %80 %80 %80
+         %96 = OpConstantComposite %45 %80 %80 %80 %80
+         %97 = OpConstantComposite %78 %81 %83 %84 %85 %86 %87 %88 %89 %81 %90 %91 %92 %93 %94 %95 %96
+        %101 = OpConstant %6 16
+        %103 = OpTypePointer Function %78
+        %105 = OpTypePointer Function %45
+        %403 = OpConstant %41 0
+        %404 = OpConstantComposite %45 %403 %403 %403 %403
+        %405 = OpConstantComposite %78 %404 %404 %404 %404 %404 %404 %404 %404 %404 %404 %404 %404 %404 %404 %404 %404
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+        %104 = OpVariable %103 Function
+         %48 = OpLoad %45 %47
+         %49 = OpVectorShuffle %42 %48 %48 0 1
+        %238 = OpCompositeConstruct %45 %79 %58 %49
+         %54 = OpAccessChain %53 %52 %13
+         %55 = OpLoad %42 %54
+        %239 = OpCompositeConstruct %78 %86 %94 %88 %95 %96 %88 %88 %87 %92 %48 %86 %85 %84 %83 %91 %90
+         %56 = OpFDiv %42 %49 %55
+         %59 = OpVectorTimesScalar %42 %56 %58
+         %60 = OpExtInst %42 %1 Floor %59
+        %241 = OpCompositeConstruct %45 %59 %82 %80
+         %66 = OpCompositeExtract %41 %60 0
+         %67 = OpConvertFToS %6 %66
+         %69 = OpIMul %6 %67 %68
+         %72 = OpCompositeExtract %41 %60 1
+         %73 = OpConvertFToS %6 %72
+         %74 = OpIAdd %6 %69 %73
+               OpBranch %111
+        %111 = OpLabel
+        %135 = OpPhi %6 %13 %5 %128 %129
+        %134 = OpPhi %6 %74 %5 %137 %129
+        %114 = OpSGreaterThan %21 %134 %20
+               OpLoopMerge %130 %129 None
+               OpBranchConditional %114 %115 %130
+        %115 = OpLabel
+        %117 = OpBitwiseAnd %6 %134 %20
+        %118 = OpIEqual %21 %117 %20
+               OpSelectionMerge %126 None
+               OpBranchConditional %118 %119 %123
+        %119 = OpLabel
+        %121 = OpIMul %6 %28 %134
+        %122 = OpIAdd %6 %121 %20
+               OpBranch %126
+        %123 = OpLabel
+        %125 = OpSDiv %6 %134 %33
+               OpBranch %126
+        %126 = OpLabel
+        %137 = OpPhi %6 %122 %119 %125 %123
+        %128 = OpIAdd %6 %135 %20
+               OpBranch %129
+        %129 = OpLabel
+               OpBranch %111
+        %130 = OpLabel
+        %102 = OpSMod %6 %135 %101
+               OpStore %104 %97
+        %501 = OpLoad %78 %104
+               OpStore %104 %405
+               OpStore %104 %501
+        %248 = OpCompositeExtract %45 %239 1
+        %245 = OpCompositeConstruct %78 %87 %87 %91 %81 %87 %89 %94 %81 %91 %238 %86 %88 %87 %92 %94 %241
+        %106 = OpAccessChain %105 %104 %102
+        %107 = OpLoad %45 %106
+               OpStore %76 %107
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# resolution
+BUFFER variant_resolution DATA_TYPE vec2<float> STD140 DATA
+ 256.0 256.0
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 256 256
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant_resolution AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256
+
+EXPECT reference_framebuffer EQ_HISTOGRAM_EMD_BUFFER variant_framebuffer TOLERANCE 0.005
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/spv-stable-colorgrid-modulo-O-move-block-down.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/spv-stable-colorgrid-modulo-O-move-block-down.amber
new file mode 100644
index 0000000..041141a
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/spv-stable-colorgrid-modulo-O-move-block-down.amber
@@ -0,0 +1,536 @@
+#!amber
+
+# Copyright 2020 Google LLC
+#
+# 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.
+
+
+# A test for a bug found by the GraphicsFuzz project.
+
+# Short description: Two shaders with diff: some blocks moved down
+
+# The test renders two images using semantically equivalent shaders, and then
+# checks that the images are similar.
+# The test passes because the shaders have the same semantics and so the images
+# should be the same.
+
+SHADER vertex reference_vertex_shader PASSTHROUGH
+
+SHADER fragment reference_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 7
+; Bound: 290
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %85 %137
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 320
+               OpName %4 "main"
+               OpName %66 "c"
+               OpName %73 "buf0"
+               OpMemberName %73 0 "resolution"
+               OpName %75 ""
+               OpName %85 "gl_FragCoord"
+               OpName %137 "_GLF_color"
+               OpMemberDecorate %73 0 Offset 0
+               OpDecorate %73 Block
+               OpDecorate %75 DescriptorSet 0
+               OpDecorate %75 Binding 0
+               OpDecorate %85 BuiltIn FragCoord
+               OpDecorate %137 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeFloat 32
+          %7 = OpTypePointer Function %6
+         %14 = OpConstant %6 -0.5
+         %15 = OpTypeInt 32 1
+         %18 = OpConstant %15 1
+         %25 = OpConstant %15 800
+         %26 = OpTypeBool
+         %29 = OpConstant %15 32
+         %31 = OpConstant %15 0
+         %35 = OpConstant %6 0.400000006
+         %44 = OpConstant %6 0.00999999978
+         %48 = OpConstant %6 100
+         %64 = OpTypeVector %6 3
+         %65 = OpTypePointer Function %64
+         %67 = OpConstant %6 7
+         %68 = OpConstant %6 8
+         %69 = OpConstant %6 9
+         %70 = OpConstantComposite %64 %67 %68 %69
+         %72 = OpTypeVector %6 2
+         %73 = OpTypeStruct %72
+         %74 = OpTypePointer Uniform %73
+         %75 = OpVariable %74 Uniform
+         %76 = OpTypeInt 32 0
+         %77 = OpConstant %76 0
+         %78 = OpTypePointer Uniform %6
+         %83 = OpTypeVector %6 4
+         %84 = OpTypePointer Input %83
+         %85 = OpVariable %84 Input
+         %87 = OpTypePointer Input %6
+         %95 = OpConstant %76 1
+        %107 = OpConstant %76 2
+        %116 = OpConstant %15 3
+        %121 = OpConstant %6 1
+        %136 = OpTypePointer Output %83
+        %137 = OpVariable %136 Output
+        %149 = OpConstantFalse %26
+        %152 = OpConstantTrue %26
+        %261 = OpUndef %6
+        %289 = OpConstant %6 0.125
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+         %66 = OpVariable %65 Function
+               OpStore %66 %70
+         %79 = OpAccessChain %78 %75 %31 %77
+         %80 = OpLoad %6 %79
+         %81 = OpFMul %6 %80 %289
+         %82 = OpExtInst %6 %1 Round %81
+         %88 = OpAccessChain %87 %85 %77
+         %89 = OpLoad %6 %88
+               OpSelectionMerge %199 None
+               OpSwitch %77 %161
+        %161 = OpLabel
+               OpBranch %162
+        %162 = OpLabel
+        %248 = OpPhi %6 %14 %161 %251 %192
+        %247 = OpPhi %15 %18 %161 %194 %192
+        %165 = OpSLessThan %26 %247 %25
+               OpLoopMerge %195 %192 None
+               OpBranchConditional %165 %166 %195
+        %166 = OpLabel
+        %168 = OpSMod %15 %247 %29
+        %169 = OpIEqual %26 %168 %31
+               OpSelectionMerge %184 None
+               OpBranchConditional %169 %170 %173
+        %170 = OpLabel
+        %172 = OpFAdd %6 %248 %35
+               OpBranch %184
+        %173 = OpLabel
+        %175 = OpConvertSToF %6 %247
+        %177 = OpExtInst %6 %1 Round %82
+        %178 = OpFMod %6 %175 %177
+        %179 = OpFOrdLessThanEqual %26 %178 %44
+               OpSelectionMerge %183 None
+               OpBranchConditional %179 %180 %183
+        %180 = OpLabel
+        %182 = OpFAdd %6 %248 %48
+               OpBranch %183
+        %183 = OpLabel
+        %252 = OpPhi %6 %248 %173 %182 %180
+               OpBranch %184
+        %184 = OpLabel
+        %251 = OpPhi %6 %172 %170 %252 %183
+        %186 = OpConvertSToF %6 %247
+        %188 = OpFOrdGreaterThanEqual %26 %186 %89
+               OpSelectionMerge %191 None
+               OpBranchConditional %188 %189 %191
+        %189 = OpLabel
+               OpBranch %195
+        %191 = OpLabel
+               OpBranch %192
+        %192 = OpLabel
+        %194 = OpIAdd %15 %247 %18
+               OpBranch %162
+        %195 = OpLabel
+        %259 = OpPhi %6 %261 %162 %251 %189
+        %257 = OpPhi %6 %248 %162 %251 %189
+        %253 = OpPhi %26 %149 %162 %152 %189
+               OpSelectionMerge %197 None
+               OpBranchConditional %253 %199 %197
+        %197 = OpLabel
+               OpBranch %199
+        %199 = OpLabel
+        %258 = OpPhi %6 %259 %195 %257 %197
+         %93 = OpAccessChain %7 %66 %77
+               OpStore %93 %258
+         %96 = OpAccessChain %87 %85 %95
+         %97 = OpLoad %6 %96
+               OpSelectionMerge %245 None
+               OpSwitch %77 %207
+        %207 = OpLabel
+               OpBranch %208
+        %208 = OpLabel
+        %265 = OpPhi %6 %14 %207 %268 %238
+        %264 = OpPhi %15 %18 %207 %240 %238
+        %211 = OpSLessThan %26 %264 %25
+               OpLoopMerge %241 %238 None
+               OpBranchConditional %211 %212 %241
+        %212 = OpLabel
+        %214 = OpSMod %15 %264 %29
+        %215 = OpIEqual %26 %214 %31
+               OpSelectionMerge %230 None
+               OpBranchConditional %215 %216 %219
+        %216 = OpLabel
+        %218 = OpFAdd %6 %265 %35
+               OpBranch %230
+        %219 = OpLabel
+        %221 = OpConvertSToF %6 %264
+        %223 = OpExtInst %6 %1 Round %82
+        %224 = OpFMod %6 %221 %223
+        %225 = OpFOrdLessThanEqual %26 %224 %44
+               OpSelectionMerge %229 None
+               OpBranchConditional %225 %226 %229
+        %226 = OpLabel
+        %228 = OpFAdd %6 %265 %48
+               OpBranch %229
+        %229 = OpLabel
+        %269 = OpPhi %6 %265 %219 %228 %226
+               OpBranch %230
+        %230 = OpLabel
+        %268 = OpPhi %6 %218 %216 %269 %229
+        %232 = OpConvertSToF %6 %264
+        %234 = OpFOrdGreaterThanEqual %26 %232 %97
+               OpSelectionMerge %237 None
+               OpBranchConditional %234 %235 %237
+        %235 = OpLabel
+               OpBranch %241
+        %237 = OpLabel
+               OpBranch %238
+        %238 = OpLabel
+        %240 = OpIAdd %15 %264 %18
+               OpBranch %208
+        %241 = OpLabel
+        %276 = OpPhi %6 %261 %208 %268 %235
+        %274 = OpPhi %6 %265 %208 %268 %235
+        %270 = OpPhi %26 %149 %208 %152 %235
+               OpSelectionMerge %243 None
+               OpBranchConditional %270 %245 %243
+        %243 = OpLabel
+               OpBranch %245
+        %245 = OpLabel
+        %275 = OpPhi %6 %276 %241 %274 %243
+        %101 = OpAccessChain %7 %66 %95
+               OpStore %101 %275
+        %103 = OpLoad %6 %93
+        %105 = OpLoad %6 %101
+        %106 = OpFAdd %6 %103 %105
+        %108 = OpAccessChain %7 %66 %107
+               OpStore %108 %106
+               OpBranch %110
+        %110 = OpLabel
+        %285 = OpPhi %15 %31 %245 %135 %113
+        %117 = OpSLessThan %26 %285 %116
+               OpLoopMerge %112 %113 None
+               OpBranchConditional %117 %111 %112
+        %111 = OpLabel
+        %119 = OpAccessChain %7 %66 %285
+        %120 = OpLoad %6 %119
+        %122 = OpFOrdGreaterThanEqual %26 %120 %121
+               OpSelectionMerge %124 None
+               OpBranchConditional %122 %123 %124
+        %123 = OpLabel
+        %128 = OpLoad %6 %119
+        %131 = OpLoad %6 %119
+        %132 = OpFMul %6 %128 %131
+               OpStore %119 %132
+               OpBranch %124
+        %124 = OpLabel
+               OpBranch %113
+        %113 = OpLabel
+        %135 = OpIAdd %15 %285 %18
+               OpBranch %110
+        %112 = OpLabel
+        %138 = OpLoad %64 %66
+        %139 = OpExtInst %64 %1 FAbs %138
+        %140 = OpExtInst %64 %1 Normalize %139
+        %141 = OpCompositeExtract %6 %140 0
+        %142 = OpCompositeExtract %6 %140 1
+        %143 = OpCompositeExtract %6 %140 2
+        %144 = OpCompositeConstruct %83 %141 %142 %143 %121
+               OpStore %137 %144
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for reference
+
+# resolution
+BUFFER reference_resolution DATA_TYPE vec2<float> STD140 DATA
+ 256.0 256.0
+END
+
+BUFFER reference_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics reference_pipeline
+  ATTACH reference_vertex_shader
+  ATTACH reference_fragment_shader
+  FRAMEBUFFER_SIZE 256 256
+  BIND BUFFER reference_framebuffer AS color LOCATION 0
+  BIND BUFFER reference_resolution AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR reference_pipeline 0 0 0 255
+
+CLEAR reference_pipeline
+RUN reference_pipeline DRAW_RECT POS 0 0 SIZE 256 256
+
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 7
+; Bound: 290
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %85 %137
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 320
+               OpName %4 "main"
+               OpName %66 "c"
+               OpName %73 "buf0"
+               OpMemberName %73 0 "resolution"
+               OpName %75 ""
+               OpName %85 "gl_FragCoord"
+               OpName %137 "_GLF_color"
+               OpMemberDecorate %73 0 Offset 0
+               OpDecorate %73 Block
+               OpDecorate %75 DescriptorSet 0
+               OpDecorate %75 Binding 0
+               OpDecorate %85 BuiltIn FragCoord
+               OpDecorate %137 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeFloat 32
+          %7 = OpTypePointer Function %6
+         %14 = OpConstant %6 -0.5
+         %15 = OpTypeInt 32 1
+         %18 = OpConstant %15 1
+         %25 = OpConstant %15 800
+         %26 = OpTypeBool
+         %29 = OpConstant %15 32
+         %31 = OpConstant %15 0
+         %35 = OpConstant %6 0.400000006
+         %44 = OpConstant %6 0.00999999978
+         %48 = OpConstant %6 100
+         %64 = OpTypeVector %6 3
+         %65 = OpTypePointer Function %64
+         %67 = OpConstant %6 7
+         %68 = OpConstant %6 8
+         %69 = OpConstant %6 9
+         %70 = OpConstantComposite %64 %67 %68 %69
+         %72 = OpTypeVector %6 2
+         %73 = OpTypeStruct %72
+         %74 = OpTypePointer Uniform %73
+         %75 = OpVariable %74 Uniform
+         %76 = OpTypeInt 32 0
+         %77 = OpConstant %76 0
+         %78 = OpTypePointer Uniform %6
+         %83 = OpTypeVector %6 4
+         %84 = OpTypePointer Input %83
+         %85 = OpVariable %84 Input
+         %87 = OpTypePointer Input %6
+         %95 = OpConstant %76 1
+        %107 = OpConstant %76 2
+        %116 = OpConstant %15 3
+        %121 = OpConstant %6 1
+        %136 = OpTypePointer Output %83
+        %137 = OpVariable %136 Output
+        %149 = OpConstantFalse %26
+        %152 = OpConstantTrue %26
+        %261 = OpUndef %6
+        %289 = OpConstant %6 0.125
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+         %66 = OpVariable %65 Function
+               OpStore %66 %70
+         %79 = OpAccessChain %78 %75 %31 %77
+         %80 = OpLoad %6 %79
+         %81 = OpFMul %6 %80 %289
+         %82 = OpExtInst %6 %1 Round %81
+         %88 = OpAccessChain %87 %85 %77
+         %89 = OpLoad %6 %88
+               OpSelectionMerge %199 None
+               OpSwitch %77 %161
+        %161 = OpLabel
+               OpBranch %162
+        %162 = OpLabel
+        %248 = OpPhi %6 %14 %161 %251 %192
+        %247 = OpPhi %15 %18 %161 %194 %192
+        %165 = OpSLessThan %26 %247 %25
+               OpLoopMerge %195 %192 None
+               OpBranchConditional %165 %166 %195
+        %166 = OpLabel
+        %168 = OpSMod %15 %247 %29
+        %169 = OpIEqual %26 %168 %31
+               OpSelectionMerge %184 None
+               OpBranchConditional %169 %170 %173
+        %170 = OpLabel
+        %172 = OpFAdd %6 %248 %35
+               OpBranch %184
+        %173 = OpLabel
+        %175 = OpConvertSToF %6 %247
+        %177 = OpExtInst %6 %1 Round %82
+        %178 = OpFMod %6 %175 %177
+        %179 = OpFOrdLessThanEqual %26 %178 %44
+               OpSelectionMerge %183 None
+               OpBranchConditional %179 %180 %183
+        %180 = OpLabel
+        %182 = OpFAdd %6 %248 %48
+               OpBranch %183
+        %183 = OpLabel
+        %252 = OpPhi %6 %248 %173 %182 %180
+               OpBranch %184
+        %184 = OpLabel
+        %251 = OpPhi %6 %172 %170 %252 %183
+        %186 = OpConvertSToF %6 %247
+        %188 = OpFOrdGreaterThanEqual %26 %186 %89
+               OpSelectionMerge %191 None
+               OpBranchConditional %188 %189 %191
+        %189 = OpLabel
+               OpBranch %195
+        %191 = OpLabel
+               OpBranch %192
+        %192 = OpLabel
+        %194 = OpIAdd %15 %247 %18
+               OpBranch %162
+        %195 = OpLabel
+        %259 = OpPhi %6 %261 %162 %251 %189
+        %257 = OpPhi %6 %248 %162 %251 %189
+        %253 = OpPhi %26 %149 %162 %152 %189
+               OpSelectionMerge %197 None
+               OpBranchConditional %253 %199 %197
+        %197 = OpLabel
+               OpBranch %199
+        %199 = OpLabel
+        %258 = OpPhi %6 %259 %195 %257 %197
+         %93 = OpAccessChain %7 %66 %77
+               OpStore %93 %258
+         %96 = OpAccessChain %87 %85 %95
+         %97 = OpLoad %6 %96
+               OpSelectionMerge %245 None
+               OpSwitch %77 %207
+        %207 = OpLabel
+               OpBranch %208
+        %208 = OpLabel
+        %265 = OpPhi %6 %14 %207 %268 %238
+        %264 = OpPhi %15 %18 %207 %240 %238
+        %211 = OpSLessThan %26 %264 %25
+               OpLoopMerge %241 %238 None
+               OpBranchConditional %211 %212 %241
+        %212 = OpLabel
+        %214 = OpSMod %15 %264 %29
+        %215 = OpIEqual %26 %214 %31
+               OpSelectionMerge %230 None
+               OpBranchConditional %215 %216 %219
+        %219 = OpLabel
+        %221 = OpConvertSToF %6 %264
+        %223 = OpExtInst %6 %1 Round %82
+        %224 = OpFMod %6 %221 %223
+        %225 = OpFOrdLessThanEqual %26 %224 %44
+               OpSelectionMerge %229 None
+               OpBranchConditional %225 %226 %229
+        %226 = OpLabel
+        %228 = OpFAdd %6 %265 %48
+               OpBranch %229
+        %229 = OpLabel
+        %269 = OpPhi %6 %265 %219 %228 %226
+               OpBranch %230
+        %230 = OpLabel
+        %268 = OpPhi %6 %218 %216 %269 %229
+        %232 = OpConvertSToF %6 %264
+        %234 = OpFOrdGreaterThanEqual %26 %232 %97
+               OpSelectionMerge %237 None
+               OpBranchConditional %234 %235 %237
+        %235 = OpLabel
+               OpBranch %241
+        %241 = OpLabel
+        %276 = OpPhi %6 %261 %208 %268 %235
+        %274 = OpPhi %6 %265 %208 %268 %235
+        %270 = OpPhi %26 %149 %208 %152 %235
+               OpSelectionMerge %243 None
+               OpBranchConditional %270 %245 %243
+        %216 = OpLabel
+        %218 = OpFAdd %6 %265 %35
+               OpBranch %230
+        %237 = OpLabel
+               OpBranch %238
+        %238 = OpLabel
+        %240 = OpIAdd %15 %264 %18
+               OpBranch %208
+        %243 = OpLabel
+               OpBranch %245
+        %245 = OpLabel
+        %275 = OpPhi %6 %276 %241 %274 %243
+        %101 = OpAccessChain %7 %66 %95
+               OpStore %101 %275
+        %103 = OpLoad %6 %93
+        %105 = OpLoad %6 %101
+        %106 = OpFAdd %6 %103 %105
+        %108 = OpAccessChain %7 %66 %107
+               OpStore %108 %106
+               OpBranch %110
+        %110 = OpLabel
+        %285 = OpPhi %15 %31 %245 %135 %113
+        %117 = OpSLessThan %26 %285 %116
+               OpLoopMerge %112 %113 None
+               OpBranchConditional %117 %111 %112
+        %111 = OpLabel
+        %119 = OpAccessChain %7 %66 %285
+        %120 = OpLoad %6 %119
+        %122 = OpFOrdGreaterThanEqual %26 %120 %121
+               OpSelectionMerge %124 None
+               OpBranchConditional %122 %123 %124
+        %123 = OpLabel
+        %128 = OpLoad %6 %119
+        %131 = OpLoad %6 %119
+        %132 = OpFMul %6 %128 %131
+               OpStore %119 %132
+               OpBranch %124
+        %124 = OpLabel
+               OpBranch %113
+        %113 = OpLabel
+        %135 = OpIAdd %15 %285 %18
+               OpBranch %110
+        %112 = OpLabel
+        %138 = OpLoad %64 %66
+        %139 = OpExtInst %64 %1 FAbs %138
+        %140 = OpExtInst %64 %1 Normalize %139
+        %141 = OpCompositeExtract %6 %140 0
+        %142 = OpCompositeExtract %6 %140 1
+        %143 = OpCompositeExtract %6 %140 2
+        %144 = OpCompositeConstruct %83 %141 %142 %143 %121
+               OpStore %137 %144
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# resolution
+BUFFER variant_resolution DATA_TYPE vec2<float> STD140 DATA
+ 256.0 256.0
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 256 256
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant_resolution AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256
+
+EXPECT reference_framebuffer EQ_HISTOGRAM_EMD_BUFFER variant_framebuffer TOLERANCE 0.005
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/spv-stable-maze-flatten-copy-composite.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/spv-stable-maze-flatten-copy-composite.amber
new file mode 100644
index 0000000..303cc8d
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/spv-stable-maze-flatten-copy-composite.amber
@@ -0,0 +1,2011 @@
+#!amber
+
+# Copyright 2020 Google LLC
+#
+# 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.
+
+
+# A test for a bug found by the GraphicsFuzz project.
+
+# Short description: Three shaders with diff: conditional %270 is flattened
+
+# The test renders three images using semantically equivalent shaders, and then
+# checks that the images are similar.
+# The test passes because the shaders have the same semantics and so the images
+# should be the same.
+
+SHADER vertex reference_vertex_shader PASSTHROUGH
+
+SHADER fragment reference_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 7
+; Bound: 442
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %12 %435
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 320
+               OpName %4 "main"
+               OpName %9 "pos"
+               OpName %12 "gl_FragCoord"
+               OpName %15 "buf0"
+               OpMemberName %15 0 "resolution"
+               OpName %17 ""
+               OpName %26 "ipos"
+               OpName %42 "i"
+               OpName %55 "map"
+               OpName %62 "p"
+               OpName %65 "canwalk"
+               OpName %67 "v"
+               OpName %74 "directions"
+               OpName %171 "j"
+               OpName %208 "d"
+               OpName %435 "_GLF_color"
+               OpDecorate %12 BuiltIn FragCoord
+               OpMemberDecorate %15 0 Offset 0
+               OpDecorate %15 Block
+               OpDecorate %17 DescriptorSet 0
+               OpDecorate %17 Binding 0
+               OpDecorate %435 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeFloat 32
+          %7 = OpTypeVector %6 2
+          %8 = OpTypePointer Function %7
+         %10 = OpTypeVector %6 4
+         %11 = OpTypePointer Input %10
+         %12 = OpVariable %11 Input
+         %15 = OpTypeStruct %7
+         %16 = OpTypePointer Uniform %15
+         %17 = OpVariable %16 Uniform
+         %18 = OpTypeInt 32 1
+         %19 = OpConstant %18 0
+         %20 = OpTypePointer Uniform %7
+         %24 = OpTypeVector %18 2
+         %25 = OpTypePointer Function %24
+         %27 = OpTypeInt 32 0
+         %28 = OpConstant %27 0
+         %29 = OpTypePointer Function %6
+         %32 = OpConstant %6 16
+         %35 = OpConstant %27 1
+         %41 = OpTypePointer Function %18
+         %49 = OpConstant %18 256
+         %50 = OpTypeBool
+         %52 = OpConstant %27 256
+         %53 = OpTypeArray %18 %52
+         %54 = OpTypePointer Private %53
+         %55 = OpVariable %54 Private
+         %57 = OpTypePointer Private %18
+         %60 = OpConstant %18 1
+         %63 = OpConstantComposite %24 %19 %19
+         %64 = OpTypePointer Function %50
+         %66 = OpConstantTrue %50
+         %82 = OpConstant %18 2
+         %86 = OpConstant %18 16
+        %119 = OpConstant %18 14
+        %162 = OpConstantFalse %50
+        %169 = OpConstant %18 8
+        %434 = OpTypePointer Output %10
+        %435 = OpVariable %434 Output
+        %436 = OpConstant %6 1
+        %437 = OpConstantComposite %10 %436 %436 %436 %436
+        %440 = OpConstant %6 0
+        %441 = OpConstantComposite %10 %440 %440 %440 %436
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+          %9 = OpVariable %8 Function
+         %26 = OpVariable %25 Function
+         %42 = OpVariable %41 Function
+         %62 = OpVariable %25 Function
+         %65 = OpVariable %64 Function
+         %67 = OpVariable %41 Function
+         %74 = OpVariable %41 Function
+        %171 = OpVariable %41 Function
+        %208 = OpVariable %41 Function
+         %13 = OpLoad %10 %12
+         %14 = OpVectorShuffle %7 %13 %13 0 1
+         %21 = OpAccessChain %20 %17 %19
+         %22 = OpLoad %7 %21
+         %23 = OpFDiv %7 %14 %22
+               OpStore %9 %23
+         %30 = OpAccessChain %29 %9 %28
+         %31 = OpLoad %6 %30
+         %33 = OpFMul %6 %31 %32
+         %34 = OpConvertFToS %18 %33
+         %36 = OpAccessChain %29 %9 %35
+         %37 = OpLoad %6 %36
+         %38 = OpFMul %6 %37 %32
+         %39 = OpConvertFToS %18 %38
+         %40 = OpCompositeConstruct %24 %34 %39
+               OpStore %26 %40
+               OpStore %42 %19
+               OpBranch %43
+         %43 = OpLabel
+               OpLoopMerge %45 %46 None
+               OpBranch %47
+         %47 = OpLabel
+         %48 = OpLoad %18 %42
+         %51 = OpSLessThan %50 %48 %49
+               OpBranchConditional %51 %44 %45
+         %44 = OpLabel
+         %56 = OpLoad %18 %42
+         %58 = OpAccessChain %57 %55 %56
+               OpStore %58 %19
+               OpBranch %46
+         %46 = OpLabel
+         %59 = OpLoad %18 %42
+         %61 = OpIAdd %18 %59 %60
+               OpStore %42 %61
+               OpBranch %43
+         %45 = OpLabel
+               OpStore %62 %63
+               OpStore %65 %66
+               OpStore %67 %19
+               OpBranch %68
+         %68 = OpLabel
+               OpLoopMerge %70 %71 None
+               OpBranch %69
+         %69 = OpLabel
+         %72 = OpLoad %18 %67
+         %73 = OpIAdd %18 %72 %60
+               OpStore %67 %73
+               OpStore %74 %19
+         %75 = OpAccessChain %41 %62 %28
+         %76 = OpLoad %18 %75
+         %77 = OpSGreaterThan %50 %76 %19
+               OpSelectionMerge %79 None
+               OpBranchConditional %77 %78 %79
+         %78 = OpLabel
+         %80 = OpAccessChain %41 %62 %28
+         %81 = OpLoad %18 %80
+         %83 = OpISub %18 %81 %82
+         %84 = OpAccessChain %41 %62 %35
+         %85 = OpLoad %18 %84
+         %87 = OpIMul %18 %85 %86
+         %88 = OpIAdd %18 %83 %87
+         %89 = OpAccessChain %57 %55 %88
+         %90 = OpLoad %18 %89
+         %91 = OpIEqual %50 %90 %19
+               OpBranch %79
+         %79 = OpLabel
+         %92 = OpPhi %50 %77 %69 %91 %78
+               OpSelectionMerge %94 None
+               OpBranchConditional %92 %93 %94
+         %93 = OpLabel
+         %95 = OpLoad %18 %74
+         %96 = OpIAdd %18 %95 %60
+               OpStore %74 %96
+               OpBranch %94
+         %94 = OpLabel
+         %97 = OpAccessChain %41 %62 %35
+         %98 = OpLoad %18 %97
+         %99 = OpSGreaterThan %50 %98 %19
+               OpSelectionMerge %101 None
+               OpBranchConditional %99 %100 %101
+        %100 = OpLabel
+        %102 = OpAccessChain %41 %62 %28
+        %103 = OpLoad %18 %102
+        %104 = OpAccessChain %41 %62 %35
+        %105 = OpLoad %18 %104
+        %106 = OpISub %18 %105 %82
+        %107 = OpIMul %18 %106 %86
+        %108 = OpIAdd %18 %103 %107
+        %109 = OpAccessChain %57 %55 %108
+        %110 = OpLoad %18 %109
+        %111 = OpIEqual %50 %110 %19
+               OpBranch %101
+        %101 = OpLabel
+        %112 = OpPhi %50 %99 %94 %111 %100
+               OpSelectionMerge %114 None
+               OpBranchConditional %112 %113 %114
+        %113 = OpLabel
+        %115 = OpLoad %18 %74
+        %116 = OpIAdd %18 %115 %60
+               OpStore %74 %116
+               OpBranch %114
+        %114 = OpLabel
+        %117 = OpAccessChain %41 %62 %28
+        %118 = OpLoad %18 %117
+        %120 = OpSLessThan %50 %118 %119
+               OpSelectionMerge %122 None
+               OpBranchConditional %120 %121 %122
+        %121 = OpLabel
+        %123 = OpAccessChain %41 %62 %28
+        %124 = OpLoad %18 %123
+        %125 = OpIAdd %18 %124 %82
+        %126 = OpAccessChain %41 %62 %35
+        %127 = OpLoad %18 %126
+        %128 = OpIMul %18 %127 %86
+        %129 = OpIAdd %18 %125 %128
+        %130 = OpAccessChain %57 %55 %129
+        %131 = OpLoad %18 %130
+        %132 = OpIEqual %50 %131 %19
+               OpBranch %122
+        %122 = OpLabel
+        %133 = OpPhi %50 %120 %114 %132 %121
+               OpSelectionMerge %135 None
+               OpBranchConditional %133 %134 %135
+        %134 = OpLabel
+        %136 = OpLoad %18 %74
+        %137 = OpIAdd %18 %136 %60
+               OpStore %74 %137
+               OpBranch %135
+        %135 = OpLabel
+        %138 = OpAccessChain %41 %62 %35
+        %139 = OpLoad %18 %138
+        %140 = OpSLessThan %50 %139 %119
+               OpSelectionMerge %142 None
+               OpBranchConditional %140 %141 %142
+        %141 = OpLabel
+        %143 = OpAccessChain %41 %62 %28
+        %144 = OpLoad %18 %143
+        %145 = OpAccessChain %41 %62 %35
+        %146 = OpLoad %18 %145
+        %147 = OpIAdd %18 %146 %82
+        %148 = OpIMul %18 %147 %86
+        %149 = OpIAdd %18 %144 %148
+        %150 = OpAccessChain %57 %55 %149
+        %151 = OpLoad %18 %150
+        %152 = OpIEqual %50 %151 %19
+               OpBranch %142
+        %142 = OpLabel
+        %153 = OpPhi %50 %140 %135 %152 %141
+               OpSelectionMerge %155 None
+               OpBranchConditional %153 %154 %155
+        %154 = OpLabel
+        %156 = OpLoad %18 %74
+        %157 = OpIAdd %18 %156 %60
+               OpStore %74 %157
+               OpBranch %155
+        %155 = OpLabel
+        %158 = OpLoad %18 %74
+        %159 = OpIEqual %50 %158 %19
+               OpSelectionMerge %161 None
+               OpBranchConditional %159 %160 %207
+        %160 = OpLabel
+               OpStore %65 %162
+               OpStore %42 %19
+               OpBranch %163
+        %163 = OpLabel
+               OpLoopMerge %165 %166 None
+               OpBranch %167
+        %167 = OpLabel
+        %168 = OpLoad %18 %42
+        %170 = OpSLessThan %50 %168 %169
+               OpBranchConditional %170 %164 %165
+        %164 = OpLabel
+               OpStore %171 %19
+               OpBranch %172
+        %172 = OpLabel
+               OpLoopMerge %174 %175 None
+               OpBranch %176
+        %176 = OpLabel
+        %177 = OpLoad %18 %171
+        %178 = OpSLessThan %50 %177 %169
+               OpBranchConditional %178 %173 %174
+        %173 = OpLabel
+        %179 = OpLoad %18 %171
+        %180 = OpIMul %18 %179 %82
+        %181 = OpLoad %18 %42
+        %182 = OpIMul %18 %181 %82
+        %183 = OpIMul %18 %182 %86
+        %184 = OpIAdd %18 %180 %183
+        %185 = OpAccessChain %57 %55 %184
+        %186 = OpLoad %18 %185
+        %187 = OpIEqual %50 %186 %19
+               OpSelectionMerge %189 None
+               OpBranchConditional %187 %188 %189
+        %188 = OpLabel
+        %190 = OpLoad %18 %171
+        %191 = OpIMul %18 %190 %82
+        %192 = OpAccessChain %41 %62 %28
+               OpStore %192 %191
+        %193 = OpLoad %18 %42
+        %194 = OpIMul %18 %193 %82
+        %195 = OpAccessChain %41 %62 %35
+               OpStore %195 %194
+               OpStore %65 %66
+               OpBranch %189
+        %189 = OpLabel
+               OpBranch %175
+        %175 = OpLabel
+        %196 = OpLoad %18 %171
+        %197 = OpIAdd %18 %196 %60
+               OpStore %171 %197
+               OpBranch %172
+        %174 = OpLabel
+               OpBranch %166
+        %166 = OpLabel
+        %198 = OpLoad %18 %42
+        %199 = OpIAdd %18 %198 %60
+               OpStore %42 %199
+               OpBranch %163
+        %165 = OpLabel
+        %200 = OpAccessChain %41 %62 %28
+        %201 = OpLoad %18 %200
+        %202 = OpAccessChain %41 %62 %35
+        %203 = OpLoad %18 %202
+        %204 = OpIMul %18 %203 %86
+        %205 = OpIAdd %18 %201 %204
+        %206 = OpAccessChain %57 %55 %205
+               OpStore %206 %60
+               OpBranch %161
+        %207 = OpLabel
+        %209 = OpLoad %18 %67
+        %210 = OpLoad %18 %74
+        %211 = OpSMod %18 %209 %210
+               OpStore %208 %211
+        %212 = OpLoad %18 %74
+        %213 = OpLoad %18 %67
+        %214 = OpIAdd %18 %213 %212
+               OpStore %67 %214
+        %215 = OpLoad %18 %208
+        %216 = OpSGreaterThanEqual %50 %215 %19
+               OpSelectionMerge %218 None
+               OpBranchConditional %216 %217 %218
+        %217 = OpLabel
+        %219 = OpAccessChain %41 %62 %28
+        %220 = OpLoad %18 %219
+        %221 = OpSGreaterThan %50 %220 %19
+               OpBranch %218
+        %218 = OpLabel
+        %222 = OpPhi %50 %216 %207 %221 %217
+               OpSelectionMerge %224 None
+               OpBranchConditional %222 %223 %224
+        %223 = OpLabel
+        %225 = OpAccessChain %41 %62 %28
+        %226 = OpLoad %18 %225
+        %227 = OpISub %18 %226 %82
+        %228 = OpAccessChain %41 %62 %35
+        %229 = OpLoad %18 %228
+        %230 = OpIMul %18 %229 %86
+        %231 = OpIAdd %18 %227 %230
+        %232 = OpAccessChain %57 %55 %231
+        %233 = OpLoad %18 %232
+        %234 = OpIEqual %50 %233 %19
+               OpBranch %224
+        %224 = OpLabel
+        %235 = OpPhi %50 %222 %218 %234 %223
+               OpSelectionMerge %237 None
+               OpBranchConditional %235 %236 %237
+        %236 = OpLabel
+        %238 = OpLoad %18 %208
+        %239 = OpISub %18 %238 %60
+               OpStore %208 %239
+        %240 = OpAccessChain %41 %62 %28
+        %241 = OpLoad %18 %240
+        %242 = OpAccessChain %41 %62 %35
+        %243 = OpLoad %18 %242
+        %244 = OpIMul %18 %243 %86
+        %245 = OpIAdd %18 %241 %244
+        %246 = OpAccessChain %57 %55 %245
+               OpStore %246 %60
+        %247 = OpAccessChain %41 %62 %28
+        %248 = OpLoad %18 %247
+        %249 = OpISub %18 %248 %60
+        %250 = OpAccessChain %41 %62 %35
+        %251 = OpLoad %18 %250
+        %252 = OpIMul %18 %251 %86
+        %253 = OpIAdd %18 %249 %252
+        %254 = OpAccessChain %57 %55 %253
+               OpStore %254 %60
+        %255 = OpAccessChain %41 %62 %28
+        %256 = OpLoad %18 %255
+        %257 = OpISub %18 %256 %82
+        %258 = OpAccessChain %41 %62 %35
+        %259 = OpLoad %18 %258
+        %260 = OpIMul %18 %259 %86
+        %261 = OpIAdd %18 %257 %260
+        %262 = OpAccessChain %57 %55 %261
+               OpStore %262 %60
+        %263 = OpAccessChain %41 %62 %28
+        %264 = OpLoad %18 %263
+        %265 = OpISub %18 %264 %82
+        %266 = OpAccessChain %41 %62 %28
+               OpStore %266 %265
+               OpBranch %237
+        %237 = OpLabel
+        %267 = OpLoad %18 %208
+        %268 = OpSGreaterThanEqual %50 %267 %19
+               OpSelectionMerge %270 None
+               OpBranchConditional %268 %269 %270
+        %269 = OpLabel
+        %271 = OpAccessChain %41 %62 %35
+        %272 = OpLoad %18 %271
+        %273 = OpSGreaterThan %50 %272 %19
+               OpBranch %270
+        %270 = OpLabel
+        %274 = OpPhi %50 %268 %237 %273 %269
+               OpSelectionMerge %276 None
+               OpBranchConditional %274 %275 %276
+        %275 = OpLabel
+        %277 = OpAccessChain %41 %62 %28
+        %278 = OpLoad %18 %277
+        %279 = OpAccessChain %41 %62 %35
+        %280 = OpLoad %18 %279
+        %281 = OpISub %18 %280 %82
+        %282 = OpIMul %18 %281 %86
+        %283 = OpIAdd %18 %278 %282
+        %284 = OpAccessChain %57 %55 %283
+        %285 = OpLoad %18 %284
+        %286 = OpIEqual %50 %285 %19
+               OpBranch %276
+        %276 = OpLabel
+        %287 = OpPhi %50 %274 %270 %286 %275
+               OpSelectionMerge %289 None
+               OpBranchConditional %287 %288 %289
+        %288 = OpLabel
+        %290 = OpLoad %18 %208
+        %291 = OpISub %18 %290 %60
+               OpStore %208 %291
+        %292 = OpAccessChain %41 %62 %28
+        %293 = OpLoad %18 %292
+        %294 = OpAccessChain %41 %62 %35
+        %295 = OpLoad %18 %294
+        %296 = OpIMul %18 %295 %86
+        %297 = OpIAdd %18 %293 %296
+        %298 = OpAccessChain %57 %55 %297
+               OpStore %298 %60
+        %299 = OpAccessChain %41 %62 %28
+        %300 = OpLoad %18 %299
+        %301 = OpAccessChain %41 %62 %35
+        %302 = OpLoad %18 %301
+        %303 = OpISub %18 %302 %60
+        %304 = OpIMul %18 %303 %86
+        %305 = OpIAdd %18 %300 %304
+        %306 = OpAccessChain %57 %55 %305
+               OpStore %306 %60
+        %307 = OpAccessChain %41 %62 %28
+        %308 = OpLoad %18 %307
+        %309 = OpAccessChain %41 %62 %35
+        %310 = OpLoad %18 %309
+        %311 = OpISub %18 %310 %82
+        %312 = OpIMul %18 %311 %86
+        %313 = OpIAdd %18 %308 %312
+        %314 = OpAccessChain %57 %55 %313
+               OpStore %314 %60
+        %315 = OpAccessChain %41 %62 %35
+        %316 = OpLoad %18 %315
+        %317 = OpISub %18 %316 %82
+        %318 = OpAccessChain %41 %62 %35
+               OpStore %318 %317
+               OpBranch %289
+        %289 = OpLabel
+        %319 = OpLoad %18 %208
+        %320 = OpSGreaterThanEqual %50 %319 %19
+               OpSelectionMerge %322 None
+               OpBranchConditional %320 %321 %322
+        %321 = OpLabel
+        %323 = OpAccessChain %41 %62 %28
+        %324 = OpLoad %18 %323
+        %325 = OpSLessThan %50 %324 %119
+               OpBranch %322
+        %322 = OpLabel
+        %326 = OpPhi %50 %320 %289 %325 %321
+               OpSelectionMerge %328 None
+               OpBranchConditional %326 %327 %328
+        %327 = OpLabel
+        %329 = OpAccessChain %41 %62 %28
+        %330 = OpLoad %18 %329
+        %331 = OpIAdd %18 %330 %82
+        %332 = OpAccessChain %41 %62 %35
+        %333 = OpLoad %18 %332
+        %334 = OpIMul %18 %333 %86
+        %335 = OpIAdd %18 %331 %334
+        %336 = OpAccessChain %57 %55 %335
+        %337 = OpLoad %18 %336
+        %338 = OpIEqual %50 %337 %19
+               OpBranch %328
+        %328 = OpLabel
+        %339 = OpPhi %50 %326 %322 %338 %327
+               OpSelectionMerge %341 None
+               OpBranchConditional %339 %340 %341
+        %340 = OpLabel
+        %342 = OpLoad %18 %208
+        %343 = OpISub %18 %342 %60
+               OpStore %208 %343
+        %344 = OpAccessChain %41 %62 %28
+        %345 = OpLoad %18 %344
+        %346 = OpAccessChain %41 %62 %35
+        %347 = OpLoad %18 %346
+        %348 = OpIMul %18 %347 %86
+        %349 = OpIAdd %18 %345 %348
+        %350 = OpAccessChain %57 %55 %349
+               OpStore %350 %60
+        %351 = OpAccessChain %41 %62 %28
+        %352 = OpLoad %18 %351
+        %353 = OpIAdd %18 %352 %60
+        %354 = OpAccessChain %41 %62 %35
+        %355 = OpLoad %18 %354
+        %356 = OpIMul %18 %355 %86
+        %357 = OpIAdd %18 %353 %356
+        %358 = OpAccessChain %57 %55 %357
+               OpStore %358 %60
+        %359 = OpAccessChain %41 %62 %28
+        %360 = OpLoad %18 %359
+        %361 = OpIAdd %18 %360 %82
+        %362 = OpAccessChain %41 %62 %35
+        %363 = OpLoad %18 %362
+        %364 = OpIMul %18 %363 %86
+        %365 = OpIAdd %18 %361 %364
+        %366 = OpAccessChain %57 %55 %365
+               OpStore %366 %60
+        %367 = OpAccessChain %41 %62 %28
+        %368 = OpLoad %18 %367
+        %369 = OpIAdd %18 %368 %82
+        %370 = OpAccessChain %41 %62 %28
+               OpStore %370 %369
+               OpBranch %341
+        %341 = OpLabel
+        %371 = OpLoad %18 %208
+        %372 = OpSGreaterThanEqual %50 %371 %19
+               OpSelectionMerge %374 None
+               OpBranchConditional %372 %373 %374
+        %373 = OpLabel
+        %375 = OpAccessChain %41 %62 %35
+        %376 = OpLoad %18 %375
+        %377 = OpSLessThan %50 %376 %119
+               OpBranch %374
+        %374 = OpLabel
+        %378 = OpPhi %50 %372 %341 %377 %373
+               OpSelectionMerge %380 None
+               OpBranchConditional %378 %379 %380
+        %379 = OpLabel
+        %381 = OpAccessChain %41 %62 %28
+        %382 = OpLoad %18 %381
+        %383 = OpAccessChain %41 %62 %35
+        %384 = OpLoad %18 %383
+        %385 = OpIAdd %18 %384 %82
+        %386 = OpIMul %18 %385 %86
+        %387 = OpIAdd %18 %382 %386
+        %388 = OpAccessChain %57 %55 %387
+        %389 = OpLoad %18 %388
+        %390 = OpIEqual %50 %389 %19
+               OpBranch %380
+        %380 = OpLabel
+        %391 = OpPhi %50 %378 %374 %390 %379
+               OpSelectionMerge %393 None
+               OpBranchConditional %391 %392 %393
+        %392 = OpLabel
+        %394 = OpLoad %18 %208
+        %395 = OpISub %18 %394 %60
+               OpStore %208 %395
+        %396 = OpAccessChain %41 %62 %28
+        %397 = OpLoad %18 %396
+        %398 = OpAccessChain %41 %62 %35
+        %399 = OpLoad %18 %398
+        %400 = OpIMul %18 %399 %86
+        %401 = OpIAdd %18 %397 %400
+        %402 = OpAccessChain %57 %55 %401
+               OpStore %402 %60
+        %403 = OpAccessChain %41 %62 %28
+        %404 = OpLoad %18 %403
+        %405 = OpAccessChain %41 %62 %35
+        %406 = OpLoad %18 %405
+        %407 = OpIAdd %18 %406 %60
+        %408 = OpIMul %18 %407 %86
+        %409 = OpIAdd %18 %404 %408
+        %410 = OpAccessChain %57 %55 %409
+               OpStore %410 %60
+        %411 = OpAccessChain %41 %62 %28
+        %412 = OpLoad %18 %411
+        %413 = OpAccessChain %41 %62 %35
+        %414 = OpLoad %18 %413
+        %415 = OpIAdd %18 %414 %82
+        %416 = OpIMul %18 %415 %86
+        %417 = OpIAdd %18 %412 %416
+        %418 = OpAccessChain %57 %55 %417
+               OpStore %418 %60
+        %419 = OpAccessChain %41 %62 %35
+        %420 = OpLoad %18 %419
+        %421 = OpIAdd %18 %420 %82
+        %422 = OpAccessChain %41 %62 %35
+               OpStore %422 %421
+               OpBranch %393
+        %393 = OpLabel
+               OpBranch %161
+        %161 = OpLabel
+        %423 = OpAccessChain %41 %26 %35
+        %424 = OpLoad %18 %423
+        %425 = OpIMul %18 %424 %86
+        %426 = OpAccessChain %41 %26 %28
+        %427 = OpLoad %18 %426
+        %428 = OpIAdd %18 %425 %427
+        %429 = OpAccessChain %57 %55 %428
+        %430 = OpLoad %18 %429
+        %431 = OpIEqual %50 %430 %60
+               OpSelectionMerge %433 None
+               OpBranchConditional %431 %432 %433
+        %432 = OpLabel
+               OpStore %435 %437
+               OpReturn
+        %433 = OpLabel
+               OpBranch %71
+         %71 = OpLabel
+        %439 = OpLoad %50 %65
+               OpBranchConditional %439 %68 %70
+         %70 = OpLabel
+               OpStore %435 %441
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for reference
+
+# resolution
+BUFFER reference_resolution DATA_TYPE vec2<float> STD140 DATA
+ 32.0 32.0
+END
+
+BUFFER reference_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics reference_pipeline
+  ATTACH reference_vertex_shader
+  ATTACH reference_fragment_shader
+  FRAMEBUFFER_SIZE 32 32
+  BIND BUFFER reference_framebuffer AS color LOCATION 0
+  BIND BUFFER reference_resolution AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR reference_pipeline 0 0 0 255
+
+CLEAR reference_pipeline
+RUN reference_pipeline DRAW_RECT POS 0 0 SIZE 32 32
+
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 7
+; Bound: 1443
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %12 %435
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 320
+               OpName %4 "main"
+               OpName %9 "pos"
+               OpName %12 "gl_FragCoord"
+               OpName %15 "buf0"
+               OpMemberName %15 0 "resolution"
+               OpName %17 ""
+               OpName %26 "ipos"
+               OpName %42 "i"
+               OpName %55 "map"
+               OpName %62 "p"
+               OpName %65 "canwalk"
+               OpName %67 "v"
+               OpName %74 "directions"
+               OpName %171 "j"
+               OpName %208 "d"
+               OpName %435 "_GLF_color"
+               OpDecorate %12 BuiltIn FragCoord
+               OpMemberDecorate %15 0 Offset 0
+               OpDecorate %15 Block
+               OpDecorate %17 DescriptorSet 0
+               OpDecorate %17 Binding 0
+               OpDecorate %435 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeFloat 32
+          %7 = OpTypeVector %6 2
+          %8 = OpTypePointer Function %7
+         %10 = OpTypeVector %6 4
+         %11 = OpTypePointer Input %10
+         %12 = OpVariable %11 Input
+         %15 = OpTypeStruct %7
+         %16 = OpTypePointer Uniform %15
+         %17 = OpVariable %16 Uniform
+         %18 = OpTypeInt 32 1
+         %19 = OpConstant %18 0
+         %20 = OpTypePointer Uniform %7
+         %24 = OpTypeVector %18 2
+         %25 = OpTypePointer Function %24
+         %27 = OpTypeInt 32 0
+         %28 = OpConstant %27 0
+         %29 = OpTypePointer Function %6
+         %32 = OpConstant %6 16
+         %35 = OpConstant %27 1
+         %41 = OpTypePointer Function %18
+         %49 = OpConstant %18 256
+         %50 = OpTypeBool
+         %52 = OpConstant %27 256
+         %53 = OpTypeArray %18 %52
+         %54 = OpTypePointer Private %53
+         %55 = OpVariable %54 Private
+         %57 = OpTypePointer Private %18
+         %60 = OpConstant %18 1
+         %63 = OpConstantComposite %24 %19 %19
+         %64 = OpTypePointer Function %50
+         %66 = OpConstantTrue %50
+         %82 = OpConstant %18 2
+         %86 = OpConstant %18 16
+        %119 = OpConstant %18 14
+        %162 = OpConstantFalse %50
+        %169 = OpConstant %18 8
+        %434 = OpTypePointer Output %10
+        %435 = OpVariable %434 Output
+        %436 = OpConstant %6 1
+        %437 = OpConstantComposite %10 %436 %436 %436 %436
+        %440 = OpConstant %6 0
+        %441 = OpConstantComposite %10 %440 %440 %440 %436
+        %542 = OpConstant %18 0
+        %566 = OpConstantComposite %53 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+          %9 = OpVariable %8 Function
+         %26 = OpVariable %25 Function
+         %42 = OpVariable %41 Function
+         %62 = OpVariable %25 Function
+         %65 = OpVariable %64 Function
+         %67 = OpVariable %41 Function
+         %74 = OpVariable %41 Function
+        %171 = OpVariable %41 Function
+        %208 = OpVariable %41 Function
+         %13 = OpLoad %10 %12
+         %14 = OpVectorShuffle %7 %13 %13 0 1
+         %21 = OpAccessChain %20 %17 %19
+         %22 = OpLoad %7 %21
+         %23 = OpFDiv %7 %14 %22
+               OpStore %9 %23
+         %30 = OpAccessChain %29 %9 %28
+         %31 = OpLoad %6 %30
+         %33 = OpFMul %6 %31 %32
+         %34 = OpConvertFToS %18 %33
+         %36 = OpAccessChain %29 %9 %35
+         %37 = OpLoad %6 %36
+         %38 = OpFMul %6 %37 %32
+         %39 = OpConvertFToS %18 %38
+         %40 = OpCompositeConstruct %24 %34 %39
+               OpStore %26 %40
+               OpStore %42 %19
+               OpBranch %43
+         %43 = OpLabel
+               OpLoopMerge %45 %46 None
+               OpBranch %47
+         %47 = OpLabel
+         %48 = OpLoad %18 %42
+         %51 = OpSLessThan %50 %48 %49
+               OpBranchConditional %51 %44 %45
+         %44 = OpLabel
+         %56 = OpLoad %18 %42
+         %58 = OpAccessChain %57 %55 %56
+               OpStore %58 %19
+               OpBranch %46
+         %46 = OpLabel
+         %59 = OpLoad %18 %42
+         %61 = OpIAdd %18 %59 %60
+               OpStore %42 %61
+               OpBranch %43
+         %45 = OpLabel
+               OpStore %62 %63
+               OpStore %65 %66
+               OpStore %67 %19
+               OpBranch %68
+         %68 = OpLabel
+               OpLoopMerge %70 %71 None
+               OpBranch %69
+         %69 = OpLabel
+         %72 = OpLoad %18 %67
+         %73 = OpIAdd %18 %72 %60
+               OpStore %67 %73
+               OpStore %74 %19
+         %75 = OpAccessChain %41 %62 %28
+         %76 = OpLoad %18 %75
+         %77 = OpSGreaterThan %50 %76 %19
+               OpSelectionMerge %79 None
+               OpBranchConditional %77 %78 %79
+         %78 = OpLabel
+         %80 = OpAccessChain %41 %62 %28
+         %81 = OpLoad %18 %80
+         %83 = OpISub %18 %81 %82
+         %84 = OpAccessChain %41 %62 %35
+         %85 = OpLoad %18 %84
+         %87 = OpIMul %18 %85 %86
+         %88 = OpIAdd %18 %83 %87
+         %89 = OpAccessChain %57 %55 %88
+         %90 = OpLoad %18 %89
+         %91 = OpIEqual %50 %90 %19
+               OpBranch %79
+         %79 = OpLabel
+         %92 = OpPhi %50 %77 %69 %91 %78
+               OpSelectionMerge %94 None
+               OpBranchConditional %92 %93 %94
+         %93 = OpLabel
+         %95 = OpLoad %18 %74
+         %96 = OpIAdd %18 %95 %60
+               OpStore %74 %96
+               OpBranch %94
+         %94 = OpLabel
+         %97 = OpAccessChain %41 %62 %35
+         %98 = OpLoad %18 %97
+         %99 = OpSGreaterThan %50 %98 %19
+               OpSelectionMerge %101 None
+               OpBranchConditional %99 %100 %101
+        %100 = OpLabel
+        %102 = OpAccessChain %41 %62 %28
+        %103 = OpLoad %18 %102
+        %104 = OpAccessChain %41 %62 %35
+        %105 = OpLoad %18 %104
+        %106 = OpISub %18 %105 %82
+        %107 = OpIMul %18 %106 %86
+        %108 = OpIAdd %18 %103 %107
+        %109 = OpAccessChain %57 %55 %108
+        %110 = OpLoad %18 %109
+        %111 = OpIEqual %50 %110 %19
+               OpBranch %101
+        %101 = OpLabel
+        %112 = OpPhi %50 %99 %94 %111 %100
+               OpSelectionMerge %114 None
+               OpBranchConditional %112 %113 %114
+        %113 = OpLabel
+        %115 = OpLoad %18 %74
+        %116 = OpIAdd %18 %115 %60
+               OpStore %74 %116
+               OpBranch %114
+        %114 = OpLabel
+        %117 = OpAccessChain %41 %62 %28
+        %118 = OpLoad %18 %117
+        %120 = OpSLessThan %50 %118 %119
+               OpSelectionMerge %122 None
+               OpBranchConditional %120 %121 %122
+        %121 = OpLabel
+        %123 = OpAccessChain %41 %62 %28
+        %124 = OpLoad %18 %123
+        %125 = OpIAdd %18 %124 %82
+        %126 = OpAccessChain %41 %62 %35
+        %127 = OpLoad %18 %126
+        %128 = OpIMul %18 %127 %86
+        %129 = OpIAdd %18 %125 %128
+        %130 = OpAccessChain %57 %55 %129
+        %131 = OpLoad %18 %130
+        %132 = OpIEqual %50 %131 %19
+               OpBranch %122
+        %122 = OpLabel
+        %133 = OpPhi %50 %120 %114 %132 %121
+               OpSelectionMerge %135 None
+               OpBranchConditional %133 %134 %135
+        %134 = OpLabel
+        %136 = OpLoad %18 %74
+        %137 = OpIAdd %18 %136 %60
+               OpStore %74 %137
+               OpBranch %135
+        %135 = OpLabel
+        %138 = OpAccessChain %41 %62 %35
+        %139 = OpLoad %18 %138
+        %140 = OpSLessThan %50 %139 %119
+               OpSelectionMerge %142 None
+               OpBranchConditional %140 %141 %142
+        %141 = OpLabel
+        %143 = OpAccessChain %41 %62 %28
+        %144 = OpLoad %18 %143
+        %145 = OpAccessChain %41 %62 %35
+        %146 = OpLoad %18 %145
+        %147 = OpIAdd %18 %146 %82
+        %148 = OpIMul %18 %147 %86
+        %149 = OpIAdd %18 %144 %148
+        %150 = OpAccessChain %57 %55 %149
+        %151 = OpLoad %18 %150
+        %152 = OpIEqual %50 %151 %19
+               OpBranch %142
+        %142 = OpLabel
+        %153 = OpPhi %50 %140 %135 %152 %141
+               OpSelectionMerge %155 None
+               OpBranchConditional %153 %154 %155
+        %154 = OpLabel
+        %156 = OpLoad %18 %74
+        %157 = OpIAdd %18 %156 %60
+               OpStore %74 %157
+               OpBranch %155
+        %155 = OpLabel
+        %158 = OpLoad %18 %74
+        %159 = OpIEqual %50 %158 %19
+               OpSelectionMerge %161 None
+               OpBranchConditional %159 %160 %207
+        %160 = OpLabel
+               OpStore %65 %162
+               OpStore %42 %19
+               OpBranch %163
+        %163 = OpLabel
+               OpLoopMerge %165 %166 None
+               OpBranch %167
+        %167 = OpLabel
+        %168 = OpLoad %18 %42
+        %170 = OpSLessThan %50 %168 %169
+               OpBranchConditional %170 %164 %165
+        %164 = OpLabel
+               OpStore %171 %19
+               OpBranch %172
+        %172 = OpLabel
+               OpLoopMerge %174 %175 None
+               OpBranch %176
+        %176 = OpLabel
+        %177 = OpLoad %18 %171
+        %178 = OpSLessThan %50 %177 %169
+               OpBranchConditional %178 %173 %174
+        %173 = OpLabel
+        %179 = OpLoad %18 %171
+        %180 = OpIMul %18 %179 %82
+        %181 = OpLoad %18 %42
+        %182 = OpIMul %18 %181 %82
+        %183 = OpIMul %18 %182 %86
+        %184 = OpIAdd %18 %180 %183
+        %185 = OpAccessChain %57 %55 %184
+        %186 = OpLoad %18 %185
+        %187 = OpIEqual %50 %186 %19
+               OpSelectionMerge %189 None
+               OpBranchConditional %187 %188 %189
+        %188 = OpLabel
+        %190 = OpLoad %18 %171
+        %191 = OpIMul %18 %190 %82
+        %192 = OpAccessChain %41 %62 %28
+               OpStore %192 %191
+        %193 = OpLoad %18 %42
+        %194 = OpIMul %18 %193 %82
+        %195 = OpAccessChain %41 %62 %35
+               OpStore %195 %194
+               OpStore %65 %66
+               OpBranch %189
+        %189 = OpLabel
+               OpBranch %175
+        %175 = OpLabel
+        %196 = OpLoad %18 %171
+        %197 = OpIAdd %18 %196 %60
+               OpStore %171 %197
+               OpBranch %172
+        %174 = OpLabel
+               OpBranch %166
+        %166 = OpLabel
+        %198 = OpLoad %18 %42
+        %199 = OpIAdd %18 %198 %60
+               OpStore %42 %199
+               OpBranch %163
+        %165 = OpLabel
+        %200 = OpAccessChain %41 %62 %28
+        %201 = OpLoad %18 %200
+        %202 = OpAccessChain %41 %62 %35
+        %203 = OpLoad %18 %202
+        %204 = OpIMul %18 %203 %86
+        %205 = OpIAdd %18 %201 %204
+        %206 = OpAccessChain %57 %55 %205
+               OpStore %206 %60
+               OpBranch %161
+        %207 = OpLabel
+        %209 = OpLoad %18 %67
+        %210 = OpLoad %18 %74
+        %211 = OpSMod %18 %209 %210
+               OpStore %208 %211
+        %212 = OpLoad %18 %74
+        %213 = OpLoad %18 %67
+        %214 = OpIAdd %18 %213 %212
+               OpStore %67 %214
+        %215 = OpLoad %18 %208
+        %216 = OpSGreaterThanEqual %50 %215 %19
+               OpSelectionMerge %218 None
+               OpBranchConditional %216 %217 %218
+        %217 = OpLabel
+        %219 = OpAccessChain %41 %62 %28
+        %220 = OpLoad %18 %219
+        %221 = OpSGreaterThan %50 %220 %19
+               OpBranch %218
+        %218 = OpLabel
+        %222 = OpPhi %50 %216 %207 %221 %217
+               OpSelectionMerge %224 None
+               OpBranchConditional %222 %223 %224
+        %223 = OpLabel
+        %225 = OpAccessChain %41 %62 %28
+        %226 = OpLoad %18 %225
+        %227 = OpISub %18 %226 %82
+        %228 = OpAccessChain %41 %62 %35
+        %229 = OpLoad %18 %228
+        %230 = OpIMul %18 %229 %86
+        %231 = OpIAdd %18 %227 %230
+        %232 = OpAccessChain %57 %55 %231
+        %233 = OpLoad %18 %232
+        %234 = OpIEqual %50 %233 %19
+               OpBranch %224
+        %224 = OpLabel
+        %235 = OpPhi %50 %222 %218 %234 %223
+               OpSelectionMerge %237 None
+               OpBranchConditional %235 %236 %237
+        %236 = OpLabel
+        %238 = OpLoad %18 %208
+        %239 = OpISub %18 %238 %60
+               OpStore %208 %239
+        %240 = OpAccessChain %41 %62 %28
+        %241 = OpLoad %18 %240
+        %242 = OpAccessChain %41 %62 %35
+        %243 = OpLoad %18 %242
+        %244 = OpIMul %18 %243 %86
+        %245 = OpIAdd %18 %241 %244
+        %246 = OpAccessChain %57 %55 %245
+               OpStore %246 %60
+        %247 = OpAccessChain %41 %62 %28
+        %248 = OpLoad %18 %247
+        %249 = OpISub %18 %248 %60
+        %250 = OpAccessChain %41 %62 %35
+        %251 = OpLoad %18 %250
+        %252 = OpIMul %18 %251 %86
+        %253 = OpIAdd %18 %249 %252
+        %254 = OpAccessChain %57 %55 %253
+               OpStore %254 %60
+        %255 = OpAccessChain %41 %62 %28
+        %256 = OpLoad %18 %255
+        %257 = OpISub %18 %256 %82
+        %258 = OpAccessChain %41 %62 %35
+        %259 = OpLoad %18 %258
+        %260 = OpIMul %18 %259 %86
+        %261 = OpIAdd %18 %257 %260
+        %262 = OpAccessChain %57 %55 %261
+               OpStore %262 %60
+        %263 = OpAccessChain %41 %62 %28
+        %264 = OpLoad %18 %263
+        %265 = OpISub %18 %264 %82
+        %266 = OpAccessChain %41 %62 %28
+               OpStore %266 %265
+               OpBranch %237
+        %237 = OpLabel
+        %267 = OpLoad %18 %208
+        %268 = OpSGreaterThanEqual %50 %267 %19
+               OpSelectionMerge %270 None
+               OpBranchConditional %268 %269 %270
+        %269 = OpLabel
+        %271 = OpAccessChain %41 %62 %35
+        %272 = OpLoad %18 %271
+        %273 = OpSGreaterThan %50 %272 %19
+               OpBranch %270
+        %270 = OpLabel
+        %274 = OpPhi %50 %268 %237 %273 %269
+               OpBranch %275
+        %275 = OpLabel
+        %277 = OpAccessChain %41 %62 %28
+               OpSelectionMerge %1419 None
+               OpBranchConditional %274 %1420 %1422
+       %1420 = OpLabel
+       %1421 = OpLoad %18 %277
+               OpBranch %1419
+       %1422 = OpLabel
+       %1423 = OpCopyObject %18 %542
+               OpBranch %1419
+       %1419 = OpLabel
+        %278 = OpPhi %18 %1421 %1420 %1423 %1422
+        %279 = OpAccessChain %41 %62 %35
+               OpSelectionMerge %1424 None
+               OpBranchConditional %274 %1425 %1427
+       %1425 = OpLabel
+       %1426 = OpLoad %18 %279
+               OpBranch %1424
+       %1427 = OpLabel
+       %1428 = OpCopyObject %18 %542
+               OpBranch %1424
+       %1424 = OpLabel
+        %280 = OpPhi %18 %1426 %1425 %1428 %1427
+        %281 = OpISub %18 %280 %82
+        %282 = OpIMul %18 %281 %86
+               OpSelectionMerge %1434 None
+               OpBranchConditional %274 %1435 %1437
+       %1435 = OpLabel
+       %1436 = OpLoad %53 %55
+               OpBranch %1434
+       %1437 = OpLabel
+       %1438 = OpCopyObject %53 %566
+               OpBranch %1434
+       %1434 = OpLabel
+        %773 = OpPhi %53 %1436 %1435 %1438 %1437
+               OpSelectionMerge %1439 None
+               OpBranchConditional %274 %1440 %1439
+       %1440 = OpLabel
+               OpStore %55 %566
+               OpBranch %1439
+       %1439 = OpLabel
+               OpSelectionMerge %1441 None
+               OpBranchConditional %274 %1442 %1441
+       %1442 = OpLabel
+               OpStore %55 %773
+               OpBranch %1441
+       %1441 = OpLabel
+        %283 = OpIAdd %18 %278 %282
+        %284 = OpAccessChain %57 %55 %283
+               OpSelectionMerge %1429 None
+               OpBranchConditional %274 %1430 %1432
+       %1430 = OpLabel
+       %1431 = OpLoad %18 %284
+               OpBranch %1429
+       %1432 = OpLabel
+       %1433 = OpCopyObject %18 %542
+               OpBranch %1429
+       %1429 = OpLabel
+        %285 = OpPhi %18 %1431 %1430 %1433 %1432
+        %286 = OpIEqual %50 %285 %19
+               OpBranch %276
+        %276 = OpLabel
+        %287 = OpSelect %50 %274 %286 %274
+               OpSelectionMerge %289 None
+               OpBranchConditional %287 %288 %289
+        %288 = OpLabel
+        %290 = OpLoad %18 %208
+        %291 = OpISub %18 %290 %60
+               OpStore %208 %291
+        %292 = OpAccessChain %41 %62 %28
+        %293 = OpLoad %18 %292
+        %294 = OpAccessChain %41 %62 %35
+        %295 = OpLoad %18 %294
+        %296 = OpIMul %18 %295 %86
+        %297 = OpIAdd %18 %293 %296
+        %298 = OpAccessChain %57 %55 %297
+               OpStore %298 %60
+        %299 = OpAccessChain %41 %62 %28
+        %300 = OpLoad %18 %299
+        %301 = OpAccessChain %41 %62 %35
+        %302 = OpLoad %18 %301
+        %303 = OpISub %18 %302 %60
+        %304 = OpIMul %18 %303 %86
+        %305 = OpIAdd %18 %300 %304
+        %306 = OpAccessChain %57 %55 %305
+               OpStore %306 %60
+        %307 = OpAccessChain %41 %62 %28
+        %308 = OpLoad %18 %307
+        %309 = OpAccessChain %41 %62 %35
+        %310 = OpLoad %18 %309
+        %311 = OpISub %18 %310 %82
+        %800 = OpLoad %53 %55
+               OpStore %55 %566
+               OpStore %55 %800
+        %312 = OpIMul %18 %311 %86
+        %313 = OpIAdd %18 %308 %312
+        %314 = OpAccessChain %57 %55 %313
+               OpStore %314 %60
+        %315 = OpAccessChain %41 %62 %35
+        %316 = OpLoad %18 %315
+        %317 = OpISub %18 %316 %82
+        %318 = OpAccessChain %41 %62 %35
+               OpStore %318 %317
+               OpBranch %289
+        %289 = OpLabel
+        %319 = OpLoad %18 %208
+        %320 = OpSGreaterThanEqual %50 %319 %19
+               OpSelectionMerge %322 None
+               OpBranchConditional %320 %321 %322
+        %321 = OpLabel
+        %323 = OpAccessChain %41 %62 %28
+        %324 = OpLoad %18 %323
+        %325 = OpSLessThan %50 %324 %119
+               OpBranch %322
+        %322 = OpLabel
+        %326 = OpPhi %50 %320 %289 %325 %321
+               OpSelectionMerge %328 None
+               OpBranchConditional %326 %327 %328
+        %327 = OpLabel
+        %329 = OpAccessChain %41 %62 %28
+        %330 = OpLoad %18 %329
+        %331 = OpIAdd %18 %330 %82
+        %332 = OpAccessChain %41 %62 %35
+        %333 = OpLoad %18 %332
+        %334 = OpIMul %18 %333 %86
+        %335 = OpIAdd %18 %331 %334
+        %336 = OpAccessChain %57 %55 %335
+        %337 = OpLoad %18 %336
+        %338 = OpIEqual %50 %337 %19
+               OpBranch %328
+        %328 = OpLabel
+        %339 = OpPhi %50 %326 %322 %338 %327
+               OpSelectionMerge %341 None
+               OpBranchConditional %339 %340 %341
+        %340 = OpLabel
+        %342 = OpLoad %18 %208
+        %343 = OpISub %18 %342 %60
+               OpStore %208 %343
+        %344 = OpAccessChain %41 %62 %28
+        %345 = OpLoad %18 %344
+        %346 = OpAccessChain %41 %62 %35
+        %347 = OpLoad %18 %346
+        %348 = OpIMul %18 %347 %86
+        %349 = OpIAdd %18 %345 %348
+        %350 = OpAccessChain %57 %55 %349
+               OpStore %350 %60
+        %351 = OpAccessChain %41 %62 %28
+        %352 = OpLoad %18 %351
+        %353 = OpIAdd %18 %352 %60
+        %354 = OpAccessChain %41 %62 %35
+        %355 = OpLoad %18 %354
+        %356 = OpIMul %18 %355 %86
+        %357 = OpIAdd %18 %353 %356
+        %358 = OpAccessChain %57 %55 %357
+               OpStore %358 %60
+        %359 = OpAccessChain %41 %62 %28
+        %360 = OpLoad %18 %359
+        %361 = OpIAdd %18 %360 %82
+        %362 = OpAccessChain %41 %62 %35
+        %363 = OpLoad %18 %362
+        %364 = OpIMul %18 %363 %86
+        %365 = OpIAdd %18 %361 %364
+        %366 = OpAccessChain %57 %55 %365
+               OpStore %366 %60
+        %367 = OpAccessChain %41 %62 %28
+        %368 = OpLoad %18 %367
+        %369 = OpIAdd %18 %368 %82
+        %370 = OpAccessChain %41 %62 %28
+               OpStore %370 %369
+               OpBranch %341
+        %341 = OpLabel
+        %371 = OpLoad %18 %208
+        %372 = OpSGreaterThanEqual %50 %371 %19
+               OpSelectionMerge %374 None
+               OpBranchConditional %372 %373 %374
+        %373 = OpLabel
+        %375 = OpAccessChain %41 %62 %35
+        %376 = OpLoad %18 %375
+        %377 = OpSLessThan %50 %376 %119
+               OpBranch %374
+        %374 = OpLabel
+        %378 = OpPhi %50 %372 %341 %377 %373
+               OpSelectionMerge %380 None
+               OpBranchConditional %378 %379 %380
+        %379 = OpLabel
+        %381 = OpAccessChain %41 %62 %28
+        %382 = OpLoad %18 %381
+        %383 = OpAccessChain %41 %62 %35
+        %384 = OpLoad %18 %383
+        %385 = OpIAdd %18 %384 %82
+        %386 = OpIMul %18 %385 %86
+        %387 = OpIAdd %18 %382 %386
+        %388 = OpAccessChain %57 %55 %387
+        %389 = OpLoad %18 %388
+        %390 = OpIEqual %50 %389 %19
+               OpBranch %380
+        %380 = OpLabel
+        %391 = OpPhi %50 %378 %374 %390 %379
+               OpSelectionMerge %393 None
+               OpBranchConditional %391 %392 %393
+        %392 = OpLabel
+        %394 = OpLoad %18 %208
+        %395 = OpISub %18 %394 %60
+               OpStore %208 %395
+        %396 = OpAccessChain %41 %62 %28
+        %397 = OpLoad %18 %396
+        %398 = OpAccessChain %41 %62 %35
+        %399 = OpLoad %18 %398
+        %400 = OpIMul %18 %399 %86
+        %401 = OpIAdd %18 %397 %400
+        %402 = OpAccessChain %57 %55 %401
+               OpStore %402 %60
+        %403 = OpAccessChain %41 %62 %28
+        %404 = OpLoad %18 %403
+        %405 = OpAccessChain %41 %62 %35
+        %406 = OpLoad %18 %405
+        %407 = OpIAdd %18 %406 %60
+        %408 = OpIMul %18 %407 %86
+        %409 = OpIAdd %18 %404 %408
+        %410 = OpAccessChain %57 %55 %409
+               OpStore %410 %60
+        %411 = OpAccessChain %41 %62 %28
+        %412 = OpLoad %18 %411
+        %413 = OpAccessChain %41 %62 %35
+        %414 = OpLoad %18 %413
+        %415 = OpIAdd %18 %414 %82
+        %416 = OpIMul %18 %415 %86
+        %417 = OpIAdd %18 %412 %416
+        %418 = OpAccessChain %57 %55 %417
+               OpStore %418 %60
+        %419 = OpAccessChain %41 %62 %35
+        %420 = OpLoad %18 %419
+        %421 = OpIAdd %18 %420 %82
+        %422 = OpAccessChain %41 %62 %35
+               OpStore %422 %421
+               OpBranch %393
+        %393 = OpLabel
+               OpBranch %161
+        %161 = OpLabel
+        %423 = OpAccessChain %41 %26 %35
+        %424 = OpLoad %18 %423
+        %425 = OpIMul %18 %424 %86
+        %426 = OpAccessChain %41 %26 %28
+        %427 = OpLoad %18 %426
+        %428 = OpIAdd %18 %425 %427
+        %429 = OpAccessChain %57 %55 %428
+        %430 = OpLoad %18 %429
+        %431 = OpIEqual %50 %430 %60
+               OpSelectionMerge %433 None
+               OpBranchConditional %431 %432 %433
+        %432 = OpLabel
+               OpStore %435 %437
+               OpReturn
+        %433 = OpLabel
+               OpBranch %71
+         %71 = OpLabel
+        %439 = OpLoad %50 %65
+               OpBranchConditional %439 %68 %70
+         %70 = OpLabel
+               OpStore %435 %441
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# resolution
+BUFFER variant_resolution DATA_TYPE vec2<float> STD140 DATA
+ 32.0 32.0
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 32 32
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant_resolution AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 32 32
+
+
+SHADER vertex variant_2_vertex_shader PASSTHROUGH
+
+SHADER fragment variant_2_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 7
+; Bound: 801
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %12 %435
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 320
+               OpName %4 "main"
+               OpName %9 "pos"
+               OpName %12 "gl_FragCoord"
+               OpName %15 "buf0"
+               OpMemberName %15 0 "resolution"
+               OpName %17 ""
+               OpName %26 "ipos"
+               OpName %42 "i"
+               OpName %55 "map"
+               OpName %62 "p"
+               OpName %65 "canwalk"
+               OpName %67 "v"
+               OpName %74 "directions"
+               OpName %171 "j"
+               OpName %208 "d"
+               OpName %435 "_GLF_color"
+               OpDecorate %12 BuiltIn FragCoord
+               OpMemberDecorate %15 0 Offset 0
+               OpDecorate %15 Block
+               OpDecorate %17 DescriptorSet 0
+               OpDecorate %17 Binding 0
+               OpDecorate %435 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeFloat 32
+          %7 = OpTypeVector %6 2
+          %8 = OpTypePointer Function %7
+         %10 = OpTypeVector %6 4
+         %11 = OpTypePointer Input %10
+         %12 = OpVariable %11 Input
+         %15 = OpTypeStruct %7
+         %16 = OpTypePointer Uniform %15
+         %17 = OpVariable %16 Uniform
+         %18 = OpTypeInt 32 1
+         %19 = OpConstant %18 0
+         %20 = OpTypePointer Uniform %7
+         %24 = OpTypeVector %18 2
+         %25 = OpTypePointer Function %24
+         %27 = OpTypeInt 32 0
+         %28 = OpConstant %27 0
+         %29 = OpTypePointer Function %6
+         %32 = OpConstant %6 16
+         %35 = OpConstant %27 1
+         %41 = OpTypePointer Function %18
+         %49 = OpConstant %18 256
+         %50 = OpTypeBool
+         %52 = OpConstant %27 256
+         %53 = OpTypeArray %18 %52
+         %54 = OpTypePointer Private %53
+         %55 = OpVariable %54 Private
+         %57 = OpTypePointer Private %18
+         %60 = OpConstant %18 1
+         %63 = OpConstantComposite %24 %19 %19
+         %64 = OpTypePointer Function %50
+         %66 = OpConstantTrue %50
+         %82 = OpConstant %18 2
+         %86 = OpConstant %18 16
+        %119 = OpConstant %18 14
+        %162 = OpConstantFalse %50
+        %169 = OpConstant %18 8
+        %434 = OpTypePointer Output %10
+        %435 = OpVariable %434 Output
+        %436 = OpConstant %6 1
+        %437 = OpConstantComposite %10 %436 %436 %436 %436
+        %440 = OpConstant %6 0
+        %441 = OpConstantComposite %10 %440 %440 %440 %436
+        %542 = OpConstant %18 0
+        %566 = OpConstantComposite %53 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542 %542
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+          %9 = OpVariable %8 Function
+         %26 = OpVariable %25 Function
+         %42 = OpVariable %41 Function
+         %62 = OpVariable %25 Function
+         %65 = OpVariable %64 Function
+         %67 = OpVariable %41 Function
+         %74 = OpVariable %41 Function
+        %171 = OpVariable %41 Function
+        %208 = OpVariable %41 Function
+         %13 = OpLoad %10 %12
+         %14 = OpVectorShuffle %7 %13 %13 0 1
+         %21 = OpAccessChain %20 %17 %19
+         %22 = OpLoad %7 %21
+         %23 = OpFDiv %7 %14 %22
+               OpStore %9 %23
+         %30 = OpAccessChain %29 %9 %28
+         %31 = OpLoad %6 %30
+         %33 = OpFMul %6 %31 %32
+         %34 = OpConvertFToS %18 %33
+         %36 = OpAccessChain %29 %9 %35
+         %37 = OpLoad %6 %36
+         %38 = OpFMul %6 %37 %32
+         %39 = OpConvertFToS %18 %38
+         %40 = OpCompositeConstruct %24 %34 %39
+               OpStore %26 %40
+               OpStore %42 %19
+               OpBranch %43
+         %43 = OpLabel
+               OpLoopMerge %45 %46 None
+               OpBranch %47
+         %47 = OpLabel
+         %48 = OpLoad %18 %42
+         %51 = OpSLessThan %50 %48 %49
+               OpBranchConditional %51 %44 %45
+         %44 = OpLabel
+         %56 = OpLoad %18 %42
+         %58 = OpAccessChain %57 %55 %56
+               OpStore %58 %19
+               OpBranch %46
+         %46 = OpLabel
+         %59 = OpLoad %18 %42
+         %61 = OpIAdd %18 %59 %60
+               OpStore %42 %61
+               OpBranch %43
+         %45 = OpLabel
+               OpStore %62 %63
+               OpStore %65 %66
+               OpStore %67 %19
+               OpBranch %68
+         %68 = OpLabel
+               OpLoopMerge %70 %71 None
+               OpBranch %69
+         %69 = OpLabel
+         %72 = OpLoad %18 %67
+         %73 = OpIAdd %18 %72 %60
+               OpStore %67 %73
+               OpStore %74 %19
+         %75 = OpAccessChain %41 %62 %28
+         %76 = OpLoad %18 %75
+         %77 = OpSGreaterThan %50 %76 %19
+               OpSelectionMerge %79 None
+               OpBranchConditional %77 %78 %79
+         %78 = OpLabel
+         %80 = OpAccessChain %41 %62 %28
+         %81 = OpLoad %18 %80
+         %83 = OpISub %18 %81 %82
+         %84 = OpAccessChain %41 %62 %35
+         %85 = OpLoad %18 %84
+         %87 = OpIMul %18 %85 %86
+         %88 = OpIAdd %18 %83 %87
+         %89 = OpAccessChain %57 %55 %88
+         %90 = OpLoad %18 %89
+         %91 = OpIEqual %50 %90 %19
+               OpBranch %79
+         %79 = OpLabel
+         %92 = OpPhi %50 %77 %69 %91 %78
+               OpSelectionMerge %94 None
+               OpBranchConditional %92 %93 %94
+         %93 = OpLabel
+         %95 = OpLoad %18 %74
+         %96 = OpIAdd %18 %95 %60
+               OpStore %74 %96
+               OpBranch %94
+         %94 = OpLabel
+         %97 = OpAccessChain %41 %62 %35
+         %98 = OpLoad %18 %97
+         %99 = OpSGreaterThan %50 %98 %19
+               OpSelectionMerge %101 None
+               OpBranchConditional %99 %100 %101
+        %100 = OpLabel
+        %102 = OpAccessChain %41 %62 %28
+        %103 = OpLoad %18 %102
+        %104 = OpAccessChain %41 %62 %35
+        %105 = OpLoad %18 %104
+        %106 = OpISub %18 %105 %82
+        %107 = OpIMul %18 %106 %86
+        %108 = OpIAdd %18 %103 %107
+        %109 = OpAccessChain %57 %55 %108
+        %110 = OpLoad %18 %109
+        %111 = OpIEqual %50 %110 %19
+               OpBranch %101
+        %101 = OpLabel
+        %112 = OpPhi %50 %99 %94 %111 %100
+               OpSelectionMerge %114 None
+               OpBranchConditional %112 %113 %114
+        %113 = OpLabel
+        %115 = OpLoad %18 %74
+        %116 = OpIAdd %18 %115 %60
+               OpStore %74 %116
+               OpBranch %114
+        %114 = OpLabel
+        %117 = OpAccessChain %41 %62 %28
+        %118 = OpLoad %18 %117
+        %120 = OpSLessThan %50 %118 %119
+               OpSelectionMerge %122 None
+               OpBranchConditional %120 %121 %122
+        %121 = OpLabel
+        %123 = OpAccessChain %41 %62 %28
+        %124 = OpLoad %18 %123
+        %125 = OpIAdd %18 %124 %82
+        %126 = OpAccessChain %41 %62 %35
+        %127 = OpLoad %18 %126
+        %128 = OpIMul %18 %127 %86
+        %129 = OpIAdd %18 %125 %128
+        %130 = OpAccessChain %57 %55 %129
+        %131 = OpLoad %18 %130
+        %132 = OpIEqual %50 %131 %19
+               OpBranch %122
+        %122 = OpLabel
+        %133 = OpPhi %50 %120 %114 %132 %121
+               OpSelectionMerge %135 None
+               OpBranchConditional %133 %134 %135
+        %134 = OpLabel
+        %136 = OpLoad %18 %74
+        %137 = OpIAdd %18 %136 %60
+               OpStore %74 %137
+               OpBranch %135
+        %135 = OpLabel
+        %138 = OpAccessChain %41 %62 %35
+        %139 = OpLoad %18 %138
+        %140 = OpSLessThan %50 %139 %119
+               OpSelectionMerge %142 None
+               OpBranchConditional %140 %141 %142
+        %141 = OpLabel
+        %143 = OpAccessChain %41 %62 %28
+        %144 = OpLoad %18 %143
+        %145 = OpAccessChain %41 %62 %35
+        %146 = OpLoad %18 %145
+        %147 = OpIAdd %18 %146 %82
+        %148 = OpIMul %18 %147 %86
+        %149 = OpIAdd %18 %144 %148
+        %150 = OpAccessChain %57 %55 %149
+        %151 = OpLoad %18 %150
+        %152 = OpIEqual %50 %151 %19
+               OpBranch %142
+        %142 = OpLabel
+        %153 = OpPhi %50 %140 %135 %152 %141
+               OpSelectionMerge %155 None
+               OpBranchConditional %153 %154 %155
+        %154 = OpLabel
+        %156 = OpLoad %18 %74
+        %157 = OpIAdd %18 %156 %60
+               OpStore %74 %157
+               OpBranch %155
+        %155 = OpLabel
+        %158 = OpLoad %18 %74
+        %159 = OpIEqual %50 %158 %19
+               OpSelectionMerge %161 None
+               OpBranchConditional %159 %160 %207
+        %160 = OpLabel
+               OpStore %65 %162
+               OpStore %42 %19
+               OpBranch %163
+        %163 = OpLabel
+               OpLoopMerge %165 %166 None
+               OpBranch %167
+        %167 = OpLabel
+        %168 = OpLoad %18 %42
+        %170 = OpSLessThan %50 %168 %169
+               OpBranchConditional %170 %164 %165
+        %164 = OpLabel
+               OpStore %171 %19
+               OpBranch %172
+        %172 = OpLabel
+               OpLoopMerge %174 %175 None
+               OpBranch %176
+        %176 = OpLabel
+        %177 = OpLoad %18 %171
+        %178 = OpSLessThan %50 %177 %169
+               OpBranchConditional %178 %173 %174
+        %173 = OpLabel
+        %179 = OpLoad %18 %171
+        %180 = OpIMul %18 %179 %82
+        %181 = OpLoad %18 %42
+        %182 = OpIMul %18 %181 %82
+        %183 = OpIMul %18 %182 %86
+        %184 = OpIAdd %18 %180 %183
+        %185 = OpAccessChain %57 %55 %184
+        %186 = OpLoad %18 %185
+        %187 = OpIEqual %50 %186 %19
+               OpSelectionMerge %189 None
+               OpBranchConditional %187 %188 %189
+        %188 = OpLabel
+        %190 = OpLoad %18 %171
+        %191 = OpIMul %18 %190 %82
+        %192 = OpAccessChain %41 %62 %28
+               OpStore %192 %191
+        %193 = OpLoad %18 %42
+        %194 = OpIMul %18 %193 %82
+        %195 = OpAccessChain %41 %62 %35
+               OpStore %195 %194
+               OpStore %65 %66
+               OpBranch %189
+        %189 = OpLabel
+               OpBranch %175
+        %175 = OpLabel
+        %196 = OpLoad %18 %171
+        %197 = OpIAdd %18 %196 %60
+               OpStore %171 %197
+               OpBranch %172
+        %174 = OpLabel
+               OpBranch %166
+        %166 = OpLabel
+        %198 = OpLoad %18 %42
+        %199 = OpIAdd %18 %198 %60
+               OpStore %42 %199
+               OpBranch %163
+        %165 = OpLabel
+        %200 = OpAccessChain %41 %62 %28
+        %201 = OpLoad %18 %200
+        %202 = OpAccessChain %41 %62 %35
+        %203 = OpLoad %18 %202
+        %204 = OpIMul %18 %203 %86
+        %205 = OpIAdd %18 %201 %204
+        %206 = OpAccessChain %57 %55 %205
+               OpStore %206 %60
+               OpBranch %161
+        %207 = OpLabel
+        %209 = OpLoad %18 %67
+        %210 = OpLoad %18 %74
+        %211 = OpSMod %18 %209 %210
+               OpStore %208 %211
+        %212 = OpLoad %18 %74
+        %213 = OpLoad %18 %67
+        %214 = OpIAdd %18 %213 %212
+               OpStore %67 %214
+        %215 = OpLoad %18 %208
+        %216 = OpSGreaterThanEqual %50 %215 %19
+               OpSelectionMerge %218 None
+               OpBranchConditional %216 %217 %218
+        %217 = OpLabel
+        %219 = OpAccessChain %41 %62 %28
+        %220 = OpLoad %18 %219
+        %221 = OpSGreaterThan %50 %220 %19
+               OpBranch %218
+        %218 = OpLabel
+        %222 = OpPhi %50 %216 %207 %221 %217
+               OpSelectionMerge %224 None
+               OpBranchConditional %222 %223 %224
+        %223 = OpLabel
+        %225 = OpAccessChain %41 %62 %28
+        %226 = OpLoad %18 %225
+        %227 = OpISub %18 %226 %82
+        %228 = OpAccessChain %41 %62 %35
+        %229 = OpLoad %18 %228
+        %230 = OpIMul %18 %229 %86
+        %231 = OpIAdd %18 %227 %230
+        %232 = OpAccessChain %57 %55 %231
+        %233 = OpLoad %18 %232
+        %234 = OpIEqual %50 %233 %19
+               OpBranch %224
+        %224 = OpLabel
+        %235 = OpPhi %50 %222 %218 %234 %223
+               OpSelectionMerge %237 None
+               OpBranchConditional %235 %236 %237
+        %236 = OpLabel
+        %238 = OpLoad %18 %208
+        %239 = OpISub %18 %238 %60
+               OpStore %208 %239
+        %240 = OpAccessChain %41 %62 %28
+        %241 = OpLoad %18 %240
+        %242 = OpAccessChain %41 %62 %35
+        %243 = OpLoad %18 %242
+        %244 = OpIMul %18 %243 %86
+        %245 = OpIAdd %18 %241 %244
+        %246 = OpAccessChain %57 %55 %245
+               OpStore %246 %60
+        %247 = OpAccessChain %41 %62 %28
+        %248 = OpLoad %18 %247
+        %249 = OpISub %18 %248 %60
+        %250 = OpAccessChain %41 %62 %35
+        %251 = OpLoad %18 %250
+        %252 = OpIMul %18 %251 %86
+        %253 = OpIAdd %18 %249 %252
+        %254 = OpAccessChain %57 %55 %253
+               OpStore %254 %60
+        %255 = OpAccessChain %41 %62 %28
+        %256 = OpLoad %18 %255
+        %257 = OpISub %18 %256 %82
+        %258 = OpAccessChain %41 %62 %35
+        %259 = OpLoad %18 %258
+        %260 = OpIMul %18 %259 %86
+        %261 = OpIAdd %18 %257 %260
+        %262 = OpAccessChain %57 %55 %261
+               OpStore %262 %60
+        %263 = OpAccessChain %41 %62 %28
+        %264 = OpLoad %18 %263
+        %265 = OpISub %18 %264 %82
+        %266 = OpAccessChain %41 %62 %28
+               OpStore %266 %265
+               OpBranch %237
+        %237 = OpLabel
+        %267 = OpLoad %18 %208
+        %268 = OpSGreaterThanEqual %50 %267 %19
+               OpSelectionMerge %270 None
+               OpBranchConditional %268 %269 %270
+        %269 = OpLabel
+        %271 = OpAccessChain %41 %62 %35
+        %272 = OpLoad %18 %271
+        %273 = OpSGreaterThan %50 %272 %19
+               OpBranch %270
+        %270 = OpLabel
+        %274 = OpPhi %50 %268 %237 %273 %269
+               OpSelectionMerge %276 None
+               OpBranchConditional %274 %275 %276
+        %275 = OpLabel
+        %277 = OpAccessChain %41 %62 %28
+        %278 = OpLoad %18 %277
+        %279 = OpAccessChain %41 %62 %35
+        %280 = OpLoad %18 %279
+        %281 = OpISub %18 %280 %82
+        %282 = OpIMul %18 %281 %86
+        %773 = OpLoad %53 %55
+               OpStore %55 %566
+               OpStore %55 %773
+        %283 = OpIAdd %18 %278 %282
+        %284 = OpAccessChain %57 %55 %283
+        %285 = OpLoad %18 %284
+        %286 = OpIEqual %50 %285 %19
+               OpBranch %276
+        %276 = OpLabel
+        %287 = OpPhi %50 %274 %270 %286 %275
+               OpSelectionMerge %289 None
+               OpBranchConditional %287 %288 %289
+        %288 = OpLabel
+        %290 = OpLoad %18 %208
+        %291 = OpISub %18 %290 %60
+               OpStore %208 %291
+        %292 = OpAccessChain %41 %62 %28
+        %293 = OpLoad %18 %292
+        %294 = OpAccessChain %41 %62 %35
+        %295 = OpLoad %18 %294
+        %296 = OpIMul %18 %295 %86
+        %297 = OpIAdd %18 %293 %296
+        %298 = OpAccessChain %57 %55 %297
+               OpStore %298 %60
+        %299 = OpAccessChain %41 %62 %28
+        %300 = OpLoad %18 %299
+        %301 = OpAccessChain %41 %62 %35
+        %302 = OpLoad %18 %301
+        %303 = OpISub %18 %302 %60
+        %304 = OpIMul %18 %303 %86
+        %305 = OpIAdd %18 %300 %304
+        %306 = OpAccessChain %57 %55 %305
+               OpStore %306 %60
+        %307 = OpAccessChain %41 %62 %28
+        %308 = OpLoad %18 %307
+        %309 = OpAccessChain %41 %62 %35
+        %310 = OpLoad %18 %309
+        %311 = OpISub %18 %310 %82
+        %800 = OpLoad %53 %55
+               OpStore %55 %566
+               OpStore %55 %800
+        %312 = OpIMul %18 %311 %86
+        %313 = OpIAdd %18 %308 %312
+        %314 = OpAccessChain %57 %55 %313
+               OpStore %314 %60
+        %315 = OpAccessChain %41 %62 %35
+        %316 = OpLoad %18 %315
+        %317 = OpISub %18 %316 %82
+        %318 = OpAccessChain %41 %62 %35
+               OpStore %318 %317
+               OpBranch %289
+        %289 = OpLabel
+        %319 = OpLoad %18 %208
+        %320 = OpSGreaterThanEqual %50 %319 %19
+               OpSelectionMerge %322 None
+               OpBranchConditional %320 %321 %322
+        %321 = OpLabel
+        %323 = OpAccessChain %41 %62 %28
+        %324 = OpLoad %18 %323
+        %325 = OpSLessThan %50 %324 %119
+               OpBranch %322
+        %322 = OpLabel
+        %326 = OpPhi %50 %320 %289 %325 %321
+               OpSelectionMerge %328 None
+               OpBranchConditional %326 %327 %328
+        %327 = OpLabel
+        %329 = OpAccessChain %41 %62 %28
+        %330 = OpLoad %18 %329
+        %331 = OpIAdd %18 %330 %82
+        %332 = OpAccessChain %41 %62 %35
+        %333 = OpLoad %18 %332
+        %334 = OpIMul %18 %333 %86
+        %335 = OpIAdd %18 %331 %334
+        %336 = OpAccessChain %57 %55 %335
+        %337 = OpLoad %18 %336
+        %338 = OpIEqual %50 %337 %19
+               OpBranch %328
+        %328 = OpLabel
+        %339 = OpPhi %50 %326 %322 %338 %327
+               OpSelectionMerge %341 None
+               OpBranchConditional %339 %340 %341
+        %340 = OpLabel
+        %342 = OpLoad %18 %208
+        %343 = OpISub %18 %342 %60
+               OpStore %208 %343
+        %344 = OpAccessChain %41 %62 %28
+        %345 = OpLoad %18 %344
+        %346 = OpAccessChain %41 %62 %35
+        %347 = OpLoad %18 %346
+        %348 = OpIMul %18 %347 %86
+        %349 = OpIAdd %18 %345 %348
+        %350 = OpAccessChain %57 %55 %349
+               OpStore %350 %60
+        %351 = OpAccessChain %41 %62 %28
+        %352 = OpLoad %18 %351
+        %353 = OpIAdd %18 %352 %60
+        %354 = OpAccessChain %41 %62 %35
+        %355 = OpLoad %18 %354
+        %356 = OpIMul %18 %355 %86
+        %357 = OpIAdd %18 %353 %356
+        %358 = OpAccessChain %57 %55 %357
+               OpStore %358 %60
+        %359 = OpAccessChain %41 %62 %28
+        %360 = OpLoad %18 %359
+        %361 = OpIAdd %18 %360 %82
+        %362 = OpAccessChain %41 %62 %35
+        %363 = OpLoad %18 %362
+        %364 = OpIMul %18 %363 %86
+        %365 = OpIAdd %18 %361 %364
+        %366 = OpAccessChain %57 %55 %365
+               OpStore %366 %60
+        %367 = OpAccessChain %41 %62 %28
+        %368 = OpLoad %18 %367
+        %369 = OpIAdd %18 %368 %82
+        %370 = OpAccessChain %41 %62 %28
+               OpStore %370 %369
+               OpBranch %341
+        %341 = OpLabel
+        %371 = OpLoad %18 %208
+        %372 = OpSGreaterThanEqual %50 %371 %19
+               OpSelectionMerge %374 None
+               OpBranchConditional %372 %373 %374
+        %373 = OpLabel
+        %375 = OpAccessChain %41 %62 %35
+        %376 = OpLoad %18 %375
+        %377 = OpSLessThan %50 %376 %119
+               OpBranch %374
+        %374 = OpLabel
+        %378 = OpPhi %50 %372 %341 %377 %373
+               OpSelectionMerge %380 None
+               OpBranchConditional %378 %379 %380
+        %379 = OpLabel
+        %381 = OpAccessChain %41 %62 %28
+        %382 = OpLoad %18 %381
+        %383 = OpAccessChain %41 %62 %35
+        %384 = OpLoad %18 %383
+        %385 = OpIAdd %18 %384 %82
+        %386 = OpIMul %18 %385 %86
+        %387 = OpIAdd %18 %382 %386
+        %388 = OpAccessChain %57 %55 %387
+        %389 = OpLoad %18 %388
+        %390 = OpIEqual %50 %389 %19
+               OpBranch %380
+        %380 = OpLabel
+        %391 = OpPhi %50 %378 %374 %390 %379
+               OpSelectionMerge %393 None
+               OpBranchConditional %391 %392 %393
+        %392 = OpLabel
+        %394 = OpLoad %18 %208
+        %395 = OpISub %18 %394 %60
+               OpStore %208 %395
+        %396 = OpAccessChain %41 %62 %28
+        %397 = OpLoad %18 %396
+        %398 = OpAccessChain %41 %62 %35
+        %399 = OpLoad %18 %398
+        %400 = OpIMul %18 %399 %86
+        %401 = OpIAdd %18 %397 %400
+        %402 = OpAccessChain %57 %55 %401
+               OpStore %402 %60
+        %403 = OpAccessChain %41 %62 %28
+        %404 = OpLoad %18 %403
+        %405 = OpAccessChain %41 %62 %35
+        %406 = OpLoad %18 %405
+        %407 = OpIAdd %18 %406 %60
+        %408 = OpIMul %18 %407 %86
+        %409 = OpIAdd %18 %404 %408
+        %410 = OpAccessChain %57 %55 %409
+               OpStore %410 %60
+        %411 = OpAccessChain %41 %62 %28
+        %412 = OpLoad %18 %411
+        %413 = OpAccessChain %41 %62 %35
+        %414 = OpLoad %18 %413
+        %415 = OpIAdd %18 %414 %82
+        %416 = OpIMul %18 %415 %86
+        %417 = OpIAdd %18 %412 %416
+        %418 = OpAccessChain %57 %55 %417
+               OpStore %418 %60
+        %419 = OpAccessChain %41 %62 %35
+        %420 = OpLoad %18 %419
+        %421 = OpIAdd %18 %420 %82
+        %422 = OpAccessChain %41 %62 %35
+               OpStore %422 %421
+               OpBranch %393
+        %393 = OpLabel
+               OpBranch %161
+        %161 = OpLabel
+        %423 = OpAccessChain %41 %26 %35
+        %424 = OpLoad %18 %423
+        %425 = OpIMul %18 %424 %86
+        %426 = OpAccessChain %41 %26 %28
+        %427 = OpLoad %18 %426
+        %428 = OpIAdd %18 %425 %427
+        %429 = OpAccessChain %57 %55 %428
+        %430 = OpLoad %18 %429
+        %431 = OpIEqual %50 %430 %60
+               OpSelectionMerge %433 None
+               OpBranchConditional %431 %432 %433
+        %432 = OpLabel
+               OpStore %435 %437
+               OpReturn
+        %433 = OpLabel
+               OpBranch %71
+         %71 = OpLabel
+        %439 = OpLoad %50 %65
+               OpBranchConditional %439 %68 %70
+         %70 = OpLabel
+               OpStore %435 %441
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for variant_2
+
+# resolution
+BUFFER variant_2_resolution DATA_TYPE vec2<float> STD140 DATA
+ 32.0 32.0
+END
+
+BUFFER variant_2_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_2_pipeline
+  ATTACH variant_2_vertex_shader
+  ATTACH variant_2_fragment_shader
+  FRAMEBUFFER_SIZE 32 32
+  BIND BUFFER variant_2_framebuffer AS color LOCATION 0
+  BIND BUFFER variant_2_resolution AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_2_pipeline 0 0 0 255
+
+CLEAR variant_2_pipeline
+RUN variant_2_pipeline DRAW_RECT POS 0 0 SIZE 32 32
+
+EXPECT reference_framebuffer EQ_HISTOGRAM_EMD_BUFFER variant_framebuffer TOLERANCE 0.005
+EXPECT reference_framebuffer EQ_HISTOGRAM_EMD_BUFFER variant_2_framebuffer TOLERANCE 0.005
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/spv-stable-mergesort-O-prop-up-mutate-var.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/spv-stable-mergesort-O-prop-up-mutate-var.amber
new file mode 100644
index 0000000..9e989cf
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/spv-stable-mergesort-O-prop-up-mutate-var.amber
@@ -0,0 +1,1262 @@
+#!amber
+
+# Copyright 2020 Google LLC
+#
+# 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.
+
+
+# A test for a bug found by the GraphicsFuzz project.
+
+# Short description: Three shaders with diff: mutate var
+
+# The test renders three images using semantically equivalent shaders, and then
+# checks that the images are similar.
+# The test passes because the shaders have the same semantics and so the images
+# should be the same.
+
+SHADER vertex reference_vertex_shader PASSTHROUGH
+
+SHADER fragment reference_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 7
+; Bound: 540
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %243 %369
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 320
+               OpName %4 "main"
+               OpName %41 "data"
+               OpName %52 "temp"
+               OpName %159 "buf0"
+               OpMemberName %159 0 "injectionSwitch"
+               OpName %161 ""
+               OpName %243 "gl_FragCoord"
+               OpName %369 "_GLF_color"
+               OpMemberDecorate %159 0 Offset 0
+               OpDecorate %159 Block
+               OpDecorate %161 DescriptorSet 0
+               OpDecorate %161 Binding 0
+               OpDecorate %243 BuiltIn FragCoord
+               OpDecorate %369 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeInt 32 1
+          %7 = OpTypePointer Function %6
+         %22 = OpConstant %6 1
+         %31 = OpTypeBool
+         %37 = OpTypeInt 32 0
+         %38 = OpConstant %37 10
+         %39 = OpTypeArray %6 %38
+         %74 = OpConstant %6 10
+        %105 = OpConstant %6 0
+        %107 = OpConstant %6 9
+        %136 = OpConstant %6 2
+        %157 = OpTypeFloat 32
+        %158 = OpTypeVector %157 2
+        %159 = OpTypeStruct %158
+        %160 = OpTypePointer Uniform %159
+        %161 = OpVariable %160 Uniform
+        %162 = OpConstant %37 0
+        %163 = OpTypePointer Uniform %157
+        %184 = OpConstant %6 4
+        %188 = OpConstant %6 3
+        %201 = OpConstant %6 -1
+        %205 = OpConstant %6 -2
+        %209 = OpConstant %6 -3
+        %213 = OpConstant %6 -4
+        %217 = OpConstant %6 -5
+        %241 = OpTypeVector %157 4
+        %242 = OpTypePointer Input %241
+        %243 = OpVariable %242 Input
+        %244 = OpConstant %37 1
+        %245 = OpTypePointer Input %157
+        %249 = OpConstant %6 30
+        %255 = OpConstant %157 0.5
+        %266 = OpConstant %6 60
+        %279 = OpConstant %6 90
+        %292 = OpConstant %6 120
+        %305 = OpConstant %6 150
+        %314 = OpConstant %6 180
+        %318 = OpConstant %6 5
+        %328 = OpConstant %6 210
+        %332 = OpConstant %6 6
+        %342 = OpConstant %6 240
+        %346 = OpConstant %6 7
+        %356 = OpConstant %6 270
+        %360 = OpConstant %6 8
+        %368 = OpTypePointer Output %241
+        %369 = OpVariable %368 Output
+        %373 = OpConstant %157 1
+        %507 = OpTypePointer Function %39
+        %539 = OpConstant %157 0.100000001
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+         %52 = OpVariable %507 Function
+         %41 = OpVariable %507 Function
+        %164 = OpAccessChain %163 %161 %105 %162
+        %165 = OpLoad %157 %164
+        %166 = OpConvertFToS %6 %165
+               OpBranch %167
+        %167 = OpLabel
+        %508 = OpPhi %6 %166 %5 %222 %170
+               OpLoopMerge %169 %170 None
+               OpBranch %168
+        %168 = OpLabel
+               OpSelectionMerge %182 None
+               OpSwitch %508 %182 0 %172 1 %173 2 %174 3 %175 4 %176 5 %177 6 %178 7 %179 8 %180 9 %181
+        %172 = OpLabel
+        %185 = OpAccessChain %7 %41 %508
+               OpStore %185 %184
+               OpBranch %182
+        %173 = OpLabel
+        %189 = OpAccessChain %7 %41 %508
+               OpStore %189 %188
+               OpBranch %182
+        %174 = OpLabel
+        %192 = OpAccessChain %7 %41 %508
+               OpStore %192 %136
+               OpBranch %182
+        %175 = OpLabel
+        %195 = OpAccessChain %7 %41 %508
+               OpStore %195 %22
+               OpBranch %182
+        %176 = OpLabel
+        %198 = OpAccessChain %7 %41 %508
+               OpStore %198 %105
+               OpBranch %182
+        %177 = OpLabel
+        %202 = OpAccessChain %7 %41 %508
+               OpStore %202 %201
+               OpBranch %182
+        %178 = OpLabel
+        %206 = OpAccessChain %7 %41 %508
+               OpStore %206 %205
+               OpBranch %182
+        %179 = OpLabel
+        %210 = OpAccessChain %7 %41 %508
+               OpStore %210 %209
+               OpBranch %182
+        %180 = OpLabel
+        %214 = OpAccessChain %7 %41 %508
+               OpStore %214 %213
+               OpBranch %182
+        %181 = OpLabel
+        %218 = OpAccessChain %7 %41 %508
+               OpStore %218 %217
+               OpBranch %182
+        %182 = OpLabel
+        %222 = OpIAdd %6 %508 %22
+               OpBranch %170
+        %170 = OpLabel
+        %224 = OpSLessThan %31 %222 %74
+               OpBranchConditional %224 %167 %169
+        %169 = OpLabel
+               OpBranch %226
+        %226 = OpLabel
+        %510 = OpPhi %6 %105 %169 %239 %227
+        %232 = OpSLessThan %31 %510 %74
+               OpLoopMerge %228 %227 None
+               OpBranchConditional %232 %227 %228
+        %227 = OpLabel
+        %235 = OpAccessChain %7 %41 %510
+        %236 = OpLoad %6 %235
+        %237 = OpAccessChain %7 %52 %510
+               OpStore %237 %236
+        %239 = OpIAdd %6 %510 %22
+               OpBranch %226
+        %228 = OpLabel
+               OpBranch %389
+        %389 = OpLabel
+        %511 = OpPhi %6 %22 %228 %426 %424
+        %393 = OpSLessThanEqual %31 %511 %107
+               OpLoopMerge %427 %424 None
+               OpBranchConditional %393 %394 %427
+        %394 = OpLabel
+               OpBranch %396
+        %396 = OpLabel
+        %519 = OpPhi %6 %105 %394 %410 %418
+        %400 = OpSLessThan %31 %519 %107
+               OpLoopMerge %423 %418 None
+               OpBranchConditional %400 %401 %423
+        %401 = OpLabel
+        %405 = OpIAdd %6 %519 %511
+        %406 = OpISub %6 %405 %22
+        %409 = OpIMul %6 %136 %511
+        %410 = OpIAdd %6 %519 %409
+        %411 = OpISub %6 %410 %22
+        %413 = OpExtInst %6 %1 SMin %411 %107
+               OpBranch %437
+        %437 = OpLabel
+        %532 = OpPhi %6 %519 %401 %456 %471
+        %522 = OpPhi %6 %405 %401 %534 %471
+        %521 = OpPhi %6 %519 %401 %533 %471
+        %441 = OpSLessThanEqual %31 %521 %406
+        %444 = OpSLessThanEqual %31 %522 %413
+        %445 = OpLogicalAnd %31 %441 %444
+               OpLoopMerge %472 %471 None
+               OpBranchConditional %445 %446 %472
+        %446 = OpLabel
+        %448 = OpAccessChain %7 %41 %521
+        %449 = OpLoad %6 %448
+        %451 = OpAccessChain %7 %41 %522
+        %452 = OpLoad %6 %451
+        %453 = OpSLessThan %31 %449 %452
+        %456 = OpIAdd %6 %532 %22
+               OpSelectionMerge %470 None
+               OpBranchConditional %453 %454 %462
+        %454 = OpLabel
+        %458 = OpIAdd %6 %521 %22
+        %460 = OpLoad %6 %448
+        %461 = OpAccessChain %7 %52 %532
+               OpStore %461 %460
+               OpBranch %470
+        %462 = OpLabel
+        %466 = OpIAdd %6 %522 %22
+        %468 = OpLoad %6 %451
+        %469 = OpAccessChain %7 %52 %532
+               OpStore %469 %468
+               OpBranch %470
+        %470 = OpLabel
+        %534 = OpPhi %6 %522 %454 %466 %462
+        %533 = OpPhi %6 %458 %454 %521 %462
+               OpBranch %471
+        %471 = OpLabel
+               OpBranch %437
+        %472 = OpLabel
+               OpBranch %473
+        %473 = OpLabel
+        %531 = OpPhi %6 %532 %472 %483 %481
+        %523 = OpPhi %6 %521 %472 %485 %481
+        %476 = OpSLessThan %31 %523 %74
+        %479 = OpSLessThanEqual %31 %523 %406
+        %480 = OpLogicalAnd %31 %476 %479
+               OpLoopMerge %490 %481 None
+               OpBranchConditional %480 %481 %490
+        %481 = OpLabel
+        %483 = OpIAdd %6 %531 %22
+        %485 = OpIAdd %6 %523 %22
+        %486 = OpAccessChain %7 %41 %523
+        %487 = OpLoad %6 %486
+        %488 = OpAccessChain %7 %52 %531
+               OpStore %488 %487
+               OpBranch %473
+        %490 = OpLabel
+               OpBranch %492
+        %492 = OpLabel
+        %524 = OpPhi %6 %519 %490 %505 %497
+        %496 = OpSLessThanEqual %31 %524 %413
+               OpLoopMerge %506 %497 None
+               OpBranchConditional %496 %497 %506
+        %497 = OpLabel
+        %500 = OpAccessChain %7 %52 %524
+        %501 = OpLoad %6 %500
+        %502 = OpAccessChain %7 %41 %524
+               OpStore %502 %501
+        %505 = OpIAdd %6 %524 %22
+               OpBranch %492
+        %506 = OpLabel
+               OpBranch %418
+        %418 = OpLabel
+               OpBranch %396
+        %423 = OpLabel
+               OpBranch %424
+        %424 = OpLabel
+        %426 = OpIMul %6 %136 %511
+               OpBranch %389
+        %427 = OpLabel
+        %246 = OpAccessChain %245 %243 %244
+        %247 = OpLoad %157 %246
+        %248 = OpConvertFToS %6 %247
+        %250 = OpSLessThan %31 %248 %249
+               OpSelectionMerge %252 None
+               OpBranchConditional %250 %251 %262
+        %251 = OpLabel
+        %256 = OpAccessChain %7 %41 %105
+        %257 = OpLoad %6 %256
+        %258 = OpConvertSToF %157 %257
+        %260 = OpFMul %157 %258 %539
+        %261 = OpFAdd %157 %255 %260
+               OpBranch %252
+        %262 = OpLabel
+        %267 = OpSLessThan %31 %248 %266
+               OpSelectionMerge %269 None
+               OpBranchConditional %267 %268 %275
+        %268 = OpLabel
+        %270 = OpAccessChain %7 %41 %22
+        %271 = OpLoad %6 %270
+        %272 = OpConvertSToF %157 %271
+        %273 = OpFMul %157 %272 %539
+        %274 = OpFAdd %157 %255 %273
+               OpBranch %269
+        %275 = OpLabel
+        %280 = OpSLessThan %31 %248 %279
+               OpSelectionMerge %282 None
+               OpBranchConditional %280 %281 %288
+        %281 = OpLabel
+        %283 = OpAccessChain %7 %41 %136
+        %284 = OpLoad %6 %283
+        %285 = OpConvertSToF %157 %284
+        %286 = OpFMul %157 %285 %539
+        %287 = OpFAdd %157 %255 %286
+               OpBranch %282
+        %288 = OpLabel
+        %293 = OpSLessThan %31 %248 %292
+               OpSelectionMerge %295 None
+               OpBranchConditional %293 %294 %301
+        %294 = OpLabel
+        %296 = OpAccessChain %7 %41 %188
+        %297 = OpLoad %6 %296
+        %298 = OpConvertSToF %157 %297
+        %299 = OpFMul %157 %298 %539
+        %300 = OpFAdd %157 %255 %299
+               OpBranch %295
+        %301 = OpLabel
+        %306 = OpSLessThan %31 %248 %305
+               OpSelectionMerge %308 None
+               OpBranchConditional %306 %307 %310
+        %307 = OpLabel
+               OpKill
+        %310 = OpLabel
+        %315 = OpSLessThan %31 %248 %314
+               OpSelectionMerge %317 None
+               OpBranchConditional %315 %316 %324
+        %316 = OpLabel
+        %319 = OpAccessChain %7 %41 %318
+        %320 = OpLoad %6 %319
+        %321 = OpConvertSToF %157 %320
+        %322 = OpFMul %157 %321 %539
+        %323 = OpFAdd %157 %255 %322
+               OpBranch %317
+        %324 = OpLabel
+        %329 = OpSLessThan %31 %248 %328
+               OpSelectionMerge %331 None
+               OpBranchConditional %329 %330 %338
+        %330 = OpLabel
+        %333 = OpAccessChain %7 %41 %332
+        %334 = OpLoad %6 %333
+        %335 = OpConvertSToF %157 %334
+        %336 = OpFMul %157 %335 %539
+        %337 = OpFAdd %157 %255 %336
+               OpBranch %331
+        %338 = OpLabel
+        %343 = OpSLessThan %31 %248 %342
+               OpSelectionMerge %345 None
+               OpBranchConditional %343 %344 %352
+        %344 = OpLabel
+        %347 = OpAccessChain %7 %41 %346
+        %348 = OpLoad %6 %347
+        %349 = OpConvertSToF %157 %348
+        %350 = OpFMul %157 %349 %539
+        %351 = OpFAdd %157 %255 %350
+               OpBranch %345
+        %352 = OpLabel
+        %357 = OpSLessThan %31 %248 %356
+               OpSelectionMerge %358 None
+               OpBranchConditional %357 %358 %366
+        %358 = OpLabel
+        %361 = OpAccessChain %7 %41 %360
+        %362 = OpLoad %6 %361
+        %363 = OpConvertSToF %157 %362
+        %364 = OpFMul %157 %363 %539
+        %365 = OpFAdd %157 %255 %364
+               OpBranch %345
+        %366 = OpLabel
+               OpKill
+        %345 = OpLabel
+        %518 = OpPhi %157 %351 %344 %365 %358
+               OpBranch %331
+        %331 = OpLabel
+        %517 = OpPhi %157 %337 %330 %518 %345
+               OpBranch %317
+        %317 = OpLabel
+        %516 = OpPhi %157 %323 %316 %517 %331
+               OpBranch %308
+        %308 = OpLabel
+               OpBranch %295
+        %295 = OpLabel
+        %515 = OpPhi %157 %300 %294 %516 %308
+               OpBranch %282
+        %282 = OpLabel
+        %514 = OpPhi %157 %287 %281 %515 %295
+               OpBranch %269
+        %269 = OpLabel
+        %513 = OpPhi %157 %274 %268 %514 %282
+               OpBranch %252
+        %252 = OpLabel
+        %512 = OpPhi %157 %261 %251 %513 %269
+        %377 = OpCompositeConstruct %241 %512 %512 %512 %373
+               OpStore %369 %377
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for reference
+
+# injectionSwitch
+BUFFER reference_injectionSwitch DATA_TYPE vec2<float> STD140 DATA
+ 0.0 1.0
+END
+
+BUFFER reference_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics reference_pipeline
+  ATTACH reference_vertex_shader
+  ATTACH reference_fragment_shader
+  FRAMEBUFFER_SIZE 256 256
+  BIND BUFFER reference_framebuffer AS color LOCATION 0
+  BIND BUFFER reference_injectionSwitch AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR reference_pipeline 0 0 0 255
+
+CLEAR reference_pipeline
+RUN reference_pipeline DRAW_RECT POS 0 0 SIZE 256 256
+
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 7
+; Bound: 677
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %243 %369
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 320
+               OpName %4 "main"
+               OpName %41 "data"
+               OpName %52 "temp"
+               OpName %159 "buf0"
+               OpMemberName %159 0 "injectionSwitch"
+               OpName %161 ""
+               OpName %243 "gl_FragCoord"
+               OpName %369 "_GLF_color"
+               OpMemberDecorate %159 0 Offset 0
+               OpDecorate %159 Block
+               OpDecorate %161 DescriptorSet 0
+               OpDecorate %161 Binding 0
+               OpDecorate %243 BuiltIn FragCoord
+               OpDecorate %369 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeInt 32 1
+          %7 = OpTypePointer Function %6
+         %22 = OpConstant %6 1
+         %31 = OpTypeBool
+         %37 = OpTypeInt 32 0
+         %38 = OpConstant %37 10
+         %39 = OpTypeArray %6 %38
+         %74 = OpConstant %6 10
+        %105 = OpConstant %6 0
+        %107 = OpConstant %6 9
+        %136 = OpConstant %6 2
+        %157 = OpTypeFloat 32
+        %158 = OpTypeVector %157 2
+        %159 = OpTypeStruct %158
+        %160 = OpTypePointer Uniform %159
+        %161 = OpVariable %160 Uniform
+        %162 = OpConstant %37 0
+        %163 = OpTypePointer Uniform %157
+        %184 = OpConstant %6 4
+        %188 = OpConstant %6 3
+        %201 = OpConstant %6 -1
+        %205 = OpConstant %6 -2
+        %209 = OpConstant %6 -3
+        %213 = OpConstant %6 -4
+        %217 = OpConstant %6 -5
+        %241 = OpTypeVector %157 4
+        %242 = OpTypePointer Input %241
+        %243 = OpVariable %242 Input
+        %244 = OpConstant %37 1
+        %245 = OpTypePointer Input %157
+        %249 = OpConstant %6 30
+        %255 = OpConstant %157 0.5
+        %266 = OpConstant %6 60
+        %279 = OpConstant %6 90
+        %292 = OpConstant %6 120
+        %305 = OpConstant %6 150
+        %314 = OpConstant %6 180
+        %318 = OpConstant %6 5
+        %328 = OpConstant %6 210
+        %332 = OpConstant %6 6
+        %342 = OpConstant %6 240
+        %346 = OpConstant %6 7
+        %356 = OpConstant %6 270
+        %360 = OpConstant %6 8
+        %368 = OpTypePointer Output %241
+        %369 = OpVariable %368 Output
+        %373 = OpConstant %157 1
+        %507 = OpTypePointer Function %39
+        %539 = OpConstant %157 0.100000001
+        %670 = OpConstant %6 0
+        %671 = OpConstantComposite %39 %670 %670 %670 %670 %670 %670 %670 %670 %670 %670
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+         %52 = OpVariable %507 Function
+         %41 = OpVariable %507 Function
+        %164 = OpAccessChain %163 %161 %105 %162
+        %165 = OpLoad %157 %164
+        %166 = OpConvertFToS %6 %165
+               OpBranch %167
+        %167 = OpLabel
+        %508 = OpPhi %6 %166 %5 %222 %170
+               OpLoopMerge %169 %170 None
+               OpBranch %168
+        %168 = OpLabel
+        %676 = OpLoad %39 %41
+               OpStore %41 %671
+               OpStore %41 %676
+        %651 = OpIAdd %6 %508 %22
+               OpSelectionMerge %182 None
+               OpSwitch %508 %182 0 %172 1 %173 2 %174 3 %175 4 %176 5 %177 6 %178 7 %179 8 %180 9 %181
+        %172 = OpLabel
+        %185 = OpAccessChain %7 %41 %508
+               OpStore %185 %184
+        %652 = OpIAdd %6 %508 %22
+               OpBranch %182
+        %173 = OpLabel
+        %189 = OpAccessChain %7 %41 %508
+               OpStore %189 %188
+        %653 = OpIAdd %6 %508 %22
+               OpBranch %182
+        %174 = OpLabel
+        %192 = OpAccessChain %7 %41 %508
+               OpStore %192 %136
+        %654 = OpIAdd %6 %508 %22
+               OpBranch %182
+        %175 = OpLabel
+        %195 = OpAccessChain %7 %41 %508
+               OpStore %195 %22
+        %655 = OpIAdd %6 %508 %22
+               OpBranch %182
+        %176 = OpLabel
+        %198 = OpAccessChain %7 %41 %508
+               OpStore %198 %105
+        %656 = OpIAdd %6 %508 %22
+               OpBranch %182
+        %177 = OpLabel
+        %202 = OpAccessChain %7 %41 %508
+               OpStore %202 %201
+        %657 = OpIAdd %6 %508 %22
+               OpBranch %182
+        %178 = OpLabel
+        %206 = OpAccessChain %7 %41 %508
+               OpStore %206 %205
+        %658 = OpIAdd %6 %508 %22
+               OpBranch %182
+        %179 = OpLabel
+        %210 = OpAccessChain %7 %41 %508
+               OpStore %210 %209
+        %659 = OpIAdd %6 %508 %22
+               OpBranch %182
+        %180 = OpLabel
+        %214 = OpAccessChain %7 %41 %508
+               OpStore %214 %213
+        %660 = OpIAdd %6 %508 %22
+               OpBranch %182
+        %181 = OpLabel
+        %218 = OpAccessChain %7 %41 %508
+               OpStore %218 %217
+        %661 = OpIAdd %6 %508 %22
+               OpBranch %182
+        %182 = OpLabel
+        %222 = OpPhi %6 %651 %168 %652 %172 %653 %173 %654 %174 %655 %175 %656 %176 %657 %177 %658 %178 %659 %179 %660 %180 %661 %181
+               OpBranch %170
+        %170 = OpLabel
+        %224 = OpSLessThan %31 %222 %74
+               OpBranchConditional %224 %167 %169
+        %169 = OpLabel
+               OpBranch %226
+        %226 = OpLabel
+        %510 = OpPhi %6 %105 %169 %239 %227
+        %232 = OpSLessThan %31 %510 %74
+               OpLoopMerge %228 %227 None
+               OpBranchConditional %232 %227 %228
+        %227 = OpLabel
+        %235 = OpAccessChain %7 %41 %510
+        %236 = OpLoad %6 %235
+        %237 = OpAccessChain %7 %52 %510
+               OpStore %237 %236
+        %239 = OpIAdd %6 %510 %22
+               OpBranch %226
+        %228 = OpLabel
+               OpBranch %389
+        %389 = OpLabel
+        %511 = OpPhi %6 %22 %228 %426 %424
+        %393 = OpSLessThanEqual %31 %511 %107
+               OpLoopMerge %427 %424 None
+               OpBranchConditional %393 %394 %427
+        %394 = OpLabel
+               OpBranch %396
+        %396 = OpLabel
+        %519 = OpPhi %6 %105 %394 %410 %418
+        %400 = OpSLessThan %31 %519 %107
+               OpLoopMerge %423 %418 None
+               OpBranchConditional %400 %401 %423
+        %401 = OpLabel
+        %405 = OpIAdd %6 %519 %511
+        %406 = OpISub %6 %405 %22
+        %409 = OpIMul %6 %136 %511
+        %410 = OpIAdd %6 %519 %409
+        %411 = OpISub %6 %410 %22
+        %413 = OpExtInst %6 %1 SMin %411 %107
+               OpBranch %437
+        %437 = OpLabel
+        %532 = OpPhi %6 %519 %401 %456 %471
+        %522 = OpPhi %6 %405 %401 %534 %471
+        %521 = OpPhi %6 %519 %401 %533 %471
+        %441 = OpSLessThanEqual %31 %521 %406
+        %444 = OpSLessThanEqual %31 %522 %413
+        %445 = OpLogicalAnd %31 %441 %444
+               OpLoopMerge %472 %471 None
+               OpBranchConditional %445 %446 %472
+        %446 = OpLabel
+        %448 = OpAccessChain %7 %41 %521
+        %449 = OpLoad %6 %448
+        %451 = OpAccessChain %7 %41 %522
+        %452 = OpLoad %6 %451
+        %453 = OpSLessThan %31 %449 %452
+        %456 = OpIAdd %6 %532 %22
+               OpSelectionMerge %470 None
+               OpBranchConditional %453 %454 %462
+        %454 = OpLabel
+        %458 = OpIAdd %6 %521 %22
+        %460 = OpLoad %6 %448
+        %461 = OpAccessChain %7 %52 %532
+               OpStore %461 %460
+               OpBranch %470
+        %462 = OpLabel
+        %466 = OpIAdd %6 %522 %22
+        %468 = OpLoad %6 %451
+        %469 = OpAccessChain %7 %52 %532
+               OpStore %469 %468
+               OpBranch %470
+        %470 = OpLabel
+        %534 = OpPhi %6 %522 %454 %466 %462
+        %533 = OpPhi %6 %458 %454 %521 %462
+               OpBranch %471
+        %471 = OpLabel
+               OpBranch %437
+        %472 = OpLabel
+               OpBranch %473
+        %473 = OpLabel
+        %531 = OpPhi %6 %532 %472 %483 %481
+        %523 = OpPhi %6 %521 %472 %485 %481
+        %476 = OpSLessThan %31 %523 %74
+        %479 = OpSLessThanEqual %31 %523 %406
+        %480 = OpLogicalAnd %31 %476 %479
+               OpLoopMerge %490 %481 None
+               OpBranchConditional %480 %481 %490
+        %481 = OpLabel
+        %483 = OpIAdd %6 %531 %22
+        %485 = OpIAdd %6 %523 %22
+        %486 = OpAccessChain %7 %41 %523
+        %487 = OpLoad %6 %486
+        %488 = OpAccessChain %7 %52 %531
+               OpStore %488 %487
+               OpBranch %473
+        %490 = OpLabel
+               OpBranch %492
+        %492 = OpLabel
+        %524 = OpPhi %6 %519 %490 %505 %497
+        %496 = OpSLessThanEqual %31 %524 %413
+               OpLoopMerge %506 %497 None
+               OpBranchConditional %496 %497 %506
+        %497 = OpLabel
+        %500 = OpAccessChain %7 %52 %524
+        %501 = OpLoad %6 %500
+        %502 = OpAccessChain %7 %41 %524
+               OpStore %502 %501
+        %505 = OpIAdd %6 %524 %22
+               OpBranch %492
+        %506 = OpLabel
+               OpBranch %418
+        %418 = OpLabel
+               OpBranch %396
+        %423 = OpLabel
+               OpBranch %424
+        %424 = OpLabel
+        %426 = OpIMul %6 %136 %511
+               OpBranch %389
+        %427 = OpLabel
+        %246 = OpAccessChain %245 %243 %244
+        %247 = OpLoad %157 %246
+        %248 = OpConvertFToS %6 %247
+        %250 = OpSLessThan %31 %248 %249
+               OpSelectionMerge %252 None
+               OpBranchConditional %250 %251 %262
+        %251 = OpLabel
+        %256 = OpAccessChain %7 %41 %105
+        %257 = OpLoad %6 %256
+        %258 = OpConvertSToF %157 %257
+        %260 = OpFMul %157 %258 %539
+        %261 = OpFAdd %157 %255 %260
+               OpBranch %252
+        %262 = OpLabel
+        %267 = OpSLessThan %31 %248 %266
+               OpSelectionMerge %269 None
+               OpBranchConditional %267 %268 %275
+        %268 = OpLabel
+        %270 = OpAccessChain %7 %41 %22
+        %271 = OpLoad %6 %270
+        %272 = OpConvertSToF %157 %271
+        %273 = OpFMul %157 %272 %539
+        %274 = OpFAdd %157 %255 %273
+               OpBranch %269
+        %275 = OpLabel
+        %280 = OpSLessThan %31 %248 %279
+               OpSelectionMerge %282 None
+               OpBranchConditional %280 %281 %288
+        %281 = OpLabel
+        %283 = OpAccessChain %7 %41 %136
+        %284 = OpLoad %6 %283
+        %285 = OpConvertSToF %157 %284
+        %286 = OpFMul %157 %285 %539
+        %287 = OpFAdd %157 %255 %286
+               OpBranch %282
+        %288 = OpLabel
+        %293 = OpSLessThan %31 %248 %292
+               OpSelectionMerge %295 None
+               OpBranchConditional %293 %294 %301
+        %294 = OpLabel
+        %296 = OpAccessChain %7 %41 %188
+        %297 = OpLoad %6 %296
+        %298 = OpConvertSToF %157 %297
+        %299 = OpFMul %157 %298 %539
+        %300 = OpFAdd %157 %255 %299
+               OpBranch %295
+        %301 = OpLabel
+        %306 = OpSLessThan %31 %248 %305
+               OpSelectionMerge %308 None
+               OpBranchConditional %306 %307 %310
+        %307 = OpLabel
+               OpKill
+        %310 = OpLabel
+        %315 = OpSLessThan %31 %248 %314
+               OpSelectionMerge %317 None
+               OpBranchConditional %315 %316 %324
+        %316 = OpLabel
+        %319 = OpAccessChain %7 %41 %318
+        %320 = OpLoad %6 %319
+        %321 = OpConvertSToF %157 %320
+        %322 = OpFMul %157 %321 %539
+        %323 = OpFAdd %157 %255 %322
+               OpBranch %317
+        %324 = OpLabel
+        %329 = OpSLessThan %31 %248 %328
+               OpSelectionMerge %331 None
+               OpBranchConditional %329 %330 %338
+        %330 = OpLabel
+        %333 = OpAccessChain %7 %41 %332
+        %334 = OpLoad %6 %333
+        %335 = OpConvertSToF %157 %334
+        %336 = OpFMul %157 %335 %539
+        %337 = OpFAdd %157 %255 %336
+               OpBranch %331
+        %338 = OpLabel
+        %343 = OpSLessThan %31 %248 %342
+               OpSelectionMerge %345 None
+               OpBranchConditional %343 %344 %352
+        %344 = OpLabel
+        %347 = OpAccessChain %7 %41 %346
+        %348 = OpLoad %6 %347
+        %349 = OpConvertSToF %157 %348
+        %350 = OpFMul %157 %349 %539
+        %351 = OpFAdd %157 %255 %350
+               OpBranch %345
+        %352 = OpLabel
+        %357 = OpSLessThan %31 %248 %356
+               OpSelectionMerge %358 None
+               OpBranchConditional %357 %358 %366
+        %358 = OpLabel
+        %361 = OpAccessChain %7 %41 %360
+        %362 = OpLoad %6 %361
+        %363 = OpConvertSToF %157 %362
+        %364 = OpFMul %157 %363 %539
+        %365 = OpFAdd %157 %255 %364
+               OpBranch %345
+        %366 = OpLabel
+               OpKill
+        %345 = OpLabel
+        %518 = OpPhi %157 %351 %344 %365 %358
+               OpBranch %331
+        %331 = OpLabel
+        %517 = OpPhi %157 %337 %330 %518 %345
+               OpBranch %317
+        %317 = OpLabel
+        %516 = OpPhi %157 %323 %316 %517 %331
+               OpBranch %308
+        %308 = OpLabel
+               OpBranch %295
+        %295 = OpLabel
+        %515 = OpPhi %157 %300 %294 %516 %308
+               OpBranch %282
+        %282 = OpLabel
+        %514 = OpPhi %157 %287 %281 %515 %295
+               OpBranch %269
+        %269 = OpLabel
+        %513 = OpPhi %157 %274 %268 %514 %282
+               OpBranch %252
+        %252 = OpLabel
+        %512 = OpPhi %157 %261 %251 %513 %269
+        %377 = OpCompositeConstruct %241 %512 %512 %512 %373
+               OpStore %369 %377
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# injectionSwitch
+BUFFER variant_injectionSwitch DATA_TYPE vec2<float> STD140 DATA
+ 0.0 1.0
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 256 256
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant_injectionSwitch AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256
+
+
+SHADER vertex variant_2_vertex_shader PASSTHROUGH
+
+SHADER fragment variant_2_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 7
+; Bound: 672
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %243 %369
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 320
+               OpName %4 "main"
+               OpName %41 "data"
+               OpName %52 "temp"
+               OpName %159 "buf0"
+               OpMemberName %159 0 "injectionSwitch"
+               OpName %161 ""
+               OpName %243 "gl_FragCoord"
+               OpName %369 "_GLF_color"
+               OpMemberDecorate %159 0 Offset 0
+               OpDecorate %159 Block
+               OpDecorate %161 DescriptorSet 0
+               OpDecorate %161 Binding 0
+               OpDecorate %243 BuiltIn FragCoord
+               OpDecorate %369 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeInt 32 1
+          %7 = OpTypePointer Function %6
+         %22 = OpConstant %6 1
+         %31 = OpTypeBool
+         %37 = OpTypeInt 32 0
+         %38 = OpConstant %37 10
+         %39 = OpTypeArray %6 %38
+         %74 = OpConstant %6 10
+        %105 = OpConstant %6 0
+        %107 = OpConstant %6 9
+        %136 = OpConstant %6 2
+        %157 = OpTypeFloat 32
+        %158 = OpTypeVector %157 2
+        %159 = OpTypeStruct %158
+        %160 = OpTypePointer Uniform %159
+        %161 = OpVariable %160 Uniform
+        %162 = OpConstant %37 0
+        %163 = OpTypePointer Uniform %157
+        %184 = OpConstant %6 4
+        %188 = OpConstant %6 3
+        %201 = OpConstant %6 -1
+        %205 = OpConstant %6 -2
+        %209 = OpConstant %6 -3
+        %213 = OpConstant %6 -4
+        %217 = OpConstant %6 -5
+        %241 = OpTypeVector %157 4
+        %242 = OpTypePointer Input %241
+        %243 = OpVariable %242 Input
+        %244 = OpConstant %37 1
+        %245 = OpTypePointer Input %157
+        %249 = OpConstant %6 30
+        %255 = OpConstant %157 0.5
+        %266 = OpConstant %6 60
+        %279 = OpConstant %6 90
+        %292 = OpConstant %6 120
+        %305 = OpConstant %6 150
+        %314 = OpConstant %6 180
+        %318 = OpConstant %6 5
+        %328 = OpConstant %6 210
+        %332 = OpConstant %6 6
+        %342 = OpConstant %6 240
+        %346 = OpConstant %6 7
+        %356 = OpConstant %6 270
+        %360 = OpConstant %6 8
+        %368 = OpTypePointer Output %241
+        %369 = OpVariable %368 Output
+        %373 = OpConstant %157 1
+        %507 = OpTypePointer Function %39
+        %539 = OpConstant %157 0.100000001
+        %670 = OpConstant %6 0
+        %671 = OpConstantComposite %39 %670 %670 %670 %670 %670 %670 %670 %670 %670 %670
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+         %52 = OpVariable %507 Function
+         %41 = OpVariable %507 Function
+        %164 = OpAccessChain %163 %161 %105 %162
+        %165 = OpLoad %157 %164
+        %166 = OpConvertFToS %6 %165
+               OpBranch %167
+        %167 = OpLabel
+        %508 = OpPhi %6 %166 %5 %222 %170
+               OpLoopMerge %169 %170 None
+               OpBranch %168
+        %168 = OpLabel
+        %651 = OpIAdd %6 %508 %22
+               OpSelectionMerge %182 None
+               OpSwitch %508 %182 0 %172 1 %173 2 %174 3 %175 4 %176 5 %177 6 %178 7 %179 8 %180 9 %181
+        %172 = OpLabel
+        %185 = OpAccessChain %7 %41 %508
+               OpStore %185 %184
+        %652 = OpIAdd %6 %508 %22
+               OpBranch %182
+        %173 = OpLabel
+        %189 = OpAccessChain %7 %41 %508
+               OpStore %189 %188
+        %653 = OpIAdd %6 %508 %22
+               OpBranch %182
+        %174 = OpLabel
+        %192 = OpAccessChain %7 %41 %508
+               OpStore %192 %136
+        %654 = OpIAdd %6 %508 %22
+               OpBranch %182
+        %175 = OpLabel
+        %195 = OpAccessChain %7 %41 %508
+               OpStore %195 %22
+        %655 = OpIAdd %6 %508 %22
+               OpBranch %182
+        %176 = OpLabel
+        %198 = OpAccessChain %7 %41 %508
+               OpStore %198 %105
+        %656 = OpIAdd %6 %508 %22
+               OpBranch %182
+        %177 = OpLabel
+        %202 = OpAccessChain %7 %41 %508
+               OpStore %202 %201
+        %657 = OpIAdd %6 %508 %22
+               OpBranch %182
+        %178 = OpLabel
+        %206 = OpAccessChain %7 %41 %508
+               OpStore %206 %205
+        %658 = OpIAdd %6 %508 %22
+               OpBranch %182
+        %179 = OpLabel
+        %210 = OpAccessChain %7 %41 %508
+               OpStore %210 %209
+        %659 = OpIAdd %6 %508 %22
+               OpBranch %182
+        %180 = OpLabel
+        %214 = OpAccessChain %7 %41 %508
+               OpStore %214 %213
+        %660 = OpIAdd %6 %508 %22
+               OpBranch %182
+        %181 = OpLabel
+        %218 = OpAccessChain %7 %41 %508
+               OpStore %218 %217
+        %661 = OpIAdd %6 %508 %22
+               OpBranch %182
+        %182 = OpLabel
+        %222 = OpPhi %6 %651 %168 %652 %172 %653 %173 %654 %174 %655 %175 %656 %176 %657 %177 %658 %178 %659 %179 %660 %180 %661 %181
+               OpBranch %170
+        %170 = OpLabel
+        %224 = OpSLessThan %31 %222 %74
+               OpBranchConditional %224 %167 %169
+        %169 = OpLabel
+               OpBranch %226
+        %226 = OpLabel
+        %510 = OpPhi %6 %105 %169 %239 %227
+        %232 = OpSLessThan %31 %510 %74
+               OpLoopMerge %228 %227 None
+               OpBranchConditional %232 %227 %228
+        %227 = OpLabel
+        %235 = OpAccessChain %7 %41 %510
+        %236 = OpLoad %6 %235
+        %237 = OpAccessChain %7 %52 %510
+               OpStore %237 %236
+        %239 = OpIAdd %6 %510 %22
+               OpBranch %226
+        %228 = OpLabel
+               OpBranch %389
+        %389 = OpLabel
+        %511 = OpPhi %6 %22 %228 %426 %424
+        %393 = OpSLessThanEqual %31 %511 %107
+               OpLoopMerge %427 %424 None
+               OpBranchConditional %393 %394 %427
+        %394 = OpLabel
+               OpBranch %396
+        %396 = OpLabel
+        %519 = OpPhi %6 %105 %394 %410 %418
+        %400 = OpSLessThan %31 %519 %107
+               OpLoopMerge %423 %418 None
+               OpBranchConditional %400 %401 %423
+        %401 = OpLabel
+        %405 = OpIAdd %6 %519 %511
+        %406 = OpISub %6 %405 %22
+        %409 = OpIMul %6 %136 %511
+        %410 = OpIAdd %6 %519 %409
+        %411 = OpISub %6 %410 %22
+        %413 = OpExtInst %6 %1 SMin %411 %107
+               OpBranch %437
+        %437 = OpLabel
+        %532 = OpPhi %6 %519 %401 %456 %471
+        %522 = OpPhi %6 %405 %401 %534 %471
+        %521 = OpPhi %6 %519 %401 %533 %471
+        %441 = OpSLessThanEqual %31 %521 %406
+        %444 = OpSLessThanEqual %31 %522 %413
+        %445 = OpLogicalAnd %31 %441 %444
+               OpLoopMerge %472 %471 None
+               OpBranchConditional %445 %446 %472
+        %446 = OpLabel
+        %448 = OpAccessChain %7 %41 %521
+        %449 = OpLoad %6 %448
+        %451 = OpAccessChain %7 %41 %522
+        %452 = OpLoad %6 %451
+        %453 = OpSLessThan %31 %449 %452
+        %456 = OpIAdd %6 %532 %22
+               OpSelectionMerge %470 None
+               OpBranchConditional %453 %454 %462
+        %454 = OpLabel
+        %458 = OpIAdd %6 %521 %22
+        %460 = OpLoad %6 %448
+        %461 = OpAccessChain %7 %52 %532
+               OpStore %461 %460
+               OpBranch %470
+        %462 = OpLabel
+        %466 = OpIAdd %6 %522 %22
+        %468 = OpLoad %6 %451
+        %469 = OpAccessChain %7 %52 %532
+               OpStore %469 %468
+               OpBranch %470
+        %470 = OpLabel
+        %534 = OpPhi %6 %522 %454 %466 %462
+        %533 = OpPhi %6 %458 %454 %521 %462
+               OpBranch %471
+        %471 = OpLabel
+               OpBranch %437
+        %472 = OpLabel
+               OpBranch %473
+        %473 = OpLabel
+        %531 = OpPhi %6 %532 %472 %483 %481
+        %523 = OpPhi %6 %521 %472 %485 %481
+        %476 = OpSLessThan %31 %523 %74
+        %479 = OpSLessThanEqual %31 %523 %406
+        %480 = OpLogicalAnd %31 %476 %479
+               OpLoopMerge %490 %481 None
+               OpBranchConditional %480 %481 %490
+        %481 = OpLabel
+        %483 = OpIAdd %6 %531 %22
+        %485 = OpIAdd %6 %523 %22
+        %486 = OpAccessChain %7 %41 %523
+        %487 = OpLoad %6 %486
+        %488 = OpAccessChain %7 %52 %531
+               OpStore %488 %487
+               OpBranch %473
+        %490 = OpLabel
+               OpBranch %492
+        %492 = OpLabel
+        %524 = OpPhi %6 %519 %490 %505 %497
+        %496 = OpSLessThanEqual %31 %524 %413
+               OpLoopMerge %506 %497 None
+               OpBranchConditional %496 %497 %506
+        %497 = OpLabel
+        %500 = OpAccessChain %7 %52 %524
+        %501 = OpLoad %6 %500
+        %502 = OpAccessChain %7 %41 %524
+               OpStore %502 %501
+        %505 = OpIAdd %6 %524 %22
+               OpBranch %492
+        %506 = OpLabel
+               OpBranch %418
+        %418 = OpLabel
+               OpBranch %396
+        %423 = OpLabel
+               OpBranch %424
+        %424 = OpLabel
+        %426 = OpIMul %6 %136 %511
+               OpBranch %389
+        %427 = OpLabel
+        %246 = OpAccessChain %245 %243 %244
+        %247 = OpLoad %157 %246
+        %248 = OpConvertFToS %6 %247
+        %250 = OpSLessThan %31 %248 %249
+               OpSelectionMerge %252 None
+               OpBranchConditional %250 %251 %262
+        %251 = OpLabel
+        %256 = OpAccessChain %7 %41 %105
+        %257 = OpLoad %6 %256
+        %258 = OpConvertSToF %157 %257
+        %260 = OpFMul %157 %258 %539
+        %261 = OpFAdd %157 %255 %260
+               OpBranch %252
+        %262 = OpLabel
+        %267 = OpSLessThan %31 %248 %266
+               OpSelectionMerge %269 None
+               OpBranchConditional %267 %268 %275
+        %268 = OpLabel
+        %270 = OpAccessChain %7 %41 %22
+        %271 = OpLoad %6 %270
+        %272 = OpConvertSToF %157 %271
+        %273 = OpFMul %157 %272 %539
+        %274 = OpFAdd %157 %255 %273
+               OpBranch %269
+        %275 = OpLabel
+        %280 = OpSLessThan %31 %248 %279
+               OpSelectionMerge %282 None
+               OpBranchConditional %280 %281 %288
+        %281 = OpLabel
+        %283 = OpAccessChain %7 %41 %136
+        %284 = OpLoad %6 %283
+        %285 = OpConvertSToF %157 %284
+        %286 = OpFMul %157 %285 %539
+        %287 = OpFAdd %157 %255 %286
+               OpBranch %282
+        %288 = OpLabel
+        %293 = OpSLessThan %31 %248 %292
+               OpSelectionMerge %295 None
+               OpBranchConditional %293 %294 %301
+        %294 = OpLabel
+        %296 = OpAccessChain %7 %41 %188
+        %297 = OpLoad %6 %296
+        %298 = OpConvertSToF %157 %297
+        %299 = OpFMul %157 %298 %539
+        %300 = OpFAdd %157 %255 %299
+               OpBranch %295
+        %301 = OpLabel
+        %306 = OpSLessThan %31 %248 %305
+               OpSelectionMerge %308 None
+               OpBranchConditional %306 %307 %310
+        %307 = OpLabel
+               OpKill
+        %310 = OpLabel
+        %315 = OpSLessThan %31 %248 %314
+               OpSelectionMerge %317 None
+               OpBranchConditional %315 %316 %324
+        %316 = OpLabel
+        %319 = OpAccessChain %7 %41 %318
+        %320 = OpLoad %6 %319
+        %321 = OpConvertSToF %157 %320
+        %322 = OpFMul %157 %321 %539
+        %323 = OpFAdd %157 %255 %322
+               OpBranch %317
+        %324 = OpLabel
+        %329 = OpSLessThan %31 %248 %328
+               OpSelectionMerge %331 None
+               OpBranchConditional %329 %330 %338
+        %330 = OpLabel
+        %333 = OpAccessChain %7 %41 %332
+        %334 = OpLoad %6 %333
+        %335 = OpConvertSToF %157 %334
+        %336 = OpFMul %157 %335 %539
+        %337 = OpFAdd %157 %255 %336
+               OpBranch %331
+        %338 = OpLabel
+        %343 = OpSLessThan %31 %248 %342
+               OpSelectionMerge %345 None
+               OpBranchConditional %343 %344 %352
+        %344 = OpLabel
+        %347 = OpAccessChain %7 %41 %346
+        %348 = OpLoad %6 %347
+        %349 = OpConvertSToF %157 %348
+        %350 = OpFMul %157 %349 %539
+        %351 = OpFAdd %157 %255 %350
+               OpBranch %345
+        %352 = OpLabel
+        %357 = OpSLessThan %31 %248 %356
+               OpSelectionMerge %358 None
+               OpBranchConditional %357 %358 %366
+        %358 = OpLabel
+        %361 = OpAccessChain %7 %41 %360
+        %362 = OpLoad %6 %361
+        %363 = OpConvertSToF %157 %362
+        %364 = OpFMul %157 %363 %539
+        %365 = OpFAdd %157 %255 %364
+               OpBranch %345
+        %366 = OpLabel
+               OpKill
+        %345 = OpLabel
+        %518 = OpPhi %157 %351 %344 %365 %358
+               OpBranch %331
+        %331 = OpLabel
+        %517 = OpPhi %157 %337 %330 %518 %345
+               OpBranch %317
+        %317 = OpLabel
+        %516 = OpPhi %157 %323 %316 %517 %331
+               OpBranch %308
+        %308 = OpLabel
+               OpBranch %295
+        %295 = OpLabel
+        %515 = OpPhi %157 %300 %294 %516 %308
+               OpBranch %282
+        %282 = OpLabel
+        %514 = OpPhi %157 %287 %281 %515 %295
+               OpBranch %269
+        %269 = OpLabel
+        %513 = OpPhi %157 %274 %268 %514 %282
+               OpBranch %252
+        %252 = OpLabel
+        %512 = OpPhi %157 %261 %251 %513 %269
+        %377 = OpCompositeConstruct %241 %512 %512 %512 %373
+               OpStore %369 %377
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for variant_2
+
+# injectionSwitch
+BUFFER variant_2_injectionSwitch DATA_TYPE vec2<float> STD140 DATA
+ 0.0 1.0
+END
+
+BUFFER variant_2_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_2_pipeline
+  ATTACH variant_2_vertex_shader
+  ATTACH variant_2_fragment_shader
+  FRAMEBUFFER_SIZE 256 256
+  BIND BUFFER variant_2_framebuffer AS color LOCATION 0
+  BIND BUFFER variant_2_injectionSwitch AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_2_pipeline 0 0 0 255
+
+CLEAR variant_2_pipeline
+RUN variant_2_pipeline DRAW_RECT POS 0 0 SIZE 256 256
+
+EXPECT reference_framebuffer EQ_HISTOGRAM_EMD_BUFFER variant_framebuffer TOLERANCE 0.005
+EXPECT reference_framebuffer EQ_HISTOGRAM_EMD_BUFFER variant_2_framebuffer TOLERANCE 0.005
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/spv-stable-mergesort-flatten-selection-dead-continues.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/spv-stable-mergesort-flatten-selection-dead-continues.amber
new file mode 100644
index 0000000..6ccc769
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/spv-stable-mergesort-flatten-selection-dead-continues.amber
@@ -0,0 +1,2052 @@
+#!amber
+
+# Copyright 2020 Google LLC
+#
+# 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.
+
+
+# A test for a bug found by the GraphicsFuzz project.
+
+# Short description: Shaders diff: selection %25 flattened; dead continues
+
+# The test renders three images using semantically equivalent shaders, and then
+# checks that the images are similar.
+# The test passes because the shaders have the same semantics and so the images
+# should be the same.
+
+SHADER vertex reference_vertex_shader PASSTHROUGH
+
+SHADER fragment reference_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 7
+; Bound: 378
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %243 %369
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 320
+               OpName %4 "main"
+               OpName %12 "merge(i1;i1;i1;"
+               OpName %9 "from"
+               OpName %10 "mid"
+               OpName %11 "to"
+               OpName %14 "mergeSort("
+               OpName %16 "k"
+               OpName %18 "i"
+               OpName %20 "j"
+               OpName %41 "data"
+               OpName %52 "temp"
+               OpName %87 "i"
+               OpName %104 "low"
+               OpName %106 "high"
+               OpName %108 "m"
+               OpName %117 "i"
+               OpName %127 "from"
+               OpName %129 "mid"
+               OpName %134 "to"
+               OpName %143 "param"
+               OpName %145 "param"
+               OpName %147 "param"
+               OpName %156 "i"
+               OpName %159 "buf0"
+               OpMemberName %159 0 "injectionSwitch"
+               OpName %161 ""
+               OpName %225 "j"
+               OpName %243 "gl_FragCoord"
+               OpName %254 "grey"
+               OpName %369 "_GLF_color"
+               OpMemberDecorate %159 0 Offset 0
+               OpDecorate %159 Block
+               OpDecorate %161 DescriptorSet 0
+               OpDecorate %161 Binding 0
+               OpDecorate %243 BuiltIn FragCoord
+               OpDecorate %369 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeInt 32 1
+          %7 = OpTypePointer Function %6
+          %8 = OpTypeFunction %2 %7 %7 %7
+         %22 = OpConstant %6 1
+         %31 = OpTypeBool
+         %37 = OpTypeInt 32 0
+         %38 = OpConstant %37 10
+         %39 = OpTypeArray %6 %38
+         %40 = OpTypePointer Private %39
+         %41 = OpVariable %40 Private
+         %43 = OpTypePointer Private %6
+         %52 = OpVariable %40 Private
+         %74 = OpConstant %6 10
+        %105 = OpConstant %6 0
+        %107 = OpConstant %6 9
+        %136 = OpConstant %6 2
+        %157 = OpTypeFloat 32
+        %158 = OpTypeVector %157 2
+        %159 = OpTypeStruct %158
+        %160 = OpTypePointer Uniform %159
+        %161 = OpVariable %160 Uniform
+        %162 = OpConstant %37 0
+        %163 = OpTypePointer Uniform %157
+        %184 = OpConstant %6 4
+        %188 = OpConstant %6 3
+        %201 = OpConstant %6 -1
+        %205 = OpConstant %6 -2
+        %209 = OpConstant %6 -3
+        %213 = OpConstant %6 -4
+        %217 = OpConstant %6 -5
+        %241 = OpTypeVector %157 4
+        %242 = OpTypePointer Input %241
+        %243 = OpVariable %242 Input
+        %244 = OpConstant %37 1
+        %245 = OpTypePointer Input %157
+        %249 = OpConstant %6 30
+        %253 = OpTypePointer Function %157
+        %255 = OpConstant %157 0.5
+        %259 = OpConstant %157 10
+        %266 = OpConstant %6 60
+        %279 = OpConstant %6 90
+        %292 = OpConstant %6 120
+        %305 = OpConstant %6 150
+        %314 = OpConstant %6 180
+        %318 = OpConstant %6 5
+        %328 = OpConstant %6 210
+        %332 = OpConstant %6 6
+        %342 = OpConstant %6 240
+        %346 = OpConstant %6 7
+        %356 = OpConstant %6 270
+        %360 = OpConstant %6 8
+        %368 = OpTypePointer Output %241
+        %369 = OpVariable %368 Output
+        %371 = OpTypeVector %157 3
+        %373 = OpConstant %157 1
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+        %156 = OpVariable %7 Function
+        %225 = OpVariable %7 Function
+        %254 = OpVariable %253 Function
+        %164 = OpAccessChain %163 %161 %105 %162
+        %165 = OpLoad %157 %164
+        %166 = OpConvertFToS %6 %165
+               OpStore %156 %166
+               OpBranch %167
+        %167 = OpLabel
+               OpLoopMerge %169 %170 None
+               OpBranch %168
+        %168 = OpLabel
+        %171 = OpLoad %6 %156
+               OpSelectionMerge %182 None
+               OpSwitch %171 %182 0 %172 1 %173 2 %174 3 %175 4 %176 5 %177 6 %178 7 %179 8 %180 9 %181
+        %172 = OpLabel
+        %183 = OpLoad %6 %156
+        %185 = OpAccessChain %43 %41 %183
+               OpStore %185 %184
+               OpBranch %182
+        %173 = OpLabel
+        %187 = OpLoad %6 %156
+        %189 = OpAccessChain %43 %41 %187
+               OpStore %189 %188
+               OpBranch %182
+        %174 = OpLabel
+        %191 = OpLoad %6 %156
+        %192 = OpAccessChain %43 %41 %191
+               OpStore %192 %136
+               OpBranch %182
+        %175 = OpLabel
+        %194 = OpLoad %6 %156
+        %195 = OpAccessChain %43 %41 %194
+               OpStore %195 %22
+               OpBranch %182
+        %176 = OpLabel
+        %197 = OpLoad %6 %156
+        %198 = OpAccessChain %43 %41 %197
+               OpStore %198 %105
+               OpBranch %182
+        %177 = OpLabel
+        %200 = OpLoad %6 %156
+        %202 = OpAccessChain %43 %41 %200
+               OpStore %202 %201
+               OpBranch %182
+        %178 = OpLabel
+        %204 = OpLoad %6 %156
+        %206 = OpAccessChain %43 %41 %204
+               OpStore %206 %205
+               OpBranch %182
+        %179 = OpLabel
+        %208 = OpLoad %6 %156
+        %210 = OpAccessChain %43 %41 %208
+               OpStore %210 %209
+               OpBranch %182
+        %180 = OpLabel
+        %212 = OpLoad %6 %156
+        %214 = OpAccessChain %43 %41 %212
+               OpStore %214 %213
+               OpBranch %182
+        %181 = OpLabel
+        %216 = OpLoad %6 %156
+        %218 = OpAccessChain %43 %41 %216
+               OpStore %218 %217
+               OpBranch %182
+        %182 = OpLabel
+        %221 = OpLoad %6 %156
+        %222 = OpIAdd %6 %221 %22
+               OpStore %156 %222
+               OpBranch %170
+        %170 = OpLabel
+        %223 = OpLoad %6 %156
+        %224 = OpSLessThan %31 %223 %74
+               OpBranchConditional %224 %167 %169
+        %169 = OpLabel
+               OpStore %225 %105
+               OpBranch %226
+        %226 = OpLabel
+               OpLoopMerge %228 %229 None
+               OpBranch %230
+        %230 = OpLabel
+        %231 = OpLoad %6 %225
+        %232 = OpSLessThan %31 %231 %74
+               OpBranchConditional %232 %227 %228
+        %227 = OpLabel
+        %233 = OpLoad %6 %225
+        %234 = OpLoad %6 %225
+        %235 = OpAccessChain %43 %41 %234
+        %236 = OpLoad %6 %235
+        %237 = OpAccessChain %43 %52 %233
+               OpStore %237 %236
+               OpBranch %229
+        %229 = OpLabel
+        %238 = OpLoad %6 %225
+        %239 = OpIAdd %6 %238 %22
+               OpStore %225 %239
+               OpBranch %226
+        %228 = OpLabel
+        %240 = OpFunctionCall %2 %14
+        %246 = OpAccessChain %245 %243 %244
+        %247 = OpLoad %157 %246
+        %248 = OpConvertFToS %6 %247
+        %250 = OpSLessThan %31 %248 %249
+               OpSelectionMerge %252 None
+               OpBranchConditional %250 %251 %262
+        %251 = OpLabel
+        %256 = OpAccessChain %43 %41 %105
+        %257 = OpLoad %6 %256
+        %258 = OpConvertSToF %157 %257
+        %260 = OpFDiv %157 %258 %259
+        %261 = OpFAdd %157 %255 %260
+               OpStore %254 %261
+               OpBranch %252
+        %262 = OpLabel
+        %263 = OpAccessChain %245 %243 %244
+        %264 = OpLoad %157 %263
+        %265 = OpConvertFToS %6 %264
+        %267 = OpSLessThan %31 %265 %266
+               OpSelectionMerge %269 None
+               OpBranchConditional %267 %268 %275
+        %268 = OpLabel
+        %270 = OpAccessChain %43 %41 %22
+        %271 = OpLoad %6 %270
+        %272 = OpConvertSToF %157 %271
+        %273 = OpFDiv %157 %272 %259
+        %274 = OpFAdd %157 %255 %273
+               OpStore %254 %274
+               OpBranch %269
+        %275 = OpLabel
+        %276 = OpAccessChain %245 %243 %244
+        %277 = OpLoad %157 %276
+        %278 = OpConvertFToS %6 %277
+        %280 = OpSLessThan %31 %278 %279
+               OpSelectionMerge %282 None
+               OpBranchConditional %280 %281 %288
+        %281 = OpLabel
+        %283 = OpAccessChain %43 %41 %136
+        %284 = OpLoad %6 %283
+        %285 = OpConvertSToF %157 %284
+        %286 = OpFDiv %157 %285 %259
+        %287 = OpFAdd %157 %255 %286
+               OpStore %254 %287
+               OpBranch %282
+        %288 = OpLabel
+        %289 = OpAccessChain %245 %243 %244
+        %290 = OpLoad %157 %289
+        %291 = OpConvertFToS %6 %290
+        %293 = OpSLessThan %31 %291 %292
+               OpSelectionMerge %295 None
+               OpBranchConditional %293 %294 %301
+        %294 = OpLabel
+        %296 = OpAccessChain %43 %41 %188
+        %297 = OpLoad %6 %296
+        %298 = OpConvertSToF %157 %297
+        %299 = OpFDiv %157 %298 %259
+        %300 = OpFAdd %157 %255 %299
+               OpStore %254 %300
+               OpBranch %295
+        %301 = OpLabel
+        %302 = OpAccessChain %245 %243 %244
+        %303 = OpLoad %157 %302
+        %304 = OpConvertFToS %6 %303
+        %306 = OpSLessThan %31 %304 %305
+               OpSelectionMerge %308 None
+               OpBranchConditional %306 %307 %310
+        %307 = OpLabel
+               OpKill
+        %310 = OpLabel
+        %311 = OpAccessChain %245 %243 %244
+        %312 = OpLoad %157 %311
+        %313 = OpConvertFToS %6 %312
+        %315 = OpSLessThan %31 %313 %314
+               OpSelectionMerge %317 None
+               OpBranchConditional %315 %316 %324
+        %316 = OpLabel
+        %319 = OpAccessChain %43 %41 %318
+        %320 = OpLoad %6 %319
+        %321 = OpConvertSToF %157 %320
+        %322 = OpFDiv %157 %321 %259
+        %323 = OpFAdd %157 %255 %322
+               OpStore %254 %323
+               OpBranch %317
+        %324 = OpLabel
+        %325 = OpAccessChain %245 %243 %244
+        %326 = OpLoad %157 %325
+        %327 = OpConvertFToS %6 %326
+        %329 = OpSLessThan %31 %327 %328
+               OpSelectionMerge %331 None
+               OpBranchConditional %329 %330 %338
+        %330 = OpLabel
+        %333 = OpAccessChain %43 %41 %332
+        %334 = OpLoad %6 %333
+        %335 = OpConvertSToF %157 %334
+        %336 = OpFDiv %157 %335 %259
+        %337 = OpFAdd %157 %255 %336
+               OpStore %254 %337
+               OpBranch %331
+        %338 = OpLabel
+        %339 = OpAccessChain %245 %243 %244
+        %340 = OpLoad %157 %339
+        %341 = OpConvertFToS %6 %340
+        %343 = OpSLessThan %31 %341 %342
+               OpSelectionMerge %345 None
+               OpBranchConditional %343 %344 %352
+        %344 = OpLabel
+        %347 = OpAccessChain %43 %41 %346
+        %348 = OpLoad %6 %347
+        %349 = OpConvertSToF %157 %348
+        %350 = OpFDiv %157 %349 %259
+        %351 = OpFAdd %157 %255 %350
+               OpStore %254 %351
+               OpBranch %345
+        %352 = OpLabel
+        %353 = OpAccessChain %245 %243 %244
+        %354 = OpLoad %157 %353
+        %355 = OpConvertFToS %6 %354
+        %357 = OpSLessThan %31 %355 %356
+               OpSelectionMerge %359 None
+               OpBranchConditional %357 %358 %366
+        %358 = OpLabel
+        %361 = OpAccessChain %43 %41 %360
+        %362 = OpLoad %6 %361
+        %363 = OpConvertSToF %157 %362
+        %364 = OpFDiv %157 %363 %259
+        %365 = OpFAdd %157 %255 %364
+               OpStore %254 %365
+               OpBranch %359
+        %366 = OpLabel
+               OpKill
+        %359 = OpLabel
+               OpBranch %345
+        %345 = OpLabel
+               OpBranch %331
+        %331 = OpLabel
+               OpBranch %317
+        %317 = OpLabel
+               OpBranch %308
+        %308 = OpLabel
+               OpBranch %295
+        %295 = OpLabel
+               OpBranch %282
+        %282 = OpLabel
+               OpBranch %269
+        %269 = OpLabel
+               OpBranch %252
+        %252 = OpLabel
+        %370 = OpLoad %157 %254
+        %372 = OpCompositeConstruct %371 %370 %370 %370
+        %374 = OpCompositeExtract %157 %372 0
+        %375 = OpCompositeExtract %157 %372 1
+        %376 = OpCompositeExtract %157 %372 2
+        %377 = OpCompositeConstruct %241 %374 %375 %376 %373
+               OpStore %369 %377
+               OpReturn
+               OpFunctionEnd
+         %12 = OpFunction %2 None %8
+          %9 = OpFunctionParameter %7
+         %10 = OpFunctionParameter %7
+         %11 = OpFunctionParameter %7
+         %13 = OpLabel
+         %16 = OpVariable %7 Function
+         %18 = OpVariable %7 Function
+         %20 = OpVariable %7 Function
+         %87 = OpVariable %7 Function
+         %17 = OpLoad %6 %9
+               OpStore %16 %17
+         %19 = OpLoad %6 %9
+               OpStore %18 %19
+         %21 = OpLoad %6 %10
+         %23 = OpIAdd %6 %21 %22
+               OpStore %20 %23
+               OpBranch %24
+         %24 = OpLabel
+               OpLoopMerge %26 %27 None
+               OpBranch %28
+         %28 = OpLabel
+         %29 = OpLoad %6 %18
+         %30 = OpLoad %6 %10
+         %32 = OpSLessThanEqual %31 %29 %30
+         %33 = OpLoad %6 %20
+         %34 = OpLoad %6 %11
+         %35 = OpSLessThanEqual %31 %33 %34
+         %36 = OpLogicalAnd %31 %32 %35
+               OpBranchConditional %36 %25 %26
+         %25 = OpLabel
+         %42 = OpLoad %6 %18
+         %44 = OpAccessChain %43 %41 %42
+         %45 = OpLoad %6 %44
+         %46 = OpLoad %6 %20
+         %47 = OpAccessChain %43 %41 %46
+         %48 = OpLoad %6 %47
+         %49 = OpSLessThan %31 %45 %48
+               OpSelectionMerge %51 None
+               OpBranchConditional %49 %50 %60
+         %50 = OpLabel
+         %53 = OpLoad %6 %16
+         %54 = OpIAdd %6 %53 %22
+               OpStore %16 %54
+         %55 = OpLoad %6 %18
+         %56 = OpIAdd %6 %55 %22
+               OpStore %18 %56
+         %57 = OpAccessChain %43 %41 %55
+         %58 = OpLoad %6 %57
+         %59 = OpAccessChain %43 %52 %53
+               OpStore %59 %58
+               OpBranch %51
+         %60 = OpLabel
+         %61 = OpLoad %6 %16
+         %62 = OpIAdd %6 %61 %22
+               OpStore %16 %62
+         %63 = OpLoad %6 %20
+         %64 = OpIAdd %6 %63 %22
+               OpStore %20 %64
+         %65 = OpAccessChain %43 %41 %63
+         %66 = OpLoad %6 %65
+         %67 = OpAccessChain %43 %52 %61
+               OpStore %67 %66
+               OpBranch %51
+         %51 = OpLabel
+               OpBranch %27
+         %27 = OpLabel
+               OpBranch %24
+         %26 = OpLabel
+               OpBranch %68
+         %68 = OpLabel
+               OpLoopMerge %70 %71 None
+               OpBranch %72
+         %72 = OpLabel
+         %73 = OpLoad %6 %18
+         %75 = OpSLessThan %31 %73 %74
+         %76 = OpLoad %6 %18
+         %77 = OpLoad %6 %10
+         %78 = OpSLessThanEqual %31 %76 %77
+         %79 = OpLogicalAnd %31 %75 %78
+               OpBranchConditional %79 %69 %70
+         %69 = OpLabel
+         %80 = OpLoad %6 %16
+         %81 = OpIAdd %6 %80 %22
+               OpStore %16 %81
+         %82 = OpLoad %6 %18
+         %83 = OpIAdd %6 %82 %22
+               OpStore %18 %83
+         %84 = OpAccessChain %43 %41 %82
+         %85 = OpLoad %6 %84
+         %86 = OpAccessChain %43 %52 %80
+               OpStore %86 %85
+               OpBranch %71
+         %71 = OpLabel
+               OpBranch %68
+         %70 = OpLabel
+         %88 = OpLoad %6 %9
+               OpStore %87 %88
+               OpBranch %89
+         %89 = OpLabel
+               OpLoopMerge %91 %92 None
+               OpBranch %93
+         %93 = OpLabel
+         %94 = OpLoad %6 %87
+         %95 = OpLoad %6 %11
+         %96 = OpSLessThanEqual %31 %94 %95
+               OpBranchConditional %96 %90 %91
+         %90 = OpLabel
+         %97 = OpLoad %6 %87
+         %98 = OpLoad %6 %87
+         %99 = OpAccessChain %43 %52 %98
+        %100 = OpLoad %6 %99
+        %101 = OpAccessChain %43 %41 %97
+               OpStore %101 %100
+               OpBranch %92
+         %92 = OpLabel
+        %102 = OpLoad %6 %87
+        %103 = OpIAdd %6 %102 %22
+               OpStore %87 %103
+               OpBranch %89
+         %91 = OpLabel
+               OpReturn
+               OpFunctionEnd
+         %14 = OpFunction %2 None %3
+         %15 = OpLabel
+        %104 = OpVariable %7 Function
+        %106 = OpVariable %7 Function
+        %108 = OpVariable %7 Function
+        %117 = OpVariable %7 Function
+        %127 = OpVariable %7 Function
+        %129 = OpVariable %7 Function
+        %134 = OpVariable %7 Function
+        %143 = OpVariable %7 Function
+        %145 = OpVariable %7 Function
+        %147 = OpVariable %7 Function
+               OpStore %104 %105
+               OpStore %106 %107
+               OpStore %108 %22
+               OpBranch %109
+        %109 = OpLabel
+               OpLoopMerge %111 %112 None
+               OpBranch %113
+        %113 = OpLabel
+        %114 = OpLoad %6 %108
+        %115 = OpLoad %6 %106
+        %116 = OpSLessThanEqual %31 %114 %115
+               OpBranchConditional %116 %110 %111
+        %110 = OpLabel
+        %118 = OpLoad %6 %104
+               OpStore %117 %118
+               OpBranch %119
+        %119 = OpLabel
+               OpLoopMerge %121 %122 None
+               OpBranch %123
+        %123 = OpLabel
+        %124 = OpLoad %6 %117
+        %125 = OpLoad %6 %106
+        %126 = OpSLessThan %31 %124 %125
+               OpBranchConditional %126 %120 %121
+        %120 = OpLabel
+        %128 = OpLoad %6 %117
+               OpStore %127 %128
+        %130 = OpLoad %6 %117
+        %131 = OpLoad %6 %108
+        %132 = OpIAdd %6 %130 %131
+        %133 = OpISub %6 %132 %22
+               OpStore %129 %133
+        %135 = OpLoad %6 %117
+        %137 = OpLoad %6 %108
+        %138 = OpIMul %6 %136 %137
+        %139 = OpIAdd %6 %135 %138
+        %140 = OpISub %6 %139 %22
+        %141 = OpLoad %6 %106
+        %142 = OpExtInst %6 %1 SMin %140 %141
+               OpStore %134 %142
+        %144 = OpLoad %6 %127
+               OpStore %143 %144
+        %146 = OpLoad %6 %129
+               OpStore %145 %146
+        %148 = OpLoad %6 %134
+               OpStore %147 %148
+        %149 = OpFunctionCall %2 %12 %143 %145 %147
+               OpBranch %122
+        %122 = OpLabel
+        %150 = OpLoad %6 %108
+        %151 = OpIMul %6 %136 %150
+        %152 = OpLoad %6 %117
+        %153 = OpIAdd %6 %152 %151
+               OpStore %117 %153
+               OpBranch %119
+        %121 = OpLabel
+               OpBranch %112
+        %112 = OpLabel
+        %154 = OpLoad %6 %108
+        %155 = OpIMul %6 %136 %154
+               OpStore %108 %155
+               OpBranch %109
+        %111 = OpLabel
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for reference
+
+# injectionSwitch
+BUFFER reference_injectionSwitch DATA_TYPE vec2<float> STD140 DATA
+ 0.0 1.0
+END
+
+BUFFER reference_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics reference_pipeline
+  ATTACH reference_vertex_shader
+  ATTACH reference_fragment_shader
+  FRAMEBUFFER_SIZE 256 256
+  BIND BUFFER reference_framebuffer AS color LOCATION 0
+  BIND BUFFER reference_injectionSwitch AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR reference_pipeline 0 0 0 255
+
+CLEAR reference_pipeline
+RUN reference_pipeline DRAW_RECT POS 0 0 SIZE 256 256
+
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 7
+; Bound: 648
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %243 %369
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 320
+               OpName %4 "main"
+               OpName %12 "merge(i1;i1;i1;"
+               OpName %9 "from"
+               OpName %10 "mid"
+               OpName %11 "to"
+               OpName %14 "mergeSort("
+               OpName %16 "k"
+               OpName %18 "i"
+               OpName %20 "j"
+               OpName %41 "data"
+               OpName %52 "temp"
+               OpName %87 "i"
+               OpName %104 "low"
+               OpName %106 "high"
+               OpName %108 "m"
+               OpName %117 "i"
+               OpName %127 "from"
+               OpName %129 "mid"
+               OpName %134 "to"
+               OpName %143 "param"
+               OpName %145 "param"
+               OpName %147 "param"
+               OpName %156 "i"
+               OpName %159 "buf0"
+               OpMemberName %159 0 "injectionSwitch"
+               OpName %161 ""
+               OpName %225 "j"
+               OpName %243 "gl_FragCoord"
+               OpName %254 "grey"
+               OpName %369 "_GLF_color"
+               OpMemberDecorate %159 0 Offset 0
+               OpDecorate %159 Block
+               OpDecorate %161 DescriptorSet 0
+               OpDecorate %161 Binding 0
+               OpDecorate %243 BuiltIn FragCoord
+               OpDecorate %369 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeInt 32 1
+          %7 = OpTypePointer Function %6
+          %8 = OpTypeFunction %2 %7 %7 %7
+         %22 = OpConstant %6 1
+         %31 = OpTypeBool
+         %37 = OpTypeInt 32 0
+         %38 = OpConstant %37 10
+         %39 = OpTypeArray %6 %38
+         %40 = OpTypePointer Private %39
+         %41 = OpVariable %40 Private
+         %43 = OpTypePointer Private %6
+         %52 = OpVariable %40 Private
+         %74 = OpConstant %6 10
+        %105 = OpConstant %6 0
+        %107 = OpConstant %6 9
+        %136 = OpConstant %6 2
+        %157 = OpTypeFloat 32
+        %158 = OpTypeVector %157 2
+        %159 = OpTypeStruct %158
+        %160 = OpTypePointer Uniform %159
+        %161 = OpVariable %160 Uniform
+        %162 = OpConstant %37 0
+        %163 = OpTypePointer Uniform %157
+        %184 = OpConstant %6 4
+        %188 = OpConstant %6 3
+        %201 = OpConstant %6 -1
+        %205 = OpConstant %6 -2
+        %209 = OpConstant %6 -3
+        %213 = OpConstant %6 -4
+        %217 = OpConstant %6 -5
+        %241 = OpTypeVector %157 4
+        %242 = OpTypePointer Input %241
+        %243 = OpVariable %242 Input
+        %244 = OpConstant %37 1
+        %245 = OpTypePointer Input %157
+        %249 = OpConstant %6 30
+        %253 = OpTypePointer Function %157
+        %255 = OpConstant %157 0.5
+        %259 = OpConstant %157 10
+        %266 = OpConstant %6 60
+        %279 = OpConstant %6 90
+        %292 = OpConstant %6 120
+        %305 = OpConstant %6 150
+        %314 = OpConstant %6 180
+        %318 = OpConstant %6 5
+        %328 = OpConstant %6 210
+        %332 = OpConstant %6 6
+        %342 = OpConstant %6 240
+        %346 = OpConstant %6 7
+        %356 = OpConstant %6 270
+        %360 = OpConstant %6 8
+        %368 = OpTypePointer Output %241
+        %369 = OpVariable %368 Output
+        %371 = OpTypeVector %157 3
+        %373 = OpConstant %157 1
+        %484 = OpConstant %6 0
+        %573 = OpConstantTrue %31
+        %574 = OpConstantFalse %31
+        %575 = OpConstant %157 0
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+        %156 = OpVariable %7 Function
+        %225 = OpVariable %7 Function
+        %254 = OpVariable %253 Function
+        %164 = OpAccessChain %163 %161 %105 %162
+        %165 = OpLoad %157 %164
+        %166 = OpConvertFToS %6 %165
+               OpStore %156 %166
+               OpBranch %167
+        %167 = OpLabel
+               OpLoopMerge %169 %170 None
+               OpBranch %168
+        %168 = OpLabel
+        %171 = OpLoad %6 %156
+               OpSelectionMerge %182 None
+               OpSwitch %171 %182 0 %172 1 %173 2 %174 3 %175 4 %176 5 %177 6 %178 7 %179 8 %180 9 %181
+        %172 = OpLabel
+        %183 = OpLoad %6 %156
+        %185 = OpAccessChain %43 %41 %183
+               OpStore %185 %184
+               OpBranch %182
+        %173 = OpLabel
+        %187 = OpLoad %6 %156
+        %189 = OpAccessChain %43 %41 %187
+               OpStore %189 %188
+               OpBranch %182
+        %174 = OpLabel
+        %191 = OpLoad %6 %156
+        %192 = OpAccessChain %43 %41 %191
+               OpStore %192 %136
+               OpBranch %182
+        %175 = OpLabel
+        %194 = OpLoad %6 %156
+        %195 = OpAccessChain %43 %41 %194
+               OpStore %195 %22
+               OpBranch %182
+        %176 = OpLabel
+        %197 = OpLoad %6 %156
+        %198 = OpAccessChain %43 %41 %197
+               OpStore %198 %105
+               OpBranch %182
+        %177 = OpLabel
+        %200 = OpLoad %6 %156
+        %202 = OpAccessChain %43 %41 %200
+               OpStore %202 %201
+               OpBranch %182
+        %178 = OpLabel
+        %204 = OpLoad %6 %156
+        %206 = OpAccessChain %43 %41 %204
+               OpStore %206 %205
+               OpBranch %182
+        %179 = OpLabel
+        %208 = OpLoad %6 %156
+        %210 = OpAccessChain %43 %41 %208
+               OpStore %210 %209
+               OpBranch %182
+        %180 = OpLabel
+        %212 = OpLoad %6 %156
+        %214 = OpAccessChain %43 %41 %212
+               OpStore %214 %213
+               OpBranch %182
+        %181 = OpLabel
+        %216 = OpLoad %6 %156
+        %218 = OpAccessChain %43 %41 %216
+               OpStore %218 %217
+               OpBranch %182
+        %182 = OpLabel
+        %221 = OpLoad %6 %156
+        %222 = OpIAdd %6 %221 %22
+               OpStore %156 %222
+               OpBranch %170
+        %170 = OpLabel
+        %223 = OpLoad %6 %156
+        %224 = OpSLessThan %31 %223 %74
+               OpBranchConditional %224 %167 %169
+        %169 = OpLabel
+               OpStore %225 %105
+               OpBranch %226
+        %226 = OpLabel
+               OpLoopMerge %228 %229 None
+               OpBranch %230
+        %230 = OpLabel
+        %231 = OpLoad %6 %225
+        %232 = OpSLessThan %31 %231 %74
+               OpBranchConditional %232 %227 %228
+        %227 = OpLabel
+        %233 = OpLoad %6 %225
+        %234 = OpLoad %6 %225
+        %235 = OpAccessChain %43 %41 %234
+        %236 = OpLoad %6 %235
+        %237 = OpAccessChain %43 %52 %233
+               OpStore %237 %236
+               OpBranch %229
+        %229 = OpLabel
+        %238 = OpLoad %6 %225
+        %239 = OpIAdd %6 %238 %22
+               OpStore %225 %239
+               OpBranch %226
+        %228 = OpLabel
+        %240 = OpFunctionCall %2 %14
+        %246 = OpAccessChain %245 %243 %244
+        %247 = OpLoad %157 %246
+        %248 = OpConvertFToS %6 %247
+        %250 = OpSLessThan %31 %248 %249
+               OpSelectionMerge %252 None
+               OpBranchConditional %250 %251 %262
+        %251 = OpLabel
+        %256 = OpAccessChain %43 %41 %105
+        %257 = OpLoad %6 %256
+        %258 = OpConvertSToF %157 %257
+        %260 = OpFDiv %157 %258 %259
+        %261 = OpFAdd %157 %255 %260
+               OpStore %254 %261
+               OpBranch %252
+        %262 = OpLabel
+        %263 = OpAccessChain %245 %243 %244
+        %264 = OpLoad %157 %263
+        %265 = OpConvertFToS %6 %264
+        %267 = OpSLessThan %31 %265 %266
+               OpSelectionMerge %269 None
+               OpBranchConditional %267 %268 %275
+        %268 = OpLabel
+        %270 = OpAccessChain %43 %41 %22
+        %271 = OpLoad %6 %270
+        %272 = OpConvertSToF %157 %271
+        %273 = OpFDiv %157 %272 %259
+        %274 = OpFAdd %157 %255 %273
+               OpStore %254 %274
+               OpBranch %269
+        %275 = OpLabel
+        %276 = OpAccessChain %245 %243 %244
+        %277 = OpLoad %157 %276
+        %278 = OpConvertFToS %6 %277
+        %280 = OpSLessThan %31 %278 %279
+               OpSelectionMerge %282 None
+               OpBranchConditional %280 %281 %288
+        %281 = OpLabel
+        %283 = OpAccessChain %43 %41 %136
+        %284 = OpLoad %6 %283
+        %285 = OpConvertSToF %157 %284
+        %286 = OpFDiv %157 %285 %259
+        %287 = OpFAdd %157 %255 %286
+               OpStore %254 %287
+               OpBranch %282
+        %288 = OpLabel
+        %289 = OpAccessChain %245 %243 %244
+        %290 = OpLoad %157 %289
+        %291 = OpConvertFToS %6 %290
+        %293 = OpSLessThan %31 %291 %292
+               OpSelectionMerge %295 None
+               OpBranchConditional %293 %294 %301
+        %294 = OpLabel
+        %296 = OpAccessChain %43 %41 %188
+        %297 = OpLoad %6 %296
+        %298 = OpConvertSToF %157 %297
+        %299 = OpFDiv %157 %298 %259
+        %300 = OpFAdd %157 %255 %299
+               OpStore %254 %300
+               OpBranch %295
+        %301 = OpLabel
+        %302 = OpAccessChain %245 %243 %244
+        %303 = OpLoad %157 %302
+        %304 = OpConvertFToS %6 %303
+        %306 = OpSLessThan %31 %304 %305
+               OpSelectionMerge %308 None
+               OpBranchConditional %306 %307 %310
+        %307 = OpLabel
+               OpKill
+        %310 = OpLabel
+        %311 = OpAccessChain %245 %243 %244
+        %312 = OpLoad %157 %311
+        %313 = OpConvertFToS %6 %312
+        %315 = OpSLessThan %31 %313 %314
+               OpSelectionMerge %317 None
+               OpBranchConditional %315 %316 %324
+        %316 = OpLabel
+        %319 = OpAccessChain %43 %41 %318
+        %320 = OpLoad %6 %319
+        %321 = OpConvertSToF %157 %320
+        %322 = OpFDiv %157 %321 %259
+        %323 = OpFAdd %157 %255 %322
+               OpStore %254 %323
+               OpBranch %317
+        %324 = OpLabel
+        %325 = OpAccessChain %245 %243 %244
+        %326 = OpLoad %157 %325
+        %327 = OpConvertFToS %6 %326
+        %329 = OpSLessThan %31 %327 %328
+               OpSelectionMerge %331 None
+               OpBranchConditional %329 %330 %338
+        %330 = OpLabel
+        %333 = OpAccessChain %43 %41 %332
+        %334 = OpLoad %6 %333
+        %335 = OpConvertSToF %157 %334
+        %336 = OpFDiv %157 %335 %259
+        %337 = OpFAdd %157 %255 %336
+               OpStore %254 %337
+               OpBranch %331
+        %338 = OpLabel
+        %339 = OpAccessChain %245 %243 %244
+        %340 = OpLoad %157 %339
+        %341 = OpConvertFToS %6 %340
+        %343 = OpSLessThan %31 %341 %342
+               OpSelectionMerge %345 None
+               OpBranchConditional %343 %344 %352
+        %344 = OpLabel
+        %347 = OpAccessChain %43 %41 %346
+        %348 = OpLoad %6 %347
+        %349 = OpConvertSToF %157 %348
+        %350 = OpFDiv %157 %349 %259
+        %351 = OpFAdd %157 %255 %350
+               OpStore %254 %351
+               OpBranch %345
+        %352 = OpLabel
+        %353 = OpAccessChain %245 %243 %244
+        %354 = OpLoad %157 %353
+        %355 = OpConvertFToS %6 %354
+        %357 = OpSLessThan %31 %355 %356
+               OpSelectionMerge %359 None
+               OpBranchConditional %357 %358 %366
+        %358 = OpLabel
+        %361 = OpAccessChain %43 %41 %360
+        %362 = OpLoad %6 %361
+        %363 = OpConvertSToF %157 %362
+        %364 = OpFDiv %157 %363 %259
+        %365 = OpFAdd %157 %255 %364
+               OpStore %254 %365
+               OpBranch %359
+        %366 = OpLabel
+               OpKill
+        %359 = OpLabel
+               OpBranch %345
+        %345 = OpLabel
+               OpBranch %331
+        %331 = OpLabel
+               OpBranch %317
+        %317 = OpLabel
+               OpBranch %308
+        %308 = OpLabel
+               OpBranch %295
+        %295 = OpLabel
+               OpBranch %282
+        %282 = OpLabel
+               OpBranch %269
+        %269 = OpLabel
+               OpBranch %252
+        %252 = OpLabel
+        %370 = OpLoad %157 %254
+        %372 = OpCompositeConstruct %371 %370 %370 %370
+        %374 = OpCompositeExtract %157 %372 0
+        %375 = OpCompositeExtract %157 %372 1
+        %376 = OpCompositeExtract %157 %372 2
+        %377 = OpCompositeConstruct %241 %374 %375 %376 %373
+               OpStore %369 %377
+               OpReturn
+               OpFunctionEnd
+         %12 = OpFunction %2 None %8
+          %9 = OpFunctionParameter %7
+         %10 = OpFunctionParameter %7
+         %11 = OpFunctionParameter %7
+         %13 = OpLabel
+         %16 = OpVariable %7 Function
+         %18 = OpVariable %7 Function
+         %20 = OpVariable %7 Function
+         %87 = OpVariable %7 Function
+         %17 = OpLoad %6 %9
+               OpStore %16 %17
+         %19 = OpLoad %6 %9
+               OpStore %18 %19
+         %21 = OpLoad %6 %10
+         %23 = OpIAdd %6 %21 %22
+               OpStore %20 %23
+               OpBranch %24
+         %24 = OpLabel
+        %646 = OpAccessChain %163 %161 %105 %105
+        %647 = OpLoad %157 %646
+        %643 = OpFOrdGreaterThanEqual %31 %373 %647
+               OpLoopMerge %26 %27 None
+               OpBranchConditional %643 %28 %27
+         %28 = OpLabel
+         %29 = OpLoad %6 %18
+         %30 = OpLoad %6 %10
+         %32 = OpSLessThanEqual %31 %29 %30
+         %33 = OpLoad %6 %20
+         %34 = OpLoad %6 %11
+         %35 = OpSLessThanEqual %31 %33 %34
+         %36 = OpLogicalAnd %31 %32 %35
+               OpBranchConditional %36 %25 %26
+         %25 = OpLabel
+         %42 = OpLoad %6 %18
+         %44 = OpAccessChain %43 %41 %42
+         %45 = OpLoad %6 %44
+         %46 = OpLoad %6 %20
+         %47 = OpAccessChain %43 %41 %46
+         %48 = OpLoad %6 %47
+         %49 = OpSLessThan %31 %45 %48
+               OpBranch %50
+         %50 = OpLabel
+               OpSelectionMerge %479 None
+               OpBranchConditional %49 %480 %482
+        %480 = OpLabel
+        %481 = OpLoad %6 %16
+               OpBranch %479
+        %482 = OpLabel
+        %483 = OpCopyObject %6 %484
+               OpBranch %479
+        %479 = OpLabel
+         %53 = OpPhi %6 %481 %480 %483 %482
+         %54 = OpIAdd %6 %53 %22
+               OpBranch %486
+        %486 = OpLabel
+               OpSelectionMerge %536 None
+               OpBranchConditional %49 %537 %536
+        %537 = OpLabel
+               OpStore %16 %54
+        %622 = OpAccessChain %163 %161 %105 %105
+        %623 = OpLoad %157 %622
+        %621 = OpFUnordGreaterThan %31 %373 %623
+               OpBranchConditional %621 %536 %27
+        %536 = OpLabel
+               OpBranch %485
+        %485 = OpLabel
+        %595 = OpAccessChain %163 %161 %105 %22
+        %596 = OpLoad %157 %595
+        %594 = OpFOrdGreaterThanEqual %31 %596 %575
+               OpBranchConditional %594 %490 %27
+        %490 = OpLabel
+        %491 = OpCopyObject %6 %484
+               OpBranch %488
+        %488 = OpLabel
+               OpSelectionMerge %538 None
+               OpBranchConditional %49 %539 %541
+        %539 = OpLabel
+        %540 = OpLoad %6 %18
+               OpBranch %538
+        %541 = OpLabel
+        %542 = OpCopyObject %6 %484
+               OpBranch %538
+        %538 = OpLabel
+        %489 = OpPhi %6 %540 %539 %542 %541
+               OpBranch %487
+        %487 = OpLabel
+         %55 = OpSelect %6 %49 %489 %491
+         %56 = OpIAdd %6 %55 %22
+               OpSelectionMerge %492 None
+               OpBranchConditional %49 %493 %492
+        %493 = OpLabel
+               OpStore %18 %56
+               OpBranch %492
+        %492 = OpLabel
+         %57 = OpAccessChain %43 %41 %55
+               OpBranch %497
+        %497 = OpLabel
+        %498 = OpCopyObject %6 %484
+               OpBranch %495
+        %495 = OpLabel
+               OpSelectionMerge %545 None
+               OpBranchConditional %49 %546 %548
+        %546 = OpLabel
+        %547 = OpLoad %6 %57
+        %598 = OpAccessChain %163 %161 %105 %22
+        %599 = OpLoad %157 %598
+        %597 = OpFUnordGreaterThan %31 %575 %599
+               OpBranchConditional %597 %27 %545
+        %548 = OpLabel
+        %549 = OpCopyObject %6 %484
+        %619 = OpAccessChain %163 %161 %105 %22
+        %620 = OpLoad %157 %619
+        %618 = OpFUnordGreaterThanEqual %31 %620 %575
+               OpBranchConditional %618 %545 %27
+        %545 = OpLabel
+        %496 = OpPhi %6 %547 %546 %549 %548
+               OpBranch %494
+        %494 = OpLabel
+         %58 = OpSelect %6 %49 %496 %498
+         %59 = OpAccessChain %43 %52 %53
+               OpSelectionMerge %499 None
+               OpBranchConditional %49 %500 %499
+        %500 = OpLabel
+               OpStore %59 %58
+               OpBranch %499
+        %499 = OpLabel
+               OpBranch %60
+         %60 = OpLabel
+               OpSelectionMerge %501 None
+               OpBranchConditional %49 %504 %502
+        %502 = OpLabel
+        %503 = OpLoad %6 %16
+               OpBranch %501
+        %504 = OpLabel
+        %505 = OpCopyObject %6 %484
+               OpBranch %501
+        %501 = OpLabel
+         %61 = OpPhi %6 %503 %502 %505 %504
+         %62 = OpIAdd %6 %61 %22
+               OpSelectionMerge %506 None
+               OpBranchConditional %49 %506 %507
+        %507 = OpLabel
+               OpStore %16 %62
+               OpBranch %506
+        %506 = OpLabel
+        %602 = OpAccessChain %163 %161 %105 %105
+        %603 = OpLoad %157 %602
+        %601 = OpFUnordGreaterThan %31 %373 %603
+               OpBranchConditional %601 %509 %27
+        %509 = OpLabel
+               OpSelectionMerge %559 None
+               OpBranchConditional %49 %562 %560
+        %560 = OpLabel
+        %561 = OpLoad %6 %20
+               OpBranch %559
+        %562 = OpLabel
+        %563 = OpCopyObject %6 %484
+               OpBranch %559
+        %559 = OpLabel
+        %510 = OpPhi %6 %561 %560 %563 %562
+               OpBranch %511
+        %511 = OpLabel
+        %512 = OpCopyObject %6 %484
+               OpBranch %508
+        %508 = OpLabel
+         %63 = OpSelect %6 %49 %512 %510
+         %64 = OpIAdd %6 %63 %22
+               OpSelectionMerge %513 None
+               OpBranchConditional %49 %513 %514
+        %514 = OpLabel
+               OpStore %20 %64
+               OpBranch %513
+        %513 = OpLabel
+         %65 = OpAccessChain %43 %41 %63
+               OpSelectionMerge %515 None
+               OpBranchConditional %49 %518 %516
+        %516 = OpLabel
+        %517 = OpLoad %6 %65
+               OpBranch %515
+        %518 = OpLabel
+        %519 = OpCopyObject %6 %484
+               OpBranch %515
+        %515 = OpLabel
+         %66 = OpPhi %6 %517 %516 %519 %518
+         %67 = OpAccessChain %43 %52 %61
+               OpSelectionMerge %520 None
+               OpBranchConditional %49 %520 %521
+        %521 = OpLabel
+               OpStore %67 %66
+               OpBranch %520
+        %520 = OpLabel
+               OpBranch %51
+         %51 = OpLabel
+               OpBranch %27
+         %27 = OpLabel
+               OpBranch %24
+         %26 = OpLabel
+               OpBranch %68
+         %68 = OpLabel
+               OpLoopMerge %70 %71 None
+               OpBranch %72
+         %72 = OpLabel
+         %73 = OpLoad %6 %18
+         %75 = OpSLessThan %31 %73 %74
+         %76 = OpLoad %6 %18
+         %77 = OpLoad %6 %10
+         %78 = OpSLessThanEqual %31 %76 %77
+         %79 = OpLogicalAnd %31 %75 %78
+               OpBranchConditional %79 %69 %70
+         %69 = OpLabel
+         %80 = OpLoad %6 %16
+         %81 = OpIAdd %6 %80 %22
+               OpStore %16 %81
+         %82 = OpLoad %6 %18
+         %83 = OpIAdd %6 %82 %22
+               OpStore %18 %83
+         %84 = OpAccessChain %43 %41 %82
+         %85 = OpLoad %6 %84
+         %86 = OpAccessChain %43 %52 %80
+               OpStore %86 %85
+               OpBranch %71
+         %71 = OpLabel
+               OpBranch %68
+         %70 = OpLabel
+         %88 = OpLoad %6 %9
+               OpStore %87 %88
+               OpBranch %89
+         %89 = OpLabel
+               OpLoopMerge %91 %92 None
+               OpBranch %93
+         %93 = OpLabel
+         %94 = OpLoad %6 %87
+         %95 = OpLoad %6 %11
+         %96 = OpSLessThanEqual %31 %94 %95
+               OpBranchConditional %96 %90 %91
+         %90 = OpLabel
+         %97 = OpLoad %6 %87
+         %98 = OpLoad %6 %87
+         %99 = OpAccessChain %43 %52 %98
+        %100 = OpLoad %6 %99
+        %101 = OpAccessChain %43 %41 %97
+               OpStore %101 %100
+               OpBranch %92
+         %92 = OpLabel
+        %102 = OpLoad %6 %87
+        %103 = OpIAdd %6 %102 %22
+               OpStore %87 %103
+               OpBranch %89
+         %91 = OpLabel
+               OpReturn
+               OpFunctionEnd
+         %14 = OpFunction %2 None %3
+         %15 = OpLabel
+        %104 = OpVariable %7 Function
+        %106 = OpVariable %7 Function
+        %108 = OpVariable %7 Function
+        %117 = OpVariable %7 Function
+        %127 = OpVariable %7 Function
+        %129 = OpVariable %7 Function
+        %134 = OpVariable %7 Function
+        %143 = OpVariable %7 Function
+        %145 = OpVariable %7 Function
+        %147 = OpVariable %7 Function
+               OpStore %104 %105
+               OpStore %106 %107
+               OpStore %108 %22
+               OpBranch %109
+        %109 = OpLabel
+               OpLoopMerge %111 %112 None
+               OpBranch %113
+        %113 = OpLabel
+        %114 = OpLoad %6 %108
+        %115 = OpLoad %6 %106
+        %116 = OpSLessThanEqual %31 %114 %115
+               OpBranchConditional %116 %110 %111
+        %110 = OpLabel
+        %118 = OpLoad %6 %104
+               OpStore %117 %118
+               OpBranch %119
+        %119 = OpLabel
+               OpLoopMerge %121 %122 None
+               OpBranch %123
+        %123 = OpLabel
+        %124 = OpLoad %6 %117
+        %125 = OpLoad %6 %106
+        %126 = OpSLessThan %31 %124 %125
+               OpBranchConditional %126 %120 %121
+        %120 = OpLabel
+        %128 = OpLoad %6 %117
+               OpStore %127 %128
+        %130 = OpLoad %6 %117
+        %131 = OpLoad %6 %108
+        %132 = OpIAdd %6 %130 %131
+        %133 = OpISub %6 %132 %22
+               OpStore %129 %133
+        %135 = OpLoad %6 %117
+        %137 = OpLoad %6 %108
+        %138 = OpIMul %6 %136 %137
+        %139 = OpIAdd %6 %135 %138
+        %140 = OpISub %6 %139 %22
+        %141 = OpLoad %6 %106
+        %142 = OpExtInst %6 %1 SMin %140 %141
+               OpStore %134 %142
+        %144 = OpLoad %6 %127
+               OpStore %143 %144
+        %146 = OpLoad %6 %129
+               OpStore %145 %146
+        %148 = OpLoad %6 %134
+               OpStore %147 %148
+        %149 = OpFunctionCall %2 %12 %143 %145 %147
+               OpBranch %122
+        %122 = OpLabel
+        %150 = OpLoad %6 %108
+        %151 = OpIMul %6 %136 %150
+        %152 = OpLoad %6 %117
+        %153 = OpIAdd %6 %152 %151
+               OpStore %117 %153
+               OpBranch %119
+        %121 = OpLabel
+               OpBranch %112
+        %112 = OpLabel
+        %154 = OpLoad %6 %108
+        %155 = OpIMul %6 %136 %154
+               OpStore %108 %155
+               OpBranch %109
+        %111 = OpLabel
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# injectionSwitch
+BUFFER variant_injectionSwitch DATA_TYPE vec2<float> STD140 DATA
+ 0.0 1.0
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 256 256
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant_injectionSwitch AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256
+
+
+SHADER vertex variant_2_vertex_shader PASSTHROUGH
+
+SHADER fragment variant_2_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 7
+; Bound: 644
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %243 %369
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 320
+               OpName %4 "main"
+               OpName %12 "merge(i1;i1;i1;"
+               OpName %9 "from"
+               OpName %10 "mid"
+               OpName %11 "to"
+               OpName %14 "mergeSort("
+               OpName %16 "k"
+               OpName %18 "i"
+               OpName %20 "j"
+               OpName %41 "data"
+               OpName %52 "temp"
+               OpName %87 "i"
+               OpName %104 "low"
+               OpName %106 "high"
+               OpName %108 "m"
+               OpName %117 "i"
+               OpName %127 "from"
+               OpName %129 "mid"
+               OpName %134 "to"
+               OpName %143 "param"
+               OpName %145 "param"
+               OpName %147 "param"
+               OpName %156 "i"
+               OpName %159 "buf0"
+               OpMemberName %159 0 "injectionSwitch"
+               OpName %161 ""
+               OpName %225 "j"
+               OpName %243 "gl_FragCoord"
+               OpName %254 "grey"
+               OpName %369 "_GLF_color"
+               OpMemberDecorate %159 0 Offset 0
+               OpDecorate %159 Block
+               OpDecorate %161 DescriptorSet 0
+               OpDecorate %161 Binding 0
+               OpDecorate %243 BuiltIn FragCoord
+               OpDecorate %369 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeInt 32 1
+          %7 = OpTypePointer Function %6
+          %8 = OpTypeFunction %2 %7 %7 %7
+         %22 = OpConstant %6 1
+         %31 = OpTypeBool
+         %37 = OpTypeInt 32 0
+         %38 = OpConstant %37 10
+         %39 = OpTypeArray %6 %38
+         %40 = OpTypePointer Private %39
+         %41 = OpVariable %40 Private
+         %43 = OpTypePointer Private %6
+         %52 = OpVariable %40 Private
+         %74 = OpConstant %6 10
+        %105 = OpConstant %6 0
+        %107 = OpConstant %6 9
+        %136 = OpConstant %6 2
+        %157 = OpTypeFloat 32
+        %158 = OpTypeVector %157 2
+        %159 = OpTypeStruct %158
+        %160 = OpTypePointer Uniform %159
+        %161 = OpVariable %160 Uniform
+        %162 = OpConstant %37 0
+        %163 = OpTypePointer Uniform %157
+        %184 = OpConstant %6 4
+        %188 = OpConstant %6 3
+        %201 = OpConstant %6 -1
+        %205 = OpConstant %6 -2
+        %209 = OpConstant %6 -3
+        %213 = OpConstant %6 -4
+        %217 = OpConstant %6 -5
+        %241 = OpTypeVector %157 4
+        %242 = OpTypePointer Input %241
+        %243 = OpVariable %242 Input
+        %244 = OpConstant %37 1
+        %245 = OpTypePointer Input %157
+        %249 = OpConstant %6 30
+        %253 = OpTypePointer Function %157
+        %255 = OpConstant %157 0.5
+        %259 = OpConstant %157 10
+        %266 = OpConstant %6 60
+        %279 = OpConstant %6 90
+        %292 = OpConstant %6 120
+        %305 = OpConstant %6 150
+        %314 = OpConstant %6 180
+        %318 = OpConstant %6 5
+        %328 = OpConstant %6 210
+        %332 = OpConstant %6 6
+        %342 = OpConstant %6 240
+        %346 = OpConstant %6 7
+        %356 = OpConstant %6 270
+        %360 = OpConstant %6 8
+        %368 = OpTypePointer Output %241
+        %369 = OpVariable %368 Output
+        %371 = OpTypeVector %157 3
+        %373 = OpConstant %157 1
+        %484 = OpConstant %6 0
+        %573 = OpConstantTrue %31
+        %574 = OpConstantFalse %31
+        %575 = OpConstant %157 0
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+        %156 = OpVariable %7 Function
+        %225 = OpVariable %7 Function
+        %254 = OpVariable %253 Function
+        %164 = OpAccessChain %163 %161 %105 %162
+        %165 = OpLoad %157 %164
+        %166 = OpConvertFToS %6 %165
+               OpStore %156 %166
+               OpBranch %167
+        %167 = OpLabel
+               OpLoopMerge %169 %170 None
+               OpBranch %168
+        %168 = OpLabel
+        %171 = OpLoad %6 %156
+               OpSelectionMerge %182 None
+               OpSwitch %171 %182 0 %172 1 %173 2 %174 3 %175 4 %176 5 %177 6 %178 7 %179 8 %180 9 %181
+        %172 = OpLabel
+        %183 = OpLoad %6 %156
+        %185 = OpAccessChain %43 %41 %183
+               OpStore %185 %184
+               OpBranch %182
+        %173 = OpLabel
+        %187 = OpLoad %6 %156
+        %189 = OpAccessChain %43 %41 %187
+               OpStore %189 %188
+               OpBranch %182
+        %174 = OpLabel
+        %191 = OpLoad %6 %156
+        %192 = OpAccessChain %43 %41 %191
+               OpStore %192 %136
+               OpBranch %182
+        %175 = OpLabel
+        %194 = OpLoad %6 %156
+        %195 = OpAccessChain %43 %41 %194
+               OpStore %195 %22
+               OpBranch %182
+        %176 = OpLabel
+        %197 = OpLoad %6 %156
+        %198 = OpAccessChain %43 %41 %197
+               OpStore %198 %105
+               OpBranch %182
+        %177 = OpLabel
+        %200 = OpLoad %6 %156
+        %202 = OpAccessChain %43 %41 %200
+               OpStore %202 %201
+               OpBranch %182
+        %178 = OpLabel
+        %204 = OpLoad %6 %156
+        %206 = OpAccessChain %43 %41 %204
+               OpStore %206 %205
+               OpBranch %182
+        %179 = OpLabel
+        %208 = OpLoad %6 %156
+        %210 = OpAccessChain %43 %41 %208
+               OpStore %210 %209
+               OpBranch %182
+        %180 = OpLabel
+        %212 = OpLoad %6 %156
+        %214 = OpAccessChain %43 %41 %212
+               OpStore %214 %213
+               OpBranch %182
+        %181 = OpLabel
+        %216 = OpLoad %6 %156
+        %218 = OpAccessChain %43 %41 %216
+               OpStore %218 %217
+               OpBranch %182
+        %182 = OpLabel
+        %221 = OpLoad %6 %156
+        %222 = OpIAdd %6 %221 %22
+               OpStore %156 %222
+               OpBranch %170
+        %170 = OpLabel
+        %223 = OpLoad %6 %156
+        %224 = OpSLessThan %31 %223 %74
+               OpBranchConditional %224 %167 %169
+        %169 = OpLabel
+               OpStore %225 %105
+               OpBranch %226
+        %226 = OpLabel
+               OpLoopMerge %228 %229 None
+               OpBranch %230
+        %230 = OpLabel
+        %231 = OpLoad %6 %225
+        %232 = OpSLessThan %31 %231 %74
+               OpBranchConditional %232 %227 %228
+        %227 = OpLabel
+        %233 = OpLoad %6 %225
+        %234 = OpLoad %6 %225
+        %235 = OpAccessChain %43 %41 %234
+        %236 = OpLoad %6 %235
+        %237 = OpAccessChain %43 %52 %233
+               OpStore %237 %236
+               OpBranch %229
+        %229 = OpLabel
+        %238 = OpLoad %6 %225
+        %239 = OpIAdd %6 %238 %22
+               OpStore %225 %239
+               OpBranch %226
+        %228 = OpLabel
+        %240 = OpFunctionCall %2 %14
+        %246 = OpAccessChain %245 %243 %244
+        %247 = OpLoad %157 %246
+        %248 = OpConvertFToS %6 %247
+        %250 = OpSLessThan %31 %248 %249
+               OpSelectionMerge %252 None
+               OpBranchConditional %250 %251 %262
+        %251 = OpLabel
+        %256 = OpAccessChain %43 %41 %105
+        %257 = OpLoad %6 %256
+        %258 = OpConvertSToF %157 %257
+        %260 = OpFDiv %157 %258 %259
+        %261 = OpFAdd %157 %255 %260
+               OpStore %254 %261
+               OpBranch %252
+        %262 = OpLabel
+        %263 = OpAccessChain %245 %243 %244
+        %264 = OpLoad %157 %263
+        %265 = OpConvertFToS %6 %264
+        %267 = OpSLessThan %31 %265 %266
+               OpSelectionMerge %269 None
+               OpBranchConditional %267 %268 %275
+        %268 = OpLabel
+        %270 = OpAccessChain %43 %41 %22
+        %271 = OpLoad %6 %270
+        %272 = OpConvertSToF %157 %271
+        %273 = OpFDiv %157 %272 %259
+        %274 = OpFAdd %157 %255 %273
+               OpStore %254 %274
+               OpBranch %269
+        %275 = OpLabel
+        %276 = OpAccessChain %245 %243 %244
+        %277 = OpLoad %157 %276
+        %278 = OpConvertFToS %6 %277
+        %280 = OpSLessThan %31 %278 %279
+               OpSelectionMerge %282 None
+               OpBranchConditional %280 %281 %288
+        %281 = OpLabel
+        %283 = OpAccessChain %43 %41 %136
+        %284 = OpLoad %6 %283
+        %285 = OpConvertSToF %157 %284
+        %286 = OpFDiv %157 %285 %259
+        %287 = OpFAdd %157 %255 %286
+               OpStore %254 %287
+               OpBranch %282
+        %288 = OpLabel
+        %289 = OpAccessChain %245 %243 %244
+        %290 = OpLoad %157 %289
+        %291 = OpConvertFToS %6 %290
+        %293 = OpSLessThan %31 %291 %292
+               OpSelectionMerge %295 None
+               OpBranchConditional %293 %294 %301
+        %294 = OpLabel
+        %296 = OpAccessChain %43 %41 %188
+        %297 = OpLoad %6 %296
+        %298 = OpConvertSToF %157 %297
+        %299 = OpFDiv %157 %298 %259
+        %300 = OpFAdd %157 %255 %299
+               OpStore %254 %300
+               OpBranch %295
+        %301 = OpLabel
+        %302 = OpAccessChain %245 %243 %244
+        %303 = OpLoad %157 %302
+        %304 = OpConvertFToS %6 %303
+        %306 = OpSLessThan %31 %304 %305
+               OpSelectionMerge %308 None
+               OpBranchConditional %306 %307 %310
+        %307 = OpLabel
+               OpKill
+        %310 = OpLabel
+        %311 = OpAccessChain %245 %243 %244
+        %312 = OpLoad %157 %311
+        %313 = OpConvertFToS %6 %312
+        %315 = OpSLessThan %31 %313 %314
+               OpSelectionMerge %317 None
+               OpBranchConditional %315 %316 %324
+        %316 = OpLabel
+        %319 = OpAccessChain %43 %41 %318
+        %320 = OpLoad %6 %319
+        %321 = OpConvertSToF %157 %320
+        %322 = OpFDiv %157 %321 %259
+        %323 = OpFAdd %157 %255 %322
+               OpStore %254 %323
+               OpBranch %317
+        %324 = OpLabel
+        %325 = OpAccessChain %245 %243 %244
+        %326 = OpLoad %157 %325
+        %327 = OpConvertFToS %6 %326
+        %329 = OpSLessThan %31 %327 %328
+               OpSelectionMerge %331 None
+               OpBranchConditional %329 %330 %338
+        %330 = OpLabel
+        %333 = OpAccessChain %43 %41 %332
+        %334 = OpLoad %6 %333
+        %335 = OpConvertSToF %157 %334
+        %336 = OpFDiv %157 %335 %259
+        %337 = OpFAdd %157 %255 %336
+               OpStore %254 %337
+               OpBranch %331
+        %338 = OpLabel
+        %339 = OpAccessChain %245 %243 %244
+        %340 = OpLoad %157 %339
+        %341 = OpConvertFToS %6 %340
+        %343 = OpSLessThan %31 %341 %342
+               OpSelectionMerge %345 None
+               OpBranchConditional %343 %344 %352
+        %344 = OpLabel
+        %347 = OpAccessChain %43 %41 %346
+        %348 = OpLoad %6 %347
+        %349 = OpConvertSToF %157 %348
+        %350 = OpFDiv %157 %349 %259
+        %351 = OpFAdd %157 %255 %350
+               OpStore %254 %351
+               OpBranch %345
+        %352 = OpLabel
+        %353 = OpAccessChain %245 %243 %244
+        %354 = OpLoad %157 %353
+        %355 = OpConvertFToS %6 %354
+        %357 = OpSLessThan %31 %355 %356
+               OpSelectionMerge %359 None
+               OpBranchConditional %357 %358 %366
+        %358 = OpLabel
+        %361 = OpAccessChain %43 %41 %360
+        %362 = OpLoad %6 %361
+        %363 = OpConvertSToF %157 %362
+        %364 = OpFDiv %157 %363 %259
+        %365 = OpFAdd %157 %255 %364
+               OpStore %254 %365
+               OpBranch %359
+        %366 = OpLabel
+               OpKill
+        %359 = OpLabel
+               OpBranch %345
+        %345 = OpLabel
+               OpBranch %331
+        %331 = OpLabel
+               OpBranch %317
+        %317 = OpLabel
+               OpBranch %308
+        %308 = OpLabel
+               OpBranch %295
+        %295 = OpLabel
+               OpBranch %282
+        %282 = OpLabel
+               OpBranch %269
+        %269 = OpLabel
+               OpBranch %252
+        %252 = OpLabel
+        %370 = OpLoad %157 %254
+        %372 = OpCompositeConstruct %371 %370 %370 %370
+        %374 = OpCompositeExtract %157 %372 0
+        %375 = OpCompositeExtract %157 %372 1
+        %376 = OpCompositeExtract %157 %372 2
+        %377 = OpCompositeConstruct %241 %374 %375 %376 %373
+               OpStore %369 %377
+               OpReturn
+               OpFunctionEnd
+         %12 = OpFunction %2 None %8
+          %9 = OpFunctionParameter %7
+         %10 = OpFunctionParameter %7
+         %11 = OpFunctionParameter %7
+         %13 = OpLabel
+         %16 = OpVariable %7 Function
+         %18 = OpVariable %7 Function
+         %20 = OpVariable %7 Function
+         %87 = OpVariable %7 Function
+         %17 = OpLoad %6 %9
+               OpStore %16 %17
+         %19 = OpLoad %6 %9
+               OpStore %18 %19
+         %21 = OpLoad %6 %10
+         %23 = OpIAdd %6 %21 %22
+               OpStore %20 %23
+               OpBranch %24
+         %24 = OpLabel
+        %643 = OpFOrdGreaterThanEqual %31 %373 %575
+               OpLoopMerge %26 %27 None
+               OpBranchConditional %643 %28 %27
+         %28 = OpLabel
+         %29 = OpLoad %6 %18
+         %30 = OpLoad %6 %10
+         %32 = OpSLessThanEqual %31 %29 %30
+         %33 = OpLoad %6 %20
+         %34 = OpLoad %6 %11
+         %35 = OpSLessThanEqual %31 %33 %34
+         %36 = OpLogicalAnd %31 %32 %35
+               OpBranchConditional %36 %25 %26
+         %25 = OpLabel
+         %42 = OpLoad %6 %18
+         %44 = OpAccessChain %43 %41 %42
+         %45 = OpLoad %6 %44
+         %46 = OpLoad %6 %20
+         %47 = OpAccessChain %43 %41 %46
+         %48 = OpLoad %6 %47
+         %49 = OpSLessThan %31 %45 %48
+               OpBranch %50
+         %50 = OpLabel
+               OpSelectionMerge %479 None
+               OpBranchConditional %49 %480 %482
+        %480 = OpLabel
+        %481 = OpLoad %6 %16
+               OpBranch %479
+        %482 = OpLabel
+        %483 = OpCopyObject %6 %484
+               OpBranch %479
+        %479 = OpLabel
+         %53 = OpPhi %6 %481 %480 %483 %482
+         %54 = OpIAdd %6 %53 %22
+               OpBranch %486
+        %486 = OpLabel
+               OpSelectionMerge %536 None
+               OpBranchConditional %49 %537 %536
+        %537 = OpLabel
+               OpStore %16 %54
+        %622 = OpAccessChain %163 %161 %105 %105
+        %623 = OpLoad %157 %622
+        %621 = OpFUnordGreaterThan %31 %373 %623
+               OpBranchConditional %621 %536 %27
+        %536 = OpLabel
+               OpBranch %485
+        %485 = OpLabel
+        %595 = OpAccessChain %163 %161 %105 %22
+        %596 = OpLoad %157 %595
+        %594 = OpFOrdGreaterThanEqual %31 %596 %575
+               OpBranchConditional %594 %490 %27
+        %490 = OpLabel
+        %491 = OpCopyObject %6 %484
+               OpBranch %488
+        %488 = OpLabel
+               OpSelectionMerge %538 None
+               OpBranchConditional %49 %539 %541
+        %539 = OpLabel
+        %540 = OpLoad %6 %18
+               OpBranch %538
+        %541 = OpLabel
+        %542 = OpCopyObject %6 %484
+               OpBranch %538
+        %538 = OpLabel
+        %489 = OpPhi %6 %540 %539 %542 %541
+               OpBranch %487
+        %487 = OpLabel
+         %55 = OpSelect %6 %49 %489 %491
+         %56 = OpIAdd %6 %55 %22
+               OpSelectionMerge %492 None
+               OpBranchConditional %49 %493 %492
+        %493 = OpLabel
+               OpStore %18 %56
+               OpBranch %492
+        %492 = OpLabel
+         %57 = OpAccessChain %43 %41 %55
+               OpBranch %497
+        %497 = OpLabel
+        %498 = OpCopyObject %6 %484
+               OpBranch %495
+        %495 = OpLabel
+               OpSelectionMerge %545 None
+               OpBranchConditional %49 %546 %548
+        %546 = OpLabel
+        %547 = OpLoad %6 %57
+        %598 = OpAccessChain %163 %161 %105 %22
+        %599 = OpLoad %157 %598
+        %597 = OpFUnordGreaterThan %31 %575 %599
+               OpBranchConditional %597 %27 %545
+        %548 = OpLabel
+        %549 = OpCopyObject %6 %484
+        %619 = OpAccessChain %163 %161 %105 %22
+        %620 = OpLoad %157 %619
+        %618 = OpFUnordGreaterThanEqual %31 %620 %575
+               OpBranchConditional %618 %545 %27
+        %545 = OpLabel
+        %496 = OpPhi %6 %547 %546 %549 %548
+               OpBranch %494
+        %494 = OpLabel
+         %58 = OpSelect %6 %49 %496 %498
+         %59 = OpAccessChain %43 %52 %53
+               OpSelectionMerge %499 None
+               OpBranchConditional %49 %500 %499
+        %500 = OpLabel
+               OpStore %59 %58
+               OpBranch %499
+        %499 = OpLabel
+               OpBranch %60
+         %60 = OpLabel
+               OpSelectionMerge %501 None
+               OpBranchConditional %49 %504 %502
+        %502 = OpLabel
+        %503 = OpLoad %6 %16
+               OpBranch %501
+        %504 = OpLabel
+        %505 = OpCopyObject %6 %484
+               OpBranch %501
+        %501 = OpLabel
+         %61 = OpPhi %6 %503 %502 %505 %504
+         %62 = OpIAdd %6 %61 %22
+               OpSelectionMerge %506 None
+               OpBranchConditional %49 %506 %507
+        %507 = OpLabel
+               OpStore %16 %62
+               OpBranch %506
+        %506 = OpLabel
+        %602 = OpAccessChain %163 %161 %105 %105
+        %603 = OpLoad %157 %602
+        %601 = OpFUnordGreaterThan %31 %373 %603
+               OpBranchConditional %601 %509 %27
+        %509 = OpLabel
+               OpSelectionMerge %559 None
+               OpBranchConditional %49 %562 %560
+        %560 = OpLabel
+        %561 = OpLoad %6 %20
+               OpBranch %559
+        %562 = OpLabel
+        %563 = OpCopyObject %6 %484
+               OpBranch %559
+        %559 = OpLabel
+        %510 = OpPhi %6 %561 %560 %563 %562
+               OpBranch %511
+        %511 = OpLabel
+        %512 = OpCopyObject %6 %484
+               OpBranch %508
+        %508 = OpLabel
+         %63 = OpSelect %6 %49 %512 %510
+         %64 = OpIAdd %6 %63 %22
+               OpSelectionMerge %513 None
+               OpBranchConditional %49 %513 %514
+        %514 = OpLabel
+               OpStore %20 %64
+               OpBranch %513
+        %513 = OpLabel
+         %65 = OpAccessChain %43 %41 %63
+               OpSelectionMerge %515 None
+               OpBranchConditional %49 %518 %516
+        %516 = OpLabel
+        %517 = OpLoad %6 %65
+               OpBranch %515
+        %518 = OpLabel
+        %519 = OpCopyObject %6 %484
+               OpBranch %515
+        %515 = OpLabel
+         %66 = OpPhi %6 %517 %516 %519 %518
+         %67 = OpAccessChain %43 %52 %61
+               OpSelectionMerge %520 None
+               OpBranchConditional %49 %520 %521
+        %521 = OpLabel
+               OpStore %67 %66
+               OpBranch %520
+        %520 = OpLabel
+               OpBranch %51
+         %51 = OpLabel
+               OpBranch %27
+         %27 = OpLabel
+               OpBranch %24
+         %26 = OpLabel
+               OpBranch %68
+         %68 = OpLabel
+               OpLoopMerge %70 %71 None
+               OpBranch %72
+         %72 = OpLabel
+         %73 = OpLoad %6 %18
+         %75 = OpSLessThan %31 %73 %74
+         %76 = OpLoad %6 %18
+         %77 = OpLoad %6 %10
+         %78 = OpSLessThanEqual %31 %76 %77
+         %79 = OpLogicalAnd %31 %75 %78
+               OpBranchConditional %79 %69 %70
+         %69 = OpLabel
+         %80 = OpLoad %6 %16
+         %81 = OpIAdd %6 %80 %22
+               OpStore %16 %81
+         %82 = OpLoad %6 %18
+         %83 = OpIAdd %6 %82 %22
+               OpStore %18 %83
+         %84 = OpAccessChain %43 %41 %82
+         %85 = OpLoad %6 %84
+         %86 = OpAccessChain %43 %52 %80
+               OpStore %86 %85
+               OpBranch %71
+         %71 = OpLabel
+               OpBranch %68
+         %70 = OpLabel
+         %88 = OpLoad %6 %9
+               OpStore %87 %88
+               OpBranch %89
+         %89 = OpLabel
+               OpLoopMerge %91 %92 None
+               OpBranch %93
+         %93 = OpLabel
+         %94 = OpLoad %6 %87
+         %95 = OpLoad %6 %11
+         %96 = OpSLessThanEqual %31 %94 %95
+               OpBranchConditional %96 %90 %91
+         %90 = OpLabel
+         %97 = OpLoad %6 %87
+         %98 = OpLoad %6 %87
+         %99 = OpAccessChain %43 %52 %98
+        %100 = OpLoad %6 %99
+        %101 = OpAccessChain %43 %41 %97
+               OpStore %101 %100
+               OpBranch %92
+         %92 = OpLabel
+        %102 = OpLoad %6 %87
+        %103 = OpIAdd %6 %102 %22
+               OpStore %87 %103
+               OpBranch %89
+         %91 = OpLabel
+               OpReturn
+               OpFunctionEnd
+         %14 = OpFunction %2 None %3
+         %15 = OpLabel
+        %104 = OpVariable %7 Function
+        %106 = OpVariable %7 Function
+        %108 = OpVariable %7 Function
+        %117 = OpVariable %7 Function
+        %127 = OpVariable %7 Function
+        %129 = OpVariable %7 Function
+        %134 = OpVariable %7 Function
+        %143 = OpVariable %7 Function
+        %145 = OpVariable %7 Function
+        %147 = OpVariable %7 Function
+               OpStore %104 %105
+               OpStore %106 %107
+               OpStore %108 %22
+               OpBranch %109
+        %109 = OpLabel
+               OpLoopMerge %111 %112 None
+               OpBranch %113
+        %113 = OpLabel
+        %114 = OpLoad %6 %108
+        %115 = OpLoad %6 %106
+        %116 = OpSLessThanEqual %31 %114 %115
+               OpBranchConditional %116 %110 %111
+        %110 = OpLabel
+        %118 = OpLoad %6 %104
+               OpStore %117 %118
+               OpBranch %119
+        %119 = OpLabel
+               OpLoopMerge %121 %122 None
+               OpBranch %123
+        %123 = OpLabel
+        %124 = OpLoad %6 %117
+        %125 = OpLoad %6 %106
+        %126 = OpSLessThan %31 %124 %125
+               OpBranchConditional %126 %120 %121
+        %120 = OpLabel
+        %128 = OpLoad %6 %117
+               OpStore %127 %128
+        %130 = OpLoad %6 %117
+        %131 = OpLoad %6 %108
+        %132 = OpIAdd %6 %130 %131
+        %133 = OpISub %6 %132 %22
+               OpStore %129 %133
+        %135 = OpLoad %6 %117
+        %137 = OpLoad %6 %108
+        %138 = OpIMul %6 %136 %137
+        %139 = OpIAdd %6 %135 %138
+        %140 = OpISub %6 %139 %22
+        %141 = OpLoad %6 %106
+        %142 = OpExtInst %6 %1 SMin %140 %141
+               OpStore %134 %142
+        %144 = OpLoad %6 %127
+               OpStore %143 %144
+        %146 = OpLoad %6 %129
+               OpStore %145 %146
+        %148 = OpLoad %6 %134
+               OpStore %147 %148
+        %149 = OpFunctionCall %2 %12 %143 %145 %147
+               OpBranch %122
+        %122 = OpLabel
+        %150 = OpLoad %6 %108
+        %151 = OpIMul %6 %136 %150
+        %152 = OpLoad %6 %117
+        %153 = OpIAdd %6 %152 %151
+               OpStore %117 %153
+               OpBranch %119
+        %121 = OpLabel
+               OpBranch %112
+        %112 = OpLabel
+        %154 = OpLoad %6 %108
+        %155 = OpIMul %6 %136 %154
+               OpStore %108 %155
+               OpBranch %109
+        %111 = OpLabel
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for variant_2
+
+# injectionSwitch
+BUFFER variant_2_injectionSwitch DATA_TYPE vec2<float> STD140 DATA
+ 0.0 1.0
+END
+
+BUFFER variant_2_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_2_pipeline
+  ATTACH variant_2_vertex_shader
+  ATTACH variant_2_fragment_shader
+  FRAMEBUFFER_SIZE 256 256
+  BIND BUFFER variant_2_framebuffer AS color LOCATION 0
+  BIND BUFFER variant_2_injectionSwitch AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_2_pipeline 0 0 0 255
+
+CLEAR variant_2_pipeline
+RUN variant_2_pipeline DRAW_RECT POS 0 0 SIZE 256 256
+
+EXPECT reference_framebuffer EQ_HISTOGRAM_EMD_BUFFER variant_framebuffer TOLERANCE 0.005
+EXPECT reference_framebuffer EQ_HISTOGRAM_EMD_BUFFER variant_2_framebuffer TOLERANCE 0.005
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/spv-stable-mergesort-func-inline-mutate-var.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/spv-stable-mergesort-func-inline-mutate-var.amber
new file mode 100644
index 0000000..6ab170d
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/spv-stable-mergesort-func-inline-mutate-var.amber
@@ -0,0 +1,1943 @@
+#!amber
+
+# Copyright 2020 Google LLC
+#
+# 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.
+
+
+# A test for a bug found by the GraphicsFuzz project.
+
+# Short description: Three shaders diff: mutated var
+
+# The test renders three images using semantically equivalent shaders, and then
+# checks that the images are similar.
+# The test passes because the shaders have the same semantics and so the images
+# should be the same.
+
+SHADER vertex reference_vertex_shader PASSTHROUGH
+
+SHADER fragment reference_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 7
+; Bound: 378
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %243 %369
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 320
+               OpName %4 "main"
+               OpName %12 "merge(i1;i1;i1;"
+               OpName %9 "from"
+               OpName %10 "mid"
+               OpName %11 "to"
+               OpName %14 "mergeSort("
+               OpName %16 "k"
+               OpName %18 "i"
+               OpName %20 "j"
+               OpName %41 "data"
+               OpName %52 "temp"
+               OpName %87 "i"
+               OpName %104 "low"
+               OpName %106 "high"
+               OpName %108 "m"
+               OpName %117 "i"
+               OpName %127 "from"
+               OpName %129 "mid"
+               OpName %134 "to"
+               OpName %143 "param"
+               OpName %145 "param"
+               OpName %147 "param"
+               OpName %156 "i"
+               OpName %159 "buf0"
+               OpMemberName %159 0 "injectionSwitch"
+               OpName %161 ""
+               OpName %225 "j"
+               OpName %243 "gl_FragCoord"
+               OpName %254 "grey"
+               OpName %369 "_GLF_color"
+               OpMemberDecorate %159 0 Offset 0
+               OpDecorate %159 Block
+               OpDecorate %161 DescriptorSet 0
+               OpDecorate %161 Binding 0
+               OpDecorate %243 BuiltIn FragCoord
+               OpDecorate %369 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeInt 32 1
+          %7 = OpTypePointer Function %6
+          %8 = OpTypeFunction %2 %7 %7 %7
+         %22 = OpConstant %6 1
+         %31 = OpTypeBool
+         %37 = OpTypeInt 32 0
+         %38 = OpConstant %37 10
+         %39 = OpTypeArray %6 %38
+         %40 = OpTypePointer Private %39
+         %41 = OpVariable %40 Private
+         %43 = OpTypePointer Private %6
+         %52 = OpVariable %40 Private
+         %74 = OpConstant %6 10
+        %105 = OpConstant %6 0
+        %107 = OpConstant %6 9
+        %136 = OpConstant %6 2
+        %157 = OpTypeFloat 32
+        %158 = OpTypeVector %157 2
+        %159 = OpTypeStruct %158
+        %160 = OpTypePointer Uniform %159
+        %161 = OpVariable %160 Uniform
+        %162 = OpConstant %37 0
+        %163 = OpTypePointer Uniform %157
+        %184 = OpConstant %6 4
+        %188 = OpConstant %6 3
+        %201 = OpConstant %6 -1
+        %205 = OpConstant %6 -2
+        %209 = OpConstant %6 -3
+        %213 = OpConstant %6 -4
+        %217 = OpConstant %6 -5
+        %241 = OpTypeVector %157 4
+        %242 = OpTypePointer Input %241
+        %243 = OpVariable %242 Input
+        %244 = OpConstant %37 1
+        %245 = OpTypePointer Input %157
+        %249 = OpConstant %6 30
+        %253 = OpTypePointer Function %157
+        %255 = OpConstant %157 0.5
+        %259 = OpConstant %157 10
+        %266 = OpConstant %6 60
+        %279 = OpConstant %6 90
+        %292 = OpConstant %6 120
+        %305 = OpConstant %6 150
+        %314 = OpConstant %6 180
+        %318 = OpConstant %6 5
+        %328 = OpConstant %6 210
+        %332 = OpConstant %6 6
+        %342 = OpConstant %6 240
+        %346 = OpConstant %6 7
+        %356 = OpConstant %6 270
+        %360 = OpConstant %6 8
+        %368 = OpTypePointer Output %241
+        %369 = OpVariable %368 Output
+        %371 = OpTypeVector %157 3
+        %373 = OpConstant %157 1
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+        %156 = OpVariable %7 Function
+        %225 = OpVariable %7 Function
+        %254 = OpVariable %253 Function
+        %164 = OpAccessChain %163 %161 %105 %162
+        %165 = OpLoad %157 %164
+        %166 = OpConvertFToS %6 %165
+               OpStore %156 %166
+               OpBranch %167
+        %167 = OpLabel
+               OpLoopMerge %169 %170 None
+               OpBranch %168
+        %168 = OpLabel
+        %171 = OpLoad %6 %156
+               OpSelectionMerge %182 None
+               OpSwitch %171 %182 0 %172 1 %173 2 %174 3 %175 4 %176 5 %177 6 %178 7 %179 8 %180 9 %181
+        %172 = OpLabel
+        %183 = OpLoad %6 %156
+        %185 = OpAccessChain %43 %41 %183
+               OpStore %185 %184
+               OpBranch %182
+        %173 = OpLabel
+        %187 = OpLoad %6 %156
+        %189 = OpAccessChain %43 %41 %187
+               OpStore %189 %188
+               OpBranch %182
+        %174 = OpLabel
+        %191 = OpLoad %6 %156
+        %192 = OpAccessChain %43 %41 %191
+               OpStore %192 %136
+               OpBranch %182
+        %175 = OpLabel
+        %194 = OpLoad %6 %156
+        %195 = OpAccessChain %43 %41 %194
+               OpStore %195 %22
+               OpBranch %182
+        %176 = OpLabel
+        %197 = OpLoad %6 %156
+        %198 = OpAccessChain %43 %41 %197
+               OpStore %198 %105
+               OpBranch %182
+        %177 = OpLabel
+        %200 = OpLoad %6 %156
+        %202 = OpAccessChain %43 %41 %200
+               OpStore %202 %201
+               OpBranch %182
+        %178 = OpLabel
+        %204 = OpLoad %6 %156
+        %206 = OpAccessChain %43 %41 %204
+               OpStore %206 %205
+               OpBranch %182
+        %179 = OpLabel
+        %208 = OpLoad %6 %156
+        %210 = OpAccessChain %43 %41 %208
+               OpStore %210 %209
+               OpBranch %182
+        %180 = OpLabel
+        %212 = OpLoad %6 %156
+        %214 = OpAccessChain %43 %41 %212
+               OpStore %214 %213
+               OpBranch %182
+        %181 = OpLabel
+        %216 = OpLoad %6 %156
+        %218 = OpAccessChain %43 %41 %216
+               OpStore %218 %217
+               OpBranch %182
+        %182 = OpLabel
+        %221 = OpLoad %6 %156
+        %222 = OpIAdd %6 %221 %22
+               OpStore %156 %222
+               OpBranch %170
+        %170 = OpLabel
+        %223 = OpLoad %6 %156
+        %224 = OpSLessThan %31 %223 %74
+               OpBranchConditional %224 %167 %169
+        %169 = OpLabel
+               OpStore %225 %105
+               OpBranch %226
+        %226 = OpLabel
+               OpLoopMerge %228 %229 None
+               OpBranch %230
+        %230 = OpLabel
+        %231 = OpLoad %6 %225
+        %232 = OpSLessThan %31 %231 %74
+               OpBranchConditional %232 %227 %228
+        %227 = OpLabel
+        %233 = OpLoad %6 %225
+        %234 = OpLoad %6 %225
+        %235 = OpAccessChain %43 %41 %234
+        %236 = OpLoad %6 %235
+        %237 = OpAccessChain %43 %52 %233
+               OpStore %237 %236
+               OpBranch %229
+        %229 = OpLabel
+        %238 = OpLoad %6 %225
+        %239 = OpIAdd %6 %238 %22
+               OpStore %225 %239
+               OpBranch %226
+        %228 = OpLabel
+        %240 = OpFunctionCall %2 %14
+        %246 = OpAccessChain %245 %243 %244
+        %247 = OpLoad %157 %246
+        %248 = OpConvertFToS %6 %247
+        %250 = OpSLessThan %31 %248 %249
+               OpSelectionMerge %252 None
+               OpBranchConditional %250 %251 %262
+        %251 = OpLabel
+        %256 = OpAccessChain %43 %41 %105
+        %257 = OpLoad %6 %256
+        %258 = OpConvertSToF %157 %257
+        %260 = OpFDiv %157 %258 %259
+        %261 = OpFAdd %157 %255 %260
+               OpStore %254 %261
+               OpBranch %252
+        %262 = OpLabel
+        %263 = OpAccessChain %245 %243 %244
+        %264 = OpLoad %157 %263
+        %265 = OpConvertFToS %6 %264
+        %267 = OpSLessThan %31 %265 %266
+               OpSelectionMerge %269 None
+               OpBranchConditional %267 %268 %275
+        %268 = OpLabel
+        %270 = OpAccessChain %43 %41 %22
+        %271 = OpLoad %6 %270
+        %272 = OpConvertSToF %157 %271
+        %273 = OpFDiv %157 %272 %259
+        %274 = OpFAdd %157 %255 %273
+               OpStore %254 %274
+               OpBranch %269
+        %275 = OpLabel
+        %276 = OpAccessChain %245 %243 %244
+        %277 = OpLoad %157 %276
+        %278 = OpConvertFToS %6 %277
+        %280 = OpSLessThan %31 %278 %279
+               OpSelectionMerge %282 None
+               OpBranchConditional %280 %281 %288
+        %281 = OpLabel
+        %283 = OpAccessChain %43 %41 %136
+        %284 = OpLoad %6 %283
+        %285 = OpConvertSToF %157 %284
+        %286 = OpFDiv %157 %285 %259
+        %287 = OpFAdd %157 %255 %286
+               OpStore %254 %287
+               OpBranch %282
+        %288 = OpLabel
+        %289 = OpAccessChain %245 %243 %244
+        %290 = OpLoad %157 %289
+        %291 = OpConvertFToS %6 %290
+        %293 = OpSLessThan %31 %291 %292
+               OpSelectionMerge %295 None
+               OpBranchConditional %293 %294 %301
+        %294 = OpLabel
+        %296 = OpAccessChain %43 %41 %188
+        %297 = OpLoad %6 %296
+        %298 = OpConvertSToF %157 %297
+        %299 = OpFDiv %157 %298 %259
+        %300 = OpFAdd %157 %255 %299
+               OpStore %254 %300
+               OpBranch %295
+        %301 = OpLabel
+        %302 = OpAccessChain %245 %243 %244
+        %303 = OpLoad %157 %302
+        %304 = OpConvertFToS %6 %303
+        %306 = OpSLessThan %31 %304 %305
+               OpSelectionMerge %308 None
+               OpBranchConditional %306 %307 %310
+        %307 = OpLabel
+               OpKill
+        %310 = OpLabel
+        %311 = OpAccessChain %245 %243 %244
+        %312 = OpLoad %157 %311
+        %313 = OpConvertFToS %6 %312
+        %315 = OpSLessThan %31 %313 %314
+               OpSelectionMerge %317 None
+               OpBranchConditional %315 %316 %324
+        %316 = OpLabel
+        %319 = OpAccessChain %43 %41 %318
+        %320 = OpLoad %6 %319
+        %321 = OpConvertSToF %157 %320
+        %322 = OpFDiv %157 %321 %259
+        %323 = OpFAdd %157 %255 %322
+               OpStore %254 %323
+               OpBranch %317
+        %324 = OpLabel
+        %325 = OpAccessChain %245 %243 %244
+        %326 = OpLoad %157 %325
+        %327 = OpConvertFToS %6 %326
+        %329 = OpSLessThan %31 %327 %328
+               OpSelectionMerge %331 None
+               OpBranchConditional %329 %330 %338
+        %330 = OpLabel
+        %333 = OpAccessChain %43 %41 %332
+        %334 = OpLoad %6 %333
+        %335 = OpConvertSToF %157 %334
+        %336 = OpFDiv %157 %335 %259
+        %337 = OpFAdd %157 %255 %336
+               OpStore %254 %337
+               OpBranch %331
+        %338 = OpLabel
+        %339 = OpAccessChain %245 %243 %244
+        %340 = OpLoad %157 %339
+        %341 = OpConvertFToS %6 %340
+        %343 = OpSLessThan %31 %341 %342
+               OpSelectionMerge %345 None
+               OpBranchConditional %343 %344 %352
+        %344 = OpLabel
+        %347 = OpAccessChain %43 %41 %346
+        %348 = OpLoad %6 %347
+        %349 = OpConvertSToF %157 %348
+        %350 = OpFDiv %157 %349 %259
+        %351 = OpFAdd %157 %255 %350
+               OpStore %254 %351
+               OpBranch %345
+        %352 = OpLabel
+        %353 = OpAccessChain %245 %243 %244
+        %354 = OpLoad %157 %353
+        %355 = OpConvertFToS %6 %354
+        %357 = OpSLessThan %31 %355 %356
+               OpSelectionMerge %359 None
+               OpBranchConditional %357 %358 %366
+        %358 = OpLabel
+        %361 = OpAccessChain %43 %41 %360
+        %362 = OpLoad %6 %361
+        %363 = OpConvertSToF %157 %362
+        %364 = OpFDiv %157 %363 %259
+        %365 = OpFAdd %157 %255 %364
+               OpStore %254 %365
+               OpBranch %359
+        %366 = OpLabel
+               OpKill
+        %359 = OpLabel
+               OpBranch %345
+        %345 = OpLabel
+               OpBranch %331
+        %331 = OpLabel
+               OpBranch %317
+        %317 = OpLabel
+               OpBranch %308
+        %308 = OpLabel
+               OpBranch %295
+        %295 = OpLabel
+               OpBranch %282
+        %282 = OpLabel
+               OpBranch %269
+        %269 = OpLabel
+               OpBranch %252
+        %252 = OpLabel
+        %370 = OpLoad %157 %254
+        %372 = OpCompositeConstruct %371 %370 %370 %370
+        %374 = OpCompositeExtract %157 %372 0
+        %375 = OpCompositeExtract %157 %372 1
+        %376 = OpCompositeExtract %157 %372 2
+        %377 = OpCompositeConstruct %241 %374 %375 %376 %373
+               OpStore %369 %377
+               OpReturn
+               OpFunctionEnd
+         %12 = OpFunction %2 None %8
+          %9 = OpFunctionParameter %7
+         %10 = OpFunctionParameter %7
+         %11 = OpFunctionParameter %7
+         %13 = OpLabel
+         %16 = OpVariable %7 Function
+         %18 = OpVariable %7 Function
+         %20 = OpVariable %7 Function
+         %87 = OpVariable %7 Function
+         %17 = OpLoad %6 %9
+               OpStore %16 %17
+         %19 = OpLoad %6 %9
+               OpStore %18 %19
+         %21 = OpLoad %6 %10
+         %23 = OpIAdd %6 %21 %22
+               OpStore %20 %23
+               OpBranch %24
+         %24 = OpLabel
+               OpLoopMerge %26 %27 None
+               OpBranch %28
+         %28 = OpLabel
+         %29 = OpLoad %6 %18
+         %30 = OpLoad %6 %10
+         %32 = OpSLessThanEqual %31 %29 %30
+         %33 = OpLoad %6 %20
+         %34 = OpLoad %6 %11
+         %35 = OpSLessThanEqual %31 %33 %34
+         %36 = OpLogicalAnd %31 %32 %35
+               OpBranchConditional %36 %25 %26
+         %25 = OpLabel
+         %42 = OpLoad %6 %18
+         %44 = OpAccessChain %43 %41 %42
+         %45 = OpLoad %6 %44
+         %46 = OpLoad %6 %20
+         %47 = OpAccessChain %43 %41 %46
+         %48 = OpLoad %6 %47
+         %49 = OpSLessThan %31 %45 %48
+               OpSelectionMerge %51 None
+               OpBranchConditional %49 %50 %60
+         %50 = OpLabel
+         %53 = OpLoad %6 %16
+         %54 = OpIAdd %6 %53 %22
+               OpStore %16 %54
+         %55 = OpLoad %6 %18
+         %56 = OpIAdd %6 %55 %22
+               OpStore %18 %56
+         %57 = OpAccessChain %43 %41 %55
+         %58 = OpLoad %6 %57
+         %59 = OpAccessChain %43 %52 %53
+               OpStore %59 %58
+               OpBranch %51
+         %60 = OpLabel
+         %61 = OpLoad %6 %16
+         %62 = OpIAdd %6 %61 %22
+               OpStore %16 %62
+         %63 = OpLoad %6 %20
+         %64 = OpIAdd %6 %63 %22
+               OpStore %20 %64
+         %65 = OpAccessChain %43 %41 %63
+         %66 = OpLoad %6 %65
+         %67 = OpAccessChain %43 %52 %61
+               OpStore %67 %66
+               OpBranch %51
+         %51 = OpLabel
+               OpBranch %27
+         %27 = OpLabel
+               OpBranch %24
+         %26 = OpLabel
+               OpBranch %68
+         %68 = OpLabel
+               OpLoopMerge %70 %71 None
+               OpBranch %72
+         %72 = OpLabel
+         %73 = OpLoad %6 %18
+         %75 = OpSLessThan %31 %73 %74
+         %76 = OpLoad %6 %18
+         %77 = OpLoad %6 %10
+         %78 = OpSLessThanEqual %31 %76 %77
+         %79 = OpLogicalAnd %31 %75 %78
+               OpBranchConditional %79 %69 %70
+         %69 = OpLabel
+         %80 = OpLoad %6 %16
+         %81 = OpIAdd %6 %80 %22
+               OpStore %16 %81
+         %82 = OpLoad %6 %18
+         %83 = OpIAdd %6 %82 %22
+               OpStore %18 %83
+         %84 = OpAccessChain %43 %41 %82
+         %85 = OpLoad %6 %84
+         %86 = OpAccessChain %43 %52 %80
+               OpStore %86 %85
+               OpBranch %71
+         %71 = OpLabel
+               OpBranch %68
+         %70 = OpLabel
+         %88 = OpLoad %6 %9
+               OpStore %87 %88
+               OpBranch %89
+         %89 = OpLabel
+               OpLoopMerge %91 %92 None
+               OpBranch %93
+         %93 = OpLabel
+         %94 = OpLoad %6 %87
+         %95 = OpLoad %6 %11
+         %96 = OpSLessThanEqual %31 %94 %95
+               OpBranchConditional %96 %90 %91
+         %90 = OpLabel
+         %97 = OpLoad %6 %87
+         %98 = OpLoad %6 %87
+         %99 = OpAccessChain %43 %52 %98
+        %100 = OpLoad %6 %99
+        %101 = OpAccessChain %43 %41 %97
+               OpStore %101 %100
+               OpBranch %92
+         %92 = OpLabel
+        %102 = OpLoad %6 %87
+        %103 = OpIAdd %6 %102 %22
+               OpStore %87 %103
+               OpBranch %89
+         %91 = OpLabel
+               OpReturn
+               OpFunctionEnd
+         %14 = OpFunction %2 None %3
+         %15 = OpLabel
+        %104 = OpVariable %7 Function
+        %106 = OpVariable %7 Function
+        %108 = OpVariable %7 Function
+        %117 = OpVariable %7 Function
+        %127 = OpVariable %7 Function
+        %129 = OpVariable %7 Function
+        %134 = OpVariable %7 Function
+        %143 = OpVariable %7 Function
+        %145 = OpVariable %7 Function
+        %147 = OpVariable %7 Function
+               OpStore %104 %105
+               OpStore %106 %107
+               OpStore %108 %22
+               OpBranch %109
+        %109 = OpLabel
+               OpLoopMerge %111 %112 None
+               OpBranch %113
+        %113 = OpLabel
+        %114 = OpLoad %6 %108
+        %115 = OpLoad %6 %106
+        %116 = OpSLessThanEqual %31 %114 %115
+               OpBranchConditional %116 %110 %111
+        %110 = OpLabel
+        %118 = OpLoad %6 %104
+               OpStore %117 %118
+               OpBranch %119
+        %119 = OpLabel
+               OpLoopMerge %121 %122 None
+               OpBranch %123
+        %123 = OpLabel
+        %124 = OpLoad %6 %117
+        %125 = OpLoad %6 %106
+        %126 = OpSLessThan %31 %124 %125
+               OpBranchConditional %126 %120 %121
+        %120 = OpLabel
+        %128 = OpLoad %6 %117
+               OpStore %127 %128
+        %130 = OpLoad %6 %117
+        %131 = OpLoad %6 %108
+        %132 = OpIAdd %6 %130 %131
+        %133 = OpISub %6 %132 %22
+               OpStore %129 %133
+        %135 = OpLoad %6 %117
+        %137 = OpLoad %6 %108
+        %138 = OpIMul %6 %136 %137
+        %139 = OpIAdd %6 %135 %138
+        %140 = OpISub %6 %139 %22
+        %141 = OpLoad %6 %106
+        %142 = OpExtInst %6 %1 SMin %140 %141
+               OpStore %134 %142
+        %144 = OpLoad %6 %127
+               OpStore %143 %144
+        %146 = OpLoad %6 %129
+               OpStore %145 %146
+        %148 = OpLoad %6 %134
+               OpStore %147 %148
+        %149 = OpFunctionCall %2 %12 %143 %145 %147
+               OpBranch %122
+        %122 = OpLabel
+        %150 = OpLoad %6 %108
+        %151 = OpIMul %6 %136 %150
+        %152 = OpLoad %6 %117
+        %153 = OpIAdd %6 %152 %151
+               OpStore %117 %153
+               OpBranch %119
+        %121 = OpLabel
+               OpBranch %112
+        %112 = OpLabel
+        %154 = OpLoad %6 %108
+        %155 = OpIMul %6 %136 %154
+               OpStore %108 %155
+               OpBranch %109
+        %111 = OpLabel
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for reference
+
+# injectionSwitch
+BUFFER reference_injectionSwitch DATA_TYPE vec2<float> STD140 DATA
+ 0.0 1.0
+END
+
+BUFFER reference_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics reference_pipeline
+  ATTACH reference_vertex_shader
+  ATTACH reference_fragment_shader
+  FRAMEBUFFER_SIZE 256 256
+  BIND BUFFER reference_framebuffer AS color LOCATION 0
+  BIND BUFFER reference_injectionSwitch AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR reference_pipeline 0 0 0 255
+
+CLEAR reference_pipeline
+RUN reference_pipeline DRAW_RECT POS 0 0 SIZE 256 256
+
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 7
+; Bound: 679
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %243 %369
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 320
+               OpName %4 "main"
+               OpName %12 "merge(i1;i1;i1;"
+               OpName %9 "from"
+               OpName %10 "mid"
+               OpName %11 "to"
+               OpName %14 "mergeSort("
+               OpName %16 "k"
+               OpName %18 "i"
+               OpName %20 "j"
+               OpName %41 "data"
+               OpName %52 "temp"
+               OpName %87 "i"
+               OpName %104 "low"
+               OpName %106 "high"
+               OpName %108 "m"
+               OpName %117 "i"
+               OpName %127 "from"
+               OpName %129 "mid"
+               OpName %134 "to"
+               OpName %143 "param"
+               OpName %145 "param"
+               OpName %147 "param"
+               OpName %156 "i"
+               OpName %159 "buf0"
+               OpMemberName %159 0 "injectionSwitch"
+               OpName %161 ""
+               OpName %225 "j"
+               OpName %243 "gl_FragCoord"
+               OpName %254 "grey"
+               OpName %369 "_GLF_color"
+               OpMemberDecorate %159 0 Offset 0
+               OpDecorate %159 Block
+               OpDecorate %161 DescriptorSet 0
+               OpDecorate %161 Binding 0
+               OpDecorate %243 BuiltIn FragCoord
+               OpDecorate %369 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeInt 32 1
+          %7 = OpTypePointer Function %6
+          %8 = OpTypeFunction %2 %7 %7 %7
+         %22 = OpConstant %6 1
+         %31 = OpTypeBool
+         %37 = OpTypeInt 32 0
+         %38 = OpConstant %37 10
+         %39 = OpTypeArray %6 %38
+         %40 = OpTypePointer Private %39
+         %41 = OpVariable %40 Private
+         %43 = OpTypePointer Private %6
+         %52 = OpVariable %40 Private
+         %74 = OpConstant %6 10
+        %105 = OpConstant %6 0
+        %107 = OpConstant %6 9
+        %136 = OpConstant %6 2
+        %157 = OpTypeFloat 32
+        %158 = OpTypeVector %157 2
+        %159 = OpTypeStruct %158
+        %160 = OpTypePointer Uniform %159
+        %161 = OpVariable %160 Uniform
+        %162 = OpConstant %37 0
+        %163 = OpTypePointer Uniform %157
+        %184 = OpConstant %6 4
+        %188 = OpConstant %6 3
+        %201 = OpConstant %6 -1
+        %205 = OpConstant %6 -2
+        %209 = OpConstant %6 -3
+        %213 = OpConstant %6 -4
+        %217 = OpConstant %6 -5
+        %241 = OpTypeVector %157 4
+        %242 = OpTypePointer Input %241
+        %243 = OpVariable %242 Input
+        %244 = OpConstant %37 1
+        %245 = OpTypePointer Input %157
+        %249 = OpConstant %6 30
+        %253 = OpTypePointer Function %157
+        %255 = OpConstant %157 0.5
+        %259 = OpConstant %157 10
+        %266 = OpConstant %6 60
+        %279 = OpConstant %6 90
+        %292 = OpConstant %6 120
+        %305 = OpConstant %6 150
+        %314 = OpConstant %6 180
+        %318 = OpConstant %6 5
+        %328 = OpConstant %6 210
+        %332 = OpConstant %6 6
+        %342 = OpConstant %6 240
+        %346 = OpConstant %6 7
+        %356 = OpConstant %6 270
+        %360 = OpConstant %6 8
+        %368 = OpTypePointer Output %241
+        %369 = OpVariable %368 Output
+        %371 = OpTypeVector %157 3
+        %373 = OpConstant %157 1
+        %637 = OpConstant %6 0
+        %638 = OpConstantComposite %39 %637 %637 %637 %637 %637 %637 %637 %637 %637 %637
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+        %488 = OpVariable %7 Function
+        %487 = OpVariable %7 Function
+        %486 = OpVariable %7 Function
+        %485 = OpVariable %7 Function
+        %484 = OpVariable %7 Function
+        %483 = OpVariable %7 Function
+        %482 = OpVariable %7 Function
+        %481 = OpVariable %7 Function
+        %480 = OpVariable %7 Function
+        %479 = OpVariable %7 Function
+        %156 = OpVariable %7 Function
+        %225 = OpVariable %7 Function
+        %254 = OpVariable %253 Function
+        %164 = OpAccessChain %163 %161 %105 %162
+        %165 = OpLoad %157 %164
+        %166 = OpConvertFToS %6 %165
+               OpStore %156 %166
+               OpBranch %167
+        %167 = OpLabel
+               OpLoopMerge %169 %170 None
+               OpBranch %168
+        %168 = OpLabel
+        %171 = OpLoad %6 %156
+               OpSelectionMerge %182 None
+               OpSwitch %171 %182 0 %172 1 %173 2 %174 3 %175 4 %176 5 %177 6 %178 7 %179 8 %180 9 %181
+        %172 = OpLabel
+        %183 = OpLoad %6 %156
+        %185 = OpAccessChain %43 %41 %183
+               OpStore %185 %184
+               OpBranch %182
+        %173 = OpLabel
+        %187 = OpLoad %6 %156
+        %189 = OpAccessChain %43 %41 %187
+               OpStore %189 %188
+               OpBranch %182
+        %174 = OpLabel
+        %191 = OpLoad %6 %156
+        %192 = OpAccessChain %43 %41 %191
+               OpStore %192 %136
+               OpBranch %182
+        %175 = OpLabel
+        %194 = OpLoad %6 %156
+        %195 = OpAccessChain %43 %41 %194
+               OpStore %195 %22
+               OpBranch %182
+        %176 = OpLabel
+        %197 = OpLoad %6 %156
+        %198 = OpAccessChain %43 %41 %197
+               OpStore %198 %105
+               OpBranch %182
+        %177 = OpLabel
+        %200 = OpLoad %6 %156
+        %202 = OpAccessChain %43 %41 %200
+               OpStore %202 %201
+               OpBranch %182
+        %178 = OpLabel
+        %204 = OpLoad %6 %156
+        %206 = OpAccessChain %43 %41 %204
+               OpStore %206 %205
+               OpBranch %182
+        %179 = OpLabel
+        %208 = OpLoad %6 %156
+        %210 = OpAccessChain %43 %41 %208
+               OpStore %210 %209
+               OpBranch %182
+        %180 = OpLabel
+        %212 = OpLoad %6 %156
+        %214 = OpAccessChain %43 %41 %212
+               OpStore %214 %213
+               OpBranch %182
+        %181 = OpLabel
+        %216 = OpLoad %6 %156
+        %218 = OpAccessChain %43 %41 %216
+               OpStore %218 %217
+               OpBranch %182
+        %182 = OpLabel
+        %221 = OpLoad %6 %156
+        %222 = OpIAdd %6 %221 %22
+               OpStore %156 %222
+               OpBranch %170
+        %170 = OpLabel
+        %223 = OpLoad %6 %156
+        %224 = OpSLessThan %31 %223 %74
+               OpBranchConditional %224 %167 %169
+        %169 = OpLabel
+               OpStore %225 %105
+               OpBranch %226
+        %226 = OpLabel
+               OpLoopMerge %228 %229 None
+               OpBranch %230
+        %230 = OpLabel
+        %231 = OpLoad %6 %225
+        %232 = OpSLessThan %31 %231 %74
+               OpBranchConditional %232 %227 %228
+        %227 = OpLabel
+        %233 = OpLoad %6 %225
+        %234 = OpLoad %6 %225
+        %235 = OpAccessChain %43 %41 %234
+        %236 = OpLoad %6 %235
+        %237 = OpAccessChain %43 %52 %233
+               OpStore %237 %236
+               OpBranch %229
+        %229 = OpLabel
+        %238 = OpLoad %6 %225
+        %239 = OpIAdd %6 %238 %22
+               OpStore %225 %239
+               OpBranch %226
+        %228 = OpLabel
+               OpStore %479 %105
+               OpStore %480 %107
+               OpStore %481 %22
+               OpBranch %489
+        %489 = OpLabel
+               OpLoopMerge %527 %524 None
+               OpBranch %490
+        %490 = OpLabel
+        %491 = OpLoad %6 %481
+        %492 = OpLoad %6 %480
+        %493 = OpSLessThanEqual %31 %491 %492
+               OpBranchConditional %493 %494 %527
+        %494 = OpLabel
+        %495 = OpLoad %6 %479
+               OpStore %482 %495
+               OpBranch %496
+        %496 = OpLabel
+               OpLoopMerge %523 %518 None
+               OpBranch %497
+        %497 = OpLabel
+        %498 = OpLoad %6 %482
+        %499 = OpLoad %6 %480
+        %500 = OpSLessThan %31 %498 %499
+               OpBranchConditional %500 %501 %523
+        %501 = OpLabel
+        %502 = OpLoad %6 %482
+               OpStore %483 %502
+        %503 = OpLoad %6 %482
+        %504 = OpLoad %6 %481
+        %505 = OpIAdd %6 %503 %504
+        %678 = OpLoad %39 %41
+               OpStore %41 %638
+               OpStore %41 %678
+        %506 = OpISub %6 %505 %22
+               OpStore %484 %506
+        %507 = OpLoad %6 %482
+        %508 = OpLoad %6 %481
+        %509 = OpIMul %6 %136 %508
+        %510 = OpIAdd %6 %507 %509
+        %511 = OpISub %6 %510 %22
+        %512 = OpLoad %6 %480
+        %513 = OpExtInst %6 %1 SMin %511 %512
+               OpStore %485 %513
+        %514 = OpLoad %6 %483
+               OpStore %486 %514
+        %515 = OpLoad %6 %484
+               OpStore %487 %515
+        %516 = OpLoad %6 %485
+               OpStore %488 %516
+        %517 = OpFunctionCall %2 %12 %486 %487 %488
+               OpBranch %518
+        %518 = OpLabel
+        %519 = OpLoad %6 %481
+        %520 = OpIMul %6 %136 %519
+        %521 = OpLoad %6 %482
+        %522 = OpIAdd %6 %521 %520
+               OpStore %482 %522
+               OpBranch %496
+        %523 = OpLabel
+               OpBranch %524
+        %524 = OpLabel
+        %525 = OpLoad %6 %481
+        %526 = OpIMul %6 %136 %525
+               OpStore %481 %526
+               OpBranch %489
+        %527 = OpLabel
+               OpBranch %478
+        %478 = OpLabel
+        %246 = OpAccessChain %245 %243 %244
+        %247 = OpLoad %157 %246
+        %248 = OpConvertFToS %6 %247
+        %250 = OpSLessThan %31 %248 %249
+               OpSelectionMerge %252 None
+               OpBranchConditional %250 %251 %262
+        %251 = OpLabel
+        %256 = OpAccessChain %43 %41 %105
+        %257 = OpLoad %6 %256
+        %258 = OpConvertSToF %157 %257
+        %260 = OpFDiv %157 %258 %259
+        %261 = OpFAdd %157 %255 %260
+               OpStore %254 %261
+               OpBranch %252
+        %262 = OpLabel
+        %263 = OpAccessChain %245 %243 %244
+        %264 = OpLoad %157 %263
+        %265 = OpConvertFToS %6 %264
+        %267 = OpSLessThan %31 %265 %266
+               OpSelectionMerge %269 None
+               OpBranchConditional %267 %268 %275
+        %268 = OpLabel
+        %270 = OpAccessChain %43 %41 %22
+        %271 = OpLoad %6 %270
+        %272 = OpConvertSToF %157 %271
+        %273 = OpFDiv %157 %272 %259
+        %274 = OpFAdd %157 %255 %273
+               OpStore %254 %274
+               OpBranch %269
+        %275 = OpLabel
+        %276 = OpAccessChain %245 %243 %244
+        %277 = OpLoad %157 %276
+        %278 = OpConvertFToS %6 %277
+        %280 = OpSLessThan %31 %278 %279
+               OpSelectionMerge %282 None
+               OpBranchConditional %280 %281 %288
+        %281 = OpLabel
+        %283 = OpAccessChain %43 %41 %136
+        %284 = OpLoad %6 %283
+        %285 = OpConvertSToF %157 %284
+        %286 = OpFDiv %157 %285 %259
+        %287 = OpFAdd %157 %255 %286
+               OpStore %254 %287
+               OpBranch %282
+        %288 = OpLabel
+        %289 = OpAccessChain %245 %243 %244
+        %290 = OpLoad %157 %289
+        %291 = OpConvertFToS %6 %290
+        %293 = OpSLessThan %31 %291 %292
+               OpSelectionMerge %295 None
+               OpBranchConditional %293 %294 %301
+        %294 = OpLabel
+        %296 = OpAccessChain %43 %41 %188
+        %297 = OpLoad %6 %296
+        %298 = OpConvertSToF %157 %297
+        %299 = OpFDiv %157 %298 %259
+        %300 = OpFAdd %157 %255 %299
+               OpStore %254 %300
+               OpBranch %295
+        %301 = OpLabel
+        %302 = OpAccessChain %245 %243 %244
+        %303 = OpLoad %157 %302
+        %304 = OpConvertFToS %6 %303
+        %306 = OpSLessThan %31 %304 %305
+               OpSelectionMerge %308 None
+               OpBranchConditional %306 %307 %310
+        %307 = OpLabel
+               OpKill
+        %310 = OpLabel
+        %311 = OpAccessChain %245 %243 %244
+        %312 = OpLoad %157 %311
+        %313 = OpConvertFToS %6 %312
+        %315 = OpSLessThan %31 %313 %314
+               OpSelectionMerge %317 None
+               OpBranchConditional %315 %316 %324
+        %316 = OpLabel
+        %319 = OpAccessChain %43 %41 %318
+        %320 = OpLoad %6 %319
+        %321 = OpConvertSToF %157 %320
+        %322 = OpFDiv %157 %321 %259
+        %323 = OpFAdd %157 %255 %322
+               OpStore %254 %323
+               OpBranch %317
+        %324 = OpLabel
+        %325 = OpAccessChain %245 %243 %244
+        %326 = OpLoad %157 %325
+        %327 = OpConvertFToS %6 %326
+        %329 = OpSLessThan %31 %327 %328
+               OpSelectionMerge %331 None
+               OpBranchConditional %329 %330 %338
+        %330 = OpLabel
+        %333 = OpAccessChain %43 %41 %332
+        %334 = OpLoad %6 %333
+        %335 = OpConvertSToF %157 %334
+        %336 = OpFDiv %157 %335 %259
+        %337 = OpFAdd %157 %255 %336
+               OpStore %254 %337
+               OpBranch %331
+        %338 = OpLabel
+        %339 = OpAccessChain %245 %243 %244
+        %340 = OpLoad %157 %339
+        %341 = OpConvertFToS %6 %340
+        %343 = OpSLessThan %31 %341 %342
+               OpSelectionMerge %345 None
+               OpBranchConditional %343 %344 %352
+        %344 = OpLabel
+        %347 = OpAccessChain %43 %41 %346
+        %348 = OpLoad %6 %347
+        %349 = OpConvertSToF %157 %348
+        %350 = OpFDiv %157 %349 %259
+        %351 = OpFAdd %157 %255 %350
+               OpStore %254 %351
+               OpBranch %345
+        %352 = OpLabel
+        %353 = OpAccessChain %245 %243 %244
+        %354 = OpLoad %157 %353
+        %355 = OpConvertFToS %6 %354
+        %357 = OpSLessThan %31 %355 %356
+               OpSelectionMerge %359 None
+               OpBranchConditional %357 %358 %366
+        %358 = OpLabel
+        %361 = OpAccessChain %43 %41 %360
+        %362 = OpLoad %6 %361
+        %363 = OpConvertSToF %157 %362
+        %364 = OpFDiv %157 %363 %259
+        %365 = OpFAdd %157 %255 %364
+               OpStore %254 %365
+               OpBranch %359
+        %366 = OpLabel
+               OpKill
+        %359 = OpLabel
+               OpBranch %345
+        %345 = OpLabel
+               OpBranch %331
+        %331 = OpLabel
+               OpBranch %317
+        %317 = OpLabel
+               OpBranch %308
+        %308 = OpLabel
+               OpBranch %295
+        %295 = OpLabel
+               OpBranch %282
+        %282 = OpLabel
+               OpBranch %269
+        %269 = OpLabel
+               OpBranch %252
+        %252 = OpLabel
+        %370 = OpLoad %157 %254
+        %372 = OpCompositeConstruct %371 %370 %370 %370
+        %374 = OpCompositeExtract %157 %372 0
+        %375 = OpCompositeExtract %157 %372 1
+        %376 = OpCompositeExtract %157 %372 2
+        %377 = OpCompositeConstruct %241 %374 %375 %376 %373
+               OpStore %369 %377
+               OpReturn
+               OpFunctionEnd
+         %12 = OpFunction %2 None %8
+          %9 = OpFunctionParameter %7
+         %10 = OpFunctionParameter %7
+         %11 = OpFunctionParameter %7
+         %13 = OpLabel
+         %16 = OpVariable %7 Function
+         %18 = OpVariable %7 Function
+         %20 = OpVariable %7 Function
+         %87 = OpVariable %7 Function
+         %17 = OpLoad %6 %9
+               OpStore %16 %17
+         %19 = OpLoad %6 %9
+               OpStore %18 %19
+         %21 = OpLoad %6 %10
+         %23 = OpIAdd %6 %21 %22
+               OpStore %20 %23
+               OpBranch %24
+         %24 = OpLabel
+               OpLoopMerge %26 %27 None
+               OpBranch %28
+         %28 = OpLabel
+         %29 = OpLoad %6 %18
+         %30 = OpLoad %6 %10
+         %32 = OpSLessThanEqual %31 %29 %30
+         %33 = OpLoad %6 %20
+         %34 = OpLoad %6 %11
+         %35 = OpSLessThanEqual %31 %33 %34
+         %36 = OpLogicalAnd %31 %32 %35
+               OpBranchConditional %36 %25 %26
+         %25 = OpLabel
+         %42 = OpLoad %6 %18
+         %44 = OpAccessChain %43 %41 %42
+         %45 = OpLoad %6 %44
+         %46 = OpLoad %6 %20
+         %47 = OpAccessChain %43 %41 %46
+         %48 = OpLoad %6 %47
+         %49 = OpSLessThan %31 %45 %48
+               OpSelectionMerge %51 None
+               OpBranchConditional %49 %50 %60
+         %50 = OpLabel
+         %53 = OpLoad %6 %16
+         %54 = OpIAdd %6 %53 %22
+               OpStore %16 %54
+         %55 = OpLoad %6 %18
+         %56 = OpIAdd %6 %55 %22
+               OpStore %18 %56
+         %57 = OpAccessChain %43 %41 %55
+         %58 = OpLoad %6 %57
+         %59 = OpAccessChain %43 %52 %53
+               OpStore %59 %58
+               OpBranch %51
+         %60 = OpLabel
+         %61 = OpLoad %6 %16
+         %62 = OpIAdd %6 %61 %22
+               OpStore %16 %62
+         %63 = OpLoad %6 %20
+         %64 = OpIAdd %6 %63 %22
+               OpStore %20 %64
+         %65 = OpAccessChain %43 %41 %63
+         %66 = OpLoad %6 %65
+         %67 = OpAccessChain %43 %52 %61
+               OpStore %67 %66
+               OpBranch %51
+         %51 = OpLabel
+               OpBranch %27
+         %27 = OpLabel
+               OpBranch %24
+         %26 = OpLabel
+               OpBranch %68
+         %68 = OpLabel
+               OpLoopMerge %70 %71 None
+               OpBranch %72
+         %72 = OpLabel
+         %73 = OpLoad %6 %18
+         %75 = OpSLessThan %31 %73 %74
+         %76 = OpLoad %6 %18
+         %77 = OpLoad %6 %10
+         %78 = OpSLessThanEqual %31 %76 %77
+         %79 = OpLogicalAnd %31 %75 %78
+               OpBranchConditional %79 %69 %70
+         %69 = OpLabel
+         %80 = OpLoad %6 %16
+         %81 = OpIAdd %6 %80 %22
+               OpStore %16 %81
+         %82 = OpLoad %6 %18
+         %83 = OpIAdd %6 %82 %22
+               OpStore %18 %83
+         %84 = OpAccessChain %43 %41 %82
+         %85 = OpLoad %6 %84
+         %86 = OpAccessChain %43 %52 %80
+               OpStore %86 %85
+               OpBranch %71
+         %71 = OpLabel
+               OpBranch %68
+         %70 = OpLabel
+         %88 = OpLoad %6 %9
+               OpStore %87 %88
+               OpBranch %89
+         %89 = OpLabel
+               OpLoopMerge %91 %92 None
+               OpBranch %93
+         %93 = OpLabel
+         %94 = OpLoad %6 %87
+         %95 = OpLoad %6 %11
+         %96 = OpSLessThanEqual %31 %94 %95
+               OpBranchConditional %96 %90 %91
+         %90 = OpLabel
+         %97 = OpLoad %6 %87
+         %98 = OpLoad %6 %87
+         %99 = OpAccessChain %43 %52 %98
+        %100 = OpLoad %6 %99
+        %101 = OpAccessChain %43 %41 %97
+               OpStore %101 %100
+               OpBranch %92
+         %92 = OpLabel
+        %102 = OpLoad %6 %87
+        %103 = OpIAdd %6 %102 %22
+               OpStore %87 %103
+               OpBranch %89
+         %91 = OpLabel
+               OpReturn
+               OpFunctionEnd
+         %14 = OpFunction %2 None %3
+         %15 = OpLabel
+        %104 = OpVariable %7 Function
+        %106 = OpVariable %7 Function
+        %108 = OpVariable %7 Function
+        %117 = OpVariable %7 Function
+        %127 = OpVariable %7 Function
+        %129 = OpVariable %7 Function
+        %134 = OpVariable %7 Function
+        %143 = OpVariable %7 Function
+        %145 = OpVariable %7 Function
+        %147 = OpVariable %7 Function
+               OpStore %104 %105
+               OpStore %106 %107
+               OpStore %108 %22
+               OpBranch %109
+        %109 = OpLabel
+               OpLoopMerge %111 %112 None
+               OpBranch %113
+        %113 = OpLabel
+        %114 = OpLoad %6 %108
+        %115 = OpLoad %6 %106
+        %116 = OpSLessThanEqual %31 %114 %115
+               OpBranchConditional %116 %110 %111
+        %110 = OpLabel
+        %118 = OpLoad %6 %104
+               OpStore %117 %118
+               OpBranch %119
+        %119 = OpLabel
+               OpLoopMerge %121 %122 None
+               OpBranch %123
+        %123 = OpLabel
+        %124 = OpLoad %6 %117
+        %125 = OpLoad %6 %106
+        %126 = OpSLessThan %31 %124 %125
+               OpBranchConditional %126 %120 %121
+        %120 = OpLabel
+        %128 = OpLoad %6 %117
+               OpStore %127 %128
+        %130 = OpLoad %6 %117
+        %131 = OpLoad %6 %108
+        %132 = OpIAdd %6 %130 %131
+        %133 = OpISub %6 %132 %22
+               OpStore %129 %133
+        %135 = OpLoad %6 %117
+        %137 = OpLoad %6 %108
+        %138 = OpIMul %6 %136 %137
+        %139 = OpIAdd %6 %135 %138
+        %140 = OpISub %6 %139 %22
+        %141 = OpLoad %6 %106
+        %142 = OpExtInst %6 %1 SMin %140 %141
+               OpStore %134 %142
+        %144 = OpLoad %6 %127
+               OpStore %143 %144
+        %146 = OpLoad %6 %129
+               OpStore %145 %146
+        %148 = OpLoad %6 %134
+               OpStore %147 %148
+        %149 = OpFunctionCall %2 %12 %143 %145 %147
+               OpBranch %122
+        %122 = OpLabel
+        %150 = OpLoad %6 %108
+        %151 = OpIMul %6 %136 %150
+        %152 = OpLoad %6 %117
+        %153 = OpIAdd %6 %152 %151
+               OpStore %117 %153
+               OpBranch %119
+        %121 = OpLabel
+               OpBranch %112
+        %112 = OpLabel
+        %154 = OpLoad %6 %108
+        %155 = OpIMul %6 %136 %154
+               OpStore %108 %155
+               OpBranch %109
+        %111 = OpLabel
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# injectionSwitch
+BUFFER variant_injectionSwitch DATA_TYPE vec2<float> STD140 DATA
+ 0.0 1.0
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 256 256
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant_injectionSwitch AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256
+
+
+SHADER vertex variant_2_vertex_shader PASSTHROUGH
+
+SHADER fragment variant_2_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 7
+; Bound: 639
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %243 %369
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 320
+               OpName %4 "main"
+               OpName %12 "merge(i1;i1;i1;"
+               OpName %9 "from"
+               OpName %10 "mid"
+               OpName %11 "to"
+               OpName %14 "mergeSort("
+               OpName %16 "k"
+               OpName %18 "i"
+               OpName %20 "j"
+               OpName %41 "data"
+               OpName %52 "temp"
+               OpName %87 "i"
+               OpName %104 "low"
+               OpName %106 "high"
+               OpName %108 "m"
+               OpName %117 "i"
+               OpName %127 "from"
+               OpName %129 "mid"
+               OpName %134 "to"
+               OpName %143 "param"
+               OpName %145 "param"
+               OpName %147 "param"
+               OpName %156 "i"
+               OpName %159 "buf0"
+               OpMemberName %159 0 "injectionSwitch"
+               OpName %161 ""
+               OpName %225 "j"
+               OpName %243 "gl_FragCoord"
+               OpName %254 "grey"
+               OpName %369 "_GLF_color"
+               OpMemberDecorate %159 0 Offset 0
+               OpDecorate %159 Block
+               OpDecorate %161 DescriptorSet 0
+               OpDecorate %161 Binding 0
+               OpDecorate %243 BuiltIn FragCoord
+               OpDecorate %369 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeInt 32 1
+          %7 = OpTypePointer Function %6
+          %8 = OpTypeFunction %2 %7 %7 %7
+         %22 = OpConstant %6 1
+         %31 = OpTypeBool
+         %37 = OpTypeInt 32 0
+         %38 = OpConstant %37 10
+         %39 = OpTypeArray %6 %38
+         %40 = OpTypePointer Private %39
+         %41 = OpVariable %40 Private
+         %43 = OpTypePointer Private %6
+         %52 = OpVariable %40 Private
+         %74 = OpConstant %6 10
+        %105 = OpConstant %6 0
+        %107 = OpConstant %6 9
+        %136 = OpConstant %6 2
+        %157 = OpTypeFloat 32
+        %158 = OpTypeVector %157 2
+        %159 = OpTypeStruct %158
+        %160 = OpTypePointer Uniform %159
+        %161 = OpVariable %160 Uniform
+        %162 = OpConstant %37 0
+        %163 = OpTypePointer Uniform %157
+        %184 = OpConstant %6 4
+        %188 = OpConstant %6 3
+        %201 = OpConstant %6 -1
+        %205 = OpConstant %6 -2
+        %209 = OpConstant %6 -3
+        %213 = OpConstant %6 -4
+        %217 = OpConstant %6 -5
+        %241 = OpTypeVector %157 4
+        %242 = OpTypePointer Input %241
+        %243 = OpVariable %242 Input
+        %244 = OpConstant %37 1
+        %245 = OpTypePointer Input %157
+        %249 = OpConstant %6 30
+        %253 = OpTypePointer Function %157
+        %255 = OpConstant %157 0.5
+        %259 = OpConstant %157 10
+        %266 = OpConstant %6 60
+        %279 = OpConstant %6 90
+        %292 = OpConstant %6 120
+        %305 = OpConstant %6 150
+        %314 = OpConstant %6 180
+        %318 = OpConstant %6 5
+        %328 = OpConstant %6 210
+        %332 = OpConstant %6 6
+        %342 = OpConstant %6 240
+        %346 = OpConstant %6 7
+        %356 = OpConstant %6 270
+        %360 = OpConstant %6 8
+        %368 = OpTypePointer Output %241
+        %369 = OpVariable %368 Output
+        %371 = OpTypeVector %157 3
+        %373 = OpConstant %157 1
+        %637 = OpConstant %6 0
+        %638 = OpConstantComposite %39 %637 %637 %637 %637 %637 %637 %637 %637 %637 %637
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+        %488 = OpVariable %7 Function
+        %487 = OpVariable %7 Function
+        %486 = OpVariable %7 Function
+        %485 = OpVariable %7 Function
+        %484 = OpVariable %7 Function
+        %483 = OpVariable %7 Function
+        %482 = OpVariable %7 Function
+        %481 = OpVariable %7 Function
+        %480 = OpVariable %7 Function
+        %479 = OpVariable %7 Function
+        %156 = OpVariable %7 Function
+        %225 = OpVariable %7 Function
+        %254 = OpVariable %253 Function
+        %164 = OpAccessChain %163 %161 %105 %162
+        %165 = OpLoad %157 %164
+        %166 = OpConvertFToS %6 %165
+               OpStore %156 %166
+               OpBranch %167
+        %167 = OpLabel
+               OpLoopMerge %169 %170 None
+               OpBranch %168
+        %168 = OpLabel
+        %171 = OpLoad %6 %156
+               OpSelectionMerge %182 None
+               OpSwitch %171 %182 0 %172 1 %173 2 %174 3 %175 4 %176 5 %177 6 %178 7 %179 8 %180 9 %181
+        %172 = OpLabel
+        %183 = OpLoad %6 %156
+        %185 = OpAccessChain %43 %41 %183
+               OpStore %185 %184
+               OpBranch %182
+        %173 = OpLabel
+        %187 = OpLoad %6 %156
+        %189 = OpAccessChain %43 %41 %187
+               OpStore %189 %188
+               OpBranch %182
+        %174 = OpLabel
+        %191 = OpLoad %6 %156
+        %192 = OpAccessChain %43 %41 %191
+               OpStore %192 %136
+               OpBranch %182
+        %175 = OpLabel
+        %194 = OpLoad %6 %156
+        %195 = OpAccessChain %43 %41 %194
+               OpStore %195 %22
+               OpBranch %182
+        %176 = OpLabel
+        %197 = OpLoad %6 %156
+        %198 = OpAccessChain %43 %41 %197
+               OpStore %198 %105
+               OpBranch %182
+        %177 = OpLabel
+        %200 = OpLoad %6 %156
+        %202 = OpAccessChain %43 %41 %200
+               OpStore %202 %201
+               OpBranch %182
+        %178 = OpLabel
+        %204 = OpLoad %6 %156
+        %206 = OpAccessChain %43 %41 %204
+               OpStore %206 %205
+               OpBranch %182
+        %179 = OpLabel
+        %208 = OpLoad %6 %156
+        %210 = OpAccessChain %43 %41 %208
+               OpStore %210 %209
+               OpBranch %182
+        %180 = OpLabel
+        %212 = OpLoad %6 %156
+        %214 = OpAccessChain %43 %41 %212
+               OpStore %214 %213
+               OpBranch %182
+        %181 = OpLabel
+        %216 = OpLoad %6 %156
+        %218 = OpAccessChain %43 %41 %216
+               OpStore %218 %217
+               OpBranch %182
+        %182 = OpLabel
+        %221 = OpLoad %6 %156
+        %222 = OpIAdd %6 %221 %22
+               OpStore %156 %222
+               OpBranch %170
+        %170 = OpLabel
+        %223 = OpLoad %6 %156
+        %224 = OpSLessThan %31 %223 %74
+               OpBranchConditional %224 %167 %169
+        %169 = OpLabel
+               OpStore %225 %105
+               OpBranch %226
+        %226 = OpLabel
+               OpLoopMerge %228 %229 None
+               OpBranch %230
+        %230 = OpLabel
+        %231 = OpLoad %6 %225
+        %232 = OpSLessThan %31 %231 %74
+               OpBranchConditional %232 %227 %228
+        %227 = OpLabel
+        %233 = OpLoad %6 %225
+        %234 = OpLoad %6 %225
+        %235 = OpAccessChain %43 %41 %234
+        %236 = OpLoad %6 %235
+        %237 = OpAccessChain %43 %52 %233
+               OpStore %237 %236
+               OpBranch %229
+        %229 = OpLabel
+        %238 = OpLoad %6 %225
+        %239 = OpIAdd %6 %238 %22
+               OpStore %225 %239
+               OpBranch %226
+        %228 = OpLabel
+               OpStore %479 %105
+               OpStore %480 %107
+               OpStore %481 %22
+               OpBranch %489
+        %489 = OpLabel
+               OpLoopMerge %527 %524 None
+               OpBranch %490
+        %490 = OpLabel
+        %491 = OpLoad %6 %481
+        %492 = OpLoad %6 %480
+        %493 = OpSLessThanEqual %31 %491 %492
+               OpBranchConditional %493 %494 %527
+        %494 = OpLabel
+        %495 = OpLoad %6 %479
+               OpStore %482 %495
+               OpBranch %496
+        %496 = OpLabel
+               OpLoopMerge %523 %518 None
+               OpBranch %497
+        %497 = OpLabel
+        %498 = OpLoad %6 %482
+        %499 = OpLoad %6 %480
+        %500 = OpSLessThan %31 %498 %499
+               OpBranchConditional %500 %501 %523
+        %501 = OpLabel
+        %502 = OpLoad %6 %482
+               OpStore %483 %502
+        %503 = OpLoad %6 %482
+        %504 = OpLoad %6 %481
+        %505 = OpIAdd %6 %503 %504
+        %506 = OpISub %6 %505 %22
+               OpStore %484 %506
+        %507 = OpLoad %6 %482
+        %508 = OpLoad %6 %481
+        %509 = OpIMul %6 %136 %508
+        %510 = OpIAdd %6 %507 %509
+        %511 = OpISub %6 %510 %22
+        %512 = OpLoad %6 %480
+        %513 = OpExtInst %6 %1 SMin %511 %512
+               OpStore %485 %513
+        %514 = OpLoad %6 %483
+               OpStore %486 %514
+        %515 = OpLoad %6 %484
+               OpStore %487 %515
+        %516 = OpLoad %6 %485
+               OpStore %488 %516
+        %517 = OpFunctionCall %2 %12 %486 %487 %488
+               OpBranch %518
+        %518 = OpLabel
+        %519 = OpLoad %6 %481
+        %520 = OpIMul %6 %136 %519
+        %521 = OpLoad %6 %482
+        %522 = OpIAdd %6 %521 %520
+               OpStore %482 %522
+               OpBranch %496
+        %523 = OpLabel
+               OpBranch %524
+        %524 = OpLabel
+        %525 = OpLoad %6 %481
+        %526 = OpIMul %6 %136 %525
+               OpStore %481 %526
+               OpBranch %489
+        %527 = OpLabel
+               OpBranch %478
+        %478 = OpLabel
+        %246 = OpAccessChain %245 %243 %244
+        %247 = OpLoad %157 %246
+        %248 = OpConvertFToS %6 %247
+        %250 = OpSLessThan %31 %248 %249
+               OpSelectionMerge %252 None
+               OpBranchConditional %250 %251 %262
+        %251 = OpLabel
+        %256 = OpAccessChain %43 %41 %105
+        %257 = OpLoad %6 %256
+        %258 = OpConvertSToF %157 %257
+        %260 = OpFDiv %157 %258 %259
+        %261 = OpFAdd %157 %255 %260
+               OpStore %254 %261
+               OpBranch %252
+        %262 = OpLabel
+        %263 = OpAccessChain %245 %243 %244
+        %264 = OpLoad %157 %263
+        %265 = OpConvertFToS %6 %264
+        %267 = OpSLessThan %31 %265 %266
+               OpSelectionMerge %269 None
+               OpBranchConditional %267 %268 %275
+        %268 = OpLabel
+        %270 = OpAccessChain %43 %41 %22
+        %271 = OpLoad %6 %270
+        %272 = OpConvertSToF %157 %271
+        %273 = OpFDiv %157 %272 %259
+        %274 = OpFAdd %157 %255 %273
+               OpStore %254 %274
+               OpBranch %269
+        %275 = OpLabel
+        %276 = OpAccessChain %245 %243 %244
+        %277 = OpLoad %157 %276
+        %278 = OpConvertFToS %6 %277
+        %280 = OpSLessThan %31 %278 %279
+               OpSelectionMerge %282 None
+               OpBranchConditional %280 %281 %288
+        %281 = OpLabel
+        %283 = OpAccessChain %43 %41 %136
+        %284 = OpLoad %6 %283
+        %285 = OpConvertSToF %157 %284
+        %286 = OpFDiv %157 %285 %259
+        %287 = OpFAdd %157 %255 %286
+               OpStore %254 %287
+               OpBranch %282
+        %288 = OpLabel
+        %289 = OpAccessChain %245 %243 %244
+        %290 = OpLoad %157 %289
+        %291 = OpConvertFToS %6 %290
+        %293 = OpSLessThan %31 %291 %292
+               OpSelectionMerge %295 None
+               OpBranchConditional %293 %294 %301
+        %294 = OpLabel
+        %296 = OpAccessChain %43 %41 %188
+        %297 = OpLoad %6 %296
+        %298 = OpConvertSToF %157 %297
+        %299 = OpFDiv %157 %298 %259
+        %300 = OpFAdd %157 %255 %299
+               OpStore %254 %300
+               OpBranch %295
+        %301 = OpLabel
+        %302 = OpAccessChain %245 %243 %244
+        %303 = OpLoad %157 %302
+        %304 = OpConvertFToS %6 %303
+        %306 = OpSLessThan %31 %304 %305
+               OpSelectionMerge %308 None
+               OpBranchConditional %306 %307 %310
+        %307 = OpLabel
+               OpKill
+        %310 = OpLabel
+        %311 = OpAccessChain %245 %243 %244
+        %312 = OpLoad %157 %311
+        %313 = OpConvertFToS %6 %312
+        %315 = OpSLessThan %31 %313 %314
+               OpSelectionMerge %317 None
+               OpBranchConditional %315 %316 %324
+        %316 = OpLabel
+        %319 = OpAccessChain %43 %41 %318
+        %320 = OpLoad %6 %319
+        %321 = OpConvertSToF %157 %320
+        %322 = OpFDiv %157 %321 %259
+        %323 = OpFAdd %157 %255 %322
+               OpStore %254 %323
+               OpBranch %317
+        %324 = OpLabel
+        %325 = OpAccessChain %245 %243 %244
+        %326 = OpLoad %157 %325
+        %327 = OpConvertFToS %6 %326
+        %329 = OpSLessThan %31 %327 %328
+               OpSelectionMerge %331 None
+               OpBranchConditional %329 %330 %338
+        %330 = OpLabel
+        %333 = OpAccessChain %43 %41 %332
+        %334 = OpLoad %6 %333
+        %335 = OpConvertSToF %157 %334
+        %336 = OpFDiv %157 %335 %259
+        %337 = OpFAdd %157 %255 %336
+               OpStore %254 %337
+               OpBranch %331
+        %338 = OpLabel
+        %339 = OpAccessChain %245 %243 %244
+        %340 = OpLoad %157 %339
+        %341 = OpConvertFToS %6 %340
+        %343 = OpSLessThan %31 %341 %342
+               OpSelectionMerge %345 None
+               OpBranchConditional %343 %344 %352
+        %344 = OpLabel
+        %347 = OpAccessChain %43 %41 %346
+        %348 = OpLoad %6 %347
+        %349 = OpConvertSToF %157 %348
+        %350 = OpFDiv %157 %349 %259
+        %351 = OpFAdd %157 %255 %350
+               OpStore %254 %351
+               OpBranch %345
+        %352 = OpLabel
+        %353 = OpAccessChain %245 %243 %244
+        %354 = OpLoad %157 %353
+        %355 = OpConvertFToS %6 %354
+        %357 = OpSLessThan %31 %355 %356
+               OpSelectionMerge %359 None
+               OpBranchConditional %357 %358 %366
+        %358 = OpLabel
+        %361 = OpAccessChain %43 %41 %360
+        %362 = OpLoad %6 %361
+        %363 = OpConvertSToF %157 %362
+        %364 = OpFDiv %157 %363 %259
+        %365 = OpFAdd %157 %255 %364
+               OpStore %254 %365
+               OpBranch %359
+        %366 = OpLabel
+               OpKill
+        %359 = OpLabel
+               OpBranch %345
+        %345 = OpLabel
+               OpBranch %331
+        %331 = OpLabel
+               OpBranch %317
+        %317 = OpLabel
+               OpBranch %308
+        %308 = OpLabel
+               OpBranch %295
+        %295 = OpLabel
+               OpBranch %282
+        %282 = OpLabel
+               OpBranch %269
+        %269 = OpLabel
+               OpBranch %252
+        %252 = OpLabel
+        %370 = OpLoad %157 %254
+        %372 = OpCompositeConstruct %371 %370 %370 %370
+        %374 = OpCompositeExtract %157 %372 0
+        %375 = OpCompositeExtract %157 %372 1
+        %376 = OpCompositeExtract %157 %372 2
+        %377 = OpCompositeConstruct %241 %374 %375 %376 %373
+               OpStore %369 %377
+               OpReturn
+               OpFunctionEnd
+         %12 = OpFunction %2 None %8
+          %9 = OpFunctionParameter %7
+         %10 = OpFunctionParameter %7
+         %11 = OpFunctionParameter %7
+         %13 = OpLabel
+         %16 = OpVariable %7 Function
+         %18 = OpVariable %7 Function
+         %20 = OpVariable %7 Function
+         %87 = OpVariable %7 Function
+         %17 = OpLoad %6 %9
+               OpStore %16 %17
+         %19 = OpLoad %6 %9
+               OpStore %18 %19
+         %21 = OpLoad %6 %10
+         %23 = OpIAdd %6 %21 %22
+               OpStore %20 %23
+               OpBranch %24
+         %24 = OpLabel
+               OpLoopMerge %26 %27 None
+               OpBranch %28
+         %28 = OpLabel
+         %29 = OpLoad %6 %18
+         %30 = OpLoad %6 %10
+         %32 = OpSLessThanEqual %31 %29 %30
+         %33 = OpLoad %6 %20
+         %34 = OpLoad %6 %11
+         %35 = OpSLessThanEqual %31 %33 %34
+         %36 = OpLogicalAnd %31 %32 %35
+               OpBranchConditional %36 %25 %26
+         %25 = OpLabel
+         %42 = OpLoad %6 %18
+         %44 = OpAccessChain %43 %41 %42
+         %45 = OpLoad %6 %44
+         %46 = OpLoad %6 %20
+         %47 = OpAccessChain %43 %41 %46
+         %48 = OpLoad %6 %47
+         %49 = OpSLessThan %31 %45 %48
+               OpSelectionMerge %51 None
+               OpBranchConditional %49 %50 %60
+         %50 = OpLabel
+         %53 = OpLoad %6 %16
+         %54 = OpIAdd %6 %53 %22
+               OpStore %16 %54
+         %55 = OpLoad %6 %18
+         %56 = OpIAdd %6 %55 %22
+               OpStore %18 %56
+         %57 = OpAccessChain %43 %41 %55
+         %58 = OpLoad %6 %57
+         %59 = OpAccessChain %43 %52 %53
+               OpStore %59 %58
+               OpBranch %51
+         %60 = OpLabel
+         %61 = OpLoad %6 %16
+         %62 = OpIAdd %6 %61 %22
+               OpStore %16 %62
+         %63 = OpLoad %6 %20
+         %64 = OpIAdd %6 %63 %22
+               OpStore %20 %64
+         %65 = OpAccessChain %43 %41 %63
+         %66 = OpLoad %6 %65
+         %67 = OpAccessChain %43 %52 %61
+               OpStore %67 %66
+               OpBranch %51
+         %51 = OpLabel
+               OpBranch %27
+         %27 = OpLabel
+               OpBranch %24
+         %26 = OpLabel
+               OpBranch %68
+         %68 = OpLabel
+               OpLoopMerge %70 %71 None
+               OpBranch %72
+         %72 = OpLabel
+         %73 = OpLoad %6 %18
+         %75 = OpSLessThan %31 %73 %74
+         %76 = OpLoad %6 %18
+         %77 = OpLoad %6 %10
+         %78 = OpSLessThanEqual %31 %76 %77
+         %79 = OpLogicalAnd %31 %75 %78
+               OpBranchConditional %79 %69 %70
+         %69 = OpLabel
+         %80 = OpLoad %6 %16
+         %81 = OpIAdd %6 %80 %22
+               OpStore %16 %81
+         %82 = OpLoad %6 %18
+         %83 = OpIAdd %6 %82 %22
+               OpStore %18 %83
+         %84 = OpAccessChain %43 %41 %82
+         %85 = OpLoad %6 %84
+         %86 = OpAccessChain %43 %52 %80
+               OpStore %86 %85
+               OpBranch %71
+         %71 = OpLabel
+               OpBranch %68
+         %70 = OpLabel
+         %88 = OpLoad %6 %9
+               OpStore %87 %88
+               OpBranch %89
+         %89 = OpLabel
+               OpLoopMerge %91 %92 None
+               OpBranch %93
+         %93 = OpLabel
+         %94 = OpLoad %6 %87
+         %95 = OpLoad %6 %11
+         %96 = OpSLessThanEqual %31 %94 %95
+               OpBranchConditional %96 %90 %91
+         %90 = OpLabel
+         %97 = OpLoad %6 %87
+         %98 = OpLoad %6 %87
+         %99 = OpAccessChain %43 %52 %98
+        %100 = OpLoad %6 %99
+        %101 = OpAccessChain %43 %41 %97
+               OpStore %101 %100
+               OpBranch %92
+         %92 = OpLabel
+        %102 = OpLoad %6 %87
+        %103 = OpIAdd %6 %102 %22
+               OpStore %87 %103
+               OpBranch %89
+         %91 = OpLabel
+               OpReturn
+               OpFunctionEnd
+         %14 = OpFunction %2 None %3
+         %15 = OpLabel
+        %104 = OpVariable %7 Function
+        %106 = OpVariable %7 Function
+        %108 = OpVariable %7 Function
+        %117 = OpVariable %7 Function
+        %127 = OpVariable %7 Function
+        %129 = OpVariable %7 Function
+        %134 = OpVariable %7 Function
+        %143 = OpVariable %7 Function
+        %145 = OpVariable %7 Function
+        %147 = OpVariable %7 Function
+               OpStore %104 %105
+               OpStore %106 %107
+               OpStore %108 %22
+               OpBranch %109
+        %109 = OpLabel
+               OpLoopMerge %111 %112 None
+               OpBranch %113
+        %113 = OpLabel
+        %114 = OpLoad %6 %108
+        %115 = OpLoad %6 %106
+        %116 = OpSLessThanEqual %31 %114 %115
+               OpBranchConditional %116 %110 %111
+        %110 = OpLabel
+        %118 = OpLoad %6 %104
+               OpStore %117 %118
+               OpBranch %119
+        %119 = OpLabel
+               OpLoopMerge %121 %122 None
+               OpBranch %123
+        %123 = OpLabel
+        %124 = OpLoad %6 %117
+        %125 = OpLoad %6 %106
+        %126 = OpSLessThan %31 %124 %125
+               OpBranchConditional %126 %120 %121
+        %120 = OpLabel
+        %128 = OpLoad %6 %117
+               OpStore %127 %128
+        %130 = OpLoad %6 %117
+        %131 = OpLoad %6 %108
+        %132 = OpIAdd %6 %130 %131
+        %133 = OpISub %6 %132 %22
+               OpStore %129 %133
+        %135 = OpLoad %6 %117
+        %137 = OpLoad %6 %108
+        %138 = OpIMul %6 %136 %137
+        %139 = OpIAdd %6 %135 %138
+        %140 = OpISub %6 %139 %22
+        %141 = OpLoad %6 %106
+        %142 = OpExtInst %6 %1 SMin %140 %141
+               OpStore %134 %142
+        %144 = OpLoad %6 %127
+               OpStore %143 %144
+        %146 = OpLoad %6 %129
+               OpStore %145 %146
+        %148 = OpLoad %6 %134
+               OpStore %147 %148
+        %149 = OpFunctionCall %2 %12 %143 %145 %147
+               OpBranch %122
+        %122 = OpLabel
+        %150 = OpLoad %6 %108
+        %151 = OpIMul %6 %136 %150
+        %152 = OpLoad %6 %117
+        %153 = OpIAdd %6 %152 %151
+               OpStore %117 %153
+               OpBranch %119
+        %121 = OpLabel
+               OpBranch %112
+        %112 = OpLabel
+        %154 = OpLoad %6 %108
+        %155 = OpIMul %6 %136 %154
+               OpStore %108 %155
+               OpBranch %109
+        %111 = OpLabel
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for variant_2
+
+# injectionSwitch
+BUFFER variant_2_injectionSwitch DATA_TYPE vec2<float> STD140 DATA
+ 0.0 1.0
+END
+
+BUFFER variant_2_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_2_pipeline
+  ATTACH variant_2_vertex_shader
+  ATTACH variant_2_fragment_shader
+  FRAMEBUFFER_SIZE 256 256
+  BIND BUFFER variant_2_framebuffer AS color LOCATION 0
+  BIND BUFFER variant_2_injectionSwitch AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_2_pipeline 0 0 0 255
+
+CLEAR variant_2_pipeline
+RUN variant_2_pipeline DRAW_RECT POS 0 0 SIZE 256 256
+
+EXPECT reference_framebuffer EQ_HISTOGRAM_EMD_BUFFER variant_framebuffer TOLERANCE 0.005
+EXPECT reference_framebuffer EQ_HISTOGRAM_EMD_BUFFER variant_2_framebuffer TOLERANCE 0.005
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/spv-stable-orbit-O-mutate-variable.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/spv-stable-orbit-O-mutate-variable.amber
new file mode 100644
index 0000000..d8dace3
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/spv-stable-orbit-O-mutate-variable.amber
@@ -0,0 +1,418 @@
+#!amber
+
+# Copyright 2020 Google LLC
+#
+# 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.
+
+
+# A test for a bug found by the GraphicsFuzz project.
+
+# Short description: Two shaders with diff: variable mutated
+
+# The test renders two images using semantically equivalent shaders, and then
+# checks that the images are similar.
+# The test passes because the shaders have the same semantics and so the images
+# should be the same.
+
+SHADER vertex reference_vertex_shader PASSTHROUGH
+
+SHADER fragment reference_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 7
+; Bound: 230
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %53 %138
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 320
+               OpName %4 "main"
+               OpName %53 "gl_FragCoord"
+               OpName %56 "buf0"
+               OpMemberName %56 0 "resolution"
+               OpName %58 ""
+               OpName %138 "_GLF_color"
+               OpName %163 "indexable"
+               OpDecorate %53 BuiltIn FragCoord
+               OpMemberDecorate %56 0 Offset 0
+               OpDecorate %56 Block
+               OpDecorate %58 DescriptorSet 0
+               OpDecorate %58 Binding 0
+               OpDecorate %138 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeInt 32 1
+          %7 = OpTypeVector %6 2
+         %13 = OpTypeInt 32 0
+         %18 = OpConstant %6 0
+         %19 = OpTypeBool
+         %26 = OpConstant %6 1
+         %38 = OpConstant %6 2
+         %47 = OpTypeFloat 32
+         %48 = OpTypeVector %47 2
+         %51 = OpTypeVector %47 4
+         %52 = OpTypePointer Input %51
+         %53 = OpVariable %52 Input
+         %56 = OpTypeStruct %48
+         %57 = OpTypePointer Uniform %56
+         %58 = OpVariable %57 Uniform
+         %59 = OpTypePointer Uniform %48
+         %67 = OpConstant %47 8
+         %78 = OpConstant %6 5
+         %82 = OpConstant %6 10
+         %95 = OpConstant %6 8
+        %107 = OpConstant %6 100
+        %130 = OpConstant %6 15
+        %132 = OpConstant %6 16
+        %137 = OpTypePointer Output %51
+        %138 = OpVariable %137 Output
+        %139 = OpConstant %13 16
+        %140 = OpTypeArray %51 %139
+        %141 = OpConstant %47 0
+        %142 = OpConstant %47 1
+        %143 = OpConstantComposite %51 %141 %141 %141 %142
+        %144 = OpConstant %47 0.5
+        %145 = OpConstantComposite %51 %144 %141 %141 %142
+        %146 = OpConstantComposite %51 %141 %144 %141 %142
+        %147 = OpConstantComposite %51 %144 %144 %141 %142
+        %148 = OpConstantComposite %51 %141 %141 %144 %142
+        %149 = OpConstantComposite %51 %144 %141 %144 %142
+        %150 = OpConstantComposite %51 %141 %144 %144 %142
+        %151 = OpConstantComposite %51 %144 %144 %144 %142
+        %152 = OpConstantComposite %51 %142 %141 %141 %142
+        %153 = OpConstantComposite %51 %141 %142 %141 %142
+        %154 = OpConstantComposite %51 %142 %142 %141 %142
+        %155 = OpConstantComposite %51 %141 %141 %142 %142
+        %156 = OpConstantComposite %51 %142 %141 %142 %142
+        %157 = OpConstantComposite %51 %141 %142 %142 %142
+        %158 = OpConstantComposite %51 %142 %142 %142 %142
+        %159 = OpConstantComposite %140 %143 %145 %146 %147 %148 %149 %150 %151 %143 %152 %153 %154 %155 %156 %157 %158
+        %162 = OpTypePointer Function %140
+        %164 = OpTypePointer Function %51
+        %229 = OpUndef %7
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+        %163 = OpVariable %162 Function
+         %54 = OpLoad %51 %53
+         %55 = OpVectorShuffle %48 %54 %54 0 1
+         %60 = OpAccessChain %59 %58 %18
+         %61 = OpLoad %48 %60
+         %62 = OpFDiv %48 %55 %61
+         %66 = OpCompositeExtract %47 %62 0
+         %68 = OpFMul %47 %66 %67
+         %69 = OpConvertFToS %6 %68
+         %71 = OpCompositeExtract %47 %62 1
+         %72 = OpFMul %47 %71 %67
+         %73 = OpConvertFToS %6 %72
+         %79 = OpBitwiseAnd %6 %69 %78
+         %83 = OpBitwiseAnd %6 %73 %82
+         %84 = OpBitwiseOr %6 %79 %83
+         %88 = OpBitwiseAnd %6 %73 %78
+         %91 = OpBitwiseAnd %6 %69 %82
+         %92 = OpBitwiseOr %6 %88 %91
+         %96 = OpIMul %6 %84 %95
+         %98 = OpIAdd %6 %96 %92
+         %99 = OpCompositeConstruct %7 %98 %18
+               OpBranch %101
+        %101 = OpLabel
+        %221 = OpPhi %7 %99 %5 %210 %104
+        %220 = OpPhi %6 %18 %5 %113 %104
+        %108 = OpSLessThan %19 %220 %107
+               OpLoopMerge %103 %104 None
+               OpBranchConditional %108 %102 %103
+        %102 = OpLabel
+        %170 = OpCompositeExtract %6 %221 0
+        %171 = OpSGreaterThan %19 %170 %18
+               OpSelectionMerge %176 None
+               OpBranchConditional %171 %172 %176
+        %172 = OpLabel
+        %174 = OpCompositeExtract %6 %221 1
+        %175 = OpISub %6 %174 %26
+        %202 = OpCompositeInsert %7 %175 %221 1
+               OpBranch %176
+        %176 = OpLabel
+        %224 = OpPhi %7 %221 %102 %202 %172
+        %178 = OpCompositeExtract %6 %224 0
+        %179 = OpSLessThan %19 %178 %18
+               OpSelectionMerge %184 None
+               OpBranchConditional %179 %180 %184
+        %180 = OpLabel
+        %182 = OpCompositeExtract %6 %224 1
+        %183 = OpIAdd %6 %182 %26
+        %206 = OpCompositeInsert %7 %183 %224 1
+               OpBranch %184
+        %184 = OpLabel
+        %225 = OpPhi %7 %224 %176 %206 %180
+        %186 = OpCompositeExtract %6 %225 1
+        %187 = OpSDiv %6 %186 %38
+        %189 = OpCompositeExtract %6 %225 0
+        %190 = OpIAdd %6 %189 %187
+        %210 = OpCompositeInsert %7 %190 %225 0
+               OpBranch %104
+        %104 = OpLabel
+        %113 = OpIAdd %6 %220 %26
+               OpBranch %101
+        %103 = OpLabel
+        %115 = OpCompositeExtract %6 %221 0
+        %116 = OpSLessThan %19 %115 %18
+               OpSelectionMerge %118 None
+               OpBranchConditional %116 %117 %118
+        %117 = OpLabel
+        %121 = OpSNegate %6 %115
+        %214 = OpCompositeInsert %7 %121 %229 0
+               OpBranch %118
+        %118 = OpLabel
+        %223 = OpPhi %7 %221 %103 %214 %117
+               OpBranch %123
+        %123 = OpLabel
+        %222 = OpPhi %7 %223 %118 %218 %124
+        %129 = OpCompositeExtract %6 %222 0
+        %131 = OpSGreaterThan %19 %129 %130
+               OpLoopMerge %125 %124 None
+               OpBranchConditional %131 %124 %125
+        %124 = OpLabel
+        %135 = OpISub %6 %129 %132
+        %218 = OpCompositeInsert %7 %135 %229 0
+               OpBranch %123
+        %125 = OpLabel
+               OpStore %163 %159
+        %165 = OpAccessChain %164 %163 %129
+        %166 = OpLoad %51 %165
+               OpStore %138 %166
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for reference
+
+# resolution
+BUFFER reference_resolution DATA_TYPE vec2<float> STD140 DATA
+ 256.0 256.0
+END
+
+BUFFER reference_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics reference_pipeline
+  ATTACH reference_vertex_shader
+  ATTACH reference_fragment_shader
+  FRAMEBUFFER_SIZE 256 256
+  BIND BUFFER reference_framebuffer AS color LOCATION 0
+  BIND BUFFER reference_resolution AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR reference_pipeline 0 0 0 255
+
+CLEAR reference_pipeline
+RUN reference_pipeline DRAW_RECT POS 0 0 SIZE 256 256
+
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 7
+; Bound: 399
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %53 %138
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 320
+               OpName %4 "main"
+               OpName %53 "gl_FragCoord"
+               OpName %56 "buf0"
+               OpMemberName %56 0 "resolution"
+               OpName %58 ""
+               OpName %138 "_GLF_color"
+               OpName %163 "indexable"
+               OpDecorate %53 BuiltIn FragCoord
+               OpMemberDecorate %56 0 Offset 0
+               OpDecorate %56 Block
+               OpDecorate %58 DescriptorSet 0
+               OpDecorate %58 Binding 0
+               OpDecorate %138 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeInt 32 1
+          %7 = OpTypeVector %6 2
+         %13 = OpTypeInt 32 0
+         %18 = OpConstant %6 0
+         %19 = OpTypeBool
+         %26 = OpConstant %6 1
+         %38 = OpConstant %6 2
+         %47 = OpTypeFloat 32
+         %48 = OpTypeVector %47 2
+         %51 = OpTypeVector %47 4
+         %52 = OpTypePointer Input %51
+         %53 = OpVariable %52 Input
+         %56 = OpTypeStruct %48
+         %57 = OpTypePointer Uniform %56
+         %58 = OpVariable %57 Uniform
+         %59 = OpTypePointer Uniform %48
+         %67 = OpConstant %47 8
+         %78 = OpConstant %6 5
+         %82 = OpConstant %6 10
+         %95 = OpConstant %6 8
+        %107 = OpConstant %6 100
+        %130 = OpConstant %6 15
+        %132 = OpConstant %6 16
+        %137 = OpTypePointer Output %51
+        %138 = OpVariable %137 Output
+        %139 = OpConstant %13 16
+        %140 = OpTypeArray %51 %139
+        %141 = OpConstant %47 0
+        %142 = OpConstant %47 1
+        %143 = OpConstantComposite %51 %141 %141 %141 %142
+        %144 = OpConstant %47 0.5
+        %145 = OpConstantComposite %51 %144 %141 %141 %142
+        %146 = OpConstantComposite %51 %141 %144 %141 %142
+        %147 = OpConstantComposite %51 %144 %144 %141 %142
+        %148 = OpConstantComposite %51 %141 %141 %144 %142
+        %149 = OpConstantComposite %51 %144 %141 %144 %142
+        %150 = OpConstantComposite %51 %141 %144 %144 %142
+        %151 = OpConstantComposite %51 %144 %144 %144 %142
+        %152 = OpConstantComposite %51 %142 %141 %141 %142
+        %153 = OpConstantComposite %51 %141 %142 %141 %142
+        %154 = OpConstantComposite %51 %142 %142 %141 %142
+        %155 = OpConstantComposite %51 %141 %141 %142 %142
+        %156 = OpConstantComposite %51 %142 %141 %142 %142
+        %157 = OpConstantComposite %51 %141 %142 %142 %142
+        %158 = OpConstantComposite %51 %142 %142 %142 %142
+        %159 = OpConstantComposite %140 %143 %145 %146 %147 %148 %149 %150 %151 %143 %152 %153 %154 %155 %156 %157 %158
+        %162 = OpTypePointer Function %140
+        %164 = OpTypePointer Function %51
+        %229 = OpUndef %7
+        %354 = OpConstant %47 0
+        %355 = OpConstantComposite %51 %354 %354 %354 %354
+        %356 = OpConstantComposite %140 %355 %355 %355 %355 %355 %355 %355 %355 %355 %355 %355 %355 %355 %355 %355 %355
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+        %163 = OpVariable %162 Function
+         %54 = OpLoad %51 %53
+         %55 = OpVectorShuffle %48 %54 %54 0 1
+         %60 = OpAccessChain %59 %58 %18
+         %61 = OpLoad %48 %60
+         %62 = OpFDiv %48 %55 %61
+         %66 = OpCompositeExtract %47 %62 0
+         %68 = OpFMul %47 %66 %67
+         %69 = OpConvertFToS %6 %68
+         %71 = OpCompositeExtract %47 %62 1
+         %72 = OpFMul %47 %71 %67
+         %73 = OpConvertFToS %6 %72
+         %79 = OpBitwiseAnd %6 %69 %78
+         %83 = OpBitwiseAnd %6 %73 %82
+         %84 = OpBitwiseOr %6 %79 %83
+         %88 = OpBitwiseAnd %6 %73 %78
+         %91 = OpBitwiseAnd %6 %69 %82
+         %92 = OpBitwiseOr %6 %88 %91
+         %96 = OpIMul %6 %84 %95
+         %98 = OpIAdd %6 %96 %92
+         %99 = OpCompositeConstruct %7 %98 %18
+               OpBranch %101
+        %101 = OpLabel
+        %221 = OpPhi %7 %99 %5 %210 %104
+        %220 = OpPhi %6 %18 %5 %113 %104
+        %108 = OpSLessThan %19 %220 %107
+               OpLoopMerge %103 %104 None
+               OpBranchConditional %108 %102 %103
+        %102 = OpLabel
+        %170 = OpCompositeExtract %6 %221 0
+        %171 = OpSGreaterThan %19 %170 %18
+               OpSelectionMerge %176 None
+               OpBranchConditional %171 %172 %176
+        %172 = OpLabel
+        %174 = OpCompositeExtract %6 %221 1
+        %175 = OpISub %6 %174 %26
+        %202 = OpCompositeInsert %7 %175 %221 1
+               OpBranch %176
+        %176 = OpLabel
+        %224 = OpPhi %7 %221 %102 %202 %172
+        %178 = OpCompositeExtract %6 %224 0
+        %179 = OpSLessThan %19 %178 %18
+               OpSelectionMerge %184 None
+               OpBranchConditional %179 %180 %184
+        %180 = OpLabel
+        %182 = OpCompositeExtract %6 %224 1
+        %183 = OpIAdd %6 %182 %26
+        %206 = OpCompositeInsert %7 %183 %224 1
+               OpBranch %184
+        %184 = OpLabel
+        %225 = OpPhi %7 %224 %176 %206 %180
+        %186 = OpCompositeExtract %6 %225 1
+        %187 = OpSDiv %6 %186 %38
+        %189 = OpCompositeExtract %6 %225 0
+        %190 = OpIAdd %6 %189 %187
+        %210 = OpCompositeInsert %7 %190 %225 0
+               OpBranch %104
+        %104 = OpLabel
+        %113 = OpIAdd %6 %220 %26
+               OpBranch %101
+        %103 = OpLabel
+        %115 = OpCompositeExtract %6 %221 0
+        %116 = OpSLessThan %19 %115 %18
+               OpSelectionMerge %118 None
+               OpBranchConditional %116 %117 %118
+        %117 = OpLabel
+        %121 = OpSNegate %6 %115
+        %214 = OpCompositeInsert %7 %121 %229 0
+               OpBranch %118
+        %118 = OpLabel
+        %223 = OpPhi %7 %221 %103 %214 %117
+               OpBranch %123
+        %123 = OpLabel
+        %222 = OpPhi %7 %223 %118 %218 %124
+        %129 = OpCompositeExtract %6 %222 0
+        %131 = OpSGreaterThan %19 %129 %130
+               OpLoopMerge %125 %124 None
+               OpBranchConditional %131 %124 %125
+        %124 = OpLabel
+        %135 = OpISub %6 %129 %132
+        %218 = OpCompositeInsert %7 %135 %229 0
+               OpBranch %123
+        %125 = OpLabel
+               OpStore %163 %159
+        %398 = OpLoad %140 %163
+               OpStore %163 %356
+               OpStore %163 %398
+        %165 = OpAccessChain %164 %163 %129
+        %166 = OpLoad %51 %165
+               OpStore %138 %166
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# resolution
+BUFFER variant_resolution DATA_TYPE vec2<float> STD140 DATA
+ 256.0 256.0
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 256 256
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant_resolution AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256
+
+EXPECT reference_framebuffer EQ_HISTOGRAM_EMD_BUFFER variant_framebuffer TOLERANCE 0.005
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/spv-stable-orbit-Os-access-chain-mutate-pointer.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/spv-stable-orbit-Os-access-chain-mutate-pointer.amber
new file mode 100644
index 0000000..1f046a5
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/spv-stable-orbit-Os-access-chain-mutate-pointer.amber
@@ -0,0 +1,614 @@
+#!amber
+
+# Copyright 2020 Google LLC
+#
+# 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.
+
+
+# A test for a bug found by the GraphicsFuzz project.
+
+# Short description: Three shaders with diff: added mutate pointer
+
+# The test renders three images using semantically equivalent shaders, and then
+# checks that the images are similar.
+# The test passes because the shaders have the same semantics and so the images
+# should be the same.
+
+SHADER vertex reference_vertex_shader PASSTHROUGH
+
+SHADER fragment reference_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 7
+; Bound: 229
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %53 %138
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 320
+               OpName %4 "main"
+               OpName %53 "gl_FragCoord"
+               OpName %56 "buf0"
+               OpMemberName %56 0 "resolution"
+               OpName %58 ""
+               OpName %138 "_GLF_color"
+               OpName %163 "indexable"
+               OpDecorate %53 BuiltIn FragCoord
+               OpMemberDecorate %56 0 Offset 0
+               OpDecorate %56 Block
+               OpDecorate %58 DescriptorSet 0
+               OpDecorate %58 Binding 0
+               OpDecorate %138 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeInt 32 1
+          %7 = OpTypeVector %6 2
+         %13 = OpTypeInt 32 0
+         %18 = OpConstant %6 0
+         %19 = OpTypeBool
+         %26 = OpConstant %6 1
+         %38 = OpConstant %6 2
+         %47 = OpTypeFloat 32
+         %48 = OpTypeVector %47 2
+         %51 = OpTypeVector %47 4
+         %52 = OpTypePointer Input %51
+         %53 = OpVariable %52 Input
+         %56 = OpTypeStruct %48
+         %57 = OpTypePointer Uniform %56
+         %58 = OpVariable %57 Uniform
+         %59 = OpTypePointer Uniform %48
+         %67 = OpConstant %47 8
+         %78 = OpConstant %6 5
+         %82 = OpConstant %6 10
+         %95 = OpConstant %6 8
+        %107 = OpConstant %6 100
+        %130 = OpConstant %6 15
+        %132 = OpConstant %6 16
+        %137 = OpTypePointer Output %51
+        %138 = OpVariable %137 Output
+        %139 = OpConstant %13 16
+        %140 = OpTypeArray %51 %139
+        %141 = OpConstant %47 0
+        %142 = OpConstant %47 1
+        %143 = OpConstantComposite %51 %141 %141 %141 %142
+        %144 = OpConstant %47 0.5
+        %145 = OpConstantComposite %51 %144 %141 %141 %142
+        %146 = OpConstantComposite %51 %141 %144 %141 %142
+        %147 = OpConstantComposite %51 %144 %144 %141 %142
+        %148 = OpConstantComposite %51 %141 %141 %144 %142
+        %149 = OpConstantComposite %51 %144 %141 %144 %142
+        %150 = OpConstantComposite %51 %141 %144 %144 %142
+        %151 = OpConstantComposite %51 %144 %144 %144 %142
+        %152 = OpConstantComposite %51 %142 %141 %141 %142
+        %153 = OpConstantComposite %51 %141 %142 %141 %142
+        %154 = OpConstantComposite %51 %142 %142 %141 %142
+        %155 = OpConstantComposite %51 %141 %141 %142 %142
+        %156 = OpConstantComposite %51 %142 %141 %142 %142
+        %157 = OpConstantComposite %51 %141 %142 %142 %142
+        %158 = OpConstantComposite %51 %142 %142 %142 %142
+        %159 = OpConstantComposite %140 %143 %145 %146 %147 %148 %149 %150 %151 %143 %152 %153 %154 %155 %156 %157 %158
+        %162 = OpTypePointer Function %140
+        %164 = OpTypePointer Function %51
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+        %163 = OpVariable %162 Function
+         %54 = OpLoad %51 %53
+         %55 = OpVectorShuffle %48 %54 %54 0 1
+         %60 = OpAccessChain %59 %58 %18
+         %61 = OpLoad %48 %60
+         %62 = OpFDiv %48 %55 %61
+         %66 = OpCompositeExtract %47 %62 0
+         %68 = OpFMul %47 %66 %67
+         %69 = OpConvertFToS %6 %68
+         %71 = OpCompositeExtract %47 %62 1
+         %72 = OpFMul %47 %71 %67
+         %73 = OpConvertFToS %6 %72
+         %79 = OpBitwiseAnd %6 %69 %78
+         %83 = OpBitwiseAnd %6 %73 %82
+         %84 = OpBitwiseOr %6 %79 %83
+         %88 = OpBitwiseAnd %6 %73 %78
+         %91 = OpBitwiseAnd %6 %69 %82
+         %92 = OpBitwiseOr %6 %88 %91
+         %96 = OpIMul %6 %84 %95
+         %98 = OpIAdd %6 %96 %92
+         %99 = OpCompositeConstruct %7 %98 %18
+               OpBranch %101
+        %101 = OpLabel
+        %224 = OpPhi %7 %99 %5 %214 %104
+        %193 = OpPhi %6 %18 %5 %113 %104
+        %108 = OpSLessThan %19 %193 %107
+               OpLoopMerge %103 %104 None
+               OpBranchConditional %108 %102 %103
+        %102 = OpLabel
+        %170 = OpCompositeExtract %6 %224 0
+        %171 = OpSGreaterThan %19 %170 %18
+               OpSelectionMerge %176 None
+               OpBranchConditional %171 %172 %176
+        %172 = OpLabel
+        %174 = OpCompositeExtract %6 %224 1
+        %175 = OpISub %6 %174 %26
+        %206 = OpCompositeInsert %7 %175 %224 1
+               OpBranch %176
+        %176 = OpLabel
+        %227 = OpPhi %7 %224 %102 %206 %172
+        %178 = OpCompositeExtract %6 %227 0
+        %179 = OpSLessThan %19 %178 %18
+               OpSelectionMerge %184 None
+               OpBranchConditional %179 %180 %184
+        %180 = OpLabel
+        %182 = OpCompositeExtract %6 %227 1
+        %183 = OpIAdd %6 %182 %26
+        %210 = OpCompositeInsert %7 %183 %227 1
+               OpBranch %184
+        %184 = OpLabel
+        %228 = OpPhi %7 %227 %176 %210 %180
+        %186 = OpCompositeExtract %6 %228 1
+        %187 = OpSDiv %6 %186 %38
+        %189 = OpCompositeExtract %6 %228 0
+        %190 = OpIAdd %6 %189 %187
+        %214 = OpCompositeInsert %7 %190 %228 0
+               OpBranch %104
+        %104 = OpLabel
+        %113 = OpIAdd %6 %193 %26
+               OpBranch %101
+        %103 = OpLabel
+        %115 = OpCompositeExtract %6 %224 0
+        %116 = OpSLessThan %19 %115 %18
+               OpSelectionMerge %118 None
+               OpBranchConditional %116 %117 %118
+        %117 = OpLabel
+        %121 = OpSNegate %6 %115
+        %218 = OpCompositeInsert %7 %121 %224 0
+               OpBranch %118
+        %118 = OpLabel
+        %226 = OpPhi %7 %224 %103 %218 %117
+               OpBranch %123
+        %123 = OpLabel
+        %225 = OpPhi %7 %226 %118 %222 %124
+        %129 = OpCompositeExtract %6 %225 0
+        %131 = OpSGreaterThan %19 %129 %130
+               OpLoopMerge %125 %124 None
+               OpBranchConditional %131 %124 %125
+        %124 = OpLabel
+        %135 = OpISub %6 %129 %132
+        %222 = OpCompositeInsert %7 %135 %225 0
+               OpBranch %123
+        %125 = OpLabel
+               OpStore %163 %159
+        %165 = OpAccessChain %164 %163 %129
+        %166 = OpLoad %51 %165
+               OpStore %138 %166
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for reference
+
+# resolution
+BUFFER reference_resolution DATA_TYPE vec2<float> STD140 DATA
+ 256.0 256.0
+END
+
+BUFFER reference_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics reference_pipeline
+  ATTACH reference_vertex_shader
+  ATTACH reference_fragment_shader
+  FRAMEBUFFER_SIZE 256 256
+  BIND BUFFER reference_framebuffer AS color LOCATION 0
+  BIND BUFFER reference_resolution AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR reference_pipeline 0 0 0 255
+
+CLEAR reference_pipeline
+RUN reference_pipeline DRAW_RECT POS 0 0 SIZE 256 256
+
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 7
+; Bound: 549
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %53 %138
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 320
+               OpName %4 "main"
+               OpName %53 "gl_FragCoord"
+               OpName %56 "buf0"
+               OpMemberName %56 0 "resolution"
+               OpName %58 ""
+               OpName %138 "_GLF_color"
+               OpName %163 "indexable"
+               OpDecorate %53 BuiltIn FragCoord
+               OpMemberDecorate %56 0 Offset 0
+               OpDecorate %56 Block
+               OpDecorate %58 DescriptorSet 0
+               OpDecorate %58 Binding 0
+               OpDecorate %138 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeInt 32 1
+          %7 = OpTypeVector %6 2
+         %13 = OpTypeInt 32 0
+         %18 = OpConstant %6 0
+         %19 = OpTypeBool
+         %26 = OpConstant %6 1
+         %38 = OpConstant %6 2
+         %47 = OpTypeFloat 32
+         %48 = OpTypeVector %47 2
+         %51 = OpTypeVector %47 4
+         %52 = OpTypePointer Input %51
+         %53 = OpVariable %52 Input
+         %56 = OpTypeStruct %48
+         %57 = OpTypePointer Uniform %56
+         %58 = OpVariable %57 Uniform
+         %59 = OpTypePointer Uniform %48
+         %67 = OpConstant %47 8
+         %78 = OpConstant %6 5
+         %82 = OpConstant %6 10
+         %95 = OpConstant %6 8
+        %107 = OpConstant %6 100
+        %130 = OpConstant %6 15
+        %132 = OpConstant %6 16
+        %137 = OpTypePointer Output %51
+        %138 = OpVariable %137 Output
+        %139 = OpConstant %13 16
+        %140 = OpTypeArray %51 %139
+        %141 = OpConstant %47 0
+        %142 = OpConstant %47 1
+        %143 = OpConstantComposite %51 %141 %141 %141 %142
+        %144 = OpConstant %47 0.5
+        %145 = OpConstantComposite %51 %144 %141 %141 %142
+        %146 = OpConstantComposite %51 %141 %144 %141 %142
+        %147 = OpConstantComposite %51 %144 %144 %141 %142
+        %148 = OpConstantComposite %51 %141 %141 %144 %142
+        %149 = OpConstantComposite %51 %144 %141 %144 %142
+        %150 = OpConstantComposite %51 %141 %144 %144 %142
+        %151 = OpConstantComposite %51 %144 %144 %144 %142
+        %152 = OpConstantComposite %51 %142 %141 %141 %142
+        %153 = OpConstantComposite %51 %141 %142 %141 %142
+        %154 = OpConstantComposite %51 %142 %142 %141 %142
+        %155 = OpConstantComposite %51 %141 %141 %142 %142
+        %156 = OpConstantComposite %51 %142 %141 %142 %142
+        %157 = OpConstantComposite %51 %141 %142 %142 %142
+        %158 = OpConstantComposite %51 %142 %142 %142 %142
+        %159 = OpConstantComposite %140 %143 %145 %146 %147 %148 %149 %150 %151 %143 %152 %153 %154 %155 %156 %157 %158
+        %162 = OpTypePointer Function %140
+        %164 = OpTypePointer Function %51
+        %440 = OpConstant %47 0
+        %441 = OpConstantComposite %51 %440 %440 %440 %440
+        %442 = OpConstantComposite %140 %441 %441 %441 %441 %441 %441 %441 %441 %441 %441 %441 %441 %441 %441 %441 %441
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+        %163 = OpVariable %162 Function
+         %54 = OpLoad %51 %53
+         %55 = OpVectorShuffle %48 %54 %54 0 1
+         %60 = OpAccessChain %59 %58 %18
+         %61 = OpLoad %48 %60
+         %62 = OpFDiv %48 %55 %61
+         %66 = OpCompositeExtract %47 %62 0
+         %68 = OpFMul %47 %66 %67
+         %69 = OpConvertFToS %6 %68
+        %330 = OpAccessChain %162 %163
+         %71 = OpCompositeExtract %47 %62 1
+         %72 = OpFMul %47 %71 %67
+         %73 = OpConvertFToS %6 %72
+         %79 = OpBitwiseAnd %6 %69 %78
+         %83 = OpBitwiseAnd %6 %73 %82
+         %84 = OpBitwiseOr %6 %79 %83
+         %88 = OpBitwiseAnd %6 %73 %78
+         %91 = OpBitwiseAnd %6 %69 %82
+         %92 = OpBitwiseOr %6 %88 %91
+         %96 = OpIMul %6 %84 %95
+         %98 = OpIAdd %6 %96 %92
+         %99 = OpCompositeConstruct %7 %98 %18
+               OpBranch %101
+        %101 = OpLabel
+        %224 = OpPhi %7 %99 %5 %214 %104
+        %193 = OpPhi %6 %18 %5 %113 %104
+        %108 = OpSLessThan %19 %193 %107
+               OpLoopMerge %103 %104 None
+               OpBranchConditional %108 %102 %103
+        %102 = OpLabel
+        %170 = OpCompositeExtract %6 %224 0
+        %171 = OpSGreaterThan %19 %170 %18
+               OpSelectionMerge %176 None
+               OpBranchConditional %171 %172 %176
+        %172 = OpLabel
+        %174 = OpCompositeExtract %6 %224 1
+        %175 = OpISub %6 %174 %26
+        %206 = OpCompositeInsert %7 %175 %224 1
+               OpBranch %176
+        %176 = OpLabel
+        %227 = OpPhi %7 %224 %102 %206 %172
+        %178 = OpCompositeExtract %6 %227 0
+        %179 = OpSLessThan %19 %178 %18
+               OpSelectionMerge %184 None
+               OpBranchConditional %179 %180 %184
+        %180 = OpLabel
+        %182 = OpCompositeExtract %6 %227 1
+        %183 = OpIAdd %6 %182 %26
+        %210 = OpCompositeInsert %7 %183 %227 1
+               OpBranch %184
+        %184 = OpLabel
+        %228 = OpPhi %7 %227 %176 %210 %180
+        %186 = OpCompositeExtract %6 %228 1
+        %187 = OpSDiv %6 %186 %38
+        %189 = OpCompositeExtract %6 %228 0
+        %190 = OpIAdd %6 %189 %187
+        %214 = OpCompositeInsert %7 %190 %228 0
+               OpBranch %104
+        %104 = OpLabel
+        %113 = OpIAdd %6 %193 %26
+               OpBranch %101
+        %103 = OpLabel
+        %115 = OpCompositeExtract %6 %224 0
+        %116 = OpSLessThan %19 %115 %18
+               OpSelectionMerge %118 None
+               OpBranchConditional %116 %117 %118
+        %117 = OpLabel
+        %121 = OpSNegate %6 %115
+        %218 = OpCompositeInsert %7 %121 %224 0
+               OpBranch %118
+        %118 = OpLabel
+        %226 = OpPhi %7 %224 %103 %218 %117
+               OpBranch %123
+        %123 = OpLabel
+        %225 = OpPhi %7 %226 %118 %222 %124
+        %129 = OpCompositeExtract %6 %225 0
+        %131 = OpSGreaterThan %19 %129 %130
+               OpLoopMerge %125 %124 None
+               OpBranchConditional %131 %124 %125
+        %124 = OpLabel
+        %135 = OpISub %6 %129 %132
+        %222 = OpCompositeInsert %7 %135 %225 0
+               OpBranch %123
+        %125 = OpLabel
+               OpStore %163 %159
+        %165 = OpAccessChain %164 %163 %129
+        %548 = OpLoad %140 %330
+               OpStore %330 %442
+               OpStore %330 %548
+        %166 = OpLoad %51 %165
+               OpStore %138 %166
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# resolution
+BUFFER variant_resolution DATA_TYPE vec2<float> STD140 DATA
+ 256.0 256.0
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 256 256
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant_resolution AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256
+
+
+SHADER vertex variant_2_vertex_shader PASSTHROUGH
+
+SHADER fragment variant_2_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 7
+; Bound: 443
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %53 %138
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 320
+               OpName %4 "main"
+               OpName %53 "gl_FragCoord"
+               OpName %56 "buf0"
+               OpMemberName %56 0 "resolution"
+               OpName %58 ""
+               OpName %138 "_GLF_color"
+               OpName %163 "indexable"
+               OpDecorate %53 BuiltIn FragCoord
+               OpMemberDecorate %56 0 Offset 0
+               OpDecorate %56 Block
+               OpDecorate %58 DescriptorSet 0
+               OpDecorate %58 Binding 0
+               OpDecorate %138 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeInt 32 1
+          %7 = OpTypeVector %6 2
+         %13 = OpTypeInt 32 0
+         %18 = OpConstant %6 0
+         %19 = OpTypeBool
+         %26 = OpConstant %6 1
+         %38 = OpConstant %6 2
+         %47 = OpTypeFloat 32
+         %48 = OpTypeVector %47 2
+         %51 = OpTypeVector %47 4
+         %52 = OpTypePointer Input %51
+         %53 = OpVariable %52 Input
+         %56 = OpTypeStruct %48
+         %57 = OpTypePointer Uniform %56
+         %58 = OpVariable %57 Uniform
+         %59 = OpTypePointer Uniform %48
+         %67 = OpConstant %47 8
+         %78 = OpConstant %6 5
+         %82 = OpConstant %6 10
+         %95 = OpConstant %6 8
+        %107 = OpConstant %6 100
+        %130 = OpConstant %6 15
+        %132 = OpConstant %6 16
+        %137 = OpTypePointer Output %51
+        %138 = OpVariable %137 Output
+        %139 = OpConstant %13 16
+        %140 = OpTypeArray %51 %139
+        %141 = OpConstant %47 0
+        %142 = OpConstant %47 1
+        %143 = OpConstantComposite %51 %141 %141 %141 %142
+        %144 = OpConstant %47 0.5
+        %145 = OpConstantComposite %51 %144 %141 %141 %142
+        %146 = OpConstantComposite %51 %141 %144 %141 %142
+        %147 = OpConstantComposite %51 %144 %144 %141 %142
+        %148 = OpConstantComposite %51 %141 %141 %144 %142
+        %149 = OpConstantComposite %51 %144 %141 %144 %142
+        %150 = OpConstantComposite %51 %141 %144 %144 %142
+        %151 = OpConstantComposite %51 %144 %144 %144 %142
+        %152 = OpConstantComposite %51 %142 %141 %141 %142
+        %153 = OpConstantComposite %51 %141 %142 %141 %142
+        %154 = OpConstantComposite %51 %142 %142 %141 %142
+        %155 = OpConstantComposite %51 %141 %141 %142 %142
+        %156 = OpConstantComposite %51 %142 %141 %142 %142
+        %157 = OpConstantComposite %51 %141 %142 %142 %142
+        %158 = OpConstantComposite %51 %142 %142 %142 %142
+        %159 = OpConstantComposite %140 %143 %145 %146 %147 %148 %149 %150 %151 %143 %152 %153 %154 %155 %156 %157 %158
+        %162 = OpTypePointer Function %140
+        %164 = OpTypePointer Function %51
+        %440 = OpConstant %47 0
+        %441 = OpConstantComposite %51 %440 %440 %440 %440
+        %442 = OpConstantComposite %140 %441 %441 %441 %441 %441 %441 %441 %441 %441 %441 %441 %441 %441 %441 %441 %441
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+        %163 = OpVariable %162 Function
+         %54 = OpLoad %51 %53
+         %55 = OpVectorShuffle %48 %54 %54 0 1
+         %60 = OpAccessChain %59 %58 %18
+         %61 = OpLoad %48 %60
+         %62 = OpFDiv %48 %55 %61
+         %66 = OpCompositeExtract %47 %62 0
+         %68 = OpFMul %47 %66 %67
+         %69 = OpConvertFToS %6 %68
+        %330 = OpAccessChain %162 %163
+         %71 = OpCompositeExtract %47 %62 1
+         %72 = OpFMul %47 %71 %67
+         %73 = OpConvertFToS %6 %72
+         %79 = OpBitwiseAnd %6 %69 %78
+         %83 = OpBitwiseAnd %6 %73 %82
+         %84 = OpBitwiseOr %6 %79 %83
+         %88 = OpBitwiseAnd %6 %73 %78
+         %91 = OpBitwiseAnd %6 %69 %82
+         %92 = OpBitwiseOr %6 %88 %91
+         %96 = OpIMul %6 %84 %95
+         %98 = OpIAdd %6 %96 %92
+         %99 = OpCompositeConstruct %7 %98 %18
+               OpBranch %101
+        %101 = OpLabel
+        %224 = OpPhi %7 %99 %5 %214 %104
+        %193 = OpPhi %6 %18 %5 %113 %104
+        %108 = OpSLessThan %19 %193 %107
+               OpLoopMerge %103 %104 None
+               OpBranchConditional %108 %102 %103
+        %102 = OpLabel
+        %170 = OpCompositeExtract %6 %224 0
+        %171 = OpSGreaterThan %19 %170 %18
+               OpSelectionMerge %176 None
+               OpBranchConditional %171 %172 %176
+        %172 = OpLabel
+        %174 = OpCompositeExtract %6 %224 1
+        %175 = OpISub %6 %174 %26
+        %206 = OpCompositeInsert %7 %175 %224 1
+               OpBranch %176
+        %176 = OpLabel
+        %227 = OpPhi %7 %224 %102 %206 %172
+        %178 = OpCompositeExtract %6 %227 0
+        %179 = OpSLessThan %19 %178 %18
+               OpSelectionMerge %184 None
+               OpBranchConditional %179 %180 %184
+        %180 = OpLabel
+        %182 = OpCompositeExtract %6 %227 1
+        %183 = OpIAdd %6 %182 %26
+        %210 = OpCompositeInsert %7 %183 %227 1
+               OpBranch %184
+        %184 = OpLabel
+        %228 = OpPhi %7 %227 %176 %210 %180
+        %186 = OpCompositeExtract %6 %228 1
+        %187 = OpSDiv %6 %186 %38
+        %189 = OpCompositeExtract %6 %228 0
+        %190 = OpIAdd %6 %189 %187
+        %214 = OpCompositeInsert %7 %190 %228 0
+               OpBranch %104
+        %104 = OpLabel
+        %113 = OpIAdd %6 %193 %26
+               OpBranch %101
+        %103 = OpLabel
+        %115 = OpCompositeExtract %6 %224 0
+        %116 = OpSLessThan %19 %115 %18
+               OpSelectionMerge %118 None
+               OpBranchConditional %116 %117 %118
+        %117 = OpLabel
+        %121 = OpSNegate %6 %115
+        %218 = OpCompositeInsert %7 %121 %224 0
+               OpBranch %118
+        %118 = OpLabel
+        %226 = OpPhi %7 %224 %103 %218 %117
+               OpBranch %123
+        %123 = OpLabel
+        %225 = OpPhi %7 %226 %118 %222 %124
+        %129 = OpCompositeExtract %6 %225 0
+        %131 = OpSGreaterThan %19 %129 %130
+               OpLoopMerge %125 %124 None
+               OpBranchConditional %131 %124 %125
+        %124 = OpLabel
+        %135 = OpISub %6 %129 %132
+        %222 = OpCompositeInsert %7 %135 %225 0
+               OpBranch %123
+        %125 = OpLabel
+               OpStore %163 %159
+        %165 = OpAccessChain %164 %163 %129
+        %166 = OpLoad %51 %165
+               OpStore %138 %166
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for variant_2
+
+# resolution
+BUFFER variant_2_resolution DATA_TYPE vec2<float> STD140 DATA
+ 256.0 256.0
+END
+
+BUFFER variant_2_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_2_pipeline
+  ATTACH variant_2_vertex_shader
+  ATTACH variant_2_fragment_shader
+  FRAMEBUFFER_SIZE 256 256
+  BIND BUFFER variant_2_framebuffer AS color LOCATION 0
+  BIND BUFFER variant_2_resolution AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_2_pipeline 0 0 0 255
+
+CLEAR variant_2_pipeline
+RUN variant_2_pipeline DRAW_RECT POS 0 0 SIZE 256 256
+
+EXPECT reference_framebuffer EQ_HISTOGRAM_EMD_BUFFER variant_framebuffer TOLERANCE 0.005
+EXPECT reference_framebuffer EQ_HISTOGRAM_EMD_BUFFER variant_2_framebuffer TOLERANCE 0.005
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/spv-stable-pillars-O-op-select-to-op-phi.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/spv-stable-pillars-O-op-select-to-op-phi.amber
new file mode 100644
index 0000000..57d04a8
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/spv-stable-pillars-O-op-select-to-op-phi.amber
@@ -0,0 +1,1011 @@
+#!amber
+
+# Copyright 2020 Google LLC
+#
+# 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.
+
+
+# A test for a bug found by the GraphicsFuzz project.
+
+# Short description: Three shaders diff: OpSelect -> OpPhi
+
+# The test renders three images using semantically equivalent shaders, and then
+# checks that the images are similar.
+# The test passes because the shaders have the same semantics and so the images
+# should be the same.
+
+SHADER vertex reference_vertex_shader PASSTHROUGH
+
+SHADER fragment reference_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 7
+; Bound: 366
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %246 %268
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 320
+               OpName %4 "main"
+               OpName %246 "gl_FragCoord"
+               OpName %249 "buf0"
+               OpMemberName %249 0 "resolution"
+               OpName %251 ""
+               OpName %268 "_GLF_color"
+               OpDecorate %246 BuiltIn FragCoord
+               OpMemberDecorate %249 0 Offset 0
+               OpDecorate %249 Block
+               OpDecorate %251 DescriptorSet 0
+               OpDecorate %251 Binding 0
+               OpDecorate %268 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeInt 32 1
+          %7 = OpTypeVector %6 2
+          %9 = OpTypeFloat 32
+         %10 = OpTypeVector %9 4
+         %20 = OpTypeInt 32 0
+         %22 = OpTypePointer Function %6
+         %25 = OpConstant %6 256
+         %26 = OpTypeBool
+         %28 = OpConstant %20 0
+         %31 = OpConstant %20 256
+         %32 = OpTypeArray %6 %31
+         %33 = OpConstant %6 115
+         %34 = OpConstant %6 133
+         %35 = OpConstant %6 150
+         %36 = OpConstant %6 164
+         %37 = OpConstant %6 176
+         %38 = OpConstant %6 184
+         %39 = OpConstant %6 190
+         %40 = OpConstant %6 192
+         %41 = OpConstant %6 191
+         %42 = OpConstant %6 187
+         %43 = OpConstant %6 181
+         %44 = OpConstant %6 172
+         %45 = OpConstant %6 163
+         %46 = OpConstant %6 153
+         %47 = OpConstant %6 143
+         %48 = OpConstant %6 134
+         %49 = OpConstant %6 126
+         %50 = OpConstant %6 120
+         %51 = OpConstant %6 116
+         %52 = OpConstant %6 114
+         %53 = OpConstant %6 117
+         %54 = OpConstant %6 121
+         %55 = OpConstant %6 127
+         %56 = OpConstant %6 141
+         %57 = OpConstant %6 148
+         %58 = OpConstant %6 154
+         %59 = OpConstant %6 159
+         %60 = OpConstant %6 162
+         %61 = OpConstant %6 161
+         %62 = OpConstant %6 157
+         %63 = OpConstant %6 151
+         %64 = OpConstant %6 124
+         %65 = OpConstant %6 113
+         %66 = OpConstant %6 103
+         %67 = OpConstant %6 94
+         %68 = OpConstant %6 87
+         %69 = OpConstant %6 82
+         %70 = OpConstant %6 79
+         %71 = OpConstant %6 80
+         %72 = OpConstant %6 84
+         %73 = OpConstant %6 91
+         %74 = OpConstant %6 101
+         %75 = OpConstant %6 130
+         %76 = OpConstant %6 146
+         %77 = OpConstant %6 182
+         %78 = OpConstant %6 199
+         %79 = OpConstant %6 215
+         %80 = OpConstant %6 229
+         %81 = OpConstant %6 240
+         %82 = OpConstant %6 249
+         %83 = OpConstant %6 254
+         %84 = OpConstant %6 250
+         %85 = OpConstant %6 243
+         %86 = OpConstant %6 233
+         %87 = OpConstant %6 223
+         %88 = OpConstant %6 212
+         %89 = OpConstant %6 200
+         %90 = OpConstant %6 180
+         %91 = OpConstant %6 166
+         %92 = OpConstant %6 169
+         %93 = OpConstant %6 174
+         %94 = OpConstant %6 179
+         %95 = OpConstant %6 185
+         %96 = OpConstant %6 193
+         %97 = OpConstant %6 195
+         %98 = OpConstant %6 188
+         %99 = OpConstant %6 171
+        %100 = OpConstant %6 149
+        %101 = OpConstant %6 137
+        %102 = OpConstant %6 125
+        %103 = OpConstant %6 105
+        %104 = OpConstant %6 97
+        %105 = OpConstant %6 93
+        %106 = OpConstant %6 98
+        %107 = OpConstant %6 106
+        %108 = OpConstant %6 145
+        %109 = OpConstant %6 177
+        %110 = OpConstant %6 208
+        %111 = OpConstant %6 221
+        %112 = OpConstant %6 231
+        %113 = OpConstant %6 239
+        %114 = OpConstant %6 244
+        %115 = OpConstant %6 242
+        %116 = OpConstant %6 236
+        %117 = OpConstant %6 228
+        %118 = OpConstant %6 218
+        %119 = OpConstant %6 207
+        %120 = OpConstant %6 194
+        %121 = OpConstant %6 158
+        %122 = OpConstant %6 135
+        %123 = OpConstant %6 132
+        %124 = OpConstant %6 131
+        %125 = OpConstant %6 138
+        %126 = OpConstant %6 147
+        %127 = OpConstant %6 155
+        %128 = OpConstant %6 152
+        %129 = OpConstant %6 139
+        %130 = OpConstant %6 129
+        %131 = OpConstant %6 118
+        %132 = OpConstant %6 68
+        %133 = OpConstant %6 58
+        %134 = OpConstant %6 49
+        %135 = OpConstant %6 43
+        %136 = OpConstant %6 40
+        %137 = OpConstant %6 41
+        %138 = OpConstant %6 44
+        %139 = OpConstant %6 51
+        %140 = OpConstant %6 61
+        %141 = OpConstant %6 73
+        %142 = OpConstant %6 119
+        %143 = OpConstant %6 173
+        %144 = OpConstant %6 186
+        %145 = OpConstant %6 128
+        %146 = OpConstant %6 104
+        %147 = OpConstant %6 86
+        %148 = OpConstant %6 81
+        %149 = OpConstant %6 77
+        %150 = OpConstant %6 76
+        %151 = OpConstant %6 89
+        %152 = OpConstant %6 102
+        %153 = OpConstant %6 92
+        %154 = OpConstant %6 83
+        %155 = OpConstant %6 62
+        %156 = OpConstant %6 50
+        %157 = OpConstant %6 38
+        %158 = OpConstant %6 26
+        %159 = OpConstant %6 16
+        %160 = OpConstant %6 8
+        %161 = OpConstant %6 2
+        %162 = OpConstant %6 0
+        %163 = OpConstant %6 4
+        %164 = OpConstant %6 11
+        %165 = OpConstant %6 21
+        %166 = OpConstant %6 33
+        %167 = OpConstant %6 48
+        %168 = OpConstant %6 64
+        %169 = OpConstant %6 144
+        %170 = OpConstant %6 123
+        %171 = OpConstant %6 112
+        %172 = OpConstant %6 100
+        %173 = OpConstant %6 90
+        %174 = OpConstant %6 65
+        %175 = OpConstant %6 67
+        %176 = OpConstant %6 70
+        %177 = OpConstant %6 75
+        %178 = OpConstant %6 95
+        %179 = OpConstant %6 88
+        %180 = OpConstant %6 69
+        %181 = OpConstant %6 47
+        %182 = OpConstant %6 36
+        %183 = OpConstant %6 18
+        %184 = OpConstant %6 13
+        %185 = OpConstant %6 15
+        %186 = OpConstant %6 22
+        %187 = OpConstant %6 32
+        %188 = OpConstant %6 45
+        %189 = OpConstant %6 60
+        %190 = OpConstantComposite %32 %33 %34 %35 %36 %37 %38 %39 %40 %41 %42 %43 %44 %45 %46 %47 %48 %49 %50 %51 %52 %52 %53 %54 %55 %48 %56 %57 %58 %59 %60 %45 %61 %62 %63 %47 %48 %64 %65 %66 %67 %68 %69 %70 %71 %72 %73 %74 %52 %75 %76 %36 %77 %78 %79 %80 %81 %82 %83 %25 %83 %84 %85 %86 %87 %88 %89 %39 %90 %44 %91 %45 %61 %60 %36 %92 %93 %94 %95 %39 %96 %97 %97 %40 %98 %90 %99 %61 %100 %101 %102 %52 %103 %104 %105 %73 %105 %106 %107 %53 %75 %108 %61 %109 %96 %110 %111 %112 %113 %85 %114 %115 %116 %117 %118 %119 %120 %43 %92 %121 %57 %56 %122 %123 %124 %123 %122 %125 %47 %126 %63 %58 %127 %127 %128 %76 %129 %130 %131 %107 %105 %71 %132 %133 %134 %135 %136 %137 %138 %139 %140 %141 %68 %66 %142 %48 %100 %60 %143 %43 %144 %98 %144 %43 %93 %36 %46 %56 %145 %51 %146 %67 %147 %148 %149 %150 %149 %71 %72 %151 %67 %106 %152 %146 %146 %152 %106 %153 %154 %141 %155 %156 %157 %158 %159 %160 %161 %162 %162 %163 %164 %165 %166 %167 %168 %148 %106 %52 %130 %56 %63 %121 %61 %61 %121 %128 %169 %48 %170 %171 %172 %173 %148 %141 %132 %174 %174 %175 %176 %177 %148 %68 %153 %104 %74 %66 %152 %172 %178 %179 %70 %180 %133 %181 %182 %158 %183 %184 %164 %164 %185 %186 %187 %188 %189 %149 %67
+        %193 = OpTypePointer Function %32
+        %215 = OpConstant %9 15
+        %231 = OpConstant %9 1
+        %236 = OpConstant %6 1
+        %238 = OpConstant %9 0
+        %239 = OpConstantComposite %10 %238 %238 %238 %231
+        %242 = OpTypeVector %9 2
+        %245 = OpTypePointer Input %10
+        %246 = OpVariable %245 Input
+        %249 = OpTypeStruct %242
+        %250 = OpTypePointer Uniform %249
+        %251 = OpVariable %250 Uniform
+        %252 = OpTypePointer Uniform %242
+        %259 = OpConstant %9 256
+        %267 = OpTypePointer Output %10
+        %268 = OpVariable %267 Output
+        %277 = OpConstantFalse %26
+        %280 = OpConstantTrue %26
+        %363 = OpUndef %10
+        %365 = OpConstant %9 0.0666666701
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+        %285 = OpVariable %193 Function
+        %286 = OpVariable %193 Function
+        %288 = OpVariable %193 Function
+        %247 = OpLoad %10 %246
+        %248 = OpVectorShuffle %242 %247 %247 0 1
+        %253 = OpAccessChain %252 %251 %162
+        %254 = OpLoad %242 %253
+        %255 = OpFDiv %242 %248 %254
+        %258 = OpCompositeExtract %9 %255 0
+        %260 = OpFMul %9 %258 %259
+        %261 = OpConvertFToS %6 %260
+        %263 = OpCompositeExtract %9 %255 1
+        %264 = OpFMul %9 %263 %259
+        %265 = OpConvertFToS %6 %264
+        %266 = OpCompositeConstruct %7 %261 %265
+               OpSelectionMerge %341 None
+               OpSwitch %28 %291
+        %291 = OpLabel
+               OpBranch %292
+        %292 = OpLabel
+        %355 = OpPhi %7 %266 %291 %354 %337
+        %295 = OpCompositeExtract %6 %355 1
+        %296 = OpINotEqual %26 %295 %25
+               OpLoopMerge %338 %337 None
+               OpBranchConditional %296 %297 %338
+        %297 = OpLabel
+        %299 = OpCompositeExtract %6 %355 0
+               OpStore %285 %190
+        %302 = OpAccessChain %22 %285 %295
+        %303 = OpLoad %6 %302
+        %304 = OpIAdd %6 %303 %185
+        %305 = OpSLessThan %26 %299 %304
+               OpSelectionMerge %315 None
+               OpBranchConditional %305 %306 %315
+        %306 = OpLabel
+               OpStore %286 %190
+        %311 = OpAccessChain %22 %286 %295
+        %312 = OpLoad %6 %311
+        %313 = OpISub %6 %312 %185
+        %314 = OpSGreaterThan %26 %299 %313
+               OpBranch %315
+        %315 = OpLabel
+        %316 = OpPhi %26 %305 %297 %314 %306
+               OpSelectionMerge %333 None
+               OpBranchConditional %316 %317 %333
+        %317 = OpLabel
+               OpStore %288 %190
+        %322 = OpAccessChain %22 %288 %295
+        %323 = OpLoad %6 %322
+        %324 = OpISub %6 %299 %323
+        %325 = OpConvertSToF %9 %324
+        %326 = OpExtInst %9 %1 FAbs %325
+        %327 = OpFSub %9 %215 %326
+        %328 = OpFMul %9 %327 %365
+        %332 = OpCompositeConstruct %10 %328 %328 %328 %231
+               OpBranch %338
+        %333 = OpLabel
+        %336 = OpIAdd %6 %295 %236
+        %354 = OpCompositeInsert %7 %336 %355 1
+               OpBranch %337
+        %337 = OpLabel
+               OpBranch %292
+        %338 = OpLabel
+        %361 = OpPhi %10 %363 %292 %332 %317
+        %357 = OpPhi %26 %277 %292 %280 %317
+               OpSelectionMerge %340 None
+               OpBranchConditional %357 %341 %340
+        %340 = OpLabel
+               OpBranch %341
+        %341 = OpLabel
+        %360 = OpPhi %10 %361 %338 %239 %340
+               OpStore %268 %360
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for reference
+
+# resolution
+BUFFER reference_resolution DATA_TYPE vec2<float> STD140 DATA
+ 32.0 16.0
+END
+
+BUFFER reference_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics reference_pipeline
+  ATTACH reference_vertex_shader
+  ATTACH reference_fragment_shader
+  FRAMEBUFFER_SIZE 32 16
+  BIND BUFFER reference_framebuffer AS color LOCATION 0
+  BIND BUFFER reference_resolution AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR reference_pipeline 0 0 0 255
+
+CLEAR reference_pipeline
+RUN reference_pipeline DRAW_RECT POS 0 0 SIZE 32 16
+
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 7
+; Bound: 534
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %246 %268
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 320
+               OpName %4 "main"
+               OpName %246 "gl_FragCoord"
+               OpName %249 "buf0"
+               OpMemberName %249 0 "resolution"
+               OpName %251 ""
+               OpName %268 "_GLF_color"
+               OpDecorate %246 BuiltIn FragCoord
+               OpMemberDecorate %249 0 Offset 0
+               OpDecorate %249 Block
+               OpDecorate %251 DescriptorSet 0
+               OpDecorate %251 Binding 0
+               OpDecorate %268 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeInt 32 1
+          %7 = OpTypeVector %6 2
+          %9 = OpTypeFloat 32
+         %10 = OpTypeVector %9 4
+         %20 = OpTypeInt 32 0
+         %22 = OpTypePointer Function %6
+         %25 = OpConstant %6 256
+         %26 = OpTypeBool
+         %28 = OpConstant %20 0
+         %31 = OpConstant %20 256
+         %32 = OpTypeArray %6 %31
+         %33 = OpConstant %6 115
+         %34 = OpConstant %6 133
+         %35 = OpConstant %6 150
+         %36 = OpConstant %6 164
+         %37 = OpConstant %6 176
+         %38 = OpConstant %6 184
+         %39 = OpConstant %6 190
+         %40 = OpConstant %6 192
+         %41 = OpConstant %6 191
+         %42 = OpConstant %6 187
+         %43 = OpConstant %6 181
+         %44 = OpConstant %6 172
+         %45 = OpConstant %6 163
+         %46 = OpConstant %6 153
+         %47 = OpConstant %6 143
+         %48 = OpConstant %6 134
+         %49 = OpConstant %6 126
+         %50 = OpConstant %6 120
+         %51 = OpConstant %6 116
+         %52 = OpConstant %6 114
+         %53 = OpConstant %6 117
+         %54 = OpConstant %6 121
+         %55 = OpConstant %6 127
+         %56 = OpConstant %6 141
+         %57 = OpConstant %6 148
+         %58 = OpConstant %6 154
+         %59 = OpConstant %6 159
+         %60 = OpConstant %6 162
+         %61 = OpConstant %6 161
+         %62 = OpConstant %6 157
+         %63 = OpConstant %6 151
+         %64 = OpConstant %6 124
+         %65 = OpConstant %6 113
+         %66 = OpConstant %6 103
+         %67 = OpConstant %6 94
+         %68 = OpConstant %6 87
+         %69 = OpConstant %6 82
+         %70 = OpConstant %6 79
+         %71 = OpConstant %6 80
+         %72 = OpConstant %6 84
+         %73 = OpConstant %6 91
+         %74 = OpConstant %6 101
+         %75 = OpConstant %6 130
+         %76 = OpConstant %6 146
+         %77 = OpConstant %6 182
+         %78 = OpConstant %6 199
+         %79 = OpConstant %6 215
+         %80 = OpConstant %6 229
+         %81 = OpConstant %6 240
+         %82 = OpConstant %6 249
+         %83 = OpConstant %6 254
+         %84 = OpConstant %6 250
+         %85 = OpConstant %6 243
+         %86 = OpConstant %6 233
+         %87 = OpConstant %6 223
+         %88 = OpConstant %6 212
+         %89 = OpConstant %6 200
+         %90 = OpConstant %6 180
+         %91 = OpConstant %6 166
+         %92 = OpConstant %6 169
+         %93 = OpConstant %6 174
+         %94 = OpConstant %6 179
+         %95 = OpConstant %6 185
+         %96 = OpConstant %6 193
+         %97 = OpConstant %6 195
+         %98 = OpConstant %6 188
+         %99 = OpConstant %6 171
+        %100 = OpConstant %6 149
+        %101 = OpConstant %6 137
+        %102 = OpConstant %6 125
+        %103 = OpConstant %6 105
+        %104 = OpConstant %6 97
+        %105 = OpConstant %6 93
+        %106 = OpConstant %6 98
+        %107 = OpConstant %6 106
+        %108 = OpConstant %6 145
+        %109 = OpConstant %6 177
+        %110 = OpConstant %6 208
+        %111 = OpConstant %6 221
+        %112 = OpConstant %6 231
+        %113 = OpConstant %6 239
+        %114 = OpConstant %6 244
+        %115 = OpConstant %6 242
+        %116 = OpConstant %6 236
+        %117 = OpConstant %6 228
+        %118 = OpConstant %6 218
+        %119 = OpConstant %6 207
+        %120 = OpConstant %6 194
+        %121 = OpConstant %6 158
+        %122 = OpConstant %6 135
+        %123 = OpConstant %6 132
+        %124 = OpConstant %6 131
+        %125 = OpConstant %6 138
+        %126 = OpConstant %6 147
+        %127 = OpConstant %6 155
+        %128 = OpConstant %6 152
+        %129 = OpConstant %6 139
+        %130 = OpConstant %6 129
+        %131 = OpConstant %6 118
+        %132 = OpConstant %6 68
+        %133 = OpConstant %6 58
+        %134 = OpConstant %6 49
+        %135 = OpConstant %6 43
+        %136 = OpConstant %6 40
+        %137 = OpConstant %6 41
+        %138 = OpConstant %6 44
+        %139 = OpConstant %6 51
+        %140 = OpConstant %6 61
+        %141 = OpConstant %6 73
+        %142 = OpConstant %6 119
+        %143 = OpConstant %6 173
+        %144 = OpConstant %6 186
+        %145 = OpConstant %6 128
+        %146 = OpConstant %6 104
+        %147 = OpConstant %6 86
+        %148 = OpConstant %6 81
+        %149 = OpConstant %6 77
+        %150 = OpConstant %6 76
+        %151 = OpConstant %6 89
+        %152 = OpConstant %6 102
+        %153 = OpConstant %6 92
+        %154 = OpConstant %6 83
+        %155 = OpConstant %6 62
+        %156 = OpConstant %6 50
+        %157 = OpConstant %6 38
+        %158 = OpConstant %6 26
+        %159 = OpConstant %6 16
+        %160 = OpConstant %6 8
+        %161 = OpConstant %6 2
+        %162 = OpConstant %6 0
+        %163 = OpConstant %6 4
+        %164 = OpConstant %6 11
+        %165 = OpConstant %6 21
+        %166 = OpConstant %6 33
+        %167 = OpConstant %6 48
+        %168 = OpConstant %6 64
+        %169 = OpConstant %6 144
+        %170 = OpConstant %6 123
+        %171 = OpConstant %6 112
+        %172 = OpConstant %6 100
+        %173 = OpConstant %6 90
+        %174 = OpConstant %6 65
+        %175 = OpConstant %6 67
+        %176 = OpConstant %6 70
+        %177 = OpConstant %6 75
+        %178 = OpConstant %6 95
+        %179 = OpConstant %6 88
+        %180 = OpConstant %6 69
+        %181 = OpConstant %6 47
+        %182 = OpConstant %6 36
+        %183 = OpConstant %6 18
+        %184 = OpConstant %6 13
+        %185 = OpConstant %6 15
+        %186 = OpConstant %6 22
+        %187 = OpConstant %6 32
+        %188 = OpConstant %6 45
+        %189 = OpConstant %6 60
+        %190 = OpConstantComposite %32 %33 %34 %35 %36 %37 %38 %39 %40 %41 %42 %43 %44 %45 %46 %47 %48 %49 %50 %51 %52 %52 %53 %54 %55 %48 %56 %57 %58 %59 %60 %45 %61 %62 %63 %47 %48 %64 %65 %66 %67 %68 %69 %70 %71 %72 %73 %74 %52 %75 %76 %36 %77 %78 %79 %80 %81 %82 %83 %25 %83 %84 %85 %86 %87 %88 %89 %39 %90 %44 %91 %45 %61 %60 %36 %92 %93 %94 %95 %39 %96 %97 %97 %40 %98 %90 %99 %61 %100 %101 %102 %52 %103 %104 %105 %73 %105 %106 %107 %53 %75 %108 %61 %109 %96 %110 %111 %112 %113 %85 %114 %115 %116 %117 %118 %119 %120 %43 %92 %121 %57 %56 %122 %123 %124 %123 %122 %125 %47 %126 %63 %58 %127 %127 %128 %76 %129 %130 %131 %107 %105 %71 %132 %133 %134 %135 %136 %137 %138 %139 %140 %141 %68 %66 %142 %48 %100 %60 %143 %43 %144 %98 %144 %43 %93 %36 %46 %56 %145 %51 %146 %67 %147 %148 %149 %150 %149 %71 %72 %151 %67 %106 %152 %146 %146 %152 %106 %153 %154 %141 %155 %156 %157 %158 %159 %160 %161 %162 %162 %163 %164 %165 %166 %167 %168 %148 %106 %52 %130 %56 %63 %121 %61 %61 %121 %128 %169 %48 %170 %171 %172 %173 %148 %141 %132 %174 %174 %175 %176 %177 %148 %68 %153 %104 %74 %66 %152 %172 %178 %179 %70 %180 %133 %181 %182 %158 %183 %184 %164 %164 %185 %186 %187 %188 %189 %149 %67
+        %193 = OpTypePointer Function %32
+        %215 = OpConstant %9 15
+        %231 = OpConstant %9 1
+        %236 = OpConstant %6 1
+        %238 = OpConstant %9 0
+        %239 = OpConstantComposite %10 %238 %238 %238 %231
+        %242 = OpTypeVector %9 2
+        %245 = OpTypePointer Input %10
+        %246 = OpVariable %245 Input
+        %249 = OpTypeStruct %242
+        %250 = OpTypePointer Uniform %249
+        %251 = OpVariable %250 Uniform
+        %252 = OpTypePointer Uniform %242
+        %259 = OpConstant %9 256
+        %267 = OpTypePointer Output %10
+        %268 = OpVariable %267 Output
+        %277 = OpConstantFalse %26
+        %280 = OpConstantTrue %26
+        %363 = OpUndef %10
+        %365 = OpConstant %9 0.0666666701
+        %523 = OpConstant %6 0
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+        %285 = OpVariable %193 Function
+        %286 = OpVariable %193 Function
+        %288 = OpVariable %193 Function
+        %247 = OpLoad %10 %246
+        %248 = OpVectorShuffle %242 %247 %247 0 1
+        %253 = OpAccessChain %252 %251 %162
+        %254 = OpLoad %242 %253
+        %255 = OpFDiv %242 %248 %254
+        %258 = OpCompositeExtract %9 %255 0
+        %260 = OpFMul %9 %258 %259
+        %261 = OpConvertFToS %6 %260
+        %263 = OpCompositeExtract %9 %255 1
+        %264 = OpFMul %9 %263 %259
+        %265 = OpConvertFToS %6 %264
+        %266 = OpCompositeConstruct %7 %261 %265
+               OpSelectionMerge %341 None
+               OpSwitch %28 %291
+        %291 = OpLabel
+               OpBranch %292
+        %292 = OpLabel
+        %355 = OpPhi %7 %266 %291 %354 %337
+        %295 = OpCompositeExtract %6 %355 1
+        %296 = OpINotEqual %26 %295 %25
+               OpLoopMerge %338 %337 None
+               OpBranchConditional %296 %297 %338
+        %297 = OpLabel
+        %299 = OpCompositeExtract %6 %355 0
+               OpStore %285 %190
+        %302 = OpAccessChain %22 %285 %295
+        %303 = OpLoad %6 %302
+        %304 = OpIAdd %6 %303 %185
+        %305 = OpSLessThan %26 %299 %304
+               OpBranch %306
+        %306 = OpLabel
+               OpSelectionMerge %516 None
+               OpBranchConditional %305 %517 %516
+        %517 = OpLabel
+               OpStore %286 %190
+               OpBranch %516
+        %516 = OpLabel
+        %311 = OpAccessChain %22 %286 %295
+               OpSelectionMerge %518 None
+               OpBranchConditional %305 %519 %521
+        %519 = OpLabel
+        %520 = OpLoad %6 %311
+               OpBranch %518
+        %521 = OpLabel
+        %522 = OpCopyObject %6 %523
+               OpBranch %518
+        %518 = OpLabel
+        %312 = OpPhi %6 %520 %519 %522 %521
+        %313 = OpISub %6 %312 %185
+        %314 = OpSGreaterThan %26 %299 %313
+               OpSelectionMerge %315 None
+               OpBranchConditional %305 %532 %533
+        %532 = OpLabel
+               OpBranch %315
+        %533 = OpLabel
+               OpBranch %315
+        %315 = OpLabel
+        %316 = OpPhi %26 %314 %532 %305 %533
+               OpSelectionMerge %333 None
+               OpBranchConditional %316 %317 %333
+        %317 = OpLabel
+               OpStore %288 %190
+        %322 = OpAccessChain %22 %288 %295
+        %323 = OpLoad %6 %322
+        %324 = OpISub %6 %299 %323
+        %325 = OpConvertSToF %9 %324
+        %326 = OpExtInst %9 %1 FAbs %325
+        %327 = OpFSub %9 %215 %326
+        %328 = OpFMul %9 %327 %365
+        %332 = OpCompositeConstruct %10 %328 %328 %328 %231
+               OpBranch %338
+        %333 = OpLabel
+        %336 = OpIAdd %6 %295 %236
+        %354 = OpCompositeInsert %7 %336 %355 1
+               OpBranch %337
+        %337 = OpLabel
+               OpBranch %292
+        %338 = OpLabel
+        %361 = OpPhi %10 %363 %292 %332 %317
+        %357 = OpPhi %26 %277 %292 %280 %317
+               OpSelectionMerge %340 None
+               OpBranchConditional %357 %341 %340
+        %340 = OpLabel
+               OpBranch %341
+        %341 = OpLabel
+        %360 = OpPhi %10 %361 %338 %239 %340
+               OpStore %268 %360
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# resolution
+BUFFER variant_resolution DATA_TYPE vec2<float> STD140 DATA
+ 32.0 16.0
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 32 16
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant_resolution AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 32 16
+
+
+SHADER vertex variant_2_vertex_shader PASSTHROUGH
+
+SHADER fragment variant_2_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 7
+; Bound: 524
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %246 %268
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 320
+               OpName %4 "main"
+               OpName %246 "gl_FragCoord"
+               OpName %249 "buf0"
+               OpMemberName %249 0 "resolution"
+               OpName %251 ""
+               OpName %268 "_GLF_color"
+               OpDecorate %246 BuiltIn FragCoord
+               OpMemberDecorate %249 0 Offset 0
+               OpDecorate %249 Block
+               OpDecorate %251 DescriptorSet 0
+               OpDecorate %251 Binding 0
+               OpDecorate %268 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeInt 32 1
+          %7 = OpTypeVector %6 2
+          %9 = OpTypeFloat 32
+         %10 = OpTypeVector %9 4
+         %20 = OpTypeInt 32 0
+         %22 = OpTypePointer Function %6
+         %25 = OpConstant %6 256
+         %26 = OpTypeBool
+         %28 = OpConstant %20 0
+         %31 = OpConstant %20 256
+         %32 = OpTypeArray %6 %31
+         %33 = OpConstant %6 115
+         %34 = OpConstant %6 133
+         %35 = OpConstant %6 150
+         %36 = OpConstant %6 164
+         %37 = OpConstant %6 176
+         %38 = OpConstant %6 184
+         %39 = OpConstant %6 190
+         %40 = OpConstant %6 192
+         %41 = OpConstant %6 191
+         %42 = OpConstant %6 187
+         %43 = OpConstant %6 181
+         %44 = OpConstant %6 172
+         %45 = OpConstant %6 163
+         %46 = OpConstant %6 153
+         %47 = OpConstant %6 143
+         %48 = OpConstant %6 134
+         %49 = OpConstant %6 126
+         %50 = OpConstant %6 120
+         %51 = OpConstant %6 116
+         %52 = OpConstant %6 114
+         %53 = OpConstant %6 117
+         %54 = OpConstant %6 121
+         %55 = OpConstant %6 127
+         %56 = OpConstant %6 141
+         %57 = OpConstant %6 148
+         %58 = OpConstant %6 154
+         %59 = OpConstant %6 159
+         %60 = OpConstant %6 162
+         %61 = OpConstant %6 161
+         %62 = OpConstant %6 157
+         %63 = OpConstant %6 151
+         %64 = OpConstant %6 124
+         %65 = OpConstant %6 113
+         %66 = OpConstant %6 103
+         %67 = OpConstant %6 94
+         %68 = OpConstant %6 87
+         %69 = OpConstant %6 82
+         %70 = OpConstant %6 79
+         %71 = OpConstant %6 80
+         %72 = OpConstant %6 84
+         %73 = OpConstant %6 91
+         %74 = OpConstant %6 101
+         %75 = OpConstant %6 130
+         %76 = OpConstant %6 146
+         %77 = OpConstant %6 182
+         %78 = OpConstant %6 199
+         %79 = OpConstant %6 215
+         %80 = OpConstant %6 229
+         %81 = OpConstant %6 240
+         %82 = OpConstant %6 249
+         %83 = OpConstant %6 254
+         %84 = OpConstant %6 250
+         %85 = OpConstant %6 243
+         %86 = OpConstant %6 233
+         %87 = OpConstant %6 223
+         %88 = OpConstant %6 212
+         %89 = OpConstant %6 200
+         %90 = OpConstant %6 180
+         %91 = OpConstant %6 166
+         %92 = OpConstant %6 169
+         %93 = OpConstant %6 174
+         %94 = OpConstant %6 179
+         %95 = OpConstant %6 185
+         %96 = OpConstant %6 193
+         %97 = OpConstant %6 195
+         %98 = OpConstant %6 188
+         %99 = OpConstant %6 171
+        %100 = OpConstant %6 149
+        %101 = OpConstant %6 137
+        %102 = OpConstant %6 125
+        %103 = OpConstant %6 105
+        %104 = OpConstant %6 97
+        %105 = OpConstant %6 93
+        %106 = OpConstant %6 98
+        %107 = OpConstant %6 106
+        %108 = OpConstant %6 145
+        %109 = OpConstant %6 177
+        %110 = OpConstant %6 208
+        %111 = OpConstant %6 221
+        %112 = OpConstant %6 231
+        %113 = OpConstant %6 239
+        %114 = OpConstant %6 244
+        %115 = OpConstant %6 242
+        %116 = OpConstant %6 236
+        %117 = OpConstant %6 228
+        %118 = OpConstant %6 218
+        %119 = OpConstant %6 207
+        %120 = OpConstant %6 194
+        %121 = OpConstant %6 158
+        %122 = OpConstant %6 135
+        %123 = OpConstant %6 132
+        %124 = OpConstant %6 131
+        %125 = OpConstant %6 138
+        %126 = OpConstant %6 147
+        %127 = OpConstant %6 155
+        %128 = OpConstant %6 152
+        %129 = OpConstant %6 139
+        %130 = OpConstant %6 129
+        %131 = OpConstant %6 118
+        %132 = OpConstant %6 68
+        %133 = OpConstant %6 58
+        %134 = OpConstant %6 49
+        %135 = OpConstant %6 43
+        %136 = OpConstant %6 40
+        %137 = OpConstant %6 41
+        %138 = OpConstant %6 44
+        %139 = OpConstant %6 51
+        %140 = OpConstant %6 61
+        %141 = OpConstant %6 73
+        %142 = OpConstant %6 119
+        %143 = OpConstant %6 173
+        %144 = OpConstant %6 186
+        %145 = OpConstant %6 128
+        %146 = OpConstant %6 104
+        %147 = OpConstant %6 86
+        %148 = OpConstant %6 81
+        %149 = OpConstant %6 77
+        %150 = OpConstant %6 76
+        %151 = OpConstant %6 89
+        %152 = OpConstant %6 102
+        %153 = OpConstant %6 92
+        %154 = OpConstant %6 83
+        %155 = OpConstant %6 62
+        %156 = OpConstant %6 50
+        %157 = OpConstant %6 38
+        %158 = OpConstant %6 26
+        %159 = OpConstant %6 16
+        %160 = OpConstant %6 8
+        %161 = OpConstant %6 2
+        %162 = OpConstant %6 0
+        %163 = OpConstant %6 4
+        %164 = OpConstant %6 11
+        %165 = OpConstant %6 21
+        %166 = OpConstant %6 33
+        %167 = OpConstant %6 48
+        %168 = OpConstant %6 64
+        %169 = OpConstant %6 144
+        %170 = OpConstant %6 123
+        %171 = OpConstant %6 112
+        %172 = OpConstant %6 100
+        %173 = OpConstant %6 90
+        %174 = OpConstant %6 65
+        %175 = OpConstant %6 67
+        %176 = OpConstant %6 70
+        %177 = OpConstant %6 75
+        %178 = OpConstant %6 95
+        %179 = OpConstant %6 88
+        %180 = OpConstant %6 69
+        %181 = OpConstant %6 47
+        %182 = OpConstant %6 36
+        %183 = OpConstant %6 18
+        %184 = OpConstant %6 13
+        %185 = OpConstant %6 15
+        %186 = OpConstant %6 22
+        %187 = OpConstant %6 32
+        %188 = OpConstant %6 45
+        %189 = OpConstant %6 60
+        %190 = OpConstantComposite %32 %33 %34 %35 %36 %37 %38 %39 %40 %41 %42 %43 %44 %45 %46 %47 %48 %49 %50 %51 %52 %52 %53 %54 %55 %48 %56 %57 %58 %59 %60 %45 %61 %62 %63 %47 %48 %64 %65 %66 %67 %68 %69 %70 %71 %72 %73 %74 %52 %75 %76 %36 %77 %78 %79 %80 %81 %82 %83 %25 %83 %84 %85 %86 %87 %88 %89 %39 %90 %44 %91 %45 %61 %60 %36 %92 %93 %94 %95 %39 %96 %97 %97 %40 %98 %90 %99 %61 %100 %101 %102 %52 %103 %104 %105 %73 %105 %106 %107 %53 %75 %108 %61 %109 %96 %110 %111 %112 %113 %85 %114 %115 %116 %117 %118 %119 %120 %43 %92 %121 %57 %56 %122 %123 %124 %123 %122 %125 %47 %126 %63 %58 %127 %127 %128 %76 %129 %130 %131 %107 %105 %71 %132 %133 %134 %135 %136 %137 %138 %139 %140 %141 %68 %66 %142 %48 %100 %60 %143 %43 %144 %98 %144 %43 %93 %36 %46 %56 %145 %51 %146 %67 %147 %148 %149 %150 %149 %71 %72 %151 %67 %106 %152 %146 %146 %152 %106 %153 %154 %141 %155 %156 %157 %158 %159 %160 %161 %162 %162 %163 %164 %165 %166 %167 %168 %148 %106 %52 %130 %56 %63 %121 %61 %61 %121 %128 %169 %48 %170 %171 %172 %173 %148 %141 %132 %174 %174 %175 %176 %177 %148 %68 %153 %104 %74 %66 %152 %172 %178 %179 %70 %180 %133 %181 %182 %158 %183 %184 %164 %164 %185 %186 %187 %188 %189 %149 %67
+        %193 = OpTypePointer Function %32
+        %215 = OpConstant %9 15
+        %231 = OpConstant %9 1
+        %236 = OpConstant %6 1
+        %238 = OpConstant %9 0
+        %239 = OpConstantComposite %10 %238 %238 %238 %231
+        %242 = OpTypeVector %9 2
+        %245 = OpTypePointer Input %10
+        %246 = OpVariable %245 Input
+        %249 = OpTypeStruct %242
+        %250 = OpTypePointer Uniform %249
+        %251 = OpVariable %250 Uniform
+        %252 = OpTypePointer Uniform %242
+        %259 = OpConstant %9 256
+        %267 = OpTypePointer Output %10
+        %268 = OpVariable %267 Output
+        %277 = OpConstantFalse %26
+        %280 = OpConstantTrue %26
+        %363 = OpUndef %10
+        %365 = OpConstant %9 0.0666666701
+        %523 = OpConstant %6 0
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+        %285 = OpVariable %193 Function
+        %286 = OpVariable %193 Function
+        %288 = OpVariable %193 Function
+        %247 = OpLoad %10 %246
+        %248 = OpVectorShuffle %242 %247 %247 0 1
+        %253 = OpAccessChain %252 %251 %162
+        %254 = OpLoad %242 %253
+        %255 = OpFDiv %242 %248 %254
+        %258 = OpCompositeExtract %9 %255 0
+        %260 = OpFMul %9 %258 %259
+        %261 = OpConvertFToS %6 %260
+        %263 = OpCompositeExtract %9 %255 1
+        %264 = OpFMul %9 %263 %259
+        %265 = OpConvertFToS %6 %264
+        %266 = OpCompositeConstruct %7 %261 %265
+               OpSelectionMerge %341 None
+               OpSwitch %28 %291
+        %291 = OpLabel
+               OpBranch %292
+        %292 = OpLabel
+        %355 = OpPhi %7 %266 %291 %354 %337
+        %295 = OpCompositeExtract %6 %355 1
+        %296 = OpINotEqual %26 %295 %25
+               OpLoopMerge %338 %337 None
+               OpBranchConditional %296 %297 %338
+        %297 = OpLabel
+        %299 = OpCompositeExtract %6 %355 0
+               OpStore %285 %190
+        %302 = OpAccessChain %22 %285 %295
+        %303 = OpLoad %6 %302
+        %304 = OpIAdd %6 %303 %185
+        %305 = OpSLessThan %26 %299 %304
+               OpBranch %306
+        %306 = OpLabel
+               OpSelectionMerge %516 None
+               OpBranchConditional %305 %517 %516
+        %517 = OpLabel
+               OpStore %286 %190
+               OpBranch %516
+        %516 = OpLabel
+        %311 = OpAccessChain %22 %286 %295
+               OpSelectionMerge %518 None
+               OpBranchConditional %305 %519 %521
+        %519 = OpLabel
+        %520 = OpLoad %6 %311
+               OpBranch %518
+        %521 = OpLabel
+        %522 = OpCopyObject %6 %523
+               OpBranch %518
+        %518 = OpLabel
+        %312 = OpPhi %6 %520 %519 %522 %521
+        %313 = OpISub %6 %312 %185
+        %314 = OpSGreaterThan %26 %299 %313
+               OpBranch %315
+        %315 = OpLabel
+        %316 = OpSelect %26 %305 %314 %305
+               OpSelectionMerge %333 None
+               OpBranchConditional %316 %317 %333
+        %317 = OpLabel
+               OpStore %288 %190
+        %322 = OpAccessChain %22 %288 %295
+        %323 = OpLoad %6 %322
+        %324 = OpISub %6 %299 %323
+        %325 = OpConvertSToF %9 %324
+        %326 = OpExtInst %9 %1 FAbs %325
+        %327 = OpFSub %9 %215 %326
+        %328 = OpFMul %9 %327 %365
+        %332 = OpCompositeConstruct %10 %328 %328 %328 %231
+               OpBranch %338
+        %333 = OpLabel
+        %336 = OpIAdd %6 %295 %236
+        %354 = OpCompositeInsert %7 %336 %355 1
+               OpBranch %337
+        %337 = OpLabel
+               OpBranch %292
+        %338 = OpLabel
+        %361 = OpPhi %10 %363 %292 %332 %317
+        %357 = OpPhi %26 %277 %292 %280 %317
+               OpSelectionMerge %340 None
+               OpBranchConditional %357 %341 %340
+        %340 = OpLabel
+               OpBranch %341
+        %341 = OpLabel
+        %360 = OpPhi %10 %361 %338 %239 %340
+               OpStore %268 %360
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for variant_2
+
+# resolution
+BUFFER variant_2_resolution DATA_TYPE vec2<float> STD140 DATA
+ 32.0 16.0
+END
+
+BUFFER variant_2_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_2_pipeline
+  ATTACH variant_2_vertex_shader
+  ATTACH variant_2_fragment_shader
+  FRAMEBUFFER_SIZE 32 16
+  BIND BUFFER variant_2_framebuffer AS color LOCATION 0
+  BIND BUFFER variant_2_resolution AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_2_pipeline 0 0 0 255
+
+CLEAR variant_2_pipeline
+RUN variant_2_pipeline DRAW_RECT POS 0 0 SIZE 32 16
+
+EXPECT reference_framebuffer EQ_HISTOGRAM_EMD_BUFFER variant_framebuffer TOLERANCE 0.005
+EXPECT reference_framebuffer EQ_HISTOGRAM_EMD_BUFFER variant_2_framebuffer TOLERANCE 0.005
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/spv-stable-quicksort-mat-func-param.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/spv-stable-quicksort-mat-func-param.amber
new file mode 100644
index 0000000..6d21882
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/spv-stable-quicksort-mat-func-param.amber
@@ -0,0 +1,1057 @@
+#!amber
+
+# Copyright 2020 Google LLC
+#
+# 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.
+
+
+# A test for a bug found by the GraphicsFuzz project.
+
+# Short description: Two shaders with diff: added mat3x3 func param
+
+# The test renders two images using semantically equivalent shaders, and then
+# checks that the images are similar.
+# The test passes because the shaders have the same semantics and so the images
+# should be the same.
+
+SHADER vertex reference_vertex_shader PASSTHROUGH
+
+SHADER fragment reference_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 7
+; Bound: 331
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %183 %324
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 320
+               OpName %4 "main"
+               OpName %11 "swap(i1;i1;"
+               OpName %9 "i"
+               OpName %10 "j"
+               OpName %16 "performPartition(i1;i1;"
+               OpName %14 "l"
+               OpName %15 "h"
+               OpName %18 "quicksort("
+               OpName %20 "temp"
+               OpName %24 "QuicksortObject"
+               OpMemberName %24 0 "numbers"
+               OpName %26 "obj"
+               OpName %40 "pivot"
+               OpName %44 "i"
+               OpName %48 "j"
+               OpName %69 "param"
+               OpName %71 "param"
+               OpName %78 "param"
+               OpName %80 "param"
+               OpName %86 "l"
+               OpName %87 "h"
+               OpName %89 "top"
+               OpName %92 "stack"
+               OpName %116 "p"
+               OpName %117 "param"
+               OpName %119 "param"
+               OpName %152 "i"
+               OpName %180 "uv"
+               OpName %183 "gl_FragCoord"
+               OpName %186 "buf0"
+               OpMemberName %186 0 "resolution"
+               OpName %188 ""
+               OpName %195 "color"
+               OpName %324 "_GLF_color"
+               OpDecorate %183 BuiltIn FragCoord
+               OpMemberDecorate %186 0 Offset 0
+               OpDecorate %186 Block
+               OpDecorate %188 DescriptorSet 0
+               OpDecorate %188 Binding 0
+               OpDecorate %324 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeInt 32 1
+          %7 = OpTypePointer Function %6
+          %8 = OpTypeFunction %2 %7 %7
+         %13 = OpTypeFunction %6 %7 %7
+         %21 = OpTypeInt 32 0
+         %22 = OpConstant %21 10
+         %23 = OpTypeArray %6 %22
+         %24 = OpTypeStruct %23
+         %25 = OpTypePointer Private %24
+         %26 = OpVariable %25 Private
+         %27 = OpConstant %6 0
+         %29 = OpTypePointer Private %6
+         %46 = OpConstant %6 1
+         %58 = OpTypeBool
+         %88 = OpConstant %6 9
+         %90 = OpConstant %6 -1
+         %91 = OpTypePointer Function %23
+        %159 = OpConstant %6 10
+        %177 = OpTypeFloat 32
+        %178 = OpTypeVector %177 2
+        %179 = OpTypePointer Function %178
+        %181 = OpTypeVector %177 4
+        %182 = OpTypePointer Input %181
+        %183 = OpVariable %182 Input
+        %186 = OpTypeStruct %178
+        %187 = OpTypePointer Uniform %186
+        %188 = OpVariable %187 Uniform
+        %189 = OpTypePointer Uniform %178
+        %193 = OpTypeVector %177 3
+        %194 = OpTypePointer Function %193
+        %196 = OpConstant %177 1
+        %197 = OpConstant %177 2
+        %198 = OpConstant %177 3
+        %199 = OpConstantComposite %193 %196 %197 %198
+        %203 = OpConstant %21 0
+        %204 = OpTypePointer Function %177
+        %211 = OpConstant %177 0.25
+        %224 = OpConstant %177 0.5
+        %228 = OpConstant %6 2
+        %232 = OpConstant %21 1
+        %239 = OpConstant %177 0.75
+        %243 = OpConstant %6 3
+        %247 = OpConstant %21 2
+        %252 = OpConstant %6 4
+        %265 = OpConstant %6 5
+        %278 = OpConstant %6 6
+        %291 = OpConstant %6 7
+        %299 = OpConstant %6 8
+        %323 = OpTypePointer Output %181
+        %324 = OpVariable %323 Output
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+        %152 = OpVariable %7 Function
+        %180 = OpVariable %179 Function
+        %195 = OpVariable %194 Function
+               OpStore %152 %27
+               OpBranch %153
+        %153 = OpLabel
+               OpLoopMerge %155 %156 None
+               OpBranch %157
+        %157 = OpLabel
+        %158 = OpLoad %6 %152
+        %160 = OpSLessThan %58 %158 %159
+               OpBranchConditional %160 %154 %155
+        %154 = OpLabel
+        %161 = OpLoad %6 %152
+        %162 = OpLoad %6 %152
+        %163 = OpISub %6 %159 %162
+        %164 = OpAccessChain %29 %26 %27 %161
+               OpStore %164 %163
+        %165 = OpLoad %6 %152
+        %166 = OpLoad %6 %152
+        %167 = OpAccessChain %29 %26 %27 %166
+        %168 = OpLoad %6 %167
+        %169 = OpLoad %6 %152
+        %170 = OpAccessChain %29 %26 %27 %169
+        %171 = OpLoad %6 %170
+        %172 = OpIMul %6 %168 %171
+        %173 = OpAccessChain %29 %26 %27 %165
+               OpStore %173 %172
+               OpBranch %156
+        %156 = OpLabel
+        %174 = OpLoad %6 %152
+        %175 = OpIAdd %6 %174 %46
+               OpStore %152 %175
+               OpBranch %153
+        %155 = OpLabel
+        %176 = OpFunctionCall %2 %18
+        %184 = OpLoad %181 %183
+        %185 = OpVectorShuffle %178 %184 %184 0 1
+        %190 = OpAccessChain %189 %188 %27
+        %191 = OpLoad %178 %190
+        %192 = OpFDiv %178 %185 %191
+               OpStore %180 %192
+               OpStore %195 %199
+        %200 = OpAccessChain %29 %26 %27 %27
+        %201 = OpLoad %6 %200
+        %202 = OpConvertSToF %177 %201
+        %205 = OpAccessChain %204 %195 %203
+        %206 = OpLoad %177 %205
+        %207 = OpFAdd %177 %206 %202
+        %208 = OpAccessChain %204 %195 %203
+               OpStore %208 %207
+        %209 = OpAccessChain %204 %180 %203
+        %210 = OpLoad %177 %209
+        %212 = OpFOrdGreaterThan %58 %210 %211
+               OpSelectionMerge %214 None
+               OpBranchConditional %212 %213 %214
+        %213 = OpLabel
+        %215 = OpAccessChain %29 %26 %27 %46
+        %216 = OpLoad %6 %215
+        %217 = OpConvertSToF %177 %216
+        %218 = OpAccessChain %204 %195 %203
+        %219 = OpLoad %177 %218
+        %220 = OpFAdd %177 %219 %217
+        %221 = OpAccessChain %204 %195 %203
+               OpStore %221 %220
+               OpBranch %214
+        %214 = OpLabel
+        %222 = OpAccessChain %204 %180 %203
+        %223 = OpLoad %177 %222
+        %225 = OpFOrdGreaterThan %58 %223 %224
+               OpSelectionMerge %227 None
+               OpBranchConditional %225 %226 %227
+        %226 = OpLabel
+        %229 = OpAccessChain %29 %26 %27 %228
+        %230 = OpLoad %6 %229
+        %231 = OpConvertSToF %177 %230
+        %233 = OpAccessChain %204 %195 %232
+        %234 = OpLoad %177 %233
+        %235 = OpFAdd %177 %234 %231
+        %236 = OpAccessChain %204 %195 %232
+               OpStore %236 %235
+               OpBranch %227
+        %227 = OpLabel
+        %237 = OpAccessChain %204 %180 %203
+        %238 = OpLoad %177 %237
+        %240 = OpFOrdGreaterThan %58 %238 %239
+               OpSelectionMerge %242 None
+               OpBranchConditional %240 %241 %242
+        %241 = OpLabel
+        %244 = OpAccessChain %29 %26 %27 %243
+        %245 = OpLoad %6 %244
+        %246 = OpConvertSToF %177 %245
+        %248 = OpAccessChain %204 %195 %247
+        %249 = OpLoad %177 %248
+        %250 = OpFAdd %177 %249 %246
+        %251 = OpAccessChain %204 %195 %247
+               OpStore %251 %250
+               OpBranch %242
+        %242 = OpLabel
+        %253 = OpAccessChain %29 %26 %27 %252
+        %254 = OpLoad %6 %253
+        %255 = OpConvertSToF %177 %254
+        %256 = OpAccessChain %204 %195 %232
+        %257 = OpLoad %177 %256
+        %258 = OpFAdd %177 %257 %255
+        %259 = OpAccessChain %204 %195 %232
+               OpStore %259 %258
+        %260 = OpAccessChain %204 %180 %232
+        %261 = OpLoad %177 %260
+        %262 = OpFOrdGreaterThan %58 %261 %211
+               OpSelectionMerge %264 None
+               OpBranchConditional %262 %263 %264
+        %263 = OpLabel
+        %266 = OpAccessChain %29 %26 %27 %265
+        %267 = OpLoad %6 %266
+        %268 = OpConvertSToF %177 %267
+        %269 = OpAccessChain %204 %195 %203
+        %270 = OpLoad %177 %269
+        %271 = OpFAdd %177 %270 %268
+        %272 = OpAccessChain %204 %195 %203
+               OpStore %272 %271
+               OpBranch %264
+        %264 = OpLabel
+        %273 = OpAccessChain %204 %180 %232
+        %274 = OpLoad %177 %273
+        %275 = OpFOrdGreaterThan %58 %274 %224
+               OpSelectionMerge %277 None
+               OpBranchConditional %275 %276 %277
+        %276 = OpLabel
+        %279 = OpAccessChain %29 %26 %27 %278
+        %280 = OpLoad %6 %279
+        %281 = OpConvertSToF %177 %280
+        %282 = OpAccessChain %204 %195 %232
+        %283 = OpLoad %177 %282
+        %284 = OpFAdd %177 %283 %281
+        %285 = OpAccessChain %204 %195 %232
+               OpStore %285 %284
+               OpBranch %277
+        %277 = OpLabel
+        %286 = OpAccessChain %204 %180 %232
+        %287 = OpLoad %177 %286
+        %288 = OpFOrdGreaterThan %58 %287 %239
+               OpSelectionMerge %290 None
+               OpBranchConditional %288 %289 %290
+        %289 = OpLabel
+        %292 = OpAccessChain %29 %26 %27 %291
+        %293 = OpLoad %6 %292
+        %294 = OpConvertSToF %177 %293
+        %295 = OpAccessChain %204 %195 %247
+        %296 = OpLoad %177 %295
+        %297 = OpFAdd %177 %296 %294
+        %298 = OpAccessChain %204 %195 %247
+               OpStore %298 %297
+               OpBranch %290
+        %290 = OpLabel
+        %300 = OpAccessChain %29 %26 %27 %299
+        %301 = OpLoad %6 %300
+        %302 = OpConvertSToF %177 %301
+        %303 = OpAccessChain %204 %195 %247
+        %304 = OpLoad %177 %303
+        %305 = OpFAdd %177 %304 %302
+        %306 = OpAccessChain %204 %195 %247
+               OpStore %306 %305
+        %307 = OpAccessChain %204 %180 %203
+        %308 = OpLoad %177 %307
+        %309 = OpAccessChain %204 %180 %232
+        %310 = OpLoad %177 %309
+        %311 = OpFSub %177 %308 %310
+        %312 = OpExtInst %177 %1 FAbs %311
+        %313 = OpFOrdLessThan %58 %312 %211
+               OpSelectionMerge %315 None
+               OpBranchConditional %313 %314 %315
+        %314 = OpLabel
+        %316 = OpAccessChain %29 %26 %27 %88
+        %317 = OpLoad %6 %316
+        %318 = OpConvertSToF %177 %317
+        %319 = OpAccessChain %204 %195 %203
+        %320 = OpLoad %177 %319
+        %321 = OpFAdd %177 %320 %318
+        %322 = OpAccessChain %204 %195 %203
+               OpStore %322 %321
+               OpBranch %315
+        %315 = OpLabel
+        %325 = OpLoad %193 %195
+        %326 = OpExtInst %193 %1 Normalize %325
+        %327 = OpCompositeExtract %177 %326 0
+        %328 = OpCompositeExtract %177 %326 1
+        %329 = OpCompositeExtract %177 %326 2
+        %330 = OpCompositeConstruct %181 %327 %328 %329 %196
+               OpStore %324 %330
+               OpReturn
+               OpFunctionEnd
+         %11 = OpFunction %2 None %8
+          %9 = OpFunctionParameter %7
+         %10 = OpFunctionParameter %7
+         %12 = OpLabel
+         %20 = OpVariable %7 Function
+         %28 = OpLoad %6 %9
+         %30 = OpAccessChain %29 %26 %27 %28
+         %31 = OpLoad %6 %30
+               OpStore %20 %31
+         %32 = OpLoad %6 %9
+         %33 = OpLoad %6 %10
+         %34 = OpAccessChain %29 %26 %27 %33
+         %35 = OpLoad %6 %34
+         %36 = OpAccessChain %29 %26 %27 %32
+               OpStore %36 %35
+         %37 = OpLoad %6 %10
+         %38 = OpLoad %6 %20
+         %39 = OpAccessChain %29 %26 %27 %37
+               OpStore %39 %38
+               OpReturn
+               OpFunctionEnd
+         %16 = OpFunction %6 None %13
+         %14 = OpFunctionParameter %7
+         %15 = OpFunctionParameter %7
+         %17 = OpLabel
+         %40 = OpVariable %7 Function
+         %44 = OpVariable %7 Function
+         %48 = OpVariable %7 Function
+         %69 = OpVariable %7 Function
+         %71 = OpVariable %7 Function
+         %78 = OpVariable %7 Function
+         %80 = OpVariable %7 Function
+         %41 = OpLoad %6 %15
+         %42 = OpAccessChain %29 %26 %27 %41
+         %43 = OpLoad %6 %42
+               OpStore %40 %43
+         %45 = OpLoad %6 %14
+         %47 = OpISub %6 %45 %46
+               OpStore %44 %47
+         %49 = OpLoad %6 %14
+               OpStore %48 %49
+               OpBranch %50
+         %50 = OpLabel
+               OpLoopMerge %52 %53 None
+               OpBranch %54
+         %54 = OpLabel
+         %55 = OpLoad %6 %48
+         %56 = OpLoad %6 %15
+         %57 = OpISub %6 %56 %46
+         %59 = OpSLessThanEqual %58 %55 %57
+               OpBranchConditional %59 %51 %52
+         %51 = OpLabel
+         %60 = OpLoad %6 %48
+         %61 = OpAccessChain %29 %26 %27 %60
+         %62 = OpLoad %6 %61
+         %63 = OpLoad %6 %40
+         %64 = OpSLessThanEqual %58 %62 %63
+               OpSelectionMerge %66 None
+               OpBranchConditional %64 %65 %66
+         %65 = OpLabel
+         %67 = OpLoad %6 %44
+         %68 = OpIAdd %6 %67 %46
+               OpStore %44 %68
+         %70 = OpLoad %6 %44
+               OpStore %69 %70
+         %72 = OpLoad %6 %48
+               OpStore %71 %72
+         %73 = OpFunctionCall %2 %11 %69 %71
+               OpBranch %66
+         %66 = OpLabel
+               OpBranch %53
+         %53 = OpLabel
+         %74 = OpLoad %6 %48
+         %75 = OpIAdd %6 %74 %46
+               OpStore %48 %75
+               OpBranch %50
+         %52 = OpLabel
+         %76 = OpLoad %6 %44
+         %77 = OpIAdd %6 %76 %46
+               OpStore %44 %77
+         %79 = OpLoad %6 %44
+               OpStore %78 %79
+         %81 = OpLoad %6 %15
+               OpStore %80 %81
+         %82 = OpFunctionCall %2 %11 %78 %80
+         %83 = OpLoad %6 %44
+               OpReturnValue %83
+               OpFunctionEnd
+         %18 = OpFunction %2 None %3
+         %19 = OpLabel
+         %86 = OpVariable %7 Function
+         %87 = OpVariable %7 Function
+         %89 = OpVariable %7 Function
+         %92 = OpVariable %91 Function
+        %116 = OpVariable %7 Function
+        %117 = OpVariable %7 Function
+        %119 = OpVariable %7 Function
+               OpStore %86 %27
+               OpStore %87 %88
+               OpStore %89 %90
+         %93 = OpLoad %6 %89
+         %94 = OpIAdd %6 %93 %46
+               OpStore %89 %94
+         %95 = OpLoad %6 %86
+         %96 = OpAccessChain %7 %92 %94
+               OpStore %96 %95
+         %97 = OpLoad %6 %89
+         %98 = OpIAdd %6 %97 %46
+               OpStore %89 %98
+         %99 = OpLoad %6 %87
+        %100 = OpAccessChain %7 %92 %98
+               OpStore %100 %99
+               OpBranch %101
+        %101 = OpLabel
+               OpLoopMerge %103 %104 None
+               OpBranch %105
+        %105 = OpLabel
+        %106 = OpLoad %6 %89
+        %107 = OpSGreaterThanEqual %58 %106 %27
+               OpBranchConditional %107 %102 %103
+        %102 = OpLabel
+        %108 = OpLoad %6 %89
+        %109 = OpISub %6 %108 %46
+               OpStore %89 %109
+        %110 = OpAccessChain %7 %92 %108
+        %111 = OpLoad %6 %110
+               OpStore %87 %111
+        %112 = OpLoad %6 %89
+        %113 = OpISub %6 %112 %46
+               OpStore %89 %113
+        %114 = OpAccessChain %7 %92 %112
+        %115 = OpLoad %6 %114
+               OpStore %86 %115
+        %118 = OpLoad %6 %86
+               OpStore %117 %118
+        %120 = OpLoad %6 %87
+               OpStore %119 %120
+        %121 = OpFunctionCall %6 %16 %117 %119
+               OpStore %116 %121
+        %122 = OpLoad %6 %116
+        %123 = OpISub %6 %122 %46
+        %124 = OpLoad %6 %86
+        %125 = OpSGreaterThan %58 %123 %124
+               OpSelectionMerge %127 None
+               OpBranchConditional %125 %126 %127
+        %126 = OpLabel
+        %128 = OpLoad %6 %89
+        %129 = OpIAdd %6 %128 %46
+               OpStore %89 %129
+        %130 = OpLoad %6 %86
+        %131 = OpAccessChain %7 %92 %129
+               OpStore %131 %130
+        %132 = OpLoad %6 %89
+        %133 = OpIAdd %6 %132 %46
+               OpStore %89 %133
+        %134 = OpLoad %6 %116
+        %135 = OpISub %6 %134 %46
+        %136 = OpAccessChain %7 %92 %133
+               OpStore %136 %135
+               OpBranch %127
+        %127 = OpLabel
+        %137 = OpLoad %6 %116
+        %138 = OpIAdd %6 %137 %46
+        %139 = OpLoad %6 %87
+        %140 = OpSLessThan %58 %138 %139
+               OpSelectionMerge %142 None
+               OpBranchConditional %140 %141 %142
+        %141 = OpLabel
+        %143 = OpLoad %6 %89
+        %144 = OpIAdd %6 %143 %46
+               OpStore %89 %144
+        %145 = OpLoad %6 %116
+        %146 = OpIAdd %6 %145 %46
+        %147 = OpAccessChain %7 %92 %144
+               OpStore %147 %146
+        %148 = OpLoad %6 %89
+        %149 = OpIAdd %6 %148 %46
+               OpStore %89 %149
+        %150 = OpLoad %6 %87
+        %151 = OpAccessChain %7 %92 %149
+               OpStore %151 %150
+               OpBranch %142
+        %142 = OpLabel
+               OpBranch %104
+        %104 = OpLabel
+               OpBranch %101
+        %103 = OpLabel
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for reference
+
+# resolution
+BUFFER reference_resolution DATA_TYPE vec2<float> STD140 DATA
+ 256.0 256.0
+END
+
+BUFFER reference_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics reference_pipeline
+  ATTACH reference_vertex_shader
+  ATTACH reference_fragment_shader
+  FRAMEBUFFER_SIZE 256 256
+  BIND BUFFER reference_framebuffer AS color LOCATION 0
+  BIND BUFFER reference_resolution AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR reference_pipeline 0 0 0 255
+
+CLEAR reference_pipeline
+RUN reference_pipeline DRAW_RECT POS 0 0 SIZE 256 256
+
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 7
+; Bound: 529
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %183 %324
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 320
+               OpName %4 "main"
+               OpName %11 "swap(i1;i1;"
+               OpName %9 "i"
+               OpName %10 "j"
+               OpName %16 "performPartition(i1;i1;"
+               OpName %14 "l"
+               OpName %15 "h"
+               OpName %18 "quicksort("
+               OpName %20 "temp"
+               OpName %24 "QuicksortObject"
+               OpMemberName %24 0 "numbers"
+               OpName %26 "obj"
+               OpName %40 "pivot"
+               OpName %44 "i"
+               OpName %48 "j"
+               OpName %69 "param"
+               OpName %71 "param"
+               OpName %78 "param"
+               OpName %80 "param"
+               OpName %86 "l"
+               OpName %87 "h"
+               OpName %89 "top"
+               OpName %92 "stack"
+               OpName %116 "p"
+               OpName %117 "param"
+               OpName %119 "param"
+               OpName %152 "i"
+               OpName %180 "uv"
+               OpName %183 "gl_FragCoord"
+               OpName %186 "buf0"
+               OpMemberName %186 0 "resolution"
+               OpName %188 ""
+               OpName %195 "color"
+               OpName %324 "_GLF_color"
+               OpDecorate %183 BuiltIn FragCoord
+               OpMemberDecorate %186 0 Offset 0
+               OpDecorate %186 Block
+               OpDecorate %188 DescriptorSet 0
+               OpDecorate %188 Binding 0
+               OpDecorate %324 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeInt 32 1
+          %7 = OpTypePointer Function %6
+         %13 = OpTypeFunction %6 %7 %7
+         %21 = OpTypeInt 32 0
+         %22 = OpConstant %21 10
+         %23 = OpTypeArray %6 %22
+         %24 = OpTypeStruct %23
+         %25 = OpTypePointer Private %24
+         %26 = OpVariable %25 Private
+         %27 = OpConstant %6 0
+         %29 = OpTypePointer Private %6
+         %46 = OpConstant %6 1
+         %58 = OpTypeBool
+         %88 = OpConstant %6 9
+         %90 = OpConstant %6 -1
+         %91 = OpTypePointer Function %23
+        %159 = OpConstant %6 10
+        %177 = OpTypeFloat 32
+        %178 = OpTypeVector %177 2
+        %179 = OpTypePointer Function %178
+        %181 = OpTypeVector %177 4
+        %182 = OpTypePointer Input %181
+        %183 = OpVariable %182 Input
+        %186 = OpTypeStruct %178
+        %187 = OpTypePointer Uniform %186
+        %188 = OpVariable %187 Uniform
+        %189 = OpTypePointer Uniform %178
+        %193 = OpTypeVector %177 3
+        %194 = OpTypePointer Function %193
+        %196 = OpConstant %177 1
+        %197 = OpConstant %177 2
+        %198 = OpConstant %177 3
+        %199 = OpConstantComposite %193 %196 %197 %198
+        %203 = OpConstant %21 0
+        %204 = OpTypePointer Function %177
+        %211 = OpConstant %177 0.25
+        %224 = OpConstant %177 0.5
+        %228 = OpConstant %6 2
+        %232 = OpConstant %21 1
+        %239 = OpConstant %177 0.75
+        %243 = OpConstant %6 3
+        %247 = OpConstant %21 2
+        %252 = OpConstant %6 4
+        %265 = OpConstant %6 5
+        %278 = OpConstant %6 6
+        %291 = OpConstant %6 7
+        %299 = OpConstant %6 8
+        %323 = OpTypePointer Output %181
+        %324 = OpVariable %323 Output
+        %438 = OpTypeMatrix %193 3
+        %521 = OpConstant %177 0
+        %522 = OpConstantComposite %193 %521 %521 %521
+        %527 = OpConstantComposite %438 %522 %522 %522
+          %8 = OpTypeFunction %2 %7 %7 %438
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+        %152 = OpVariable %7 Function
+        %180 = OpVariable %179 Function
+        %195 = OpVariable %194 Function
+               OpStore %152 %27
+               OpBranch %153
+        %153 = OpLabel
+               OpLoopMerge %155 %156 None
+               OpBranch %157
+        %157 = OpLabel
+        %158 = OpLoad %6 %152
+        %160 = OpSLessThan %58 %158 %159
+               OpBranchConditional %160 %154 %155
+        %154 = OpLabel
+        %161 = OpLoad %6 %152
+        %162 = OpLoad %6 %152
+        %163 = OpISub %6 %159 %162
+        %164 = OpAccessChain %29 %26 %27 %161
+               OpStore %164 %163
+        %165 = OpLoad %6 %152
+        %166 = OpLoad %6 %152
+        %167 = OpAccessChain %29 %26 %27 %166
+        %168 = OpLoad %6 %167
+        %169 = OpLoad %6 %152
+        %170 = OpAccessChain %29 %26 %27 %169
+        %171 = OpLoad %6 %170
+        %172 = OpIMul %6 %168 %171
+        %173 = OpAccessChain %29 %26 %27 %165
+               OpStore %173 %172
+               OpBranch %156
+        %156 = OpLabel
+        %174 = OpLoad %6 %152
+        %175 = OpIAdd %6 %174 %46
+               OpStore %152 %175
+               OpBranch %153
+        %155 = OpLabel
+        %176 = OpFunctionCall %2 %18
+        %184 = OpLoad %181 %183
+        %185 = OpVectorShuffle %178 %184 %184 0 1
+        %190 = OpAccessChain %189 %188 %27
+        %191 = OpLoad %178 %190
+        %192 = OpFDiv %178 %185 %191
+               OpStore %180 %192
+               OpStore %195 %199
+        %200 = OpAccessChain %29 %26 %27 %27
+        %201 = OpLoad %6 %200
+        %202 = OpConvertSToF %177 %201
+        %205 = OpAccessChain %204 %195 %203
+        %206 = OpLoad %177 %205
+        %207 = OpFAdd %177 %206 %202
+        %208 = OpAccessChain %204 %195 %203
+               OpStore %208 %207
+        %209 = OpAccessChain %204 %180 %203
+        %210 = OpLoad %177 %209
+        %212 = OpFOrdGreaterThan %58 %210 %211
+               OpSelectionMerge %214 None
+               OpBranchConditional %212 %213 %214
+        %213 = OpLabel
+        %215 = OpAccessChain %29 %26 %27 %46
+        %216 = OpLoad %6 %215
+        %217 = OpConvertSToF %177 %216
+        %218 = OpAccessChain %204 %195 %203
+        %219 = OpLoad %177 %218
+        %220 = OpFAdd %177 %219 %217
+        %221 = OpAccessChain %204 %195 %203
+               OpStore %221 %220
+               OpBranch %214
+        %214 = OpLabel
+        %222 = OpAccessChain %204 %180 %203
+        %223 = OpLoad %177 %222
+        %225 = OpFOrdGreaterThan %58 %223 %224
+               OpSelectionMerge %227 None
+               OpBranchConditional %225 %226 %227
+        %226 = OpLabel
+        %229 = OpAccessChain %29 %26 %27 %228
+        %230 = OpLoad %6 %229
+        %231 = OpConvertSToF %177 %230
+        %233 = OpAccessChain %204 %195 %232
+        %234 = OpLoad %177 %233
+        %235 = OpFAdd %177 %234 %231
+        %236 = OpAccessChain %204 %195 %232
+               OpStore %236 %235
+               OpBranch %227
+        %227 = OpLabel
+        %237 = OpAccessChain %204 %180 %203
+        %238 = OpLoad %177 %237
+        %240 = OpFOrdGreaterThan %58 %238 %239
+               OpSelectionMerge %242 None
+               OpBranchConditional %240 %241 %242
+        %241 = OpLabel
+        %244 = OpAccessChain %29 %26 %27 %243
+        %245 = OpLoad %6 %244
+        %246 = OpConvertSToF %177 %245
+        %248 = OpAccessChain %204 %195 %247
+        %249 = OpLoad %177 %248
+        %250 = OpFAdd %177 %249 %246
+        %251 = OpAccessChain %204 %195 %247
+               OpStore %251 %250
+               OpBranch %242
+        %242 = OpLabel
+        %253 = OpAccessChain %29 %26 %27 %252
+        %254 = OpLoad %6 %253
+        %255 = OpConvertSToF %177 %254
+        %256 = OpAccessChain %204 %195 %232
+        %257 = OpLoad %177 %256
+        %258 = OpFAdd %177 %257 %255
+        %259 = OpAccessChain %204 %195 %232
+               OpStore %259 %258
+        %260 = OpAccessChain %204 %180 %232
+        %261 = OpLoad %177 %260
+        %262 = OpFOrdGreaterThan %58 %261 %211
+               OpSelectionMerge %264 None
+               OpBranchConditional %262 %263 %264
+        %263 = OpLabel
+        %266 = OpAccessChain %29 %26 %27 %265
+        %267 = OpLoad %6 %266
+        %268 = OpConvertSToF %177 %267
+        %269 = OpAccessChain %204 %195 %203
+        %270 = OpLoad %177 %269
+        %271 = OpFAdd %177 %270 %268
+        %272 = OpAccessChain %204 %195 %203
+               OpStore %272 %271
+               OpBranch %264
+        %264 = OpLabel
+        %273 = OpAccessChain %204 %180 %232
+        %274 = OpLoad %177 %273
+        %275 = OpFOrdGreaterThan %58 %274 %224
+               OpSelectionMerge %277 None
+               OpBranchConditional %275 %276 %277
+        %276 = OpLabel
+        %279 = OpAccessChain %29 %26 %27 %278
+        %280 = OpLoad %6 %279
+        %281 = OpConvertSToF %177 %280
+        %282 = OpAccessChain %204 %195 %232
+        %283 = OpLoad %177 %282
+        %284 = OpFAdd %177 %283 %281
+        %285 = OpAccessChain %204 %195 %232
+               OpStore %285 %284
+               OpBranch %277
+        %277 = OpLabel
+        %286 = OpAccessChain %204 %180 %232
+        %287 = OpLoad %177 %286
+        %288 = OpFOrdGreaterThan %58 %287 %239
+               OpSelectionMerge %290 None
+               OpBranchConditional %288 %289 %290
+        %289 = OpLabel
+        %292 = OpAccessChain %29 %26 %27 %291
+        %293 = OpLoad %6 %292
+        %294 = OpConvertSToF %177 %293
+        %295 = OpAccessChain %204 %195 %247
+        %296 = OpLoad %177 %295
+        %297 = OpFAdd %177 %296 %294
+        %298 = OpAccessChain %204 %195 %247
+               OpStore %298 %297
+               OpBranch %290
+        %290 = OpLabel
+        %300 = OpAccessChain %29 %26 %27 %299
+        %301 = OpLoad %6 %300
+        %302 = OpConvertSToF %177 %301
+        %303 = OpAccessChain %204 %195 %247
+        %304 = OpLoad %177 %303
+        %305 = OpFAdd %177 %304 %302
+        %306 = OpAccessChain %204 %195 %247
+               OpStore %306 %305
+        %307 = OpAccessChain %204 %180 %203
+        %308 = OpLoad %177 %307
+        %309 = OpAccessChain %204 %180 %232
+        %310 = OpLoad %177 %309
+        %311 = OpFSub %177 %308 %310
+        %312 = OpExtInst %177 %1 FAbs %311
+        %313 = OpFOrdLessThan %58 %312 %211
+               OpSelectionMerge %315 None
+               OpBranchConditional %313 %314 %315
+        %314 = OpLabel
+        %316 = OpAccessChain %29 %26 %27 %88
+        %317 = OpLoad %6 %316
+        %318 = OpConvertSToF %177 %317
+        %319 = OpAccessChain %204 %195 %203
+        %320 = OpLoad %177 %319
+        %321 = OpFAdd %177 %320 %318
+        %322 = OpAccessChain %204 %195 %203
+               OpStore %322 %321
+               OpBranch %315
+        %315 = OpLabel
+        %325 = OpLoad %193 %195
+        %326 = OpExtInst %193 %1 Normalize %325
+        %327 = OpCompositeExtract %177 %326 0
+        %328 = OpCompositeExtract %177 %326 1
+        %329 = OpCompositeExtract %177 %326 2
+        %330 = OpCompositeConstruct %181 %327 %328 %329 %196
+               OpStore %324 %330
+               OpReturn
+               OpFunctionEnd
+         %11 = OpFunction %2 None %8
+          %9 = OpFunctionParameter %7
+         %10 = OpFunctionParameter %7
+        %528 = OpFunctionParameter %438
+         %12 = OpLabel
+         %20 = OpVariable %7 Function
+         %28 = OpLoad %6 %9
+         %30 = OpAccessChain %29 %26 %27 %28
+         %31 = OpLoad %6 %30
+               OpStore %20 %31
+         %32 = OpLoad %6 %9
+         %33 = OpLoad %6 %10
+         %34 = OpAccessChain %29 %26 %27 %33
+         %35 = OpLoad %6 %34
+         %36 = OpAccessChain %29 %26 %27 %32
+               OpStore %36 %35
+         %37 = OpLoad %6 %10
+         %38 = OpLoad %6 %20
+         %39 = OpAccessChain %29 %26 %27 %37
+               OpStore %39 %38
+               OpReturn
+               OpFunctionEnd
+         %16 = OpFunction %6 None %13
+         %14 = OpFunctionParameter %7
+         %15 = OpFunctionParameter %7
+         %17 = OpLabel
+         %40 = OpVariable %7 Function
+         %44 = OpVariable %7 Function
+         %48 = OpVariable %7 Function
+         %69 = OpVariable %7 Function
+         %71 = OpVariable %7 Function
+         %78 = OpVariable %7 Function
+         %80 = OpVariable %7 Function
+         %41 = OpLoad %6 %15
+         %42 = OpAccessChain %29 %26 %27 %41
+         %43 = OpLoad %6 %42
+               OpStore %40 %43
+         %45 = OpLoad %6 %14
+         %47 = OpISub %6 %45 %46
+               OpStore %44 %47
+         %49 = OpLoad %6 %14
+               OpStore %48 %49
+               OpBranch %50
+         %50 = OpLabel
+               OpLoopMerge %52 %53 None
+               OpBranch %54
+         %54 = OpLabel
+         %55 = OpLoad %6 %48
+         %56 = OpLoad %6 %15
+         %57 = OpISub %6 %56 %46
+         %59 = OpSLessThanEqual %58 %55 %57
+               OpBranchConditional %59 %51 %52
+         %51 = OpLabel
+         %60 = OpLoad %6 %48
+         %61 = OpAccessChain %29 %26 %27 %60
+         %62 = OpLoad %6 %61
+         %63 = OpLoad %6 %40
+         %64 = OpSLessThanEqual %58 %62 %63
+               OpSelectionMerge %66 None
+               OpBranchConditional %64 %65 %66
+         %65 = OpLabel
+         %67 = OpLoad %6 %44
+         %68 = OpIAdd %6 %67 %46
+               OpStore %44 %68
+         %70 = OpLoad %6 %44
+               OpStore %69 %70
+         %72 = OpLoad %6 %48
+               OpStore %71 %72
+         %73 = OpFunctionCall %2 %11 %69 %71 %527
+               OpBranch %66
+         %66 = OpLabel
+               OpBranch %53
+         %53 = OpLabel
+         %74 = OpLoad %6 %48
+         %75 = OpIAdd %6 %74 %46
+               OpStore %48 %75
+               OpBranch %50
+         %52 = OpLabel
+         %76 = OpLoad %6 %44
+         %77 = OpIAdd %6 %76 %46
+               OpStore %44 %77
+         %79 = OpLoad %6 %44
+               OpStore %78 %79
+         %81 = OpLoad %6 %15
+               OpStore %80 %81
+         %82 = OpFunctionCall %2 %11 %78 %80 %527
+         %83 = OpLoad %6 %44
+               OpReturnValue %83
+               OpFunctionEnd
+         %18 = OpFunction %2 None %3
+         %19 = OpLabel
+         %86 = OpVariable %7 Function
+         %87 = OpVariable %7 Function
+         %89 = OpVariable %7 Function
+         %92 = OpVariable %91 Function
+        %116 = OpVariable %7 Function
+        %117 = OpVariable %7 Function
+        %119 = OpVariable %7 Function
+               OpStore %86 %27
+               OpStore %87 %88
+               OpStore %89 %90
+         %93 = OpLoad %6 %89
+         %94 = OpIAdd %6 %93 %46
+               OpStore %89 %94
+         %95 = OpLoad %6 %86
+         %96 = OpAccessChain %7 %92 %94
+               OpStore %96 %95
+         %97 = OpLoad %6 %89
+         %98 = OpIAdd %6 %97 %46
+               OpStore %89 %98
+         %99 = OpLoad %6 %87
+        %100 = OpAccessChain %7 %92 %98
+               OpStore %100 %99
+               OpBranch %101
+        %101 = OpLabel
+               OpLoopMerge %103 %104 None
+               OpBranch %105
+        %105 = OpLabel
+        %106 = OpLoad %6 %89
+        %107 = OpSGreaterThanEqual %58 %106 %27
+               OpBranchConditional %107 %102 %103
+        %102 = OpLabel
+        %108 = OpLoad %6 %89
+        %109 = OpISub %6 %108 %46
+               OpStore %89 %109
+        %110 = OpAccessChain %7 %92 %108
+        %111 = OpLoad %6 %110
+               OpStore %87 %111
+        %112 = OpLoad %6 %89
+        %113 = OpISub %6 %112 %46
+               OpStore %89 %113
+        %114 = OpAccessChain %7 %92 %112
+        %115 = OpLoad %6 %114
+               OpStore %86 %115
+        %118 = OpLoad %6 %86
+               OpStore %117 %118
+        %120 = OpLoad %6 %87
+               OpStore %119 %120
+        %121 = OpFunctionCall %6 %16 %117 %119
+               OpStore %116 %121
+        %122 = OpLoad %6 %116
+        %123 = OpISub %6 %122 %46
+        %124 = OpLoad %6 %86
+        %125 = OpSGreaterThan %58 %123 %124
+               OpSelectionMerge %127 None
+               OpBranchConditional %125 %126 %127
+        %126 = OpLabel
+        %128 = OpLoad %6 %89
+        %129 = OpIAdd %6 %128 %46
+               OpStore %89 %129
+        %130 = OpLoad %6 %86
+        %131 = OpAccessChain %7 %92 %129
+               OpStore %131 %130
+        %132 = OpLoad %6 %89
+        %133 = OpIAdd %6 %132 %46
+               OpStore %89 %133
+        %134 = OpLoad %6 %116
+        %135 = OpISub %6 %134 %46
+        %136 = OpAccessChain %7 %92 %133
+               OpStore %136 %135
+               OpBranch %127
+        %127 = OpLabel
+        %137 = OpLoad %6 %116
+        %138 = OpIAdd %6 %137 %46
+        %139 = OpLoad %6 %87
+        %140 = OpSLessThan %58 %138 %139
+               OpSelectionMerge %142 None
+               OpBranchConditional %140 %141 %142
+        %141 = OpLabel
+        %143 = OpLoad %6 %89
+        %144 = OpIAdd %6 %143 %46
+               OpStore %89 %144
+        %145 = OpLoad %6 %116
+        %146 = OpIAdd %6 %145 %46
+        %147 = OpAccessChain %7 %92 %144
+               OpStore %147 %146
+        %148 = OpLoad %6 %89
+        %149 = OpIAdd %6 %148 %46
+               OpStore %89 %149
+        %150 = OpLoad %6 %87
+        %151 = OpAccessChain %7 %92 %149
+               OpStore %151 %150
+               OpBranch %142
+        %142 = OpLabel
+               OpBranch %104
+        %104 = OpLabel
+               OpBranch %101
+        %103 = OpLabel
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# resolution
+BUFFER variant_resolution DATA_TYPE vec2<float> STD140 DATA
+ 256.0 256.0
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 256 256
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant_resolution AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256
+
+EXPECT reference_framebuffer EQ_HISTOGRAM_EMD_BUFFER variant_framebuffer TOLERANCE 0.005
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/spv-stable-rects-Os-mutate-var-push-through-var.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/spv-stable-rects-Os-mutate-var-push-through-var.amber
new file mode 100644
index 0000000..745c128
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/spv-stable-rects-Os-mutate-var-push-through-var.amber
@@ -0,0 +1,688 @@
+#!amber
+
+# Copyright 2020 Google LLC
+#
+# 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.
+
+
+# A test for a bug found by the GraphicsFuzz project.
+
+# Short description: Three shaders diff: new variable used and mutated
+
+# The test renders three images using semantically equivalent shaders, and then
+# checks that the images are similar.
+# The test passes because the shaders have the same semantics and so the images
+# should be the same.
+
+SHADER vertex reference_vertex_shader PASSTHROUGH
+
+SHADER fragment reference_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 7
+; Bound: 286
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %165 %180
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 320
+               OpName %4 "main"
+               OpName %165 "gl_FragCoord"
+               OpName %168 "buf0"
+               OpMemberName %168 0 "resolution"
+               OpName %170 ""
+               OpName %180 "_GLF_color"
+               OpDecorate %165 BuiltIn FragCoord
+               OpMemberDecorate %168 0 Offset 0
+               OpDecorate %168 Block
+               OpDecorate %170 DescriptorSet 0
+               OpDecorate %170 Binding 0
+               OpDecorate %180 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeFloat 32
+          %7 = OpTypeVector %6 2
+          %9 = OpTypeVector %6 4
+         %10 = OpTypePointer Function %9
+         %11 = OpTypeBool
+         %21 = OpTypeInt 32 0
+         %22 = OpConstant %21 0
+         %23 = OpTypePointer Function %6
+         %31 = OpConstantFalse %11
+         %33 = OpConstant %21 1
+         %66 = OpConstantTrue %11
+         %70 = OpConstant %6 0.5
+         %71 = OpConstant %6 1
+         %72 = OpConstantComposite %9 %70 %70 %71 %71
+         %73 = OpTypeInt 32 1
+         %76 = OpConstant %73 0
+         %83 = OpConstant %73 8
+         %85 = OpConstant %21 8
+         %86 = OpTypeArray %9 %85
+         %87 = OpConstant %6 4
+         %88 = OpConstant %6 20
+         %89 = OpConstantComposite %9 %87 %87 %88 %87
+         %90 = OpConstantComposite %9 %87 %87 %87 %88
+         %91 = OpConstantComposite %9 %87 %88 %88 %87
+         %92 = OpConstant %6 8
+         %93 = OpConstantComposite %9 %88 %87 %87 %92
+         %94 = OpConstant %6 6
+         %95 = OpConstant %6 2
+         %96 = OpConstantComposite %9 %92 %94 %87 %95
+         %97 = OpConstant %6 12
+         %98 = OpConstantComposite %9 %95 %97 %95 %87
+         %99 = OpConstant %6 16
+        %100 = OpConstantComposite %9 %99 %95 %87 %87
+        %101 = OpConstant %6 22
+        %102 = OpConstantComposite %9 %97 %101 %87 %87
+        %103 = OpConstantComposite %86 %89 %90 %91 %93 %96 %98 %100 %102
+        %108 = OpTypePointer Function %86
+        %115 = OpConstant %21 16
+        %116 = OpTypeArray %9 %115
+        %117 = OpConstant %6 0
+        %118 = OpConstantComposite %9 %117 %117 %117 %71
+        %119 = OpConstantComposite %9 %70 %117 %117 %71
+        %120 = OpConstantComposite %9 %117 %70 %117 %71
+        %121 = OpConstantComposite %9 %70 %70 %117 %71
+        %122 = OpConstantComposite %9 %117 %117 %70 %71
+        %123 = OpConstantComposite %9 %70 %117 %70 %71
+        %124 = OpConstantComposite %9 %117 %70 %70 %71
+        %125 = OpConstantComposite %9 %70 %70 %70 %71
+        %126 = OpConstantComposite %9 %71 %117 %117 %71
+        %127 = OpConstantComposite %9 %117 %71 %117 %71
+        %128 = OpConstantComposite %9 %71 %71 %117 %71
+        %129 = OpConstantComposite %9 %117 %117 %71 %71
+        %130 = OpConstantComposite %9 %71 %117 %71 %71
+        %131 = OpConstantComposite %9 %117 %71 %71 %71
+        %132 = OpConstantComposite %9 %71 %71 %71 %71
+        %133 = OpConstantComposite %116 %118 %119 %120 %121 %122 %123 %124 %125 %118 %126 %127 %128 %129 %130 %131 %132
+        %146 = OpConstant %73 9
+        %149 = OpConstant %73 11
+        %151 = OpConstant %73 16
+        %153 = OpTypePointer Function %116
+        %158 = OpConstant %73 1
+        %164 = OpTypePointer Input %9
+        %165 = OpVariable %164 Input
+        %168 = OpTypeStruct %7
+        %169 = OpTypePointer Uniform %168
+        %170 = OpVariable %169 Uniform
+        %171 = OpTypePointer Uniform %7
+        %176 = OpConstant %6 32
+        %179 = OpTypePointer Output %9
+        %180 = OpVariable %179 Output
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+        %199 = OpVariable %108 Function
+        %200 = OpVariable %108 Function
+        %201 = OpVariable %108 Function
+        %202 = OpVariable %153 Function
+        %166 = OpLoad %9 %165
+        %167 = OpVectorShuffle %7 %166 %166 0 1
+        %172 = OpAccessChain %171 %170 %76
+        %173 = OpLoad %7 %172
+        %174 = OpFDiv %7 %167 %173
+        %177 = OpVectorTimesScalar %7 %174 %176
+        %178 = OpExtInst %7 %1 Floor %177
+               OpBranch %205
+        %205 = OpLabel
+        %280 = OpPhi %9 %72 %5 %285 %233
+        %279 = OpPhi %73 %76 %5 %235 %233
+        %208 = OpSLessThan %11 %279 %83
+               OpLoopMerge %236 %233 None
+               OpBranchConditional %208 %209 %236
+        %209 = OpLabel
+               OpStore %199 %103
+        %212 = OpAccessChain %10 %199 %279
+        %213 = OpLoad %9 %212
+               OpSelectionMerge %277 None
+               OpSwitch %22 %242
+        %242 = OpLabel
+        %244 = OpCompositeExtract %6 %178 0
+        %246 = OpCompositeExtract %6 %213 0
+        %247 = OpFOrdLessThan %11 %244 %246
+               OpSelectionMerge %249 None
+               OpBranchConditional %247 %248 %249
+        %248 = OpLabel
+               OpBranch %277
+        %249 = OpLabel
+        %251 = OpCompositeExtract %6 %178 1
+        %253 = OpCompositeExtract %6 %213 1
+        %254 = OpFOrdLessThan %11 %251 %253
+               OpSelectionMerge %256 None
+               OpBranchConditional %254 %255 %256
+        %255 = OpLabel
+               OpBranch %277
+        %256 = OpLabel
+        %262 = OpCompositeExtract %6 %213 2
+        %263 = OpFAdd %6 %246 %262
+        %264 = OpFOrdGreaterThan %11 %244 %263
+               OpSelectionMerge %266 None
+               OpBranchConditional %264 %265 %266
+        %265 = OpLabel
+               OpBranch %277
+        %266 = OpLabel
+        %272 = OpCompositeExtract %6 %213 3
+        %273 = OpFAdd %6 %253 %272
+        %274 = OpFOrdGreaterThan %11 %251 %273
+               OpSelectionMerge %276 None
+               OpBranchConditional %274 %275 %276
+        %275 = OpLabel
+               OpBranch %277
+        %276 = OpLabel
+               OpBranch %277
+        %277 = OpLabel
+        %282 = OpPhi %11 %31 %248 %31 %255 %31 %265 %31 %275 %66 %276
+               OpSelectionMerge %232 None
+               OpBranchConditional %282 %215 %232
+        %215 = OpLabel
+               OpStore %200 %103
+        %217 = OpAccessChain %23 %200 %279 %22
+        %218 = OpLoad %6 %217
+        %219 = OpConvertFToS %73 %218
+               OpStore %201 %103
+        %221 = OpAccessChain %23 %201 %279 %33
+        %222 = OpLoad %6 %221
+        %223 = OpConvertFToS %73 %222
+        %224 = OpIMul %73 %219 %223
+        %226 = OpIMul %73 %279 %146
+        %227 = OpIAdd %73 %224 %226
+        %228 = OpIAdd %73 %227 %149
+        %229 = OpSMod %73 %228 %151
+               OpStore %202 %133
+        %230 = OpAccessChain %10 %202 %229
+        %231 = OpLoad %9 %230
+               OpBranch %232
+        %232 = OpLabel
+        %285 = OpPhi %9 %280 %277 %231 %215
+               OpBranch %233
+        %233 = OpLabel
+        %235 = OpIAdd %73 %279 %158
+               OpBranch %205
+        %236 = OpLabel
+               OpStore %180 %280
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for reference
+
+# resolution
+BUFFER reference_resolution DATA_TYPE vec2<float> STD140 DATA
+ 256.0 256.0
+END
+
+BUFFER reference_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics reference_pipeline
+  ATTACH reference_vertex_shader
+  ATTACH reference_fragment_shader
+  FRAMEBUFFER_SIZE 256 256
+  BIND BUFFER reference_framebuffer AS color LOCATION 0
+  BIND BUFFER reference_resolution AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR reference_pipeline 0 0 0 255
+
+CLEAR reference_pipeline
+RUN reference_pipeline DRAW_RECT POS 0 0 SIZE 256 256
+
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 7
+; Bound: 517
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %165 %180
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 320
+               OpName %4 "main"
+               OpName %165 "gl_FragCoord"
+               OpName %168 "buf0"
+               OpMemberName %168 0 "resolution"
+               OpName %170 ""
+               OpName %180 "_GLF_color"
+               OpDecorate %165 BuiltIn FragCoord
+               OpMemberDecorate %168 0 Offset 0
+               OpDecorate %168 Block
+               OpDecorate %170 DescriptorSet 0
+               OpDecorate %170 Binding 0
+               OpDecorate %180 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeFloat 32
+          %7 = OpTypeVector %6 2
+          %9 = OpTypeVector %6 4
+         %10 = OpTypePointer Function %9
+         %11 = OpTypeBool
+         %21 = OpTypeInt 32 0
+         %22 = OpConstant %21 0
+         %23 = OpTypePointer Function %6
+         %31 = OpConstantFalse %11
+         %33 = OpConstant %21 1
+         %66 = OpConstantTrue %11
+         %70 = OpConstant %6 0.5
+         %71 = OpConstant %6 1
+         %72 = OpConstantComposite %9 %70 %70 %71 %71
+         %73 = OpTypeInt 32 1
+         %76 = OpConstant %73 0
+         %83 = OpConstant %73 8
+         %85 = OpConstant %21 8
+         %86 = OpTypeArray %9 %85
+         %87 = OpConstant %6 4
+         %88 = OpConstant %6 20
+         %89 = OpConstantComposite %9 %87 %87 %88 %87
+         %90 = OpConstantComposite %9 %87 %87 %87 %88
+         %91 = OpConstantComposite %9 %87 %88 %88 %87
+         %92 = OpConstant %6 8
+         %93 = OpConstantComposite %9 %88 %87 %87 %92
+         %94 = OpConstant %6 6
+         %95 = OpConstant %6 2
+         %96 = OpConstantComposite %9 %92 %94 %87 %95
+         %97 = OpConstant %6 12
+         %98 = OpConstantComposite %9 %95 %97 %95 %87
+         %99 = OpConstant %6 16
+        %100 = OpConstantComposite %9 %99 %95 %87 %87
+        %101 = OpConstant %6 22
+        %102 = OpConstantComposite %9 %97 %101 %87 %87
+        %103 = OpConstantComposite %86 %89 %90 %91 %93 %96 %98 %100 %102
+        %108 = OpTypePointer Function %86
+        %115 = OpConstant %21 16
+        %116 = OpTypeArray %9 %115
+        %117 = OpConstant %6 0
+        %118 = OpConstantComposite %9 %117 %117 %117 %71
+        %119 = OpConstantComposite %9 %70 %117 %117 %71
+        %120 = OpConstantComposite %9 %117 %70 %117 %71
+        %121 = OpConstantComposite %9 %70 %70 %117 %71
+        %122 = OpConstantComposite %9 %117 %117 %70 %71
+        %123 = OpConstantComposite %9 %70 %117 %70 %71
+        %124 = OpConstantComposite %9 %117 %70 %70 %71
+        %125 = OpConstantComposite %9 %70 %70 %70 %71
+        %126 = OpConstantComposite %9 %71 %117 %117 %71
+        %127 = OpConstantComposite %9 %117 %71 %117 %71
+        %128 = OpConstantComposite %9 %71 %71 %117 %71
+        %129 = OpConstantComposite %9 %117 %117 %71 %71
+        %130 = OpConstantComposite %9 %71 %117 %71 %71
+        %131 = OpConstantComposite %9 %117 %71 %71 %71
+        %132 = OpConstantComposite %9 %71 %71 %71 %71
+        %133 = OpConstantComposite %116 %118 %119 %120 %121 %122 %123 %124 %125 %118 %126 %127 %128 %129 %130 %131 %132
+        %146 = OpConstant %73 9
+        %149 = OpConstant %73 11
+        %151 = OpConstant %73 16
+        %153 = OpTypePointer Function %116
+        %158 = OpConstant %73 1
+        %164 = OpTypePointer Input %9
+        %165 = OpVariable %164 Input
+        %168 = OpTypeStruct %7
+        %169 = OpTypePointer Uniform %168
+        %170 = OpVariable %169 Uniform
+        %171 = OpTypePointer Uniform %7
+        %176 = OpConstant %6 32
+        %179 = OpTypePointer Output %9
+        %180 = OpVariable %179 Output
+        %386 = OpConstantComposite %9 %117 %117 %117 %117
+        %387 = OpConstantComposite %86 %386 %386 %386 %386 %386 %386 %386 %386
+        %498 = OpConstant %6 0
+        %499 = OpConstantComposite %9 %498 %498 %498 %498
+        %503 = OpConstantComposite %86 %499 %499 %499 %499 %499 %499 %499 %499
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+        %389 = OpVariable %108 Function %387
+        %199 = OpVariable %108 Function
+        %200 = OpVariable %108 Function
+        %201 = OpVariable %108 Function
+        %202 = OpVariable %153 Function
+               OpStore %389 %103
+        %388 = OpLoad %86 %389
+        %166 = OpLoad %9 %165
+        %167 = OpVectorShuffle %7 %166 %166 0 1
+        %172 = OpAccessChain %171 %170 %76
+        %173 = OpLoad %7 %172
+        %174 = OpFDiv %7 %167 %173
+        %177 = OpVectorTimesScalar %7 %174 %176
+        %178 = OpExtInst %7 %1 Floor %177
+               OpBranch %205
+        %205 = OpLabel
+        %280 = OpPhi %9 %72 %5 %285 %233
+        %279 = OpPhi %73 %76 %5 %235 %233
+        %208 = OpSLessThan %11 %279 %83
+               OpLoopMerge %236 %233 None
+               OpBranchConditional %208 %209 %236
+        %209 = OpLabel
+               OpStore %199 %388
+        %212 = OpAccessChain %10 %199 %279
+        %213 = OpLoad %9 %212
+               OpSelectionMerge %277 None
+               OpSwitch %22 %242
+        %242 = OpLabel
+        %244 = OpCompositeExtract %6 %178 0
+        %246 = OpCompositeExtract %6 %213 0
+        %247 = OpFOrdLessThan %11 %244 %246
+               OpSelectionMerge %249 None
+               OpBranchConditional %247 %248 %249
+        %248 = OpLabel
+               OpBranch %277
+        %249 = OpLabel
+        %251 = OpCompositeExtract %6 %178 1
+        %253 = OpCompositeExtract %6 %213 1
+        %254 = OpFOrdLessThan %11 %251 %253
+               OpSelectionMerge %256 None
+               OpBranchConditional %254 %255 %256
+        %255 = OpLabel
+               OpBranch %277
+        %256 = OpLabel
+        %262 = OpCompositeExtract %6 %213 2
+        %263 = OpFAdd %6 %246 %262
+        %264 = OpFOrdGreaterThan %11 %244 %263
+               OpSelectionMerge %266 None
+               OpBranchConditional %264 %265 %266
+        %265 = OpLabel
+               OpBranch %277
+        %266 = OpLabel
+        %272 = OpCompositeExtract %6 %213 3
+        %273 = OpFAdd %6 %253 %272
+        %274 = OpFOrdGreaterThan %11 %251 %273
+               OpSelectionMerge %276 None
+               OpBranchConditional %274 %275 %276
+        %275 = OpLabel
+               OpBranch %277
+        %276 = OpLabel
+               OpBranch %277
+        %277 = OpLabel
+        %282 = OpPhi %11 %31 %248 %31 %255 %31 %265 %31 %275 %66 %276
+               OpSelectionMerge %232 None
+               OpBranchConditional %282 %215 %232
+        %215 = OpLabel
+               OpStore %200 %103
+        %217 = OpAccessChain %23 %200 %279 %22
+        %218 = OpLoad %6 %217
+        %219 = OpConvertFToS %73 %218
+               OpStore %201 %103
+        %221 = OpAccessChain %23 %201 %279 %33
+        %222 = OpLoad %6 %221
+        %516 = OpLoad %86 %389
+               OpStore %389 %503
+               OpStore %389 %516
+        %223 = OpConvertFToS %73 %222
+        %224 = OpIMul %73 %219 %223
+        %226 = OpIMul %73 %279 %146
+        %227 = OpIAdd %73 %224 %226
+        %228 = OpIAdd %73 %227 %149
+        %229 = OpSMod %73 %228 %151
+               OpStore %202 %133
+        %230 = OpAccessChain %10 %202 %229
+        %231 = OpLoad %9 %230
+               OpBranch %232
+        %232 = OpLabel
+        %285 = OpPhi %9 %280 %277 %231 %215
+               OpBranch %233
+        %233 = OpLabel
+        %235 = OpIAdd %73 %279 %158
+               OpBranch %205
+        %236 = OpLabel
+               OpStore %180 %280
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# resolution
+BUFFER variant_resolution DATA_TYPE vec2<float> STD140 DATA
+ 256.0 256.0
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 256 256
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant_resolution AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256
+
+
+SHADER vertex variant_2_vertex_shader PASSTHROUGH
+
+SHADER fragment variant_2_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 7
+; Bound: 504
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %165 %180
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 320
+               OpName %4 "main"
+               OpName %165 "gl_FragCoord"
+               OpName %168 "buf0"
+               OpMemberName %168 0 "resolution"
+               OpName %170 ""
+               OpName %180 "_GLF_color"
+               OpDecorate %165 BuiltIn FragCoord
+               OpMemberDecorate %168 0 Offset 0
+               OpDecorate %168 Block
+               OpDecorate %170 DescriptorSet 0
+               OpDecorate %170 Binding 0
+               OpDecorate %180 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeFloat 32
+          %7 = OpTypeVector %6 2
+          %9 = OpTypeVector %6 4
+         %10 = OpTypePointer Function %9
+         %11 = OpTypeBool
+         %21 = OpTypeInt 32 0
+         %22 = OpConstant %21 0
+         %23 = OpTypePointer Function %6
+         %31 = OpConstantFalse %11
+         %33 = OpConstant %21 1
+         %66 = OpConstantTrue %11
+         %70 = OpConstant %6 0.5
+         %71 = OpConstant %6 1
+         %72 = OpConstantComposite %9 %70 %70 %71 %71
+         %73 = OpTypeInt 32 1
+         %76 = OpConstant %73 0
+         %83 = OpConstant %73 8
+         %85 = OpConstant %21 8
+         %86 = OpTypeArray %9 %85
+         %87 = OpConstant %6 4
+         %88 = OpConstant %6 20
+         %89 = OpConstantComposite %9 %87 %87 %88 %87
+         %90 = OpConstantComposite %9 %87 %87 %87 %88
+         %91 = OpConstantComposite %9 %87 %88 %88 %87
+         %92 = OpConstant %6 8
+         %93 = OpConstantComposite %9 %88 %87 %87 %92
+         %94 = OpConstant %6 6
+         %95 = OpConstant %6 2
+         %96 = OpConstantComposite %9 %92 %94 %87 %95
+         %97 = OpConstant %6 12
+         %98 = OpConstantComposite %9 %95 %97 %95 %87
+         %99 = OpConstant %6 16
+        %100 = OpConstantComposite %9 %99 %95 %87 %87
+        %101 = OpConstant %6 22
+        %102 = OpConstantComposite %9 %97 %101 %87 %87
+        %103 = OpConstantComposite %86 %89 %90 %91 %93 %96 %98 %100 %102
+        %108 = OpTypePointer Function %86
+        %115 = OpConstant %21 16
+        %116 = OpTypeArray %9 %115
+        %117 = OpConstant %6 0
+        %118 = OpConstantComposite %9 %117 %117 %117 %71
+        %119 = OpConstantComposite %9 %70 %117 %117 %71
+        %120 = OpConstantComposite %9 %117 %70 %117 %71
+        %121 = OpConstantComposite %9 %70 %70 %117 %71
+        %122 = OpConstantComposite %9 %117 %117 %70 %71
+        %123 = OpConstantComposite %9 %70 %117 %70 %71
+        %124 = OpConstantComposite %9 %117 %70 %70 %71
+        %125 = OpConstantComposite %9 %70 %70 %70 %71
+        %126 = OpConstantComposite %9 %71 %117 %117 %71
+        %127 = OpConstantComposite %9 %117 %71 %117 %71
+        %128 = OpConstantComposite %9 %71 %71 %117 %71
+        %129 = OpConstantComposite %9 %117 %117 %71 %71
+        %130 = OpConstantComposite %9 %71 %117 %71 %71
+        %131 = OpConstantComposite %9 %117 %71 %71 %71
+        %132 = OpConstantComposite %9 %71 %71 %71 %71
+        %133 = OpConstantComposite %116 %118 %119 %120 %121 %122 %123 %124 %125 %118 %126 %127 %128 %129 %130 %131 %132
+        %146 = OpConstant %73 9
+        %149 = OpConstant %73 11
+        %151 = OpConstant %73 16
+        %153 = OpTypePointer Function %116
+        %158 = OpConstant %73 1
+        %164 = OpTypePointer Input %9
+        %165 = OpVariable %164 Input
+        %168 = OpTypeStruct %7
+        %169 = OpTypePointer Uniform %168
+        %170 = OpVariable %169 Uniform
+        %171 = OpTypePointer Uniform %7
+        %176 = OpConstant %6 32
+        %179 = OpTypePointer Output %9
+        %180 = OpVariable %179 Output
+        %386 = OpConstantComposite %9 %117 %117 %117 %117
+        %387 = OpConstantComposite %86 %386 %386 %386 %386 %386 %386 %386 %386
+        %498 = OpConstant %6 0
+        %499 = OpConstantComposite %9 %498 %498 %498 %498
+        %503 = OpConstantComposite %86 %499 %499 %499 %499 %499 %499 %499 %499
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+        %389 = OpVariable %108 Function %387
+        %199 = OpVariable %108 Function
+        %200 = OpVariable %108 Function
+        %201 = OpVariable %108 Function
+        %202 = OpVariable %153 Function
+               OpStore %389 %103
+        %388 = OpLoad %86 %389
+        %166 = OpLoad %9 %165
+        %167 = OpVectorShuffle %7 %166 %166 0 1
+        %172 = OpAccessChain %171 %170 %76
+        %173 = OpLoad %7 %172
+        %174 = OpFDiv %7 %167 %173
+        %177 = OpVectorTimesScalar %7 %174 %176
+        %178 = OpExtInst %7 %1 Floor %177
+               OpBranch %205
+        %205 = OpLabel
+        %280 = OpPhi %9 %72 %5 %285 %233
+        %279 = OpPhi %73 %76 %5 %235 %233
+        %208 = OpSLessThan %11 %279 %83
+               OpLoopMerge %236 %233 None
+               OpBranchConditional %208 %209 %236
+        %209 = OpLabel
+               OpStore %199 %388
+        %212 = OpAccessChain %10 %199 %279
+        %213 = OpLoad %9 %212
+               OpSelectionMerge %277 None
+               OpSwitch %22 %242
+        %242 = OpLabel
+        %244 = OpCompositeExtract %6 %178 0
+        %246 = OpCompositeExtract %6 %213 0
+        %247 = OpFOrdLessThan %11 %244 %246
+               OpSelectionMerge %249 None
+               OpBranchConditional %247 %248 %249
+        %248 = OpLabel
+               OpBranch %277
+        %249 = OpLabel
+        %251 = OpCompositeExtract %6 %178 1
+        %253 = OpCompositeExtract %6 %213 1
+        %254 = OpFOrdLessThan %11 %251 %253
+               OpSelectionMerge %256 None
+               OpBranchConditional %254 %255 %256
+        %255 = OpLabel
+               OpBranch %277
+        %256 = OpLabel
+        %262 = OpCompositeExtract %6 %213 2
+        %263 = OpFAdd %6 %246 %262
+        %264 = OpFOrdGreaterThan %11 %244 %263
+               OpSelectionMerge %266 None
+               OpBranchConditional %264 %265 %266
+        %265 = OpLabel
+               OpBranch %277
+        %266 = OpLabel
+        %272 = OpCompositeExtract %6 %213 3
+        %273 = OpFAdd %6 %253 %272
+        %274 = OpFOrdGreaterThan %11 %251 %273
+               OpSelectionMerge %276 None
+               OpBranchConditional %274 %275 %276
+        %275 = OpLabel
+               OpBranch %277
+        %276 = OpLabel
+               OpBranch %277
+        %277 = OpLabel
+        %282 = OpPhi %11 %31 %248 %31 %255 %31 %265 %31 %275 %66 %276
+               OpSelectionMerge %232 None
+               OpBranchConditional %282 %215 %232
+        %215 = OpLabel
+               OpStore %200 %103
+        %217 = OpAccessChain %23 %200 %279 %22
+        %218 = OpLoad %6 %217
+        %219 = OpConvertFToS %73 %218
+               OpStore %201 %103
+        %221 = OpAccessChain %23 %201 %279 %33
+        %222 = OpLoad %6 %221
+        %223 = OpConvertFToS %73 %222
+        %224 = OpIMul %73 %219 %223
+        %226 = OpIMul %73 %279 %146
+        %227 = OpIAdd %73 %224 %226
+        %228 = OpIAdd %73 %227 %149
+        %229 = OpSMod %73 %228 %151
+               OpStore %202 %133
+        %230 = OpAccessChain %10 %202 %229
+        %231 = OpLoad %9 %230
+               OpBranch %232
+        %232 = OpLabel
+        %285 = OpPhi %9 %280 %277 %231 %215
+               OpBranch %233
+        %233 = OpLabel
+        %235 = OpIAdd %73 %279 %158
+               OpBranch %205
+        %236 = OpLabel
+               OpStore %180 %280
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for variant_2
+
+# resolution
+BUFFER variant_2_resolution DATA_TYPE vec2<float> STD140 DATA
+ 256.0 256.0
+END
+
+BUFFER variant_2_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_2_pipeline
+  ATTACH variant_2_vertex_shader
+  ATTACH variant_2_fragment_shader
+  FRAMEBUFFER_SIZE 256 256
+  BIND BUFFER variant_2_framebuffer AS color LOCATION 0
+  BIND BUFFER variant_2_resolution AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_2_pipeline 0 0 0 255
+
+CLEAR variant_2_pipeline
+RUN variant_2_pipeline DRAW_RECT POS 0 0 SIZE 256 256
+
+EXPECT reference_framebuffer EQ_HISTOGRAM_EMD_BUFFER variant_framebuffer TOLERANCE 0.005
+EXPECT reference_framebuffer EQ_HISTOGRAM_EMD_BUFFER variant_2_framebuffer TOLERANCE 0.005
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/stable-binarysearch-tree-false-if-discard-loop.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/stable-binarysearch-tree-false-if-discard-loop.amber
new file mode 100644
index 0000000..360fcaa
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/stable-binarysearch-tree-false-if-discard-loop.amber
@@ -0,0 +1,2113 @@
+#!amber
+
+# Copyright 2020 Google LLC
+#
+# 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.
+
+
+# A test for a bug found by GraphicsFuzz.
+
+# Short description: A fragment shader with always false if with discard loop
+
+# The test passes because both shaders render the same image.
+
+# Optimized using spirv-opt with the following arguments:
+# '-O'
+# spirv-opt commit hash: 230f363e6da32791f640b02205e0645cc67c3f1d
+
+
+
+SHADER vertex reference_vertex_shader PASSTHROUGH
+
+# reference_fragment_shader is derived from the following GLSL:
+# #version 320 es
+# precision highp float;
+#
+# precision highp int;
+#
+# layout(location = 0) out vec4 _GLF_color;
+#
+# struct BST
+# {
+#     int data;
+#     int leftIndex;
+#     int rightIndex;
+# };
+#
+# BST tree[10];
+#
+# void makeTreeNode(inout BST tree, int data)
+# {
+#     tree.data = data;
+#     tree.leftIndex = -1;
+#     tree.rightIndex = -1;
+# }
+# void insert(int treeIndex, int data)
+# {
+#     int baseIndex = 0;
+#     while (baseIndex <= treeIndex)
+#     {
+#         if (data <= tree[baseIndex].data)
+#         {
+#             if (tree[baseIndex].leftIndex == -1)
+#             {
+#                 tree[baseIndex].leftIndex = treeIndex;
+#                 makeTreeNode(tree[treeIndex], data);
+#                 return;
+#             }
+#             else
+#             {
+#                 baseIndex = tree[baseIndex].leftIndex;
+#                 continue;
+#             }
+#         }
+#         else
+#         {
+#             if (tree[baseIndex].rightIndex == -1)
+#             {
+#                 tree[baseIndex].rightIndex = treeIndex;
+#                 makeTreeNode(tree[treeIndex], data);
+#                 return;
+#             }
+#             else
+#             {
+#                 baseIndex = tree[baseIndex].rightIndex;
+#                 continue;
+#             }
+#         }
+#     }
+# }
+# int search(int target)
+# {
+#     BST currentNode;
+#     int index = 0;
+#     while (index != -1)
+#     {
+#         currentNode = tree[index];
+#         if (currentNode.data == target)
+#         {
+#             return target;
+#         }
+#         index = target > currentNode.data ? currentNode.rightIndex : currentNode.leftIndex;
+#     }
+#     return -1;
+# }
+# void main()
+# {
+#     int treeIndex = 0;
+#     makeTreeNode(tree[0], 9);
+#     treeIndex++;
+#     insert(treeIndex, 5);
+#     treeIndex++;
+#     insert(treeIndex, 12);
+#     treeIndex++;
+#     insert(treeIndex, 15);
+#     treeIndex++;
+#     insert(treeIndex, 7);
+#     treeIndex++;
+#     insert(treeIndex, 8);
+#     treeIndex++;
+#     insert(treeIndex, 2);
+#     treeIndex++;
+#     insert(treeIndex, 6);
+#     treeIndex++;
+#     insert(treeIndex, 17);
+#     treeIndex++;
+#     insert(treeIndex, 13);
+#     int count = 0;
+#     for (int i = 0; i < 20; i++)
+#     {
+#         int result = search(i);
+#         switch (i)
+#         {
+#         case 9:
+#         case 5:
+#         case 12:
+#         case 15:
+#         case 7:
+#         case 8:
+#         case 2:
+#         case 6:
+#         case 17:
+#         case 13:
+#             if (result == i)
+#             {
+#                 count++;
+#             }
+#             break;
+#         default:
+#             if (result == -1)
+#             {
+#                 count++;
+#             }
+#             break;
+#         }
+#     }
+#     if (count == 20)
+#     {
+#         _GLF_color = vec4(1.0, 0.0, 0.0, 1.0);
+#     }
+#     else
+#     {
+#         _GLF_color = vec4(0.0, 0.0, 1.0, 1.0);
+#     }
+# }
+SHADER fragment reference_fragment_shader SPIRV-ASM
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 10
+; Bound: 1372
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %254
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 320
+               OpName %4 "main"
+               OpName %7 "BST"
+               OpMemberName %7 0 "data"
+               OpMemberName %7 1 "leftIndex"
+               OpMemberName %7 2 "rightIndex"
+               OpName %47 "tree"
+               OpName %254 "_GLF_color"
+               OpDecorate %254 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeInt 32 1
+          %7 = OpTypeStruct %6 %6 %6
+          %8 = OpTypePointer Function %7
+          %9 = OpTypePointer Function %6
+         %24 = OpConstant %6 0
+         %27 = OpConstant %6 1
+         %28 = OpConstant %6 -1
+         %30 = OpConstant %6 2
+         %40 = OpTypeBool
+         %43 = OpTypeInt 32 0
+         %44 = OpConstant %43 10
+         %45 = OpTypeArray %7 %44
+        %141 = OpConstant %6 9
+        %151 = OpConstant %6 5
+        %158 = OpConstant %6 12
+        %165 = OpConstant %6 15
+        %172 = OpConstant %6 7
+        %179 = OpConstant %6 8
+        %192 = OpConstant %6 6
+        %199 = OpConstant %6 17
+        %206 = OpConstant %6 13
+        %219 = OpConstant %6 20
+        %251 = OpTypeFloat 32
+        %252 = OpTypeVector %251 4
+        %253 = OpTypePointer Output %252
+        %254 = OpVariable %253 Output
+        %255 = OpConstant %251 1
+        %256 = OpConstant %251 0
+        %257 = OpConstantComposite %252 %255 %256 %256 %255
+        %259 = OpConstantComposite %252 %256 %256 %255 %255
+        %262 = OpConstant %43 0
+        %263 = OpConstantFalse %40
+        %266 = OpConstantTrue %40
+       %1015 = OpTypePointer Function %45
+       %1318 = OpUndef %6
+       %1359 = OpConstantComposite %7 %141 %28 %28
+       %1360 = OpConstantComposite %7 %151 %28 %28
+       %1361 = OpConstantComposite %7 %158 %28 %28
+       %1362 = OpConstant %6 3
+       %1363 = OpConstantComposite %7 %165 %28 %28
+       %1364 = OpConstant %6 4
+       %1365 = OpConstantComposite %7 %172 %28 %28
+       %1366 = OpConstantComposite %7 %179 %28 %28
+       %1367 = OpConstantComposite %7 %30 %28 %28
+       %1368 = OpConstantComposite %7 %192 %28 %28
+       %1369 = OpConstantComposite %7 %199 %28 %28
+       %1370 = OpConstantComposite %7 %206 %28 %28
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+         %47 = OpVariable %1015 Function
+        %148 = OpAccessChain %8 %47 %24
+               OpStore %148 %1359
+               OpSelectionMerge %347 None
+               OpSwitch %262 %288
+        %288 = OpLabel
+               OpBranch %289
+        %289 = OpLabel
+       %1212 = OpPhi %6 %24 %288 %1342 %343
+        %293 = OpSLessThanEqual %40 %1212 %27
+               OpLoopMerge %344 %343 None
+               OpBranchConditional %293 %294 %344
+        %294 = OpLabel
+        %297 = OpAccessChain %9 %47 %1212 %24
+        %298 = OpLoad %6 %297
+        %299 = OpSLessThanEqual %40 %151 %298
+               OpSelectionMerge %342 None
+               OpBranchConditional %299 %300 %321
+        %321 = OpLabel
+        %323 = OpAccessChain %9 %47 %1212 %30
+        %324 = OpLoad %6 %323
+        %325 = OpIEqual %40 %324 %28
+               OpSelectionMerge %341 None
+               OpBranchConditional %325 %326 %337
+        %337 = OpLabel
+        %340 = OpLoad %6 %323
+               OpBranch %343
+        %326 = OpLabel
+               OpStore %323 %27
+        %336 = OpAccessChain %8 %47 %27
+               OpStore %336 %1360
+               OpBranch %344
+        %341 = OpLabel
+               OpUnreachable
+        %300 = OpLabel
+        %302 = OpAccessChain %9 %47 %1212 %27
+        %303 = OpLoad %6 %302
+        %304 = OpIEqual %40 %303 %28
+               OpSelectionMerge %320 None
+               OpBranchConditional %304 %305 %316
+        %316 = OpLabel
+        %319 = OpLoad %6 %302
+               OpBranch %343
+        %305 = OpLabel
+               OpStore %302 %27
+        %315 = OpAccessChain %8 %47 %27
+               OpStore %315 %1360
+               OpBranch %344
+        %320 = OpLabel
+               OpUnreachable
+        %342 = OpLabel
+               OpUnreachable
+        %343 = OpLabel
+       %1342 = OpPhi %6 %319 %316 %340 %337
+               OpBranch %289
+        %344 = OpLabel
+       %1213 = OpPhi %40 %263 %289 %266 %305 %266 %326
+               OpSelectionMerge %346 None
+               OpBranchConditional %1213 %347 %346
+        %346 = OpLabel
+               OpBranch %347
+        %347 = OpLabel
+               OpSelectionMerge %424 None
+               OpSwitch %262 %365
+        %365 = OpLabel
+               OpBranch %366
+        %366 = OpLabel
+       %1220 = OpPhi %6 %24 %365 %1344 %420
+        %370 = OpSLessThanEqual %40 %1220 %30
+               OpLoopMerge %421 %420 None
+               OpBranchConditional %370 %371 %421
+        %371 = OpLabel
+        %374 = OpAccessChain %9 %47 %1220 %24
+        %375 = OpLoad %6 %374
+        %376 = OpSLessThanEqual %40 %158 %375
+               OpSelectionMerge %419 None
+               OpBranchConditional %376 %377 %398
+        %398 = OpLabel
+        %400 = OpAccessChain %9 %47 %1220 %30
+        %401 = OpLoad %6 %400
+        %402 = OpIEqual %40 %401 %28
+               OpSelectionMerge %418 None
+               OpBranchConditional %402 %403 %414
+        %414 = OpLabel
+        %417 = OpLoad %6 %400
+               OpBranch %420
+        %403 = OpLabel
+               OpStore %400 %30
+        %413 = OpAccessChain %8 %47 %30
+               OpStore %413 %1361
+               OpBranch %421
+        %418 = OpLabel
+               OpUnreachable
+        %377 = OpLabel
+        %379 = OpAccessChain %9 %47 %1220 %27
+        %380 = OpLoad %6 %379
+        %381 = OpIEqual %40 %380 %28
+               OpSelectionMerge %397 None
+               OpBranchConditional %381 %382 %393
+        %393 = OpLabel
+        %396 = OpLoad %6 %379
+               OpBranch %420
+        %382 = OpLabel
+               OpStore %379 %30
+        %392 = OpAccessChain %8 %47 %30
+               OpStore %392 %1361
+               OpBranch %421
+        %397 = OpLabel
+               OpUnreachable
+        %419 = OpLabel
+               OpUnreachable
+        %420 = OpLabel
+       %1344 = OpPhi %6 %396 %393 %417 %414
+               OpBranch %366
+        %421 = OpLabel
+       %1221 = OpPhi %40 %263 %366 %266 %382 %266 %403
+               OpSelectionMerge %423 None
+               OpBranchConditional %1221 %424 %423
+        %423 = OpLabel
+               OpBranch %424
+        %424 = OpLabel
+               OpSelectionMerge %501 None
+               OpSwitch %262 %442
+        %442 = OpLabel
+               OpBranch %443
+        %443 = OpLabel
+       %1228 = OpPhi %6 %24 %442 %1345 %497
+        %447 = OpSLessThanEqual %40 %1228 %1362
+               OpLoopMerge %498 %497 None
+               OpBranchConditional %447 %448 %498
+        %448 = OpLabel
+        %451 = OpAccessChain %9 %47 %1228 %24
+        %452 = OpLoad %6 %451
+        %453 = OpSLessThanEqual %40 %165 %452
+               OpSelectionMerge %496 None
+               OpBranchConditional %453 %454 %475
+        %475 = OpLabel
+        %477 = OpAccessChain %9 %47 %1228 %30
+        %478 = OpLoad %6 %477
+        %479 = OpIEqual %40 %478 %28
+               OpSelectionMerge %495 None
+               OpBranchConditional %479 %480 %491
+        %491 = OpLabel
+        %494 = OpLoad %6 %477
+               OpBranch %497
+        %480 = OpLabel
+               OpStore %477 %1362
+        %490 = OpAccessChain %8 %47 %1362
+               OpStore %490 %1363
+               OpBranch %498
+        %495 = OpLabel
+               OpUnreachable
+        %454 = OpLabel
+        %456 = OpAccessChain %9 %47 %1228 %27
+        %457 = OpLoad %6 %456
+        %458 = OpIEqual %40 %457 %28
+               OpSelectionMerge %474 None
+               OpBranchConditional %458 %459 %470
+        %470 = OpLabel
+        %473 = OpLoad %6 %456
+               OpBranch %497
+        %459 = OpLabel
+               OpStore %456 %1362
+        %469 = OpAccessChain %8 %47 %1362
+               OpStore %469 %1363
+               OpBranch %498
+        %474 = OpLabel
+               OpUnreachable
+        %496 = OpLabel
+               OpUnreachable
+        %497 = OpLabel
+       %1345 = OpPhi %6 %473 %470 %494 %491
+               OpBranch %443
+        %498 = OpLabel
+       %1229 = OpPhi %40 %263 %443 %266 %459 %266 %480
+               OpSelectionMerge %500 None
+               OpBranchConditional %1229 %501 %500
+        %500 = OpLabel
+               OpBranch %501
+        %501 = OpLabel
+               OpSelectionMerge %578 None
+               OpSwitch %262 %519
+        %519 = OpLabel
+               OpBranch %520
+        %520 = OpLabel
+       %1236 = OpPhi %6 %24 %519 %1346 %574
+        %524 = OpSLessThanEqual %40 %1236 %1364
+               OpLoopMerge %575 %574 None
+               OpBranchConditional %524 %525 %575
+        %525 = OpLabel
+        %528 = OpAccessChain %9 %47 %1236 %24
+        %529 = OpLoad %6 %528
+        %530 = OpSLessThanEqual %40 %172 %529
+               OpSelectionMerge %573 None
+               OpBranchConditional %530 %531 %552
+        %552 = OpLabel
+        %554 = OpAccessChain %9 %47 %1236 %30
+        %555 = OpLoad %6 %554
+        %556 = OpIEqual %40 %555 %28
+               OpSelectionMerge %572 None
+               OpBranchConditional %556 %557 %568
+        %568 = OpLabel
+        %571 = OpLoad %6 %554
+               OpBranch %574
+        %557 = OpLabel
+               OpStore %554 %1364
+        %567 = OpAccessChain %8 %47 %1364
+               OpStore %567 %1365
+               OpBranch %575
+        %572 = OpLabel
+               OpUnreachable
+        %531 = OpLabel
+        %533 = OpAccessChain %9 %47 %1236 %27
+        %534 = OpLoad %6 %533
+        %535 = OpIEqual %40 %534 %28
+               OpSelectionMerge %551 None
+               OpBranchConditional %535 %536 %547
+        %547 = OpLabel
+        %550 = OpLoad %6 %533
+               OpBranch %574
+        %536 = OpLabel
+               OpStore %533 %1364
+        %546 = OpAccessChain %8 %47 %1364
+               OpStore %546 %1365
+               OpBranch %575
+        %551 = OpLabel
+               OpUnreachable
+        %573 = OpLabel
+               OpUnreachable
+        %574 = OpLabel
+       %1346 = OpPhi %6 %550 %547 %571 %568
+               OpBranch %520
+        %575 = OpLabel
+       %1237 = OpPhi %40 %263 %520 %266 %536 %266 %557
+               OpSelectionMerge %577 None
+               OpBranchConditional %1237 %578 %577
+        %577 = OpLabel
+               OpBranch %578
+        %578 = OpLabel
+               OpSelectionMerge %655 None
+               OpSwitch %262 %596
+        %596 = OpLabel
+               OpBranch %597
+        %597 = OpLabel
+       %1244 = OpPhi %6 %24 %596 %1347 %651
+        %601 = OpSLessThanEqual %40 %1244 %151
+               OpLoopMerge %652 %651 None
+               OpBranchConditional %601 %602 %652
+        %602 = OpLabel
+        %605 = OpAccessChain %9 %47 %1244 %24
+        %606 = OpLoad %6 %605
+        %607 = OpSLessThanEqual %40 %179 %606
+               OpSelectionMerge %650 None
+               OpBranchConditional %607 %608 %629
+        %629 = OpLabel
+        %631 = OpAccessChain %9 %47 %1244 %30
+        %632 = OpLoad %6 %631
+        %633 = OpIEqual %40 %632 %28
+               OpSelectionMerge %649 None
+               OpBranchConditional %633 %634 %645
+        %645 = OpLabel
+        %648 = OpLoad %6 %631
+               OpBranch %651
+        %634 = OpLabel
+               OpStore %631 %151
+        %644 = OpAccessChain %8 %47 %151
+               OpStore %644 %1366
+               OpBranch %652
+        %649 = OpLabel
+               OpUnreachable
+        %608 = OpLabel
+        %610 = OpAccessChain %9 %47 %1244 %27
+        %611 = OpLoad %6 %610
+        %612 = OpIEqual %40 %611 %28
+               OpSelectionMerge %628 None
+               OpBranchConditional %612 %613 %624
+        %624 = OpLabel
+        %627 = OpLoad %6 %610
+               OpBranch %651
+        %613 = OpLabel
+               OpStore %610 %151
+        %623 = OpAccessChain %8 %47 %151
+               OpStore %623 %1366
+               OpBranch %652
+        %628 = OpLabel
+               OpUnreachable
+        %650 = OpLabel
+               OpUnreachable
+        %651 = OpLabel
+       %1347 = OpPhi %6 %627 %624 %648 %645
+               OpBranch %597
+        %652 = OpLabel
+       %1245 = OpPhi %40 %263 %597 %266 %613 %266 %634
+               OpSelectionMerge %654 None
+               OpBranchConditional %1245 %655 %654
+        %654 = OpLabel
+               OpBranch %655
+        %655 = OpLabel
+               OpSelectionMerge %732 None
+               OpSwitch %262 %673
+        %673 = OpLabel
+               OpBranch %674
+        %674 = OpLabel
+       %1252 = OpPhi %6 %24 %673 %1348 %728
+        %678 = OpSLessThanEqual %40 %1252 %192
+               OpLoopMerge %729 %728 None
+               OpBranchConditional %678 %679 %729
+        %679 = OpLabel
+        %682 = OpAccessChain %9 %47 %1252 %24
+        %683 = OpLoad %6 %682
+        %684 = OpSLessThanEqual %40 %30 %683
+               OpSelectionMerge %727 None
+               OpBranchConditional %684 %685 %706
+        %706 = OpLabel
+        %708 = OpAccessChain %9 %47 %1252 %30
+        %709 = OpLoad %6 %708
+        %710 = OpIEqual %40 %709 %28
+               OpSelectionMerge %726 None
+               OpBranchConditional %710 %711 %722
+        %722 = OpLabel
+        %725 = OpLoad %6 %708
+               OpBranch %728
+        %711 = OpLabel
+               OpStore %708 %192
+        %721 = OpAccessChain %8 %47 %192
+               OpStore %721 %1367
+               OpBranch %729
+        %726 = OpLabel
+               OpUnreachable
+        %685 = OpLabel
+        %687 = OpAccessChain %9 %47 %1252 %27
+        %688 = OpLoad %6 %687
+        %689 = OpIEqual %40 %688 %28
+               OpSelectionMerge %705 None
+               OpBranchConditional %689 %690 %701
+        %701 = OpLabel
+        %704 = OpLoad %6 %687
+               OpBranch %728
+        %690 = OpLabel
+               OpStore %687 %192
+        %700 = OpAccessChain %8 %47 %192
+               OpStore %700 %1367
+               OpBranch %729
+        %705 = OpLabel
+               OpUnreachable
+        %727 = OpLabel
+               OpUnreachable
+        %728 = OpLabel
+       %1348 = OpPhi %6 %704 %701 %725 %722
+               OpBranch %674
+        %729 = OpLabel
+       %1253 = OpPhi %40 %263 %674 %266 %690 %266 %711
+               OpSelectionMerge %731 None
+               OpBranchConditional %1253 %732 %731
+        %731 = OpLabel
+               OpBranch %732
+        %732 = OpLabel
+               OpSelectionMerge %809 None
+               OpSwitch %262 %750
+        %750 = OpLabel
+               OpBranch %751
+        %751 = OpLabel
+       %1260 = OpPhi %6 %24 %750 %1349 %805
+        %755 = OpSLessThanEqual %40 %1260 %172
+               OpLoopMerge %806 %805 None
+               OpBranchConditional %755 %756 %806
+        %756 = OpLabel
+        %759 = OpAccessChain %9 %47 %1260 %24
+        %760 = OpLoad %6 %759
+        %761 = OpSLessThanEqual %40 %192 %760
+               OpSelectionMerge %804 None
+               OpBranchConditional %761 %762 %783
+        %783 = OpLabel
+        %785 = OpAccessChain %9 %47 %1260 %30
+        %786 = OpLoad %6 %785
+        %787 = OpIEqual %40 %786 %28
+               OpSelectionMerge %803 None
+               OpBranchConditional %787 %788 %799
+        %799 = OpLabel
+        %802 = OpLoad %6 %785
+               OpBranch %805
+        %788 = OpLabel
+               OpStore %785 %172
+        %798 = OpAccessChain %8 %47 %172
+               OpStore %798 %1368
+               OpBranch %806
+        %803 = OpLabel
+               OpUnreachable
+        %762 = OpLabel
+        %764 = OpAccessChain %9 %47 %1260 %27
+        %765 = OpLoad %6 %764
+        %766 = OpIEqual %40 %765 %28
+               OpSelectionMerge %782 None
+               OpBranchConditional %766 %767 %778
+        %778 = OpLabel
+        %781 = OpLoad %6 %764
+               OpBranch %805
+        %767 = OpLabel
+               OpStore %764 %172
+        %777 = OpAccessChain %8 %47 %172
+               OpStore %777 %1368
+               OpBranch %806
+        %782 = OpLabel
+               OpUnreachable
+        %804 = OpLabel
+               OpUnreachable
+        %805 = OpLabel
+       %1349 = OpPhi %6 %781 %778 %802 %799
+               OpBranch %751
+        %806 = OpLabel
+       %1261 = OpPhi %40 %263 %751 %266 %767 %266 %788
+               OpSelectionMerge %808 None
+               OpBranchConditional %1261 %809 %808
+        %808 = OpLabel
+               OpBranch %809
+        %809 = OpLabel
+               OpSelectionMerge %886 None
+               OpSwitch %262 %827
+        %827 = OpLabel
+               OpBranch %828
+        %828 = OpLabel
+       %1268 = OpPhi %6 %24 %827 %1350 %882
+        %832 = OpSLessThanEqual %40 %1268 %179
+               OpLoopMerge %883 %882 None
+               OpBranchConditional %832 %833 %883
+        %833 = OpLabel
+        %836 = OpAccessChain %9 %47 %1268 %24
+        %837 = OpLoad %6 %836
+        %838 = OpSLessThanEqual %40 %199 %837
+               OpSelectionMerge %881 None
+               OpBranchConditional %838 %839 %860
+        %860 = OpLabel
+        %862 = OpAccessChain %9 %47 %1268 %30
+        %863 = OpLoad %6 %862
+        %864 = OpIEqual %40 %863 %28
+               OpSelectionMerge %880 None
+               OpBranchConditional %864 %865 %876
+        %876 = OpLabel
+        %879 = OpLoad %6 %862
+               OpBranch %882
+        %865 = OpLabel
+               OpStore %862 %179
+        %875 = OpAccessChain %8 %47 %179
+               OpStore %875 %1369
+               OpBranch %883
+        %880 = OpLabel
+               OpUnreachable
+        %839 = OpLabel
+        %841 = OpAccessChain %9 %47 %1268 %27
+        %842 = OpLoad %6 %841
+        %843 = OpIEqual %40 %842 %28
+               OpSelectionMerge %859 None
+               OpBranchConditional %843 %844 %855
+        %855 = OpLabel
+        %858 = OpLoad %6 %841
+               OpBranch %882
+        %844 = OpLabel
+               OpStore %841 %179
+        %854 = OpAccessChain %8 %47 %179
+               OpStore %854 %1369
+               OpBranch %883
+        %859 = OpLabel
+               OpUnreachable
+        %881 = OpLabel
+               OpUnreachable
+        %882 = OpLabel
+       %1350 = OpPhi %6 %858 %855 %879 %876
+               OpBranch %828
+        %883 = OpLabel
+       %1269 = OpPhi %40 %263 %828 %266 %844 %266 %865
+               OpSelectionMerge %885 None
+               OpBranchConditional %1269 %886 %885
+        %885 = OpLabel
+               OpBranch %886
+        %886 = OpLabel
+               OpSelectionMerge %963 None
+               OpSwitch %262 %904
+        %904 = OpLabel
+               OpBranch %905
+        %905 = OpLabel
+       %1276 = OpPhi %6 %24 %904 %1351 %959
+        %909 = OpSLessThanEqual %40 %1276 %141
+               OpLoopMerge %960 %959 None
+               OpBranchConditional %909 %910 %960
+        %910 = OpLabel
+        %913 = OpAccessChain %9 %47 %1276 %24
+        %914 = OpLoad %6 %913
+        %915 = OpSLessThanEqual %40 %206 %914
+               OpSelectionMerge %958 None
+               OpBranchConditional %915 %916 %937
+        %937 = OpLabel
+        %939 = OpAccessChain %9 %47 %1276 %30
+        %940 = OpLoad %6 %939
+        %941 = OpIEqual %40 %940 %28
+               OpSelectionMerge %957 None
+               OpBranchConditional %941 %942 %953
+        %953 = OpLabel
+        %956 = OpLoad %6 %939
+               OpBranch %959
+        %942 = OpLabel
+               OpStore %939 %141
+        %952 = OpAccessChain %8 %47 %141
+               OpStore %952 %1370
+               OpBranch %960
+        %957 = OpLabel
+               OpUnreachable
+        %916 = OpLabel
+        %918 = OpAccessChain %9 %47 %1276 %27
+        %919 = OpLoad %6 %918
+        %920 = OpIEqual %40 %919 %28
+               OpSelectionMerge %936 None
+               OpBranchConditional %920 %921 %932
+        %932 = OpLabel
+        %935 = OpLoad %6 %918
+               OpBranch %959
+        %921 = OpLabel
+               OpStore %918 %141
+        %931 = OpAccessChain %8 %47 %141
+               OpStore %931 %1370
+               OpBranch %960
+        %936 = OpLabel
+               OpUnreachable
+        %958 = OpLabel
+               OpUnreachable
+        %959 = OpLabel
+       %1351 = OpPhi %6 %935 %932 %956 %953
+               OpBranch %905
+        %960 = OpLabel
+       %1277 = OpPhi %40 %263 %905 %266 %921 %266 %942
+               OpSelectionMerge %962 None
+               OpBranchConditional %1277 %963 %962
+        %962 = OpLabel
+               OpBranch %963
+        %963 = OpLabel
+               OpBranch %213
+        %213 = OpLabel
+       %1290 = OpPhi %6 %1318 %963 %1287 %216
+       %1281 = OpPhi %6 %24 %963 %1352 %216
+       %1280 = OpPhi %6 %24 %963 %246 %216
+        %220 = OpSLessThan %40 %1280 %219
+               OpLoopMerge %215 %216 None
+               OpBranchConditional %220 %214 %215
+        %214 = OpLabel
+               OpSelectionMerge %1013 None
+               OpSwitch %262 %981
+        %981 = OpLabel
+               OpBranch %982
+        %982 = OpLabel
+       %1282 = OpPhi %6 %24 %981 %1371 %1009
+        %985 = OpINotEqual %40 %1282 %28
+               OpLoopMerge %1010 %1009 None
+               OpBranchConditional %985 %986 %1010
+        %986 = OpLabel
+        %988 = OpAccessChain %8 %47 %1282
+        %989 = OpLoad %7 %988
+       %1019 = OpCompositeExtract %6 %989 0
+       %1020 = OpCompositeExtract %6 %989 1
+       %1021 = OpCompositeExtract %6 %989 2
+        %993 = OpIEqual %40 %1019 %1280
+               OpSelectionMerge %996 None
+               OpBranchConditional %993 %994 %996
+        %994 = OpLabel
+               OpBranch %1010
+        %996 = OpLabel
+       %1000 = OpSGreaterThan %40 %1280 %1019
+       %1371 = OpSelect %6 %1000 %1021 %1020
+               OpBranch %1009
+       %1009 = OpLabel
+               OpBranch %982
+       %1010 = OpLabel
+       %1288 = OpPhi %6 %1290 %982 %1280 %994
+       %1284 = OpPhi %40 %263 %982 %266 %994
+               OpSelectionMerge %1012 None
+               OpBranchConditional %1284 %1013 %1012
+       %1012 = OpLabel
+               OpBranch %1013
+       %1013 = OpLabel
+       %1287 = OpPhi %6 %1288 %1010 %28 %1012
+               OpSelectionMerge %228 None
+               OpSwitch %1280 %227 9 %226 5 %226 12 %226 15 %226 7 %226 8 %226 2 %226 6 %226 17 %226 13 %226
+        %226 = OpLabel
+        %231 = OpIEqual %40 %1287 %1280
+               OpSelectionMerge %233 None
+               OpBranchConditional %231 %232 %233
+        %232 = OpLabel
+        %235 = OpIAdd %6 %1281 %27
+               OpBranch %233
+        %233 = OpLabel
+       %1354 = OpPhi %6 %1281 %226 %235 %232
+               OpBranch %228
+        %227 = OpLabel
+        %238 = OpIEqual %40 %1287 %28
+               OpSelectionMerge %240 None
+               OpBranchConditional %238 %239 %240
+        %239 = OpLabel
+        %242 = OpIAdd %6 %1281 %27
+               OpBranch %240
+        %240 = OpLabel
+       %1353 = OpPhi %6 %1281 %227 %242 %239
+               OpBranch %228
+        %228 = OpLabel
+       %1352 = OpPhi %6 %1353 %240 %1354 %233
+               OpBranch %216
+        %216 = OpLabel
+        %246 = OpIAdd %6 %1280 %27
+               OpBranch %213
+        %215 = OpLabel
+        %248 = OpIEqual %40 %1281 %219
+               OpSelectionMerge %250 None
+               OpBranchConditional %248 %249 %258
+        %258 = OpLabel
+               OpStore %254 %259
+               OpBranch %250
+        %249 = OpLabel
+               OpStore %254 %257
+               OpBranch %250
+        %250 = OpLabel
+               OpReturn
+               OpFunctionEnd
+END
+
+
+BUFFER reference_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics reference_pipeline
+  ATTACH reference_vertex_shader
+  ATTACH reference_fragment_shader
+  FRAMEBUFFER_SIZE 256 256
+  BIND BUFFER reference_framebuffer AS color LOCATION 0
+END
+CLEAR_COLOR reference_pipeline 0 0 0 255
+
+CLEAR reference_pipeline
+RUN reference_pipeline DRAW_RECT POS 0 0 SIZE 256 256
+
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+# variant_fragment_shader is derived from the following GLSL:
+# #version 320 es
+# precision highp float;
+#
+# precision highp int;
+#
+# layout(set = 0, binding = 0) uniform buf0
+# {
+#     vec2 injectionSwitch;
+# };
+# layout(location = 0) out vec4 _GLF_color;
+#
+# struct BST
+# {
+#     int data;
+#     int leftIndex;
+#     int rightIndex;
+# };
+#
+# BST tree[10];
+#
+# void makeTreeNode(inout BST tree, int data)
+# {
+#     tree.data = data;
+#     tree.leftIndex = -1;
+#     tree.rightIndex = -1;
+# }
+# void insert(int treeIndex, int data)
+# {
+#     int baseIndex = 0;
+#     while (baseIndex <= treeIndex)
+#     {
+#         if (data <= tree[baseIndex].data)
+#         {
+#             if (tree[baseIndex].leftIndex == -1)
+#             {
+#                 // Always false.
+#                 if ((injectionSwitch.y < injectionSwitch.x))
+#                 {
+#                     do
+#                     {
+#                         // This is never reached.
+#                         discard;
+#                     }
+#                     // Always false.
+#                     while (injectionSwitch.y < injectionSwitch.x);
+#                 }
+#                 tree[baseIndex].leftIndex = treeIndex;
+#                 makeTreeNode(tree[treeIndex], data);
+#                 // Iterates once.
+#                 for (int int_i = 0; int_i < int((injectionSwitch.y)); int_i++)
+#                 {
+#                     return;
+#                 }
+#             }
+#             else
+#             {
+#                 baseIndex = tree[baseIndex].leftIndex;
+#                 continue;
+#             }
+#         }
+#         else
+#         {
+#             if (tree[baseIndex].rightIndex == -1)
+#             {
+#                 tree[baseIndex].rightIndex = treeIndex;
+#                 makeTreeNode(tree[treeIndex], data);
+#                 return;
+#             }
+#             else
+#             {
+#                 baseIndex = tree[baseIndex].rightIndex;
+#                 continue;
+#             }
+#         }
+#     }
+# }
+# int search(int target)
+# {
+#     BST currentNode;
+#     int index = 0;
+#     while (index != -1)
+#     {
+#         currentNode = tree[index];
+#         if (currentNode.data == target)
+#         {
+#             return target;
+#         }
+#         index = target > currentNode.data ? currentNode.rightIndex : currentNode.leftIndex;
+#     }
+#     return -1;
+# }
+# void main()
+# {
+#     int treeIndex = 0;
+#     makeTreeNode(tree[0], 9);
+#     treeIndex++;
+#     insert(treeIndex, 5);
+#     treeIndex++;
+#     // gl_FragCoord.y < 0.0 == false
+#     // Iterates once,
+#     for (int int_i = 0; (gl_FragCoord.y < 0.0) || (int_i != int(injectionSwitch.y)); int_i++)
+#     {
+#         insert(treeIndex, 12);
+#     }
+#     treeIndex++;
+#     insert(treeIndex, 15);
+#     treeIndex++;
+#     insert(treeIndex, 7);
+#     treeIndex++;
+#     insert(treeIndex, 8);
+#     treeIndex++;
+#     insert(treeIndex, 2);
+#     treeIndex++;
+#     insert(treeIndex, 6);
+#     treeIndex++;
+#     insert(treeIndex, 17);
+#     treeIndex++;
+#     insert(treeIndex, 13);
+#     int count = 0;
+#     for (int i = 0; i < 20; i++)
+#     {
+#         int result = search(i);
+#         switch (i)
+#         {
+#         case 9:
+#         case 5:
+#         case 12:
+#         case 15:
+#         case 7:
+#         case 8:
+#         case 2:
+#         case 6:
+#         case 17:
+#         case 13:
+#             if (result == i)
+#             {
+#                 count++;
+#             }
+#             break;
+#         default:
+#             if (result == -1)
+#             {
+#                 count++;
+#             }
+#             break;
+#         }
+#     }
+#     if (count == 20)
+#     {
+#         _GLF_color = vec4(1.0, 0.0, 0.0, 1.0);
+#     }
+#     else
+#     {
+#         _GLF_color = vec4(0.0, 0.0, 1.0, 1.0);
+#     }
+# }
+SHADER fragment variant_fragment_shader SPIRV-ASM
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 10
+; Bound: 1740
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %204 %315
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 320
+               OpName %4 "main"
+               OpName %7 "BST"
+               OpMemberName %7 0 "data"
+               OpMemberName %7 1 "leftIndex"
+               OpMemberName %7 2 "rightIndex"
+               OpName %47 "tree"
+               OpName %63 "buf0"
+               OpMemberName %63 0 "injectionSwitch"
+               OpName %65 ""
+               OpName %204 "gl_FragCoord"
+               OpName %315 "_GLF_color"
+               OpMemberDecorate %63 0 Offset 0
+               OpDecorate %63 Block
+               OpDecorate %65 DescriptorSet 0
+               OpDecorate %65 Binding 0
+               OpDecorate %204 BuiltIn FragCoord
+               OpDecorate %315 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeInt 32 1
+          %7 = OpTypeStruct %6 %6 %6
+          %8 = OpTypePointer Function %7
+          %9 = OpTypePointer Function %6
+         %24 = OpConstant %6 0
+         %27 = OpConstant %6 1
+         %28 = OpConstant %6 -1
+         %30 = OpConstant %6 2
+         %40 = OpTypeBool
+         %43 = OpTypeInt 32 0
+         %44 = OpConstant %43 10
+         %45 = OpTypeArray %7 %44
+         %61 = OpTypeFloat 32
+         %62 = OpTypeVector %61 2
+         %63 = OpTypeStruct %62
+         %64 = OpTypePointer Uniform %63
+         %65 = OpVariable %64 Uniform
+         %66 = OpConstant %43 1
+         %67 = OpTypePointer Uniform %61
+         %70 = OpConstant %43 0
+        %179 = OpConstant %6 9
+        %189 = OpConstant %6 5
+        %202 = OpTypeVector %61 4
+        %203 = OpTypePointer Input %202
+        %204 = OpVariable %203 Input
+        %205 = OpTypePointer Input %61
+        %208 = OpConstant %61 0
+        %219 = OpConstant %6 12
+        %228 = OpConstant %6 15
+        %235 = OpConstant %6 7
+        %242 = OpConstant %6 8
+        %255 = OpConstant %6 6
+        %262 = OpConstant %6 17
+        %269 = OpConstant %6 13
+        %282 = OpConstant %6 20
+        %314 = OpTypePointer Output %202
+        %315 = OpVariable %314 Output
+        %316 = OpConstant %61 1
+        %317 = OpConstantComposite %202 %316 %208 %208 %316
+        %319 = OpConstantComposite %202 %208 %208 %316 %316
+        %322 = OpConstantFalse %40
+        %325 = OpConstantTrue %40
+       %1301 = OpTypePointer Function %45
+       %1620 = OpUndef %6
+       %1727 = OpConstantComposite %7 %179 %28 %28
+       %1728 = OpConstantComposite %7 %189 %28 %28
+       %1729 = OpConstant %6 3
+       %1730 = OpConstantComposite %7 %219 %28 %28
+       %1731 = OpConstantComposite %7 %228 %28 %28
+       %1732 = OpConstant %6 4
+       %1733 = OpConstantComposite %7 %235 %28 %28
+       %1734 = OpConstantComposite %7 %242 %28 %28
+       %1735 = OpConstantComposite %7 %30 %28 %28
+       %1736 = OpConstantComposite %7 %255 %28 %28
+       %1737 = OpConstantComposite %7 %262 %28 %28
+       %1738 = OpConstantComposite %7 %269 %28 %28
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+         %47 = OpVariable %1301 Function
+        %186 = OpAccessChain %8 %47 %24
+               OpStore %186 %1727
+               OpSelectionMerge %432 None
+               OpSwitch %70 %350
+        %350 = OpLabel
+               OpBranch %351
+        %351 = OpLabel
+       %1501 = OpPhi %40 %322 %350 %1674 %428
+       %1498 = OpPhi %6 %24 %350 %1671 %428
+        %355 = OpSLessThanEqual %40 %1498 %27
+               OpLoopMerge %429 %428 None
+               OpBranchConditional %355 %356 %429
+        %356 = OpLabel
+        %359 = OpAccessChain %9 %47 %1498 %24
+        %360 = OpLoad %6 %359
+        %361 = OpSLessThanEqual %40 %189 %360
+               OpSelectionMerge %427 None
+               OpBranchConditional %361 %362 %406
+        %406 = OpLabel
+        %408 = OpAccessChain %9 %47 %1498 %30
+        %409 = OpLoad %6 %408
+        %410 = OpIEqual %40 %409 %28
+               OpSelectionMerge %426 None
+               OpBranchConditional %410 %411 %422
+        %422 = OpLabel
+        %425 = OpLoad %6 %408
+               OpBranch %428
+        %411 = OpLabel
+               OpStore %408 %27
+        %421 = OpAccessChain %8 %47 %27
+               OpStore %421 %1728
+               OpBranch %429
+        %426 = OpLabel
+               OpUnreachable
+        %362 = OpLabel
+        %364 = OpAccessChain %9 %47 %1498 %27
+        %365 = OpLoad %6 %364
+        %366 = OpIEqual %40 %365 %28
+               OpSelectionMerge %405 None
+               OpBranchConditional %366 %367 %401
+        %401 = OpLabel
+        %404 = OpLoad %6 %364
+               OpBranch %428
+        %367 = OpLabel
+        %368 = OpAccessChain %67 %65 %24 %66
+        %369 = OpLoad %61 %368
+        %370 = OpAccessChain %67 %65 %24 %70
+        %371 = OpLoad %61 %370
+        %372 = OpFOrdLessThan %40 %369 %371
+               OpSelectionMerge %378 None
+               OpBranchConditional %372 %373 %378
+        %373 = OpLabel
+               OpBranch %374
+        %374 = OpLabel
+               OpLoopMerge %377 %376 None
+               OpBranch %375
+        %375 = OpLabel
+               OpKill
+        %376 = OpLabel
+               OpBranch %374
+        %377 = OpLabel
+               OpUnreachable
+        %378 = OpLabel
+               OpStore %364 %27
+        %388 = OpAccessChain %8 %47 %27
+               OpStore %388 %1728
+               OpBranch %389
+        %389 = OpLabel
+        %394 = OpConvertFToS %6 %369
+        %395 = OpSLessThan %40 %24 %394
+               OpLoopMerge %398 %397 None
+               OpBranchConditional %395 %396 %398
+        %396 = OpLabel
+               OpBranch %398
+        %397 = OpLabel
+               OpBranch %389
+        %398 = OpLabel
+       %1499 = OpPhi %40 %1501 %389 %325 %396
+               OpSelectionMerge %400 None
+               OpBranchConditional %1499 %429 %400
+        %400 = OpLabel
+               OpBranch %405
+        %405 = OpLabel
+               OpBranch %427
+        %427 = OpLabel
+               OpBranch %428
+        %428 = OpLabel
+       %1674 = OpPhi %40 %1501 %401 %1501 %422 %1499 %427
+       %1671 = OpPhi %6 %404 %401 %425 %422 %1498 %427
+               OpBranch %351
+        %429 = OpLabel
+       %1502 = OpPhi %40 %1501 %351 %1499 %398 %325 %411
+               OpSelectionMerge %431 None
+               OpBranchConditional %1502 %432 %431
+        %431 = OpLabel
+               OpBranch %432
+        %432 = OpLabel
+               OpBranch %197
+        %197 = OpLabel
+       %1509 = OpPhi %6 %24 %432 %225 %200
+               OpLoopMerge %199 %200 None
+               OpBranch %201
+        %201 = OpLabel
+        %206 = OpAccessChain %205 %204 %66
+        %207 = OpLoad %61 %206
+        %209 = OpFOrdLessThan %40 %207 %208
+        %210 = OpLogicalNot %40 %209
+               OpSelectionMerge %212 None
+               OpBranchConditional %210 %211 %212
+        %211 = OpLabel
+        %214 = OpAccessChain %67 %65 %24 %66
+        %215 = OpLoad %61 %214
+        %216 = OpConvertFToS %6 %215
+        %217 = OpINotEqual %40 %1509 %216
+               OpBranch %212
+        %212 = OpLabel
+        %218 = OpPhi %40 %209 %201 %217 %211
+               OpBranchConditional %218 %198 %199
+        %198 = OpLabel
+               OpSelectionMerge %534 None
+               OpSwitch %70 %452
+        %452 = OpLabel
+               OpBranch %453
+        %453 = OpLabel
+       %1662 = OpPhi %40 %322 %452 %1726 %530
+       %1659 = OpPhi %6 %24 %452 %1723 %530
+        %457 = OpSLessThanEqual %40 %1659 %30
+               OpLoopMerge %531 %530 None
+               OpBranchConditional %457 %458 %531
+        %458 = OpLabel
+        %461 = OpAccessChain %9 %47 %1659 %24
+        %462 = OpLoad %6 %461
+        %463 = OpSLessThanEqual %40 %219 %462
+               OpSelectionMerge %529 None
+               OpBranchConditional %463 %464 %508
+        %508 = OpLabel
+        %510 = OpAccessChain %9 %47 %1659 %30
+        %511 = OpLoad %6 %510
+        %512 = OpIEqual %40 %511 %28
+               OpSelectionMerge %528 None
+               OpBranchConditional %512 %513 %524
+        %524 = OpLabel
+        %527 = OpLoad %6 %510
+               OpBranch %530
+        %513 = OpLabel
+               OpStore %510 %30
+        %523 = OpAccessChain %8 %47 %30
+               OpStore %523 %1730
+               OpBranch %531
+        %528 = OpLabel
+               OpUnreachable
+        %464 = OpLabel
+        %466 = OpAccessChain %9 %47 %1659 %27
+        %467 = OpLoad %6 %466
+        %468 = OpIEqual %40 %467 %28
+               OpSelectionMerge %507 None
+               OpBranchConditional %468 %469 %503
+        %503 = OpLabel
+        %506 = OpLoad %6 %466
+               OpBranch %530
+        %469 = OpLabel
+        %470 = OpAccessChain %67 %65 %24 %66
+        %471 = OpLoad %61 %470
+        %472 = OpAccessChain %67 %65 %24 %70
+        %473 = OpLoad %61 %472
+        %474 = OpFOrdLessThan %40 %471 %473
+               OpSelectionMerge %480 None
+               OpBranchConditional %474 %475 %480
+        %475 = OpLabel
+               OpBranch %476
+        %476 = OpLabel
+               OpLoopMerge %479 %478 None
+               OpBranch %477
+        %477 = OpLabel
+               OpKill
+        %478 = OpLabel
+               OpBranch %476
+        %479 = OpLabel
+               OpUnreachable
+        %480 = OpLabel
+               OpStore %466 %30
+        %490 = OpAccessChain %8 %47 %30
+               OpStore %490 %1730
+               OpBranch %491
+        %491 = OpLabel
+        %496 = OpConvertFToS %6 %471
+        %497 = OpSLessThan %40 %24 %496
+               OpLoopMerge %500 %499 None
+               OpBranchConditional %497 %498 %500
+        %498 = OpLabel
+               OpBranch %500
+        %499 = OpLabel
+               OpBranch %491
+        %500 = OpLabel
+       %1660 = OpPhi %40 %1662 %491 %325 %498
+               OpSelectionMerge %502 None
+               OpBranchConditional %1660 %531 %502
+        %502 = OpLabel
+               OpBranch %507
+        %507 = OpLabel
+               OpBranch %529
+        %529 = OpLabel
+               OpBranch %530
+        %530 = OpLabel
+       %1726 = OpPhi %40 %1662 %503 %1662 %524 %1660 %529
+       %1723 = OpPhi %6 %506 %503 %527 %524 %1659 %529
+               OpBranch %453
+        %531 = OpLabel
+       %1663 = OpPhi %40 %1662 %453 %1660 %500 %325 %513
+               OpSelectionMerge %533 None
+               OpBranchConditional %1663 %534 %533
+        %533 = OpLabel
+               OpBranch %534
+        %534 = OpLabel
+               OpBranch %200
+        %200 = OpLabel
+        %225 = OpIAdd %6 %1509 %27
+               OpBranch %197
+        %199 = OpLabel
+               OpSelectionMerge %636 None
+               OpSwitch %70 %554
+        %554 = OpLabel
+               OpBranch %555
+        %555 = OpLabel
+       %1515 = OpPhi %40 %322 %554 %1685 %632
+       %1512 = OpPhi %6 %24 %554 %1682 %632
+        %559 = OpSLessThanEqual %40 %1512 %1729
+               OpLoopMerge %633 %632 None
+               OpBranchConditional %559 %560 %633
+        %560 = OpLabel
+        %563 = OpAccessChain %9 %47 %1512 %24
+        %564 = OpLoad %6 %563
+        %565 = OpSLessThanEqual %40 %228 %564
+               OpSelectionMerge %631 None
+               OpBranchConditional %565 %566 %610
+        %610 = OpLabel
+        %612 = OpAccessChain %9 %47 %1512 %30
+        %613 = OpLoad %6 %612
+        %614 = OpIEqual %40 %613 %28
+               OpSelectionMerge %630 None
+               OpBranchConditional %614 %615 %626
+        %626 = OpLabel
+        %629 = OpLoad %6 %612
+               OpBranch %632
+        %615 = OpLabel
+               OpStore %612 %1729
+        %625 = OpAccessChain %8 %47 %1729
+               OpStore %625 %1731
+               OpBranch %633
+        %630 = OpLabel
+               OpUnreachable
+        %566 = OpLabel
+        %568 = OpAccessChain %9 %47 %1512 %27
+        %569 = OpLoad %6 %568
+        %570 = OpIEqual %40 %569 %28
+               OpSelectionMerge %609 None
+               OpBranchConditional %570 %571 %605
+        %605 = OpLabel
+        %608 = OpLoad %6 %568
+               OpBranch %632
+        %571 = OpLabel
+        %572 = OpAccessChain %67 %65 %24 %66
+        %573 = OpLoad %61 %572
+        %574 = OpAccessChain %67 %65 %24 %70
+        %575 = OpLoad %61 %574
+        %576 = OpFOrdLessThan %40 %573 %575
+               OpSelectionMerge %582 None
+               OpBranchConditional %576 %577 %582
+        %577 = OpLabel
+               OpBranch %578
+        %578 = OpLabel
+               OpLoopMerge %581 %580 None
+               OpBranch %579
+        %579 = OpLabel
+               OpKill
+        %580 = OpLabel
+               OpBranch %578
+        %581 = OpLabel
+               OpUnreachable
+        %582 = OpLabel
+               OpStore %568 %1729
+        %592 = OpAccessChain %8 %47 %1729
+               OpStore %592 %1731
+               OpBranch %593
+        %593 = OpLabel
+        %598 = OpConvertFToS %6 %573
+        %599 = OpSLessThan %40 %24 %598
+               OpLoopMerge %602 %601 None
+               OpBranchConditional %599 %600 %602
+        %600 = OpLabel
+               OpBranch %602
+        %601 = OpLabel
+               OpBranch %593
+        %602 = OpLabel
+       %1513 = OpPhi %40 %1515 %593 %325 %600
+               OpSelectionMerge %604 None
+               OpBranchConditional %1513 %633 %604
+        %604 = OpLabel
+               OpBranch %609
+        %609 = OpLabel
+               OpBranch %631
+        %631 = OpLabel
+               OpBranch %632
+        %632 = OpLabel
+       %1685 = OpPhi %40 %1515 %605 %1515 %626 %1513 %631
+       %1682 = OpPhi %6 %608 %605 %629 %626 %1512 %631
+               OpBranch %555
+        %633 = OpLabel
+       %1516 = OpPhi %40 %1515 %555 %1513 %602 %325 %615
+               OpSelectionMerge %635 None
+               OpBranchConditional %1516 %636 %635
+        %635 = OpLabel
+               OpBranch %636
+        %636 = OpLabel
+               OpSelectionMerge %738 None
+               OpSwitch %70 %656
+        %656 = OpLabel
+               OpBranch %657
+        %657 = OpLabel
+       %1526 = OpPhi %40 %322 %656 %1689 %734
+       %1523 = OpPhi %6 %24 %656 %1686 %734
+        %661 = OpSLessThanEqual %40 %1523 %1732
+               OpLoopMerge %735 %734 None
+               OpBranchConditional %661 %662 %735
+        %662 = OpLabel
+        %665 = OpAccessChain %9 %47 %1523 %24
+        %666 = OpLoad %6 %665
+        %667 = OpSLessThanEqual %40 %235 %666
+               OpSelectionMerge %733 None
+               OpBranchConditional %667 %668 %712
+        %712 = OpLabel
+        %714 = OpAccessChain %9 %47 %1523 %30
+        %715 = OpLoad %6 %714
+        %716 = OpIEqual %40 %715 %28
+               OpSelectionMerge %732 None
+               OpBranchConditional %716 %717 %728
+        %728 = OpLabel
+        %731 = OpLoad %6 %714
+               OpBranch %734
+        %717 = OpLabel
+               OpStore %714 %1732
+        %727 = OpAccessChain %8 %47 %1732
+               OpStore %727 %1733
+               OpBranch %735
+        %732 = OpLabel
+               OpUnreachable
+        %668 = OpLabel
+        %670 = OpAccessChain %9 %47 %1523 %27
+        %671 = OpLoad %6 %670
+        %672 = OpIEqual %40 %671 %28
+               OpSelectionMerge %711 None
+               OpBranchConditional %672 %673 %707
+        %707 = OpLabel
+        %710 = OpLoad %6 %670
+               OpBranch %734
+        %673 = OpLabel
+        %674 = OpAccessChain %67 %65 %24 %66
+        %675 = OpLoad %61 %674
+        %676 = OpAccessChain %67 %65 %24 %70
+        %677 = OpLoad %61 %676
+        %678 = OpFOrdLessThan %40 %675 %677
+               OpSelectionMerge %684 None
+               OpBranchConditional %678 %679 %684
+        %679 = OpLabel
+               OpBranch %680
+        %680 = OpLabel
+               OpLoopMerge %683 %682 None
+               OpBranch %681
+        %681 = OpLabel
+               OpKill
+        %682 = OpLabel
+               OpBranch %680
+        %683 = OpLabel
+               OpUnreachable
+        %684 = OpLabel
+               OpStore %670 %1732
+        %694 = OpAccessChain %8 %47 %1732
+               OpStore %694 %1733
+               OpBranch %695
+        %695 = OpLabel
+        %700 = OpConvertFToS %6 %675
+        %701 = OpSLessThan %40 %24 %700
+               OpLoopMerge %704 %703 None
+               OpBranchConditional %701 %702 %704
+        %702 = OpLabel
+               OpBranch %704
+        %703 = OpLabel
+               OpBranch %695
+        %704 = OpLabel
+       %1524 = OpPhi %40 %1526 %695 %325 %702
+               OpSelectionMerge %706 None
+               OpBranchConditional %1524 %735 %706
+        %706 = OpLabel
+               OpBranch %711
+        %711 = OpLabel
+               OpBranch %733
+        %733 = OpLabel
+               OpBranch %734
+        %734 = OpLabel
+       %1689 = OpPhi %40 %1526 %707 %1526 %728 %1524 %733
+       %1686 = OpPhi %6 %710 %707 %731 %728 %1523 %733
+               OpBranch %657
+        %735 = OpLabel
+       %1527 = OpPhi %40 %1526 %657 %1524 %704 %325 %717
+               OpSelectionMerge %737 None
+               OpBranchConditional %1527 %738 %737
+        %737 = OpLabel
+               OpBranch %738
+        %738 = OpLabel
+               OpSelectionMerge %840 None
+               OpSwitch %70 %758
+        %758 = OpLabel
+               OpBranch %759
+        %759 = OpLabel
+       %1537 = OpPhi %40 %322 %758 %1693 %836
+       %1534 = OpPhi %6 %24 %758 %1690 %836
+        %763 = OpSLessThanEqual %40 %1534 %189
+               OpLoopMerge %837 %836 None
+               OpBranchConditional %763 %764 %837
+        %764 = OpLabel
+        %767 = OpAccessChain %9 %47 %1534 %24
+        %768 = OpLoad %6 %767
+        %769 = OpSLessThanEqual %40 %242 %768
+               OpSelectionMerge %835 None
+               OpBranchConditional %769 %770 %814
+        %814 = OpLabel
+        %816 = OpAccessChain %9 %47 %1534 %30
+        %817 = OpLoad %6 %816
+        %818 = OpIEqual %40 %817 %28
+               OpSelectionMerge %834 None
+               OpBranchConditional %818 %819 %830
+        %830 = OpLabel
+        %833 = OpLoad %6 %816
+               OpBranch %836
+        %819 = OpLabel
+               OpStore %816 %189
+        %829 = OpAccessChain %8 %47 %189
+               OpStore %829 %1734
+               OpBranch %837
+        %834 = OpLabel
+               OpUnreachable
+        %770 = OpLabel
+        %772 = OpAccessChain %9 %47 %1534 %27
+        %773 = OpLoad %6 %772
+        %774 = OpIEqual %40 %773 %28
+               OpSelectionMerge %813 None
+               OpBranchConditional %774 %775 %809
+        %809 = OpLabel
+        %812 = OpLoad %6 %772
+               OpBranch %836
+        %775 = OpLabel
+        %776 = OpAccessChain %67 %65 %24 %66
+        %777 = OpLoad %61 %776
+        %778 = OpAccessChain %67 %65 %24 %70
+        %779 = OpLoad %61 %778
+        %780 = OpFOrdLessThan %40 %777 %779
+               OpSelectionMerge %786 None
+               OpBranchConditional %780 %781 %786
+        %781 = OpLabel
+               OpBranch %782
+        %782 = OpLabel
+               OpLoopMerge %785 %784 None
+               OpBranch %783
+        %783 = OpLabel
+               OpKill
+        %784 = OpLabel
+               OpBranch %782
+        %785 = OpLabel
+               OpUnreachable
+        %786 = OpLabel
+               OpStore %772 %189
+        %796 = OpAccessChain %8 %47 %189
+               OpStore %796 %1734
+               OpBranch %797
+        %797 = OpLabel
+        %802 = OpConvertFToS %6 %777
+        %803 = OpSLessThan %40 %24 %802
+               OpLoopMerge %806 %805 None
+               OpBranchConditional %803 %804 %806
+        %804 = OpLabel
+               OpBranch %806
+        %805 = OpLabel
+               OpBranch %797
+        %806 = OpLabel
+       %1535 = OpPhi %40 %1537 %797 %325 %804
+               OpSelectionMerge %808 None
+               OpBranchConditional %1535 %837 %808
+        %808 = OpLabel
+               OpBranch %813
+        %813 = OpLabel
+               OpBranch %835
+        %835 = OpLabel
+               OpBranch %836
+        %836 = OpLabel
+       %1693 = OpPhi %40 %1537 %809 %1537 %830 %1535 %835
+       %1690 = OpPhi %6 %812 %809 %833 %830 %1534 %835
+               OpBranch %759
+        %837 = OpLabel
+       %1538 = OpPhi %40 %1537 %759 %1535 %806 %325 %819
+               OpSelectionMerge %839 None
+               OpBranchConditional %1538 %840 %839
+        %839 = OpLabel
+               OpBranch %840
+        %840 = OpLabel
+               OpSelectionMerge %942 None
+               OpSwitch %70 %860
+        %860 = OpLabel
+               OpBranch %861
+        %861 = OpLabel
+       %1548 = OpPhi %40 %322 %860 %1697 %938
+       %1545 = OpPhi %6 %24 %860 %1694 %938
+        %865 = OpSLessThanEqual %40 %1545 %255
+               OpLoopMerge %939 %938 None
+               OpBranchConditional %865 %866 %939
+        %866 = OpLabel
+        %869 = OpAccessChain %9 %47 %1545 %24
+        %870 = OpLoad %6 %869
+        %871 = OpSLessThanEqual %40 %30 %870
+               OpSelectionMerge %937 None
+               OpBranchConditional %871 %872 %916
+        %916 = OpLabel
+        %918 = OpAccessChain %9 %47 %1545 %30
+        %919 = OpLoad %6 %918
+        %920 = OpIEqual %40 %919 %28
+               OpSelectionMerge %936 None
+               OpBranchConditional %920 %921 %932
+        %932 = OpLabel
+        %935 = OpLoad %6 %918
+               OpBranch %938
+        %921 = OpLabel
+               OpStore %918 %255
+        %931 = OpAccessChain %8 %47 %255
+               OpStore %931 %1735
+               OpBranch %939
+        %936 = OpLabel
+               OpUnreachable
+        %872 = OpLabel
+        %874 = OpAccessChain %9 %47 %1545 %27
+        %875 = OpLoad %6 %874
+        %876 = OpIEqual %40 %875 %28
+               OpSelectionMerge %915 None
+               OpBranchConditional %876 %877 %911
+        %911 = OpLabel
+        %914 = OpLoad %6 %874
+               OpBranch %938
+        %877 = OpLabel
+        %878 = OpAccessChain %67 %65 %24 %66
+        %879 = OpLoad %61 %878
+        %880 = OpAccessChain %67 %65 %24 %70
+        %881 = OpLoad %61 %880
+        %882 = OpFOrdLessThan %40 %879 %881
+               OpSelectionMerge %888 None
+               OpBranchConditional %882 %883 %888
+        %883 = OpLabel
+               OpBranch %884
+        %884 = OpLabel
+               OpLoopMerge %887 %886 None
+               OpBranch %885
+        %885 = OpLabel
+               OpKill
+        %886 = OpLabel
+               OpBranch %884
+        %887 = OpLabel
+               OpUnreachable
+        %888 = OpLabel
+               OpStore %874 %255
+        %898 = OpAccessChain %8 %47 %255
+               OpStore %898 %1735
+               OpBranch %899
+        %899 = OpLabel
+        %904 = OpConvertFToS %6 %879
+        %905 = OpSLessThan %40 %24 %904
+               OpLoopMerge %908 %907 None
+               OpBranchConditional %905 %906 %908
+        %906 = OpLabel
+               OpBranch %908
+        %907 = OpLabel
+               OpBranch %899
+        %908 = OpLabel
+       %1546 = OpPhi %40 %1548 %899 %325 %906
+               OpSelectionMerge %910 None
+               OpBranchConditional %1546 %939 %910
+        %910 = OpLabel
+               OpBranch %915
+        %915 = OpLabel
+               OpBranch %937
+        %937 = OpLabel
+               OpBranch %938
+        %938 = OpLabel
+       %1697 = OpPhi %40 %1548 %911 %1548 %932 %1546 %937
+       %1694 = OpPhi %6 %914 %911 %935 %932 %1545 %937
+               OpBranch %861
+        %939 = OpLabel
+       %1549 = OpPhi %40 %1548 %861 %1546 %908 %325 %921
+               OpSelectionMerge %941 None
+               OpBranchConditional %1549 %942 %941
+        %941 = OpLabel
+               OpBranch %942
+        %942 = OpLabel
+               OpSelectionMerge %1044 None
+               OpSwitch %70 %962
+        %962 = OpLabel
+               OpBranch %963
+        %963 = OpLabel
+       %1559 = OpPhi %40 %322 %962 %1701 %1040
+       %1556 = OpPhi %6 %24 %962 %1698 %1040
+        %967 = OpSLessThanEqual %40 %1556 %235
+               OpLoopMerge %1041 %1040 None
+               OpBranchConditional %967 %968 %1041
+        %968 = OpLabel
+        %971 = OpAccessChain %9 %47 %1556 %24
+        %972 = OpLoad %6 %971
+        %973 = OpSLessThanEqual %40 %255 %972
+               OpSelectionMerge %1039 None
+               OpBranchConditional %973 %974 %1018
+       %1018 = OpLabel
+       %1020 = OpAccessChain %9 %47 %1556 %30
+       %1021 = OpLoad %6 %1020
+       %1022 = OpIEqual %40 %1021 %28
+               OpSelectionMerge %1038 None
+               OpBranchConditional %1022 %1023 %1034
+       %1034 = OpLabel
+       %1037 = OpLoad %6 %1020
+               OpBranch %1040
+       %1023 = OpLabel
+               OpStore %1020 %235
+       %1033 = OpAccessChain %8 %47 %235
+               OpStore %1033 %1736
+               OpBranch %1041
+       %1038 = OpLabel
+               OpUnreachable
+        %974 = OpLabel
+        %976 = OpAccessChain %9 %47 %1556 %27
+        %977 = OpLoad %6 %976
+        %978 = OpIEqual %40 %977 %28
+               OpSelectionMerge %1017 None
+               OpBranchConditional %978 %979 %1013
+       %1013 = OpLabel
+       %1016 = OpLoad %6 %976
+               OpBranch %1040
+        %979 = OpLabel
+        %980 = OpAccessChain %67 %65 %24 %66
+        %981 = OpLoad %61 %980
+        %982 = OpAccessChain %67 %65 %24 %70
+        %983 = OpLoad %61 %982
+        %984 = OpFOrdLessThan %40 %981 %983
+               OpSelectionMerge %990 None
+               OpBranchConditional %984 %985 %990
+        %985 = OpLabel
+               OpBranch %986
+        %986 = OpLabel
+               OpLoopMerge %989 %988 None
+               OpBranch %987
+        %987 = OpLabel
+               OpKill
+        %988 = OpLabel
+               OpBranch %986
+        %989 = OpLabel
+               OpUnreachable
+        %990 = OpLabel
+               OpStore %976 %235
+       %1000 = OpAccessChain %8 %47 %235
+               OpStore %1000 %1736
+               OpBranch %1001
+       %1001 = OpLabel
+       %1006 = OpConvertFToS %6 %981
+       %1007 = OpSLessThan %40 %24 %1006
+               OpLoopMerge %1010 %1009 None
+               OpBranchConditional %1007 %1008 %1010
+       %1008 = OpLabel
+               OpBranch %1010
+       %1009 = OpLabel
+               OpBranch %1001
+       %1010 = OpLabel
+       %1557 = OpPhi %40 %1559 %1001 %325 %1008
+               OpSelectionMerge %1012 None
+               OpBranchConditional %1557 %1041 %1012
+       %1012 = OpLabel
+               OpBranch %1017
+       %1017 = OpLabel
+               OpBranch %1039
+       %1039 = OpLabel
+               OpBranch %1040
+       %1040 = OpLabel
+       %1701 = OpPhi %40 %1559 %1013 %1559 %1034 %1557 %1039
+       %1698 = OpPhi %6 %1016 %1013 %1037 %1034 %1556 %1039
+               OpBranch %963
+       %1041 = OpLabel
+       %1560 = OpPhi %40 %1559 %963 %1557 %1010 %325 %1023
+               OpSelectionMerge %1043 None
+               OpBranchConditional %1560 %1044 %1043
+       %1043 = OpLabel
+               OpBranch %1044
+       %1044 = OpLabel
+               OpSelectionMerge %1146 None
+               OpSwitch %70 %1064
+       %1064 = OpLabel
+               OpBranch %1065
+       %1065 = OpLabel
+       %1570 = OpPhi %40 %322 %1064 %1705 %1142
+       %1567 = OpPhi %6 %24 %1064 %1702 %1142
+       %1069 = OpSLessThanEqual %40 %1567 %242
+               OpLoopMerge %1143 %1142 None
+               OpBranchConditional %1069 %1070 %1143
+       %1070 = OpLabel
+       %1073 = OpAccessChain %9 %47 %1567 %24
+       %1074 = OpLoad %6 %1073
+       %1075 = OpSLessThanEqual %40 %262 %1074
+               OpSelectionMerge %1141 None
+               OpBranchConditional %1075 %1076 %1120
+       %1120 = OpLabel
+       %1122 = OpAccessChain %9 %47 %1567 %30
+       %1123 = OpLoad %6 %1122
+       %1124 = OpIEqual %40 %1123 %28
+               OpSelectionMerge %1140 None
+               OpBranchConditional %1124 %1125 %1136
+       %1136 = OpLabel
+       %1139 = OpLoad %6 %1122
+               OpBranch %1142
+       %1125 = OpLabel
+               OpStore %1122 %242
+       %1135 = OpAccessChain %8 %47 %242
+               OpStore %1135 %1737
+               OpBranch %1143
+       %1140 = OpLabel
+               OpUnreachable
+       %1076 = OpLabel
+       %1078 = OpAccessChain %9 %47 %1567 %27
+       %1079 = OpLoad %6 %1078
+       %1080 = OpIEqual %40 %1079 %28
+               OpSelectionMerge %1119 None
+               OpBranchConditional %1080 %1081 %1115
+       %1115 = OpLabel
+       %1118 = OpLoad %6 %1078
+               OpBranch %1142
+       %1081 = OpLabel
+       %1082 = OpAccessChain %67 %65 %24 %66
+       %1083 = OpLoad %61 %1082
+       %1084 = OpAccessChain %67 %65 %24 %70
+       %1085 = OpLoad %61 %1084
+       %1086 = OpFOrdLessThan %40 %1083 %1085
+               OpSelectionMerge %1092 None
+               OpBranchConditional %1086 %1087 %1092
+       %1087 = OpLabel
+               OpBranch %1088
+       %1088 = OpLabel
+               OpLoopMerge %1091 %1090 None
+               OpBranch %1089
+       %1089 = OpLabel
+               OpKill
+       %1090 = OpLabel
+               OpBranch %1088
+       %1091 = OpLabel
+               OpUnreachable
+       %1092 = OpLabel
+               OpStore %1078 %242
+       %1102 = OpAccessChain %8 %47 %242
+               OpStore %1102 %1737
+               OpBranch %1103
+       %1103 = OpLabel
+       %1108 = OpConvertFToS %6 %1083
+       %1109 = OpSLessThan %40 %24 %1108
+               OpLoopMerge %1112 %1111 None
+               OpBranchConditional %1109 %1110 %1112
+       %1110 = OpLabel
+               OpBranch %1112
+       %1111 = OpLabel
+               OpBranch %1103
+       %1112 = OpLabel
+       %1568 = OpPhi %40 %1570 %1103 %325 %1110
+               OpSelectionMerge %1114 None
+               OpBranchConditional %1568 %1143 %1114
+       %1114 = OpLabel
+               OpBranch %1119
+       %1119 = OpLabel
+               OpBranch %1141
+       %1141 = OpLabel
+               OpBranch %1142
+       %1142 = OpLabel
+       %1705 = OpPhi %40 %1570 %1115 %1570 %1136 %1568 %1141
+       %1702 = OpPhi %6 %1118 %1115 %1139 %1136 %1567 %1141
+               OpBranch %1065
+       %1143 = OpLabel
+       %1571 = OpPhi %40 %1570 %1065 %1568 %1112 %325 %1125
+               OpSelectionMerge %1145 None
+               OpBranchConditional %1571 %1146 %1145
+       %1145 = OpLabel
+               OpBranch %1146
+       %1146 = OpLabel
+               OpSelectionMerge %1248 None
+               OpSwitch %70 %1166
+       %1166 = OpLabel
+               OpBranch %1167
+       %1167 = OpLabel
+       %1581 = OpPhi %40 %322 %1166 %1709 %1244
+       %1578 = OpPhi %6 %24 %1166 %1706 %1244
+       %1171 = OpSLessThanEqual %40 %1578 %179
+               OpLoopMerge %1245 %1244 None
+               OpBranchConditional %1171 %1172 %1245
+       %1172 = OpLabel
+       %1175 = OpAccessChain %9 %47 %1578 %24
+       %1176 = OpLoad %6 %1175
+       %1177 = OpSLessThanEqual %40 %269 %1176
+               OpSelectionMerge %1243 None
+               OpBranchConditional %1177 %1178 %1222
+       %1222 = OpLabel
+       %1224 = OpAccessChain %9 %47 %1578 %30
+       %1225 = OpLoad %6 %1224
+       %1226 = OpIEqual %40 %1225 %28
+               OpSelectionMerge %1242 None
+               OpBranchConditional %1226 %1227 %1238
+       %1238 = OpLabel
+       %1241 = OpLoad %6 %1224
+               OpBranch %1244
+       %1227 = OpLabel
+               OpStore %1224 %179
+       %1237 = OpAccessChain %8 %47 %179
+               OpStore %1237 %1738
+               OpBranch %1245
+       %1242 = OpLabel
+               OpUnreachable
+       %1178 = OpLabel
+       %1180 = OpAccessChain %9 %47 %1578 %27
+       %1181 = OpLoad %6 %1180
+       %1182 = OpIEqual %40 %1181 %28
+               OpSelectionMerge %1221 None
+               OpBranchConditional %1182 %1183 %1217
+       %1217 = OpLabel
+       %1220 = OpLoad %6 %1180
+               OpBranch %1244
+       %1183 = OpLabel
+       %1184 = OpAccessChain %67 %65 %24 %66
+       %1185 = OpLoad %61 %1184
+       %1186 = OpAccessChain %67 %65 %24 %70
+       %1187 = OpLoad %61 %1186
+       %1188 = OpFOrdLessThan %40 %1185 %1187
+               OpSelectionMerge %1194 None
+               OpBranchConditional %1188 %1189 %1194
+       %1189 = OpLabel
+               OpBranch %1190
+       %1190 = OpLabel
+               OpLoopMerge %1193 %1192 None
+               OpBranch %1191
+       %1191 = OpLabel
+               OpKill
+       %1192 = OpLabel
+               OpBranch %1190
+       %1193 = OpLabel
+               OpUnreachable
+       %1194 = OpLabel
+               OpStore %1180 %179
+       %1204 = OpAccessChain %8 %47 %179
+               OpStore %1204 %1738
+               OpBranch %1205
+       %1205 = OpLabel
+       %1210 = OpConvertFToS %6 %1185
+       %1211 = OpSLessThan %40 %24 %1210
+               OpLoopMerge %1214 %1213 None
+               OpBranchConditional %1211 %1212 %1214
+       %1212 = OpLabel
+               OpBranch %1214
+       %1213 = OpLabel
+               OpBranch %1205
+       %1214 = OpLabel
+       %1579 = OpPhi %40 %1581 %1205 %325 %1212
+               OpSelectionMerge %1216 None
+               OpBranchConditional %1579 %1245 %1216
+       %1216 = OpLabel
+               OpBranch %1221
+       %1221 = OpLabel
+               OpBranch %1243
+       %1243 = OpLabel
+               OpBranch %1244
+       %1244 = OpLabel
+       %1709 = OpPhi %40 %1581 %1217 %1581 %1238 %1579 %1243
+       %1706 = OpPhi %6 %1220 %1217 %1241 %1238 %1578 %1243
+               OpBranch %1167
+       %1245 = OpLabel
+       %1582 = OpPhi %40 %1581 %1167 %1579 %1214 %325 %1227
+               OpSelectionMerge %1247 None
+               OpBranchConditional %1582 %1248 %1247
+       %1247 = OpLabel
+               OpBranch %1248
+       %1248 = OpLabel
+               OpBranch %276
+        %276 = OpLabel
+       %1593 = OpPhi %6 %1620 %1248 %1590 %279
+       %1584 = OpPhi %6 %24 %1248 %1710 %279
+       %1583 = OpPhi %6 %24 %1248 %309 %279
+        %283 = OpSLessThan %40 %1583 %282
+               OpLoopMerge %278 %279 None
+               OpBranchConditional %283 %277 %278
+        %277 = OpLabel
+               OpSelectionMerge %1299 None
+               OpSwitch %70 %1267
+       %1267 = OpLabel
+               OpBranch %1268
+       %1268 = OpLabel
+       %1585 = OpPhi %6 %24 %1267 %1739 %1295
+       %1271 = OpINotEqual %40 %1585 %28
+               OpLoopMerge %1296 %1295 None
+               OpBranchConditional %1271 %1272 %1296
+       %1272 = OpLabel
+       %1274 = OpAccessChain %8 %47 %1585
+       %1275 = OpLoad %7 %1274
+       %1305 = OpCompositeExtract %6 %1275 0
+       %1306 = OpCompositeExtract %6 %1275 1
+       %1307 = OpCompositeExtract %6 %1275 2
+       %1279 = OpIEqual %40 %1305 %1583
+               OpSelectionMerge %1282 None
+               OpBranchConditional %1279 %1280 %1282
+       %1280 = OpLabel
+               OpBranch %1296
+       %1282 = OpLabel
+       %1286 = OpSGreaterThan %40 %1583 %1305
+       %1739 = OpSelect %6 %1286 %1307 %1306
+               OpBranch %1295
+       %1295 = OpLabel
+               OpBranch %1268
+       %1296 = OpLabel
+       %1591 = OpPhi %6 %1593 %1268 %1583 %1280
+       %1587 = OpPhi %40 %322 %1268 %325 %1280
+               OpSelectionMerge %1298 None
+               OpBranchConditional %1587 %1299 %1298
+       %1298 = OpLabel
+               OpBranch %1299
+       %1299 = OpLabel
+       %1590 = OpPhi %6 %1591 %1296 %28 %1298
+               OpSelectionMerge %291 None
+               OpSwitch %1583 %290 9 %289 5 %289 12 %289 15 %289 7 %289 8 %289 2 %289 6 %289 17 %289 13 %289
+        %289 = OpLabel
+        %294 = OpIEqual %40 %1590 %1583
+               OpSelectionMerge %296 None
+               OpBranchConditional %294 %295 %296
+        %295 = OpLabel
+        %298 = OpIAdd %6 %1584 %27
+               OpBranch %296
+        %296 = OpLabel
+       %1712 = OpPhi %6 %1584 %289 %298 %295
+               OpBranch %291
+        %290 = OpLabel
+        %301 = OpIEqual %40 %1590 %28
+               OpSelectionMerge %303 None
+               OpBranchConditional %301 %302 %303
+        %302 = OpLabel
+        %305 = OpIAdd %6 %1584 %27
+               OpBranch %303
+        %303 = OpLabel
+       %1711 = OpPhi %6 %1584 %290 %305 %302
+               OpBranch %291
+        %291 = OpLabel
+       %1710 = OpPhi %6 %1711 %303 %1712 %296
+               OpBranch %279
+        %279 = OpLabel
+        %309 = OpIAdd %6 %1583 %27
+               OpBranch %276
+        %278 = OpLabel
+        %311 = OpIEqual %40 %1584 %282
+               OpSelectionMerge %313 None
+               OpBranchConditional %311 %312 %318
+        %318 = OpLabel
+               OpStore %315 %319
+               OpBranch %313
+        %312 = OpLabel
+               OpStore %315 %317
+               OpBranch %313
+        %313 = OpLabel
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# injectionSwitch
+BUFFER variant_injectionSwitch DATA_TYPE vec2<float> DATA
+ 0.0 1.0
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 256 256
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant_injectionSwitch AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256
+
+EXPECT reference_framebuffer EQ_HISTOGRAM_EMD_BUFFER variant_framebuffer TOLERANCE 0.005
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/stable-binarysearch-tree-fragcoord-less-than-zero.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/stable-binarysearch-tree-fragcoord-less-than-zero.amber
new file mode 100644
index 0000000..7e902cb
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/stable-binarysearch-tree-fragcoord-less-than-zero.amber
@@ -0,0 +1,1195 @@
+#!amber
+
+# Copyright 2020 Google LLC
+#
+# 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.
+
+
+# A test for a bug found by GraphicsFuzz.
+
+# Short description: A fragment shader with gl_FragCoord.x less than zero
+
+# The test passes because both shaders render the same image.
+
+SHADER vertex reference_vertex_shader PASSTHROUGH
+
+# reference_fragment_shader is derived from the following GLSL:
+# #version 320 es
+# precision highp float;
+#
+# precision highp int;
+#
+# layout(location = 0) out vec4 _GLF_color;
+#
+# struct BST {
+#  int data;
+#  int leftIndex;
+#  int rightIndex;
+# } ;
+#
+# BST tree[10];
+#
+# void makeTreeNode(inout BST tree, int data)
+# {
+#  tree.data = data;
+#  tree.leftIndex = - 1;
+#  tree.rightIndex = - 1;
+# }
+# void insert(int treeIndex, int data)
+# {
+#  int baseIndex = 0;
+#  while(baseIndex <= treeIndex)
+#   {
+#    if(data <= tree[baseIndex].data)
+#     {
+#      if(tree[baseIndex].leftIndex == - 1)
+#       {
+#        tree[baseIndex].leftIndex = treeIndex;
+#        makeTreeNode(tree[treeIndex], data);
+#        return;
+#       }
+#      else
+#       {
+#        baseIndex = tree[baseIndex].leftIndex;
+#        continue;
+#       }
+#     }
+#    else
+#     {
+#      if(tree[baseIndex].rightIndex == - 1)
+#       {
+#        tree[baseIndex].rightIndex = treeIndex;
+#        makeTreeNode(tree[treeIndex], data);
+#        return;
+#       }
+#      else
+#       {
+#        baseIndex = tree[baseIndex].rightIndex;
+#        continue;
+#       }
+#     }
+#   }
+# }
+# int search(int target)
+# {
+#  BST currentNode;
+#  int index = 0;
+#  while(index != - 1)
+#   {
+#    currentNode = tree[index];
+#    if(currentNode.data == target)
+#     {
+#      return target;
+#     }
+#    index = target > currentNode.data ? currentNode.rightIndex : currentNode.leftIndex;
+#   }
+#  return - 1;
+# }
+# void main()
+# {
+#  int treeIndex = 0;
+#  makeTreeNode(tree[0], 9);
+#  treeIndex ++;
+#  insert(treeIndex, 5);
+#  treeIndex ++;
+#  insert(treeIndex, 12);
+#  treeIndex ++;
+#  insert(treeIndex, 15);
+#  treeIndex ++;
+#  insert(treeIndex, 7);
+#  treeIndex ++;
+#  insert(treeIndex, 8);
+#  treeIndex ++;
+#  insert(treeIndex, 2);
+#  treeIndex ++;
+#  insert(treeIndex, 6);
+#  treeIndex ++;
+#  insert(treeIndex, 17);
+#  treeIndex ++;
+#  insert(treeIndex, 13);
+#  int count = 0;
+#  for(int i = 0; i < 20; i ++)
+#   {
+#    int result = search(i);
+#    switch(i)
+#     {
+#      case 9:
+#      case 5:
+#      case 12:
+#      case 15:
+#      case 7:
+#      case 8:
+#      case 2:
+#      case 6:
+#      case 17:
+#      case 13:
+#      if(result == i)
+#       {
+#        count ++;
+#       }
+#      break;
+#      default:
+#      if(result == - 1)
+#       {
+#        count ++;
+#       }
+#      break;
+#     }
+#   }
+#  if(count == 20)
+#   {
+#    _GLF_color = vec4(1.0, 0.0, 0.0, 1.0);
+#   }
+#  else
+#   {
+#    _GLF_color = vec4(0.0, 0.0, 1.0, 1.0);
+#   }
+# }
+SHADER fragment reference_fragment_shader SPIRV-ASM
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 10
+; Bound: 260
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %254
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 320
+               OpName %4 "main"
+               OpName %7 "BST"
+               OpMemberName %7 0 "data"
+               OpMemberName %7 1 "leftIndex"
+               OpMemberName %7 2 "rightIndex"
+               OpName %13 "makeTreeNode(struct-BST-i1-i1-i11;i1;"
+               OpName %11 "tree"
+               OpName %12 "data"
+               OpName %18 "insert(i1;i1;"
+               OpName %16 "treeIndex"
+               OpName %17 "data"
+               OpName %22 "search(i1;"
+               OpName %21 "target"
+               OpName %32 "baseIndex"
+               OpName %47 "tree"
+               OpName %65 "param"
+               OpName %69 "param"
+               OpName %91 "param"
+               OpName %94 "param"
+               OpName %105 "index"
+               OpName %113 "currentNode"
+               OpName %140 "treeIndex"
+               OpName %142 "param"
+               OpName %145 "param"
+               OpName %152 "param"
+               OpName %154 "param"
+               OpName %159 "param"
+               OpName %161 "param"
+               OpName %166 "param"
+               OpName %168 "param"
+               OpName %173 "param"
+               OpName %175 "param"
+               OpName %180 "param"
+               OpName %182 "param"
+               OpName %186 "param"
+               OpName %188 "param"
+               OpName %193 "param"
+               OpName %195 "param"
+               OpName %200 "param"
+               OpName %202 "param"
+               OpName %207 "param"
+               OpName %209 "param"
+               OpName %211 "count"
+               OpName %212 "i"
+               OpName %221 "result"
+               OpName %222 "param"
+               OpName %254 "_GLF_color"
+               OpDecorate %254 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeInt 32 1
+          %7 = OpTypeStruct %6 %6 %6
+          %8 = OpTypePointer Function %7
+          %9 = OpTypePointer Function %6
+         %10 = OpTypeFunction %2 %8 %9
+         %15 = OpTypeFunction %2 %9 %9
+         %20 = OpTypeFunction %6 %9
+         %24 = OpConstant %6 0
+         %27 = OpConstant %6 1
+         %28 = OpConstant %6 -1
+         %30 = OpConstant %6 2
+         %40 = OpTypeBool
+         %43 = OpTypeInt 32 0
+         %44 = OpConstant %43 10
+         %45 = OpTypeArray %7 %44
+         %46 = OpTypePointer Private %45
+         %47 = OpVariable %46 Private
+         %49 = OpTypePointer Private %6
+         %66 = OpTypePointer Private %7
+        %141 = OpConstant %6 9
+        %151 = OpConstant %6 5
+        %158 = OpConstant %6 12
+        %165 = OpConstant %6 15
+        %172 = OpConstant %6 7
+        %179 = OpConstant %6 8
+        %192 = OpConstant %6 6
+        %199 = OpConstant %6 17
+        %206 = OpConstant %6 13
+        %219 = OpConstant %6 20
+        %251 = OpTypeFloat 32
+        %252 = OpTypeVector %251 4
+        %253 = OpTypePointer Output %252
+        %254 = OpVariable %253 Output
+        %255 = OpConstant %251 1
+        %256 = OpConstant %251 0
+        %257 = OpConstantComposite %252 %255 %256 %256 %255
+        %259 = OpConstantComposite %252 %256 %256 %255 %255
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+        %140 = OpVariable %9 Function
+        %142 = OpVariable %8 Function
+        %145 = OpVariable %9 Function
+        %152 = OpVariable %9 Function
+        %154 = OpVariable %9 Function
+        %159 = OpVariable %9 Function
+        %161 = OpVariable %9 Function
+        %166 = OpVariable %9 Function
+        %168 = OpVariable %9 Function
+        %173 = OpVariable %9 Function
+        %175 = OpVariable %9 Function
+        %180 = OpVariable %9 Function
+        %182 = OpVariable %9 Function
+        %186 = OpVariable %9 Function
+        %188 = OpVariable %9 Function
+        %193 = OpVariable %9 Function
+        %195 = OpVariable %9 Function
+        %200 = OpVariable %9 Function
+        %202 = OpVariable %9 Function
+        %207 = OpVariable %9 Function
+        %209 = OpVariable %9 Function
+        %211 = OpVariable %9 Function
+        %212 = OpVariable %9 Function
+        %221 = OpVariable %9 Function
+        %222 = OpVariable %9 Function
+               OpStore %140 %24
+        %143 = OpAccessChain %66 %47 %24
+        %144 = OpLoad %7 %143
+               OpStore %142 %144
+               OpStore %145 %141
+        %146 = OpFunctionCall %2 %13 %142 %145
+        %147 = OpLoad %7 %142
+        %148 = OpAccessChain %66 %47 %24
+               OpStore %148 %147
+        %149 = OpLoad %6 %140
+        %150 = OpIAdd %6 %149 %27
+               OpStore %140 %150
+        %153 = OpLoad %6 %140
+               OpStore %152 %153
+               OpStore %154 %151
+        %155 = OpFunctionCall %2 %18 %152 %154
+        %156 = OpLoad %6 %140
+        %157 = OpIAdd %6 %156 %27
+               OpStore %140 %157
+        %160 = OpLoad %6 %140
+               OpStore %159 %160
+               OpStore %161 %158
+        %162 = OpFunctionCall %2 %18 %159 %161
+        %163 = OpLoad %6 %140
+        %164 = OpIAdd %6 %163 %27
+               OpStore %140 %164
+        %167 = OpLoad %6 %140
+               OpStore %166 %167
+               OpStore %168 %165
+        %169 = OpFunctionCall %2 %18 %166 %168
+        %170 = OpLoad %6 %140
+        %171 = OpIAdd %6 %170 %27
+               OpStore %140 %171
+        %174 = OpLoad %6 %140
+               OpStore %173 %174
+               OpStore %175 %172
+        %176 = OpFunctionCall %2 %18 %173 %175
+        %177 = OpLoad %6 %140
+        %178 = OpIAdd %6 %177 %27
+               OpStore %140 %178
+        %181 = OpLoad %6 %140
+               OpStore %180 %181
+               OpStore %182 %179
+        %183 = OpFunctionCall %2 %18 %180 %182
+        %184 = OpLoad %6 %140
+        %185 = OpIAdd %6 %184 %27
+               OpStore %140 %185
+        %187 = OpLoad %6 %140
+               OpStore %186 %187
+               OpStore %188 %30
+        %189 = OpFunctionCall %2 %18 %186 %188
+        %190 = OpLoad %6 %140
+        %191 = OpIAdd %6 %190 %27
+               OpStore %140 %191
+        %194 = OpLoad %6 %140
+               OpStore %193 %194
+               OpStore %195 %192
+        %196 = OpFunctionCall %2 %18 %193 %195
+        %197 = OpLoad %6 %140
+        %198 = OpIAdd %6 %197 %27
+               OpStore %140 %198
+        %201 = OpLoad %6 %140
+               OpStore %200 %201
+               OpStore %202 %199
+        %203 = OpFunctionCall %2 %18 %200 %202
+        %204 = OpLoad %6 %140
+        %205 = OpIAdd %6 %204 %27
+               OpStore %140 %205
+        %208 = OpLoad %6 %140
+               OpStore %207 %208
+               OpStore %209 %206
+        %210 = OpFunctionCall %2 %18 %207 %209
+               OpStore %211 %24
+               OpStore %212 %24
+               OpBranch %213
+        %213 = OpLabel
+               OpLoopMerge %215 %216 None
+               OpBranch %217
+        %217 = OpLabel
+        %218 = OpLoad %6 %212
+        %220 = OpSLessThan %40 %218 %219
+               OpBranchConditional %220 %214 %215
+        %214 = OpLabel
+        %223 = OpLoad %6 %212
+               OpStore %222 %223
+        %224 = OpFunctionCall %6 %22 %222
+               OpStore %221 %224
+        %225 = OpLoad %6 %212
+               OpSelectionMerge %228 None
+               OpSwitch %225 %227 9 %226 5 %226 12 %226 15 %226 7 %226 8 %226 2 %226 6 %226 17 %226 13 %226
+        %227 = OpLabel
+        %237 = OpLoad %6 %221
+        %238 = OpIEqual %40 %237 %28
+               OpSelectionMerge %240 None
+               OpBranchConditional %238 %239 %240
+        %239 = OpLabel
+        %241 = OpLoad %6 %211
+        %242 = OpIAdd %6 %241 %27
+               OpStore %211 %242
+               OpBranch %240
+        %240 = OpLabel
+               OpBranch %228
+        %226 = OpLabel
+        %229 = OpLoad %6 %221
+        %230 = OpLoad %6 %212
+        %231 = OpIEqual %40 %229 %230
+               OpSelectionMerge %233 None
+               OpBranchConditional %231 %232 %233
+        %232 = OpLabel
+        %234 = OpLoad %6 %211
+        %235 = OpIAdd %6 %234 %27
+               OpStore %211 %235
+               OpBranch %233
+        %233 = OpLabel
+               OpBranch %228
+        %228 = OpLabel
+               OpBranch %216
+        %216 = OpLabel
+        %245 = OpLoad %6 %212
+        %246 = OpIAdd %6 %245 %27
+               OpStore %212 %246
+               OpBranch %213
+        %215 = OpLabel
+        %247 = OpLoad %6 %211
+        %248 = OpIEqual %40 %247 %219
+               OpSelectionMerge %250 None
+               OpBranchConditional %248 %249 %258
+        %249 = OpLabel
+               OpStore %254 %257
+               OpBranch %250
+        %258 = OpLabel
+               OpStore %254 %259
+               OpBranch %250
+        %250 = OpLabel
+               OpReturn
+               OpFunctionEnd
+         %13 = OpFunction %2 None %10
+         %11 = OpFunctionParameter %8
+         %12 = OpFunctionParameter %9
+         %14 = OpLabel
+         %25 = OpLoad %6 %12
+         %26 = OpAccessChain %9 %11 %24
+               OpStore %26 %25
+         %29 = OpAccessChain %9 %11 %27
+               OpStore %29 %28
+         %31 = OpAccessChain %9 %11 %30
+               OpStore %31 %28
+               OpReturn
+               OpFunctionEnd
+         %18 = OpFunction %2 None %15
+         %16 = OpFunctionParameter %9
+         %17 = OpFunctionParameter %9
+         %19 = OpLabel
+         %32 = OpVariable %9 Function
+         %65 = OpVariable %8 Function
+         %69 = OpVariable %9 Function
+         %91 = OpVariable %8 Function
+         %94 = OpVariable %9 Function
+               OpStore %32 %24
+               OpBranch %33
+         %33 = OpLabel
+               OpLoopMerge %35 %36 None
+               OpBranch %37
+         %37 = OpLabel
+         %38 = OpLoad %6 %32
+         %39 = OpLoad %6 %16
+         %41 = OpSLessThanEqual %40 %38 %39
+               OpBranchConditional %41 %34 %35
+         %34 = OpLabel
+         %42 = OpLoad %6 %17
+         %48 = OpLoad %6 %32
+         %50 = OpAccessChain %49 %47 %48 %24
+         %51 = OpLoad %6 %50
+         %52 = OpSLessThanEqual %40 %42 %51
+               OpSelectionMerge %54 None
+               OpBranchConditional %52 %53 %80
+         %53 = OpLabel
+         %55 = OpLoad %6 %32
+         %56 = OpAccessChain %49 %47 %55 %27
+         %57 = OpLoad %6 %56
+         %58 = OpIEqual %40 %57 %28
+               OpSelectionMerge %60 None
+               OpBranchConditional %58 %59 %75
+         %59 = OpLabel
+         %61 = OpLoad %6 %32
+         %62 = OpLoad %6 %16
+         %63 = OpAccessChain %49 %47 %61 %27
+               OpStore %63 %62
+         %64 = OpLoad %6 %16
+         %67 = OpAccessChain %66 %47 %64
+         %68 = OpLoad %7 %67
+               OpStore %65 %68
+         %70 = OpLoad %6 %17
+               OpStore %69 %70
+         %71 = OpFunctionCall %2 %13 %65 %69
+         %72 = OpLoad %7 %65
+         %73 = OpAccessChain %66 %47 %64
+               OpStore %73 %72
+               OpReturn
+         %75 = OpLabel
+         %76 = OpLoad %6 %32
+         %77 = OpAccessChain %49 %47 %76 %27
+         %78 = OpLoad %6 %77
+               OpStore %32 %78
+               OpBranch %36
+         %60 = OpLabel
+               OpUnreachable
+         %80 = OpLabel
+         %81 = OpLoad %6 %32
+         %82 = OpAccessChain %49 %47 %81 %30
+         %83 = OpLoad %6 %82
+         %84 = OpIEqual %40 %83 %28
+               OpSelectionMerge %86 None
+               OpBranchConditional %84 %85 %100
+         %85 = OpLabel
+         %87 = OpLoad %6 %32
+         %88 = OpLoad %6 %16
+         %89 = OpAccessChain %49 %47 %87 %30
+               OpStore %89 %88
+         %90 = OpLoad %6 %16
+         %92 = OpAccessChain %66 %47 %90
+         %93 = OpLoad %7 %92
+               OpStore %91 %93
+         %95 = OpLoad %6 %17
+               OpStore %94 %95
+         %96 = OpFunctionCall %2 %13 %91 %94
+         %97 = OpLoad %7 %91
+         %98 = OpAccessChain %66 %47 %90
+               OpStore %98 %97
+               OpReturn
+        %100 = OpLabel
+        %101 = OpLoad %6 %32
+        %102 = OpAccessChain %49 %47 %101 %30
+        %103 = OpLoad %6 %102
+               OpStore %32 %103
+               OpBranch %36
+         %86 = OpLabel
+               OpUnreachable
+         %54 = OpLabel
+               OpUnreachable
+         %36 = OpLabel
+               OpBranch %33
+         %35 = OpLabel
+               OpReturn
+               OpFunctionEnd
+         %22 = OpFunction %6 None %20
+         %21 = OpFunctionParameter %9
+         %23 = OpLabel
+        %105 = OpVariable %9 Function
+        %113 = OpVariable %8 Function
+        %129 = OpVariable %9 Function
+               OpStore %105 %24
+               OpBranch %106
+        %106 = OpLabel
+               OpLoopMerge %108 %109 None
+               OpBranch %110
+        %110 = OpLabel
+        %111 = OpLoad %6 %105
+        %112 = OpINotEqual %40 %111 %28
+               OpBranchConditional %112 %107 %108
+        %107 = OpLabel
+        %114 = OpLoad %6 %105
+        %115 = OpAccessChain %66 %47 %114
+        %116 = OpLoad %7 %115
+               OpStore %113 %116
+        %117 = OpAccessChain %9 %113 %24
+        %118 = OpLoad %6 %117
+        %119 = OpLoad %6 %21
+        %120 = OpIEqual %40 %118 %119
+               OpSelectionMerge %122 None
+               OpBranchConditional %120 %121 %122
+        %121 = OpLabel
+        %123 = OpLoad %6 %21
+               OpReturnValue %123
+        %122 = OpLabel
+        %125 = OpLoad %6 %21
+        %126 = OpAccessChain %9 %113 %24
+        %127 = OpLoad %6 %126
+        %128 = OpSGreaterThan %40 %125 %127
+               OpSelectionMerge %131 None
+               OpBranchConditional %128 %130 %134
+        %130 = OpLabel
+        %132 = OpAccessChain %9 %113 %30
+        %133 = OpLoad %6 %132
+               OpStore %129 %133
+               OpBranch %131
+        %134 = OpLabel
+        %135 = OpAccessChain %9 %113 %27
+        %136 = OpLoad %6 %135
+               OpStore %129 %136
+               OpBranch %131
+        %131 = OpLabel
+        %137 = OpLoad %6 %129
+               OpStore %105 %137
+               OpBranch %109
+        %109 = OpLabel
+               OpBranch %106
+        %108 = OpLabel
+               OpReturnValue %28
+               OpFunctionEnd
+END
+
+
+BUFFER reference_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics reference_pipeline
+  ATTACH reference_vertex_shader
+  ATTACH reference_fragment_shader
+  FRAMEBUFFER_SIZE 256 256
+  BIND BUFFER reference_framebuffer AS color LOCATION 0
+END
+CLEAR_COLOR reference_pipeline 0 0 0 255
+
+CLEAR reference_pipeline
+RUN reference_pipeline DRAW_RECT POS 0 0 SIZE 256 256
+
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+# variant_fragment_shader is derived from the following GLSL:
+# #version 320 es
+# precision highp float;
+#
+# precision highp int;
+#
+# layout(location = 0) out vec4 _GLF_color;
+#
+# struct BST {
+#  int data;
+#  int leftIndex;
+#  int rightIndex;
+# } ;
+#
+# BST tree[10];
+#
+# void makeTreeNode(inout BST tree, int data)
+# {
+#  tree.data = data;
+#  tree.leftIndex = - 1;
+#  tree.rightIndex = - 1;
+# }
+# void insert(int treeIndex, int data)
+# {
+#  int baseIndex = 0;
+#  while(baseIndex <= treeIndex)
+#   {
+#    if(data <= tree[baseIndex].data)
+#     {
+#      if(tree[baseIndex].leftIndex == - 1)
+#       {
+#        tree[baseIndex].leftIndex = treeIndex;
+#        makeTreeNode(tree[treeIndex], data);
+#        return;
+#       }
+#      else
+#       {
+#        baseIndex = tree[baseIndex].leftIndex;
+#        continue;
+#       }
+#     }
+#    else
+#     {
+#      if(tree[baseIndex].rightIndex == - 1)
+#       {
+#        tree[baseIndex].rightIndex = treeIndex;
+#        makeTreeNode(tree[treeIndex], data);
+#        return;
+#       }
+#      else
+#       {
+#        baseIndex = tree[baseIndex].rightIndex;
+#        continue;
+#       }
+#     }
+#   }
+# }
+# int search(int target)
+# {
+#  BST currentNode;
+#  int index = 0;
+#  while(index != - 1)
+#   {
+#    currentNode = tree[index];
+#    if(currentNode.data == target)
+#     {
+#      return target;
+#     }
+#    index = target > currentNode.data ? currentNode.rightIndex : currentNode.leftIndex;
+#   }
+#  return - 1;
+# }
+# void main()
+# {
+#  int treeIndex = 0;
+#  makeTreeNode(tree[0], 9);
+#  treeIndex ++;
+#  insert(treeIndex, 5);
+#  treeIndex ++;
+#  insert(treeIndex, 12);
+#  treeIndex ++;
+#  insert(treeIndex, 15);
+#  treeIndex ++;
+#  insert(treeIndex, 7);
+#  treeIndex ++;
+#  insert(treeIndex, 8);
+#  treeIndex ++;
+#  insert(treeIndex, 2);
+#  treeIndex ++;
+#  insert(treeIndex, 6);
+#  treeIndex ++;
+#  insert(treeIndex, 17);
+#  treeIndex ++;
+#  insert(treeIndex, 13);
+#  int count = 0;
+#  for(int i = 0; i < 20; i ++)
+#   {
+#    int result = search(i);
+#    switch(i)
+#     {
+#      case 9:
+#      case 5:
+#      case 12:
+#      case 15:
+#      case 7:
+#      case 8:
+#      case 2:
+#      case 6:
+#      case 17:
+#      case 13:
+#      // Always false: gl_Frag_Coord.x < 0.0
+#      // Thus, the end result is the same as in the reference shader.
+#      if((result == i) || (gl_FragCoord.x < 0.0))
+#       {
+#        count ++;
+#       }
+#      break;
+#      default:
+#      if(result == - 1)
+#       {
+#        count ++;
+#       }
+#      break;
+#     }
+#   }
+#  if(count == 20)
+#   {
+#    _GLF_color = vec4(1.0, 0.0, 0.0, 1.0);
+#   }
+#  else
+#   {
+#    _GLF_color = vec4(0.0, 0.0, 1.0, 1.0);
+#   }
+# }
+SHADER fragment variant_fragment_shader SPIRV-ASM
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 10
+; Bound: 271
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %238 %266
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 320
+               OpName %4 "main"
+               OpName %7 "BST"
+               OpMemberName %7 0 "data"
+               OpMemberName %7 1 "leftIndex"
+               OpMemberName %7 2 "rightIndex"
+               OpName %13 "makeTreeNode(struct-BST-i1-i1-i11;i1;"
+               OpName %11 "tree"
+               OpName %12 "data"
+               OpName %18 "insert(i1;i1;"
+               OpName %16 "treeIndex"
+               OpName %17 "data"
+               OpName %22 "search(i1;"
+               OpName %21 "target"
+               OpName %32 "baseIndex"
+               OpName %47 "tree"
+               OpName %65 "param"
+               OpName %69 "param"
+               OpName %91 "param"
+               OpName %94 "param"
+               OpName %105 "index"
+               OpName %113 "currentNode"
+               OpName %140 "treeIndex"
+               OpName %142 "param"
+               OpName %145 "param"
+               OpName %152 "param"
+               OpName %154 "param"
+               OpName %159 "param"
+               OpName %161 "param"
+               OpName %166 "param"
+               OpName %168 "param"
+               OpName %173 "param"
+               OpName %175 "param"
+               OpName %180 "param"
+               OpName %182 "param"
+               OpName %186 "param"
+               OpName %188 "param"
+               OpName %193 "param"
+               OpName %195 "param"
+               OpName %200 "param"
+               OpName %202 "param"
+               OpName %207 "param"
+               OpName %209 "param"
+               OpName %211 "count"
+               OpName %212 "i"
+               OpName %221 "result"
+               OpName %222 "param"
+               OpName %238 "gl_FragCoord"
+               OpName %266 "_GLF_color"
+               OpDecorate %238 BuiltIn FragCoord
+               OpDecorate %266 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeInt 32 1
+          %7 = OpTypeStruct %6 %6 %6
+          %8 = OpTypePointer Function %7
+          %9 = OpTypePointer Function %6
+         %10 = OpTypeFunction %2 %8 %9
+         %15 = OpTypeFunction %2 %9 %9
+         %20 = OpTypeFunction %6 %9
+         %24 = OpConstant %6 0
+         %27 = OpConstant %6 1
+         %28 = OpConstant %6 -1
+         %30 = OpConstant %6 2
+         %40 = OpTypeBool
+         %43 = OpTypeInt 32 0
+         %44 = OpConstant %43 10
+         %45 = OpTypeArray %7 %44
+         %46 = OpTypePointer Private %45
+         %47 = OpVariable %46 Private
+         %49 = OpTypePointer Private %6
+         %66 = OpTypePointer Private %7
+        %141 = OpConstant %6 9
+        %151 = OpConstant %6 5
+        %158 = OpConstant %6 12
+        %165 = OpConstant %6 15
+        %172 = OpConstant %6 7
+        %179 = OpConstant %6 8
+        %192 = OpConstant %6 6
+        %199 = OpConstant %6 17
+        %206 = OpConstant %6 13
+        %219 = OpConstant %6 20
+        %235 = OpTypeFloat 32
+        %236 = OpTypeVector %235 4
+        %237 = OpTypePointer Input %236
+        %238 = OpVariable %237 Input
+        %239 = OpConstant %43 0
+        %240 = OpTypePointer Input %235
+        %243 = OpConstant %235 0
+        %265 = OpTypePointer Output %236
+        %266 = OpVariable %265 Output
+        %267 = OpConstant %235 1
+        %268 = OpConstantComposite %236 %267 %243 %243 %267
+        %270 = OpConstantComposite %236 %243 %243 %267 %267
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+        %140 = OpVariable %9 Function
+        %142 = OpVariable %8 Function
+        %145 = OpVariable %9 Function
+        %152 = OpVariable %9 Function
+        %154 = OpVariable %9 Function
+        %159 = OpVariable %9 Function
+        %161 = OpVariable %9 Function
+        %166 = OpVariable %9 Function
+        %168 = OpVariable %9 Function
+        %173 = OpVariable %9 Function
+        %175 = OpVariable %9 Function
+        %180 = OpVariable %9 Function
+        %182 = OpVariable %9 Function
+        %186 = OpVariable %9 Function
+        %188 = OpVariable %9 Function
+        %193 = OpVariable %9 Function
+        %195 = OpVariable %9 Function
+        %200 = OpVariable %9 Function
+        %202 = OpVariable %9 Function
+        %207 = OpVariable %9 Function
+        %209 = OpVariable %9 Function
+        %211 = OpVariable %9 Function
+        %212 = OpVariable %9 Function
+        %221 = OpVariable %9 Function
+        %222 = OpVariable %9 Function
+               OpStore %140 %24
+        %143 = OpAccessChain %66 %47 %24
+        %144 = OpLoad %7 %143
+               OpStore %142 %144
+               OpStore %145 %141
+        %146 = OpFunctionCall %2 %13 %142 %145
+        %147 = OpLoad %7 %142
+        %148 = OpAccessChain %66 %47 %24
+               OpStore %148 %147
+        %149 = OpLoad %6 %140
+        %150 = OpIAdd %6 %149 %27
+               OpStore %140 %150
+        %153 = OpLoad %6 %140
+               OpStore %152 %153
+               OpStore %154 %151
+        %155 = OpFunctionCall %2 %18 %152 %154
+        %156 = OpLoad %6 %140
+        %157 = OpIAdd %6 %156 %27
+               OpStore %140 %157
+        %160 = OpLoad %6 %140
+               OpStore %159 %160
+               OpStore %161 %158
+        %162 = OpFunctionCall %2 %18 %159 %161
+        %163 = OpLoad %6 %140
+        %164 = OpIAdd %6 %163 %27
+               OpStore %140 %164
+        %167 = OpLoad %6 %140
+               OpStore %166 %167
+               OpStore %168 %165
+        %169 = OpFunctionCall %2 %18 %166 %168
+        %170 = OpLoad %6 %140
+        %171 = OpIAdd %6 %170 %27
+               OpStore %140 %171
+        %174 = OpLoad %6 %140
+               OpStore %173 %174
+               OpStore %175 %172
+        %176 = OpFunctionCall %2 %18 %173 %175
+        %177 = OpLoad %6 %140
+        %178 = OpIAdd %6 %177 %27
+               OpStore %140 %178
+        %181 = OpLoad %6 %140
+               OpStore %180 %181
+               OpStore %182 %179
+        %183 = OpFunctionCall %2 %18 %180 %182
+        %184 = OpLoad %6 %140
+        %185 = OpIAdd %6 %184 %27
+               OpStore %140 %185
+        %187 = OpLoad %6 %140
+               OpStore %186 %187
+               OpStore %188 %30
+        %189 = OpFunctionCall %2 %18 %186 %188
+        %190 = OpLoad %6 %140
+        %191 = OpIAdd %6 %190 %27
+               OpStore %140 %191
+        %194 = OpLoad %6 %140
+               OpStore %193 %194
+               OpStore %195 %192
+        %196 = OpFunctionCall %2 %18 %193 %195
+        %197 = OpLoad %6 %140
+        %198 = OpIAdd %6 %197 %27
+               OpStore %140 %198
+        %201 = OpLoad %6 %140
+               OpStore %200 %201
+               OpStore %202 %199
+        %203 = OpFunctionCall %2 %18 %200 %202
+        %204 = OpLoad %6 %140
+        %205 = OpIAdd %6 %204 %27
+               OpStore %140 %205
+        %208 = OpLoad %6 %140
+               OpStore %207 %208
+               OpStore %209 %206
+        %210 = OpFunctionCall %2 %18 %207 %209
+               OpStore %211 %24
+               OpStore %212 %24
+               OpBranch %213
+        %213 = OpLabel
+               OpLoopMerge %215 %216 None
+               OpBranch %217
+        %217 = OpLabel
+        %218 = OpLoad %6 %212
+        %220 = OpSLessThan %40 %218 %219
+               OpBranchConditional %220 %214 %215
+        %214 = OpLabel
+        %223 = OpLoad %6 %212
+               OpStore %222 %223
+        %224 = OpFunctionCall %6 %22 %222
+               OpStore %221 %224
+        %225 = OpLoad %6 %212
+               OpSelectionMerge %228 None
+               OpSwitch %225 %227 9 %226 5 %226 12 %226 15 %226 7 %226 8 %226 2 %226 6 %226 17 %226 13 %226
+        %227 = OpLabel
+        %251 = OpLoad %6 %221
+        %252 = OpIEqual %40 %251 %28
+               OpSelectionMerge %254 None
+               OpBranchConditional %252 %253 %254
+        %253 = OpLabel
+        %255 = OpLoad %6 %211
+        %256 = OpIAdd %6 %255 %27
+               OpStore %211 %256
+               OpBranch %254
+        %254 = OpLabel
+               OpBranch %228
+        %226 = OpLabel
+        %229 = OpLoad %6 %221
+        %230 = OpLoad %6 %212
+        %231 = OpIEqual %40 %229 %230
+        %232 = OpLogicalNot %40 %231
+               OpSelectionMerge %234 None
+               OpBranchConditional %232 %233 %234
+        %233 = OpLabel
+        %241 = OpAccessChain %240 %238 %239
+        %242 = OpLoad %235 %241
+        %244 = OpFOrdLessThan %40 %242 %243
+               OpBranch %234
+        %234 = OpLabel
+        %245 = OpPhi %40 %231 %226 %244 %233
+               OpSelectionMerge %247 None
+               OpBranchConditional %245 %246 %247
+        %246 = OpLabel
+        %248 = OpLoad %6 %211
+        %249 = OpIAdd %6 %248 %27
+               OpStore %211 %249
+               OpBranch %247
+        %247 = OpLabel
+               OpBranch %228
+        %228 = OpLabel
+               OpBranch %216
+        %216 = OpLabel
+        %259 = OpLoad %6 %212
+        %260 = OpIAdd %6 %259 %27
+               OpStore %212 %260
+               OpBranch %213
+        %215 = OpLabel
+        %261 = OpLoad %6 %211
+        %262 = OpIEqual %40 %261 %219
+               OpSelectionMerge %264 None
+               OpBranchConditional %262 %263 %269
+        %263 = OpLabel
+               OpStore %266 %268
+               OpBranch %264
+        %269 = OpLabel
+               OpStore %266 %270
+               OpBranch %264
+        %264 = OpLabel
+               OpReturn
+               OpFunctionEnd
+         %13 = OpFunction %2 None %10
+         %11 = OpFunctionParameter %8
+         %12 = OpFunctionParameter %9
+         %14 = OpLabel
+         %25 = OpLoad %6 %12
+         %26 = OpAccessChain %9 %11 %24
+               OpStore %26 %25
+         %29 = OpAccessChain %9 %11 %27
+               OpStore %29 %28
+         %31 = OpAccessChain %9 %11 %30
+               OpStore %31 %28
+               OpReturn
+               OpFunctionEnd
+         %18 = OpFunction %2 None %15
+         %16 = OpFunctionParameter %9
+         %17 = OpFunctionParameter %9
+         %19 = OpLabel
+         %32 = OpVariable %9 Function
+         %65 = OpVariable %8 Function
+         %69 = OpVariable %9 Function
+         %91 = OpVariable %8 Function
+         %94 = OpVariable %9 Function
+               OpStore %32 %24
+               OpBranch %33
+         %33 = OpLabel
+               OpLoopMerge %35 %36 None
+               OpBranch %37
+         %37 = OpLabel
+         %38 = OpLoad %6 %32
+         %39 = OpLoad %6 %16
+         %41 = OpSLessThanEqual %40 %38 %39
+               OpBranchConditional %41 %34 %35
+         %34 = OpLabel
+         %42 = OpLoad %6 %17
+         %48 = OpLoad %6 %32
+         %50 = OpAccessChain %49 %47 %48 %24
+         %51 = OpLoad %6 %50
+         %52 = OpSLessThanEqual %40 %42 %51
+               OpSelectionMerge %54 None
+               OpBranchConditional %52 %53 %80
+         %53 = OpLabel
+         %55 = OpLoad %6 %32
+         %56 = OpAccessChain %49 %47 %55 %27
+         %57 = OpLoad %6 %56
+         %58 = OpIEqual %40 %57 %28
+               OpSelectionMerge %60 None
+               OpBranchConditional %58 %59 %75
+         %59 = OpLabel
+         %61 = OpLoad %6 %32
+         %62 = OpLoad %6 %16
+         %63 = OpAccessChain %49 %47 %61 %27
+               OpStore %63 %62
+         %64 = OpLoad %6 %16
+         %67 = OpAccessChain %66 %47 %64
+         %68 = OpLoad %7 %67
+               OpStore %65 %68
+         %70 = OpLoad %6 %17
+               OpStore %69 %70
+         %71 = OpFunctionCall %2 %13 %65 %69
+         %72 = OpLoad %7 %65
+         %73 = OpAccessChain %66 %47 %64
+               OpStore %73 %72
+               OpReturn
+         %75 = OpLabel
+         %76 = OpLoad %6 %32
+         %77 = OpAccessChain %49 %47 %76 %27
+         %78 = OpLoad %6 %77
+               OpStore %32 %78
+               OpBranch %36
+         %60 = OpLabel
+               OpUnreachable
+         %80 = OpLabel
+         %81 = OpLoad %6 %32
+         %82 = OpAccessChain %49 %47 %81 %30
+         %83 = OpLoad %6 %82
+         %84 = OpIEqual %40 %83 %28
+               OpSelectionMerge %86 None
+               OpBranchConditional %84 %85 %100
+         %85 = OpLabel
+         %87 = OpLoad %6 %32
+         %88 = OpLoad %6 %16
+         %89 = OpAccessChain %49 %47 %87 %30
+               OpStore %89 %88
+         %90 = OpLoad %6 %16
+         %92 = OpAccessChain %66 %47 %90
+         %93 = OpLoad %7 %92
+               OpStore %91 %93
+         %95 = OpLoad %6 %17
+               OpStore %94 %95
+         %96 = OpFunctionCall %2 %13 %91 %94
+         %97 = OpLoad %7 %91
+         %98 = OpAccessChain %66 %47 %90
+               OpStore %98 %97
+               OpReturn
+        %100 = OpLabel
+        %101 = OpLoad %6 %32
+        %102 = OpAccessChain %49 %47 %101 %30
+        %103 = OpLoad %6 %102
+               OpStore %32 %103
+               OpBranch %36
+         %86 = OpLabel
+               OpUnreachable
+         %54 = OpLabel
+               OpUnreachable
+         %36 = OpLabel
+               OpBranch %33
+         %35 = OpLabel
+               OpReturn
+               OpFunctionEnd
+         %22 = OpFunction %6 None %20
+         %21 = OpFunctionParameter %9
+         %23 = OpLabel
+        %105 = OpVariable %9 Function
+        %113 = OpVariable %8 Function
+        %129 = OpVariable %9 Function
+               OpStore %105 %24
+               OpBranch %106
+        %106 = OpLabel
+               OpLoopMerge %108 %109 None
+               OpBranch %110
+        %110 = OpLabel
+        %111 = OpLoad %6 %105
+        %112 = OpINotEqual %40 %111 %28
+               OpBranchConditional %112 %107 %108
+        %107 = OpLabel
+        %114 = OpLoad %6 %105
+        %115 = OpAccessChain %66 %47 %114
+        %116 = OpLoad %7 %115
+               OpStore %113 %116
+        %117 = OpAccessChain %9 %113 %24
+        %118 = OpLoad %6 %117
+        %119 = OpLoad %6 %21
+        %120 = OpIEqual %40 %118 %119
+               OpSelectionMerge %122 None
+               OpBranchConditional %120 %121 %122
+        %121 = OpLabel
+        %123 = OpLoad %6 %21
+               OpReturnValue %123
+        %122 = OpLabel
+        %125 = OpLoad %6 %21
+        %126 = OpAccessChain %9 %113 %24
+        %127 = OpLoad %6 %126
+        %128 = OpSGreaterThan %40 %125 %127
+               OpSelectionMerge %131 None
+               OpBranchConditional %128 %130 %134
+        %130 = OpLabel
+        %132 = OpAccessChain %9 %113 %30
+        %133 = OpLoad %6 %132
+               OpStore %129 %133
+               OpBranch %131
+        %134 = OpLabel
+        %135 = OpAccessChain %9 %113 %27
+        %136 = OpLoad %6 %135
+               OpStore %129 %136
+               OpBranch %131
+        %131 = OpLabel
+        %137 = OpLoad %6 %129
+               OpStore %105 %137
+               OpBranch %109
+        %109 = OpLabel
+               OpBranch %106
+        %108 = OpLabel
+               OpReturnValue %28
+               OpFunctionEnd
+END
+
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 256 256
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256
+
+EXPECT reference_framebuffer EQ_HISTOGRAM_EMD_BUFFER variant_framebuffer TOLERANCE 0.005
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/stable-binarysearch-tree-nested-if-and-conditional.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/stable-binarysearch-tree-nested-if-and-conditional.amber
new file mode 100644
index 0000000..fe0394a
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/stable-binarysearch-tree-nested-if-and-conditional.amber
@@ -0,0 +1,1267 @@
+#!amber
+
+# Copyright 2020 Google LLC
+#
+# 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.
+
+
+# A test for a bug found by GraphicsFuzz.
+
+# Short description: A fragment shader with nested if and conditional statement
+
+# The test passes because both shaders render the same image.
+
+SHADER vertex reference_vertex_shader PASSTHROUGH
+
+# reference_fragment_shader is derived from the following GLSL:
+# #version 320 es
+# precision highp float;
+#
+# precision highp int;
+#
+# layout(location = 0) out vec4 _GLF_color;
+#
+# struct BST
+# {
+#   int data;
+#   int leftIndex;
+#   int rightIndex;
+# };
+#
+# BST tree[10];
+#
+# void makeTreeNode(inout BST tree, int data)
+# {
+#   tree.data = data;
+#   tree.leftIndex = -1;
+#   tree.rightIndex = -1;
+# }
+# void insert(int treeIndex, int data)
+# {
+#   int baseIndex = 0;
+#   while (baseIndex <= treeIndex)
+#   {
+#     if (data <= tree[baseIndex].data)
+#     {
+#       if (tree[baseIndex].leftIndex == -1)
+#       {
+#         tree[baseIndex].leftIndex = treeIndex;
+#         makeTreeNode(tree[treeIndex], data);
+#         return;
+#       }
+#       else
+#       {
+#         baseIndex = tree[baseIndex].leftIndex;
+#         continue;
+#       }
+#     }
+#     else
+#     {
+#       if (tree[baseIndex].rightIndex == -1)
+#       {
+#         tree[baseIndex].rightIndex = treeIndex;
+#         makeTreeNode(tree[treeIndex], data);
+#         return;
+#       }
+#       else
+#       {
+#         baseIndex = tree[baseIndex].rightIndex;
+#         continue;
+#       }
+#     }
+#   }
+# }
+# int search(int target)
+# {
+#   BST currentNode;
+#   int index = 0;
+#   while (index != -1)
+#   {
+#     currentNode = tree[index];
+#     if (currentNode.data == target)
+#     {
+#       return target;
+#     }
+#     index = target > currentNode.data ? currentNode.rightIndex : currentNode.leftIndex;
+#   }
+#   return -1;
+# }
+# void main()
+# {
+#   int treeIndex = 0;
+#   makeTreeNode(tree[0], 9);
+#   treeIndex++;
+#   insert(treeIndex, 5);
+#   treeIndex++;
+#   insert(treeIndex, 12);
+#   treeIndex++;
+#   insert(treeIndex, 15);
+#   treeIndex++;
+#   insert(treeIndex, 7);
+#   treeIndex++;
+#   insert(treeIndex, 8);
+#   treeIndex++;
+#   insert(treeIndex, 2);
+#   treeIndex++;
+#   insert(treeIndex, 6);
+#   treeIndex++;
+#   insert(treeIndex, 17);
+#   treeIndex++;
+#   insert(treeIndex, 13);
+#   int count = 0;
+#   for (int i = 0; i < 20; i++)
+#   {
+#     int result = search(i);
+#     switch (i)
+#     {
+#     case 9:
+#     case 5:
+#     case 12:
+#     case 15:
+#     case 7:
+#     case 8:
+#     case 2:
+#     case 6:
+#     case 17:
+#     case 13:
+#       if (result == i)
+#       {
+#         count++;
+#       }
+#       break;
+#     default:
+#       if (result == -1)
+#       {
+#         count++;
+#       }
+#       break;
+#     }
+#   }
+#   if (count == 20)
+#   {
+#     _GLF_color = vec4(1.0, 0.0, 0.0, 1.0);
+#   }
+#   else
+#   {
+#     _GLF_color = vec4(0.0, 0.0, 1.0, 1.0);
+#   }
+# }
+SHADER fragment reference_fragment_shader SPIRV-ASM
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 10
+; Bound: 260
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %254
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 320
+               OpName %4 "main"
+               OpName %7 "BST"
+               OpMemberName %7 0 "data"
+               OpMemberName %7 1 "leftIndex"
+               OpMemberName %7 2 "rightIndex"
+               OpName %13 "makeTreeNode(struct-BST-i1-i1-i11;i1;"
+               OpName %11 "tree"
+               OpName %12 "data"
+               OpName %18 "insert(i1;i1;"
+               OpName %16 "treeIndex"
+               OpName %17 "data"
+               OpName %22 "search(i1;"
+               OpName %21 "target"
+               OpName %32 "baseIndex"
+               OpName %47 "tree"
+               OpName %65 "param"
+               OpName %69 "param"
+               OpName %91 "param"
+               OpName %94 "param"
+               OpName %105 "index"
+               OpName %113 "currentNode"
+               OpName %140 "treeIndex"
+               OpName %142 "param"
+               OpName %145 "param"
+               OpName %152 "param"
+               OpName %154 "param"
+               OpName %159 "param"
+               OpName %161 "param"
+               OpName %166 "param"
+               OpName %168 "param"
+               OpName %173 "param"
+               OpName %175 "param"
+               OpName %180 "param"
+               OpName %182 "param"
+               OpName %186 "param"
+               OpName %188 "param"
+               OpName %193 "param"
+               OpName %195 "param"
+               OpName %200 "param"
+               OpName %202 "param"
+               OpName %207 "param"
+               OpName %209 "param"
+               OpName %211 "count"
+               OpName %212 "i"
+               OpName %221 "result"
+               OpName %222 "param"
+               OpName %254 "_GLF_color"
+               OpDecorate %254 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeInt 32 1
+          %7 = OpTypeStruct %6 %6 %6
+          %8 = OpTypePointer Function %7
+          %9 = OpTypePointer Function %6
+         %10 = OpTypeFunction %2 %8 %9
+         %15 = OpTypeFunction %2 %9 %9
+         %20 = OpTypeFunction %6 %9
+         %24 = OpConstant %6 0
+         %27 = OpConstant %6 1
+         %28 = OpConstant %6 -1
+         %30 = OpConstant %6 2
+         %40 = OpTypeBool
+         %43 = OpTypeInt 32 0
+         %44 = OpConstant %43 10
+         %45 = OpTypeArray %7 %44
+         %46 = OpTypePointer Private %45
+         %47 = OpVariable %46 Private
+         %49 = OpTypePointer Private %6
+         %66 = OpTypePointer Private %7
+        %141 = OpConstant %6 9
+        %151 = OpConstant %6 5
+        %158 = OpConstant %6 12
+        %165 = OpConstant %6 15
+        %172 = OpConstant %6 7
+        %179 = OpConstant %6 8
+        %192 = OpConstant %6 6
+        %199 = OpConstant %6 17
+        %206 = OpConstant %6 13
+        %219 = OpConstant %6 20
+        %251 = OpTypeFloat 32
+        %252 = OpTypeVector %251 4
+        %253 = OpTypePointer Output %252
+        %254 = OpVariable %253 Output
+        %255 = OpConstant %251 1
+        %256 = OpConstant %251 0
+        %257 = OpConstantComposite %252 %255 %256 %256 %255
+        %259 = OpConstantComposite %252 %256 %256 %255 %255
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+        %140 = OpVariable %9 Function
+        %142 = OpVariable %8 Function
+        %145 = OpVariable %9 Function
+        %152 = OpVariable %9 Function
+        %154 = OpVariable %9 Function
+        %159 = OpVariable %9 Function
+        %161 = OpVariable %9 Function
+        %166 = OpVariable %9 Function
+        %168 = OpVariable %9 Function
+        %173 = OpVariable %9 Function
+        %175 = OpVariable %9 Function
+        %180 = OpVariable %9 Function
+        %182 = OpVariable %9 Function
+        %186 = OpVariable %9 Function
+        %188 = OpVariable %9 Function
+        %193 = OpVariable %9 Function
+        %195 = OpVariable %9 Function
+        %200 = OpVariable %9 Function
+        %202 = OpVariable %9 Function
+        %207 = OpVariable %9 Function
+        %209 = OpVariable %9 Function
+        %211 = OpVariable %9 Function
+        %212 = OpVariable %9 Function
+        %221 = OpVariable %9 Function
+        %222 = OpVariable %9 Function
+               OpStore %140 %24
+        %143 = OpAccessChain %66 %47 %24
+        %144 = OpLoad %7 %143
+               OpStore %142 %144
+               OpStore %145 %141
+        %146 = OpFunctionCall %2 %13 %142 %145
+        %147 = OpLoad %7 %142
+        %148 = OpAccessChain %66 %47 %24
+               OpStore %148 %147
+        %149 = OpLoad %6 %140
+        %150 = OpIAdd %6 %149 %27
+               OpStore %140 %150
+        %153 = OpLoad %6 %140
+               OpStore %152 %153
+               OpStore %154 %151
+        %155 = OpFunctionCall %2 %18 %152 %154
+        %156 = OpLoad %6 %140
+        %157 = OpIAdd %6 %156 %27
+               OpStore %140 %157
+        %160 = OpLoad %6 %140
+               OpStore %159 %160
+               OpStore %161 %158
+        %162 = OpFunctionCall %2 %18 %159 %161
+        %163 = OpLoad %6 %140
+        %164 = OpIAdd %6 %163 %27
+               OpStore %140 %164
+        %167 = OpLoad %6 %140
+               OpStore %166 %167
+               OpStore %168 %165
+        %169 = OpFunctionCall %2 %18 %166 %168
+        %170 = OpLoad %6 %140
+        %171 = OpIAdd %6 %170 %27
+               OpStore %140 %171
+        %174 = OpLoad %6 %140
+               OpStore %173 %174
+               OpStore %175 %172
+        %176 = OpFunctionCall %2 %18 %173 %175
+        %177 = OpLoad %6 %140
+        %178 = OpIAdd %6 %177 %27
+               OpStore %140 %178
+        %181 = OpLoad %6 %140
+               OpStore %180 %181
+               OpStore %182 %179
+        %183 = OpFunctionCall %2 %18 %180 %182
+        %184 = OpLoad %6 %140
+        %185 = OpIAdd %6 %184 %27
+               OpStore %140 %185
+        %187 = OpLoad %6 %140
+               OpStore %186 %187
+               OpStore %188 %30
+        %189 = OpFunctionCall %2 %18 %186 %188
+        %190 = OpLoad %6 %140
+        %191 = OpIAdd %6 %190 %27
+               OpStore %140 %191
+        %194 = OpLoad %6 %140
+               OpStore %193 %194
+               OpStore %195 %192
+        %196 = OpFunctionCall %2 %18 %193 %195
+        %197 = OpLoad %6 %140
+        %198 = OpIAdd %6 %197 %27
+               OpStore %140 %198
+        %201 = OpLoad %6 %140
+               OpStore %200 %201
+               OpStore %202 %199
+        %203 = OpFunctionCall %2 %18 %200 %202
+        %204 = OpLoad %6 %140
+        %205 = OpIAdd %6 %204 %27
+               OpStore %140 %205
+        %208 = OpLoad %6 %140
+               OpStore %207 %208
+               OpStore %209 %206
+        %210 = OpFunctionCall %2 %18 %207 %209
+               OpStore %211 %24
+               OpStore %212 %24
+               OpBranch %213
+        %213 = OpLabel
+               OpLoopMerge %215 %216 None
+               OpBranch %217
+        %217 = OpLabel
+        %218 = OpLoad %6 %212
+        %220 = OpSLessThan %40 %218 %219
+               OpBranchConditional %220 %214 %215
+        %214 = OpLabel
+        %223 = OpLoad %6 %212
+               OpStore %222 %223
+        %224 = OpFunctionCall %6 %22 %222
+               OpStore %221 %224
+        %225 = OpLoad %6 %212
+               OpSelectionMerge %228 None
+               OpSwitch %225 %227 9 %226 5 %226 12 %226 15 %226 7 %226 8 %226 2 %226 6 %226 17 %226 13 %226
+        %227 = OpLabel
+        %237 = OpLoad %6 %221
+        %238 = OpIEqual %40 %237 %28
+               OpSelectionMerge %240 None
+               OpBranchConditional %238 %239 %240
+        %239 = OpLabel
+        %241 = OpLoad %6 %211
+        %242 = OpIAdd %6 %241 %27
+               OpStore %211 %242
+               OpBranch %240
+        %240 = OpLabel
+               OpBranch %228
+        %226 = OpLabel
+        %229 = OpLoad %6 %221
+        %230 = OpLoad %6 %212
+        %231 = OpIEqual %40 %229 %230
+               OpSelectionMerge %233 None
+               OpBranchConditional %231 %232 %233
+        %232 = OpLabel
+        %234 = OpLoad %6 %211
+        %235 = OpIAdd %6 %234 %27
+               OpStore %211 %235
+               OpBranch %233
+        %233 = OpLabel
+               OpBranch %228
+        %228 = OpLabel
+               OpBranch %216
+        %216 = OpLabel
+        %245 = OpLoad %6 %212
+        %246 = OpIAdd %6 %245 %27
+               OpStore %212 %246
+               OpBranch %213
+        %215 = OpLabel
+        %247 = OpLoad %6 %211
+        %248 = OpIEqual %40 %247 %219
+               OpSelectionMerge %250 None
+               OpBranchConditional %248 %249 %258
+        %249 = OpLabel
+               OpStore %254 %257
+               OpBranch %250
+        %258 = OpLabel
+               OpStore %254 %259
+               OpBranch %250
+        %250 = OpLabel
+               OpReturn
+               OpFunctionEnd
+         %13 = OpFunction %2 None %10
+         %11 = OpFunctionParameter %8
+         %12 = OpFunctionParameter %9
+         %14 = OpLabel
+         %25 = OpLoad %6 %12
+         %26 = OpAccessChain %9 %11 %24
+               OpStore %26 %25
+         %29 = OpAccessChain %9 %11 %27
+               OpStore %29 %28
+         %31 = OpAccessChain %9 %11 %30
+               OpStore %31 %28
+               OpReturn
+               OpFunctionEnd
+         %18 = OpFunction %2 None %15
+         %16 = OpFunctionParameter %9
+         %17 = OpFunctionParameter %9
+         %19 = OpLabel
+         %32 = OpVariable %9 Function
+         %65 = OpVariable %8 Function
+         %69 = OpVariable %9 Function
+         %91 = OpVariable %8 Function
+         %94 = OpVariable %9 Function
+               OpStore %32 %24
+               OpBranch %33
+         %33 = OpLabel
+               OpLoopMerge %35 %36 None
+               OpBranch %37
+         %37 = OpLabel
+         %38 = OpLoad %6 %32
+         %39 = OpLoad %6 %16
+         %41 = OpSLessThanEqual %40 %38 %39
+               OpBranchConditional %41 %34 %35
+         %34 = OpLabel
+         %42 = OpLoad %6 %17
+         %48 = OpLoad %6 %32
+         %50 = OpAccessChain %49 %47 %48 %24
+         %51 = OpLoad %6 %50
+         %52 = OpSLessThanEqual %40 %42 %51
+               OpSelectionMerge %54 None
+               OpBranchConditional %52 %53 %80
+         %53 = OpLabel
+         %55 = OpLoad %6 %32
+         %56 = OpAccessChain %49 %47 %55 %27
+         %57 = OpLoad %6 %56
+         %58 = OpIEqual %40 %57 %28
+               OpSelectionMerge %60 None
+               OpBranchConditional %58 %59 %75
+         %59 = OpLabel
+         %61 = OpLoad %6 %32
+         %62 = OpLoad %6 %16
+         %63 = OpAccessChain %49 %47 %61 %27
+               OpStore %63 %62
+         %64 = OpLoad %6 %16
+         %67 = OpAccessChain %66 %47 %64
+         %68 = OpLoad %7 %67
+               OpStore %65 %68
+         %70 = OpLoad %6 %17
+               OpStore %69 %70
+         %71 = OpFunctionCall %2 %13 %65 %69
+         %72 = OpLoad %7 %65
+         %73 = OpAccessChain %66 %47 %64
+               OpStore %73 %72
+               OpReturn
+         %75 = OpLabel
+         %76 = OpLoad %6 %32
+         %77 = OpAccessChain %49 %47 %76 %27
+         %78 = OpLoad %6 %77
+               OpStore %32 %78
+               OpBranch %36
+         %60 = OpLabel
+               OpUnreachable
+         %80 = OpLabel
+         %81 = OpLoad %6 %32
+         %82 = OpAccessChain %49 %47 %81 %30
+         %83 = OpLoad %6 %82
+         %84 = OpIEqual %40 %83 %28
+               OpSelectionMerge %86 None
+               OpBranchConditional %84 %85 %100
+         %85 = OpLabel
+         %87 = OpLoad %6 %32
+         %88 = OpLoad %6 %16
+         %89 = OpAccessChain %49 %47 %87 %30
+               OpStore %89 %88
+         %90 = OpLoad %6 %16
+         %92 = OpAccessChain %66 %47 %90
+         %93 = OpLoad %7 %92
+               OpStore %91 %93
+         %95 = OpLoad %6 %17
+               OpStore %94 %95
+         %96 = OpFunctionCall %2 %13 %91 %94
+         %97 = OpLoad %7 %91
+         %98 = OpAccessChain %66 %47 %90
+               OpStore %98 %97
+               OpReturn
+        %100 = OpLabel
+        %101 = OpLoad %6 %32
+        %102 = OpAccessChain %49 %47 %101 %30
+        %103 = OpLoad %6 %102
+               OpStore %32 %103
+               OpBranch %36
+         %86 = OpLabel
+               OpUnreachable
+         %54 = OpLabel
+               OpUnreachable
+         %36 = OpLabel
+               OpBranch %33
+         %35 = OpLabel
+               OpReturn
+               OpFunctionEnd
+         %22 = OpFunction %6 None %20
+         %21 = OpFunctionParameter %9
+         %23 = OpLabel
+        %105 = OpVariable %9 Function
+        %113 = OpVariable %8 Function
+        %129 = OpVariable %9 Function
+               OpStore %105 %24
+               OpBranch %106
+        %106 = OpLabel
+               OpLoopMerge %108 %109 None
+               OpBranch %110
+        %110 = OpLabel
+        %111 = OpLoad %6 %105
+        %112 = OpINotEqual %40 %111 %28
+               OpBranchConditional %112 %107 %108
+        %107 = OpLabel
+        %114 = OpLoad %6 %105
+        %115 = OpAccessChain %66 %47 %114
+        %116 = OpLoad %7 %115
+               OpStore %113 %116
+        %117 = OpAccessChain %9 %113 %24
+        %118 = OpLoad %6 %117
+        %119 = OpLoad %6 %21
+        %120 = OpIEqual %40 %118 %119
+               OpSelectionMerge %122 None
+               OpBranchConditional %120 %121 %122
+        %121 = OpLabel
+        %123 = OpLoad %6 %21
+               OpReturnValue %123
+        %122 = OpLabel
+        %125 = OpLoad %6 %21
+        %126 = OpAccessChain %9 %113 %24
+        %127 = OpLoad %6 %126
+        %128 = OpSGreaterThan %40 %125 %127
+               OpSelectionMerge %131 None
+               OpBranchConditional %128 %130 %134
+        %130 = OpLabel
+        %132 = OpAccessChain %9 %113 %30
+        %133 = OpLoad %6 %132
+               OpStore %129 %133
+               OpBranch %131
+        %134 = OpLabel
+        %135 = OpAccessChain %9 %113 %27
+        %136 = OpLoad %6 %135
+               OpStore %129 %136
+               OpBranch %131
+        %131 = OpLabel
+        %137 = OpLoad %6 %129
+               OpStore %105 %137
+               OpBranch %109
+        %109 = OpLabel
+               OpBranch %106
+        %108 = OpLabel
+               OpReturnValue %28
+               OpFunctionEnd
+END
+
+
+BUFFER reference_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics reference_pipeline
+  ATTACH reference_vertex_shader
+  ATTACH reference_fragment_shader
+  FRAMEBUFFER_SIZE 256 256
+  BIND BUFFER reference_framebuffer AS color LOCATION 0
+END
+CLEAR_COLOR reference_pipeline 0 0 0 255
+
+CLEAR reference_pipeline
+RUN reference_pipeline DRAW_RECT POS 0 0 SIZE 256 256
+
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+# variant_fragment_shader is derived from the following GLSL:
+# #version 320 es
+# precision highp float;
+#
+# precision highp int;
+#
+# layout(set = 0, binding = 0) uniform buf0
+# {
+#   vec2 injectionSwitch; // x == 0.0, y == 1.0
+# };
+# layout(location = 0) out vec4 _GLF_color;
+#
+# struct BST
+# {
+#   int data;
+#   int leftIndex;
+#   int rightIndex;
+# };
+#
+# BST tree[10];
+#
+# void makeTreeNode(inout BST tree, int data)
+# {
+#   tree.data = data;
+#   tree.leftIndex = -1;
+#   tree.rightIndex = -1;
+# }
+# void insert(int treeIndex, int data)
+# {
+#   int baseIndex = 0;
+#   while (baseIndex <= treeIndex)
+#   {
+#     if (data <= tree[baseIndex].data)
+#     {
+#       if (tree[baseIndex].leftIndex == -1)
+#       {
+#         tree[baseIndex].leftIndex = treeIndex;
+#         // Always true.
+#         if (injectionSwitch.x < injectionSwitch.y)
+#         {
+#           makeTreeNode(tree[treeIndex], data);
+#         }
+#         // Always true.
+#         if (injectionSwitch.x < injectionSwitch.y)
+#         {
+#           return;
+#         }
+#       }
+#       else
+#       {
+#         baseIndex = tree[baseIndex].leftIndex;
+#         continue;
+#       }
+#     }
+#     else
+#     {
+#       // Conditional statement's result is irrelevant.
+#       if ((injectionSwitch.x < injectionSwitch.y ? tree[baseIndex].rightIndex : tree[baseIndex].rightIndex) == -1)
+#       {
+#         tree[baseIndex].rightIndex = treeIndex;
+#         makeTreeNode(tree[treeIndex], data);
+#         return;
+#       }
+#       else
+#       {
+#         baseIndex = tree[baseIndex].rightIndex;
+#         continue;
+#       }
+#     }
+#     // Always false.
+#     if (injectionSwitch.x > injectionSwitch.y)
+#     {
+#       return;
+#     }
+#   }
+# }
+# int search(int target)
+# {
+#   BST currentNode;
+#   int index = 0;
+#   while (index != -1)
+#   {
+#     currentNode = tree[index];
+#     if (currentNode.data == target)
+#     {
+#       return target;
+#     }
+#     index = target > currentNode.data ? currentNode.rightIndex : currentNode.leftIndex;
+#   }
+#   return -1;
+# }
+# void main()
+# {
+#   int treeIndex = 0;
+#   makeTreeNode(tree[0], 9);
+#   treeIndex++;
+#   insert(treeIndex, 5);
+#   treeIndex++;
+#   insert(treeIndex, 12);
+#   treeIndex++;
+#   insert(treeIndex, 15);
+#   treeIndex++;
+#   insert(treeIndex, 7);
+#   treeIndex++;
+#   insert(treeIndex, 8);
+#   treeIndex++;
+#   insert(treeIndex, 2);
+#   treeIndex++;
+#   insert(treeIndex, 6);
+#   treeIndex++;
+#   insert(treeIndex, 17);
+#   treeIndex++;
+#   insert(treeIndex, 13);
+#   int count = 0;
+#   for (int i = 0; i < 20; i++)
+#   {
+#     int result = search(i);
+#     switch (i)
+#     {
+#     case 9:
+#     case 5:
+#     case 12:
+#     case 15:
+#     case 7:
+#     case 8:
+#     case 2:
+#     case 6:
+#     case 17:
+#     case 13:
+#       if (result == i)
+#       {
+#         count++;
+#       }
+#       break;
+#     default:
+#       if (result == -1)
+#       {
+#         count++;
+#       }
+#       break;
+#     }
+#   }
+#   if (count == 20)
+#   {
+#     _GLF_color = vec4(1.0, 0.0, 0.0, 1.0);
+#   }
+#   else
+#   {
+#     _GLF_color = vec4(0.0, 0.0, 1.0, 1.0);
+#   }
+# }
+SHADER fragment variant_fragment_shader SPIRV-ASM
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 10
+; Bound: 302
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %296
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 320
+               OpName %4 "main"
+               OpName %7 "BST"
+               OpMemberName %7 0 "data"
+               OpMemberName %7 1 "leftIndex"
+               OpMemberName %7 2 "rightIndex"
+               OpName %13 "makeTreeNode(struct-BST-i1-i1-i11;i1;"
+               OpName %11 "tree"
+               OpName %12 "data"
+               OpName %18 "insert(i1;i1;"
+               OpName %16 "treeIndex"
+               OpName %17 "data"
+               OpName %22 "search(i1;"
+               OpName %21 "target"
+               OpName %32 "baseIndex"
+               OpName %47 "tree"
+               OpName %66 "buf0"
+               OpMemberName %66 0 "injectionSwitch"
+               OpName %68 ""
+               OpName %80 "param"
+               OpName %84 "param"
+               OpName %126 "param"
+               OpName %129 "param"
+               OpName %148 "index"
+               OpName %156 "currentNode"
+               OpName %183 "treeIndex"
+               OpName %185 "param"
+               OpName %188 "param"
+               OpName %195 "param"
+               OpName %197 "param"
+               OpName %202 "param"
+               OpName %204 "param"
+               OpName %209 "param"
+               OpName %211 "param"
+               OpName %216 "param"
+               OpName %218 "param"
+               OpName %223 "param"
+               OpName %225 "param"
+               OpName %229 "param"
+               OpName %231 "param"
+               OpName %236 "param"
+               OpName %238 "param"
+               OpName %243 "param"
+               OpName %245 "param"
+               OpName %250 "param"
+               OpName %252 "param"
+               OpName %254 "count"
+               OpName %255 "i"
+               OpName %264 "result"
+               OpName %265 "param"
+               OpName %296 "_GLF_color"
+               OpMemberDecorate %66 0 Offset 0
+               OpDecorate %66 Block
+               OpDecorate %68 DescriptorSet 0
+               OpDecorate %68 Binding 0
+               OpDecorate %296 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeInt 32 1
+          %7 = OpTypeStruct %6 %6 %6
+          %8 = OpTypePointer Function %7
+          %9 = OpTypePointer Function %6
+         %10 = OpTypeFunction %2 %8 %9
+         %15 = OpTypeFunction %2 %9 %9
+         %20 = OpTypeFunction %6 %9
+         %24 = OpConstant %6 0
+         %27 = OpConstant %6 1
+         %28 = OpConstant %6 -1
+         %30 = OpConstant %6 2
+         %40 = OpTypeBool
+         %43 = OpTypeInt 32 0
+         %44 = OpConstant %43 10
+         %45 = OpTypeArray %7 %44
+         %46 = OpTypePointer Private %45
+         %47 = OpVariable %46 Private
+         %49 = OpTypePointer Private %6
+         %64 = OpTypeFloat 32
+         %65 = OpTypeVector %64 2
+         %66 = OpTypeStruct %65
+         %67 = OpTypePointer Uniform %66
+         %68 = OpVariable %67 Uniform
+         %69 = OpConstant %43 0
+         %70 = OpTypePointer Uniform %64
+         %73 = OpConstant %43 1
+         %81 = OpTypePointer Private %7
+        %184 = OpConstant %6 9
+        %194 = OpConstant %6 5
+        %201 = OpConstant %6 12
+        %208 = OpConstant %6 15
+        %215 = OpConstant %6 7
+        %222 = OpConstant %6 8
+        %235 = OpConstant %6 6
+        %242 = OpConstant %6 17
+        %249 = OpConstant %6 13
+        %262 = OpConstant %6 20
+        %294 = OpTypeVector %64 4
+        %295 = OpTypePointer Output %294
+        %296 = OpVariable %295 Output
+        %297 = OpConstant %64 1
+        %298 = OpConstant %64 0
+        %299 = OpConstantComposite %294 %297 %298 %298 %297
+        %301 = OpConstantComposite %294 %298 %298 %297 %297
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+        %183 = OpVariable %9 Function
+        %185 = OpVariable %8 Function
+        %188 = OpVariable %9 Function
+        %195 = OpVariable %9 Function
+        %197 = OpVariable %9 Function
+        %202 = OpVariable %9 Function
+        %204 = OpVariable %9 Function
+        %209 = OpVariable %9 Function
+        %211 = OpVariable %9 Function
+        %216 = OpVariable %9 Function
+        %218 = OpVariable %9 Function
+        %223 = OpVariable %9 Function
+        %225 = OpVariable %9 Function
+        %229 = OpVariable %9 Function
+        %231 = OpVariable %9 Function
+        %236 = OpVariable %9 Function
+        %238 = OpVariable %9 Function
+        %243 = OpVariable %9 Function
+        %245 = OpVariable %9 Function
+        %250 = OpVariable %9 Function
+        %252 = OpVariable %9 Function
+        %254 = OpVariable %9 Function
+        %255 = OpVariable %9 Function
+        %264 = OpVariable %9 Function
+        %265 = OpVariable %9 Function
+               OpStore %183 %24
+        %186 = OpAccessChain %81 %47 %24
+        %187 = OpLoad %7 %186
+               OpStore %185 %187
+               OpStore %188 %184
+        %189 = OpFunctionCall %2 %13 %185 %188
+        %190 = OpLoad %7 %185
+        %191 = OpAccessChain %81 %47 %24
+               OpStore %191 %190
+        %192 = OpLoad %6 %183
+        %193 = OpIAdd %6 %192 %27
+               OpStore %183 %193
+        %196 = OpLoad %6 %183
+               OpStore %195 %196
+               OpStore %197 %194
+        %198 = OpFunctionCall %2 %18 %195 %197
+        %199 = OpLoad %6 %183
+        %200 = OpIAdd %6 %199 %27
+               OpStore %183 %200
+        %203 = OpLoad %6 %183
+               OpStore %202 %203
+               OpStore %204 %201
+        %205 = OpFunctionCall %2 %18 %202 %204
+        %206 = OpLoad %6 %183
+        %207 = OpIAdd %6 %206 %27
+               OpStore %183 %207
+        %210 = OpLoad %6 %183
+               OpStore %209 %210
+               OpStore %211 %208
+        %212 = OpFunctionCall %2 %18 %209 %211
+        %213 = OpLoad %6 %183
+        %214 = OpIAdd %6 %213 %27
+               OpStore %183 %214
+        %217 = OpLoad %6 %183
+               OpStore %216 %217
+               OpStore %218 %215
+        %219 = OpFunctionCall %2 %18 %216 %218
+        %220 = OpLoad %6 %183
+        %221 = OpIAdd %6 %220 %27
+               OpStore %183 %221
+        %224 = OpLoad %6 %183
+               OpStore %223 %224
+               OpStore %225 %222
+        %226 = OpFunctionCall %2 %18 %223 %225
+        %227 = OpLoad %6 %183
+        %228 = OpIAdd %6 %227 %27
+               OpStore %183 %228
+        %230 = OpLoad %6 %183
+               OpStore %229 %230
+               OpStore %231 %30
+        %232 = OpFunctionCall %2 %18 %229 %231
+        %233 = OpLoad %6 %183
+        %234 = OpIAdd %6 %233 %27
+               OpStore %183 %234
+        %237 = OpLoad %6 %183
+               OpStore %236 %237
+               OpStore %238 %235
+        %239 = OpFunctionCall %2 %18 %236 %238
+        %240 = OpLoad %6 %183
+        %241 = OpIAdd %6 %240 %27
+               OpStore %183 %241
+        %244 = OpLoad %6 %183
+               OpStore %243 %244
+               OpStore %245 %242
+        %246 = OpFunctionCall %2 %18 %243 %245
+        %247 = OpLoad %6 %183
+        %248 = OpIAdd %6 %247 %27
+               OpStore %183 %248
+        %251 = OpLoad %6 %183
+               OpStore %250 %251
+               OpStore %252 %249
+        %253 = OpFunctionCall %2 %18 %250 %252
+               OpStore %254 %24
+               OpStore %255 %24
+               OpBranch %256
+        %256 = OpLabel
+               OpLoopMerge %258 %259 None
+               OpBranch %260
+        %260 = OpLabel
+        %261 = OpLoad %6 %255
+        %263 = OpSLessThan %40 %261 %262
+               OpBranchConditional %263 %257 %258
+        %257 = OpLabel
+        %266 = OpLoad %6 %255
+               OpStore %265 %266
+        %267 = OpFunctionCall %6 %22 %265
+               OpStore %264 %267
+        %268 = OpLoad %6 %255
+               OpSelectionMerge %271 None
+               OpSwitch %268 %270 9 %269 5 %269 12 %269 15 %269 7 %269 8 %269 2 %269 6 %269 17 %269 13 %269
+        %270 = OpLabel
+        %280 = OpLoad %6 %264
+        %281 = OpIEqual %40 %280 %28
+               OpSelectionMerge %283 None
+               OpBranchConditional %281 %282 %283
+        %282 = OpLabel
+        %284 = OpLoad %6 %254
+        %285 = OpIAdd %6 %284 %27
+               OpStore %254 %285
+               OpBranch %283
+        %283 = OpLabel
+               OpBranch %271
+        %269 = OpLabel
+        %272 = OpLoad %6 %264
+        %273 = OpLoad %6 %255
+        %274 = OpIEqual %40 %272 %273
+               OpSelectionMerge %276 None
+               OpBranchConditional %274 %275 %276
+        %275 = OpLabel
+        %277 = OpLoad %6 %254
+        %278 = OpIAdd %6 %277 %27
+               OpStore %254 %278
+               OpBranch %276
+        %276 = OpLabel
+               OpBranch %271
+        %271 = OpLabel
+               OpBranch %259
+        %259 = OpLabel
+        %288 = OpLoad %6 %255
+        %289 = OpIAdd %6 %288 %27
+               OpStore %255 %289
+               OpBranch %256
+        %258 = OpLabel
+        %290 = OpLoad %6 %254
+        %291 = OpIEqual %40 %290 %262
+               OpSelectionMerge %293 None
+               OpBranchConditional %291 %292 %300
+        %292 = OpLabel
+               OpStore %296 %299
+               OpBranch %293
+        %300 = OpLabel
+               OpStore %296 %301
+               OpBranch %293
+        %293 = OpLabel
+               OpReturn
+               OpFunctionEnd
+         %13 = OpFunction %2 None %10
+         %11 = OpFunctionParameter %8
+         %12 = OpFunctionParameter %9
+         %14 = OpLabel
+         %25 = OpLoad %6 %12
+         %26 = OpAccessChain %9 %11 %24
+               OpStore %26 %25
+         %29 = OpAccessChain %9 %11 %27
+               OpStore %29 %28
+         %31 = OpAccessChain %9 %11 %30
+               OpStore %31 %28
+               OpReturn
+               OpFunctionEnd
+         %18 = OpFunction %2 None %15
+         %16 = OpFunctionParameter %9
+         %17 = OpFunctionParameter %9
+         %19 = OpLabel
+         %32 = OpVariable %9 Function
+         %80 = OpVariable %8 Function
+         %84 = OpVariable %9 Function
+        %108 = OpVariable %9 Function
+        %126 = OpVariable %8 Function
+        %129 = OpVariable %9 Function
+               OpStore %32 %24
+               OpBranch %33
+         %33 = OpLabel
+               OpLoopMerge %35 %36 None
+               OpBranch %37
+         %37 = OpLabel
+         %38 = OpLoad %6 %32
+         %39 = OpLoad %6 %16
+         %41 = OpSLessThanEqual %40 %38 %39
+               OpBranchConditional %41 %34 %35
+         %34 = OpLabel
+         %42 = OpLoad %6 %17
+         %48 = OpLoad %6 %32
+         %50 = OpAccessChain %49 %47 %48 %24
+         %51 = OpLoad %6 %50
+         %52 = OpSLessThanEqual %40 %42 %51
+               OpSelectionMerge %54 None
+               OpBranchConditional %52 %53 %102
+         %53 = OpLabel
+         %55 = OpLoad %6 %32
+         %56 = OpAccessChain %49 %47 %55 %27
+         %57 = OpLoad %6 %56
+         %58 = OpIEqual %40 %57 %28
+               OpSelectionMerge %60 None
+               OpBranchConditional %58 %59 %97
+         %59 = OpLabel
+         %61 = OpLoad %6 %32
+         %62 = OpLoad %6 %16
+         %63 = OpAccessChain %49 %47 %61 %27
+               OpStore %63 %62
+         %71 = OpAccessChain %70 %68 %24 %69
+         %72 = OpLoad %64 %71
+         %74 = OpAccessChain %70 %68 %24 %73
+         %75 = OpLoad %64 %74
+         %76 = OpFOrdLessThan %40 %72 %75
+               OpSelectionMerge %78 None
+               OpBranchConditional %76 %77 %78
+         %77 = OpLabel
+         %79 = OpLoad %6 %16
+         %82 = OpAccessChain %81 %47 %79
+         %83 = OpLoad %7 %82
+               OpStore %80 %83
+         %85 = OpLoad %6 %17
+               OpStore %84 %85
+         %86 = OpFunctionCall %2 %13 %80 %84
+         %87 = OpLoad %7 %80
+         %88 = OpAccessChain %81 %47 %79
+               OpStore %88 %87
+               OpBranch %78
+         %78 = OpLabel
+         %89 = OpAccessChain %70 %68 %24 %69
+         %90 = OpLoad %64 %89
+         %91 = OpAccessChain %70 %68 %24 %73
+         %92 = OpLoad %64 %91
+         %93 = OpFOrdLessThan %40 %90 %92
+               OpSelectionMerge %95 None
+               OpBranchConditional %93 %94 %95
+         %94 = OpLabel
+               OpReturn
+         %95 = OpLabel
+               OpBranch %60
+         %97 = OpLabel
+         %98 = OpLoad %6 %32
+         %99 = OpAccessChain %49 %47 %98 %27
+        %100 = OpLoad %6 %99
+               OpStore %32 %100
+               OpBranch %36
+         %60 = OpLabel
+               OpBranch %54
+        %102 = OpLabel
+        %103 = OpAccessChain %70 %68 %24 %69
+        %104 = OpLoad %64 %103
+        %105 = OpAccessChain %70 %68 %24 %73
+        %106 = OpLoad %64 %105
+        %107 = OpFOrdLessThan %40 %104 %106
+               OpSelectionMerge %110 None
+               OpBranchConditional %107 %109 %114
+        %109 = OpLabel
+        %111 = OpLoad %6 %32
+        %112 = OpAccessChain %49 %47 %111 %30
+        %113 = OpLoad %6 %112
+               OpStore %108 %113
+               OpBranch %110
+        %114 = OpLabel
+        %115 = OpLoad %6 %32
+        %116 = OpAccessChain %49 %47 %115 %30
+        %117 = OpLoad %6 %116
+               OpStore %108 %117
+               OpBranch %110
+        %110 = OpLabel
+        %118 = OpLoad %6 %108
+        %119 = OpIEqual %40 %118 %28
+               OpSelectionMerge %121 None
+               OpBranchConditional %119 %120 %135
+        %120 = OpLabel
+        %122 = OpLoad %6 %32
+        %123 = OpLoad %6 %16
+        %124 = OpAccessChain %49 %47 %122 %30
+               OpStore %124 %123
+        %125 = OpLoad %6 %16
+        %127 = OpAccessChain %81 %47 %125
+        %128 = OpLoad %7 %127
+               OpStore %126 %128
+        %130 = OpLoad %6 %17
+               OpStore %129 %130
+        %131 = OpFunctionCall %2 %13 %126 %129
+        %132 = OpLoad %7 %126
+        %133 = OpAccessChain %81 %47 %125
+               OpStore %133 %132
+               OpReturn
+        %135 = OpLabel
+        %136 = OpLoad %6 %32
+        %137 = OpAccessChain %49 %47 %136 %30
+        %138 = OpLoad %6 %137
+               OpStore %32 %138
+               OpBranch %36
+        %121 = OpLabel
+               OpUnreachable
+         %54 = OpLabel
+        %140 = OpAccessChain %70 %68 %24 %69
+        %141 = OpLoad %64 %140
+        %142 = OpAccessChain %70 %68 %24 %73
+        %143 = OpLoad %64 %142
+        %144 = OpFOrdGreaterThan %40 %141 %143
+               OpSelectionMerge %146 None
+               OpBranchConditional %144 %145 %146
+        %145 = OpLabel
+               OpReturn
+        %146 = OpLabel
+               OpBranch %36
+         %36 = OpLabel
+               OpBranch %33
+         %35 = OpLabel
+               OpReturn
+               OpFunctionEnd
+         %22 = OpFunction %6 None %20
+         %21 = OpFunctionParameter %9
+         %23 = OpLabel
+        %148 = OpVariable %9 Function
+        %156 = OpVariable %8 Function
+        %172 = OpVariable %9 Function
+               OpStore %148 %24
+               OpBranch %149
+        %149 = OpLabel
+               OpLoopMerge %151 %152 None
+               OpBranch %153
+        %153 = OpLabel
+        %154 = OpLoad %6 %148
+        %155 = OpINotEqual %40 %154 %28
+               OpBranchConditional %155 %150 %151
+        %150 = OpLabel
+        %157 = OpLoad %6 %148
+        %158 = OpAccessChain %81 %47 %157
+        %159 = OpLoad %7 %158
+               OpStore %156 %159
+        %160 = OpAccessChain %9 %156 %24
+        %161 = OpLoad %6 %160
+        %162 = OpLoad %6 %21
+        %163 = OpIEqual %40 %161 %162
+               OpSelectionMerge %165 None
+               OpBranchConditional %163 %164 %165
+        %164 = OpLabel
+        %166 = OpLoad %6 %21
+               OpReturnValue %166
+        %165 = OpLabel
+        %168 = OpLoad %6 %21
+        %169 = OpAccessChain %9 %156 %24
+        %170 = OpLoad %6 %169
+        %171 = OpSGreaterThan %40 %168 %170
+               OpSelectionMerge %174 None
+               OpBranchConditional %171 %173 %177
+        %173 = OpLabel
+        %175 = OpAccessChain %9 %156 %30
+        %176 = OpLoad %6 %175
+               OpStore %172 %176
+               OpBranch %174
+        %177 = OpLabel
+        %178 = OpAccessChain %9 %156 %27
+        %179 = OpLoad %6 %178
+               OpStore %172 %179
+               OpBranch %174
+        %174 = OpLabel
+        %180 = OpLoad %6 %172
+               OpStore %148 %180
+               OpBranch %152
+        %152 = OpLabel
+               OpBranch %149
+        %151 = OpLabel
+               OpReturnValue %28
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# injectionSwitch
+BUFFER variant_injectionSwitch DATA_TYPE vec2<float> DATA
+ 0.0 1.0
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 256 256
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant_injectionSwitch AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256
+
+EXPECT reference_framebuffer EQ_HISTOGRAM_EMD_BUFFER variant_framebuffer TOLERANCE 0.005
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/stable-collatz-push-constant-with-nested-min-max.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/stable-collatz-push-constant-with-nested-min-max.amber
new file mode 100644
index 0000000..be3de84
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/stable-collatz-push-constant-with-nested-min-max.amber
@@ -0,0 +1,551 @@
+#!amber
+
+# Copyright 2020 Google LLC
+#
+# 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.
+
+
+# A test for a bug found by GraphicsFuzz.
+
+# Short description: A fragment shader with push constant and nested min max
+
+# The test passes because both shaders render the same image.
+
+SHADER vertex reference_vertex_shader PASSTHROUGH
+
+# reference_fragment_shader is derived from the following GLSL:
+# #version 320 es
+# precision highp float;
+#
+# precision highp int;
+#
+# layout(location = 0) out vec4 _GLF_color;
+#
+# layout(set = 0, binding = 0) uniform buf0 {
+#  vec2 resolution;
+# };
+# const vec4 pal[16] = vec4[16](vec4(0.0, 0.0, 0.0, 1.0), vec4(0.5, 0.0, 0.0, 1.0), vec4(0.0, 0.5, 0.0, 1.0), vec4(0.5, 0.5, 0.0, 1.0), vec4(0.0, 0.0, 0.5, 1.0), vec4(0.5, 0.0, 0.5, 1.0), vec4(0.0, 0.5, 0.5, 1.0), vec4(0.5, 0.5, 0.5, 1.0), vec4(0.0, 0.0, 0.0, 1.0), vec4(1.0, 0.0, 0.0, 1.0), vec4(0.0, 1.0, 0.0, 1.0), vec4(1.0, 1.0, 0.0, 1.0), vec4(0.0, 0.0, 1.0, 1.0), vec4(1.0, 0.0, 1.0, 1.0), vec4(0.0, 1.0, 1.0, 1.0), vec4(1.0, 1.0, 1.0, 1.0));
+#
+# int collatz(int v)
+# {
+#  int count = 0;
+#  while(v > 1)
+#   {
+#    if((v & 1) == 1)
+#     {
+#      v = 3 * v + 1;
+#     }
+#    else
+#     {
+#      v /= 2;
+#     }
+#    count ++;
+#   }
+#  return count;
+# }
+# void main()
+# {
+#  vec2 lin = gl_FragCoord.xy / resolution;
+#  lin = floor(lin * 8.0);
+#  int v = int(lin.x) * 8 + int(lin.y);
+#  _GLF_color = pal[collatz(v) % 16];
+# }
+SHADER fragment reference_fragment_shader SPIRV-ASM
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 10
+; Bound: 108
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %47 %76
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 320
+               OpName %4 "main"
+               OpName %10 "collatz(i1;"
+               OpName %9 "v"
+               OpName %12 "count"
+               OpName %44 "lin"
+               OpName %47 "gl_FragCoord"
+               OpName %50 "buf0"
+               OpMemberName %50 0 "resolution"
+               OpName %52 ""
+               OpName %61 "v"
+               OpName %76 "_GLF_color"
+               OpName %98 "param"
+               OpName %104 "indexable"
+               OpDecorate %47 BuiltIn FragCoord
+               OpMemberDecorate %50 0 Offset 0
+               OpDecorate %50 Block
+               OpDecorate %52 DescriptorSet 0
+               OpDecorate %52 Binding 0
+               OpDecorate %76 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeInt 32 1
+          %7 = OpTypePointer Function %6
+          %8 = OpTypeFunction %6 %7
+         %13 = OpConstant %6 0
+         %20 = OpConstant %6 1
+         %21 = OpTypeBool
+         %28 = OpConstant %6 3
+         %33 = OpConstant %6 2
+         %41 = OpTypeFloat 32
+         %42 = OpTypeVector %41 2
+         %43 = OpTypePointer Function %42
+         %45 = OpTypeVector %41 4
+         %46 = OpTypePointer Input %45
+         %47 = OpVariable %46 Input
+         %50 = OpTypeStruct %42
+         %51 = OpTypePointer Uniform %50
+         %52 = OpVariable %51 Uniform
+         %53 = OpTypePointer Uniform %42
+         %58 = OpConstant %41 8
+         %62 = OpTypeInt 32 0
+         %63 = OpConstant %62 0
+         %64 = OpTypePointer Function %41
+         %68 = OpConstant %6 8
+         %70 = OpConstant %62 1
+         %75 = OpTypePointer Output %45
+         %76 = OpVariable %75 Output
+         %77 = OpConstant %62 16
+         %78 = OpTypeArray %45 %77
+         %79 = OpConstant %41 0
+         %80 = OpConstant %41 1
+         %81 = OpConstantComposite %45 %79 %79 %79 %80
+         %82 = OpConstant %41 0.5
+         %83 = OpConstantComposite %45 %82 %79 %79 %80
+         %84 = OpConstantComposite %45 %79 %82 %79 %80
+         %85 = OpConstantComposite %45 %82 %82 %79 %80
+         %86 = OpConstantComposite %45 %79 %79 %82 %80
+         %87 = OpConstantComposite %45 %82 %79 %82 %80
+         %88 = OpConstantComposite %45 %79 %82 %82 %80
+         %89 = OpConstantComposite %45 %82 %82 %82 %80
+         %90 = OpConstantComposite %45 %80 %79 %79 %80
+         %91 = OpConstantComposite %45 %79 %80 %79 %80
+         %92 = OpConstantComposite %45 %80 %80 %79 %80
+         %93 = OpConstantComposite %45 %79 %79 %80 %80
+         %94 = OpConstantComposite %45 %80 %79 %80 %80
+         %95 = OpConstantComposite %45 %79 %80 %80 %80
+         %96 = OpConstantComposite %45 %80 %80 %80 %80
+         %97 = OpConstantComposite %78 %81 %83 %84 %85 %86 %87 %88 %89 %81 %90 %91 %92 %93 %94 %95 %96
+        %101 = OpConstant %6 16
+        %103 = OpTypePointer Function %78
+        %105 = OpTypePointer Function %45
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+         %44 = OpVariable %43 Function
+         %61 = OpVariable %7 Function
+         %98 = OpVariable %7 Function
+        %104 = OpVariable %103 Function
+         %48 = OpLoad %45 %47
+         %49 = OpVectorShuffle %42 %48 %48 0 1
+         %54 = OpAccessChain %53 %52 %13
+         %55 = OpLoad %42 %54
+         %56 = OpFDiv %42 %49 %55
+               OpStore %44 %56
+         %57 = OpLoad %42 %44
+         %59 = OpVectorTimesScalar %42 %57 %58
+         %60 = OpExtInst %42 %1 Floor %59
+               OpStore %44 %60
+         %65 = OpAccessChain %64 %44 %63
+         %66 = OpLoad %41 %65
+         %67 = OpConvertFToS %6 %66
+         %69 = OpIMul %6 %67 %68
+         %71 = OpAccessChain %64 %44 %70
+         %72 = OpLoad %41 %71
+         %73 = OpConvertFToS %6 %72
+         %74 = OpIAdd %6 %69 %73
+               OpStore %61 %74
+         %99 = OpLoad %6 %61
+               OpStore %98 %99
+        %100 = OpFunctionCall %6 %10 %98
+        %102 = OpSMod %6 %100 %101
+               OpStore %104 %97
+        %106 = OpAccessChain %105 %104 %102
+        %107 = OpLoad %45 %106
+               OpStore %76 %107
+               OpReturn
+               OpFunctionEnd
+         %10 = OpFunction %6 None %8
+          %9 = OpFunctionParameter %7
+         %11 = OpLabel
+         %12 = OpVariable %7 Function
+               OpStore %12 %13
+               OpBranch %14
+         %14 = OpLabel
+               OpLoopMerge %16 %17 None
+               OpBranch %18
+         %18 = OpLabel
+         %19 = OpLoad %6 %9
+         %22 = OpSGreaterThan %21 %19 %20
+               OpBranchConditional %22 %15 %16
+         %15 = OpLabel
+         %23 = OpLoad %6 %9
+         %24 = OpBitwiseAnd %6 %23 %20
+         %25 = OpIEqual %21 %24 %20
+               OpSelectionMerge %27 None
+               OpBranchConditional %25 %26 %32
+         %26 = OpLabel
+         %29 = OpLoad %6 %9
+         %30 = OpIMul %6 %28 %29
+         %31 = OpIAdd %6 %30 %20
+               OpStore %9 %31
+               OpBranch %27
+         %32 = OpLabel
+         %34 = OpLoad %6 %9
+         %35 = OpSDiv %6 %34 %33
+               OpStore %9 %35
+               OpBranch %27
+         %27 = OpLabel
+         %36 = OpLoad %6 %12
+         %37 = OpIAdd %6 %36 %20
+               OpStore %12 %37
+               OpBranch %17
+         %17 = OpLabel
+               OpBranch %14
+         %16 = OpLabel
+         %38 = OpLoad %6 %12
+               OpReturnValue %38
+               OpFunctionEnd
+END
+
+# uniforms for reference
+
+# resolution
+BUFFER reference_resolution DATA_TYPE vec2<float> DATA
+ 256.0 256.0
+END
+
+BUFFER reference_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics reference_pipeline
+  ATTACH reference_vertex_shader
+  ATTACH reference_fragment_shader
+  FRAMEBUFFER_SIZE 256 256
+  BIND BUFFER reference_framebuffer AS color LOCATION 0
+  BIND BUFFER reference_resolution AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR reference_pipeline 0 0 0 255
+
+CLEAR reference_pipeline
+RUN reference_pipeline DRAW_RECT POS 0 0 SIZE 256 256
+
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+# variant_fragment_shader is derived from the following GLSL:
+# #version 320 es
+# precision highp float;
+#
+# precision highp int;
+#
+# layout(location = 0) out vec4 _GLF_color;
+#
+# layout(push_constant) uniform buf_push {
+#  vec2 resolution;
+# };
+# const vec4 pal[16] = vec4[16](vec4(0.0, 0.0, 0.0, 1.0), vec4(0.5, 0.0, 0.0, 1.0), vec4(0.0, 0.5, 0.0, 1.0), vec4(0.5, 0.5, 0.0, 1.0), vec4(0.0, 0.0, 0.5, 1.0), vec4(0.5, 0.0, 0.5, 1.0), vec4(0.0, 0.5, 0.5, 1.0), vec4(0.5, 0.5, 0.5, 1.0), vec4(0.0, 0.0, 0.0, 1.0), vec4(1.0, 0.0, 0.0, 1.0), vec4(0.0, 1.0, 0.0, 1.0), vec4(1.0, 1.0, 0.0, 1.0), vec4(0.0, 0.0, 1.0, 1.0), vec4(1.0, 0.0, 1.0, 1.0), vec4(0.0, 1.0, 1.0, 1.0), vec4(1.0, 1.0, 1.0, 1.0));
+#
+# int collatz(int v)
+# {
+#  int count = 0;
+#  while(v > 1)
+#   {
+#    if((v & 1) == 1)
+#     {
+#      v = 3 * v + 1;
+#     }
+#    else
+#     {
+#      v /= 2;
+#     }
+#    count ++;
+#   }
+#  return count;
+# }
+# void main()
+# {
+#     // vec2 max_c == (gl_FragCoord.xy / resolution).
+#     vec2 max_c = max(   // This should return the same result.
+#                         gl_FragCoord.xy / resolution,
+#                         gl_FragCoord.xy / (vec2(resolution.x, resolution.y))
+#                     );
+#     // vec2 max_a == (gl_FragCoord.xy / resolution)
+#     vec2 max_a = max(
+#                         // gl_FragCoord.y < 0 is always false.
+#                         // mix operation returns vec2(0.0 , 0.0).
+#                         // cosine of 0 is 1.
+#                         // anything divided by 1 stays the same.
+#                         max_c / cos(mix(vec2(1.0, 0.0), vec2(0.0, 218.851), bvec2(true, (gl_FragCoord.y < 0.0)))),
+#                         gl_FragCoord.xy / resolution
+#                     );
+#     // vec2 max_d == vec2(1.0, 1.0)
+#     vec2 max_d = max(
+#                         // Same cosine fucntion as in max_a.
+#                         1.0 / cos(mix(vec2(1.0, 0.0), vec2(0.0, 218.851), bvec2(true, (gl_FragCoord.y < 0.0)))),
+#                         vec2(1.0, 1.0)
+#                     );
+#     // vec2 max_b == vec2(1.0, 1.0)
+#     vec2 max_b = max(
+#                         vec2(1.0, 1.0),
+#                         max_d // max_d == vec2(1.0, 1.0)
+#                     );
+#     // vec2 lin == (gl_FragCoord.xy / resolution)
+#     vec2 lin = min(
+#                     max_a,  // max_a == gl_FragCoord.xy / resolution
+#                     max_b   // max_b == vec2(1.0, 1.0)
+#                     );
+#  lin = floor(lin * 8.0);
+#  int v = int(lin.x) * 8 + int(lin.y);
+#  _GLF_color = pal[collatz(v) % 16];
+# }
+SHADER fragment variant_fragment_shader SPIRV-ASM
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 10
+; Bound: 157
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %47 %127
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 320
+               OpName %4 "main"
+               OpName %10 "collatz(i1;"
+               OpName %9 "v"
+               OpName %12 "count"
+               OpName %44 "max_c"
+               OpName %47 "gl_FragCoord"
+               OpName %50 "buf_push"
+               OpMemberName %50 0 "resolution"
+               OpName %52 ""
+               OpName %70 "max_a"
+               OpName %93 "max_d"
+               OpName %104 "max_b"
+               OpName %107 "lin"
+               OpName %115 "v"
+               OpName %127 "_GLF_color"
+               OpName %147 "param"
+               OpName %153 "indexable"
+               OpDecorate %47 BuiltIn FragCoord
+               OpMemberDecorate %50 0 Offset 0
+               OpDecorate %50 Block
+               OpDecorate %127 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeInt 32 1
+          %7 = OpTypePointer Function %6
+          %8 = OpTypeFunction %6 %7
+         %13 = OpConstant %6 0
+         %20 = OpConstant %6 1
+         %21 = OpTypeBool
+         %28 = OpConstant %6 3
+         %33 = OpConstant %6 2
+         %41 = OpTypeFloat 32
+         %42 = OpTypeVector %41 2
+         %43 = OpTypePointer Function %42
+         %45 = OpTypeVector %41 4
+         %46 = OpTypePointer Input %45
+         %47 = OpVariable %46 Input
+         %50 = OpTypeStruct %42
+         %51 = OpTypePointer PushConstant %50
+         %52 = OpVariable %51 PushConstant
+         %53 = OpTypePointer PushConstant %42
+         %59 = OpTypeInt 32 0
+         %60 = OpConstant %59 0
+         %61 = OpTypePointer PushConstant %41
+         %64 = OpConstant %59 1
+         %72 = OpConstant %41 1
+         %73 = OpConstant %41 0
+         %74 = OpConstantComposite %42 %72 %73
+         %75 = OpConstant %41 218.850998
+         %76 = OpConstantComposite %42 %73 %75
+         %77 = OpConstantTrue %21
+         %78 = OpTypePointer Input %41
+         %82 = OpTypeVector %21 2
+        %102 = OpConstantComposite %42 %72 %72
+        %112 = OpConstant %41 8
+        %116 = OpTypePointer Function %41
+        %120 = OpConstant %6 8
+        %126 = OpTypePointer Output %45
+        %127 = OpVariable %126 Output
+        %128 = OpConstant %59 16
+        %129 = OpTypeArray %45 %128
+        %130 = OpConstantComposite %45 %73 %73 %73 %72
+        %131 = OpConstant %41 0.5
+        %132 = OpConstantComposite %45 %131 %73 %73 %72
+        %133 = OpConstantComposite %45 %73 %131 %73 %72
+        %134 = OpConstantComposite %45 %131 %131 %73 %72
+        %135 = OpConstantComposite %45 %73 %73 %131 %72
+        %136 = OpConstantComposite %45 %131 %73 %131 %72
+        %137 = OpConstantComposite %45 %73 %131 %131 %72
+        %138 = OpConstantComposite %45 %131 %131 %131 %72
+        %139 = OpConstantComposite %45 %72 %73 %73 %72
+        %140 = OpConstantComposite %45 %73 %72 %73 %72
+        %141 = OpConstantComposite %45 %72 %72 %73 %72
+        %142 = OpConstantComposite %45 %73 %73 %72 %72
+        %143 = OpConstantComposite %45 %72 %73 %72 %72
+        %144 = OpConstantComposite %45 %73 %72 %72 %72
+        %145 = OpConstantComposite %45 %72 %72 %72 %72
+        %146 = OpConstantComposite %129 %130 %132 %133 %134 %135 %136 %137 %138 %130 %139 %140 %141 %142 %143 %144 %145
+        %150 = OpConstant %6 16
+        %152 = OpTypePointer Function %129
+        %154 = OpTypePointer Function %45
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+         %44 = OpVariable %43 Function
+         %70 = OpVariable %43 Function
+         %93 = OpVariable %43 Function
+        %104 = OpVariable %43 Function
+        %107 = OpVariable %43 Function
+        %115 = OpVariable %7 Function
+        %147 = OpVariable %7 Function
+        %153 = OpVariable %152 Function
+         %48 = OpLoad %45 %47
+         %49 = OpVectorShuffle %42 %48 %48 0 1
+         %54 = OpAccessChain %53 %52 %13
+         %55 = OpLoad %42 %54
+         %56 = OpFDiv %42 %49 %55
+         %57 = OpLoad %45 %47
+         %58 = OpVectorShuffle %42 %57 %57 0 1
+         %62 = OpAccessChain %61 %52 %13 %60
+         %63 = OpLoad %41 %62
+         %65 = OpAccessChain %61 %52 %13 %64
+         %66 = OpLoad %41 %65
+         %67 = OpCompositeConstruct %42 %63 %66
+         %68 = OpFDiv %42 %58 %67
+         %69 = OpExtInst %42 %1 FMax %56 %68
+               OpStore %44 %69
+         %71 = OpLoad %42 %44
+         %79 = OpAccessChain %78 %47 %64
+         %80 = OpLoad %41 %79
+         %81 = OpFOrdLessThan %21 %80 %73
+         %83 = OpCompositeConstruct %82 %77 %81
+         %84 = OpSelect %42 %83 %76 %74
+         %85 = OpExtInst %42 %1 Cos %84
+         %86 = OpFDiv %42 %71 %85
+         %87 = OpLoad %45 %47
+         %88 = OpVectorShuffle %42 %87 %87 0 1
+         %89 = OpAccessChain %53 %52 %13
+         %90 = OpLoad %42 %89
+         %91 = OpFDiv %42 %88 %90
+         %92 = OpExtInst %42 %1 FMax %86 %91
+               OpStore %70 %92
+         %94 = OpAccessChain %78 %47 %64
+         %95 = OpLoad %41 %94
+         %96 = OpFOrdLessThan %21 %95 %73
+         %97 = OpCompositeConstruct %82 %77 %96
+         %98 = OpSelect %42 %97 %76 %74
+         %99 = OpExtInst %42 %1 Cos %98
+        %100 = OpCompositeConstruct %42 %72 %72
+        %101 = OpFDiv %42 %100 %99
+        %103 = OpExtInst %42 %1 FMax %101 %102
+               OpStore %93 %103
+        %105 = OpLoad %42 %93
+        %106 = OpExtInst %42 %1 FMax %102 %105
+               OpStore %104 %106
+        %108 = OpLoad %42 %70
+        %109 = OpLoad %42 %104
+        %110 = OpExtInst %42 %1 FMin %108 %109
+               OpStore %107 %110
+        %111 = OpLoad %42 %107
+        %113 = OpVectorTimesScalar %42 %111 %112
+        %114 = OpExtInst %42 %1 Floor %113
+               OpStore %107 %114
+        %117 = OpAccessChain %116 %107 %60
+        %118 = OpLoad %41 %117
+        %119 = OpConvertFToS %6 %118
+        %121 = OpIMul %6 %119 %120
+        %122 = OpAccessChain %116 %107 %64
+        %123 = OpLoad %41 %122
+        %124 = OpConvertFToS %6 %123
+        %125 = OpIAdd %6 %121 %124
+               OpStore %115 %125
+        %148 = OpLoad %6 %115
+               OpStore %147 %148
+        %149 = OpFunctionCall %6 %10 %147
+        %151 = OpSMod %6 %149 %150
+               OpStore %153 %146
+        %155 = OpAccessChain %154 %153 %151
+        %156 = OpLoad %45 %155
+               OpStore %127 %156
+               OpReturn
+               OpFunctionEnd
+         %10 = OpFunction %6 None %8
+          %9 = OpFunctionParameter %7
+         %11 = OpLabel
+         %12 = OpVariable %7 Function
+               OpStore %12 %13
+               OpBranch %14
+         %14 = OpLabel
+               OpLoopMerge %16 %17 None
+               OpBranch %18
+         %18 = OpLabel
+         %19 = OpLoad %6 %9
+         %22 = OpSGreaterThan %21 %19 %20
+               OpBranchConditional %22 %15 %16
+         %15 = OpLabel
+         %23 = OpLoad %6 %9
+         %24 = OpBitwiseAnd %6 %23 %20
+         %25 = OpIEqual %21 %24 %20
+               OpSelectionMerge %27 None
+               OpBranchConditional %25 %26 %32
+         %26 = OpLabel
+         %29 = OpLoad %6 %9
+         %30 = OpIMul %6 %28 %29
+         %31 = OpIAdd %6 %30 %20
+               OpStore %9 %31
+               OpBranch %27
+         %32 = OpLabel
+         %34 = OpLoad %6 %9
+         %35 = OpSDiv %6 %34 %33
+               OpStore %9 %35
+               OpBranch %27
+         %27 = OpLabel
+         %36 = OpLoad %6 %12
+         %37 = OpIAdd %6 %36 %20
+               OpStore %12 %37
+               OpBranch %17
+         %17 = OpLabel
+               OpBranch %14
+         %16 = OpLabel
+         %38 = OpLoad %6 %12
+               OpReturnValue %38
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# resolution
+BUFFER variant_resolution DATA_TYPE vec2<float> DATA
+ 256.0 256.0
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 256 256
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant_resolution AS push_constant
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256
+
+EXPECT reference_framebuffer EQ_HISTOGRAM_EMD_BUFFER variant_framebuffer TOLERANCE 0.005
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/stable-colorgrid-modulo-double-always-false-discard.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/stable-colorgrid-modulo-double-always-false-discard.amber
new file mode 100644
index 0000000..3152da8
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/stable-colorgrid-modulo-double-always-false-discard.amber
@@ -0,0 +1,700 @@
+#!amber
+
+# Copyright 2020 Google LLC
+#
+# 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.
+
+
+# A test for a bug found by the GraphicsFuzz project.
+
+# Short description: A fragment shader with two always false discards
+
+# The test passes because both shaders render the same image.
+
+# Optimized using spirv-opt with the following arguments:
+# '-O'
+# spirv-opt commit hash: 717e7877cac15d393fd3bb1bd872679de8b59add
+
+
+
+SHADER vertex reference_vertex_shader PASSTHROUGH
+
+# reference_fragment_shader is derived from the following GLSL:
+# #version 320 es
+# precision highp float;
+#
+# precision highp int;
+#
+# layout(location = 0) out vec4 _GLF_color;
+#
+# layout(set = 0, binding = 0) uniform buf0
+# {
+#   vec2 resolution;
+# };
+# float compute_value(float limit, float thirty_two)
+# {
+#   float result = -0.5;
+#   for (int i = 1; i < 800; i++)
+#   {
+#     if ((i % 32) == 0)
+#     {
+#       result += 0.4;
+#     }
+#     else
+#     {
+#       if (mod(float(i), round(thirty_two)) <= 0.01)
+#       {
+#         result += 100.0;
+#       }
+#     }
+#     if (float(i) >= limit)
+#     {
+#       return result;
+#     }
+#   }
+#   return result;
+# }
+# void main()
+# {
+#   vec3 c = vec3(7.0, 8.0, 9.0);
+#   float thirty_two = round(resolution.x / 8.0);
+#   c.x = compute_value(gl_FragCoord.x, thirty_two);
+#   c.y = compute_value(gl_FragCoord.y, thirty_two);
+#   c.z = c.x + c.y;
+#   for (int i = 0; i < 3; i++)
+#   {
+#     if (c[i] >= 1.0)
+#     {
+#       c[i] = c[i] * c[i];
+#     }
+#   }
+#   _GLF_color = vec4(normalize(abs(c)), 1.0);
+# }
+SHADER fragment reference_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 10
+; Bound: 290
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %85 %137
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 320
+               OpName %4 "main"
+               OpName %66 "c"
+               OpName %73 "buf0"
+               OpMemberName %73 0 "resolution"
+               OpName %75 ""
+               OpName %85 "gl_FragCoord"
+               OpName %137 "_GLF_color"
+               OpMemberDecorate %73 0 Offset 0
+               OpDecorate %73 Block
+               OpDecorate %75 DescriptorSet 0
+               OpDecorate %75 Binding 0
+               OpDecorate %85 BuiltIn FragCoord
+               OpDecorate %137 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeFloat 32
+          %7 = OpTypePointer Function %6
+         %14 = OpConstant %6 -0.5
+         %15 = OpTypeInt 32 1
+         %18 = OpConstant %15 1
+         %25 = OpConstant %15 800
+         %26 = OpTypeBool
+         %29 = OpConstant %15 32
+         %31 = OpConstant %15 0
+         %35 = OpConstant %6 0.400000006
+         %44 = OpConstant %6 0.00999999978
+         %48 = OpConstant %6 100
+         %64 = OpTypeVector %6 3
+         %65 = OpTypePointer Function %64
+         %67 = OpConstant %6 7
+         %68 = OpConstant %6 8
+         %69 = OpConstant %6 9
+         %70 = OpConstantComposite %64 %67 %68 %69
+         %72 = OpTypeVector %6 2
+         %73 = OpTypeStruct %72
+         %74 = OpTypePointer Uniform %73
+         %75 = OpVariable %74 Uniform
+         %76 = OpTypeInt 32 0
+         %77 = OpConstant %76 0
+         %78 = OpTypePointer Uniform %6
+         %83 = OpTypeVector %6 4
+         %84 = OpTypePointer Input %83
+         %85 = OpVariable %84 Input
+         %87 = OpTypePointer Input %6
+         %95 = OpConstant %76 1
+        %107 = OpConstant %76 2
+        %116 = OpConstant %15 3
+        %121 = OpConstant %6 1
+        %136 = OpTypePointer Output %83
+        %137 = OpVariable %136 Output
+        %149 = OpConstantFalse %26
+        %152 = OpConstantTrue %26
+        %261 = OpUndef %6
+        %289 = OpConstant %6 0.125
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+         %66 = OpVariable %65 Function
+               OpStore %66 %70
+         %79 = OpAccessChain %78 %75 %31 %77
+         %80 = OpLoad %6 %79
+         %81 = OpFMul %6 %80 %289
+         %82 = OpExtInst %6 %1 Round %81
+         %88 = OpAccessChain %87 %85 %77
+         %89 = OpLoad %6 %88
+               OpSelectionMerge %199 None
+               OpSwitch %77 %161
+        %161 = OpLabel
+               OpBranch %162
+        %162 = OpLabel
+        %248 = OpPhi %6 %14 %161 %251 %192
+        %247 = OpPhi %15 %18 %161 %194 %192
+        %165 = OpSLessThan %26 %247 %25
+               OpLoopMerge %195 %192 None
+               OpBranchConditional %165 %166 %195
+        %166 = OpLabel
+        %168 = OpSMod %15 %247 %29
+        %169 = OpIEqual %26 %168 %31
+               OpSelectionMerge %184 None
+               OpBranchConditional %169 %170 %173
+        %170 = OpLabel
+        %172 = OpFAdd %6 %248 %35
+               OpBranch %184
+        %173 = OpLabel
+        %175 = OpConvertSToF %6 %247
+        %177 = OpExtInst %6 %1 Round %82
+        %178 = OpFMod %6 %175 %177
+        %179 = OpFOrdLessThanEqual %26 %178 %44
+               OpSelectionMerge %183 None
+               OpBranchConditional %179 %180 %183
+        %180 = OpLabel
+        %182 = OpFAdd %6 %248 %48
+               OpBranch %183
+        %183 = OpLabel
+        %252 = OpPhi %6 %248 %173 %182 %180
+               OpBranch %184
+        %184 = OpLabel
+        %251 = OpPhi %6 %172 %170 %252 %183
+        %186 = OpConvertSToF %6 %247
+        %188 = OpFOrdGreaterThanEqual %26 %186 %89
+               OpSelectionMerge %191 None
+               OpBranchConditional %188 %189 %191
+        %189 = OpLabel
+               OpBranch %195
+        %191 = OpLabel
+               OpBranch %192
+        %192 = OpLabel
+        %194 = OpIAdd %15 %247 %18
+               OpBranch %162
+        %195 = OpLabel
+        %259 = OpPhi %6 %261 %162 %251 %189
+        %257 = OpPhi %6 %248 %162 %251 %189
+        %253 = OpPhi %26 %149 %162 %152 %189
+               OpSelectionMerge %197 None
+               OpBranchConditional %253 %199 %197
+        %197 = OpLabel
+               OpBranch %199
+        %199 = OpLabel
+        %258 = OpPhi %6 %259 %195 %257 %197
+         %93 = OpAccessChain %7 %66 %77
+               OpStore %93 %258
+         %96 = OpAccessChain %87 %85 %95
+         %97 = OpLoad %6 %96
+               OpSelectionMerge %245 None
+               OpSwitch %77 %207
+        %207 = OpLabel
+               OpBranch %208
+        %208 = OpLabel
+        %265 = OpPhi %6 %14 %207 %268 %238
+        %264 = OpPhi %15 %18 %207 %240 %238
+        %211 = OpSLessThan %26 %264 %25
+               OpLoopMerge %241 %238 None
+               OpBranchConditional %211 %212 %241
+        %212 = OpLabel
+        %214 = OpSMod %15 %264 %29
+        %215 = OpIEqual %26 %214 %31
+               OpSelectionMerge %230 None
+               OpBranchConditional %215 %216 %219
+        %216 = OpLabel
+        %218 = OpFAdd %6 %265 %35
+               OpBranch %230
+        %219 = OpLabel
+        %221 = OpConvertSToF %6 %264
+        %223 = OpExtInst %6 %1 Round %82
+        %224 = OpFMod %6 %221 %223
+        %225 = OpFOrdLessThanEqual %26 %224 %44
+               OpSelectionMerge %229 None
+               OpBranchConditional %225 %226 %229
+        %226 = OpLabel
+        %228 = OpFAdd %6 %265 %48
+               OpBranch %229
+        %229 = OpLabel
+        %269 = OpPhi %6 %265 %219 %228 %226
+               OpBranch %230
+        %230 = OpLabel
+        %268 = OpPhi %6 %218 %216 %269 %229
+        %232 = OpConvertSToF %6 %264
+        %234 = OpFOrdGreaterThanEqual %26 %232 %97
+               OpSelectionMerge %237 None
+               OpBranchConditional %234 %235 %237
+        %235 = OpLabel
+               OpBranch %241
+        %237 = OpLabel
+               OpBranch %238
+        %238 = OpLabel
+        %240 = OpIAdd %15 %264 %18
+               OpBranch %208
+        %241 = OpLabel
+        %276 = OpPhi %6 %261 %208 %268 %235
+        %274 = OpPhi %6 %265 %208 %268 %235
+        %270 = OpPhi %26 %149 %208 %152 %235
+               OpSelectionMerge %243 None
+               OpBranchConditional %270 %245 %243
+        %243 = OpLabel
+               OpBranch %245
+        %245 = OpLabel
+        %275 = OpPhi %6 %276 %241 %274 %243
+        %101 = OpAccessChain %7 %66 %95
+               OpStore %101 %275
+        %103 = OpLoad %6 %93
+        %105 = OpLoad %6 %101
+        %106 = OpFAdd %6 %103 %105
+        %108 = OpAccessChain %7 %66 %107
+               OpStore %108 %106
+               OpBranch %110
+        %110 = OpLabel
+        %285 = OpPhi %15 %31 %245 %135 %113
+        %117 = OpSLessThan %26 %285 %116
+               OpLoopMerge %112 %113 None
+               OpBranchConditional %117 %111 %112
+        %111 = OpLabel
+        %119 = OpAccessChain %7 %66 %285
+        %120 = OpLoad %6 %119
+        %122 = OpFOrdGreaterThanEqual %26 %120 %121
+               OpSelectionMerge %124 None
+               OpBranchConditional %122 %123 %124
+        %123 = OpLabel
+        %128 = OpLoad %6 %119
+        %131 = OpLoad %6 %119
+        %132 = OpFMul %6 %128 %131
+               OpStore %119 %132
+               OpBranch %124
+        %124 = OpLabel
+               OpBranch %113
+        %113 = OpLabel
+        %135 = OpIAdd %15 %285 %18
+               OpBranch %110
+        %112 = OpLabel
+        %138 = OpLoad %64 %66
+        %139 = OpExtInst %64 %1 FAbs %138
+        %140 = OpExtInst %64 %1 Normalize %139
+        %141 = OpCompositeExtract %6 %140 0
+        %142 = OpCompositeExtract %6 %140 1
+        %143 = OpCompositeExtract %6 %140 2
+        %144 = OpCompositeConstruct %83 %141 %142 %143 %121
+               OpStore %137 %144
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for reference
+
+# resolution
+BUFFER reference_resolution DATA_TYPE vec2<float> STD140 DATA
+ 256.0 256.0
+END
+
+BUFFER reference_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics reference_pipeline
+  ATTACH reference_vertex_shader
+  ATTACH reference_fragment_shader
+  FRAMEBUFFER_SIZE 256 256
+  BIND BUFFER reference_framebuffer AS color LOCATION 0
+  BIND BUFFER reference_resolution AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR reference_pipeline 0 0 0 255
+
+CLEAR reference_pipeline
+RUN reference_pipeline DRAW_RECT POS 0 0 SIZE 256 256
+
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+# variant_fragment_shader is derived from the following GLSL:
+# #version 320 es
+# precision highp float;
+#
+# precision highp int;
+#
+# layout(location = 0) out vec4 _GLF_color;
+#
+# layout(set = 0, binding = 0) uniform buf0
+# {
+#   vec2 resolution;
+# };
+# layout(set = 0, binding = 1) uniform buf1
+# {
+#   vec2 injectionSwitch; // x == 0.0, y == 1.0
+# };
+# float compute_value(float limit, float thirty_two)
+# {
+#   float result = -0.5;
+#   for (int i = 1; i < 800; i++)
+#   {
+#     if ((i % 32) == 0)
+#     {
+#       result += 0.4;
+#     }
+#     else
+#     {
+#       if (mod(float(i), round(thirty_two)) <= 0.01)
+#       {
+#         result += 100.0;
+#       }
+#       // Always false.
+#       if (injectionSwitch.x > injectionSwitch.y)
+#       {
+#         discard;
+#       }
+#     }
+#     if (float(i) >= limit)
+#     {
+#       return result;
+#     }
+#   }
+#   return result;
+# }
+# void main()
+# {
+#   vec3 c = vec3(7.0, 8.0, 9.0);
+#   float thirty_two = round(resolution.x / 8.0);
+#   c.x = compute_value(gl_FragCoord.x, thirty_two);
+#   c.y = compute_value(gl_FragCoord.y, thirty_two);
+#   c.z = c.x + c.y;
+#   for (int i = 0; i < 3; i++)
+#   {
+#     if (c[i] >= 1.0)
+#     {
+#       c[i] = c[i] * c[i];
+#       // Always false.
+#       if ((injectionSwitch.x > injectionSwitch.y))
+#       {
+#         discard;
+#       }
+#     }
+#   }
+#   _GLF_color = vec4(normalize(abs(c)), 1.0);
+# }
+SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 10
+; Bound: 325
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %97 %156
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 320
+               OpName %4 "main"
+               OpName %52 "buf1"
+               OpMemberName %52 0 "injectionSwitch"
+               OpName %54 ""
+               OpName %82 "c"
+               OpName %88 "buf0"
+               OpMemberName %88 0 "resolution"
+               OpName %90 ""
+               OpName %97 "gl_FragCoord"
+               OpName %156 "_GLF_color"
+               OpMemberDecorate %52 0 Offset 0
+               OpDecorate %52 Block
+               OpDecorate %54 DescriptorSet 0
+               OpDecorate %54 Binding 1
+               OpMemberDecorate %88 0 Offset 0
+               OpDecorate %88 Block
+               OpDecorate %90 DescriptorSet 0
+               OpDecorate %90 Binding 0
+               OpDecorate %97 BuiltIn FragCoord
+               OpDecorate %156 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeFloat 32
+          %7 = OpTypePointer Function %6
+         %14 = OpConstant %6 -0.5
+         %15 = OpTypeInt 32 1
+         %18 = OpConstant %15 1
+         %25 = OpConstant %15 800
+         %26 = OpTypeBool
+         %29 = OpConstant %15 32
+         %31 = OpConstant %15 0
+         %35 = OpConstant %6 0.400000006
+         %44 = OpConstant %6 0.00999999978
+         %48 = OpConstant %6 100
+         %51 = OpTypeVector %6 2
+         %52 = OpTypeStruct %51
+         %53 = OpTypePointer Uniform %52
+         %54 = OpVariable %53 Uniform
+         %55 = OpTypeInt 32 0
+         %56 = OpConstant %55 0
+         %57 = OpTypePointer Uniform %6
+         %60 = OpConstant %55 1
+         %80 = OpTypeVector %6 3
+         %81 = OpTypePointer Function %80
+         %83 = OpConstant %6 7
+         %84 = OpConstant %6 8
+         %85 = OpConstant %6 9
+         %86 = OpConstantComposite %80 %83 %84 %85
+         %88 = OpTypeStruct %51
+         %89 = OpTypePointer Uniform %88
+         %90 = OpVariable %89 Uniform
+         %95 = OpTypeVector %6 4
+         %96 = OpTypePointer Input %95
+         %97 = OpVariable %96 Input
+         %99 = OpTypePointer Input %6
+        %118 = OpConstant %55 2
+        %127 = OpConstant %15 3
+        %132 = OpConstant %6 1
+        %155 = OpTypePointer Output %95
+        %156 = OpVariable %155 Output
+        %168 = OpConstantFalse %26
+        %171 = OpConstantTrue %26
+        %296 = OpUndef %6
+        %324 = OpConstant %6 0.125
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+         %82 = OpVariable %81 Function
+               OpStore %82 %86
+         %91 = OpAccessChain %57 %90 %31 %56
+         %92 = OpLoad %6 %91
+         %93 = OpFMul %6 %92 %324
+         %94 = OpExtInst %6 %1 Round %93
+        %100 = OpAccessChain %99 %97 %56
+        %101 = OpLoad %6 %100
+               OpSelectionMerge %225 None
+               OpSwitch %56 %180
+        %180 = OpLabel
+               OpBranch %181
+        %181 = OpLabel
+        %283 = OpPhi %6 %14 %180 %286 %218
+        %282 = OpPhi %15 %18 %180 %220 %218
+        %184 = OpSLessThan %26 %282 %25
+               OpLoopMerge %221 %218 None
+               OpBranchConditional %184 %185 %221
+        %185 = OpLabel
+        %187 = OpSMod %15 %282 %29
+        %188 = OpIEqual %26 %187 %31
+               OpSelectionMerge %210 None
+               OpBranchConditional %188 %189 %192
+        %189 = OpLabel
+        %191 = OpFAdd %6 %283 %35
+               OpBranch %210
+        %192 = OpLabel
+        %194 = OpConvertSToF %6 %282
+        %196 = OpExtInst %6 %1 Round %94
+        %197 = OpFMod %6 %194 %196
+        %198 = OpFOrdLessThanEqual %26 %197 %44
+               OpSelectionMerge %202 None
+               OpBranchConditional %198 %199 %202
+        %199 = OpLabel
+        %201 = OpFAdd %6 %283 %48
+               OpBranch %202
+        %202 = OpLabel
+        %287 = OpPhi %6 %283 %192 %201 %199
+        %203 = OpAccessChain %57 %54 %31 %56
+        %204 = OpLoad %6 %203
+        %205 = OpAccessChain %57 %54 %31 %60
+        %206 = OpLoad %6 %205
+        %207 = OpFOrdGreaterThan %26 %204 %206
+               OpSelectionMerge %209 None
+               OpBranchConditional %207 %208 %209
+        %208 = OpLabel
+               OpKill
+        %209 = OpLabel
+               OpBranch %210
+        %210 = OpLabel
+        %286 = OpPhi %6 %191 %189 %287 %209
+        %212 = OpConvertSToF %6 %282
+        %214 = OpFOrdGreaterThanEqual %26 %212 %101
+               OpSelectionMerge %217 None
+               OpBranchConditional %214 %215 %217
+        %215 = OpLabel
+               OpBranch %221
+        %217 = OpLabel
+               OpBranch %218
+        %218 = OpLabel
+        %220 = OpIAdd %15 %282 %18
+               OpBranch %181
+        %221 = OpLabel
+        %294 = OpPhi %6 %296 %181 %286 %215
+        %292 = OpPhi %6 %283 %181 %286 %215
+        %288 = OpPhi %26 %168 %181 %171 %215
+               OpSelectionMerge %223 None
+               OpBranchConditional %288 %225 %223
+        %223 = OpLabel
+               OpBranch %225
+        %225 = OpLabel
+        %293 = OpPhi %6 %294 %221 %292 %223
+        %105 = OpAccessChain %7 %82 %56
+               OpStore %105 %293
+        %107 = OpAccessChain %99 %97 %60
+        %108 = OpLoad %6 %107
+               OpSelectionMerge %279 None
+               OpSwitch %56 %234
+        %234 = OpLabel
+               OpBranch %235
+        %235 = OpLabel
+        %300 = OpPhi %6 %14 %234 %303 %272
+        %299 = OpPhi %15 %18 %234 %274 %272
+        %238 = OpSLessThan %26 %299 %25
+               OpLoopMerge %275 %272 None
+               OpBranchConditional %238 %239 %275
+        %239 = OpLabel
+        %241 = OpSMod %15 %299 %29
+        %242 = OpIEqual %26 %241 %31
+               OpSelectionMerge %264 None
+               OpBranchConditional %242 %243 %246
+        %243 = OpLabel
+        %245 = OpFAdd %6 %300 %35
+               OpBranch %264
+        %246 = OpLabel
+        %248 = OpConvertSToF %6 %299
+        %250 = OpExtInst %6 %1 Round %94
+        %251 = OpFMod %6 %248 %250
+        %252 = OpFOrdLessThanEqual %26 %251 %44
+               OpSelectionMerge %256 None
+               OpBranchConditional %252 %253 %256
+        %253 = OpLabel
+        %255 = OpFAdd %6 %300 %48
+               OpBranch %256
+        %256 = OpLabel
+        %304 = OpPhi %6 %300 %246 %255 %253
+        %257 = OpAccessChain %57 %54 %31 %56
+        %258 = OpLoad %6 %257
+        %259 = OpAccessChain %57 %54 %31 %60
+        %260 = OpLoad %6 %259
+        %261 = OpFOrdGreaterThan %26 %258 %260
+               OpSelectionMerge %263 None
+               OpBranchConditional %261 %262 %263
+        %262 = OpLabel
+               OpKill
+        %263 = OpLabel
+               OpBranch %264
+        %264 = OpLabel
+        %303 = OpPhi %6 %245 %243 %304 %263
+        %266 = OpConvertSToF %6 %299
+        %268 = OpFOrdGreaterThanEqual %26 %266 %108
+               OpSelectionMerge %271 None
+               OpBranchConditional %268 %269 %271
+        %269 = OpLabel
+               OpBranch %275
+        %271 = OpLabel
+               OpBranch %272
+        %272 = OpLabel
+        %274 = OpIAdd %15 %299 %18
+               OpBranch %235
+        %275 = OpLabel
+        %311 = OpPhi %6 %296 %235 %303 %269
+        %309 = OpPhi %6 %300 %235 %303 %269
+        %305 = OpPhi %26 %168 %235 %171 %269
+               OpSelectionMerge %277 None
+               OpBranchConditional %305 %279 %277
+        %277 = OpLabel
+               OpBranch %279
+        %279 = OpLabel
+        %310 = OpPhi %6 %311 %275 %309 %277
+        %112 = OpAccessChain %7 %82 %60
+               OpStore %112 %310
+        %114 = OpLoad %6 %105
+        %116 = OpLoad %6 %112
+        %117 = OpFAdd %6 %114 %116
+        %119 = OpAccessChain %7 %82 %118
+               OpStore %119 %117
+               OpBranch %121
+        %121 = OpLabel
+        %320 = OpPhi %15 %31 %279 %154 %124
+        %128 = OpSLessThan %26 %320 %127
+               OpLoopMerge %123 %124 None
+               OpBranchConditional %128 %122 %123
+        %122 = OpLabel
+        %130 = OpAccessChain %7 %82 %320
+        %131 = OpLoad %6 %130
+        %133 = OpFOrdGreaterThanEqual %26 %131 %132
+               OpSelectionMerge %135 None
+               OpBranchConditional %133 %134 %135
+        %134 = OpLabel
+        %139 = OpLoad %6 %130
+        %142 = OpLoad %6 %130
+        %143 = OpFMul %6 %139 %142
+               OpStore %130 %143
+        %145 = OpAccessChain %57 %54 %31 %56
+        %146 = OpLoad %6 %145
+        %147 = OpAccessChain %57 %54 %31 %60
+        %148 = OpLoad %6 %147
+        %149 = OpFOrdGreaterThan %26 %146 %148
+               OpSelectionMerge %151 None
+               OpBranchConditional %149 %150 %151
+        %150 = OpLabel
+               OpKill
+        %151 = OpLabel
+               OpBranch %135
+        %135 = OpLabel
+               OpBranch %124
+        %124 = OpLabel
+        %154 = OpIAdd %15 %320 %18
+               OpBranch %121
+        %123 = OpLabel
+        %157 = OpLoad %80 %82
+        %158 = OpExtInst %80 %1 FAbs %157
+        %159 = OpExtInst %80 %1 Normalize %158
+        %160 = OpCompositeExtract %6 %159 0
+        %161 = OpCompositeExtract %6 %159 1
+        %162 = OpCompositeExtract %6 %159 2
+        %163 = OpCompositeConstruct %95 %160 %161 %162 %132
+               OpStore %156 %163
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# resolution
+BUFFER variant_resolution DATA_TYPE vec2<float> STD140 DATA
+ 256.0 256.0
+END
+# injectionSwitch
+BUFFER variant_injectionSwitch DATA_TYPE vec2<float> STD140 DATA
+ 0.0 1.0
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 256 256
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant_resolution AS uniform DESCRIPTOR_SET 0 BINDING 0
+  BIND BUFFER variant_injectionSwitch AS uniform DESCRIPTOR_SET 0 BINDING 1
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256
+
+EXPECT reference_framebuffer EQ_HISTOGRAM_EMD_BUFFER variant_framebuffer TOLERANCE 0.005
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/stable-mergesort-for-always-false-if-discard.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/stable-mergesort-for-always-false-if-discard.amber
new file mode 100644
index 0000000..d0c0c70
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/stable-mergesort-for-always-false-if-discard.amber
@@ -0,0 +1,1233 @@
+#!amber
+
+# Copyright 2020 Google LLC
+#
+# 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.
+
+
+# A test for a bug found by the GraphicsFuzz project.
+
+# Short description: A fragment shader with for loop and always false if
+
+# The test passes because both shaders render the same image.
+
+# Optimized using spirv-opt with the following arguments:
+# '-O'
+# spirv-opt commit hash: 717e7877cac15d393fd3bb1bd872679de8b59add
+
+
+
+SHADER vertex reference_vertex_shader PASSTHROUGH
+
+# reference_fragment_shader is derived from the following GLSL:
+# #version 320 es
+# precision highp float;
+#
+# precision highp int;
+#
+# layout(location = 0) out vec4 _GLF_color;
+#
+# layout(set = 0, binding = 0) uniform buf0
+# {
+#   vec2 injectionSwitch;
+# };
+# const int N = 10;
+#
+# int data[10], temp[10];
+#
+# void merge(int from, int mid, int to)
+# {
+#   int k = from, i = from, j = mid + 1;
+#   while (i <= mid && j <= to)
+#   {
+#     if (data[i] < data[j])
+#     {
+#       temp[k++] = data[i++];
+#     }
+#     else
+#     {
+#       temp[k++] = data[j++];
+#     }
+#   }
+#   while (i < N && i <= mid)
+#   {
+#     temp[k++] = data[i++];
+#   }
+#   for (int i = from; i <= to; i++)
+#   {
+#     data[i] = temp[i];
+#   }
+# }
+# void mergeSort()
+# {
+#   int low = 0;
+#   int high = N - 1;
+#   for (int m = 1; m <= high; m = 2 * m)
+#   {
+#     for (int i = low; i < high; i += 2 * m)
+#     {
+#       int from = i;
+#       int mid = i + m - 1;
+#       int to = min(i + 2 * m - 1, high);
+#       merge(from, mid, to);
+#     }
+#   }
+# }
+# void main()
+# {
+#   int i = int(injectionSwitch.x);
+#   do
+#   {
+#     switch (i)
+#     {
+#     case 0:
+#       data[i] = 4;
+#       break;
+#     case 1:
+#       data[i] = 3;
+#       break;
+#     case 2:
+#       data[i] = 2;
+#       break;
+#     case 3:
+#       data[i] = 1;
+#       break;
+#     case 4:
+#       data[i] = 0;
+#       break;
+#     case 5:
+#       data[i] = -1;
+#       break;
+#     case 6:
+#       data[i] = -2;
+#       break;
+#     case 7:
+#       data[i] = -3;
+#       break;
+#     case 8:
+#       data[i] = -4;
+#       break;
+#     case 9:
+#       data[i] = -5;
+#       break;
+#     }
+#     i++;
+#   } while (i < 10);
+#   for (int j = 0; j < 10; j++)
+#   {
+#     temp[j] = data[j];
+#   }
+#   mergeSort();
+#   float grey;
+#   if (int(gl_FragCoord[1]) < 30)
+#   {
+#     grey = 0.5 + float(data[0]) / 10.0;
+#   }
+#   else
+#   {
+#     if (int(gl_FragCoord[1]) < 60)
+#     {
+#       grey = 0.5 + float(data[1]) / 10.0;
+#     }
+#     else
+#     {
+#       if (int(gl_FragCoord[1]) < 90)
+#       {
+#         grey = 0.5 + float(data[2]) / 10.0;
+#       }
+#       else
+#       {
+#         if (int(gl_FragCoord[1]) < 120)
+#         {
+#           grey = 0.5 + float(data[3]) / 10.0;
+#         }
+#         else
+#         {
+#           if (int(gl_FragCoord[1]) < 150)
+#           {
+#             discard;
+#           }
+#           else
+#           {
+#             if (int(gl_FragCoord[1]) < 180)
+#             {
+#               grey = 0.5 + float(data[5]) / 10.0;
+#             }
+#             else
+#             {
+#               if (int(gl_FragCoord[1]) < 210)
+#               {
+#                 grey = 0.5 + float(data[6]) / 10.0;
+#               }
+#               else
+#               {
+#                 if (int(gl_FragCoord[1]) < 240)
+#                 {
+#                   grey = 0.5 + float(data[7]) / 10.0;
+#                 }
+#                 else
+#                 {
+#                   if (int(gl_FragCoord[1]) < 270)
+#                   {
+#                     grey = 0.5 + float(data[8]) / 10.0;
+#                   }
+#                   else
+#                   {
+#                     discard;
+#                   }
+#                 }
+#               }
+#             }
+#           }
+#         }
+#       }
+#     }
+#   }
+#   _GLF_color = vec4(vec3(grey), 1.0);
+# }
+SHADER fragment reference_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 10
+; Bound: 540
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %243 %369
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 320
+               OpName %4 "main"
+               OpName %41 "data"
+               OpName %52 "temp"
+               OpName %159 "buf0"
+               OpMemberName %159 0 "injectionSwitch"
+               OpName %161 ""
+               OpName %243 "gl_FragCoord"
+               OpName %369 "_GLF_color"
+               OpMemberDecorate %159 0 Offset 0
+               OpDecorate %159 Block
+               OpDecorate %161 DescriptorSet 0
+               OpDecorate %161 Binding 0
+               OpDecorate %243 BuiltIn FragCoord
+               OpDecorate %369 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeInt 32 1
+          %7 = OpTypePointer Function %6
+         %22 = OpConstant %6 1
+         %31 = OpTypeBool
+         %37 = OpTypeInt 32 0
+         %38 = OpConstant %37 10
+         %39 = OpTypeArray %6 %38
+         %74 = OpConstant %6 10
+        %105 = OpConstant %6 0
+        %107 = OpConstant %6 9
+        %136 = OpConstant %6 2
+        %157 = OpTypeFloat 32
+        %158 = OpTypeVector %157 2
+        %159 = OpTypeStruct %158
+        %160 = OpTypePointer Uniform %159
+        %161 = OpVariable %160 Uniform
+        %162 = OpConstant %37 0
+        %163 = OpTypePointer Uniform %157
+        %184 = OpConstant %6 4
+        %188 = OpConstant %6 3
+        %201 = OpConstant %6 -1
+        %205 = OpConstant %6 -2
+        %209 = OpConstant %6 -3
+        %213 = OpConstant %6 -4
+        %217 = OpConstant %6 -5
+        %241 = OpTypeVector %157 4
+        %242 = OpTypePointer Input %241
+        %243 = OpVariable %242 Input
+        %244 = OpConstant %37 1
+        %245 = OpTypePointer Input %157
+        %249 = OpConstant %6 30
+        %255 = OpConstant %157 0.5
+        %266 = OpConstant %6 60
+        %279 = OpConstant %6 90
+        %292 = OpConstant %6 120
+        %305 = OpConstant %6 150
+        %314 = OpConstant %6 180
+        %318 = OpConstant %6 5
+        %328 = OpConstant %6 210
+        %332 = OpConstant %6 6
+        %342 = OpConstant %6 240
+        %346 = OpConstant %6 7
+        %356 = OpConstant %6 270
+        %360 = OpConstant %6 8
+        %368 = OpTypePointer Output %241
+        %369 = OpVariable %368 Output
+        %373 = OpConstant %157 1
+        %507 = OpTypePointer Function %39
+        %539 = OpConstant %157 0.100000001
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+         %52 = OpVariable %507 Function
+         %41 = OpVariable %507 Function
+        %164 = OpAccessChain %163 %161 %105 %162
+        %165 = OpLoad %157 %164
+        %166 = OpConvertFToS %6 %165
+               OpBranch %167
+        %167 = OpLabel
+        %508 = OpPhi %6 %166 %5 %222 %170
+               OpLoopMerge %169 %170 None
+               OpBranch %168
+        %168 = OpLabel
+               OpSelectionMerge %182 None
+               OpSwitch %508 %182 0 %172 1 %173 2 %174 3 %175 4 %176 5 %177 6 %178 7 %179 8 %180 9 %181
+        %172 = OpLabel
+        %185 = OpAccessChain %7 %41 %508
+               OpStore %185 %184
+               OpBranch %182
+        %173 = OpLabel
+        %189 = OpAccessChain %7 %41 %508
+               OpStore %189 %188
+               OpBranch %182
+        %174 = OpLabel
+        %192 = OpAccessChain %7 %41 %508
+               OpStore %192 %136
+               OpBranch %182
+        %175 = OpLabel
+        %195 = OpAccessChain %7 %41 %508
+               OpStore %195 %22
+               OpBranch %182
+        %176 = OpLabel
+        %198 = OpAccessChain %7 %41 %508
+               OpStore %198 %105
+               OpBranch %182
+        %177 = OpLabel
+        %202 = OpAccessChain %7 %41 %508
+               OpStore %202 %201
+               OpBranch %182
+        %178 = OpLabel
+        %206 = OpAccessChain %7 %41 %508
+               OpStore %206 %205
+               OpBranch %182
+        %179 = OpLabel
+        %210 = OpAccessChain %7 %41 %508
+               OpStore %210 %209
+               OpBranch %182
+        %180 = OpLabel
+        %214 = OpAccessChain %7 %41 %508
+               OpStore %214 %213
+               OpBranch %182
+        %181 = OpLabel
+        %218 = OpAccessChain %7 %41 %508
+               OpStore %218 %217
+               OpBranch %182
+        %182 = OpLabel
+        %222 = OpIAdd %6 %508 %22
+               OpBranch %170
+        %170 = OpLabel
+        %224 = OpSLessThan %31 %222 %74
+               OpBranchConditional %224 %167 %169
+        %169 = OpLabel
+               OpBranch %226
+        %226 = OpLabel
+        %510 = OpPhi %6 %105 %169 %239 %227
+        %232 = OpSLessThan %31 %510 %74
+               OpLoopMerge %228 %227 None
+               OpBranchConditional %232 %227 %228
+        %227 = OpLabel
+        %235 = OpAccessChain %7 %41 %510
+        %236 = OpLoad %6 %235
+        %237 = OpAccessChain %7 %52 %510
+               OpStore %237 %236
+        %239 = OpIAdd %6 %510 %22
+               OpBranch %226
+        %228 = OpLabel
+               OpBranch %389
+        %389 = OpLabel
+        %511 = OpPhi %6 %22 %228 %426 %424
+        %393 = OpSLessThanEqual %31 %511 %107
+               OpLoopMerge %427 %424 None
+               OpBranchConditional %393 %394 %427
+        %394 = OpLabel
+               OpBranch %396
+        %396 = OpLabel
+        %519 = OpPhi %6 %105 %394 %410 %418
+        %400 = OpSLessThan %31 %519 %107
+               OpLoopMerge %423 %418 None
+               OpBranchConditional %400 %401 %423
+        %401 = OpLabel
+        %405 = OpIAdd %6 %519 %511
+        %406 = OpISub %6 %405 %22
+        %409 = OpIMul %6 %136 %511
+        %410 = OpIAdd %6 %519 %409
+        %411 = OpISub %6 %410 %22
+        %413 = OpExtInst %6 %1 SMin %411 %107
+               OpBranch %437
+        %437 = OpLabel
+        %532 = OpPhi %6 %519 %401 %456 %471
+        %522 = OpPhi %6 %405 %401 %534 %471
+        %521 = OpPhi %6 %519 %401 %533 %471
+        %441 = OpSLessThanEqual %31 %521 %406
+        %444 = OpSLessThanEqual %31 %522 %413
+        %445 = OpLogicalAnd %31 %441 %444
+               OpLoopMerge %472 %471 None
+               OpBranchConditional %445 %446 %472
+        %446 = OpLabel
+        %448 = OpAccessChain %7 %41 %521
+        %449 = OpLoad %6 %448
+        %451 = OpAccessChain %7 %41 %522
+        %452 = OpLoad %6 %451
+        %453 = OpSLessThan %31 %449 %452
+        %456 = OpIAdd %6 %532 %22
+               OpSelectionMerge %470 None
+               OpBranchConditional %453 %454 %462
+        %454 = OpLabel
+        %458 = OpIAdd %6 %521 %22
+        %460 = OpLoad %6 %448
+        %461 = OpAccessChain %7 %52 %532
+               OpStore %461 %460
+               OpBranch %470
+        %462 = OpLabel
+        %466 = OpIAdd %6 %522 %22
+        %468 = OpLoad %6 %451
+        %469 = OpAccessChain %7 %52 %532
+               OpStore %469 %468
+               OpBranch %470
+        %470 = OpLabel
+        %534 = OpPhi %6 %522 %454 %466 %462
+        %533 = OpPhi %6 %458 %454 %521 %462
+               OpBranch %471
+        %471 = OpLabel
+               OpBranch %437
+        %472 = OpLabel
+               OpBranch %473
+        %473 = OpLabel
+        %531 = OpPhi %6 %532 %472 %483 %481
+        %523 = OpPhi %6 %521 %472 %485 %481
+        %476 = OpSLessThan %31 %523 %74
+        %479 = OpSLessThanEqual %31 %523 %406
+        %480 = OpLogicalAnd %31 %476 %479
+               OpLoopMerge %490 %481 None
+               OpBranchConditional %480 %481 %490
+        %481 = OpLabel
+        %483 = OpIAdd %6 %531 %22
+        %485 = OpIAdd %6 %523 %22
+        %486 = OpAccessChain %7 %41 %523
+        %487 = OpLoad %6 %486
+        %488 = OpAccessChain %7 %52 %531
+               OpStore %488 %487
+               OpBranch %473
+        %490 = OpLabel
+               OpBranch %492
+        %492 = OpLabel
+        %524 = OpPhi %6 %519 %490 %505 %497
+        %496 = OpSLessThanEqual %31 %524 %413
+               OpLoopMerge %506 %497 None
+               OpBranchConditional %496 %497 %506
+        %497 = OpLabel
+        %500 = OpAccessChain %7 %52 %524
+        %501 = OpLoad %6 %500
+        %502 = OpAccessChain %7 %41 %524
+               OpStore %502 %501
+        %505 = OpIAdd %6 %524 %22
+               OpBranch %492
+        %506 = OpLabel
+               OpBranch %418
+        %418 = OpLabel
+               OpBranch %396
+        %423 = OpLabel
+               OpBranch %424
+        %424 = OpLabel
+        %426 = OpIMul %6 %136 %511
+               OpBranch %389
+        %427 = OpLabel
+        %246 = OpAccessChain %245 %243 %244
+        %247 = OpLoad %157 %246
+        %248 = OpConvertFToS %6 %247
+        %250 = OpSLessThan %31 %248 %249
+               OpSelectionMerge %252 None
+               OpBranchConditional %250 %251 %262
+        %251 = OpLabel
+        %256 = OpAccessChain %7 %41 %105
+        %257 = OpLoad %6 %256
+        %258 = OpConvertSToF %157 %257
+        %260 = OpFMul %157 %258 %539
+        %261 = OpFAdd %157 %255 %260
+               OpBranch %252
+        %262 = OpLabel
+        %267 = OpSLessThan %31 %248 %266
+               OpSelectionMerge %269 None
+               OpBranchConditional %267 %268 %275
+        %268 = OpLabel
+        %270 = OpAccessChain %7 %41 %22
+        %271 = OpLoad %6 %270
+        %272 = OpConvertSToF %157 %271
+        %273 = OpFMul %157 %272 %539
+        %274 = OpFAdd %157 %255 %273
+               OpBranch %269
+        %275 = OpLabel
+        %280 = OpSLessThan %31 %248 %279
+               OpSelectionMerge %282 None
+               OpBranchConditional %280 %281 %288
+        %281 = OpLabel
+        %283 = OpAccessChain %7 %41 %136
+        %284 = OpLoad %6 %283
+        %285 = OpConvertSToF %157 %284
+        %286 = OpFMul %157 %285 %539
+        %287 = OpFAdd %157 %255 %286
+               OpBranch %282
+        %288 = OpLabel
+        %293 = OpSLessThan %31 %248 %292
+               OpSelectionMerge %295 None
+               OpBranchConditional %293 %294 %301
+        %294 = OpLabel
+        %296 = OpAccessChain %7 %41 %188
+        %297 = OpLoad %6 %296
+        %298 = OpConvertSToF %157 %297
+        %299 = OpFMul %157 %298 %539
+        %300 = OpFAdd %157 %255 %299
+               OpBranch %295
+        %301 = OpLabel
+        %306 = OpSLessThan %31 %248 %305
+               OpSelectionMerge %308 None
+               OpBranchConditional %306 %307 %310
+        %307 = OpLabel
+               OpKill
+        %310 = OpLabel
+        %315 = OpSLessThan %31 %248 %314
+               OpSelectionMerge %317 None
+               OpBranchConditional %315 %316 %324
+        %316 = OpLabel
+        %319 = OpAccessChain %7 %41 %318
+        %320 = OpLoad %6 %319
+        %321 = OpConvertSToF %157 %320
+        %322 = OpFMul %157 %321 %539
+        %323 = OpFAdd %157 %255 %322
+               OpBranch %317
+        %324 = OpLabel
+        %329 = OpSLessThan %31 %248 %328
+               OpSelectionMerge %331 None
+               OpBranchConditional %329 %330 %338
+        %330 = OpLabel
+        %333 = OpAccessChain %7 %41 %332
+        %334 = OpLoad %6 %333
+        %335 = OpConvertSToF %157 %334
+        %336 = OpFMul %157 %335 %539
+        %337 = OpFAdd %157 %255 %336
+               OpBranch %331
+        %338 = OpLabel
+        %343 = OpSLessThan %31 %248 %342
+               OpSelectionMerge %345 None
+               OpBranchConditional %343 %344 %352
+        %344 = OpLabel
+        %347 = OpAccessChain %7 %41 %346
+        %348 = OpLoad %6 %347
+        %349 = OpConvertSToF %157 %348
+        %350 = OpFMul %157 %349 %539
+        %351 = OpFAdd %157 %255 %350
+               OpBranch %345
+        %352 = OpLabel
+        %357 = OpSLessThan %31 %248 %356
+               OpSelectionMerge %358 None
+               OpBranchConditional %357 %358 %366
+        %358 = OpLabel
+        %361 = OpAccessChain %7 %41 %360
+        %362 = OpLoad %6 %361
+        %363 = OpConvertSToF %157 %362
+        %364 = OpFMul %157 %363 %539
+        %365 = OpFAdd %157 %255 %364
+               OpBranch %345
+        %366 = OpLabel
+               OpKill
+        %345 = OpLabel
+        %518 = OpPhi %157 %351 %344 %365 %358
+               OpBranch %331
+        %331 = OpLabel
+        %517 = OpPhi %157 %337 %330 %518 %345
+               OpBranch %317
+        %317 = OpLabel
+        %516 = OpPhi %157 %323 %316 %517 %331
+               OpBranch %308
+        %308 = OpLabel
+               OpBranch %295
+        %295 = OpLabel
+        %515 = OpPhi %157 %300 %294 %516 %308
+               OpBranch %282
+        %282 = OpLabel
+        %514 = OpPhi %157 %287 %281 %515 %295
+               OpBranch %269
+        %269 = OpLabel
+        %513 = OpPhi %157 %274 %268 %514 %282
+               OpBranch %252
+        %252 = OpLabel
+        %512 = OpPhi %157 %261 %251 %513 %269
+        %377 = OpCompositeConstruct %241 %512 %512 %512 %373
+               OpStore %369 %377
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for reference
+
+# injectionSwitch
+BUFFER reference_injectionSwitch DATA_TYPE vec2<float> STD140 DATA
+ 0.0 1.0
+END
+
+BUFFER reference_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics reference_pipeline
+  ATTACH reference_vertex_shader
+  ATTACH reference_fragment_shader
+  FRAMEBUFFER_SIZE 256 256
+  BIND BUFFER reference_framebuffer AS color LOCATION 0
+  BIND BUFFER reference_injectionSwitch AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR reference_pipeline 0 0 0 255
+
+CLEAR reference_pipeline
+RUN reference_pipeline DRAW_RECT POS 0 0 SIZE 256 256
+
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+# variant_fragment_shader is derived from the following GLSL:
+# #version 320 es
+# precision highp float;
+#
+# precision highp int;
+#
+# layout(location = 0) out vec4 _GLF_color;
+#
+# layout(set = 0, binding = 0) uniform buf0
+# {
+#   vec2 injectionSwitch; // x == 0.0, y == 1.0
+# };
+# const int N = 10;
+#
+# int data[10], temp[10];
+#
+# void merge(int from, int mid, int to)
+# {
+#   int k = from, i = from, j = mid + 1;
+#   while (i <= mid && j <= to)
+#   {
+#     if (data[i] < data[j])
+#     {
+#       temp[k++] = data[i++];
+#     }
+#     else
+#     {
+#       temp[k++] = data[j++];
+#     }
+#   }
+#   while (i < N && i <= mid)
+#   {
+#     temp[k++] = data[i++];
+#   }
+#   for (int i = from; i <= to; i++)
+#   {
+#     data[i] = temp[i];
+#   }
+# }
+# void mergeSort()
+# {
+#   int low = 0;
+#   int high = N - 1;
+#   for (int m = 1; m <= high; m = 2 * m)
+#   {
+#     for (int i = low; i < high; i += 2 * m)
+#     {
+#       int from = i;
+#       int mid = i + m - 1;
+#       int to = min(i + 2 * m - 1, high);
+#       merge(from, mid, to);
+#     }
+#   }
+# }
+# void main()
+# {
+#   int i = int(injectionSwitch.x);
+#   do
+#   {
+#     switch (i)
+#     {
+#     case 0:
+#       data[i] = 4;
+#       break;
+#     case 1:
+#       data[i] = 3;
+#       break;
+#     case 2:
+#       data[i] = 2;
+#       break;
+#     case 3:
+#       data[i] = 1;
+#       break;
+#     case 4:
+#       data[i] = 0;
+#       break;
+#     case 5:
+#       data[i] = -1;
+#       break;
+#     case 6:
+#       data[i] = -2;
+#       break;
+#     case 7:
+#       data[i] = -3;
+#       break;
+#     case 8:
+#       data[i] = -4;
+#       break;
+#     case 9:
+#       data[i] = -5;
+#       break;
+#     }
+#     i++;
+#   } while (i < 10);
+#   for (int j = 0; j < 10; j++)
+#   {
+#     temp[j] = data[j];
+#   }
+#   mergeSort();
+#   float grey;
+#   if (int(gl_FragCoord[1]) < 30)
+#   {
+#     grey = 0.5 + float(data[0]) / 10.0;
+#   }
+#   else
+#   {
+#     if (int(gl_FragCoord[1]) < 60)
+#     {
+#       grey = 0.5 + float(data[1]) / 10.0;
+#     }
+#     else
+#     {
+#       if (int(gl_FragCoord[1]) < 90)
+#       {
+#         grey = 0.5 + float(data[2]) / 10.0;
+#       }
+#       else
+#       {
+#         if (int(gl_FragCoord[1]) < 120)
+#         {
+#           grey = 0.5 + float(data[3]) / 10.0;
+#         }
+#         else
+#         {
+#           if (int(gl_FragCoord[1]) < 150)
+#           {
+#             discard;
+#           }
+#           else
+#           {
+#             if (int(gl_FragCoord[1]) < 180)
+#             {
+#               grey = 0.5 + float(data[5]) / 10.0;
+#             }
+#             else
+#             {
+#               if (int(gl_FragCoord[1]) < 210)
+#               {
+#                 grey = 0.5 + float(data[6]) / 10.0;
+#               }
+#               else
+#               {
+#                 if (int(gl_FragCoord[1]) < 240)
+#                 {
+#                   grey = 0.5 + float(data[7]) / 10.0;
+#                 }
+#                 else
+#                 {
+#                   if (int(gl_FragCoord[1]) < 270)
+#                   {
+#                     grey = 0.5 + float(data[8]) / 10.0;
+#                   }
+#                   else
+#                   {
+#                     discard;
+#                   }
+#                 }
+#               }
+#             }
+#             // Code block bellow should not affect output image.
+#             // Always false.
+#             if (injectionSwitch.x > injectionSwitch.y)
+#             {
+#               _GLF_color = vec4(1.0);
+#             }
+#             vec2 a = vec2(1.0, 1.0);
+#             for (int i = 0; i <= 32; i++)
+#             {
+#               // Always false.
+#               if (a.x < 0.0)
+#               {
+#                 // Always false.
+#                 if (injectionSwitch.x > injectionSwitch.y)
+#                 {
+#                   discard;
+#                 }
+#                 a.y++;
+#               }
+#               a.x += a.y;
+#             }
+#             // End of block.
+#           }
+#         }
+#       }
+#     }
+#   }
+#   _GLF_color = vec4(vec3(grey), 1.0);
+# }
+SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 10
+; Bound: 602
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %243 %376
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 320
+               OpName %4 "main"
+               OpName %41 "data"
+               OpName %52 "temp"
+               OpName %159 "buf0"
+               OpMemberName %159 0 "injectionSwitch"
+               OpName %161 ""
+               OpName %243 "gl_FragCoord"
+               OpName %376 "_GLF_color"
+               OpMemberDecorate %159 0 Offset 0
+               OpDecorate %159 Block
+               OpDecorate %161 DescriptorSet 0
+               OpDecorate %161 Binding 0
+               OpDecorate %243 BuiltIn FragCoord
+               OpDecorate %376 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeInt 32 1
+          %7 = OpTypePointer Function %6
+         %22 = OpConstant %6 1
+         %31 = OpTypeBool
+         %37 = OpTypeInt 32 0
+         %38 = OpConstant %37 10
+         %39 = OpTypeArray %6 %38
+         %74 = OpConstant %6 10
+        %105 = OpConstant %6 0
+        %107 = OpConstant %6 9
+        %136 = OpConstant %6 2
+        %157 = OpTypeFloat 32
+        %158 = OpTypeVector %157 2
+        %159 = OpTypeStruct %158
+        %160 = OpTypePointer Uniform %159
+        %161 = OpVariable %160 Uniform
+        %162 = OpConstant %37 0
+        %163 = OpTypePointer Uniform %157
+        %184 = OpConstant %6 4
+        %188 = OpConstant %6 3
+        %201 = OpConstant %6 -1
+        %205 = OpConstant %6 -2
+        %209 = OpConstant %6 -3
+        %213 = OpConstant %6 -4
+        %217 = OpConstant %6 -5
+        %241 = OpTypeVector %157 4
+        %242 = OpTypePointer Input %241
+        %243 = OpVariable %242 Input
+        %244 = OpConstant %37 1
+        %245 = OpTypePointer Input %157
+        %249 = OpConstant %6 30
+        %255 = OpConstant %157 0.5
+        %266 = OpConstant %6 60
+        %279 = OpConstant %6 90
+        %292 = OpConstant %6 120
+        %305 = OpConstant %6 150
+        %314 = OpConstant %6 180
+        %318 = OpConstant %6 5
+        %328 = OpConstant %6 210
+        %332 = OpConstant %6 6
+        %342 = OpConstant %6 240
+        %346 = OpConstant %6 7
+        %356 = OpConstant %6 270
+        %360 = OpConstant %6 8
+        %375 = OpTypePointer Output %241
+        %376 = OpVariable %375 Output
+        %377 = OpConstant %157 1
+        %378 = OpConstantComposite %241 %377 %377 %377 %377
+        %381 = OpConstantComposite %158 %377 %377
+        %389 = OpConstant %6 32
+        %393 = OpConstant %157 0
+        %552 = OpTypePointer Function %39
+        %601 = OpConstant %157 0.100000001
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+         %52 = OpVariable %552 Function
+         %41 = OpVariable %552 Function
+        %164 = OpAccessChain %163 %161 %105 %162
+        %165 = OpLoad %157 %164
+        %166 = OpConvertFToS %6 %165
+               OpBranch %167
+        %167 = OpLabel
+        %561 = OpPhi %6 %166 %5 %222 %170
+               OpLoopMerge %169 %170 None
+               OpBranch %168
+        %168 = OpLabel
+               OpSelectionMerge %182 None
+               OpSwitch %561 %182 0 %172 1 %173 2 %174 3 %175 4 %176 5 %177 6 %178 7 %179 8 %180 9 %181
+        %172 = OpLabel
+        %185 = OpAccessChain %7 %41 %561
+               OpStore %185 %184
+               OpBranch %182
+        %173 = OpLabel
+        %189 = OpAccessChain %7 %41 %561
+               OpStore %189 %188
+               OpBranch %182
+        %174 = OpLabel
+        %192 = OpAccessChain %7 %41 %561
+               OpStore %192 %136
+               OpBranch %182
+        %175 = OpLabel
+        %195 = OpAccessChain %7 %41 %561
+               OpStore %195 %22
+               OpBranch %182
+        %176 = OpLabel
+        %198 = OpAccessChain %7 %41 %561
+               OpStore %198 %105
+               OpBranch %182
+        %177 = OpLabel
+        %202 = OpAccessChain %7 %41 %561
+               OpStore %202 %201
+               OpBranch %182
+        %178 = OpLabel
+        %206 = OpAccessChain %7 %41 %561
+               OpStore %206 %205
+               OpBranch %182
+        %179 = OpLabel
+        %210 = OpAccessChain %7 %41 %561
+               OpStore %210 %209
+               OpBranch %182
+        %180 = OpLabel
+        %214 = OpAccessChain %7 %41 %561
+               OpStore %214 %213
+               OpBranch %182
+        %181 = OpLabel
+        %218 = OpAccessChain %7 %41 %561
+               OpStore %218 %217
+               OpBranch %182
+        %182 = OpLabel
+        %222 = OpIAdd %6 %561 %22
+               OpBranch %170
+        %170 = OpLabel
+        %224 = OpSLessThan %31 %222 %74
+               OpBranchConditional %224 %167 %169
+        %169 = OpLabel
+               OpBranch %226
+        %226 = OpLabel
+        %563 = OpPhi %6 %105 %169 %239 %227
+        %232 = OpSLessThan %31 %563 %74
+               OpLoopMerge %228 %227 None
+               OpBranchConditional %232 %227 %228
+        %227 = OpLabel
+        %235 = OpAccessChain %7 %41 %563
+        %236 = OpLoad %6 %235
+        %237 = OpAccessChain %7 %52 %563
+               OpStore %237 %236
+        %239 = OpIAdd %6 %563 %22
+               OpBranch %226
+        %228 = OpLabel
+               OpBranch %434
+        %434 = OpLabel
+        %564 = OpPhi %6 %22 %228 %471 %469
+        %438 = OpSLessThanEqual %31 %564 %107
+               OpLoopMerge %472 %469 None
+               OpBranchConditional %438 %439 %472
+        %439 = OpLabel
+               OpBranch %441
+        %441 = OpLabel
+        %579 = OpPhi %6 %105 %439 %455 %463
+        %445 = OpSLessThan %31 %579 %107
+               OpLoopMerge %468 %463 None
+               OpBranchConditional %445 %446 %468
+        %446 = OpLabel
+        %450 = OpIAdd %6 %579 %564
+        %451 = OpISub %6 %450 %22
+        %454 = OpIMul %6 %136 %564
+        %455 = OpIAdd %6 %579 %454
+        %456 = OpISub %6 %455 %22
+        %458 = OpExtInst %6 %1 SMin %456 %107
+               OpBranch %482
+        %482 = OpLabel
+        %592 = OpPhi %6 %579 %446 %501 %516
+        %582 = OpPhi %6 %450 %446 %594 %516
+        %581 = OpPhi %6 %579 %446 %593 %516
+        %486 = OpSLessThanEqual %31 %581 %451
+        %489 = OpSLessThanEqual %31 %582 %458
+        %490 = OpLogicalAnd %31 %486 %489
+               OpLoopMerge %517 %516 None
+               OpBranchConditional %490 %491 %517
+        %491 = OpLabel
+        %493 = OpAccessChain %7 %41 %581
+        %494 = OpLoad %6 %493
+        %496 = OpAccessChain %7 %41 %582
+        %497 = OpLoad %6 %496
+        %498 = OpSLessThan %31 %494 %497
+        %501 = OpIAdd %6 %592 %22
+               OpSelectionMerge %515 None
+               OpBranchConditional %498 %499 %507
+        %499 = OpLabel
+        %503 = OpIAdd %6 %581 %22
+        %505 = OpLoad %6 %493
+        %506 = OpAccessChain %7 %52 %592
+               OpStore %506 %505
+               OpBranch %515
+        %507 = OpLabel
+        %511 = OpIAdd %6 %582 %22
+        %513 = OpLoad %6 %496
+        %514 = OpAccessChain %7 %52 %592
+               OpStore %514 %513
+               OpBranch %515
+        %515 = OpLabel
+        %594 = OpPhi %6 %582 %499 %511 %507
+        %593 = OpPhi %6 %503 %499 %581 %507
+               OpBranch %516
+        %516 = OpLabel
+               OpBranch %482
+        %517 = OpLabel
+               OpBranch %518
+        %518 = OpLabel
+        %591 = OpPhi %6 %592 %517 %528 %526
+        %583 = OpPhi %6 %581 %517 %530 %526
+        %521 = OpSLessThan %31 %583 %74
+        %524 = OpSLessThanEqual %31 %583 %451
+        %525 = OpLogicalAnd %31 %521 %524
+               OpLoopMerge %535 %526 None
+               OpBranchConditional %525 %526 %535
+        %526 = OpLabel
+        %528 = OpIAdd %6 %591 %22
+        %530 = OpIAdd %6 %583 %22
+        %531 = OpAccessChain %7 %41 %583
+        %532 = OpLoad %6 %531
+        %533 = OpAccessChain %7 %52 %591
+               OpStore %533 %532
+               OpBranch %518
+        %535 = OpLabel
+               OpBranch %537
+        %537 = OpLabel
+        %584 = OpPhi %6 %579 %535 %550 %542
+        %541 = OpSLessThanEqual %31 %584 %458
+               OpLoopMerge %551 %542 None
+               OpBranchConditional %541 %542 %551
+        %542 = OpLabel
+        %545 = OpAccessChain %7 %52 %584
+        %546 = OpLoad %6 %545
+        %547 = OpAccessChain %7 %41 %584
+               OpStore %547 %546
+        %550 = OpIAdd %6 %584 %22
+               OpBranch %537
+        %551 = OpLabel
+               OpBranch %463
+        %463 = OpLabel
+               OpBranch %441
+        %468 = OpLabel
+               OpBranch %469
+        %469 = OpLabel
+        %471 = OpIMul %6 %136 %564
+               OpBranch %434
+        %472 = OpLabel
+        %246 = OpAccessChain %245 %243 %244
+        %247 = OpLoad %157 %246
+        %248 = OpConvertFToS %6 %247
+        %250 = OpSLessThan %31 %248 %249
+               OpSelectionMerge %252 None
+               OpBranchConditional %250 %251 %262
+        %251 = OpLabel
+        %256 = OpAccessChain %7 %41 %105
+        %257 = OpLoad %6 %256
+        %258 = OpConvertSToF %157 %257
+        %260 = OpFMul %157 %258 %601
+        %261 = OpFAdd %157 %255 %260
+               OpBranch %252
+        %262 = OpLabel
+        %267 = OpSLessThan %31 %248 %266
+               OpSelectionMerge %269 None
+               OpBranchConditional %267 %268 %275
+        %268 = OpLabel
+        %270 = OpAccessChain %7 %41 %22
+        %271 = OpLoad %6 %270
+        %272 = OpConvertSToF %157 %271
+        %273 = OpFMul %157 %272 %601
+        %274 = OpFAdd %157 %255 %273
+               OpBranch %269
+        %275 = OpLabel
+        %280 = OpSLessThan %31 %248 %279
+               OpSelectionMerge %282 None
+               OpBranchConditional %280 %281 %288
+        %281 = OpLabel
+        %283 = OpAccessChain %7 %41 %136
+        %284 = OpLoad %6 %283
+        %285 = OpConvertSToF %157 %284
+        %286 = OpFMul %157 %285 %601
+        %287 = OpFAdd %157 %255 %286
+               OpBranch %282
+        %288 = OpLabel
+        %293 = OpSLessThan %31 %248 %292
+               OpSelectionMerge %295 None
+               OpBranchConditional %293 %294 %301
+        %294 = OpLabel
+        %296 = OpAccessChain %7 %41 %188
+        %297 = OpLoad %6 %296
+        %298 = OpConvertSToF %157 %297
+        %299 = OpFMul %157 %298 %601
+        %300 = OpFAdd %157 %255 %299
+               OpBranch %295
+        %301 = OpLabel
+        %306 = OpSLessThan %31 %248 %305
+               OpSelectionMerge %308 None
+               OpBranchConditional %306 %307 %310
+        %307 = OpLabel
+               OpKill
+        %310 = OpLabel
+        %315 = OpSLessThan %31 %248 %314
+               OpSelectionMerge %317 None
+               OpBranchConditional %315 %316 %324
+        %316 = OpLabel
+        %319 = OpAccessChain %7 %41 %318
+        %320 = OpLoad %6 %319
+        %321 = OpConvertSToF %157 %320
+        %322 = OpFMul %157 %321 %601
+        %323 = OpFAdd %157 %255 %322
+               OpBranch %317
+        %324 = OpLabel
+        %329 = OpSLessThan %31 %248 %328
+               OpSelectionMerge %331 None
+               OpBranchConditional %329 %330 %338
+        %330 = OpLabel
+        %333 = OpAccessChain %7 %41 %332
+        %334 = OpLoad %6 %333
+        %335 = OpConvertSToF %157 %334
+        %336 = OpFMul %157 %335 %601
+        %337 = OpFAdd %157 %255 %336
+               OpBranch %331
+        %338 = OpLabel
+        %343 = OpSLessThan %31 %248 %342
+               OpSelectionMerge %345 None
+               OpBranchConditional %343 %344 %352
+        %344 = OpLabel
+        %347 = OpAccessChain %7 %41 %346
+        %348 = OpLoad %6 %347
+        %349 = OpConvertSToF %157 %348
+        %350 = OpFMul %157 %349 %601
+        %351 = OpFAdd %157 %255 %350
+               OpBranch %345
+        %352 = OpLabel
+        %357 = OpSLessThan %31 %248 %356
+               OpSelectionMerge %358 None
+               OpBranchConditional %357 %358 %366
+        %358 = OpLabel
+        %361 = OpAccessChain %7 %41 %360
+        %362 = OpLoad %6 %361
+        %363 = OpConvertSToF %157 %362
+        %364 = OpFMul %157 %363 %601
+        %365 = OpFAdd %157 %255 %364
+               OpBranch %345
+        %366 = OpLabel
+               OpKill
+        %345 = OpLabel
+        %577 = OpPhi %157 %351 %344 %365 %358
+               OpBranch %331
+        %331 = OpLabel
+        %576 = OpPhi %157 %337 %330 %577 %345
+               OpBranch %317
+        %317 = OpLabel
+        %575 = OpPhi %157 %323 %316 %576 %331
+        %370 = OpAccessChain %163 %161 %105 %244
+        %371 = OpLoad %157 %370
+        %372 = OpFOrdGreaterThan %31 %165 %371
+               OpSelectionMerge %374 None
+               OpBranchConditional %372 %373 %374
+        %373 = OpLabel
+               OpStore %376 %378
+               OpBranch %374
+        %374 = OpLabel
+               OpBranch %383
+        %383 = OpLabel
+        %566 = OpPhi %158 %381 %374 %560 %386
+        %565 = OpPhi %6 %105 %374 %415 %386
+        %390 = OpSLessThanEqual %31 %565 %389
+               OpLoopMerge %385 %386 None
+               OpBranchConditional %390 %384 %385
+        %384 = OpLabel
+        %392 = OpCompositeExtract %157 %566 0
+        %394 = OpFOrdLessThan %31 %392 %393
+               OpSelectionMerge %396 None
+               OpBranchConditional %394 %395 %396
+        %395 = OpLabel
+               OpSelectionMerge %403 None
+               OpBranchConditional %372 %402 %403
+        %402 = OpLabel
+               OpKill
+        %403 = OpLabel
+        %406 = OpCompositeExtract %157 %566 1
+        %407 = OpFAdd %157 %406 %377
+        %556 = OpCompositeInsert %158 %407 %566 1
+               OpBranch %396
+        %396 = OpLabel
+        %567 = OpPhi %158 %566 %384 %556 %403
+        %409 = OpCompositeExtract %157 %567 1
+        %411 = OpCompositeExtract %157 %567 0
+        %412 = OpFAdd %157 %411 %409
+        %560 = OpCompositeInsert %158 %412 %567 0
+               OpBranch %386
+        %386 = OpLabel
+        %415 = OpIAdd %6 %565 %22
+               OpBranch %383
+        %385 = OpLabel
+               OpBranch %308
+        %308 = OpLabel
+               OpBranch %295
+        %295 = OpLabel
+        %572 = OpPhi %157 %300 %294 %575 %308
+               OpBranch %282
+        %282 = OpLabel
+        %571 = OpPhi %157 %287 %281 %572 %295
+               OpBranch %269
+        %269 = OpLabel
+        %570 = OpPhi %157 %274 %268 %571 %282
+               OpBranch %252
+        %252 = OpLabel
+        %569 = OpPhi %157 %261 %251 %570 %269
+        %422 = OpCompositeConstruct %241 %569 %569 %569 %377
+               OpStore %376 %422
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# injectionSwitch
+BUFFER variant_injectionSwitch DATA_TYPE vec2<float> STD140 DATA
+ 0.0 1.0
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 256 256
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant_injectionSwitch AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256
+
+EXPECT reference_framebuffer EQ_HISTOGRAM_EMD_BUFFER variant_framebuffer TOLERANCE 0.005
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/stable-mergesort-reversed-for-loop.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/stable-mergesort-reversed-for-loop.amber
new file mode 100644
index 0000000..03dcbca
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/stable-mergesort-reversed-for-loop.amber
@@ -0,0 +1,1552 @@
+#!amber
+
+# Copyright 2020 Google LLC
+#
+# 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.
+
+
+# A test for a bug found by GraphicsFuzz.
+
+# Short description: A fragment shader with once iterated reversed for loop
+
+# The test passes because both shaders render the same image.
+
+SHADER vertex reference_vertex_shader PASSTHROUGH
+
+# reference_fragment_shader is derived from the following GLSL:
+# #version 320 es
+# precision highp float;
+#
+# precision highp int;
+#
+# layout(location = 0) out vec4 _GLF_color;
+#
+# layout(set = 0, binding = 0) uniform buf0
+# {
+#     vec2 injectionSwitch;
+# };
+# const int N = 10;
+#
+# int data[10], temp[10];
+#
+# void merge(int from, int mid, int to)
+# {
+#     int k = from, i = from, j = mid + 1;
+#     while (i <= mid && j <= to)
+#     {
+#         if (data[i] < data[j])
+#         {
+#             temp[k++] = data[i++];
+#         }
+#         else
+#         {
+#             temp[k++] = data[j++];
+#         }
+#     }
+#     while (i < N && i <= mid)
+#     {
+#         temp[k++] = data[i++];
+#     }
+#     for (int i = from; i <= to; i++)
+#     {
+#         data[i] = temp[i];
+#     }
+# }
+# void mergeSort()
+# {
+#     int low = 0;
+#     int high = N - 1;
+#     for (int m = 1; m <= high; m = 2 * m)
+#     {
+#         for (int i = low; i < high; i += 2 * m)
+#         {
+#             int from = i;
+#             int mid = i + m - 1;
+#             int to = min(i + 2 * m - 1, high);
+#             merge(from, mid, to);
+#         }
+#     }
+# }
+# void main()
+# {
+#     int i = int(injectionSwitch.x);
+#     do
+#     {
+#         switch (i)
+#         {
+#         case 0:
+#             data[i] = 4;
+#             break;
+#         case 1:
+#             data[i] = 3;
+#             break;
+#         case 2:
+#             data[i] = 2;
+#             break;
+#         case 3:
+#             data[i] = 1;
+#             break;
+#         case 4:
+#             data[i] = 0;
+#             break;
+#         case 5:
+#             data[i] = -1;
+#             break;
+#         case 6:
+#             data[i] = -2;
+#             break;
+#         case 7:
+#             data[i] = -3;
+#             break;
+#         case 8:
+#             data[i] = -4;
+#             break;
+#         case 9:
+#             data[i] = -5;
+#             break;
+#         }
+#         i++;
+#     } while (i < 10);
+#     for (int j = 0; j < 10; j++)
+#     {
+#         temp[j] = data[j];
+#     }
+#     mergeSort();
+#     float grey;
+#     if (int(gl_FragCoord[1]) < 30)
+#     {
+#         grey = 0.5 + float(data[0]) / 10.0;
+#     }
+#     else
+#     {
+#         if (int(gl_FragCoord[1]) < 60)
+#         {
+#             grey = 0.5 + float(data[1]) / 10.0;
+#         }
+#         else
+#         {
+#             if (int(gl_FragCoord[1]) < 90)
+#             {
+#                 grey = 0.5 + float(data[2]) / 10.0;
+#             }
+#             else
+#             {
+#                 if (int(gl_FragCoord[1]) < 120)
+#                 {
+#                     grey = 0.5 + float(data[3]) / 10.0;
+#                 }
+#                 else
+#                 {
+#                     if (int(gl_FragCoord[1]) < 150)
+#                     {
+#                         discard;
+#                     }
+#                     else
+#                     {
+#                         if (int(gl_FragCoord[1]) < 180)
+#                         {
+#                             grey = 0.5 + float(data[5]) / 10.0;
+#                         }
+#                         else
+#                         {
+#                             if (int(gl_FragCoord[1]) < 210)
+#                             {
+#                                 grey = 0.5 + float(data[6]) / 10.0;
+#                             }
+#                             else
+#                             {
+#                                 if (int(gl_FragCoord[1]) < 240)
+#                                 {
+#                                     grey = 0.5 + float(data[7]) / 10.0;
+#                                 }
+#                                 else
+#                                 {
+#                                     if (int(gl_FragCoord[1]) < 270)
+#                                     {
+#                                         grey = 0.5 + float(data[8]) / 10.0;
+#                                     }
+#                                     else
+#                                     {
+#                                         discard;
+#                                     }
+#                                 }
+#                             }
+#                         }
+#                     }
+#                 }
+#             }
+#         }
+#     }
+#     _GLF_color = vec4(vec3(grey), 1.0);
+# }
+SHADER fragment reference_fragment_shader SPIRV-ASM
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 10
+; Bound: 378
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %243 %369
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 320
+               OpName %4 "main"
+               OpName %12 "merge(i1;i1;i1;"
+               OpName %9 "from"
+               OpName %10 "mid"
+               OpName %11 "to"
+               OpName %14 "mergeSort("
+               OpName %16 "k"
+               OpName %18 "i"
+               OpName %20 "j"
+               OpName %41 "data"
+               OpName %52 "temp"
+               OpName %87 "i"
+               OpName %104 "low"
+               OpName %106 "high"
+               OpName %108 "m"
+               OpName %117 "i"
+               OpName %127 "from"
+               OpName %129 "mid"
+               OpName %134 "to"
+               OpName %143 "param"
+               OpName %145 "param"
+               OpName %147 "param"
+               OpName %156 "i"
+               OpName %159 "buf0"
+               OpMemberName %159 0 "injectionSwitch"
+               OpName %161 ""
+               OpName %225 "j"
+               OpName %243 "gl_FragCoord"
+               OpName %254 "grey"
+               OpName %369 "_GLF_color"
+               OpMemberDecorate %159 0 Offset 0
+               OpDecorate %159 Block
+               OpDecorate %161 DescriptorSet 0
+               OpDecorate %161 Binding 0
+               OpDecorate %243 BuiltIn FragCoord
+               OpDecorate %369 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeInt 32 1
+          %7 = OpTypePointer Function %6
+          %8 = OpTypeFunction %2 %7 %7 %7
+         %22 = OpConstant %6 1
+         %31 = OpTypeBool
+         %37 = OpTypeInt 32 0
+         %38 = OpConstant %37 10
+         %39 = OpTypeArray %6 %38
+         %40 = OpTypePointer Private %39
+         %41 = OpVariable %40 Private
+         %43 = OpTypePointer Private %6
+         %52 = OpVariable %40 Private
+         %74 = OpConstant %6 10
+        %105 = OpConstant %6 0
+        %107 = OpConstant %6 9
+        %136 = OpConstant %6 2
+        %157 = OpTypeFloat 32
+        %158 = OpTypeVector %157 2
+        %159 = OpTypeStruct %158
+        %160 = OpTypePointer Uniform %159
+        %161 = OpVariable %160 Uniform
+        %162 = OpConstant %37 0
+        %163 = OpTypePointer Uniform %157
+        %184 = OpConstant %6 4
+        %188 = OpConstant %6 3
+        %201 = OpConstant %6 -1
+        %205 = OpConstant %6 -2
+        %209 = OpConstant %6 -3
+        %213 = OpConstant %6 -4
+        %217 = OpConstant %6 -5
+        %241 = OpTypeVector %157 4
+        %242 = OpTypePointer Input %241
+        %243 = OpVariable %242 Input
+        %244 = OpConstant %37 1
+        %245 = OpTypePointer Input %157
+        %249 = OpConstant %6 30
+        %253 = OpTypePointer Function %157
+        %255 = OpConstant %157 0.5
+        %259 = OpConstant %157 10
+        %266 = OpConstant %6 60
+        %279 = OpConstant %6 90
+        %292 = OpConstant %6 120
+        %305 = OpConstant %6 150
+        %314 = OpConstant %6 180
+        %318 = OpConstant %6 5
+        %328 = OpConstant %6 210
+        %332 = OpConstant %6 6
+        %342 = OpConstant %6 240
+        %346 = OpConstant %6 7
+        %356 = OpConstant %6 270
+        %360 = OpConstant %6 8
+        %368 = OpTypePointer Output %241
+        %369 = OpVariable %368 Output
+        %371 = OpTypeVector %157 3
+        %373 = OpConstant %157 1
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+        %156 = OpVariable %7 Function
+        %225 = OpVariable %7 Function
+        %254 = OpVariable %253 Function
+        %164 = OpAccessChain %163 %161 %105 %162
+        %165 = OpLoad %157 %164
+        %166 = OpConvertFToS %6 %165
+               OpStore %156 %166
+               OpBranch %167
+        %167 = OpLabel
+               OpLoopMerge %169 %170 None
+               OpBranch %168
+        %168 = OpLabel
+        %171 = OpLoad %6 %156
+               OpSelectionMerge %182 None
+               OpSwitch %171 %182 0 %172 1 %173 2 %174 3 %175 4 %176 5 %177 6 %178 7 %179 8 %180 9 %181
+        %172 = OpLabel
+        %183 = OpLoad %6 %156
+        %185 = OpAccessChain %43 %41 %183
+               OpStore %185 %184
+               OpBranch %182
+        %173 = OpLabel
+        %187 = OpLoad %6 %156
+        %189 = OpAccessChain %43 %41 %187
+               OpStore %189 %188
+               OpBranch %182
+        %174 = OpLabel
+        %191 = OpLoad %6 %156
+        %192 = OpAccessChain %43 %41 %191
+               OpStore %192 %136
+               OpBranch %182
+        %175 = OpLabel
+        %194 = OpLoad %6 %156
+        %195 = OpAccessChain %43 %41 %194
+               OpStore %195 %22
+               OpBranch %182
+        %176 = OpLabel
+        %197 = OpLoad %6 %156
+        %198 = OpAccessChain %43 %41 %197
+               OpStore %198 %105
+               OpBranch %182
+        %177 = OpLabel
+        %200 = OpLoad %6 %156
+        %202 = OpAccessChain %43 %41 %200
+               OpStore %202 %201
+               OpBranch %182
+        %178 = OpLabel
+        %204 = OpLoad %6 %156
+        %206 = OpAccessChain %43 %41 %204
+               OpStore %206 %205
+               OpBranch %182
+        %179 = OpLabel
+        %208 = OpLoad %6 %156
+        %210 = OpAccessChain %43 %41 %208
+               OpStore %210 %209
+               OpBranch %182
+        %180 = OpLabel
+        %212 = OpLoad %6 %156
+        %214 = OpAccessChain %43 %41 %212
+               OpStore %214 %213
+               OpBranch %182
+        %181 = OpLabel
+        %216 = OpLoad %6 %156
+        %218 = OpAccessChain %43 %41 %216
+               OpStore %218 %217
+               OpBranch %182
+        %182 = OpLabel
+        %221 = OpLoad %6 %156
+        %222 = OpIAdd %6 %221 %22
+               OpStore %156 %222
+               OpBranch %170
+        %170 = OpLabel
+        %223 = OpLoad %6 %156
+        %224 = OpSLessThan %31 %223 %74
+               OpBranchConditional %224 %167 %169
+        %169 = OpLabel
+               OpStore %225 %105
+               OpBranch %226
+        %226 = OpLabel
+               OpLoopMerge %228 %229 None
+               OpBranch %230
+        %230 = OpLabel
+        %231 = OpLoad %6 %225
+        %232 = OpSLessThan %31 %231 %74
+               OpBranchConditional %232 %227 %228
+        %227 = OpLabel
+        %233 = OpLoad %6 %225
+        %234 = OpLoad %6 %225
+        %235 = OpAccessChain %43 %41 %234
+        %236 = OpLoad %6 %235
+        %237 = OpAccessChain %43 %52 %233
+               OpStore %237 %236
+               OpBranch %229
+        %229 = OpLabel
+        %238 = OpLoad %6 %225
+        %239 = OpIAdd %6 %238 %22
+               OpStore %225 %239
+               OpBranch %226
+        %228 = OpLabel
+        %240 = OpFunctionCall %2 %14
+        %246 = OpAccessChain %245 %243 %244
+        %247 = OpLoad %157 %246
+        %248 = OpConvertFToS %6 %247
+        %250 = OpSLessThan %31 %248 %249
+               OpSelectionMerge %252 None
+               OpBranchConditional %250 %251 %262
+        %251 = OpLabel
+        %256 = OpAccessChain %43 %41 %105
+        %257 = OpLoad %6 %256
+        %258 = OpConvertSToF %157 %257
+        %260 = OpFDiv %157 %258 %259
+        %261 = OpFAdd %157 %255 %260
+               OpStore %254 %261
+               OpBranch %252
+        %262 = OpLabel
+        %263 = OpAccessChain %245 %243 %244
+        %264 = OpLoad %157 %263
+        %265 = OpConvertFToS %6 %264
+        %267 = OpSLessThan %31 %265 %266
+               OpSelectionMerge %269 None
+               OpBranchConditional %267 %268 %275
+        %268 = OpLabel
+        %270 = OpAccessChain %43 %41 %22
+        %271 = OpLoad %6 %270
+        %272 = OpConvertSToF %157 %271
+        %273 = OpFDiv %157 %272 %259
+        %274 = OpFAdd %157 %255 %273
+               OpStore %254 %274
+               OpBranch %269
+        %275 = OpLabel
+        %276 = OpAccessChain %245 %243 %244
+        %277 = OpLoad %157 %276
+        %278 = OpConvertFToS %6 %277
+        %280 = OpSLessThan %31 %278 %279
+               OpSelectionMerge %282 None
+               OpBranchConditional %280 %281 %288
+        %281 = OpLabel
+        %283 = OpAccessChain %43 %41 %136
+        %284 = OpLoad %6 %283
+        %285 = OpConvertSToF %157 %284
+        %286 = OpFDiv %157 %285 %259
+        %287 = OpFAdd %157 %255 %286
+               OpStore %254 %287
+               OpBranch %282
+        %288 = OpLabel
+        %289 = OpAccessChain %245 %243 %244
+        %290 = OpLoad %157 %289
+        %291 = OpConvertFToS %6 %290
+        %293 = OpSLessThan %31 %291 %292
+               OpSelectionMerge %295 None
+               OpBranchConditional %293 %294 %301
+        %294 = OpLabel
+        %296 = OpAccessChain %43 %41 %188
+        %297 = OpLoad %6 %296
+        %298 = OpConvertSToF %157 %297
+        %299 = OpFDiv %157 %298 %259
+        %300 = OpFAdd %157 %255 %299
+               OpStore %254 %300
+               OpBranch %295
+        %301 = OpLabel
+        %302 = OpAccessChain %245 %243 %244
+        %303 = OpLoad %157 %302
+        %304 = OpConvertFToS %6 %303
+        %306 = OpSLessThan %31 %304 %305
+               OpSelectionMerge %308 None
+               OpBranchConditional %306 %307 %310
+        %307 = OpLabel
+               OpKill
+        %310 = OpLabel
+        %311 = OpAccessChain %245 %243 %244
+        %312 = OpLoad %157 %311
+        %313 = OpConvertFToS %6 %312
+        %315 = OpSLessThan %31 %313 %314
+               OpSelectionMerge %317 None
+               OpBranchConditional %315 %316 %324
+        %316 = OpLabel
+        %319 = OpAccessChain %43 %41 %318
+        %320 = OpLoad %6 %319
+        %321 = OpConvertSToF %157 %320
+        %322 = OpFDiv %157 %321 %259
+        %323 = OpFAdd %157 %255 %322
+               OpStore %254 %323
+               OpBranch %317
+        %324 = OpLabel
+        %325 = OpAccessChain %245 %243 %244
+        %326 = OpLoad %157 %325
+        %327 = OpConvertFToS %6 %326
+        %329 = OpSLessThan %31 %327 %328
+               OpSelectionMerge %331 None
+               OpBranchConditional %329 %330 %338
+        %330 = OpLabel
+        %333 = OpAccessChain %43 %41 %332
+        %334 = OpLoad %6 %333
+        %335 = OpConvertSToF %157 %334
+        %336 = OpFDiv %157 %335 %259
+        %337 = OpFAdd %157 %255 %336
+               OpStore %254 %337
+               OpBranch %331
+        %338 = OpLabel
+        %339 = OpAccessChain %245 %243 %244
+        %340 = OpLoad %157 %339
+        %341 = OpConvertFToS %6 %340
+        %343 = OpSLessThan %31 %341 %342
+               OpSelectionMerge %345 None
+               OpBranchConditional %343 %344 %352
+        %344 = OpLabel
+        %347 = OpAccessChain %43 %41 %346
+        %348 = OpLoad %6 %347
+        %349 = OpConvertSToF %157 %348
+        %350 = OpFDiv %157 %349 %259
+        %351 = OpFAdd %157 %255 %350
+               OpStore %254 %351
+               OpBranch %345
+        %352 = OpLabel
+        %353 = OpAccessChain %245 %243 %244
+        %354 = OpLoad %157 %353
+        %355 = OpConvertFToS %6 %354
+        %357 = OpSLessThan %31 %355 %356
+               OpSelectionMerge %359 None
+               OpBranchConditional %357 %358 %366
+        %358 = OpLabel
+        %361 = OpAccessChain %43 %41 %360
+        %362 = OpLoad %6 %361
+        %363 = OpConvertSToF %157 %362
+        %364 = OpFDiv %157 %363 %259
+        %365 = OpFAdd %157 %255 %364
+               OpStore %254 %365
+               OpBranch %359
+        %366 = OpLabel
+               OpKill
+        %359 = OpLabel
+               OpBranch %345
+        %345 = OpLabel
+               OpBranch %331
+        %331 = OpLabel
+               OpBranch %317
+        %317 = OpLabel
+               OpBranch %308
+        %308 = OpLabel
+               OpBranch %295
+        %295 = OpLabel
+               OpBranch %282
+        %282 = OpLabel
+               OpBranch %269
+        %269 = OpLabel
+               OpBranch %252
+        %252 = OpLabel
+        %370 = OpLoad %157 %254
+        %372 = OpCompositeConstruct %371 %370 %370 %370
+        %374 = OpCompositeExtract %157 %372 0
+        %375 = OpCompositeExtract %157 %372 1
+        %376 = OpCompositeExtract %157 %372 2
+        %377 = OpCompositeConstruct %241 %374 %375 %376 %373
+               OpStore %369 %377
+               OpReturn
+               OpFunctionEnd
+         %12 = OpFunction %2 None %8
+          %9 = OpFunctionParameter %7
+         %10 = OpFunctionParameter %7
+         %11 = OpFunctionParameter %7
+         %13 = OpLabel
+         %16 = OpVariable %7 Function
+         %18 = OpVariable %7 Function
+         %20 = OpVariable %7 Function
+         %87 = OpVariable %7 Function
+         %17 = OpLoad %6 %9
+               OpStore %16 %17
+         %19 = OpLoad %6 %9
+               OpStore %18 %19
+         %21 = OpLoad %6 %10
+         %23 = OpIAdd %6 %21 %22
+               OpStore %20 %23
+               OpBranch %24
+         %24 = OpLabel
+               OpLoopMerge %26 %27 None
+               OpBranch %28
+         %28 = OpLabel
+         %29 = OpLoad %6 %18
+         %30 = OpLoad %6 %10
+         %32 = OpSLessThanEqual %31 %29 %30
+         %33 = OpLoad %6 %20
+         %34 = OpLoad %6 %11
+         %35 = OpSLessThanEqual %31 %33 %34
+         %36 = OpLogicalAnd %31 %32 %35
+               OpBranchConditional %36 %25 %26
+         %25 = OpLabel
+         %42 = OpLoad %6 %18
+         %44 = OpAccessChain %43 %41 %42
+         %45 = OpLoad %6 %44
+         %46 = OpLoad %6 %20
+         %47 = OpAccessChain %43 %41 %46
+         %48 = OpLoad %6 %47
+         %49 = OpSLessThan %31 %45 %48
+               OpSelectionMerge %51 None
+               OpBranchConditional %49 %50 %60
+         %50 = OpLabel
+         %53 = OpLoad %6 %16
+         %54 = OpIAdd %6 %53 %22
+               OpStore %16 %54
+         %55 = OpLoad %6 %18
+         %56 = OpIAdd %6 %55 %22
+               OpStore %18 %56
+         %57 = OpAccessChain %43 %41 %55
+         %58 = OpLoad %6 %57
+         %59 = OpAccessChain %43 %52 %53
+               OpStore %59 %58
+               OpBranch %51
+         %60 = OpLabel
+         %61 = OpLoad %6 %16
+         %62 = OpIAdd %6 %61 %22
+               OpStore %16 %62
+         %63 = OpLoad %6 %20
+         %64 = OpIAdd %6 %63 %22
+               OpStore %20 %64
+         %65 = OpAccessChain %43 %41 %63
+         %66 = OpLoad %6 %65
+         %67 = OpAccessChain %43 %52 %61
+               OpStore %67 %66
+               OpBranch %51
+         %51 = OpLabel
+               OpBranch %27
+         %27 = OpLabel
+               OpBranch %24
+         %26 = OpLabel
+               OpBranch %68
+         %68 = OpLabel
+               OpLoopMerge %70 %71 None
+               OpBranch %72
+         %72 = OpLabel
+         %73 = OpLoad %6 %18
+         %75 = OpSLessThan %31 %73 %74
+         %76 = OpLoad %6 %18
+         %77 = OpLoad %6 %10
+         %78 = OpSLessThanEqual %31 %76 %77
+         %79 = OpLogicalAnd %31 %75 %78
+               OpBranchConditional %79 %69 %70
+         %69 = OpLabel
+         %80 = OpLoad %6 %16
+         %81 = OpIAdd %6 %80 %22
+               OpStore %16 %81
+         %82 = OpLoad %6 %18
+         %83 = OpIAdd %6 %82 %22
+               OpStore %18 %83
+         %84 = OpAccessChain %43 %41 %82
+         %85 = OpLoad %6 %84
+         %86 = OpAccessChain %43 %52 %80
+               OpStore %86 %85
+               OpBranch %71
+         %71 = OpLabel
+               OpBranch %68
+         %70 = OpLabel
+         %88 = OpLoad %6 %9
+               OpStore %87 %88
+               OpBranch %89
+         %89 = OpLabel
+               OpLoopMerge %91 %92 None
+               OpBranch %93
+         %93 = OpLabel
+         %94 = OpLoad %6 %87
+         %95 = OpLoad %6 %11
+         %96 = OpSLessThanEqual %31 %94 %95
+               OpBranchConditional %96 %90 %91
+         %90 = OpLabel
+         %97 = OpLoad %6 %87
+         %98 = OpLoad %6 %87
+         %99 = OpAccessChain %43 %52 %98
+        %100 = OpLoad %6 %99
+        %101 = OpAccessChain %43 %41 %97
+               OpStore %101 %100
+               OpBranch %92
+         %92 = OpLabel
+        %102 = OpLoad %6 %87
+        %103 = OpIAdd %6 %102 %22
+               OpStore %87 %103
+               OpBranch %89
+         %91 = OpLabel
+               OpReturn
+               OpFunctionEnd
+         %14 = OpFunction %2 None %3
+         %15 = OpLabel
+        %104 = OpVariable %7 Function
+        %106 = OpVariable %7 Function
+        %108 = OpVariable %7 Function
+        %117 = OpVariable %7 Function
+        %127 = OpVariable %7 Function
+        %129 = OpVariable %7 Function
+        %134 = OpVariable %7 Function
+        %143 = OpVariable %7 Function
+        %145 = OpVariable %7 Function
+        %147 = OpVariable %7 Function
+               OpStore %104 %105
+               OpStore %106 %107
+               OpStore %108 %22
+               OpBranch %109
+        %109 = OpLabel
+               OpLoopMerge %111 %112 None
+               OpBranch %113
+        %113 = OpLabel
+        %114 = OpLoad %6 %108
+        %115 = OpLoad %6 %106
+        %116 = OpSLessThanEqual %31 %114 %115
+               OpBranchConditional %116 %110 %111
+        %110 = OpLabel
+        %118 = OpLoad %6 %104
+               OpStore %117 %118
+               OpBranch %119
+        %119 = OpLabel
+               OpLoopMerge %121 %122 None
+               OpBranch %123
+        %123 = OpLabel
+        %124 = OpLoad %6 %117
+        %125 = OpLoad %6 %106
+        %126 = OpSLessThan %31 %124 %125
+               OpBranchConditional %126 %120 %121
+        %120 = OpLabel
+        %128 = OpLoad %6 %117
+               OpStore %127 %128
+        %130 = OpLoad %6 %117
+        %131 = OpLoad %6 %108
+        %132 = OpIAdd %6 %130 %131
+        %133 = OpISub %6 %132 %22
+               OpStore %129 %133
+        %135 = OpLoad %6 %117
+        %137 = OpLoad %6 %108
+        %138 = OpIMul %6 %136 %137
+        %139 = OpIAdd %6 %135 %138
+        %140 = OpISub %6 %139 %22
+        %141 = OpLoad %6 %106
+        %142 = OpExtInst %6 %1 SMin %140 %141
+               OpStore %134 %142
+        %144 = OpLoad %6 %127
+               OpStore %143 %144
+        %146 = OpLoad %6 %129
+               OpStore %145 %146
+        %148 = OpLoad %6 %134
+               OpStore %147 %148
+        %149 = OpFunctionCall %2 %12 %143 %145 %147
+               OpBranch %122
+        %122 = OpLabel
+        %150 = OpLoad %6 %108
+        %151 = OpIMul %6 %136 %150
+        %152 = OpLoad %6 %117
+        %153 = OpIAdd %6 %152 %151
+               OpStore %117 %153
+               OpBranch %119
+        %121 = OpLabel
+               OpBranch %112
+        %112 = OpLabel
+        %154 = OpLoad %6 %108
+        %155 = OpIMul %6 %136 %154
+               OpStore %108 %155
+               OpBranch %109
+        %111 = OpLabel
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for reference
+
+# injectionSwitch
+BUFFER reference_injectionSwitch DATA_TYPE vec2<float> DATA
+ 0.0 1.0
+END
+
+BUFFER reference_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics reference_pipeline
+  ATTACH reference_vertex_shader
+  ATTACH reference_fragment_shader
+  FRAMEBUFFER_SIZE 256 256
+  BIND BUFFER reference_framebuffer AS color LOCATION 0
+  BIND BUFFER reference_injectionSwitch AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR reference_pipeline 0 0 0 255
+
+CLEAR reference_pipeline
+RUN reference_pipeline DRAW_RECT POS 0 0 SIZE 256 256
+
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+# variant_fragment_shader is derived from the following GLSL:
+# #version 320 es
+# precision highp float;
+#
+# precision highp int;
+#
+# layout(location = 0) out vec4 _GLF_color;
+#
+# layout(set = 0, binding = 0) uniform buf0
+# {
+#     vec2 injectionSwitch;
+# };
+# const int N = 10;
+#
+# int data[10], temp[10];
+#
+# void merge(int from, int mid, int to)
+# {
+#     int k = from, i = from, j = mid + 1;
+#     while (i <= mid && j <= to)
+#     {
+#         if (data[i] < data[j])
+#         {
+#             temp[k++] = data[i++];
+#         }
+#         else
+#         {
+#             temp[k++] = data[j++];
+#         }
+#     }
+#     while (i < N && i <= mid)
+#     {
+#         temp[k++] = data[i++];
+#     }
+#     for (int i = from; i <= to; i++)
+#     {
+#         data[i] = temp[i];
+#     }
+# }
+# void mergeSort()
+# {
+#     int low = 0;
+#     int high = N - 1;
+#     for (int m = 1; m <= high; m = 2 * m)
+#     {
+#         for (int i = low; i < high; i += 2 * m)
+#         {
+#             int from = i;
+#             int mid = i + m - 1;
+#             int to = min(i + 2 * m - 1, high);
+#             merge(from, mid, to);
+#         }
+#     }
+# }
+# void main()
+# {
+#     int i = int(injectionSwitch.x);
+#     do
+#     {
+#         switch (i)
+#         {
+#         case 0:
+#             data[i] = 4;
+#             break;
+#         case 1:
+#             data[i] = 3;
+#             break;
+#         case 2:
+#             data[i] = 2;
+#             break;
+#         case 3:
+#             data[i] = 1;
+#             break;
+#         case 4:
+#             data[i] = 0;
+#             break;
+#         case 5:
+#             data[i] = -1;
+#             break;
+#         case 6:
+#             data[i] = -2;
+#             break;
+#         case 7:
+#             data[i] = -3;
+#             break;
+#         case 8:
+#             data[i] = -4;
+#             break;
+#         case 9:
+#             data[i] = -5;
+#             break;
+#         }
+#         i++;
+#     } while (i < 10);
+#     for (int j = 0; j < 10; j++)
+#     {
+#         temp[j] = data[j];
+#     }
+#     mergeSort();
+#     float grey;
+#     if (int(gl_FragCoord[1]) < 30)
+#     {
+#         grey = 0.5 + float(data[0]) / 10.0;
+#     }
+#     else
+#     {
+#         if (int(gl_FragCoord[1]) < 60)
+#         {
+#             grey = 0.5 + float(data[1]) / 10.0;
+#         }
+#         else
+#         {
+#             if (int(gl_FragCoord[1]) < 90)
+#             {
+#                 grey = 0.5 + float(data[2]) / 10.0;
+#             }
+#             else
+#             {
+#                 if (int(gl_FragCoord[1]) < 120)
+#                 {
+#                     grey = 0.5 + float(data[3]) / 10.0;
+#                 }
+#                 else
+#                 {
+#                     if (int(gl_FragCoord[1]) < 150)
+#                     {
+#                         // Iterates once.
+#                         for (int int_i = 1; int_i > int((injectionSwitch.x)); int_i--)
+#                         {
+#                             discard;
+#                         }
+#                     }
+#                     else
+#                     {
+#                         if (int(gl_FragCoord[1]) < 180)
+#                         {
+#                             grey = 0.5 + float(data[5]) / 10.0;
+#                         }
+#                         else
+#                         {
+#                             if (int(gl_FragCoord[1]) < 210)
+#                             {
+#                                 grey = 0.5 + float(data[6]) / 10.0;
+#                             }
+#                             else
+#                             {
+#                                 if (int(gl_FragCoord[1]) < 240)
+#                                 {
+#                                     grey = 0.5 + float(data[7]) / 10.0;
+#                                 }
+#                                 else
+#                                 {
+#                                     if (int(gl_FragCoord[1]) < 270)
+#                                     {
+#                                         grey = 0.5 + float(data[8]) / 10.0;
+#                                     }
+#                                     else
+#                                     {
+#                                         discard;
+#                                     }
+#                                 }
+#                             }
+#                         }
+#                     }
+#                 }
+#             }
+#         }
+#     }
+#     _GLF_color = vec4(vec3(grey), 1.0);
+# }
+SHADER fragment variant_fragment_shader SPIRV-ASM
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 10
+; Bound: 391
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %243 %382
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 320
+               OpName %4 "main"
+               OpName %12 "merge(i1;i1;i1;"
+               OpName %9 "from"
+               OpName %10 "mid"
+               OpName %11 "to"
+               OpName %14 "mergeSort("
+               OpName %16 "k"
+               OpName %18 "i"
+               OpName %20 "j"
+               OpName %41 "data"
+               OpName %52 "temp"
+               OpName %87 "i"
+               OpName %104 "low"
+               OpName %106 "high"
+               OpName %108 "m"
+               OpName %117 "i"
+               OpName %127 "from"
+               OpName %129 "mid"
+               OpName %134 "to"
+               OpName %143 "param"
+               OpName %145 "param"
+               OpName %147 "param"
+               OpName %156 "i"
+               OpName %159 "buf0"
+               OpMemberName %159 0 "injectionSwitch"
+               OpName %161 ""
+               OpName %225 "j"
+               OpName %243 "gl_FragCoord"
+               OpName %254 "grey"
+               OpName %309 "int_i"
+               OpName %382 "_GLF_color"
+               OpMemberDecorate %159 0 Offset 0
+               OpDecorate %159 Block
+               OpDecorate %161 DescriptorSet 0
+               OpDecorate %161 Binding 0
+               OpDecorate %243 BuiltIn FragCoord
+               OpDecorate %382 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeInt 32 1
+          %7 = OpTypePointer Function %6
+          %8 = OpTypeFunction %2 %7 %7 %7
+         %22 = OpConstant %6 1
+         %31 = OpTypeBool
+         %37 = OpTypeInt 32 0
+         %38 = OpConstant %37 10
+         %39 = OpTypeArray %6 %38
+         %40 = OpTypePointer Private %39
+         %41 = OpVariable %40 Private
+         %43 = OpTypePointer Private %6
+         %52 = OpVariable %40 Private
+         %74 = OpConstant %6 10
+        %105 = OpConstant %6 0
+        %107 = OpConstant %6 9
+        %136 = OpConstant %6 2
+        %157 = OpTypeFloat 32
+        %158 = OpTypeVector %157 2
+        %159 = OpTypeStruct %158
+        %160 = OpTypePointer Uniform %159
+        %161 = OpVariable %160 Uniform
+        %162 = OpConstant %37 0
+        %163 = OpTypePointer Uniform %157
+        %184 = OpConstant %6 4
+        %188 = OpConstant %6 3
+        %201 = OpConstant %6 -1
+        %205 = OpConstant %6 -2
+        %209 = OpConstant %6 -3
+        %213 = OpConstant %6 -4
+        %217 = OpConstant %6 -5
+        %241 = OpTypeVector %157 4
+        %242 = OpTypePointer Input %241
+        %243 = OpVariable %242 Input
+        %244 = OpConstant %37 1
+        %245 = OpTypePointer Input %157
+        %249 = OpConstant %6 30
+        %253 = OpTypePointer Function %157
+        %255 = OpConstant %157 0.5
+        %259 = OpConstant %157 10
+        %266 = OpConstant %6 60
+        %279 = OpConstant %6 90
+        %292 = OpConstant %6 120
+        %305 = OpConstant %6 150
+        %327 = OpConstant %6 180
+        %331 = OpConstant %6 5
+        %341 = OpConstant %6 210
+        %345 = OpConstant %6 6
+        %355 = OpConstant %6 240
+        %359 = OpConstant %6 7
+        %369 = OpConstant %6 270
+        %373 = OpConstant %6 8
+        %381 = OpTypePointer Output %241
+        %382 = OpVariable %381 Output
+        %384 = OpTypeVector %157 3
+        %386 = OpConstant %157 1
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+        %156 = OpVariable %7 Function
+        %225 = OpVariable %7 Function
+        %254 = OpVariable %253 Function
+        %309 = OpVariable %7 Function
+        %164 = OpAccessChain %163 %161 %105 %162
+        %165 = OpLoad %157 %164
+        %166 = OpConvertFToS %6 %165
+               OpStore %156 %166
+               OpBranch %167
+        %167 = OpLabel
+               OpLoopMerge %169 %170 None
+               OpBranch %168
+        %168 = OpLabel
+        %171 = OpLoad %6 %156
+               OpSelectionMerge %182 None
+               OpSwitch %171 %182 0 %172 1 %173 2 %174 3 %175 4 %176 5 %177 6 %178 7 %179 8 %180 9 %181
+        %172 = OpLabel
+        %183 = OpLoad %6 %156
+        %185 = OpAccessChain %43 %41 %183
+               OpStore %185 %184
+               OpBranch %182
+        %173 = OpLabel
+        %187 = OpLoad %6 %156
+        %189 = OpAccessChain %43 %41 %187
+               OpStore %189 %188
+               OpBranch %182
+        %174 = OpLabel
+        %191 = OpLoad %6 %156
+        %192 = OpAccessChain %43 %41 %191
+               OpStore %192 %136
+               OpBranch %182
+        %175 = OpLabel
+        %194 = OpLoad %6 %156
+        %195 = OpAccessChain %43 %41 %194
+               OpStore %195 %22
+               OpBranch %182
+        %176 = OpLabel
+        %197 = OpLoad %6 %156
+        %198 = OpAccessChain %43 %41 %197
+               OpStore %198 %105
+               OpBranch %182
+        %177 = OpLabel
+        %200 = OpLoad %6 %156
+        %202 = OpAccessChain %43 %41 %200
+               OpStore %202 %201
+               OpBranch %182
+        %178 = OpLabel
+        %204 = OpLoad %6 %156
+        %206 = OpAccessChain %43 %41 %204
+               OpStore %206 %205
+               OpBranch %182
+        %179 = OpLabel
+        %208 = OpLoad %6 %156
+        %210 = OpAccessChain %43 %41 %208
+               OpStore %210 %209
+               OpBranch %182
+        %180 = OpLabel
+        %212 = OpLoad %6 %156
+        %214 = OpAccessChain %43 %41 %212
+               OpStore %214 %213
+               OpBranch %182
+        %181 = OpLabel
+        %216 = OpLoad %6 %156
+        %218 = OpAccessChain %43 %41 %216
+               OpStore %218 %217
+               OpBranch %182
+        %182 = OpLabel
+        %221 = OpLoad %6 %156
+        %222 = OpIAdd %6 %221 %22
+               OpStore %156 %222
+               OpBranch %170
+        %170 = OpLabel
+        %223 = OpLoad %6 %156
+        %224 = OpSLessThan %31 %223 %74
+               OpBranchConditional %224 %167 %169
+        %169 = OpLabel
+               OpStore %225 %105
+               OpBranch %226
+        %226 = OpLabel
+               OpLoopMerge %228 %229 None
+               OpBranch %230
+        %230 = OpLabel
+        %231 = OpLoad %6 %225
+        %232 = OpSLessThan %31 %231 %74
+               OpBranchConditional %232 %227 %228
+        %227 = OpLabel
+        %233 = OpLoad %6 %225
+        %234 = OpLoad %6 %225
+        %235 = OpAccessChain %43 %41 %234
+        %236 = OpLoad %6 %235
+        %237 = OpAccessChain %43 %52 %233
+               OpStore %237 %236
+               OpBranch %229
+        %229 = OpLabel
+        %238 = OpLoad %6 %225
+        %239 = OpIAdd %6 %238 %22
+               OpStore %225 %239
+               OpBranch %226
+        %228 = OpLabel
+        %240 = OpFunctionCall %2 %14
+        %246 = OpAccessChain %245 %243 %244
+        %247 = OpLoad %157 %246
+        %248 = OpConvertFToS %6 %247
+        %250 = OpSLessThan %31 %248 %249
+               OpSelectionMerge %252 None
+               OpBranchConditional %250 %251 %262
+        %251 = OpLabel
+        %256 = OpAccessChain %43 %41 %105
+        %257 = OpLoad %6 %256
+        %258 = OpConvertSToF %157 %257
+        %260 = OpFDiv %157 %258 %259
+        %261 = OpFAdd %157 %255 %260
+               OpStore %254 %261
+               OpBranch %252
+        %262 = OpLabel
+        %263 = OpAccessChain %245 %243 %244
+        %264 = OpLoad %157 %263
+        %265 = OpConvertFToS %6 %264
+        %267 = OpSLessThan %31 %265 %266
+               OpSelectionMerge %269 None
+               OpBranchConditional %267 %268 %275
+        %268 = OpLabel
+        %270 = OpAccessChain %43 %41 %22
+        %271 = OpLoad %6 %270
+        %272 = OpConvertSToF %157 %271
+        %273 = OpFDiv %157 %272 %259
+        %274 = OpFAdd %157 %255 %273
+               OpStore %254 %274
+               OpBranch %269
+        %275 = OpLabel
+        %276 = OpAccessChain %245 %243 %244
+        %277 = OpLoad %157 %276
+        %278 = OpConvertFToS %6 %277
+        %280 = OpSLessThan %31 %278 %279
+               OpSelectionMerge %282 None
+               OpBranchConditional %280 %281 %288
+        %281 = OpLabel
+        %283 = OpAccessChain %43 %41 %136
+        %284 = OpLoad %6 %283
+        %285 = OpConvertSToF %157 %284
+        %286 = OpFDiv %157 %285 %259
+        %287 = OpFAdd %157 %255 %286
+               OpStore %254 %287
+               OpBranch %282
+        %288 = OpLabel
+        %289 = OpAccessChain %245 %243 %244
+        %290 = OpLoad %157 %289
+        %291 = OpConvertFToS %6 %290
+        %293 = OpSLessThan %31 %291 %292
+               OpSelectionMerge %295 None
+               OpBranchConditional %293 %294 %301
+        %294 = OpLabel
+        %296 = OpAccessChain %43 %41 %188
+        %297 = OpLoad %6 %296
+        %298 = OpConvertSToF %157 %297
+        %299 = OpFDiv %157 %298 %259
+        %300 = OpFAdd %157 %255 %299
+               OpStore %254 %300
+               OpBranch %295
+        %301 = OpLabel
+        %302 = OpAccessChain %245 %243 %244
+        %303 = OpLoad %157 %302
+        %304 = OpConvertFToS %6 %303
+        %306 = OpSLessThan %31 %304 %305
+               OpSelectionMerge %308 None
+               OpBranchConditional %306 %307 %323
+        %307 = OpLabel
+               OpStore %309 %22
+               OpBranch %310
+        %310 = OpLabel
+               OpLoopMerge %312 %313 None
+               OpBranch %314
+        %314 = OpLabel
+        %315 = OpLoad %6 %309
+        %316 = OpAccessChain %163 %161 %105 %162
+        %317 = OpLoad %157 %316
+        %318 = OpConvertFToS %6 %317
+        %319 = OpSGreaterThan %31 %315 %318
+               OpBranchConditional %319 %311 %312
+        %311 = OpLabel
+               OpKill
+        %313 = OpLabel
+               OpBranch %310
+        %312 = OpLabel
+               OpBranch %308
+        %323 = OpLabel
+        %324 = OpAccessChain %245 %243 %244
+        %325 = OpLoad %157 %324
+        %326 = OpConvertFToS %6 %325
+        %328 = OpSLessThan %31 %326 %327
+               OpSelectionMerge %330 None
+               OpBranchConditional %328 %329 %337
+        %329 = OpLabel
+        %332 = OpAccessChain %43 %41 %331
+        %333 = OpLoad %6 %332
+        %334 = OpConvertSToF %157 %333
+        %335 = OpFDiv %157 %334 %259
+        %336 = OpFAdd %157 %255 %335
+               OpStore %254 %336
+               OpBranch %330
+        %337 = OpLabel
+        %338 = OpAccessChain %245 %243 %244
+        %339 = OpLoad %157 %338
+        %340 = OpConvertFToS %6 %339
+        %342 = OpSLessThan %31 %340 %341
+               OpSelectionMerge %344 None
+               OpBranchConditional %342 %343 %351
+        %343 = OpLabel
+        %346 = OpAccessChain %43 %41 %345
+        %347 = OpLoad %6 %346
+        %348 = OpConvertSToF %157 %347
+        %349 = OpFDiv %157 %348 %259
+        %350 = OpFAdd %157 %255 %349
+               OpStore %254 %350
+               OpBranch %344
+        %351 = OpLabel
+        %352 = OpAccessChain %245 %243 %244
+        %353 = OpLoad %157 %352
+        %354 = OpConvertFToS %6 %353
+        %356 = OpSLessThan %31 %354 %355
+               OpSelectionMerge %358 None
+               OpBranchConditional %356 %357 %365
+        %357 = OpLabel
+        %360 = OpAccessChain %43 %41 %359
+        %361 = OpLoad %6 %360
+        %362 = OpConvertSToF %157 %361
+        %363 = OpFDiv %157 %362 %259
+        %364 = OpFAdd %157 %255 %363
+               OpStore %254 %364
+               OpBranch %358
+        %365 = OpLabel
+        %366 = OpAccessChain %245 %243 %244
+        %367 = OpLoad %157 %366
+        %368 = OpConvertFToS %6 %367
+        %370 = OpSLessThan %31 %368 %369
+               OpSelectionMerge %372 None
+               OpBranchConditional %370 %371 %379
+        %371 = OpLabel
+        %374 = OpAccessChain %43 %41 %373
+        %375 = OpLoad %6 %374
+        %376 = OpConvertSToF %157 %375
+        %377 = OpFDiv %157 %376 %259
+        %378 = OpFAdd %157 %255 %377
+               OpStore %254 %378
+               OpBranch %372
+        %379 = OpLabel
+               OpKill
+        %372 = OpLabel
+               OpBranch %358
+        %358 = OpLabel
+               OpBranch %344
+        %344 = OpLabel
+               OpBranch %330
+        %330 = OpLabel
+               OpBranch %308
+        %308 = OpLabel
+               OpBranch %295
+        %295 = OpLabel
+               OpBranch %282
+        %282 = OpLabel
+               OpBranch %269
+        %269 = OpLabel
+               OpBranch %252
+        %252 = OpLabel
+        %383 = OpLoad %157 %254
+        %385 = OpCompositeConstruct %384 %383 %383 %383
+        %387 = OpCompositeExtract %157 %385 0
+        %388 = OpCompositeExtract %157 %385 1
+        %389 = OpCompositeExtract %157 %385 2
+        %390 = OpCompositeConstruct %241 %387 %388 %389 %386
+               OpStore %382 %390
+               OpReturn
+               OpFunctionEnd
+         %12 = OpFunction %2 None %8
+          %9 = OpFunctionParameter %7
+         %10 = OpFunctionParameter %7
+         %11 = OpFunctionParameter %7
+         %13 = OpLabel
+         %16 = OpVariable %7 Function
+         %18 = OpVariable %7 Function
+         %20 = OpVariable %7 Function
+         %87 = OpVariable %7 Function
+         %17 = OpLoad %6 %9
+               OpStore %16 %17
+         %19 = OpLoad %6 %9
+               OpStore %18 %19
+         %21 = OpLoad %6 %10
+         %23 = OpIAdd %6 %21 %22
+               OpStore %20 %23
+               OpBranch %24
+         %24 = OpLabel
+               OpLoopMerge %26 %27 None
+               OpBranch %28
+         %28 = OpLabel
+         %29 = OpLoad %6 %18
+         %30 = OpLoad %6 %10
+         %32 = OpSLessThanEqual %31 %29 %30
+         %33 = OpLoad %6 %20
+         %34 = OpLoad %6 %11
+         %35 = OpSLessThanEqual %31 %33 %34
+         %36 = OpLogicalAnd %31 %32 %35
+               OpBranchConditional %36 %25 %26
+         %25 = OpLabel
+         %42 = OpLoad %6 %18
+         %44 = OpAccessChain %43 %41 %42
+         %45 = OpLoad %6 %44
+         %46 = OpLoad %6 %20
+         %47 = OpAccessChain %43 %41 %46
+         %48 = OpLoad %6 %47
+         %49 = OpSLessThan %31 %45 %48
+               OpSelectionMerge %51 None
+               OpBranchConditional %49 %50 %60
+         %50 = OpLabel
+         %53 = OpLoad %6 %16
+         %54 = OpIAdd %6 %53 %22
+               OpStore %16 %54
+         %55 = OpLoad %6 %18
+         %56 = OpIAdd %6 %55 %22
+               OpStore %18 %56
+         %57 = OpAccessChain %43 %41 %55
+         %58 = OpLoad %6 %57
+         %59 = OpAccessChain %43 %52 %53
+               OpStore %59 %58
+               OpBranch %51
+         %60 = OpLabel
+         %61 = OpLoad %6 %16
+         %62 = OpIAdd %6 %61 %22
+               OpStore %16 %62
+         %63 = OpLoad %6 %20
+         %64 = OpIAdd %6 %63 %22
+               OpStore %20 %64
+         %65 = OpAccessChain %43 %41 %63
+         %66 = OpLoad %6 %65
+         %67 = OpAccessChain %43 %52 %61
+               OpStore %67 %66
+               OpBranch %51
+         %51 = OpLabel
+               OpBranch %27
+         %27 = OpLabel
+               OpBranch %24
+         %26 = OpLabel
+               OpBranch %68
+         %68 = OpLabel
+               OpLoopMerge %70 %71 None
+               OpBranch %72
+         %72 = OpLabel
+         %73 = OpLoad %6 %18
+         %75 = OpSLessThan %31 %73 %74
+         %76 = OpLoad %6 %18
+         %77 = OpLoad %6 %10
+         %78 = OpSLessThanEqual %31 %76 %77
+         %79 = OpLogicalAnd %31 %75 %78
+               OpBranchConditional %79 %69 %70
+         %69 = OpLabel
+         %80 = OpLoad %6 %16
+         %81 = OpIAdd %6 %80 %22
+               OpStore %16 %81
+         %82 = OpLoad %6 %18
+         %83 = OpIAdd %6 %82 %22
+               OpStore %18 %83
+         %84 = OpAccessChain %43 %41 %82
+         %85 = OpLoad %6 %84
+         %86 = OpAccessChain %43 %52 %80
+               OpStore %86 %85
+               OpBranch %71
+         %71 = OpLabel
+               OpBranch %68
+         %70 = OpLabel
+         %88 = OpLoad %6 %9
+               OpStore %87 %88
+               OpBranch %89
+         %89 = OpLabel
+               OpLoopMerge %91 %92 None
+               OpBranch %93
+         %93 = OpLabel
+         %94 = OpLoad %6 %87
+         %95 = OpLoad %6 %11
+         %96 = OpSLessThanEqual %31 %94 %95
+               OpBranchConditional %96 %90 %91
+         %90 = OpLabel
+         %97 = OpLoad %6 %87
+         %98 = OpLoad %6 %87
+         %99 = OpAccessChain %43 %52 %98
+        %100 = OpLoad %6 %99
+        %101 = OpAccessChain %43 %41 %97
+               OpStore %101 %100
+               OpBranch %92
+         %92 = OpLabel
+        %102 = OpLoad %6 %87
+        %103 = OpIAdd %6 %102 %22
+               OpStore %87 %103
+               OpBranch %89
+         %91 = OpLabel
+               OpReturn
+               OpFunctionEnd
+         %14 = OpFunction %2 None %3
+         %15 = OpLabel
+        %104 = OpVariable %7 Function
+        %106 = OpVariable %7 Function
+        %108 = OpVariable %7 Function
+        %117 = OpVariable %7 Function
+        %127 = OpVariable %7 Function
+        %129 = OpVariable %7 Function
+        %134 = OpVariable %7 Function
+        %143 = OpVariable %7 Function
+        %145 = OpVariable %7 Function
+        %147 = OpVariable %7 Function
+               OpStore %104 %105
+               OpStore %106 %107
+               OpStore %108 %22
+               OpBranch %109
+        %109 = OpLabel
+               OpLoopMerge %111 %112 None
+               OpBranch %113
+        %113 = OpLabel
+        %114 = OpLoad %6 %108
+        %115 = OpLoad %6 %106
+        %116 = OpSLessThanEqual %31 %114 %115
+               OpBranchConditional %116 %110 %111
+        %110 = OpLabel
+        %118 = OpLoad %6 %104
+               OpStore %117 %118
+               OpBranch %119
+        %119 = OpLabel
+               OpLoopMerge %121 %122 None
+               OpBranch %123
+        %123 = OpLabel
+        %124 = OpLoad %6 %117
+        %125 = OpLoad %6 %106
+        %126 = OpSLessThan %31 %124 %125
+               OpBranchConditional %126 %120 %121
+        %120 = OpLabel
+        %128 = OpLoad %6 %117
+               OpStore %127 %128
+        %130 = OpLoad %6 %117
+        %131 = OpLoad %6 %108
+        %132 = OpIAdd %6 %130 %131
+        %133 = OpISub %6 %132 %22
+               OpStore %129 %133
+        %135 = OpLoad %6 %117
+        %137 = OpLoad %6 %108
+        %138 = OpIMul %6 %136 %137
+        %139 = OpIAdd %6 %135 %138
+        %140 = OpISub %6 %139 %22
+        %141 = OpLoad %6 %106
+        %142 = OpExtInst %6 %1 SMin %140 %141
+               OpStore %134 %142
+        %144 = OpLoad %6 %127
+               OpStore %143 %144
+        %146 = OpLoad %6 %129
+               OpStore %145 %146
+        %148 = OpLoad %6 %134
+               OpStore %147 %148
+        %149 = OpFunctionCall %2 %12 %143 %145 %147
+               OpBranch %122
+        %122 = OpLabel
+        %150 = OpLoad %6 %108
+        %151 = OpIMul %6 %136 %150
+        %152 = OpLoad %6 %117
+        %153 = OpIAdd %6 %152 %151
+               OpStore %117 %153
+               OpBranch %119
+        %121 = OpLabel
+               OpBranch %112
+        %112 = OpLabel
+        %154 = OpLoad %6 %108
+        %155 = OpIMul %6 %136 %154
+               OpStore %108 %155
+               OpBranch %109
+        %111 = OpLabel
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# injectionSwitch
+BUFFER variant_injectionSwitch DATA_TYPE vec2<float> DATA
+ 0.0 1.0
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 256 256
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant_injectionSwitch AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256
+
+EXPECT reference_framebuffer EQ_HISTOGRAM_EMD_BUFFER variant_framebuffer TOLERANCE 0.005
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/stable-triangle-array-nested-loop.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/stable-triangle-array-nested-loop.amber
new file mode 100644
index 0000000..729d6b3
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/stable-triangle-array-nested-loop.amber
@@ -0,0 +1,896 @@
+#!amber
+
+# Copyright 2020 Google LLC
+#
+# 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.
+
+
+# A test for a bug found by GraphicsFuzz.
+
+# Short description: A fragment shader with array and nested loops
+
+# The test passes because both shaders render the same image.
+
+# Optimized using spirv-opt with the following arguments:
+# '--private-to-local'
+# '--copy-propagate-arrays'
+# '--if-conversion'
+# '--private-to-local'
+# '--eliminate-dead-inserts'
+# '--if-conversion'
+# '--if-conversion'
+# '--scalar-replacement=100'
+# '--private-to-local'
+# '--reduce-load-size'
+# '--ccp'
+# '--scalar-replacement=100'
+# '--eliminate-dead-branches'
+# '--eliminate-dead-branches'
+# '--merge-return'
+# '--private-to-local'
+# '--redundancy-elimination'
+# '--combine-access-chains'
+# '--eliminate-local-multi-store'
+# '--ccp'
+# '--convert-local-access-chains'
+# '--reduce-load-size'
+# '--private-to-local'
+# '--vector-dce'
+# spirv-opt commit hash: 230f363e6da32791f640b02205e0645cc67c3f1d
+
+
+
+SHADER vertex reference_vertex_shader PASSTHROUGH
+
+# reference_fragment_shader is derived from the following GLSL:
+# #version 320 es
+# precision highp float;
+#
+# precision highp int;
+#
+# layout(location = 0) out vec4 _GLF_color;
+#
+# layout(set = 0, binding = 0) uniform buf0
+# {
+#     vec2 resolution;
+# };
+# float cross2d(vec2 a, vec2 b)
+# {
+#     return ((a.x) * (b.y) - (b.x) * (a.y));
+# }
+# int pointInTriangle(vec2 p, vec2 a, vec2 b, vec2 c)
+# {
+#     float pab = cross2d(vec2(p.x - a.x, p.y - a.y), vec2(b.x - a.x, b.y - a.y));
+#     float pbc = cross2d(vec2(p.x - b.x, p.y - b.y), vec2(c.x - b.x, c.y - b.y));
+#     if (!((pab < 0.0 && pbc < 0.0) || (pab >= 0.0 && pbc >= 0.0)))
+#     {
+#         return 0;
+#     }
+#     float pca = cross2d(vec2(p.x - c.x, p.y - c.y), vec2(a.x - c.x, a.y - c.y));
+#     if (!((pab < 0.0 && pca < 0.0) || (pab >= 0.0 && pca >= 0.0)))
+#     {
+#         return 0;
+#     }
+#     return 1;
+# }
+# void main()
+# {
+#     vec2 pos = gl_FragCoord.xy / resolution;
+#     if (pointInTriangle(pos, vec2(0.7, 0.3), vec2(0.5, 0.9), vec2(0.1, 0.4)) == 1)
+#     {
+#         _GLF_color = vec4(1.0, 0.0, 0.0, 1.0);
+#     }
+#     else
+#     {
+#         _GLF_color = vec4(0.0, 0.0, 0.0, 1.0);
+#     }
+# }
+SHADER fragment reference_fragment_shader SPIRV-ASM
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 10
+; Bound: 207
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %162 %191
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 320
+               OpName %4 "main"
+               OpName %12 "cross2d(vf2;vf2;"
+               OpName %10 "a"
+               OpName %11 "b"
+               OpName %20 "pointInTriangle(vf2;vf2;vf2;vf2;"
+               OpName %16 "p"
+               OpName %17 "a"
+               OpName %18 "b"
+               OpName %19 "c"
+               OpName %39 "pab"
+               OpName %62 "param"
+               OpName %63 "param"
+               OpName %65 "pbc"
+               OpName %88 "param"
+               OpName %89 "param"
+               OpName %112 "pca"
+               OpName %135 "param"
+               OpName %136 "param"
+               OpName %159 "pos"
+               OpName %162 "gl_FragCoord"
+               OpName %165 "buf0"
+               OpMemberName %165 0 "resolution"
+               OpName %167 ""
+               OpName %181 "param"
+               OpName %183 "param"
+               OpName %184 "param"
+               OpName %185 "param"
+               OpName %191 "_GLF_color"
+               OpDecorate %162 BuiltIn FragCoord
+               OpMemberDecorate %165 0 Offset 0
+               OpDecorate %165 Block
+               OpDecorate %167 DescriptorSet 0
+               OpDecorate %167 Binding 0
+               OpDecorate %191 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeFloat 32
+          %7 = OpTypeVector %6 2
+          %8 = OpTypePointer Function %7
+          %9 = OpTypeFunction %6 %8 %8
+         %14 = OpTypeInt 32 1
+         %15 = OpTypeFunction %14 %8 %8 %8 %8
+         %22 = OpTypeInt 32 0
+         %23 = OpConstant %22 0
+         %24 = OpTypePointer Function %6
+         %27 = OpConstant %22 1
+         %91 = OpTypeBool
+         %93 = OpConstant %6 0
+        %110 = OpConstant %14 0
+        %156 = OpConstant %14 1
+        %160 = OpTypeVector %6 4
+        %161 = OpTypePointer Input %160
+        %162 = OpVariable %161 Input
+        %165 = OpTypeStruct %7
+        %166 = OpTypePointer Uniform %165
+        %167 = OpVariable %166 Uniform
+        %168 = OpTypePointer Uniform %7
+        %172 = OpConstant %6 0.699999988
+        %173 = OpConstant %6 0.300000012
+        %174 = OpConstantComposite %7 %172 %173
+        %175 = OpConstant %6 0.5
+        %176 = OpConstant %6 0.899999976
+        %177 = OpConstantComposite %7 %175 %176
+        %178 = OpConstant %6 0.100000001
+        %179 = OpConstant %6 0.400000006
+        %180 = OpConstantComposite %7 %178 %179
+        %190 = OpTypePointer Output %160
+        %191 = OpVariable %190 Output
+        %192 = OpConstant %6 1
+        %193 = OpConstantComposite %160 %192 %93 %93 %192
+        %195 = OpConstantComposite %160 %93 %93 %93 %192
+        %197 = OpTypePointer Function %14
+        %201 = OpConstantFalse %91
+        %202 = OpTypePointer Function %91
+        %204 = OpConstantTrue %91
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+        %159 = OpVariable %8 Function
+        %181 = OpVariable %8 Function
+        %183 = OpVariable %8 Function
+        %184 = OpVariable %8 Function
+        %185 = OpVariable %8 Function
+        %163 = OpLoad %160 %162
+        %164 = OpVectorShuffle %7 %163 %163 0 1
+        %169 = OpAccessChain %168 %167 %110
+        %170 = OpLoad %7 %169
+        %171 = OpFDiv %7 %164 %170
+               OpStore %159 %171
+               OpStore %181 %171
+               OpStore %183 %174
+               OpStore %184 %177
+               OpStore %185 %180
+        %186 = OpFunctionCall %14 %20 %181 %183 %184 %185
+        %187 = OpIEqual %91 %186 %156
+               OpSelectionMerge %189 None
+               OpBranchConditional %187 %188 %194
+        %188 = OpLabel
+               OpStore %191 %193
+               OpBranch %189
+        %194 = OpLabel
+               OpStore %191 %195
+               OpBranch %189
+        %189 = OpLabel
+               OpReturn
+               OpFunctionEnd
+         %12 = OpFunction %6 None %9
+         %10 = OpFunctionParameter %8
+         %11 = OpFunctionParameter %8
+         %13 = OpLabel
+         %25 = OpAccessChain %24 %10 %23
+         %26 = OpLoad %6 %25
+         %28 = OpAccessChain %24 %11 %27
+         %29 = OpLoad %6 %28
+         %30 = OpFMul %6 %26 %29
+         %31 = OpAccessChain %24 %11 %23
+         %32 = OpLoad %6 %31
+         %33 = OpAccessChain %24 %10 %27
+         %34 = OpLoad %6 %33
+         %35 = OpFMul %6 %32 %34
+         %36 = OpFSub %6 %30 %35
+               OpReturnValue %36
+               OpFunctionEnd
+         %20 = OpFunction %14 None %15
+         %16 = OpFunctionParameter %8
+         %17 = OpFunctionParameter %8
+         %18 = OpFunctionParameter %8
+         %19 = OpFunctionParameter %8
+         %21 = OpLabel
+        %203 = OpVariable %202 Function %201
+        %198 = OpVariable %197 Function
+         %39 = OpVariable %24 Function
+         %62 = OpVariable %8 Function
+         %63 = OpVariable %8 Function
+         %65 = OpVariable %24 Function
+         %88 = OpVariable %8 Function
+         %89 = OpVariable %8 Function
+        %112 = OpVariable %24 Function
+        %135 = OpVariable %8 Function
+        %136 = OpVariable %8 Function
+               OpSelectionMerge %196 None
+               OpSwitch %23 %200
+        %200 = OpLabel
+         %40 = OpAccessChain %24 %16 %23
+         %41 = OpLoad %6 %40
+         %42 = OpAccessChain %24 %17 %23
+         %43 = OpLoad %6 %42
+         %44 = OpFSub %6 %41 %43
+         %45 = OpAccessChain %24 %16 %27
+         %46 = OpLoad %6 %45
+         %47 = OpAccessChain %24 %17 %27
+         %48 = OpLoad %6 %47
+         %49 = OpFSub %6 %46 %48
+         %50 = OpCompositeConstruct %7 %44 %49
+         %51 = OpAccessChain %24 %18 %23
+         %52 = OpLoad %6 %51
+         %54 = OpLoad %6 %42
+         %55 = OpFSub %6 %52 %54
+         %56 = OpAccessChain %24 %18 %27
+         %57 = OpLoad %6 %56
+         %59 = OpLoad %6 %47
+         %60 = OpFSub %6 %57 %59
+         %61 = OpCompositeConstruct %7 %55 %60
+               OpStore %62 %50
+               OpStore %63 %61
+         %64 = OpFunctionCall %6 %12 %62 %63
+               OpStore %39 %64
+         %67 = OpLoad %6 %40
+         %69 = OpLoad %6 %51
+         %70 = OpFSub %6 %67 %69
+         %72 = OpLoad %6 %45
+         %74 = OpLoad %6 %56
+         %75 = OpFSub %6 %72 %74
+         %76 = OpCompositeConstruct %7 %70 %75
+         %77 = OpAccessChain %24 %19 %23
+         %78 = OpLoad %6 %77
+         %80 = OpLoad %6 %51
+         %81 = OpFSub %6 %78 %80
+         %82 = OpAccessChain %24 %19 %27
+         %83 = OpLoad %6 %82
+         %85 = OpLoad %6 %56
+         %86 = OpFSub %6 %83 %85
+         %87 = OpCompositeConstruct %7 %81 %86
+               OpStore %88 %76
+               OpStore %89 %87
+         %90 = OpFunctionCall %6 %12 %88 %89
+               OpStore %65 %90
+         %94 = OpFOrdLessThan %91 %64 %93
+         %96 = OpFOrdLessThan %91 %90 %93
+         %97 = OpLogicalAnd %91 %94 %96
+         %98 = OpLogicalNot %91 %97
+               OpSelectionMerge %100 None
+               OpBranchConditional %98 %99 %100
+         %99 = OpLabel
+        %102 = OpFOrdGreaterThanEqual %91 %64 %93
+        %104 = OpFOrdGreaterThanEqual %91 %90 %93
+        %105 = OpLogicalAnd %91 %102 %104
+               OpBranch %100
+        %100 = OpLabel
+        %106 = OpPhi %91 %97 %200 %105 %99
+        %107 = OpLogicalNot %91 %106
+               OpSelectionMerge %109 None
+               OpBranchConditional %107 %108 %109
+        %108 = OpLabel
+               OpStore %203 %204
+               OpStore %198 %110
+               OpBranch %196
+        %109 = OpLabel
+        %114 = OpLoad %6 %40
+        %116 = OpLoad %6 %77
+        %117 = OpFSub %6 %114 %116
+        %119 = OpLoad %6 %45
+        %121 = OpLoad %6 %82
+        %122 = OpFSub %6 %119 %121
+        %123 = OpCompositeConstruct %7 %117 %122
+        %125 = OpLoad %6 %42
+        %127 = OpLoad %6 %77
+        %128 = OpFSub %6 %125 %127
+        %130 = OpLoad %6 %47
+        %132 = OpLoad %6 %82
+        %133 = OpFSub %6 %130 %132
+        %134 = OpCompositeConstruct %7 %128 %133
+               OpStore %135 %123
+               OpStore %136 %134
+        %137 = OpFunctionCall %6 %12 %135 %136
+               OpStore %112 %137
+        %139 = OpFOrdLessThan %91 %64 %93
+        %141 = OpFOrdLessThan %91 %137 %93
+        %142 = OpLogicalAnd %91 %139 %141
+        %143 = OpLogicalNot %91 %142
+               OpSelectionMerge %145 None
+               OpBranchConditional %143 %144 %145
+        %144 = OpLabel
+        %147 = OpFOrdGreaterThanEqual %91 %64 %93
+        %149 = OpFOrdGreaterThanEqual %91 %137 %93
+        %150 = OpLogicalAnd %91 %147 %149
+               OpBranch %145
+        %145 = OpLabel
+        %151 = OpPhi %91 %142 %109 %150 %144
+        %152 = OpLogicalNot %91 %151
+               OpSelectionMerge %154 None
+               OpBranchConditional %152 %153 %154
+        %153 = OpLabel
+               OpStore %203 %204
+               OpStore %198 %110
+               OpBranch %196
+        %154 = OpLabel
+               OpStore %203 %204
+               OpStore %198 %156
+               OpBranch %196
+        %196 = OpLabel
+        %206 = OpPhi %14 %110 %108 %110 %153 %156 %154
+               OpReturnValue %206
+               OpFunctionEnd
+END
+
+# uniforms for reference
+
+# resolution
+BUFFER reference_resolution DATA_TYPE vec2<float> DATA
+ 256.0 256.0
+END
+
+BUFFER reference_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics reference_pipeline
+  ATTACH reference_vertex_shader
+  ATTACH reference_fragment_shader
+  FRAMEBUFFER_SIZE 256 256
+  BIND BUFFER reference_framebuffer AS color LOCATION 0
+  BIND BUFFER reference_resolution AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR reference_pipeline 0 0 0 255
+
+CLEAR reference_pipeline
+RUN reference_pipeline DRAW_RECT POS 0 0 SIZE 256 256
+
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+# variant_fragment_shader is derived from the following GLSL:
+# #version 320 es
+# precision highp float;
+#
+# precision highp int;
+#
+# layout(location = 0) out vec4 _GLF_color;
+#
+# layout(set = 0, binding = 0) uniform buf0
+# {
+#     vec2 resolution;
+# };
+# float cross2d(vec2 a, vec2 b)
+# {
+#     return ((a.x) * (b.y) - (b.x) * (a.y));
+# }
+# int pointInTriangle(vec2 p, vec2 a, vec2 b, vec2 c)
+# {
+#     const int array_size = 256;
+#     int array_a[array_size];
+#     float pab = cross2d(vec2(p.x - a.x, p.y - a.y), vec2(b.x - a.x, b.y - a.y));
+#     float pbc = cross2d(vec2(p.x - b.x, p.y - b.y), vec2(c.x - b.x, c.y - b.y));
+#     if (!((pab < 0.0 && pbc < 0.0) || (pab >= 0.0 && pbc >= 0.0)))
+#     {
+#         // Injected live code block has no impact on rest of the code in the shader.
+#         // Initialize array to known values.
+#         for (int i = 0; i < array_size; i++)
+#         {
+#             array_a[i] = 0;
+#         }
+#         // Total loop iteration count: 6x4x4x4 = 384.
+#         for (int int_a = 0; int_a < 6; )
+#         {
+#             int_a++;
+#             int int_c = 1;
+#             int int_h = 1;
+#             int int_d = 0;
+#             do
+#             {
+#                 int_d++;
+#                 int int_e = 0;
+#                 for (int int_f = 0; int_f < 4; int_c++)
+#                 {
+#                     int_f++;
+#                     for (int int_g = 0; int_g < 4; int_e++)
+#                     {
+#                         int_g++;
+#                         if (array_a[clamp(int_e * 2 + 32, 0, array_size - 1)] == 0)
+#                         {
+#                             int_h = int_c;
+#                         }
+#                     }
+#                 }
+#                 array_a[clamp(1 + int_h * 16, 0, array_size - 1)] = 1;
+#             } while (int_d < 4);
+#         }
+#         return 0;
+#     }
+#     float pca = cross2d(vec2(p.x - c.x, p.y - c.y), vec2(a.x - c.x, a.y - c.y));
+#     if (!((pab < 0.0 && pca < 0.0) || (pab >= 0.0 && pca >= 0.0)))
+#     {
+#         return 0;
+#     }
+#     return 1;
+# }
+# void main()
+# {
+#     vec2 pos = gl_FragCoord.xy / resolution;
+#     if (pointInTriangle(pos, vec2(0.7, 0.3), vec2(0.5, 0.9), vec2(0.1, 0.4)) == 1)
+#     {
+#         _GLF_color = vec4(1.0, 0.0, 0.0, 1.0);
+#     }
+#     else
+#     {
+#         _GLF_color = vec4(0.0, 0.0, 0.0, 1.0);
+#     }
+# }
+SHADER fragment variant_fragment_shader SPIRV-ASM
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 10
+; Bound: 318
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %247 %276
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 320
+               OpName %4 "main"
+               OpName %12 "cross2d(vf2;vf2;"
+               OpName %10 "a"
+               OpName %11 "b"
+               OpName %20 "pointInTriangle(vf2;vf2;vf2;vf2;"
+               OpName %16 "p"
+               OpName %17 "a"
+               OpName %18 "b"
+               OpName %19 "c"
+               OpName %39 "pab"
+               OpName %62 "param"
+               OpName %63 "param"
+               OpName %65 "pbc"
+               OpName %88 "param"
+               OpName %89 "param"
+               OpName %111 "i"
+               OpName %124 "array_a"
+               OpName %130 "int_a"
+               OpName %141 "int_c"
+               OpName %142 "int_h"
+               OpName %143 "int_d"
+               OpName %150 "int_e"
+               OpName %151 "int_f"
+               OpName %162 "int_g"
+               OpName %198 "pca"
+               OpName %221 "param"
+               OpName %222 "param"
+               OpName %244 "pos"
+               OpName %247 "gl_FragCoord"
+               OpName %250 "buf0"
+               OpMemberName %250 0 "resolution"
+               OpName %252 ""
+               OpName %266 "param"
+               OpName %268 "param"
+               OpName %269 "param"
+               OpName %270 "param"
+               OpName %276 "_GLF_color"
+               OpDecorate %247 BuiltIn FragCoord
+               OpMemberDecorate %250 0 Offset 0
+               OpDecorate %250 Block
+               OpDecorate %252 DescriptorSet 0
+               OpDecorate %252 Binding 0
+               OpDecorate %276 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeFloat 32
+          %7 = OpTypeVector %6 2
+          %8 = OpTypePointer Function %7
+          %9 = OpTypeFunction %6 %8 %8
+         %14 = OpTypeInt 32 1
+         %15 = OpTypeFunction %14 %8 %8 %8 %8
+         %22 = OpTypeInt 32 0
+         %23 = OpConstant %22 0
+         %24 = OpTypePointer Function %6
+         %27 = OpConstant %22 1
+         %91 = OpTypeBool
+         %93 = OpConstant %6 0
+        %110 = OpTypePointer Function %14
+        %112 = OpConstant %14 0
+        %119 = OpConstant %14 256
+        %121 = OpConstant %22 256
+        %122 = OpTypeArray %14 %121
+        %123 = OpTypePointer Function %122
+        %128 = OpConstant %14 1
+        %137 = OpConstant %14 6
+        %158 = OpConstant %14 4
+        %173 = OpConstant %14 2
+        %175 = OpConstant %14 32
+        %177 = OpConstant %14 255
+        %190 = OpConstant %14 16
+        %245 = OpTypeVector %6 4
+        %246 = OpTypePointer Input %245
+        %247 = OpVariable %246 Input
+        %250 = OpTypeStruct %7
+        %251 = OpTypePointer Uniform %250
+        %252 = OpVariable %251 Uniform
+        %253 = OpTypePointer Uniform %7
+        %257 = OpConstant %6 0.699999988
+        %258 = OpConstant %6 0.300000012
+        %259 = OpConstantComposite %7 %257 %258
+        %260 = OpConstant %6 0.5
+        %261 = OpConstant %6 0.899999976
+        %262 = OpConstantComposite %7 %260 %261
+        %263 = OpConstant %6 0.100000001
+        %264 = OpConstant %6 0.400000006
+        %265 = OpConstantComposite %7 %263 %264
+        %275 = OpTypePointer Output %245
+        %276 = OpVariable %275 Output
+        %277 = OpConstant %6 1
+        %278 = OpConstantComposite %245 %277 %93 %93 %277
+        %280 = OpConstantComposite %245 %93 %93 %93 %277
+        %285 = OpConstantFalse %91
+        %286 = OpTypePointer Function %91
+        %288 = OpConstantTrue %91
+        %317 = OpConstant %14 17
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+        %244 = OpVariable %8 Function
+        %266 = OpVariable %8 Function
+        %268 = OpVariable %8 Function
+        %269 = OpVariable %8 Function
+        %270 = OpVariable %8 Function
+        %248 = OpLoad %245 %247
+        %249 = OpVectorShuffle %7 %248 %248 0 1
+        %254 = OpAccessChain %253 %252 %112
+        %255 = OpLoad %7 %254
+        %256 = OpFDiv %7 %249 %255
+               OpStore %244 %256
+               OpStore %266 %256
+               OpStore %268 %259
+               OpStore %269 %262
+               OpStore %270 %265
+        %271 = OpFunctionCall %14 %20 %266 %268 %269 %270
+        %272 = OpIEqual %91 %271 %128
+               OpSelectionMerge %274 None
+               OpBranchConditional %272 %273 %279
+        %273 = OpLabel
+               OpStore %276 %278
+               OpBranch %274
+        %279 = OpLabel
+               OpStore %276 %280
+               OpBranch %274
+        %274 = OpLabel
+               OpReturn
+               OpFunctionEnd
+         %12 = OpFunction %6 None %9
+         %10 = OpFunctionParameter %8
+         %11 = OpFunctionParameter %8
+         %13 = OpLabel
+         %25 = OpAccessChain %24 %10 %23
+         %26 = OpLoad %6 %25
+         %28 = OpAccessChain %24 %11 %27
+         %29 = OpLoad %6 %28
+         %30 = OpFMul %6 %26 %29
+         %31 = OpAccessChain %24 %11 %23
+         %32 = OpLoad %6 %31
+         %33 = OpAccessChain %24 %10 %27
+         %34 = OpLoad %6 %33
+         %35 = OpFMul %6 %32 %34
+         %36 = OpFSub %6 %30 %35
+               OpReturnValue %36
+               OpFunctionEnd
+         %20 = OpFunction %14 None %15
+         %16 = OpFunctionParameter %8
+         %17 = OpFunctionParameter %8
+         %18 = OpFunctionParameter %8
+         %19 = OpFunctionParameter %8
+         %21 = OpLabel
+        %287 = OpVariable %286 Function %285
+        %282 = OpVariable %110 Function
+         %39 = OpVariable %24 Function
+         %62 = OpVariable %8 Function
+         %63 = OpVariable %8 Function
+         %65 = OpVariable %24 Function
+         %88 = OpVariable %8 Function
+         %89 = OpVariable %8 Function
+        %111 = OpVariable %110 Function
+        %124 = OpVariable %123 Function
+        %130 = OpVariable %110 Function
+        %141 = OpVariable %110 Function
+        %142 = OpVariable %110 Function
+        %143 = OpVariable %110 Function
+        %150 = OpVariable %110 Function
+        %151 = OpVariable %110 Function
+        %162 = OpVariable %110 Function
+        %198 = OpVariable %24 Function
+        %221 = OpVariable %8 Function
+        %222 = OpVariable %8 Function
+               OpSelectionMerge %281 None
+               OpSwitch %23 %284
+        %284 = OpLabel
+         %40 = OpAccessChain %24 %16 %23
+         %41 = OpLoad %6 %40
+         %42 = OpAccessChain %24 %17 %23
+         %43 = OpLoad %6 %42
+         %44 = OpFSub %6 %41 %43
+         %45 = OpAccessChain %24 %16 %27
+         %46 = OpLoad %6 %45
+         %47 = OpAccessChain %24 %17 %27
+         %48 = OpLoad %6 %47
+         %49 = OpFSub %6 %46 %48
+         %50 = OpCompositeConstruct %7 %44 %49
+         %51 = OpAccessChain %24 %18 %23
+         %52 = OpLoad %6 %51
+         %54 = OpLoad %6 %42
+         %55 = OpFSub %6 %52 %54
+         %56 = OpAccessChain %24 %18 %27
+         %57 = OpLoad %6 %56
+         %59 = OpLoad %6 %47
+         %60 = OpFSub %6 %57 %59
+         %61 = OpCompositeConstruct %7 %55 %60
+               OpStore %62 %50
+               OpStore %63 %61
+         %64 = OpFunctionCall %6 %12 %62 %63
+               OpStore %39 %64
+         %67 = OpLoad %6 %40
+         %69 = OpLoad %6 %51
+         %70 = OpFSub %6 %67 %69
+         %72 = OpLoad %6 %45
+         %74 = OpLoad %6 %56
+         %75 = OpFSub %6 %72 %74
+         %76 = OpCompositeConstruct %7 %70 %75
+         %77 = OpAccessChain %24 %19 %23
+         %78 = OpLoad %6 %77
+         %80 = OpLoad %6 %51
+         %81 = OpFSub %6 %78 %80
+         %82 = OpAccessChain %24 %19 %27
+         %83 = OpLoad %6 %82
+         %85 = OpLoad %6 %56
+         %86 = OpFSub %6 %83 %85
+         %87 = OpCompositeConstruct %7 %81 %86
+               OpStore %88 %76
+               OpStore %89 %87
+         %90 = OpFunctionCall %6 %12 %88 %89
+               OpStore %65 %90
+         %94 = OpFOrdLessThan %91 %64 %93
+         %96 = OpFOrdLessThan %91 %90 %93
+         %97 = OpLogicalAnd %91 %94 %96
+         %98 = OpLogicalNot %91 %97
+               OpSelectionMerge %100 None
+               OpBranchConditional %98 %99 %100
+         %99 = OpLabel
+        %102 = OpFOrdGreaterThanEqual %91 %64 %93
+        %104 = OpFOrdGreaterThanEqual %91 %90 %93
+        %105 = OpLogicalAnd %91 %102 %104
+               OpBranch %100
+        %100 = OpLabel
+        %106 = OpPhi %91 %97 %284 %105 %99
+        %107 = OpLogicalNot %91 %106
+               OpSelectionMerge %109 None
+               OpBranchConditional %107 %108 %109
+        %108 = OpLabel
+               OpStore %111 %112
+               OpBranch %113
+        %113 = OpLabel
+        %290 = OpPhi %14 %112 %108 %129 %116
+               OpLoopMerge %115 %116 None
+               OpBranch %117
+        %117 = OpLabel
+        %120 = OpSLessThan %91 %290 %119
+               OpBranchConditional %120 %114 %115
+        %114 = OpLabel
+        %126 = OpAccessChain %110 %124 %290
+               OpStore %126 %112
+               OpBranch %116
+        %116 = OpLabel
+        %129 = OpIAdd %14 %290 %128
+               OpStore %111 %129
+               OpBranch %113
+        %115 = OpLabel
+               OpStore %130 %112
+               OpBranch %131
+        %131 = OpLabel
+        %291 = OpPhi %14 %112 %115 %306 %134
+               OpLoopMerge %133 %134 None
+               OpBranch %135
+        %135 = OpLabel
+        %138 = OpSLessThan %91 %291 %137
+               OpBranchConditional %138 %132 %133
+        %132 = OpLabel
+        %140 = OpIAdd %14 %291 %128
+               OpStore %130 %140
+               OpStore %141 %128
+               OpStore %142 %128
+               OpStore %143 %112
+               OpBranch %144
+        %144 = OpLabel
+        %296 = OpPhi %14 %128 %132 %295 %147
+        %293 = OpPhi %14 %112 %132 %149 %147
+        %306 = OpPhi %14 %140 %132 %306 %147
+        %301 = OpPhi %14 %128 %132 %300 %147
+               OpLoopMerge %146 %147 None
+               OpBranch %145
+        %145 = OpLabel
+        %149 = OpIAdd %14 %293 %128
+               OpStore %143 %149
+               OpStore %150 %112
+               OpStore %151 %112
+               OpBranch %152
+        %152 = OpLabel
+        %300 = OpPhi %14 %301 %145 %188 %155
+        %295 = OpPhi %14 %296 %145 %311 %155
+        %294 = OpPhi %14 %112 %145 %161 %155
+        %303 = OpPhi %14 %112 %145 %302 %155
+               OpLoopMerge %154 %155 None
+               OpBranch %156
+        %156 = OpLabel
+        %159 = OpSLessThan %91 %294 %158
+               OpBranchConditional %159 %153 %154
+        %153 = OpLabel
+        %161 = OpIAdd %14 %294 %128
+               OpStore %151 %161
+               OpStore %162 %112
+               OpBranch %163
+        %163 = OpLabel
+        %302 = OpPhi %14 %303 %153 %186 %166
+        %298 = OpPhi %14 %112 %153 %171 %166
+        %311 = OpPhi %14 %295 %153 %312 %166
+               OpLoopMerge %165 %166 None
+               OpBranch %167
+        %167 = OpLabel
+        %169 = OpSLessThan %91 %298 %158
+               OpBranchConditional %169 %164 %165
+        %164 = OpLabel
+        %171 = OpIAdd %14 %298 %128
+               OpStore %162 %171
+        %174 = OpIMul %14 %302 %173
+        %176 = OpIAdd %14 %174 %175
+        %178 = OpExtInst %14 %1 SClamp %176 %112 %177
+        %179 = OpAccessChain %110 %124 %178
+        %180 = OpLoad %14 %179
+        %181 = OpIEqual %91 %180 %112
+               OpSelectionMerge %183 None
+               OpBranchConditional %181 %182 %183
+        %182 = OpLabel
+               OpStore %142 %300
+               OpBranch %183
+        %183 = OpLabel
+        %312 = OpPhi %14 %311 %164 %300 %182
+               OpBranch %166
+        %166 = OpLabel
+        %186 = OpIAdd %14 %302 %128
+               OpStore %150 %186
+               OpBranch %163
+        %165 = OpLabel
+               OpBranch %155
+        %155 = OpLabel
+        %188 = OpIAdd %14 %300 %128
+               OpStore %141 %188
+               OpBranch %152
+        %154 = OpLabel
+        %191 = OpIMul %14 %295 %190
+        %192 = OpIAdd %14 %128 %191
+        %193 = OpExtInst %14 %1 SClamp %192 %112 %177
+        %194 = OpAccessChain %110 %124 %193
+               OpStore %194 %128
+               OpBranch %147
+        %147 = OpLabel
+        %196 = OpSLessThan %91 %149 %158
+               OpBranchConditional %196 %144 %146
+        %146 = OpLabel
+               OpBranch %134
+        %134 = OpLabel
+               OpBranch %131
+        %133 = OpLabel
+               OpStore %287 %288
+               OpStore %282 %112
+               OpBranch %281
+        %109 = OpLabel
+        %200 = OpLoad %6 %40
+        %202 = OpLoad %6 %77
+        %203 = OpFSub %6 %200 %202
+        %205 = OpLoad %6 %45
+        %207 = OpLoad %6 %82
+        %208 = OpFSub %6 %205 %207
+        %209 = OpCompositeConstruct %7 %203 %208
+        %211 = OpLoad %6 %42
+        %213 = OpLoad %6 %77
+        %214 = OpFSub %6 %211 %213
+        %216 = OpLoad %6 %47
+        %218 = OpLoad %6 %82
+        %219 = OpFSub %6 %216 %218
+        %220 = OpCompositeConstruct %7 %214 %219
+               OpStore %221 %209
+               OpStore %222 %220
+        %223 = OpFunctionCall %6 %12 %221 %222
+               OpStore %198 %223
+        %225 = OpFOrdLessThan %91 %64 %93
+        %227 = OpFOrdLessThan %91 %223 %93
+        %228 = OpLogicalAnd %91 %225 %227
+        %229 = OpLogicalNot %91 %228
+               OpSelectionMerge %231 None
+               OpBranchConditional %229 %230 %231
+        %230 = OpLabel
+        %233 = OpFOrdGreaterThanEqual %91 %64 %93
+        %235 = OpFOrdGreaterThanEqual %91 %223 %93
+        %236 = OpLogicalAnd %91 %233 %235
+               OpBranch %231
+        %231 = OpLabel
+        %237 = OpPhi %91 %228 %109 %236 %230
+        %238 = OpLogicalNot %91 %237
+               OpSelectionMerge %240 None
+               OpBranchConditional %238 %239 %240
+        %239 = OpLabel
+               OpStore %287 %288
+               OpStore %282 %112
+               OpBranch %281
+        %240 = OpLabel
+               OpStore %287 %288
+               OpStore %282 %128
+               OpBranch %281
+        %281 = OpLabel
+        %292 = OpPhi %14 %112 %133 %112 %239 %128 %240
+               OpReturnValue %292
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# resolution
+BUFFER variant_resolution DATA_TYPE vec2<float> DATA
+ 256.0 256.0
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 256 256
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant_resolution AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256
+
+EXPECT reference_framebuffer EQ_HISTOGRAM_EMD_BUFFER variant_framebuffer TOLERANCE 0.005
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/stable-triangle-nested-for-loop-and-true-if.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/stable-triangle-nested-for-loop-and-true-if.amber
new file mode 100644
index 0000000..345efbd
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/stable-triangle-nested-for-loop-and-true-if.amber
@@ -0,0 +1,771 @@
+#!amber
+
+# Copyright 2020 Google LLC
+#
+# 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.
+
+
+# A test for a bug found by GraphicsFuzz.
+
+# Short description: A fragment shader with nested for loop and always true if
+
+# The test passes because both shaders render the same image.
+
+# Optimized using spirv-opt with the following arguments:
+# '--if-conversion'
+# '--eliminate-local-multi-store'
+# '--eliminate-dead-inserts'
+# '--scalar-replacement=100'
+# '--simplify-instructions'
+# '--reduce-load-size'
+# '--copy-propagate-arrays'
+# '--private-to-local'
+# '--ccp'
+# '--redundancy-elimination'
+# '--vector-dce'
+# '--eliminate-local-multi-store'
+# '--eliminate-dead-code-aggressive'
+# '--private-to-local'
+# '--convert-local-access-chains'
+# '--if-conversion'
+# '--inline-entry-points-exhaustive'
+# '--eliminate-dead-code-aggressive'
+# '--eliminate-local-single-block'
+# '--if-conversion'
+# spirv-opt commit hash: 230f363e6da32791f640b02205e0645cc67c3f1d
+
+
+
+SHADER vertex reference_vertex_shader PASSTHROUGH
+
+# reference_fragment_shader is derived from the following GLSL:
+# #version 320 es
+# precision highp float;
+#
+# precision highp int;
+#
+# layout(location = 0) out vec4 _GLF_color;
+#
+# layout(set = 0, binding = 0) uniform buf0
+# {
+#     vec2 resolution;
+# };
+# float cross2d(vec2 a, vec2 b)
+# {
+#     return ((a.x) * (b.y) - (b.x) * (a.y));
+# }
+# int pointInTriangle(vec2 p, vec2 a, vec2 b, vec2 c)
+# {
+#     float pab = cross2d(vec2(p.x - a.x, p.y - a.y), vec2(b.x - a.x, b.y - a.y));
+#     float pbc = cross2d(vec2(p.x - b.x, p.y - b.y), vec2(c.x - b.x, c.y - b.y));
+#     if (!((pab < 0.0 && pbc < 0.0) || (pab >= 0.0 && pbc >= 0.0)))
+#     {
+#         return 0;
+#     }
+#     float pca = cross2d(vec2(p.x - c.x, p.y - c.y), vec2(a.x - c.x, a.y - c.y));
+#     if (!((pab < 0.0 && pca < 0.0) || (pab >= 0.0 && pca >= 0.0)))
+#     {
+#         return 0;
+#     }
+#     return 1;
+# }
+# void main()
+# {
+#     vec2 pos = gl_FragCoord.xy / resolution;
+#     if (pointInTriangle(pos, vec2(0.7, 0.3), vec2(0.5, 0.9), vec2(0.1, 0.4)) == 1)
+#     {
+#         _GLF_color = vec4(1.0, 0.0, 0.0, 1.0);
+#     }
+#     else
+#     {
+#         _GLF_color = vec4(0.0, 0.0, 0.0, 1.0);
+#     }
+# }
+SHADER fragment reference_fragment_shader SPIRV-ASM
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 10
+; Bound: 236
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %162 %191
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 320
+               OpName %4 "main"
+               OpName %20 "pointInTriangle(vf2;vf2;vf2;vf2;"
+               OpName %16 "p"
+               OpName %17 "a"
+               OpName %18 "b"
+               OpName %19 "c"
+               OpName %62 "param"
+               OpName %63 "param"
+               OpName %88 "param"
+               OpName %89 "param"
+               OpName %135 "param"
+               OpName %136 "param"
+               OpName %162 "gl_FragCoord"
+               OpName %165 "buf0"
+               OpMemberName %165 0 "resolution"
+               OpName %167 ""
+               OpName %181 "param"
+               OpName %183 "param"
+               OpName %184 "param"
+               OpName %185 "param"
+               OpName %191 "_GLF_color"
+               OpDecorate %162 BuiltIn FragCoord
+               OpMemberDecorate %165 0 Offset 0
+               OpDecorate %165 Block
+               OpDecorate %167 DescriptorSet 0
+               OpDecorate %167 Binding 0
+               OpDecorate %191 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeFloat 32
+          %7 = OpTypeVector %6 2
+          %8 = OpTypePointer Function %7
+         %14 = OpTypeInt 32 1
+         %15 = OpTypeFunction %14 %8 %8 %8 %8
+         %22 = OpTypeInt 32 0
+         %23 = OpConstant %22 0
+         %24 = OpTypePointer Function %6
+         %27 = OpConstant %22 1
+         %91 = OpTypeBool
+         %93 = OpConstant %6 0
+        %110 = OpConstant %14 0
+        %156 = OpConstant %14 1
+        %160 = OpTypeVector %6 4
+        %161 = OpTypePointer Input %160
+        %162 = OpVariable %161 Input
+        %165 = OpTypeStruct %7
+        %166 = OpTypePointer Uniform %165
+        %167 = OpVariable %166 Uniform
+        %168 = OpTypePointer Uniform %7
+        %172 = OpConstant %6 0.699999988
+        %173 = OpConstant %6 0.300000012
+        %174 = OpConstantComposite %7 %172 %173
+        %175 = OpConstant %6 0.5
+        %176 = OpConstant %6 0.899999976
+        %177 = OpConstantComposite %7 %175 %176
+        %178 = OpConstant %6 0.100000001
+        %179 = OpConstant %6 0.400000006
+        %180 = OpConstantComposite %7 %178 %179
+        %190 = OpTypePointer Output %160
+        %191 = OpVariable %190 Output
+        %192 = OpConstant %6 1
+        %193 = OpConstantComposite %160 %192 %93 %93 %192
+        %195 = OpConstantComposite %160 %93 %93 %93 %192
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+        %181 = OpVariable %8 Function
+        %183 = OpVariable %8 Function
+        %184 = OpVariable %8 Function
+        %185 = OpVariable %8 Function
+        %163 = OpLoad %160 %162
+        %164 = OpVectorShuffle %7 %163 %163 0 1
+        %169 = OpAccessChain %168 %167 %110
+        %170 = OpLoad %7 %169
+        %171 = OpFDiv %7 %164 %170
+               OpStore %181 %171
+               OpStore %183 %174
+               OpStore %184 %177
+               OpStore %185 %180
+        %186 = OpFunctionCall %14 %20 %181 %183 %184 %185
+        %187 = OpIEqual %91 %186 %156
+               OpSelectionMerge %189 None
+               OpBranchConditional %187 %188 %194
+        %188 = OpLabel
+               OpStore %191 %193
+               OpBranch %189
+        %194 = OpLabel
+               OpStore %191 %195
+               OpBranch %189
+        %189 = OpLabel
+               OpReturn
+               OpFunctionEnd
+         %20 = OpFunction %14 None %15
+         %16 = OpFunctionParameter %8
+         %17 = OpFunctionParameter %8
+         %18 = OpFunctionParameter %8
+         %19 = OpFunctionParameter %8
+         %21 = OpLabel
+        %223 = OpVariable %24 Function
+        %210 = OpVariable %24 Function
+        %197 = OpVariable %24 Function
+         %62 = OpVariable %8 Function
+         %63 = OpVariable %8 Function
+         %88 = OpVariable %8 Function
+         %89 = OpVariable %8 Function
+        %135 = OpVariable %8 Function
+        %136 = OpVariable %8 Function
+         %40 = OpAccessChain %24 %16 %23
+         %41 = OpLoad %6 %40
+         %42 = OpAccessChain %24 %17 %23
+         %43 = OpLoad %6 %42
+         %44 = OpFSub %6 %41 %43
+         %45 = OpAccessChain %24 %16 %27
+         %46 = OpLoad %6 %45
+         %47 = OpAccessChain %24 %17 %27
+         %48 = OpLoad %6 %47
+         %49 = OpFSub %6 %46 %48
+         %50 = OpCompositeConstruct %7 %44 %49
+         %51 = OpAccessChain %24 %18 %23
+         %52 = OpLoad %6 %51
+         %54 = OpLoad %6 %42
+         %55 = OpFSub %6 %52 %54
+         %56 = OpAccessChain %24 %18 %27
+         %57 = OpLoad %6 %56
+         %59 = OpLoad %6 %47
+         %60 = OpFSub %6 %57 %59
+         %61 = OpCompositeConstruct %7 %55 %60
+               OpStore %62 %50
+               OpStore %63 %61
+        %199 = OpAccessChain %24 %62 %23
+        %200 = OpLoad %6 %199
+        %201 = OpAccessChain %24 %63 %27
+        %202 = OpLoad %6 %201
+        %203 = OpFMul %6 %200 %202
+        %204 = OpAccessChain %24 %63 %23
+        %205 = OpLoad %6 %204
+        %206 = OpAccessChain %24 %62 %27
+        %207 = OpLoad %6 %206
+        %208 = OpFMul %6 %205 %207
+        %209 = OpFSub %6 %203 %208
+               OpStore %197 %209
+         %67 = OpLoad %6 %40
+         %69 = OpLoad %6 %51
+         %70 = OpFSub %6 %67 %69
+         %72 = OpLoad %6 %45
+         %74 = OpLoad %6 %56
+         %75 = OpFSub %6 %72 %74
+         %76 = OpCompositeConstruct %7 %70 %75
+         %77 = OpAccessChain %24 %19 %23
+         %78 = OpLoad %6 %77
+         %80 = OpLoad %6 %51
+         %81 = OpFSub %6 %78 %80
+         %82 = OpAccessChain %24 %19 %27
+         %83 = OpLoad %6 %82
+         %85 = OpLoad %6 %56
+         %86 = OpFSub %6 %83 %85
+         %87 = OpCompositeConstruct %7 %81 %86
+               OpStore %88 %76
+               OpStore %89 %87
+        %212 = OpAccessChain %24 %88 %23
+        %213 = OpLoad %6 %212
+        %214 = OpAccessChain %24 %89 %27
+        %215 = OpLoad %6 %214
+        %216 = OpFMul %6 %213 %215
+        %217 = OpAccessChain %24 %89 %23
+        %218 = OpLoad %6 %217
+        %219 = OpAccessChain %24 %88 %27
+        %220 = OpLoad %6 %219
+        %221 = OpFMul %6 %218 %220
+        %222 = OpFSub %6 %216 %221
+               OpStore %210 %222
+         %94 = OpFOrdLessThan %91 %209 %93
+         %96 = OpFOrdLessThan %91 %222 %93
+         %97 = OpLogicalAnd %91 %94 %96
+         %98 = OpLogicalNot %91 %97
+               OpSelectionMerge %100 None
+               OpBranchConditional %98 %99 %100
+         %99 = OpLabel
+        %102 = OpFOrdGreaterThanEqual %91 %209 %93
+        %104 = OpFOrdGreaterThanEqual %91 %222 %93
+        %105 = OpLogicalAnd %91 %102 %104
+               OpBranch %100
+        %100 = OpLabel
+        %106 = OpPhi %91 %97 %21 %105 %99
+        %107 = OpLogicalNot %91 %106
+               OpSelectionMerge %109 None
+               OpBranchConditional %107 %108 %109
+        %108 = OpLabel
+               OpReturnValue %110
+        %109 = OpLabel
+        %114 = OpLoad %6 %40
+        %116 = OpLoad %6 %77
+        %117 = OpFSub %6 %114 %116
+        %119 = OpLoad %6 %45
+        %121 = OpLoad %6 %82
+        %122 = OpFSub %6 %119 %121
+        %123 = OpCompositeConstruct %7 %117 %122
+        %125 = OpLoad %6 %42
+        %127 = OpLoad %6 %77
+        %128 = OpFSub %6 %125 %127
+        %130 = OpLoad %6 %47
+        %132 = OpLoad %6 %82
+        %133 = OpFSub %6 %130 %132
+        %134 = OpCompositeConstruct %7 %128 %133
+               OpStore %135 %123
+               OpStore %136 %134
+        %225 = OpAccessChain %24 %135 %23
+        %226 = OpLoad %6 %225
+        %227 = OpAccessChain %24 %136 %27
+        %228 = OpLoad %6 %227
+        %229 = OpFMul %6 %226 %228
+        %230 = OpAccessChain %24 %136 %23
+        %231 = OpLoad %6 %230
+        %232 = OpAccessChain %24 %135 %27
+        %233 = OpLoad %6 %232
+        %234 = OpFMul %6 %231 %233
+        %235 = OpFSub %6 %229 %234
+               OpStore %223 %235
+        %141 = OpFOrdLessThan %91 %235 %93
+        %142 = OpLogicalAnd %91 %94 %141
+        %143 = OpLogicalNot %91 %142
+               OpSelectionMerge %145 None
+               OpBranchConditional %143 %144 %145
+        %144 = OpLabel
+        %147 = OpFOrdGreaterThanEqual %91 %209 %93
+        %149 = OpFOrdGreaterThanEqual %91 %235 %93
+        %150 = OpLogicalAnd %91 %147 %149
+               OpBranch %145
+        %145 = OpLabel
+        %151 = OpPhi %91 %142 %109 %150 %144
+        %152 = OpLogicalNot %91 %151
+               OpSelectionMerge %154 None
+               OpBranchConditional %152 %153 %154
+        %153 = OpLabel
+               OpReturnValue %110
+        %154 = OpLabel
+               OpReturnValue %156
+               OpFunctionEnd
+END
+
+# uniforms for reference
+
+# resolution
+BUFFER reference_resolution DATA_TYPE vec2<float> DATA
+ 256.0 256.0
+END
+
+BUFFER reference_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics reference_pipeline
+  ATTACH reference_vertex_shader
+  ATTACH reference_fragment_shader
+  FRAMEBUFFER_SIZE 256 256
+  BIND BUFFER reference_framebuffer AS color LOCATION 0
+  BIND BUFFER reference_resolution AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR reference_pipeline 0 0 0 255
+
+CLEAR reference_pipeline
+RUN reference_pipeline DRAW_RECT POS 0 0 SIZE 256 256
+
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+# variant_fragment_shader is derived from the following GLSL:
+# #version 320 es
+# precision highp float;
+#
+# precision highp int;
+#
+# layout(location = 0) out vec4 _GLF_color;
+#
+# layout(set = 0, binding = 0) uniform buf0
+# {
+#     vec2 resolution;
+# };
+# layout(set = 0, binding = 1) uniform buf1
+# {
+#     vec2 injectionSwitch; // x == 0.0, y == 1.0
+# };
+#
+# void func()
+# {
+#     vec4 vec4_a = vec4(1.0, 1.0, 1.0, 1.0);
+#     // Iterates once.
+#     for (int int_i = 0; int_i < int(injectionSwitch.y); int_i++)
+#     {
+#         // _GLF_color == 1.0, 1.0, 1.0, 1.0
+#         _GLF_color = vec4_a;
+#         // Iterates once.
+#         for (int int_j = 0; int_j < int(injectionSwitch.y); int_j++)
+#         {
+#             // _GLF_color == 1.0, 1.0, 1.0, 1.0
+#             _GLF_color = vec4_a;
+#         }
+#     }
+# }
+#
+# float cross2d(vec2 a, vec2 b)
+# {
+#     return ((a.x) * (b.y) - (b.x) * (a.y));
+# }
+# int pointInTriangle(vec2 p, vec2 a, vec2 b, vec2 c)
+# {
+#     float pab = cross2d(vec2(p.x - a.x, p.y - a.y), vec2(b.x - a.x, b.y - a.y));
+#     float pbc = cross2d(vec2(p.x - b.x, p.y - b.y), vec2(c.x - b.x, c.y - b.y));
+#     if (!((pab < 0.0 && pbc < 0.0) || (pab >= 0.0 && pbc >= 0.0)))
+#     {
+#         func();
+#         return 0;
+#     }
+#     float pca = cross2d(vec2(p.x - c.x, p.y - c.y), vec2(a.x - c.x, a.y - c.y));
+#     if (!((pab < 0.0 && pca < 0.0) || (pab >= 0.0 && pca >= 0.0)))
+#     {
+#         return 0;
+#     }
+#     return 1;
+# }
+# void main()
+# {
+#     vec2 pos = gl_FragCoord.xy / resolution;
+#     if (pointInTriangle(pos, vec2(0.7, 0.3), vec2(0.5, 0.9), vec2(0.1, 0.4)) == 1)
+#     {
+#         // Always true.
+#         if ((injectionSwitch.y >= injectionSwitch.x))
+#         {
+#             _GLF_color = vec4(1.0, 0.0, 0.0, 1.0);
+#         }
+#     }
+#     else
+#     {
+#         _GLF_color = vec4(0.0, 0.0, 0.0, 1.0);
+#     }
+# }
+SHADER fragment variant_fragment_shader SPIRV-ASM
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 10
+; Bound: 307
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %50 %204
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 320
+               OpName %4 "main"
+               OpName %22 "pointInTriangle(vf2;vf2;vf2;vf2;"
+               OpName %18 "p"
+               OpName %19 "a"
+               OpName %20 "b"
+               OpName %21 "c"
+               OpName %38 "buf1"
+               OpMemberName %38 0 "injectionSwitch"
+               OpName %40 ""
+               OpName %50 "_GLF_color"
+               OpName %107 "param"
+               OpName %108 "param"
+               OpName %133 "param"
+               OpName %134 "param"
+               OpName %179 "param"
+               OpName %180 "param"
+               OpName %204 "gl_FragCoord"
+               OpName %207 "buf0"
+               OpMemberName %207 0 "resolution"
+               OpName %209 ""
+               OpName %223 "param"
+               OpName %225 "param"
+               OpName %226 "param"
+               OpName %227 "param"
+               OpMemberDecorate %38 0 Offset 0
+               OpDecorate %38 Block
+               OpDecorate %40 DescriptorSet 0
+               OpDecorate %40 Binding 1
+               OpDecorate %50 Location 0
+               OpDecorate %204 BuiltIn FragCoord
+               OpMemberDecorate %207 0 Offset 0
+               OpDecorate %207 Block
+               OpDecorate %209 DescriptorSet 0
+               OpDecorate %209 Binding 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %8 = OpTypeFloat 32
+          %9 = OpTypeVector %8 2
+         %10 = OpTypePointer Function %9
+         %16 = OpTypeInt 32 1
+         %17 = OpTypeFunction %16 %10 %10 %10 %10
+         %24 = OpTypeVector %8 4
+         %27 = OpConstant %8 1
+         %28 = OpConstantComposite %24 %27 %27 %27 %27
+         %31 = OpConstant %16 0
+         %38 = OpTypeStruct %9
+         %39 = OpTypePointer Uniform %38
+         %40 = OpVariable %39 Uniform
+         %41 = OpTypeInt 32 0
+         %42 = OpConstant %41 1
+         %43 = OpTypePointer Uniform %8
+         %47 = OpTypeBool
+         %49 = OpTypePointer Output %24
+         %50 = OpVariable %49 Output
+         %65 = OpConstant %16 1
+         %69 = OpConstant %41 0
+         %70 = OpTypePointer Function %8
+        %137 = OpConstant %8 0
+        %203 = OpTypePointer Input %24
+        %204 = OpVariable %203 Input
+        %207 = OpTypeStruct %9
+        %208 = OpTypePointer Uniform %207
+        %209 = OpVariable %208 Uniform
+        %210 = OpTypePointer Uniform %9
+        %214 = OpConstant %8 0.699999988
+        %215 = OpConstant %8 0.300000012
+        %216 = OpConstantComposite %9 %214 %215
+        %217 = OpConstant %8 0.5
+        %218 = OpConstant %8 0.899999976
+        %219 = OpConstantComposite %9 %217 %218
+        %220 = OpConstant %8 0.100000001
+        %221 = OpConstant %8 0.400000006
+        %222 = OpConstantComposite %9 %220 %221
+        %239 = OpConstantComposite %24 %27 %137 %137 %27
+        %241 = OpConstantComposite %24 %137 %137 %137 %27
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+        %223 = OpVariable %10 Function
+        %225 = OpVariable %10 Function
+        %226 = OpVariable %10 Function
+        %227 = OpVariable %10 Function
+        %205 = OpLoad %24 %204
+        %206 = OpVectorShuffle %9 %205 %205 0 1
+        %211 = OpAccessChain %210 %209 %31
+        %212 = OpLoad %9 %211
+        %213 = OpFDiv %9 %206 %212
+               OpStore %223 %213
+               OpStore %225 %216
+               OpStore %226 %219
+               OpStore %227 %222
+        %228 = OpFunctionCall %16 %22 %223 %225 %226 %227
+        %229 = OpIEqual %47 %228 %65
+               OpSelectionMerge %231 None
+               OpBranchConditional %229 %230 %240
+        %230 = OpLabel
+        %232 = OpAccessChain %43 %40 %31 %42
+        %233 = OpLoad %8 %232
+        %234 = OpAccessChain %43 %40 %31 %69
+        %235 = OpLoad %8 %234
+        %236 = OpFOrdGreaterThanEqual %47 %233 %235
+               OpSelectionMerge %238 None
+               OpBranchConditional %236 %237 %238
+        %237 = OpLabel
+               OpStore %50 %239
+               OpBranch %238
+        %238 = OpLabel
+               OpBranch %231
+        %240 = OpLabel
+               OpStore %50 %241
+               OpBranch %231
+        %231 = OpLabel
+               OpReturn
+               OpFunctionEnd
+         %22 = OpFunction %16 None %17
+         %18 = OpFunctionParameter %10
+         %19 = OpFunctionParameter %10
+         %20 = OpFunctionParameter %10
+         %21 = OpFunctionParameter %10
+         %23 = OpLabel
+        %294 = OpVariable %70 Function
+        %261 = OpVariable %70 Function
+        %248 = OpVariable %70 Function
+        %107 = OpVariable %10 Function
+        %108 = OpVariable %10 Function
+        %133 = OpVariable %10 Function
+        %134 = OpVariable %10 Function
+        %179 = OpVariable %10 Function
+        %180 = OpVariable %10 Function
+         %85 = OpAccessChain %70 %18 %69
+         %86 = OpLoad %8 %85
+         %87 = OpAccessChain %70 %19 %69
+         %88 = OpLoad %8 %87
+         %89 = OpFSub %8 %86 %88
+         %90 = OpAccessChain %70 %18 %42
+         %91 = OpLoad %8 %90
+         %92 = OpAccessChain %70 %19 %42
+         %93 = OpLoad %8 %92
+         %94 = OpFSub %8 %91 %93
+         %95 = OpCompositeConstruct %9 %89 %94
+         %96 = OpAccessChain %70 %20 %69
+         %97 = OpLoad %8 %96
+         %99 = OpLoad %8 %87
+        %100 = OpFSub %8 %97 %99
+        %101 = OpAccessChain %70 %20 %42
+        %102 = OpLoad %8 %101
+        %104 = OpLoad %8 %92
+        %105 = OpFSub %8 %102 %104
+        %106 = OpCompositeConstruct %9 %100 %105
+               OpStore %107 %95
+               OpStore %108 %106
+        %250 = OpAccessChain %70 %107 %69
+        %251 = OpLoad %8 %250
+        %252 = OpAccessChain %70 %108 %42
+        %253 = OpLoad %8 %252
+        %254 = OpFMul %8 %251 %253
+        %255 = OpAccessChain %70 %108 %69
+        %256 = OpLoad %8 %255
+        %257 = OpAccessChain %70 %107 %42
+        %258 = OpLoad %8 %257
+        %259 = OpFMul %8 %256 %258
+        %260 = OpFSub %8 %254 %259
+               OpStore %248 %260
+        %112 = OpLoad %8 %85
+        %114 = OpLoad %8 %96
+        %115 = OpFSub %8 %112 %114
+        %117 = OpLoad %8 %90
+        %119 = OpLoad %8 %101
+        %120 = OpFSub %8 %117 %119
+        %121 = OpCompositeConstruct %9 %115 %120
+        %122 = OpAccessChain %70 %21 %69
+        %123 = OpLoad %8 %122
+        %125 = OpLoad %8 %96
+        %126 = OpFSub %8 %123 %125
+        %127 = OpAccessChain %70 %21 %42
+        %128 = OpLoad %8 %127
+        %130 = OpLoad %8 %101
+        %131 = OpFSub %8 %128 %130
+        %132 = OpCompositeConstruct %9 %126 %131
+               OpStore %133 %121
+               OpStore %134 %132
+        %263 = OpAccessChain %70 %133 %69
+        %264 = OpLoad %8 %263
+        %265 = OpAccessChain %70 %134 %42
+        %266 = OpLoad %8 %265
+        %267 = OpFMul %8 %264 %266
+        %268 = OpAccessChain %70 %134 %69
+        %269 = OpLoad %8 %268
+        %270 = OpAccessChain %70 %133 %42
+        %271 = OpLoad %8 %270
+        %272 = OpFMul %8 %269 %271
+        %273 = OpFSub %8 %267 %272
+               OpStore %261 %273
+        %138 = OpFOrdLessThan %47 %260 %137
+        %140 = OpFOrdLessThan %47 %273 %137
+        %141 = OpLogicalAnd %47 %138 %140
+        %142 = OpLogicalNot %47 %141
+               OpSelectionMerge %144 None
+               OpBranchConditional %142 %143 %144
+        %143 = OpLabel
+        %146 = OpFOrdGreaterThanEqual %47 %260 %137
+        %148 = OpFOrdGreaterThanEqual %47 %273 %137
+        %149 = OpLogicalAnd %47 %146 %148
+               OpBranch %144
+        %144 = OpLabel
+        %150 = OpPhi %47 %141 %23 %149 %143
+        %151 = OpLogicalNot %47 %150
+               OpSelectionMerge %153 None
+               OpBranchConditional %151 %152 %153
+        %152 = OpLabel
+               OpBranch %275
+        %275 = OpLabel
+        %276 = OpPhi %16 %31 %152 %292 %291
+               OpLoopMerge %293 %291 None
+               OpBranch %277
+        %277 = OpLabel
+        %278 = OpAccessChain %43 %40 %31 %42
+        %279 = OpLoad %8 %278
+        %280 = OpConvertFToS %16 %279
+        %281 = OpSLessThan %47 %276 %280
+               OpBranchConditional %281 %282 %293
+        %282 = OpLabel
+               OpStore %50 %28
+               OpBranch %283
+        %283 = OpLabel
+        %284 = OpPhi %16 %31 %282 %289 %288
+               OpLoopMerge %290 %288 None
+               OpBranch %285
+        %285 = OpLabel
+        %286 = OpSLessThan %47 %284 %280
+               OpBranchConditional %286 %287 %290
+        %287 = OpLabel
+               OpStore %50 %28
+               OpBranch %288
+        %288 = OpLabel
+        %289 = OpIAdd %16 %284 %65
+               OpBranch %283
+        %290 = OpLabel
+               OpBranch %291
+        %291 = OpLabel
+        %292 = OpIAdd %16 %276 %65
+               OpBranch %275
+        %293 = OpLabel
+               OpReturnValue %31
+        %153 = OpLabel
+        %158 = OpLoad %8 %85
+        %160 = OpLoad %8 %122
+        %161 = OpFSub %8 %158 %160
+        %163 = OpLoad %8 %90
+        %165 = OpLoad %8 %127
+        %166 = OpFSub %8 %163 %165
+        %167 = OpCompositeConstruct %9 %161 %166
+        %169 = OpLoad %8 %87
+        %171 = OpLoad %8 %122
+        %172 = OpFSub %8 %169 %171
+        %174 = OpLoad %8 %92
+        %176 = OpLoad %8 %127
+        %177 = OpFSub %8 %174 %176
+        %178 = OpCompositeConstruct %9 %172 %177
+               OpStore %179 %167
+               OpStore %180 %178
+        %296 = OpAccessChain %70 %179 %69
+        %297 = OpLoad %8 %296
+        %298 = OpAccessChain %70 %180 %42
+        %299 = OpLoad %8 %298
+        %300 = OpFMul %8 %297 %299
+        %301 = OpAccessChain %70 %180 %69
+        %302 = OpLoad %8 %301
+        %303 = OpAccessChain %70 %179 %42
+        %304 = OpLoad %8 %303
+        %305 = OpFMul %8 %302 %304
+        %306 = OpFSub %8 %300 %305
+               OpStore %294 %306
+        %185 = OpFOrdLessThan %47 %306 %137
+        %186 = OpLogicalAnd %47 %138 %185
+        %187 = OpLogicalNot %47 %186
+               OpSelectionMerge %189 None
+               OpBranchConditional %187 %188 %189
+        %188 = OpLabel
+        %191 = OpFOrdGreaterThanEqual %47 %260 %137
+        %193 = OpFOrdGreaterThanEqual %47 %306 %137
+        %194 = OpLogicalAnd %47 %191 %193
+               OpBranch %189
+        %189 = OpLabel
+        %195 = OpPhi %47 %186 %153 %194 %188
+        %196 = OpLogicalNot %47 %195
+               OpSelectionMerge %198 None
+               OpBranchConditional %196 %197 %198
+        %197 = OpLabel
+               OpReturnValue %31
+        %198 = OpLabel
+               OpReturnValue %65
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# resolution
+BUFFER variant_resolution DATA_TYPE vec2<float> DATA
+ 256.0 256.0
+END
+# injectionSwitch
+BUFFER variant_injectionSwitch DATA_TYPE vec2<float> DATA
+ 0.0 1.0
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 256 256
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant_resolution AS uniform DESCRIPTOR_SET 0 BINDING 0
+  BIND BUFFER variant_injectionSwitch AS uniform DESCRIPTOR_SET 0 BINDING 1
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256
+
+EXPECT reference_framebuffer EQ_HISTOGRAM_EMD_BUFFER variant_framebuffer TOLERANCE 0.005
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/vec2-modf.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/vec2-modf.amber
new file mode 100644
index 0000000..095dc26
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/vec2-modf.amber
@@ -0,0 +1,129 @@
+#!amber
+
+# Copyright 2020 Google LLC
+#
+# 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.
+
+
+# A test for a bug found by the GraphicsFuzz project.
+
+# Short description: A fragment shader with vec2 in modulus fraction function
+
+# The test passes because the shader always writes the color red.
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+# variant_fragment_shader is derived from the following GLSL:
+# #version 320 es
+# precision highp float;
+#
+# precision highp int;
+#
+# layout(location = 0) out vec4 _GLF_color;
+#
+# void main()
+# {
+#     vec2 uv = vec2(1.0, 1.0);
+#     uv.x = (modf(1.0, uv.y));
+#     // uv.y == 1.0, uv.x == 0.0
+#     if (uv.y > 0.0 && uv.x < 1.0)
+#     {
+#         _GLF_color = vec4(1.0, 0.0, 0.0, 1.0);
+#     }
+#     else
+#     {
+#         _GLF_color = vec4(1.0);
+#     }
+# }
+SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 10
+; Bound: 38
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %34
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 320
+               OpName %4 "main"
+               OpName %9 "uv"
+               OpName %34 "_GLF_color"
+               OpDecorate %34 Location 0
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeFloat 32
+          %7 = OpTypeVector %6 2
+          %8 = OpTypePointer Function %7
+         %10 = OpConstant %6 1
+         %11 = OpConstantComposite %7 %10 %10
+         %12 = OpTypeInt 32 0
+         %13 = OpConstant %12 1
+         %14 = OpTypePointer Function %6
+         %17 = OpConstant %12 0
+         %19 = OpTypeBool
+         %22 = OpConstant %6 0
+         %32 = OpTypeVector %6 4
+         %33 = OpTypePointer Output %32
+         %34 = OpVariable %33 Output
+         %35 = OpConstantComposite %32 %10 %22 %22 %10
+         %37 = OpConstantComposite %32 %10 %10 %10 %10
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+          %9 = OpVariable %8 Function
+               OpStore %9 %11
+         %15 = OpAccessChain %14 %9 %13
+         %16 = OpExtInst %6 %1 Modf %10 %15
+         %18 = OpAccessChain %14 %9 %17
+               OpStore %18 %16
+         %20 = OpAccessChain %14 %9 %13
+         %21 = OpLoad %6 %20
+         %23 = OpFOrdGreaterThan %19 %21 %22
+               OpSelectionMerge %25 None
+               OpBranchConditional %23 %24 %25
+         %24 = OpLabel
+         %26 = OpAccessChain %14 %9 %17
+         %27 = OpLoad %6 %26
+         %28 = OpFOrdLessThan %19 %27 %10
+               OpBranch %25
+         %25 = OpLabel
+         %29 = OpPhi %19 %23 %5 %28 %24
+               OpSelectionMerge %31 None
+               OpBranchConditional %29 %30 %36
+         %30 = OpLabel
+               OpStore %34 %35
+               OpBranch %31
+         %36 = OpLabel
+               OpStore %34 %37
+               OpBranch %31
+         %31 = OpLabel
+               OpReturn
+               OpFunctionEnd
+END
+
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 256 256
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256
+
+EXPECT variant_framebuffer IDX 0 0 SIZE 256 256 EQ_RGBA 255 0 0 255
diff --git a/external/vulkancts/data/vulkan/amber/pipeline/vertex_only/position_to_ssbo.amber b/external/vulkancts/data/vulkan/amber/pipeline/position_to_ssbo.amber
similarity index 100%
rename from external/vulkancts/data/vulkan/amber/pipeline/vertex_only/position_to_ssbo.amber
rename to external/vulkancts/data/vulkan/amber/pipeline/position_to_ssbo.amber
diff --git a/external/vulkancts/data/vulkan/amber/pipeline/primitive_id_from_tess.amber b/external/vulkancts/data/vulkan/amber/pipeline/primitive_id_from_tess.amber
new file mode 100644
index 0000000..db52be5
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/pipeline/primitive_id_from_tess.amber
@@ -0,0 +1,114 @@
+#!amber
+#
+# Copyright 2020 The Khronos Group Inc.
+# Copyright 2020 Valve Corporation.
+#
+# 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
+#
+#     https://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.
+
+DEVICE_FEATURE geometryShader
+DEVICE_FEATURE tessellationShader
+
+SHADER vertex vert GLSL
+#version 450
+layout (location=0) in vec4 in_pos;
+void main(void)
+{
+    gl_Position = in_pos;
+}
+END
+
+SHADER tessellation_control tesc GLSL
+#version 450
+layout (vertices = 3) out;
+void main(void)
+{
+    gl_TessLevelInner[0] = 1.0;
+    gl_TessLevelInner[1] = 1.0;
+    gl_TessLevelOuter[0] = 1.0;
+    gl_TessLevelOuter[1] = 1.0;
+    gl_TessLevelOuter[2] = 1.0;
+    gl_TessLevelOuter[3] = 1.0;
+
+    gl_out[gl_InvocationID].gl_Position = gl_in[gl_InvocationID].gl_Position;
+}
+END
+
+SHADER tessellation_evaluation tese GLSL
+#version 450
+layout (triangles, fractional_odd_spacing, cw) in;
+void main(void)
+{
+    gl_Position = (gl_TessCoord.x * gl_in[0].gl_Position) +
+                  (gl_TessCoord.y * gl_in[1].gl_Position) +
+                  (gl_TessCoord.z * gl_in[2].gl_Position);
+}
+END
+
+SHADER fragment frag GLSL
+#version 450
+layout (location=0) out vec4 out_color;
+void main(void)
+{
+    vec4 primitive_color;
+    switch (gl_PrimitiveID) {
+        case 0:
+        case 1:
+            primitive_color = vec4(0, 0, 1, 1);
+            break;
+        case 2:
+        case 3:
+            primitive_color = vec4(1, 0, 1, 1);
+            break;
+        default:
+            primitive_color = vec4(0, 0, 0, 1);
+            break;
+    }
+    out_color = primitive_color;
+}
+END
+
+BUFFER position DATA_TYPE vec4<float> DATA
+-1 -1 0 1
+ 1 -1 0 1
+-1  0 0 1
+
+-1  0 0 1
+ 1 -1 0 1
+ 1  0 0 1
+
+-1  0 0 1
+ 1  0 0 1
+-1  1 0 1
+
+-1  1 0 1
+ 1  0 0 1
+ 1  1 0 1
+
+END
+
+BUFFER framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics graphics_pipeline
+  ATTACH vert
+  ATTACH tesc
+  ATTACH tese
+  ATTACH frag
+  VERTEX_DATA position LOCATION 0
+  BIND BUFFER framebuffer AS color LOCATION 0
+END
+
+CLEAR_COLOR graphics_pipeline 255 255 255 255
+CLEAR graphics_pipeline
+RUN graphics_pipeline DRAW_ARRAY AS PATCH_LIST START_IDX 0 COUNT 12
+EXPECT framebuffer IDX 0 0   SIZE 250 125 EQ_RGBA 0   0 255 255
+EXPECT framebuffer IDX 0 125 SIZE 250 125 EQ_RGBA 255 0 255 255
diff --git a/external/vulkancts/data/vulkan/amber/rasterization/depth_bias/d16_unorm.amber b/external/vulkancts/data/vulkan/amber/rasterization/depth_bias/d16_unorm.amber
new file mode 100644
index 0000000..36ac2d5
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/rasterization/depth_bias/d16_unorm.amber
@@ -0,0 +1,186 @@
+#!amber
+# Copyright 2020 Google LLC.
+# Copyright 2020 The Khronos Group Inc.
+#
+# 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
+#
+#     https://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.
+
+# This test draws two quads with depth values 0.3 and 0.5. Based on the equation in
+# Vulkan spec 26.12.3 the effective constant bias o is calculated as follows:
+
+# Both quads have a constant depth value, thus the maximum depth slope m is zero.
+# For minimun resolveble difference r there are two values accepted: r0 = 2^-16
+# and r1 = 2^-15. It is constant throughout the range of the entire depth buffer.
+
+# Using r0 the constant bias o value is:
+# 16384 * r0 = 16384 * 2^-16 = 0.25.
+
+# Adding this to the existing quad depth values should result as:
+# 0.3 + 0.25 = 0.55 and 0.5 + 0.25 = 0.75.
+
+# For r1 the same calculation for o is:
+# 16384 * r1 = 16384 * 2^-15 = 0.5.
+
+# Adding this to the existing quad depth values should result as:
+# 0.3 + 0.5 = 0.8 and 0.5 + 0.5 = 1.0
+
+SHADER vertex vert_shader GLSL
+#version 430
+
+layout(location = 0) in vec4 position;
+layout(location = 0) out vec4 frag_color;
+
+layout(set = 0, binding = 0) readonly buffer block1 {
+  vec4 in_color;
+  float depth;
+};
+
+void main() {
+  gl_Position = vec4(position.xy, depth, 1.0);
+  frag_color = in_color;
+}
+END
+
+SHADER fragment frag_shader GLSL
+#version 430
+
+layout(location = 0) in vec4 frag_color;
+layout(location = 0) out vec4 final_color;
+
+void main() {
+  final_color = frag_color;
+}
+END
+
+SHADER vertex vert_shader_tex GLSL
+#version 430
+layout(location = 0) in vec4 position;
+layout(location = 1) in vec2 texcoords_in;
+layout(location = 0) out vec2 texcoords_out;
+void main() {
+  gl_Position = position;
+  texcoords_out = texcoords_in;
+}
+END
+
+SHADER fragment frag_shader_tex GLSL
+#version 430
+layout(location = 0) in vec2 texcoords_in;
+layout(location = 0) out vec4 color_out;
+uniform layout(set=0, binding=0) sampler2D tex_sampler;
+void main() {
+  float f = texture(tex_sampler, texcoords_in).r;
+  color_out = vec4(f, f, f, 1);
+}
+END
+
+BUFFER data_buf1 DATA_TYPE float DATA  1.0 0.0  0.0 1.0 0.3 END
+BUFFER data_buf2 DATA_TYPE float DATA  0.0 1.0  0.0 1.0 0.5 END
+
+BUFFER position DATA_TYPE vec2<float> DATA
+-1.0 -1.0
+ 1.0 -1.0
+ 1.0  1.0
+-1.0  1.0
+END
+BUFFER texcoords DATA_TYPE vec2<float> DATA
+0.0 0.0
+1.0 0.0
+1.0 1.0
+0.0 1.0
+END
+
+BUFFER depthstencil FORMAT D16_UNORM
+BUFFER ddump FORMAT R32_SFLOAT
+BUFFER results DATA_TYPE float SIZE 2 FILL 0
+BUFFER framebuffer FORMAT B8G8R8A8_UNORM
+
+SAMPLER sampler
+
+PIPELINE graphics pipeline1
+  ATTACH vert_shader
+  ATTACH frag_shader
+
+  FRAMEBUFFER_SIZE 256 256
+  BIND BUFFER framebuffer AS color LOCATION 0
+  BIND BUFFER depthstencil AS depth_stencil
+  BIND BUFFER data_buf1 AS storage DESCRIPTOR_SET 0 BINDING 0
+
+  DEPTH
+    TEST on
+    WRITE on
+    COMPARE_OP less
+    CLAMP off
+    BOUNDS min 0.0 max 1.0
+    BIAS constant 16384.0 clamp 0.0 slope 2.0
+  END
+END
+
+DERIVE_PIPELINE pipeline2 FROM pipeline1
+  BIND BUFFER data_buf2 AS storage DESCRIPTOR_SET 0 BINDING 0
+END
+
+PIPELINE graphics depthdump
+  ATTACH vert_shader_tex
+  ATTACH frag_shader_tex
+  BIND BUFFER depthstencil AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 0
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA texcoords LOCATION 1
+  FRAMEBUFFER_SIZE 256 256
+  BIND BUFFER ddump AS color LOCATION 0
+END
+
+SHADER compute verification_shader GLSL
+#version 430
+layout(local_size_x=1,local_size_y=1) in;
+uniform layout (set=0, binding=0, r32f) image2D texture;
+layout(set = 0, binding = 1) buffer Result {
+  float result0;
+  float result1;
+};
+
+void main () {
+  float ref0_0 = 0.55;
+  float ref0_1 = 0.8;
+  float depth0 = imageLoad(texture, ivec2(0, 0)).r;
+  if (distance(ref0_0, depth0) < 0.003 || distance(ref0_1, depth0) < 0.003)
+      result0 = 1.0;
+  else
+      result0 = 0.0;
+
+  float ref1_0 = 0.75;
+  float ref1_1 = 1.0;
+  float depth1 = imageLoad(texture, ivec2(255, 255)).r;
+  if (distance(ref1_0, depth1) < 0.003 || distance(ref1_1, depth1) < 0.003)
+      result1 = 1.0;
+  else
+      result1 = 0.0;
+}
+END
+
+PIPELINE compute verification_pipeline
+  ATTACH verification_shader
+  BIND BUFFER ddump AS storage_image DESCRIPTOR_SET 0 BINDING 0
+  BIND BUFFER results AS storage DESCRIPTOR_SET 0 BINDING 1
+  FRAMEBUFFER_SIZE 256 256
+END
+
+CLEAR_DEPTH pipeline1 1.0
+CLEAR_COLOR pipeline1 255 255 255 255
+CLEAR pipeline1
+RUN pipeline1 DRAW_RECT POS   0   0 SIZE 200 200
+RUN pipeline2 DRAW_RECT POS   56 56 SIZE 200 200
+RUN depthdump DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+RUN verification_pipeline 1 1 1
+
+EXPECT results IDX 0 EQ 1.0
+EXPECT results IDX 4 EQ 1.0
diff --git a/external/vulkancts/data/vulkan/amber/rasterization/depth_bias/d24_unorm.amber b/external/vulkancts/data/vulkan/amber/rasterization/depth_bias/d24_unorm.amber
new file mode 100644
index 0000000..b3230da
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/rasterization/depth_bias/d24_unorm.amber
@@ -0,0 +1,186 @@
+#!amber
+# Copyright 2020 Google LLC.
+# Copyright 2020 The Khronos Group Inc.
+#
+# 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
+#
+#     https://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.
+
+# This test draws two quads with depth values 0.3 and 0.5. Based on the equation in
+# Vulkan spec 26.12.3 the effective constant bias o is calculated as follows:
+
+# Both quads have a constant depth value, thus the maximum depth slope m is zero.
+# For minimun resolveble difference r there are two values accepted: r0 = 2^-24
+# and r1 = 2^-23. It is constant throughout the range of the entire depth buffer.
+
+# Using r0 the constant bias o value is:
+# 4194304 * r0 = 4194304 * 2^-24 = 0.25.
+
+# Adding this to the existing quad depth values should result as:
+# 0.3 + 0.25 = 0.55 and 0.5 + 0.25 = 0.75.
+
+# For r1 the same calculation for o is:
+# 4194304 * r1 = 4194304 * 2^-23 = 0.5.
+
+# Adding this to the existing quad depth values should result as:
+# 0.3 + 0.5 = 0.8 and 0.5 + 0.5 = 1.0
+
+SHADER vertex vert_shader GLSL
+#version 430
+
+layout(location = 0) in vec4 position;
+layout(location = 0) out vec4 frag_color;
+
+layout(set = 0, binding = 0) readonly buffer block1 {
+  vec4 in_color;
+  float depth;
+};
+
+void main() {
+  gl_Position = vec4(position.xy, depth, 1.0);
+  frag_color = in_color;
+}
+END
+
+SHADER fragment frag_shader GLSL
+#version 430
+
+layout(location = 0) in vec4 frag_color;
+layout(location = 0) out vec4 final_color;
+
+void main() {
+  final_color = frag_color;
+}
+END
+
+SHADER vertex vert_shader_tex GLSL
+#version 430
+layout(location = 0) in vec4 position;
+layout(location = 1) in vec2 texcoords_in;
+layout(location = 0) out vec2 texcoords_out;
+void main() {
+  gl_Position = position;
+  texcoords_out = texcoords_in;
+}
+END
+
+SHADER fragment frag_shader_tex GLSL
+#version 430
+layout(location = 0) in vec2 texcoords_in;
+layout(location = 0) out vec4 color_out;
+uniform layout(set=0, binding=0) sampler2D tex_sampler;
+void main() {
+  float f = texture(tex_sampler, texcoords_in).r;
+  color_out = vec4(f, f, f, 1);
+}
+END
+
+BUFFER data_buf1 DATA_TYPE float DATA  1.0 0.0  0.0 1.0 0.3 END
+BUFFER data_buf2 DATA_TYPE float DATA  0.0 1.0  0.0 1.0 0.5 END
+
+BUFFER position DATA_TYPE vec2<float> DATA
+-1.0 -1.0
+ 1.0 -1.0
+ 1.0  1.0
+-1.0  1.0
+END
+BUFFER texcoords DATA_TYPE vec2<float> DATA
+0.0 0.0
+1.0 0.0
+1.0 1.0
+0.0 1.0
+END
+
+BUFFER depthstencil FORMAT D24_UNORM_S8_UINT
+BUFFER ddump FORMAT R32_SFLOAT
+BUFFER results DATA_TYPE float SIZE 2 FILL 0
+BUFFER framebuffer FORMAT B8G8R8A8_UNORM
+
+SAMPLER sampler
+
+PIPELINE graphics pipeline1
+  ATTACH vert_shader
+  ATTACH frag_shader
+
+  FRAMEBUFFER_SIZE 256 256
+  BIND BUFFER framebuffer AS color LOCATION 0
+  BIND BUFFER depthstencil AS depth_stencil
+  BIND BUFFER data_buf1 AS storage DESCRIPTOR_SET 0 BINDING 0
+
+  DEPTH
+    TEST on
+    WRITE on
+    COMPARE_OP less
+    CLAMP off
+    BOUNDS min 0.0 max 1.0
+    BIAS constant 4194304.0 clamp 0.0 slope 2.0
+  END
+END
+
+DERIVE_PIPELINE pipeline2 FROM pipeline1
+  BIND BUFFER data_buf2 AS storage DESCRIPTOR_SET 0 BINDING 0
+END
+
+PIPELINE graphics depthdump
+  ATTACH vert_shader_tex
+  ATTACH frag_shader_tex
+  BIND BUFFER depthstencil AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 0
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA texcoords LOCATION 1
+  FRAMEBUFFER_SIZE 256 256
+  BIND BUFFER ddump AS color LOCATION 0
+END
+
+SHADER compute verification_shader GLSL
+#version 430
+layout(local_size_x=1,local_size_y=1) in;
+uniform layout (set=0, binding=0, r32f) image2D texture;
+layout(set = 0, binding = 1) buffer Result {
+  float result0;
+  float result1;
+};
+
+void main () {
+  float ref0_0 = 0.55;
+  float ref0_1 = 0.8;
+  float depth0 = imageLoad(texture, ivec2(0, 0)).r;
+  if (distance(ref0_0, depth0) < 0.003 || distance(ref0_1, depth0) < 0.003)
+      result0 = 1.0;
+  else
+      result0 = 0.0;
+
+  float ref1_0 = 0.75;
+  float ref1_1 = 1.0;
+  float depth1 = imageLoad(texture, ivec2(255, 255)).r;
+  if (distance(ref1_0, depth1) < 0.003 || distance(ref1_1, depth1) < 0.003)
+      result1 = 1.0;
+  else
+      result1 = 0.0;
+}
+END
+
+PIPELINE compute verification_pipeline
+  ATTACH verification_shader
+  BIND BUFFER ddump AS storage_image DESCRIPTOR_SET 0 BINDING 0
+  BIND BUFFER results AS storage DESCRIPTOR_SET 0 BINDING 1
+  FRAMEBUFFER_SIZE 256 256
+END
+
+CLEAR_DEPTH pipeline1 1.0
+CLEAR_COLOR pipeline1 255 255 255 255
+CLEAR pipeline1
+RUN pipeline1 DRAW_RECT POS   0   0 SIZE 200 200
+RUN pipeline2 DRAW_RECT POS   56 56 SIZE 200 200
+RUN depthdump DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+RUN verification_pipeline 1 1 1
+
+EXPECT results IDX 0 EQ 1.0
+EXPECT results IDX 4 EQ 1.0
diff --git a/external/vulkancts/data/vulkan/amber/rasterization/depth_bias/d32_sfloat.amber b/external/vulkancts/data/vulkan/amber/rasterization/depth_bias/d32_sfloat.amber
new file mode 100644
index 0000000..3649889
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/rasterization/depth_bias/d32_sfloat.amber
@@ -0,0 +1,153 @@
+#!amber
+# Copyright 2020 Google LLC.
+# Copyright 2020 The Khronos Group Inc.
+#
+# 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
+#
+#     https://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.
+
+# This test draws two quads with depth values 0.3 and 0.5. Based on the equation in
+# Vulkan spec 26.12.3 the effective constant bias o is calculated as follows:
+
+# Both quads have a constant depth value, thus the maximum depth slope m is zero.
+# The maximum exponent e is taken from the constant depth value.
+# For depth value 0.3 e is -2, and for value 0.5 it's -1.
+
+# 32bit float format has a mantissa size of 23 making n = 23.
+# The minimum resolvable difference r is calculated as r = 2^(e-n).
+
+# Thus the constant bias o values are:
+# 4194304 * r = 4194304 * 2^(-2-23) = 4194304 * 2^-25 = 0.125
+# and
+# 4194304 * r = 4194304 * 2^(-1-23) = 4194304 * 2^-24 = 0.25
+
+# Adding this to the existing quad depth values should result as
+# 0.3 + 0.125 = 0.425 and 0.5 + 0.25 = 0.75.
+
+# The depth buffer is dumped as a RGBA8 image making the expected results
+# roughly 0.425 * 255 = 108 and 0.75 * 255 = 191.
+
+SHADER vertex vert_shader GLSL
+#version 430
+
+layout(location = 0) in vec4 position;
+layout(location = 0) out vec4 frag_color;
+
+layout(set = 0, binding = 0) readonly buffer block1 {
+  vec4 in_color;
+  float depth;
+};
+
+void main() {
+  gl_Position = vec4(position.xy, depth, 1.0);
+  frag_color = in_color;
+}
+END
+
+SHADER fragment frag_shader GLSL
+#version 430
+
+layout(location = 0) in vec4 frag_color;
+layout(location = 0) out vec4 final_color;
+
+void main() {
+  final_color = frag_color;
+}
+END
+
+SHADER vertex vert_shader_tex GLSL
+#version 430
+layout(location = 0) in vec4 position;
+layout(location = 1) in vec2 texcoords_in;
+layout(location = 0) out vec2 texcoords_out;
+void main() {
+  gl_Position = position;
+  texcoords_out = texcoords_in;
+}
+END
+
+SHADER fragment frag_shader_tex GLSL
+#version 430
+layout(location = 0) in vec2 texcoords_in;
+layout(location = 0) out vec4 color_out;
+uniform layout(set=0, binding=0) sampler2D tex_sampler;
+void main() {
+  float f = texture(tex_sampler, texcoords_in).r;
+  color_out = vec4(f, f, f, 1);
+}
+END
+
+BUFFER data_buf1 DATA_TYPE float DATA  1.0 0.0  0.0 1.0 0.3 END
+BUFFER data_buf2 DATA_TYPE float DATA  0.0 1.0  0.0 1.0 0.5 END
+
+BUFFER position DATA_TYPE vec2<float> DATA
+-1.0 -1.0
+ 1.0 -1.0
+ 1.0  1.0
+-1.0  1.0
+END
+BUFFER texcoords DATA_TYPE vec2<float> DATA
+0.0 0.0
+1.0 0.0
+1.0 1.0
+0.0 1.0
+END
+
+BUFFER framebuffer FORMAT B8G8R8A8_UNORM
+BUFFER ddump FORMAT B8G8R8A8_UNORM
+BUFFER depthstencil FORMAT D32_SFLOAT
+
+SAMPLER sampler
+
+PIPELINE graphics pipeline1
+  ATTACH vert_shader
+  ATTACH frag_shader
+
+  FRAMEBUFFER_SIZE 256 256
+  BIND BUFFER framebuffer AS color LOCATION 0
+  BIND BUFFER depthstencil AS depth_stencil
+  BIND BUFFER data_buf1 AS storage DESCRIPTOR_SET 0 BINDING 0
+
+  DEPTH
+    TEST on
+    WRITE on
+    COMPARE_OP less
+    CLAMP off
+    BOUNDS min 0.0 max 1.0
+    BIAS constant 4194304.0 clamp 0.0 slope 2.0
+  END
+END
+
+DERIVE_PIPELINE pipeline2 FROM pipeline1
+  BIND BUFFER data_buf2 AS storage DESCRIPTOR_SET 0 BINDING 0
+END
+
+PIPELINE graphics depthdump
+  ATTACH vert_shader_tex
+  ATTACH frag_shader_tex
+  BIND BUFFER depthstencil AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 0
+  VERTEX_DATA position LOCATION 0
+  VERTEX_DATA texcoords LOCATION 1
+  FRAMEBUFFER_SIZE 256 256
+  BIND BUFFER ddump AS color LOCATION 0
+END
+
+CLEAR_DEPTH pipeline1 1.0
+CLEAR_COLOR pipeline1 255 255 255 255
+CLEAR pipeline1
+RUN pipeline1 DRAW_RECT POS   0   0 SIZE 200 200
+RUN pipeline2 DRAW_RECT POS   56 56 SIZE 200 200
+RUN depthdump DRAW_ARRAY AS TRIANGLE_FAN START_IDX 0 COUNT 4
+
+EXPECT ddump IDX 0 0 SIZE 1 1 EQ_RGBA 108 108 108 255 TOLERANCE 5% 5% 5% 0
+EXPECT ddump IDX 255 0 SIZE 1 1 EQ_RGBA 255 255 255 255 TOLERANCE 5% 5% 5% 0
+EXPECT ddump IDX 0 255 SIZE 1 1 EQ_RGBA 255 255 255 255 TOLERANCE 5% 5% 5% 0
+EXPECT ddump IDX 255 255 SIZE 1 1 EQ_RGBA 191 191 191 255 TOLERANCE 5% 5% 5% 0
\ No newline at end of file
diff --git a/external/vulkancts/data/vulkan/amber/rasterization/line_continuity/line-strip.amber b/external/vulkancts/data/vulkan/amber/rasterization/line_continuity/line-strip.amber
index dc88e12..4544a4b 100644
--- a/external/vulkancts/data/vulkan/amber/rasterization/line_continuity/line-strip.amber
+++ b/external/vulkancts/data/vulkan/amber/rasterization/line_continuity/line-strip.amber
@@ -1,5 +1,6 @@
 #!amber
-# Copyright 2020 The Amber Authors.
+# Copyright 2020 Google LLC.
+# Copyright 2020 The Khronos Group Inc.
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
diff --git a/external/vulkancts/data/vulkan/amber/rasterization/line_continuity/polygon-mode-lines.amber b/external/vulkancts/data/vulkan/amber/rasterization/line_continuity/polygon-mode-lines.amber
index 4bae586..5ab2b66 100644
--- a/external/vulkancts/data/vulkan/amber/rasterization/line_continuity/polygon-mode-lines.amber
+++ b/external/vulkancts/data/vulkan/amber/rasterization/line_continuity/polygon-mode-lines.amber
@@ -1,5 +1,6 @@
 #!amber
-# Copyright 2020 The Amber Authors.
+# Copyright 2020 Google LLC.
+# Copyright 2020 The Khronos Group Inc.
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
diff --git a/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/compute/variable_pointer/dynamic_offset/select_descriptor_array.amber b/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/compute/variable_pointer/dynamic_offset/select_descriptor_array.amber
new file mode 100644
index 0000000..66a2393
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/compute/variable_pointer/dynamic_offset/select_descriptor_array.amber
@@ -0,0 +1,166 @@
+#!amber
+# Copyright 2020 The Amber Authors.
+#
+# 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
+#
+#     https://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.
+
+DEVICE_EXTENSION VK_KHR_variable_pointers
+DEVICE_EXTENSION VK_KHR_storage_buffer_storage_class
+DEVICE_FEATURE VariablePointerFeatures.variablePointers
+DEVICE_FEATURE VariablePointerFeatures.variablePointersStorageBuffer
+
+# Based on the following GLSL shader pseudocode:
+#
+#SHADER compute compute_shader GLSL
+##version 430
+#
+#layout(set = 0, binding = 0) buffer InputData
+#{
+#    int data[10];
+#} input0[2];
+#
+#layout(set = 0, binding = 1) buffer InputData
+#{
+#    int data[10];
+#} input1[2];
+#
+#layout(set = 0, binding = 2) buffer Result
+#{
+#    int result;
+#};
+#
+#layout(push_constant) uniform Indices
+#{
+#    int idx0;
+#    int idx1;
+#    int idx2;
+#};
+#
+#
+#void main()
+#{
+#    InputData input[]* = (idx0 == 0) ? &input0 : &input1;
+#    result = input[idx1].data[idx2];
+#}
+#END
+
+SHADER compute compute_shader SPIRV-ASM
+               OpCapability Shader
+               OpCapability VariablePointers
+               OpExtension "SPV_KHR_variable_pointers"
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint GLCompute %main "main"
+               OpExecutionMode %main LocalSize 1 1 1
+               OpSource GLSL 430
+               OpMemberDecorate %Indices 0 Offset 0
+               OpMemberDecorate %Indices 1 Offset 4
+               OpMemberDecorate %Indices 2 Offset 8
+               OpDecorate %Indices Block
+               OpMemberDecorate %Result 0 Offset 0
+               OpDecorate %Result Block
+               OpDecorate %result DescriptorSet 0
+               OpDecorate %result Binding 2
+               OpDecorate %_arr_int_int_10 ArrayStride 16
+               OpMemberDecorate %InputData 0 Offset 0
+               OpDecorate %InputData Block
+               OpDecorate %input0 DescriptorSet 0
+               OpDecorate %input0 Binding 0
+               OpDecorate %input1 DescriptorSet 0
+               OpDecorate %input1 Binding 1
+       %void = OpTypeVoid
+       %bool = OpTypeBool
+        %int = OpTypeInt 32 1
+  %void_func = OpTypeFunction %void
+    %Indices = OpTypeStruct %int %int %int
+%_ptr_PushConstant_Indices = OpTypePointer PushConstant %Indices
+    %indices = OpVariable %_ptr_PushConstant_Indices PushConstant
+      %int_0 = OpConstant %int 0
+      %int_1 = OpConstant %int 1
+      %int_2 = OpConstant %int 2
+     %int_10 = OpConstant %int 10
+%_ptr_PushConstant_int = OpTypePointer PushConstant %int
+     %Result = OpTypeStruct %int
+%_ptr_StorageBuffer_Result = OpTypePointer StorageBuffer %Result
+     %result = OpVariable %_ptr_StorageBuffer_Result StorageBuffer
+%_arr_int_int_10 = OpTypeArray %int %int_10
+  %InputData = OpTypeStruct %_arr_int_int_10
+%_arr_InputData_int_2 = OpTypeArray %InputData %int_2
+%_ptr_StorageBuffer__arr_InputData_int_2 = OpTypePointer StorageBuffer %_arr_InputData_int_2
+%_ptr_StorageBuffer_int = OpTypePointer StorageBuffer %int
+     %input0 = OpVariable %_ptr_StorageBuffer__arr_InputData_int_2 StorageBuffer
+     %input1 = OpVariable %_ptr_StorageBuffer__arr_InputData_int_2 StorageBuffer
+       %main = OpFunction %void None %void_func
+      %label = OpLabel
+   %idx0_ptr = OpAccessChain %_ptr_PushConstant_int %indices %int_0
+       %idx0 = OpLoad %int %idx0_ptr
+   %idx1_ptr = OpAccessChain %_ptr_PushConstant_int %indices %int_1
+       %idx1 = OpLoad %int %idx1_ptr
+   %idx2_ptr = OpAccessChain %_ptr_PushConstant_int %indices %int_2
+       %idx2 = OpLoad %int %idx2_ptr
+  %idx0_zero = OpIEqual %bool %idx0 %int_0
+%variable_ptr = OpSelect %_ptr_StorageBuffer__arr_InputData_int_2 %idx0_zero %input0 %input1
+%input_data_ptr = OpAccessChain %_ptr_StorageBuffer_int %variable_ptr %idx1 %int_0 %idx2
+ %input_data = OpLoad %int %input_data_ptr
+%result_data_ptr = OpAccessChain %_ptr_StorageBuffer_int %result %int_0
+               OpStore %result_data_ptr %input_data
+               OpReturn
+               OpFunctionEnd
+END
+
+BUFFER buf0 DATA_TYPE int32 SIZE 1024 SERIES_FROM 0 INC_BY 1
+BUFFER buf1 DATA_TYPE int32 SIZE 1024 SERIES_FROM 1 INC_BY 1
+BUFFER buf2 DATA_TYPE int32 SIZE 1024 SERIES_FROM 2 INC_BY 1
+BUFFER buf3 DATA_TYPE int32 SIZE 1024 SERIES_FROM 3 INC_BY 1
+BUFFER indices0 DATA_TYPE int32 DATA
+0 1 2
+END
+BUFFER indices1 DATA_TYPE int32 DATA
+1 1 2
+END
+BUFFER result DATA_TYPE int32 DATA
+0
+END
+
+# This pipeline will select input from buf1 which has a dynamic offset of 256 bytes.
+# The sequence in that buffer starts from 1, and the array stride in the shader is
+# 16 bytes. The shader reads an array element number 2. Thus the expected value is:
+# 256/4 + 1 + 2 * 4 = 73.
+PIPELINE compute pipeline0
+  ATTACH compute_shader
+
+  BIND BUFFER_ARRAY buf0 buf1 AS storage_dynamic DESCRIPTOR_SET 0 BINDING 0 OFFSET 0 256
+  BIND BUFFER_ARRAY buf2 buf3 AS storage_dynamic DESCRIPTOR_SET 0 BINDING 1 OFFSET 512 768
+  BIND BUFFER indices0 AS push_constant
+  BIND BUFFER result AS storage DESCRIPTOR_SET 0 BINDING 2
+END
+
+RUN pipeline0 1 1 1
+
+EXPECT result IDX 0 EQ 73
+
+# This pipeline will select input from buf3 which has a dynamic offset of 768 bytes.
+# The sequence in that buffer starts from 3, and the array stride in the shader is
+# 16 bytes. The shader reads an array element number 2. Thus the expected value is:
+# 768/4 + 3 + 2 * 4 = 203.
+PIPELINE compute pipeline1
+  ATTACH compute_shader
+
+  BIND BUFFER_ARRAY buf0 buf1 AS storage_dynamic DESCRIPTOR_SET 0 BINDING 0 OFFSET 0 256
+  BIND BUFFER_ARRAY buf2 buf3 AS storage_dynamic DESCRIPTOR_SET 0 BINDING 1 OFFSET 512 768
+  BIND BUFFER indices1 AS push_constant
+  BIND BUFFER result AS storage DESCRIPTOR_SET 0 BINDING 2
+END
+
+RUN pipeline1 1 1 1
+
+EXPECT result IDX 0 EQ 203
diff --git a/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/frexpstruct_1_comp.amber b/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/frexpstruct_1_comp.amber
new file mode 100644
index 0000000..c5455eb
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/frexpstruct_1_comp.amber
@@ -0,0 +1,211 @@
+#!amber
+
+# Copyright 2021 Google LLC
+#
+# 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.
+
+# A compute shader test for FrexpStruct.
+
+# SHADER compute comp_shader GLSL
+# #version 430
+# precision highp float;
+#
+# const uint ndp = 1296 / 1;
+# const uint half_ndp = ndp / 2;
+#
+# layout(set = 0, binding = 0) readonly buffer block0 {
+#     uint in_values[half_ndp];
+# };
+#
+# layout(set = 0, binding = 1) buffer block1 {
+#     float frexp_out[ndp];
+# };
+#
+# layout(set = 0, binding = 2) buffer block2 {
+#     float frexpStruct_out[ndp];
+# };
+#
+# struct frexpStructType
+# {
+#     float x;
+#     int exp;
+# };
+#
+# // Replaced with native function in SPIR-V.
+# frexpStructType frexpStruct (float orig)
+# {
+#     float x;
+#     int exp;
+#     x = frexp(orig, exp);
+#     frexpStructType res = { x, exp };
+#     return res;
+# }
+#
+# void main ()
+# {
+#     for (uint ndx = 0; ndx < ndp; ndx += 2)
+#     {
+#         uint in_uint = in_values[ndx/2];
+#         float in_float = uintBitsToFloat(in_uint);
+#         float x;
+#         int exp;
+#
+#         x = frexp(in_float, exp);
+#         frexpStructType res = frexpStruct(in_float);
+#
+#         frexp_out[ndx] = intBitsToFloat(exp);
+#         frexp_out[ndx+1] = x;
+#         frexpStruct_out[ndx] = intBitsToFloat(res.exp);
+#         frexpStruct_out[ndx+1] = res.x;
+#     }
+#
+#     return;
+# }
+# END
+
+SHADER compute comp_shader SPIRV-ASM
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint GLCompute %main "main"
+               OpExecutionMode %main LocalSize 1 1 1
+               OpDecorate %_arr_uint_uint_648 ArrayStride 4
+               OpMemberDecorate %block0 0 NonWritable
+               OpMemberDecorate %block0 0 Offset 0
+               OpDecorate %block0 BufferBlock
+               OpDecorate %_ DescriptorSet 0
+               OpDecorate %_ Binding 0
+               OpDecorate %_arr_float_uint_1296 ArrayStride 4
+               OpMemberDecorate %block1 0 Offset 0
+               OpDecorate %block1 BufferBlock
+               OpDecorate %__0 DescriptorSet 0
+               OpDecorate %__0 Binding 1
+               OpDecorate %_arr_float_uint_1296_0 ArrayStride 4
+               OpMemberDecorate %block2 0 Offset 0
+               OpDecorate %block2 BufferBlock
+               OpDecorate %__1 DescriptorSet 0
+               OpDecorate %__1 Binding 2
+       %void = OpTypeVoid
+          %3 = OpTypeFunction %void
+      %float = OpTypeFloat 32
+%_ptr_Function_float = OpTypePointer Function %float
+        %int = OpTypeInt 32 1
+%frexpStructType = OpTypeStruct %float %int
+         %10 = OpTypeFunction %frexpStructType %_ptr_Function_float
+%_ptr_Function_int = OpTypePointer Function %int
+%_ptr_Function_frexpStructType = OpTypePointer Function %frexpStructType
+       %uint = OpTypeInt 32 0
+%_ptr_Function_uint = OpTypePointer Function %uint
+     %uint_0 = OpConstant %uint 0
+  %uint_1296 = OpConstant %uint 1296
+       %bool = OpTypeBool
+   %uint_648 = OpConstant %uint 648
+%_arr_uint_uint_648 = OpTypeArray %uint %uint_648
+     %block0 = OpTypeStruct %_arr_uint_uint_648
+%_ptr_Uniform_block0 = OpTypePointer Uniform %block0
+          %_ = OpVariable %_ptr_Uniform_block0 Uniform
+      %int_0 = OpConstant %int 0
+     %uint_2 = OpConstant %uint 2
+%_ptr_Uniform_uint = OpTypePointer Uniform %uint
+%_arr_float_uint_1296 = OpTypeArray %float %uint_1296
+     %block1 = OpTypeStruct %_arr_float_uint_1296
+%_ptr_Uniform_block1 = OpTypePointer Uniform %block1
+        %__0 = OpVariable %_ptr_Uniform_block1 Uniform
+%_ptr_Uniform_float = OpTypePointer Uniform %float
+     %uint_1 = OpConstant %uint 1
+%_arr_float_uint_1296_0 = OpTypeArray %float %uint_1296
+     %block2 = OpTypeStruct %_arr_float_uint_1296_0
+%_ptr_Uniform_block2 = OpTypePointer Uniform %block2
+        %__1 = OpVariable %_ptr_Uniform_block2 Uniform
+      %int_1 = OpConstant %int 1
+       %main = OpFunction %void None %3
+          %5 = OpLabel
+        %ndx = OpVariable %_ptr_Function_uint Function
+    %in_uint = OpVariable %_ptr_Function_uint Function
+   %in_float = OpVariable %_ptr_Function_float Function
+        %x_0 = OpVariable %_ptr_Function_float Function
+      %exp_0 = OpVariable %_ptr_Function_int Function
+      %res_0 = OpVariable %_ptr_Function_frexpStructType Function
+               OpStore %ndx %uint_0
+               OpBranch %31
+         %31 = OpLabel
+               OpLoopMerge %33 %34 None
+               OpBranch %35
+         %35 = OpLabel
+         %36 = OpLoad %uint %ndx
+         %39 = OpULessThan %bool %36 %uint_1296
+               OpBranchConditional %39 %32 %33
+         %32 = OpLabel
+         %47 = OpLoad %uint %ndx
+         %49 = OpUDiv %uint %47 %uint_2
+         %51 = OpAccessChain %_ptr_Uniform_uint %_ %int_0 %49
+         %52 = OpLoad %uint %51
+               OpStore %in_uint %52
+         %54 = OpLoad %uint %in_uint
+         %55 = OpBitcast %float %54
+               OpStore %in_float %55
+         %57 = OpLoad %float %in_float
+         %59 = OpExtInst %float %1 Frexp %57 %exp_0
+               OpStore %x_0 %59
+         %62 = OpLoad %float %in_float
+         %63 = OpExtInst %frexpStructType %1 FrexpStruct %62
+               OpStore %res_0 %63
+         %68 = OpLoad %uint %ndx
+         %69 = OpLoad %int %exp_0
+         %70 = OpBitcast %float %69
+         %72 = OpAccessChain %_ptr_Uniform_float %__0 %int_0 %68
+               OpStore %72 %70
+         %73 = OpLoad %uint %ndx
+         %75 = OpIAdd %uint %73 %uint_1
+         %76 = OpLoad %float %x_0
+         %77 = OpAccessChain %_ptr_Uniform_float %__0 %int_0 %75
+               OpStore %77 %76
+         %82 = OpLoad %uint %ndx
+         %84 = OpAccessChain %_ptr_Function_int %res_0 %int_1
+         %85 = OpLoad %int %84
+         %86 = OpBitcast %float %85
+         %87 = OpAccessChain %_ptr_Uniform_float %__1 %int_0 %82
+               OpStore %87 %86
+         %88 = OpLoad %uint %ndx
+         %89 = OpIAdd %uint %88 %uint_1
+         %90 = OpAccessChain %_ptr_Function_float %res_0 %int_0
+         %91 = OpLoad %float %90
+         %92 = OpAccessChain %_ptr_Uniform_float %__1 %int_0 %89
+               OpStore %92 %91
+               OpBranch %34
+         %34 = OpLabel
+         %93 = OpLoad %uint %ndx
+         %94 = OpIAdd %uint %93 %uint_2
+               OpStore %ndx %94
+               OpBranch %31
+         %33 = OpLabel
+               OpReturn
+               OpFunctionEnd
+END
+
+BUFFER buf_in DATA_TYPE uint32 SIZE 1296 FILE TEXT input.txt
+
+BUFFER buf_frexp DATA_TYPE float SIZE 1296 FILL 0.0
+BUFFER buf_frexpStruct DATA_TYPE float SIZE 1296 FILL 1.0
+
+PIPELINE compute test_pipeline
+    ATTACH comp_shader
+
+    BIND BUFFER buf_in AS storage DESCRIPTOR_SET 0 BINDING 0
+    BIND BUFFER buf_frexp AS storage DESCRIPTOR_SET 0 BINDING 1
+    BIND BUFFER buf_frexpStruct AS storage DESCRIPTOR_SET 0 BINDING 2
+END
+
+RUN test_pipeline 1 1 1
+
+EXPECT buf_frexp EQ_BUFFER buf_frexpStruct
diff --git a/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/frexpstruct_1_frag.amber b/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/frexpstruct_1_frag.amber
new file mode 100644
index 0000000..f5b61e3
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/frexpstruct_1_frag.amber
@@ -0,0 +1,283 @@
+#!amber
+
+# Copyright 2021 Google LLC
+#
+# 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.
+
+# A fragment shader test for FrexpStruct.
+
+# SHADER vertex vert_shader GLSL
+# #version 430
+# precision highp float;
+#
+# const uint ndp = 1296;
+# const uint ndpSqrt = uint(sqrt(ndp));
+# const float halfGridElementSize = 1.0 / float(ndpSqrt);
+#
+# layout (location = 0) in vec2 position;
+# layout (location = 0) flat out uint ndx_out;
+#
+# void main ()
+# {
+#     uint xcoord = uint(ndpSqrt * ((position.x + halfGridElementSize + 1) / 2) - 1);
+#     uint ycoord = uint(ndpSqrt * ((position.y + halfGridElementSize + 1) / 2) - 1);
+#     ndx_out = xcoord + ycoord * ndpSqrt;
+#
+#     gl_Position = vec4(position, 0, 1);
+#
+#     return;
+# }
+# END
+
+SHADER vertex vert_shader SPIRV-ASM
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %main "main" %position %ndx_out %_
+               OpDecorate %position Location 0
+               OpDecorate %ndx_out Flat
+               OpDecorate %ndx_out Location 0
+               OpMemberDecorate %gl_PerVertex 0 BuiltIn Position
+               OpMemberDecorate %gl_PerVertex 1 BuiltIn PointSize
+               OpMemberDecorate %gl_PerVertex 2 BuiltIn ClipDistance
+               OpDecorate %gl_PerVertex Block
+       %void = OpTypeVoid
+          %3 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+      %float = OpTypeFloat 32
+    %v2float = OpTypeVector %float 2
+%_ptr_Input_v2float = OpTypePointer Input %v2float
+   %position = OpVariable %_ptr_Input_v2float Input
+     %uint_0 = OpConstant %uint 0
+%_ptr_Input_float = OpTypePointer Input %float
+    %float_1 = OpConstant %float 1
+     %uint_1 = OpConstant %uint 1
+%_ptr_Output_uint = OpTypePointer Output %uint
+    %ndx_out = OpVariable %_ptr_Output_uint Output
+    %uint_36 = OpConstant %uint 36
+    %v4float = OpTypeVector %float 4
+%_arr_float_uint_1 = OpTypeArray %float %uint_1
+%gl_PerVertex = OpTypeStruct %v4float %float %_arr_float_uint_1
+%_ptr_Output_gl_PerVertex = OpTypePointer Output %gl_PerVertex
+          %_ = OpVariable %_ptr_Output_gl_PerVertex Output
+        %int = OpTypeInt 32 1
+      %int_0 = OpConstant %int 0
+    %float_0 = OpConstant %float 0
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+%float_1_02777779 = OpConstant %float 1.02777779
+   %float_18 = OpConstant %float 18
+       %main = OpFunction %void None %3
+          %5 = OpLabel
+         %16 = OpAccessChain %_ptr_Input_float %position %uint_0
+         %17 = OpLoad %float %16
+         %21 = OpFAdd %float %17 %float_1_02777779
+         %24 = OpFMul %float %21 %float_18
+         %25 = OpFSub %float %24 %float_1
+         %26 = OpConvertFToU %uint %25
+         %29 = OpAccessChain %_ptr_Input_float %position %uint_1
+         %30 = OpLoad %float %29
+         %32 = OpFAdd %float %30 %float_1_02777779
+         %34 = OpFMul %float %32 %float_18
+         %35 = OpFSub %float %34 %float_1
+         %36 = OpConvertFToU %uint %35
+         %42 = OpIMul %uint %36 %uint_36
+         %43 = OpIAdd %uint %26 %42
+               OpStore %ndx_out %43
+         %51 = OpLoad %v2float %position
+         %53 = OpCompositeExtract %float %51 0
+         %54 = OpCompositeExtract %float %51 1
+         %55 = OpCompositeConstruct %v4float %53 %54 %float_0 %float_1
+         %57 = OpAccessChain %_ptr_Output_v4float %_ %int_0
+               OpStore %57 %55
+               OpReturn
+               OpFunctionEnd
+END
+
+# SHADER fragment frag_shader GLSL
+# #version 430
+# precision highp float;
+#
+# const uint ndp = 1296;
+# const vec4 clear_value = vec4(0.0, 0.0, 0.0, 1.0);
+#
+# layout(set = 0, binding = 0) readonly buffer block0 {
+#     uint in_values[ndp];
+# };
+#
+# layout (location = 0) flat in uint ndx_in;
+# layout (location = 0) out vec4 frexp_x_out;
+# layout (location = 1) out vec4 frexp_exp_out;
+# layout (location = 2) out vec4 frexpStruct_x_out;
+# layout (location = 3) out vec4 frexpStruct_exp_out;
+#
+# struct frexpStructType
+# {
+#     float x;
+#     int exp;
+# };
+#
+# // Replaced with native function in SPIR-V.
+# frexpStructType frexpStruct (float orig)
+# {
+#     float x;
+#     int exp;
+#     x = frexp(orig, exp);
+#     frexpStructType res = { x, exp };
+#     return res;
+# }
+#
+# void main ()
+# {
+#     uint in_uint = in_values[ndx_in];
+#     float in_float = uintBitsToFloat(in_uint);
+#     float x;
+#     int exp;
+#     frexpStructType res;
+#
+#     x = frexp(in_float, exp);
+#     res = frexpStruct(in_float);
+#
+#     frexp_x_out = clear_value;
+#     frexp_exp_out = clear_value;
+#     frexpStruct_x_out = clear_value;
+#     frexpStruct_exp_out = clear_value;
+#     frexp_x_out.r = x;
+#     frexp_exp_out.r = intBitsToFloat(exp);
+#     frexpStruct_x_out.r = res.x;
+#     frexpStruct_exp_out.r = intBitsToFloat(res.exp);
+#
+#     return;
+# }
+# END
+
+SHADER fragment frag_shader SPIRV-ASM
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %main "main" %ndx_in %frexp_x_out %frexp_exp_out %frexpStruct_x_out %frexpStruct_exp_out
+               OpExecutionMode %main OriginUpperLeft
+               OpDecorate %_arr_uint_uint_1296 ArrayStride 4
+               OpMemberDecorate %block0 0 NonWritable
+               OpMemberDecorate %block0 0 Offset 0
+               OpDecorate %block0 BufferBlock
+               OpDecorate %_ DescriptorSet 0
+               OpDecorate %_ Binding 0
+               OpDecorate %ndx_in Flat
+               OpDecorate %ndx_in Location 0
+               OpDecorate %frexp_x_out Location 0
+               OpDecorate %frexp_exp_out Location 1
+               OpDecorate %frexpStruct_x_out Location 2
+               OpDecorate %frexpStruct_exp_out Location 3
+       %void = OpTypeVoid
+          %3 = OpTypeFunction %void
+      %float = OpTypeFloat 32
+%_ptr_Function_float = OpTypePointer Function %float
+        %int = OpTypeInt 32 1
+%frexpStructType = OpTypeStruct %float %int
+         %10 = OpTypeFunction %frexpStructType %_ptr_Function_float
+%_ptr_Function_int = OpTypePointer Function %int
+%_ptr_Function_frexpStructType = OpTypePointer Function %frexpStructType
+       %uint = OpTypeInt 32 0
+%_ptr_Function_uint = OpTypePointer Function %uint
+  %uint_1296 = OpConstant %uint 1296
+%_arr_uint_uint_1296 = OpTypeArray %uint %uint_1296
+     %block0 = OpTypeStruct %_arr_uint_uint_1296
+%_ptr_Uniform_block0 = OpTypePointer Uniform %block0
+          %_ = OpVariable %_ptr_Uniform_block0 Uniform
+      %int_0 = OpConstant %int 0
+%_ptr_Input_uint = OpTypePointer Input %uint
+     %ndx_in = OpVariable %_ptr_Input_uint Input
+%_ptr_Uniform_uint = OpTypePointer Uniform %uint
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+%frexp_x_out = OpVariable %_ptr_Output_v4float Output
+    %float_0 = OpConstant %float 0
+    %float_1 = OpConstant %float 1
+         %58 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_1
+%frexp_exp_out = OpVariable %_ptr_Output_v4float Output
+%frexpStruct_x_out = OpVariable %_ptr_Output_v4float Output
+%frexpStruct_exp_out = OpVariable %_ptr_Output_v4float Output
+     %uint_0 = OpConstant %uint 0
+%_ptr_Output_float = OpTypePointer Output %float
+      %int_1 = OpConstant %int 1
+       %main = OpFunction %void None %3
+          %5 = OpLabel
+    %in_uint = OpVariable %_ptr_Function_uint Function
+   %in_float = OpVariable %_ptr_Function_float Function
+        %x_0 = OpVariable %_ptr_Function_float Function
+      %exp_0 = OpVariable %_ptr_Function_int Function
+      %res_0 = OpVariable %_ptr_Function_frexpStructType Function
+         %38 = OpLoad %uint %ndx_in
+         %40 = OpAccessChain %_ptr_Uniform_uint %_ %int_0 %38
+         %41 = OpLoad %uint %40
+               OpStore %in_uint %41
+         %43 = OpLoad %uint %in_uint
+         %44 = OpBitcast %float %43
+               OpStore %in_float %44
+         %46 = OpLoad %float %in_float
+         %48 = OpExtInst %float %1 Frexp %46 %exp_0
+               OpStore %x_0 %48
+         %51 = OpLoad %float %in_float
+         %52 = OpExtInst %frexpStructType %1 FrexpStruct %51
+               OpStore %res_0 %52
+               OpStore %frexp_x_out %58
+               OpStore %frexp_exp_out %58
+               OpStore %frexpStruct_x_out %58
+               OpStore %frexpStruct_exp_out %58
+         %62 = OpLoad %float %x_0
+         %65 = OpAccessChain %_ptr_Output_float %frexp_x_out %uint_0
+               OpStore %65 %62
+         %66 = OpLoad %int %exp_0
+         %67 = OpBitcast %float %66
+         %68 = OpAccessChain %_ptr_Output_float %frexp_exp_out %uint_0
+               OpStore %68 %67
+         %69 = OpAccessChain %_ptr_Function_float %res_0 %int_0
+         %70 = OpLoad %float %69
+         %71 = OpAccessChain %_ptr_Output_float %frexpStruct_x_out %uint_0
+               OpStore %71 %70
+         %73 = OpAccessChain %_ptr_Function_int %res_0 %int_1
+         %74 = OpLoad %int %73
+         %75 = OpBitcast %float %74
+         %76 = OpAccessChain %_ptr_Output_float %frexpStruct_exp_out %uint_0
+               OpStore %76 %75
+               OpReturn
+               OpFunctionEnd
+END
+
+BUFFER buf_in DATA_TYPE uint32 SIZE 1296 FILE TEXT input.txt
+BUFFER vertices DATA_TYPE vec2<float> SIZE 7776 FILE TEXT grid_vertices.txt
+
+BUFFER frexp_x FORMAT R32G32B32A32_SFLOAT
+BUFFER frexp_exp FORMAT R32G32B32A32_SFLOAT
+BUFFER frexpStruct_x FORMAT R32G32B32A32_SFLOAT
+BUFFER frexpStruct_exp FORMAT R32G32B32A32_SFLOAT
+
+PIPELINE graphics test_pipeline
+    FRAMEBUFFER_SIZE 144 144
+
+    ATTACH vert_shader
+    ATTACH frag_shader
+
+    VERTEX_DATA vertices LOCATION 0
+
+    BIND BUFFER buf_in AS storage DESCRIPTOR_SET 0 BINDING 0
+    BIND BUFFER frexp_x AS color LOCATION 0
+    BIND BUFFER frexp_exp AS color LOCATION 1
+    BIND BUFFER frexpStruct_x AS color LOCATION 2
+    BIND BUFFER frexpStruct_exp AS color LOCATION 3
+END
+
+RUN test_pipeline DRAW_ARRAY AS TRIANGLE_LIST START_IDX 0 COUNT 7776
+
+EXPECT frexp_x EQ_BUFFER frexpStruct_x
+EXPECT frexp_exp EQ_BUFFER frexpStruct_exp
diff --git a/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/frexpstruct_1_geom.amber b/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/frexpstruct_1_geom.amber
new file mode 100644
index 0000000..dd39469
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/frexpstruct_1_geom.amber
@@ -0,0 +1,424 @@
+#!amber
+
+# Copyright 2021 Google LLC
+#
+# 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.
+
+# A geometry shader test for FrexpStruct.
+
+DEVICE_FEATURE geometryShader
+
+# SHADER vertex vert_shader GLSL
+# #version 430
+# precision highp float;
+#
+# const uint ndp = 1296;
+# const uint ndpSqrt = uint(sqrt(ndp));
+# const float halfGridElementSize = 1.0 / float(ndpSqrt);
+#
+# layout (location = 0) in vec2 position;
+# layout (location = 0) flat out uint ndx_out;
+#
+# void main ()
+# {
+#     uint xcoord = uint(ndpSqrt * ((position.x + halfGridElementSize + 1) / 2) - 1);
+#     uint ycoord = uint(ndpSqrt * ((position.y + halfGridElementSize + 1) / 2) - 1);
+#     ndx_out = xcoord + ycoord * ndpSqrt;
+#
+#     gl_Position = vec4(position, 0, 1);
+#
+#     return;
+# }
+# END
+
+SHADER vertex vert_shader SPIRV-ASM
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %main "main" %position %ndx_out %_
+               OpDecorate %position Location 0
+               OpDecorate %ndx_out Flat
+               OpDecorate %ndx_out Location 0
+               OpMemberDecorate %gl_PerVertex 0 BuiltIn Position
+               OpMemberDecorate %gl_PerVertex 1 BuiltIn PointSize
+               OpMemberDecorate %gl_PerVertex 2 BuiltIn ClipDistance
+               OpDecorate %gl_PerVertex Block
+       %void = OpTypeVoid
+          %3 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+      %float = OpTypeFloat 32
+    %v2float = OpTypeVector %float 2
+%_ptr_Input_v2float = OpTypePointer Input %v2float
+   %position = OpVariable %_ptr_Input_v2float Input
+     %uint_0 = OpConstant %uint 0
+%_ptr_Input_float = OpTypePointer Input %float
+    %float_1 = OpConstant %float 1
+     %uint_1 = OpConstant %uint 1
+%_ptr_Output_uint = OpTypePointer Output %uint
+    %ndx_out = OpVariable %_ptr_Output_uint Output
+    %uint_36 = OpConstant %uint 36
+    %v4float = OpTypeVector %float 4
+%_arr_float_uint_1 = OpTypeArray %float %uint_1
+%gl_PerVertex = OpTypeStruct %v4float %float %_arr_float_uint_1
+%_ptr_Output_gl_PerVertex = OpTypePointer Output %gl_PerVertex
+          %_ = OpVariable %_ptr_Output_gl_PerVertex Output
+        %int = OpTypeInt 32 1
+      %int_0 = OpConstant %int 0
+    %float_0 = OpConstant %float 0
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+%float_1_02777779 = OpConstant %float 1.02777779
+   %float_18 = OpConstant %float 18
+       %main = OpFunction %void None %3
+          %5 = OpLabel
+         %16 = OpAccessChain %_ptr_Input_float %position %uint_0
+         %17 = OpLoad %float %16
+         %21 = OpFAdd %float %17 %float_1_02777779
+         %24 = OpFMul %float %21 %float_18
+         %25 = OpFSub %float %24 %float_1
+         %26 = OpConvertFToU %uint %25
+         %29 = OpAccessChain %_ptr_Input_float %position %uint_1
+         %30 = OpLoad %float %29
+         %32 = OpFAdd %float %30 %float_1_02777779
+         %34 = OpFMul %float %32 %float_18
+         %35 = OpFSub %float %34 %float_1
+         %36 = OpConvertFToU %uint %35
+         %42 = OpIMul %uint %36 %uint_36
+         %43 = OpIAdd %uint %26 %42
+               OpStore %ndx_out %43
+         %51 = OpLoad %v2float %position
+         %53 = OpCompositeExtract %float %51 0
+         %54 = OpCompositeExtract %float %51 1
+         %55 = OpCompositeConstruct %v4float %53 %54 %float_0 %float_1
+         %57 = OpAccessChain %_ptr_Output_v4float %_ %int_0
+               OpStore %57 %55
+               OpReturn
+               OpFunctionEnd
+END
+
+# SHADER geometry geom_shader GLSL
+# #version 430
+# precision highp float;
+#
+# const uint ndp = 1296;
+#
+# layout(set = 0, binding = 0) readonly buffer block0 {
+#     uint in_values[ndp];
+# };
+#
+# layout (triangles) in;
+# layout (triangle_strip, max_vertices = 3) out;
+#
+# layout (location = 0) flat in uint ndx_in[];
+# layout (location = 0) flat out float frexp_x_out;
+# layout (location = 1) flat out float frexp_exp_out;
+# layout (location = 2) flat out float frexpStruct_x_out;
+# layout (location = 3) flat out float frexpStruct_exp_out;
+#
+# struct frexpStructType
+# {
+#     float x;
+#     int exp;
+# };
+#
+# // Replaced with native function in SPIR-V.
+# frexpStructType frexpStruct (float orig)
+# {
+#     float x;
+#     int exp;
+#     x = frexp(orig, exp);
+#     frexpStructType res = { x, exp };
+#     return res;
+# }
+#
+# void main ()
+# {
+#     for (int vertex = 0; vertex < 3; vertex++)
+#     {
+#         uint in_uint = in_values[ndx_in[vertex]];
+#         float in_float = uintBitsToFloat(in_uint);
+#         float x;
+#         int exp;
+#         frexpStructType res;
+#
+#         x = frexp(in_float, exp);
+#         res = frexpStruct(in_float);
+#
+#         frexp_x_out = x;
+#         frexp_exp_out = intBitsToFloat(exp);
+#         frexpStruct_x_out = res.x;
+#         frexpStruct_exp_out = intBitsToFloat(res.exp);
+#
+#         gl_Position = gl_in[vertex].gl_Position;
+#         EmitVertex();
+#     }
+#
+#     EndPrimitive();
+# }
+# END
+
+SHADER geometry geom_shader SPIRV-ASM
+               OpCapability Geometry
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Geometry %main "main" %ndx_in %frexp_x_out %frexp_exp_out %frexpStruct_x_out %frexpStruct_exp_out %__0 %gl_in
+               OpExecutionMode %main Triangles
+               OpExecutionMode %main Invocations 1
+               OpExecutionMode %main OutputTriangleStrip
+               OpExecutionMode %main OutputVertices 3
+               OpDecorate %_arr_uint_uint_1296 ArrayStride 4
+               OpMemberDecorate %block0 0 NonWritable
+               OpMemberDecorate %block0 0 Offset 0
+               OpDecorate %block0 BufferBlock
+               OpDecorate %_ DescriptorSet 0
+               OpDecorate %_ Binding 0
+               OpDecorate %ndx_in Flat
+               OpDecorate %ndx_in Location 0
+               OpDecorate %frexp_x_out Flat
+               OpDecorate %frexp_x_out Location 0
+               OpDecorate %frexp_exp_out Flat
+               OpDecorate %frexp_exp_out Location 1
+               OpDecorate %frexpStruct_x_out Flat
+               OpDecorate %frexpStruct_x_out Location 2
+               OpDecorate %frexpStruct_exp_out Flat
+               OpDecorate %frexpStruct_exp_out Location 3
+               OpMemberDecorate %gl_PerVertex 0 BuiltIn Position
+               OpMemberDecorate %gl_PerVertex 1 BuiltIn PointSize
+               OpMemberDecorate %gl_PerVertex 2 BuiltIn ClipDistance
+               OpDecorate %gl_PerVertex Block
+               OpMemberDecorate %gl_PerVertex_0 0 BuiltIn Position
+               OpMemberDecorate %gl_PerVertex_0 1 BuiltIn PointSize
+               OpMemberDecorate %gl_PerVertex_0 2 BuiltIn ClipDistance
+               OpDecorate %gl_PerVertex_0 Block
+       %void = OpTypeVoid
+          %3 = OpTypeFunction %void
+      %float = OpTypeFloat 32
+%_ptr_Function_float = OpTypePointer Function %float
+        %int = OpTypeInt 32 1
+%frexpStructType = OpTypeStruct %float %int
+         %10 = OpTypeFunction %frexpStructType %_ptr_Function_float
+%_ptr_Function_int = OpTypePointer Function %int
+%_ptr_Function_frexpStructType = OpTypePointer Function %frexpStructType
+      %int_0 = OpConstant %int 0
+      %int_3 = OpConstant %int 3
+       %bool = OpTypeBool
+       %uint = OpTypeInt 32 0
+%_ptr_Function_uint = OpTypePointer Function %uint
+  %uint_1296 = OpConstant %uint 1296
+%_arr_uint_uint_1296 = OpTypeArray %uint %uint_1296
+     %block0 = OpTypeStruct %_arr_uint_uint_1296
+%_ptr_Uniform_block0 = OpTypePointer Uniform %block0
+          %_ = OpVariable %_ptr_Uniform_block0 Uniform
+     %uint_3 = OpConstant %uint 3
+%_arr_uint_uint_3 = OpTypeArray %uint %uint_3
+%_ptr_Input__arr_uint_uint_3 = OpTypePointer Input %_arr_uint_uint_3
+     %ndx_in = OpVariable %_ptr_Input__arr_uint_uint_3 Input
+%_ptr_Input_uint = OpTypePointer Input %uint
+%_ptr_Uniform_uint = OpTypePointer Uniform %uint
+%_ptr_Output_float = OpTypePointer Output %float
+%frexp_x_out = OpVariable %_ptr_Output_float Output
+%frexp_exp_out = OpVariable %_ptr_Output_float Output
+%frexpStruct_x_out = OpVariable %_ptr_Output_float Output
+%frexpStruct_exp_out = OpVariable %_ptr_Output_float Output
+      %int_1 = OpConstant %int 1
+    %v4float = OpTypeVector %float 4
+     %uint_1 = OpConstant %uint 1
+%_arr_float_uint_1 = OpTypeArray %float %uint_1
+%gl_PerVertex = OpTypeStruct %v4float %float %_arr_float_uint_1
+%_ptr_Output_gl_PerVertex = OpTypePointer Output %gl_PerVertex
+        %__0 = OpVariable %_ptr_Output_gl_PerVertex Output
+%gl_PerVertex_0 = OpTypeStruct %v4float %float %_arr_float_uint_1
+%_arr_gl_PerVertex_0_uint_3 = OpTypeArray %gl_PerVertex_0 %uint_3
+%_ptr_Input__arr_gl_PerVertex_0_uint_3 = OpTypePointer Input %_arr_gl_PerVertex_0_uint_3
+      %gl_in = OpVariable %_ptr_Input__arr_gl_PerVertex_0_uint_3 Input
+%_ptr_Input_v4float = OpTypePointer Input %v4float
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+       %main = OpFunction %void None %3
+          %5 = OpLabel
+     %vertex = OpVariable %_ptr_Function_int Function
+    %in_uint = OpVariable %_ptr_Function_uint Function
+   %in_float = OpVariable %_ptr_Function_float Function
+        %x_0 = OpVariable %_ptr_Function_float Function
+      %exp_0 = OpVariable %_ptr_Function_int Function
+      %res_0 = OpVariable %_ptr_Function_frexpStructType Function
+               OpStore %vertex %int_0
+               OpBranch %29
+         %29 = OpLabel
+               OpLoopMerge %31 %32 None
+               OpBranch %33
+         %33 = OpLabel
+         %34 = OpLoad %int %vertex
+         %37 = OpSLessThan %bool %34 %int_3
+               OpBranchConditional %37 %30 %31
+         %30 = OpLabel
+         %50 = OpLoad %int %vertex
+         %52 = OpAccessChain %_ptr_Input_uint %ndx_in %50
+         %53 = OpLoad %uint %52
+         %55 = OpAccessChain %_ptr_Uniform_uint %_ %int_0 %53
+         %56 = OpLoad %uint %55
+               OpStore %in_uint %56
+         %58 = OpLoad %uint %in_uint
+         %59 = OpBitcast %float %58
+               OpStore %in_float %59
+         %61 = OpLoad %float %in_float
+         %63 = OpExtInst %float %1 Frexp %61 %exp_0
+               OpStore %x_0 %63
+         %66 = OpLoad %float %in_float
+         %67 = OpExtInst %frexpStructType %1 FrexpStruct %66
+               OpStore %res_0 %67
+         %70 = OpLoad %float %x_0
+               OpStore %frexp_x_out %70
+         %72 = OpLoad %int %exp_0
+         %73 = OpBitcast %float %72
+               OpStore %frexp_exp_out %73
+         %75 = OpAccessChain %_ptr_Function_float %res_0 %int_0
+         %76 = OpLoad %float %75
+               OpStore %frexpStruct_x_out %76
+         %79 = OpAccessChain %_ptr_Function_int %res_0 %int_1
+         %80 = OpLoad %int %79
+         %81 = OpBitcast %float %80
+               OpStore %frexpStruct_exp_out %81
+         %92 = OpLoad %int %vertex
+         %94 = OpAccessChain %_ptr_Input_v4float %gl_in %92 %int_0
+         %95 = OpLoad %v4float %94
+         %97 = OpAccessChain %_ptr_Output_v4float %__0 %int_0
+               OpStore %97 %95
+               OpEmitVertex
+               OpBranch %32
+         %32 = OpLabel
+         %98 = OpLoad %int %vertex
+         %99 = OpIAdd %int %98 %int_1
+               OpStore %vertex %99
+               OpBranch %29
+         %31 = OpLabel
+               OpEndPrimitive
+               OpReturn
+               OpFunctionEnd
+END
+
+# SHADER fragment frag_shader GLSL
+# #version 430
+# precision highp float;
+#
+# layout (location = 0) flat in float frexp_x_in;
+# layout (location = 1) flat in float frexp_exp_in;
+# layout (location = 2) flat in float frexpStruct_x_in;
+# layout (location = 3) flat in float frexpStruct_exp_in;
+#
+# layout (location = 0) out vec4 frexp_x_out;
+# layout (location = 1) out vec4 frexp_exp_out;
+# layout (location = 2) out vec4 frexpStruct_x_out;
+# layout (location = 3) out vec4 frexpStruct_exp_out;
+#
+# const vec4 clear_value = vec4(0.0, 0.0, 0.0, 1.0);
+#
+# void main ()
+# {
+#     frexp_x_out = clear_value;
+#     frexp_exp_out = clear_value;
+#     frexpStruct_x_out = clear_value;
+#     frexpStruct_exp_out = clear_value;
+#     frexp_x_out.r = frexp_x_in;
+#     frexp_exp_out.r = frexp_exp_in;
+#     frexpStruct_x_out.r = frexpStruct_x_in;
+#     frexpStruct_exp_out.r = frexpStruct_exp_in;
+# }
+# END
+
+SHADER fragment frag_shader SPIRV-ASM
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %main "main" %frexp_x_out %frexp_exp_out %frexpStruct_x_out %frexpStruct_exp_out %frexp_x_in %frexp_exp_in %frexpStruct_x_in %frexpStruct_exp_in
+               OpExecutionMode %main OriginUpperLeft
+               OpDecorate %frexp_x_out Location 0
+               OpDecorate %frexp_exp_out Location 1
+               OpDecorate %frexpStruct_x_out Location 2
+               OpDecorate %frexpStruct_exp_out Location 3
+               OpDecorate %frexp_x_in Flat
+               OpDecorate %frexp_x_in Location 0
+               OpDecorate %frexp_exp_in Flat
+               OpDecorate %frexp_exp_in Location 1
+               OpDecorate %frexpStruct_x_in Flat
+               OpDecorate %frexpStruct_x_in Location 2
+               OpDecorate %frexpStruct_exp_in Flat
+               OpDecorate %frexpStruct_exp_in Location 3
+       %void = OpTypeVoid
+          %3 = OpTypeFunction %void
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+%frexp_x_out = OpVariable %_ptr_Output_v4float Output
+    %float_0 = OpConstant %float 0
+    %float_1 = OpConstant %float 1
+         %12 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_1
+%frexp_exp_out = OpVariable %_ptr_Output_v4float Output
+%frexpStruct_x_out = OpVariable %_ptr_Output_v4float Output
+%frexpStruct_exp_out = OpVariable %_ptr_Output_v4float Output
+%_ptr_Input_float = OpTypePointer Input %float
+ %frexp_x_in = OpVariable %_ptr_Input_float Input
+       %uint = OpTypeInt 32 0
+     %uint_0 = OpConstant %uint 0
+%_ptr_Output_float = OpTypePointer Output %float
+%frexp_exp_in = OpVariable %_ptr_Input_float Input
+%frexpStruct_x_in = OpVariable %_ptr_Input_float Input
+%frexpStruct_exp_in = OpVariable %_ptr_Input_float Input
+       %main = OpFunction %void None %3
+          %5 = OpLabel
+               OpStore %frexp_x_out %12
+               OpStore %frexp_exp_out %12
+               OpStore %frexpStruct_x_out %12
+               OpStore %frexpStruct_exp_out %12
+         %18 = OpLoad %float %frexp_x_in
+         %22 = OpAccessChain %_ptr_Output_float %frexp_x_out %uint_0
+               OpStore %22 %18
+         %24 = OpLoad %float %frexp_exp_in
+         %25 = OpAccessChain %_ptr_Output_float %frexp_exp_out %uint_0
+               OpStore %25 %24
+         %27 = OpLoad %float %frexpStruct_x_in
+         %28 = OpAccessChain %_ptr_Output_float %frexpStruct_x_out %uint_0
+               OpStore %28 %27
+         %30 = OpLoad %float %frexpStruct_exp_in
+         %31 = OpAccessChain %_ptr_Output_float %frexpStruct_exp_out %uint_0
+               OpStore %31 %30
+               OpReturn
+               OpFunctionEnd
+END
+
+BUFFER buf_in DATA_TYPE uint32 SIZE 1296 FILE TEXT input.txt
+BUFFER vertices DATA_TYPE vec2<float> SIZE 7776 FILE TEXT grid_vertices.txt
+
+BUFFER frexp_x FORMAT R32G32B32A32_SFLOAT
+BUFFER frexp_exp FORMAT R32G32B32A32_SFLOAT
+BUFFER frexpStruct_x FORMAT R32G32B32A32_SFLOAT
+BUFFER frexpStruct_exp FORMAT R32G32B32A32_SFLOAT
+
+PIPELINE graphics test_pipeline
+    FRAMEBUFFER_SIZE 144 144
+
+    ATTACH vert_shader
+    ATTACH geom_shader
+    ATTACH frag_shader
+
+    VERTEX_DATA vertices LOCATION 0
+
+    BIND BUFFER buf_in AS storage DESCRIPTOR_SET 0 BINDING 0
+    BIND BUFFER frexp_x AS color LOCATION 0
+    BIND BUFFER frexp_exp AS color LOCATION 1
+    BIND BUFFER frexpStruct_x AS color LOCATION 2
+    BIND BUFFER frexpStruct_exp AS color LOCATION 3
+END
+
+RUN test_pipeline DRAW_ARRAY AS TRIANGLE_LIST START_IDX 0 COUNT 7776
+
+EXPECT frexp_x EQ_BUFFER frexpStruct_x
+EXPECT frexp_exp EQ_BUFFER frexpStruct_exp
diff --git a/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/frexpstruct_1_tesc.amber b/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/frexpstruct_1_tesc.amber
new file mode 100644
index 0000000..3f2eb76
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/frexpstruct_1_tesc.amber
@@ -0,0 +1,580 @@
+#!amber
+
+# Copyright 2021 Google LLC
+#
+# 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.
+
+# A tessellation control shader test for FrexpStruct.
+
+DEVICE_FEATURE tessellationShader
+
+# SHADER vertex vert_shader GLSL
+# #version 430
+# precision highp float;
+#
+# const uint ndp = 1296;
+# const uint ndpSqrt = uint(sqrt(ndp));
+# const float halfGridElementSize = 1.0 / float(ndpSqrt);
+#
+# layout (location = 0) in vec2 position;
+# layout (location = 0) flat out uint ndx_out;
+#
+# void main ()
+# {
+#     uint xcoord = uint(ndpSqrt * ((position.x + halfGridElementSize + 1) / 2) - 1);
+#     uint ycoord = uint(ndpSqrt * ((position.y + halfGridElementSize + 1) / 2) - 1);
+#     ndx_out = xcoord + ycoord * ndpSqrt;
+#
+#     gl_Position = vec4(position, 0, 1);
+#
+#     return;
+# }
+# END
+
+SHADER vertex vert_shader SPIRV-ASM
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %main "main" %position %ndx_out %_
+               OpDecorate %position Location 0
+               OpDecorate %ndx_out Flat
+               OpDecorate %ndx_out Location 0
+               OpMemberDecorate %gl_PerVertex 0 BuiltIn Position
+               OpMemberDecorate %gl_PerVertex 1 BuiltIn PointSize
+               OpMemberDecorate %gl_PerVertex 2 BuiltIn ClipDistance
+               OpDecorate %gl_PerVertex Block
+       %void = OpTypeVoid
+          %3 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+      %float = OpTypeFloat 32
+    %v2float = OpTypeVector %float 2
+%_ptr_Input_v2float = OpTypePointer Input %v2float
+   %position = OpVariable %_ptr_Input_v2float Input
+     %uint_0 = OpConstant %uint 0
+%_ptr_Input_float = OpTypePointer Input %float
+    %float_1 = OpConstant %float 1
+     %uint_1 = OpConstant %uint 1
+%_ptr_Output_uint = OpTypePointer Output %uint
+    %ndx_out = OpVariable %_ptr_Output_uint Output
+    %uint_36 = OpConstant %uint 36
+    %v4float = OpTypeVector %float 4
+%_arr_float_uint_1 = OpTypeArray %float %uint_1
+%gl_PerVertex = OpTypeStruct %v4float %float %_arr_float_uint_1
+%_ptr_Output_gl_PerVertex = OpTypePointer Output %gl_PerVertex
+          %_ = OpVariable %_ptr_Output_gl_PerVertex Output
+        %int = OpTypeInt 32 1
+      %int_0 = OpConstant %int 0
+    %float_0 = OpConstant %float 0
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+%float_1_02777779 = OpConstant %float 1.02777779
+   %float_18 = OpConstant %float 18
+       %main = OpFunction %void None %3
+          %5 = OpLabel
+         %16 = OpAccessChain %_ptr_Input_float %position %uint_0
+         %17 = OpLoad %float %16
+         %21 = OpFAdd %float %17 %float_1_02777779
+         %24 = OpFMul %float %21 %float_18
+         %25 = OpFSub %float %24 %float_1
+         %26 = OpConvertFToU %uint %25
+         %29 = OpAccessChain %_ptr_Input_float %position %uint_1
+         %30 = OpLoad %float %29
+         %32 = OpFAdd %float %30 %float_1_02777779
+         %34 = OpFMul %float %32 %float_18
+         %35 = OpFSub %float %34 %float_1
+         %36 = OpConvertFToU %uint %35
+         %42 = OpIMul %uint %36 %uint_36
+         %43 = OpIAdd %uint %26 %42
+               OpStore %ndx_out %43
+         %51 = OpLoad %v2float %position
+         %53 = OpCompositeExtract %float %51 0
+         %54 = OpCompositeExtract %float %51 1
+         %55 = OpCompositeConstruct %v4float %53 %54 %float_0 %float_1
+         %57 = OpAccessChain %_ptr_Output_v4float %_ %int_0
+               OpStore %57 %55
+               OpReturn
+               OpFunctionEnd
+END
+
+# SHADER tessellation_control tesc_shader GLSL
+# #version 430
+# precision highp float;
+#
+# const uint ndp = 1296;
+#
+# layout (vertices = 3) out;
+#
+# layout (location = 0) flat in uint ndx_in[];
+# layout (location = 0) flat out float frexp_x_out[];
+# layout (location = 1) flat out float frexp_exp_out[];
+# layout (location = 2) flat out float frexpStruct_x_out[];
+# layout (location = 3) flat out float frexpStruct_exp_out[];
+#
+# layout(set = 0, binding = 0) readonly buffer block0 {
+#     uint in_values[ndp];
+# };
+#
+# struct frexpStructType
+# {
+#     float x;
+#     int exp;
+# };
+#
+# // Replaced with native function in SPIR-V.
+# frexpStructType frexpStruct (float orig)
+# {
+#     float x;
+#     int exp;
+#     x = frexp(orig, exp);
+#     frexpStructType res = { x, exp };
+#     return res;
+# }
+#
+# void main ()
+# {
+#     uint in_uint = in_values[ndx_in[gl_InvocationID]];
+#     float in_float = uintBitsToFloat(in_uint);
+#     float x;
+#     int exp;
+#     frexpStructType res;
+#
+#     x = frexp(in_float, exp);
+#     res = frexpStruct(in_float);
+#
+#     frexp_x_out[gl_InvocationID] = x;
+#     frexp_exp_out[gl_InvocationID] = intBitsToFloat(exp);
+#     frexpStruct_x_out[gl_InvocationID] = res.x;
+#     frexpStruct_exp_out[gl_InvocationID] = intBitsToFloat(res.exp);
+#
+#     gl_TessLevelInner[0] = 1.0;
+#     gl_TessLevelInner[1] = 1.0;
+#     gl_TessLevelOuter[0] = 1.0;
+#     gl_TessLevelOuter[1] = 1.0;
+#     gl_TessLevelOuter[2] = 1.0;
+#     gl_TessLevelOuter[3] = 1.0;
+#     gl_out[gl_InvocationID].gl_Position = gl_in[gl_InvocationID].gl_Position;
+# }
+# END
+
+SHADER tessellation_control tesc_shader SPIRV-ASM
+               OpCapability Tessellation
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint TessellationControl %main "main" %ndx_in %gl_InvocationID %frexp_x_out %frexp_exp_out %frexpStruct_x_out %frexpStruct_exp_out %gl_TessLevelInner %gl_TessLevelOuter %gl_out %gl_in
+               OpExecutionMode %main OutputVertices 3
+               OpDecorate %_arr_uint_uint_1296 ArrayStride 4
+               OpMemberDecorate %block0 0 NonWritable
+               OpMemberDecorate %block0 0 Offset 0
+               OpDecorate %block0 BufferBlock
+               OpDecorate %_ DescriptorSet 0
+               OpDecorate %_ Binding 0
+               OpDecorate %ndx_in Flat
+               OpDecorate %ndx_in Location 0
+               OpDecorate %gl_InvocationID BuiltIn InvocationId
+               OpDecorate %frexp_x_out Flat
+               OpDecorate %frexp_x_out Location 0
+               OpDecorate %frexp_exp_out Flat
+               OpDecorate %frexp_exp_out Location 1
+               OpDecorate %frexpStruct_x_out Flat
+               OpDecorate %frexpStruct_x_out Location 2
+               OpDecorate %frexpStruct_exp_out Flat
+               OpDecorate %frexpStruct_exp_out Location 3
+               OpDecorate %gl_TessLevelInner Patch
+               OpDecorate %gl_TessLevelInner BuiltIn TessLevelInner
+               OpDecorate %gl_TessLevelOuter Patch
+               OpDecorate %gl_TessLevelOuter BuiltIn TessLevelOuter
+               OpMemberDecorate %gl_PerVertex 0 BuiltIn Position
+               OpMemberDecorate %gl_PerVertex 1 BuiltIn PointSize
+               OpMemberDecorate %gl_PerVertex 2 BuiltIn ClipDistance
+               OpDecorate %gl_PerVertex Block
+               OpMemberDecorate %gl_PerVertex_0 0 BuiltIn Position
+               OpMemberDecorate %gl_PerVertex_0 1 BuiltIn PointSize
+               OpMemberDecorate %gl_PerVertex_0 2 BuiltIn ClipDistance
+               OpDecorate %gl_PerVertex_0 Block
+       %void = OpTypeVoid
+          %3 = OpTypeFunction %void
+      %float = OpTypeFloat 32
+%_ptr_Function_float = OpTypePointer Function %float
+        %int = OpTypeInt 32 1
+%frexpStructType = OpTypeStruct %float %int
+         %10 = OpTypeFunction %frexpStructType %_ptr_Function_float
+%_ptr_Function_int = OpTypePointer Function %int
+%_ptr_Function_frexpStructType = OpTypePointer Function %frexpStructType
+       %uint = OpTypeInt 32 0
+%_ptr_Function_uint = OpTypePointer Function %uint
+  %uint_1296 = OpConstant %uint 1296
+%_arr_uint_uint_1296 = OpTypeArray %uint %uint_1296
+     %block0 = OpTypeStruct %_arr_uint_uint_1296
+%_ptr_Uniform_block0 = OpTypePointer Uniform %block0
+          %_ = OpVariable %_ptr_Uniform_block0 Uniform
+      %int_0 = OpConstant %int 0
+    %uint_32 = OpConstant %uint 32
+%_arr_uint_uint_32 = OpTypeArray %uint %uint_32
+%_ptr_Input__arr_uint_uint_32 = OpTypePointer Input %_arr_uint_uint_32
+     %ndx_in = OpVariable %_ptr_Input__arr_uint_uint_32 Input
+%_ptr_Input_int = OpTypePointer Input %int
+%gl_InvocationID = OpVariable %_ptr_Input_int Input
+%_ptr_Input_uint = OpTypePointer Input %uint
+%_ptr_Uniform_uint = OpTypePointer Uniform %uint
+     %uint_3 = OpConstant %uint 3
+%_arr_float_uint_3 = OpTypeArray %float %uint_3
+%_ptr_Output__arr_float_uint_3 = OpTypePointer Output %_arr_float_uint_3
+%frexp_x_out = OpVariable %_ptr_Output__arr_float_uint_3 Output
+%_ptr_Output_float = OpTypePointer Output %float
+%frexp_exp_out = OpVariable %_ptr_Output__arr_float_uint_3 Output
+%frexpStruct_x_out = OpVariable %_ptr_Output__arr_float_uint_3 Output
+%frexpStruct_exp_out = OpVariable %_ptr_Output__arr_float_uint_3 Output
+      %int_1 = OpConstant %int 1
+     %uint_2 = OpConstant %uint 2
+%_arr_float_uint_2 = OpTypeArray %float %uint_2
+%_ptr_Output__arr_float_uint_2 = OpTypePointer Output %_arr_float_uint_2
+%gl_TessLevelInner = OpVariable %_ptr_Output__arr_float_uint_2 Output
+    %float_1 = OpConstant %float 1
+     %uint_4 = OpConstant %uint 4
+%_arr_float_uint_4 = OpTypeArray %float %uint_4
+%_ptr_Output__arr_float_uint_4 = OpTypePointer Output %_arr_float_uint_4
+%gl_TessLevelOuter = OpVariable %_ptr_Output__arr_float_uint_4 Output
+      %int_2 = OpConstant %int 2
+      %int_3 = OpConstant %int 3
+    %v4float = OpTypeVector %float 4
+     %uint_1 = OpConstant %uint 1
+%_arr_float_uint_1 = OpTypeArray %float %uint_1
+%gl_PerVertex = OpTypeStruct %v4float %float %_arr_float_uint_1
+%_arr_gl_PerVertex_uint_3 = OpTypeArray %gl_PerVertex %uint_3
+%_ptr_Output__arr_gl_PerVertex_uint_3 = OpTypePointer Output %_arr_gl_PerVertex_uint_3
+     %gl_out = OpVariable %_ptr_Output__arr_gl_PerVertex_uint_3 Output
+%gl_PerVertex_0 = OpTypeStruct %v4float %float %_arr_float_uint_1
+%_arr_gl_PerVertex_0_uint_32 = OpTypeArray %gl_PerVertex_0 %uint_32
+%_ptr_Input__arr_gl_PerVertex_0_uint_32 = OpTypePointer Input %_arr_gl_PerVertex_0_uint_32
+      %gl_in = OpVariable %_ptr_Input__arr_gl_PerVertex_0_uint_32 Input
+%_ptr_Input_v4float = OpTypePointer Input %v4float
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+       %main = OpFunction %void None %3
+          %5 = OpLabel
+    %in_uint = OpVariable %_ptr_Function_uint Function
+   %in_float = OpVariable %_ptr_Function_float Function
+        %x_0 = OpVariable %_ptr_Function_float Function
+      %exp_0 = OpVariable %_ptr_Function_int Function
+      %res_0 = OpVariable %_ptr_Function_frexpStructType Function
+         %42 = OpLoad %int %gl_InvocationID
+         %44 = OpAccessChain %_ptr_Input_uint %ndx_in %42
+         %45 = OpLoad %uint %44
+         %47 = OpAccessChain %_ptr_Uniform_uint %_ %int_0 %45
+         %48 = OpLoad %uint %47
+               OpStore %in_uint %48
+         %50 = OpLoad %uint %in_uint
+         %51 = OpBitcast %float %50
+               OpStore %in_float %51
+         %53 = OpLoad %float %in_float
+         %55 = OpExtInst %float %1 Frexp %53 %exp_0
+               OpStore %x_0 %55
+         %58 = OpLoad %float %in_float
+         %59 = OpExtInst %frexpStructType %1 FrexpStruct %58
+               OpStore %res_0 %59
+         %64 = OpLoad %int %gl_InvocationID
+         %65 = OpLoad %float %x_0
+         %67 = OpAccessChain %_ptr_Output_float %frexp_x_out %64
+               OpStore %67 %65
+         %69 = OpLoad %int %gl_InvocationID
+         %70 = OpLoad %int %exp_0
+         %71 = OpBitcast %float %70
+         %72 = OpAccessChain %_ptr_Output_float %frexp_exp_out %69
+               OpStore %72 %71
+         %74 = OpLoad %int %gl_InvocationID
+         %75 = OpAccessChain %_ptr_Function_float %res_0 %int_0
+         %76 = OpLoad %float %75
+         %77 = OpAccessChain %_ptr_Output_float %frexpStruct_x_out %74
+               OpStore %77 %76
+         %79 = OpLoad %int %gl_InvocationID
+         %81 = OpAccessChain %_ptr_Function_int %res_0 %int_1
+         %82 = OpLoad %int %81
+         %83 = OpBitcast %float %82
+         %84 = OpAccessChain %_ptr_Output_float %frexpStruct_exp_out %79
+               OpStore %84 %83
+         %90 = OpAccessChain %_ptr_Output_float %gl_TessLevelInner %int_0
+               OpStore %90 %float_1
+         %91 = OpAccessChain %_ptr_Output_float %gl_TessLevelInner %int_1
+               OpStore %91 %float_1
+         %96 = OpAccessChain %_ptr_Output_float %gl_TessLevelOuter %int_0
+               OpStore %96 %float_1
+         %97 = OpAccessChain %_ptr_Output_float %gl_TessLevelOuter %int_1
+               OpStore %97 %float_1
+         %99 = OpAccessChain %_ptr_Output_float %gl_TessLevelOuter %int_2
+               OpStore %99 %float_1
+        %101 = OpAccessChain %_ptr_Output_float %gl_TessLevelOuter %int_3
+               OpStore %101 %float_1
+        %109 = OpLoad %int %gl_InvocationID
+        %114 = OpLoad %int %gl_InvocationID
+        %116 = OpAccessChain %_ptr_Input_v4float %gl_in %114 %int_0
+        %117 = OpLoad %v4float %116
+        %119 = OpAccessChain %_ptr_Output_v4float %gl_out %109 %int_0
+               OpStore %119 %117
+               OpReturn
+               OpFunctionEnd
+END
+
+# SHADER tessellation_evaluation tese_shader GLSL
+# #version 430
+# precision highp float;
+#
+# layout (triangles) in;
+#
+# layout (location = 0) flat in float frexp_x_in[];
+# layout (location = 1) flat in float frexp_exp_in[];
+# layout (location = 2) flat in float frexpStruct_x_in[];
+# layout (location = 3) flat in float frexpStruct_exp_in[];
+#
+# layout (location = 0) flat out float frexp_x_out;
+# layout (location = 1) flat out float frexp_exp_out;
+# layout (location = 2) flat out float frexpStruct_x_out;
+# layout (location = 3) flat out float frexpStruct_exp_out;
+#
+# void main ()
+# {
+#     gl_Position = gl_TessCoord.x * gl_in[0].gl_Position +
+#                   gl_TessCoord.y * gl_in[1].gl_Position +
+#                   gl_TessCoord.z * gl_in[2].gl_Position;
+#
+#     frexp_x_out = frexp_x_in[0];
+#     frexp_exp_out = frexp_exp_in[0];
+#     frexpStruct_x_out = frexpStruct_x_in[0];
+#     frexpStruct_exp_out = frexpStruct_exp_in[0];
+# }
+# END
+
+SHADER tessellation_evaluation tese_shader SPIRV-ASM
+               OpCapability Tessellation
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint TessellationEvaluation %main "main" %_ %gl_TessCoord %gl_in %frexp_x_out %frexp_x_in %frexp_exp_out %frexp_exp_in %frexpStruct_x_out %frexpStruct_x_in %frexpStruct_exp_out %frexpStruct_exp_in
+               OpExecutionMode %main Triangles
+               OpExecutionMode %main SpacingEqual
+               OpExecutionMode %main VertexOrderCcw
+               OpMemberDecorate %gl_PerVertex 0 BuiltIn Position
+               OpMemberDecorate %gl_PerVertex 1 BuiltIn PointSize
+               OpMemberDecorate %gl_PerVertex 2 BuiltIn ClipDistance
+               OpDecorate %gl_PerVertex Block
+               OpDecorate %gl_TessCoord BuiltIn TessCoord
+               OpMemberDecorate %gl_PerVertex_0 0 BuiltIn Position
+               OpMemberDecorate %gl_PerVertex_0 1 BuiltIn PointSize
+               OpMemberDecorate %gl_PerVertex_0 2 BuiltIn ClipDistance
+               OpDecorate %gl_PerVertex_0 Block
+               OpDecorate %frexp_x_out Flat
+               OpDecorate %frexp_x_out Location 0
+               OpDecorate %frexp_x_in Flat
+               OpDecorate %frexp_x_in Location 0
+               OpDecorate %frexp_exp_out Flat
+               OpDecorate %frexp_exp_out Location 1
+               OpDecorate %frexp_exp_in Flat
+               OpDecorate %frexp_exp_in Location 1
+               OpDecorate %frexpStruct_x_out Flat
+               OpDecorate %frexpStruct_x_out Location 2
+               OpDecorate %frexpStruct_x_in Flat
+               OpDecorate %frexpStruct_x_in Location 2
+               OpDecorate %frexpStruct_exp_out Flat
+               OpDecorate %frexpStruct_exp_out Location 3
+               OpDecorate %frexpStruct_exp_in Flat
+               OpDecorate %frexpStruct_exp_in Location 3
+       %void = OpTypeVoid
+          %3 = OpTypeFunction %void
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+       %uint = OpTypeInt 32 0
+     %uint_1 = OpConstant %uint 1
+%_arr_float_uint_1 = OpTypeArray %float %uint_1
+%gl_PerVertex = OpTypeStruct %v4float %float %_arr_float_uint_1
+%_ptr_Output_gl_PerVertex = OpTypePointer Output %gl_PerVertex
+          %_ = OpVariable %_ptr_Output_gl_PerVertex Output
+        %int = OpTypeInt 32 1
+      %int_0 = OpConstant %int 0
+    %v3float = OpTypeVector %float 3
+%_ptr_Input_v3float = OpTypePointer Input %v3float
+%gl_TessCoord = OpVariable %_ptr_Input_v3float Input
+     %uint_0 = OpConstant %uint 0
+%_ptr_Input_float = OpTypePointer Input %float
+%gl_PerVertex_0 = OpTypeStruct %v4float %float %_arr_float_uint_1
+    %uint_32 = OpConstant %uint 32
+%_arr_gl_PerVertex_0_uint_32 = OpTypeArray %gl_PerVertex_0 %uint_32
+%_ptr_Input__arr_gl_PerVertex_0_uint_32 = OpTypePointer Input %_arr_gl_PerVertex_0_uint_32
+      %gl_in = OpVariable %_ptr_Input__arr_gl_PerVertex_0_uint_32 Input
+%_ptr_Input_v4float = OpTypePointer Input %v4float
+      %int_1 = OpConstant %int 1
+     %uint_2 = OpConstant %uint 2
+      %int_2 = OpConstant %int 2
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+%_ptr_Output_float = OpTypePointer Output %float
+%frexp_x_out = OpVariable %_ptr_Output_float Output
+%_arr_float_uint_32 = OpTypeArray %float %uint_32
+%_ptr_Input__arr_float_uint_32 = OpTypePointer Input %_arr_float_uint_32
+ %frexp_x_in = OpVariable %_ptr_Input__arr_float_uint_32 Input
+%frexp_exp_out = OpVariable %_ptr_Output_float Output
+%frexp_exp_in = OpVariable %_ptr_Input__arr_float_uint_32 Input
+%frexpStruct_x_out = OpVariable %_ptr_Output_float Output
+%frexpStruct_x_in = OpVariable %_ptr_Input__arr_float_uint_32 Input
+%frexpStruct_exp_out = OpVariable %_ptr_Output_float Output
+%frexpStruct_exp_in = OpVariable %_ptr_Input__arr_float_uint_32 Input
+       %main = OpFunction %void None %3
+          %5 = OpLabel
+         %21 = OpAccessChain %_ptr_Input_float %gl_TessCoord %uint_0
+         %22 = OpLoad %float %21
+         %29 = OpAccessChain %_ptr_Input_v4float %gl_in %int_0 %int_0
+         %30 = OpLoad %v4float %29
+         %31 = OpVectorTimesScalar %v4float %30 %22
+         %32 = OpAccessChain %_ptr_Input_float %gl_TessCoord %uint_1
+         %33 = OpLoad %float %32
+         %35 = OpAccessChain %_ptr_Input_v4float %gl_in %int_1 %int_0
+         %36 = OpLoad %v4float %35
+         %37 = OpVectorTimesScalar %v4float %36 %33
+         %38 = OpFAdd %v4float %31 %37
+         %40 = OpAccessChain %_ptr_Input_float %gl_TessCoord %uint_2
+         %41 = OpLoad %float %40
+         %43 = OpAccessChain %_ptr_Input_v4float %gl_in %int_2 %int_0
+         %44 = OpLoad %v4float %43
+         %45 = OpVectorTimesScalar %v4float %44 %41
+         %46 = OpFAdd %v4float %38 %45
+         %48 = OpAccessChain %_ptr_Output_v4float %_ %int_0
+               OpStore %48 %46
+         %54 = OpAccessChain %_ptr_Input_float %frexp_x_in %int_0
+         %55 = OpLoad %float %54
+               OpStore %frexp_x_out %55
+         %58 = OpAccessChain %_ptr_Input_float %frexp_exp_in %int_0
+         %59 = OpLoad %float %58
+               OpStore %frexp_exp_out %59
+         %62 = OpAccessChain %_ptr_Input_float %frexpStruct_x_in %int_0
+         %63 = OpLoad %float %62
+               OpStore %frexpStruct_x_out %63
+         %66 = OpAccessChain %_ptr_Input_float %frexpStruct_exp_in %int_0
+         %67 = OpLoad %float %66
+               OpStore %frexpStruct_exp_out %67
+               OpReturn
+               OpFunctionEnd
+END
+
+# SHADER fragment frag_shader GLSL
+# #version 430
+# precision highp float;
+#
+# layout (location = 0) flat in float frexp_x_in;
+# layout (location = 1) flat in float frexp_exp_in;
+# layout (location = 2) flat in float frexpStruct_x_in;
+# layout (location = 3) flat in float frexpStruct_exp_in;
+#
+# layout (location = 0) out vec4 frexp_x_out;
+# layout (location = 1) out vec4 frexp_exp_out;
+# layout (location = 2) out vec4 frexpStruct_x_out;
+# layout (location = 3) out vec4 frexpStruct_exp_out;
+#
+# const vec4 clear_value = vec4(0.0, 0.0, 0.0, 1.0);
+#
+# void main ()
+# {
+#     frexp_x_out = clear_value;
+#     frexp_exp_out = clear_value;
+#     frexpStruct_x_out = clear_value;
+#     frexpStruct_exp_out = clear_value;
+#     frexp_x_out.r = frexp_x_in;
+#     frexp_exp_out.r = frexp_exp_in;
+#     frexpStruct_x_out.r = frexpStruct_x_in;
+#     frexpStruct_exp_out.r = frexpStruct_exp_in;
+# }
+# END
+
+SHADER fragment frag_shader SPIRV-ASM
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %main "main" %frexp_x_out %frexp_exp_out %frexpStruct_x_out %frexpStruct_exp_out %frexp_x_in %frexp_exp_in %frexpStruct_x_in %frexpStruct_exp_in
+               OpExecutionMode %main OriginUpperLeft
+               OpDecorate %frexp_x_out Location 0
+               OpDecorate %frexp_exp_out Location 1
+               OpDecorate %frexpStruct_x_out Location 2
+               OpDecorate %frexpStruct_exp_out Location 3
+               OpDecorate %frexp_x_in Flat
+               OpDecorate %frexp_x_in Location 0
+               OpDecorate %frexp_exp_in Flat
+               OpDecorate %frexp_exp_in Location 1
+               OpDecorate %frexpStruct_x_in Flat
+               OpDecorate %frexpStruct_x_in Location 2
+               OpDecorate %frexpStruct_exp_in Flat
+               OpDecorate %frexpStruct_exp_in Location 3
+       %void = OpTypeVoid
+          %3 = OpTypeFunction %void
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+%frexp_x_out = OpVariable %_ptr_Output_v4float Output
+    %float_0 = OpConstant %float 0
+    %float_1 = OpConstant %float 1
+         %12 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_1
+%frexp_exp_out = OpVariable %_ptr_Output_v4float Output
+%frexpStruct_x_out = OpVariable %_ptr_Output_v4float Output
+%frexpStruct_exp_out = OpVariable %_ptr_Output_v4float Output
+%_ptr_Input_float = OpTypePointer Input %float
+ %frexp_x_in = OpVariable %_ptr_Input_float Input
+       %uint = OpTypeInt 32 0
+     %uint_0 = OpConstant %uint 0
+%_ptr_Output_float = OpTypePointer Output %float
+%frexp_exp_in = OpVariable %_ptr_Input_float Input
+%frexpStruct_x_in = OpVariable %_ptr_Input_float Input
+%frexpStruct_exp_in = OpVariable %_ptr_Input_float Input
+       %main = OpFunction %void None %3
+          %5 = OpLabel
+               OpStore %frexp_x_out %12
+               OpStore %frexp_exp_out %12
+               OpStore %frexpStruct_x_out %12
+               OpStore %frexpStruct_exp_out %12
+         %18 = OpLoad %float %frexp_x_in
+         %22 = OpAccessChain %_ptr_Output_float %frexp_x_out %uint_0
+               OpStore %22 %18
+         %24 = OpLoad %float %frexp_exp_in
+         %25 = OpAccessChain %_ptr_Output_float %frexp_exp_out %uint_0
+               OpStore %25 %24
+         %27 = OpLoad %float %frexpStruct_x_in
+         %28 = OpAccessChain %_ptr_Output_float %frexpStruct_x_out %uint_0
+               OpStore %28 %27
+         %30 = OpLoad %float %frexpStruct_exp_in
+         %31 = OpAccessChain %_ptr_Output_float %frexpStruct_exp_out %uint_0
+               OpStore %31 %30
+               OpReturn
+               OpFunctionEnd
+END
+
+BUFFER buf_in DATA_TYPE uint32 SIZE 1296 FILE TEXT input.txt
+BUFFER vertices DATA_TYPE vec2<float> SIZE 7776 FILE TEXT grid_vertices.txt
+
+BUFFER frexp_x FORMAT R32G32B32A32_SFLOAT
+BUFFER frexp_exp FORMAT R32G32B32A32_SFLOAT
+BUFFER frexpStruct_x FORMAT R32G32B32A32_SFLOAT
+BUFFER frexpStruct_exp FORMAT R32G32B32A32_SFLOAT
+
+PIPELINE graphics test_pipeline
+    FRAMEBUFFER_SIZE 144 144
+
+    ATTACH vert_shader
+    ATTACH tesc_shader
+    ATTACH tese_shader
+    ATTACH frag_shader
+
+    VERTEX_DATA vertices LOCATION 0
+
+    BIND BUFFER buf_in AS storage DESCRIPTOR_SET 0 BINDING 0
+    BIND BUFFER frexp_x AS color LOCATION 0
+    BIND BUFFER frexp_exp AS color LOCATION 1
+    BIND BUFFER frexpStruct_x AS color LOCATION 2
+    BIND BUFFER frexpStruct_exp AS color LOCATION 3
+END
+
+#RUN test_pipeline DRAW_GRID POS 0 0 SIZE 144 144 CELLS 144 144
+RUN test_pipeline DRAW_ARRAY AS PATCH_LIST START_IDX 0 COUNT 7776
+
+EXPECT frexp_x EQ_BUFFER frexpStruct_x
+EXPECT frexp_exp EQ_BUFFER frexpStruct_exp
diff --git a/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/frexpstruct_1_tese.amber b/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/frexpstruct_1_tese.amber
new file mode 100644
index 0000000..166a0dc
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/frexpstruct_1_tese.amber
@@ -0,0 +1,536 @@
+#!amber
+
+# Copyright 2021 Google LLC
+#
+# 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.
+
+# A tessellation evaluation shader test for FrexpStruct.
+
+DEVICE_FEATURE tessellationShader
+
+# SHADER vertex vert_shader GLSL
+# #version 430
+# precision highp float;
+#
+# const uint ndp = 1296;
+# const uint ndpSqrt = uint(sqrt(ndp));
+# const float halfGridElementSize = 1.0 / float(ndpSqrt);
+#
+# layout (location = 0) in vec2 position;
+# layout (location = 0) flat out uint ndx_out;
+#
+# void main ()
+# {
+#     uint xcoord = uint(ndpSqrt * ((position.x + halfGridElementSize + 1) / 2) - 1);
+#     uint ycoord = uint(ndpSqrt * ((position.y + halfGridElementSize + 1) / 2) - 1);
+#     ndx_out = xcoord + ycoord * ndpSqrt;
+#
+#     gl_Position = vec4(position, 0, 1);
+#
+#     return;
+# }
+# END
+
+SHADER vertex vert_shader SPIRV-ASM
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %main "main" %position %ndx_out %_
+               OpDecorate %position Location 0
+               OpDecorate %ndx_out Flat
+               OpDecorate %ndx_out Location 0
+               OpMemberDecorate %gl_PerVertex 0 BuiltIn Position
+               OpMemberDecorate %gl_PerVertex 1 BuiltIn PointSize
+               OpMemberDecorate %gl_PerVertex 2 BuiltIn ClipDistance
+               OpDecorate %gl_PerVertex Block
+       %void = OpTypeVoid
+          %3 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+      %float = OpTypeFloat 32
+    %v2float = OpTypeVector %float 2
+%_ptr_Input_v2float = OpTypePointer Input %v2float
+   %position = OpVariable %_ptr_Input_v2float Input
+     %uint_0 = OpConstant %uint 0
+%_ptr_Input_float = OpTypePointer Input %float
+    %float_1 = OpConstant %float 1
+     %uint_1 = OpConstant %uint 1
+%_ptr_Output_uint = OpTypePointer Output %uint
+    %ndx_out = OpVariable %_ptr_Output_uint Output
+    %uint_36 = OpConstant %uint 36
+    %v4float = OpTypeVector %float 4
+%_arr_float_uint_1 = OpTypeArray %float %uint_1
+%gl_PerVertex = OpTypeStruct %v4float %float %_arr_float_uint_1
+%_ptr_Output_gl_PerVertex = OpTypePointer Output %gl_PerVertex
+          %_ = OpVariable %_ptr_Output_gl_PerVertex Output
+        %int = OpTypeInt 32 1
+      %int_0 = OpConstant %int 0
+    %float_0 = OpConstant %float 0
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+%float_1_02777779 = OpConstant %float 1.02777779
+   %float_18 = OpConstant %float 18
+       %main = OpFunction %void None %3
+          %5 = OpLabel
+         %16 = OpAccessChain %_ptr_Input_float %position %uint_0
+         %17 = OpLoad %float %16
+         %21 = OpFAdd %float %17 %float_1_02777779
+         %24 = OpFMul %float %21 %float_18
+         %25 = OpFSub %float %24 %float_1
+         %26 = OpConvertFToU %uint %25
+         %29 = OpAccessChain %_ptr_Input_float %position %uint_1
+         %30 = OpLoad %float %29
+         %32 = OpFAdd %float %30 %float_1_02777779
+         %34 = OpFMul %float %32 %float_18
+         %35 = OpFSub %float %34 %float_1
+         %36 = OpConvertFToU %uint %35
+         %42 = OpIMul %uint %36 %uint_36
+         %43 = OpIAdd %uint %26 %42
+               OpStore %ndx_out %43
+         %51 = OpLoad %v2float %position
+         %53 = OpCompositeExtract %float %51 0
+         %54 = OpCompositeExtract %float %51 1
+         %55 = OpCompositeConstruct %v4float %53 %54 %float_0 %float_1
+         %57 = OpAccessChain %_ptr_Output_v4float %_ %int_0
+               OpStore %57 %55
+               OpReturn
+               OpFunctionEnd
+END
+
+# SHADER tessellation_control tesc_shader GLSL
+# #version 430
+# precision highp float;
+#
+# layout (vertices = 3) out;
+#
+# layout (location = 0) flat in uint ndx_in[];
+# layout (location = 0) flat out uint ndx_out[];
+#
+# void main ()
+# {
+#     gl_TessLevelInner[0]    = 1.0;
+#     gl_TessLevelInner[1]    = 1.0;
+#     gl_TessLevelOuter[0]    = 1.0;
+#     gl_TessLevelOuter[1]    = 1.0;
+#     gl_TessLevelOuter[2]    = 1.0;
+#     gl_TessLevelOuter[3]    = 1.0;
+#
+#     gl_out[gl_InvocationID].gl_Position = gl_in[gl_InvocationID].gl_Position;
+#     ndx_out[gl_InvocationID] = ndx_in[gl_InvocationID];
+# }
+# END
+
+SHADER tessellation_control tesc_shader SPIRV-ASM
+               OpCapability Tessellation
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint TessellationControl %main "main" %gl_TessLevelInner %gl_TessLevelOuter %gl_out %gl_InvocationID %gl_in %ndx_out %ndx_in
+               OpExecutionMode %main OutputVertices 3
+               OpDecorate %gl_TessLevelInner Patch
+               OpDecorate %gl_TessLevelInner BuiltIn TessLevelInner
+               OpDecorate %gl_TessLevelOuter Patch
+               OpDecorate %gl_TessLevelOuter BuiltIn TessLevelOuter
+               OpMemberDecorate %gl_PerVertex 0 BuiltIn Position
+               OpMemberDecorate %gl_PerVertex 1 BuiltIn PointSize
+               OpMemberDecorate %gl_PerVertex 2 BuiltIn ClipDistance
+               OpDecorate %gl_PerVertex Block
+               OpDecorate %gl_InvocationID BuiltIn InvocationId
+               OpMemberDecorate %gl_PerVertex_0 0 BuiltIn Position
+               OpMemberDecorate %gl_PerVertex_0 1 BuiltIn PointSize
+               OpMemberDecorate %gl_PerVertex_0 2 BuiltIn ClipDistance
+               OpDecorate %gl_PerVertex_0 Block
+               OpDecorate %ndx_out Flat
+               OpDecorate %ndx_out Location 0
+               OpDecorate %ndx_in Flat
+               OpDecorate %ndx_in Location 0
+       %void = OpTypeVoid
+          %3 = OpTypeFunction %void
+      %float = OpTypeFloat 32
+       %uint = OpTypeInt 32 0
+     %uint_2 = OpConstant %uint 2
+%_arr_float_uint_2 = OpTypeArray %float %uint_2
+%_ptr_Output__arr_float_uint_2 = OpTypePointer Output %_arr_float_uint_2
+%gl_TessLevelInner = OpVariable %_ptr_Output__arr_float_uint_2 Output
+        %int = OpTypeInt 32 1
+      %int_0 = OpConstant %int 0
+    %float_1 = OpConstant %float 1
+%_ptr_Output_float = OpTypePointer Output %float
+      %int_1 = OpConstant %int 1
+     %uint_4 = OpConstant %uint 4
+%_arr_float_uint_4 = OpTypeArray %float %uint_4
+%_ptr_Output__arr_float_uint_4 = OpTypePointer Output %_arr_float_uint_4
+%gl_TessLevelOuter = OpVariable %_ptr_Output__arr_float_uint_4 Output
+      %int_2 = OpConstant %int 2
+      %int_3 = OpConstant %int 3
+    %v4float = OpTypeVector %float 4
+     %uint_1 = OpConstant %uint 1
+%_arr_float_uint_1 = OpTypeArray %float %uint_1
+%gl_PerVertex = OpTypeStruct %v4float %float %_arr_float_uint_1
+     %uint_3 = OpConstant %uint 3
+%_arr_gl_PerVertex_uint_3 = OpTypeArray %gl_PerVertex %uint_3
+%_ptr_Output__arr_gl_PerVertex_uint_3 = OpTypePointer Output %_arr_gl_PerVertex_uint_3
+     %gl_out = OpVariable %_ptr_Output__arr_gl_PerVertex_uint_3 Output
+%_ptr_Input_int = OpTypePointer Input %int
+%gl_InvocationID = OpVariable %_ptr_Input_int Input
+%gl_PerVertex_0 = OpTypeStruct %v4float %float %_arr_float_uint_1
+    %uint_32 = OpConstant %uint 32
+%_arr_gl_PerVertex_0_uint_32 = OpTypeArray %gl_PerVertex_0 %uint_32
+%_ptr_Input__arr_gl_PerVertex_0_uint_32 = OpTypePointer Input %_arr_gl_PerVertex_0_uint_32
+      %gl_in = OpVariable %_ptr_Input__arr_gl_PerVertex_0_uint_32 Input
+%_ptr_Input_v4float = OpTypePointer Input %v4float
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+%_arr_uint_uint_3 = OpTypeArray %uint %uint_3
+%_ptr_Output__arr_uint_uint_3 = OpTypePointer Output %_arr_uint_uint_3
+    %ndx_out = OpVariable %_ptr_Output__arr_uint_uint_3 Output
+%_arr_uint_uint_32 = OpTypeArray %uint %uint_32
+%_ptr_Input__arr_uint_uint_32 = OpTypePointer Input %_arr_uint_uint_32
+     %ndx_in = OpVariable %_ptr_Input__arr_uint_uint_32 Input
+%_ptr_Input_uint = OpTypePointer Input %uint
+%_ptr_Output_uint = OpTypePointer Output %uint
+       %main = OpFunction %void None %3
+          %5 = OpLabel
+         %16 = OpAccessChain %_ptr_Output_float %gl_TessLevelInner %int_0
+               OpStore %16 %float_1
+         %18 = OpAccessChain %_ptr_Output_float %gl_TessLevelInner %int_1
+               OpStore %18 %float_1
+         %23 = OpAccessChain %_ptr_Output_float %gl_TessLevelOuter %int_0
+               OpStore %23 %float_1
+         %24 = OpAccessChain %_ptr_Output_float %gl_TessLevelOuter %int_1
+               OpStore %24 %float_1
+         %26 = OpAccessChain %_ptr_Output_float %gl_TessLevelOuter %int_2
+               OpStore %26 %float_1
+         %28 = OpAccessChain %_ptr_Output_float %gl_TessLevelOuter %int_3
+               OpStore %28 %float_1
+         %39 = OpLoad %int %gl_InvocationID
+         %47 = OpAccessChain %_ptr_Input_v4float %gl_in %39 %int_0
+         %48 = OpLoad %v4float %47
+         %50 = OpAccessChain %_ptr_Output_v4float %gl_out %39 %int_0
+               OpStore %50 %48
+         %60 = OpAccessChain %_ptr_Input_uint %ndx_in %39
+         %61 = OpLoad %uint %60
+         %63 = OpAccessChain %_ptr_Output_uint %ndx_out %39
+               OpStore %63 %61
+               OpReturn
+               OpFunctionEnd
+END
+
+# SHADER tessellation_evaluation tese_shader GLSL
+# #version 430
+# precision highp float;
+#
+# const uint ndp = 1296;
+#
+# layout (triangles) in;
+#
+# layout (location = 0) flat in uint ndx_in[];
+# layout (location = 0) flat out float frexp_x_out;
+# layout (location = 1) flat out float frexp_exp_out;
+# layout (location = 2) flat out float frexpStruct_x_out;
+# layout (location = 3) flat out float frexpStruct_exp_out;
+#
+# layout(set = 0, binding = 0) readonly buffer block0 {
+#     uint in_values[ndp];
+# };
+#
+# struct frexpStructType
+# {
+#     float x;
+#     int exp;
+# };
+#
+# // Replaced with native function in SPIR-V.
+# frexpStructType frexpStruct (float orig)
+# {
+#     float x;
+#     int exp;
+#     x = frexp(orig, exp);
+#     frexpStructType res = { x, exp };
+#     return res;
+# }
+#
+# void main ()
+# {
+#     gl_Position = gl_TessCoord.x * gl_in[0].gl_Position +
+#                   gl_TessCoord.y * gl_in[1].gl_Position +
+#                   gl_TessCoord.z * gl_in[2].gl_Position;
+#
+#     uint in_uint = in_values[ndx_in[0]];
+#     float in_float = uintBitsToFloat(in_uint);
+#     float x;
+#     int exp;
+#     frexpStructType res;
+#
+#     x = frexp(in_float, exp);
+#     res = frexpStruct(in_float);
+#
+#     frexp_x_out = x;
+#     frexp_exp_out = intBitsToFloat(exp);
+#     frexpStruct_x_out = res.x;
+#     frexpStruct_exp_out = intBitsToFloat(res.exp);
+# }
+# END
+
+SHADER tessellation_evaluation tese_shader SPIRV-ASM
+               OpCapability Tessellation
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint TessellationEvaluation %main "main" %_ %gl_TessCoord %gl_in %ndx_in %frexp_x_out %frexp_exp_out %frexpStruct_x_out %frexpStruct_exp_out
+               OpExecutionMode %main Triangles
+               OpExecutionMode %main SpacingEqual
+               OpExecutionMode %main VertexOrderCcw
+               OpMemberDecorate %gl_PerVertex 0 BuiltIn Position
+               OpMemberDecorate %gl_PerVertex 1 BuiltIn PointSize
+               OpMemberDecorate %gl_PerVertex 2 BuiltIn ClipDistance
+               OpDecorate %gl_PerVertex Block
+               OpDecorate %gl_TessCoord BuiltIn TessCoord
+               OpMemberDecorate %gl_PerVertex_0 0 BuiltIn Position
+               OpMemberDecorate %gl_PerVertex_0 1 BuiltIn PointSize
+               OpMemberDecorate %gl_PerVertex_0 2 BuiltIn ClipDistance
+               OpDecorate %gl_PerVertex_0 Block
+               OpDecorate %_arr_uint_uint_1296 ArrayStride 4
+               OpMemberDecorate %block0 0 NonWritable
+               OpMemberDecorate %block0 0 Offset 0
+               OpDecorate %block0 BufferBlock
+               OpDecorate %__0 DescriptorSet 0
+               OpDecorate %__0 Binding 0
+               OpDecorate %ndx_in Flat
+               OpDecorate %ndx_in Location 0
+               OpDecorate %frexp_x_out Flat
+               OpDecorate %frexp_x_out Location 0
+               OpDecorate %frexp_exp_out Flat
+               OpDecorate %frexp_exp_out Location 1
+               OpDecorate %frexpStruct_x_out Flat
+               OpDecorate %frexpStruct_x_out Location 2
+               OpDecorate %frexpStruct_exp_out Flat
+               OpDecorate %frexpStruct_exp_out Location 3
+       %void = OpTypeVoid
+          %3 = OpTypeFunction %void
+      %float = OpTypeFloat 32
+%_ptr_Function_float = OpTypePointer Function %float
+        %int = OpTypeInt 32 1
+%frexpStructType = OpTypeStruct %float %int
+         %10 = OpTypeFunction %frexpStructType %_ptr_Function_float
+%_ptr_Function_int = OpTypePointer Function %int
+%_ptr_Function_frexpStructType = OpTypePointer Function %frexpStructType
+    %v4float = OpTypeVector %float 4
+       %uint = OpTypeInt 32 0
+     %uint_1 = OpConstant %uint 1
+%_arr_float_uint_1 = OpTypeArray %float %uint_1
+%gl_PerVertex = OpTypeStruct %v4float %float %_arr_float_uint_1
+%_ptr_Output_gl_PerVertex = OpTypePointer Output %gl_PerVertex
+          %_ = OpVariable %_ptr_Output_gl_PerVertex Output
+      %int_0 = OpConstant %int 0
+    %v3float = OpTypeVector %float 3
+%_ptr_Input_v3float = OpTypePointer Input %v3float
+%gl_TessCoord = OpVariable %_ptr_Input_v3float Input
+     %uint_0 = OpConstant %uint 0
+%_ptr_Input_float = OpTypePointer Input %float
+%gl_PerVertex_0 = OpTypeStruct %v4float %float %_arr_float_uint_1
+    %uint_32 = OpConstant %uint 32
+%_arr_gl_PerVertex_0_uint_32 = OpTypeArray %gl_PerVertex_0 %uint_32
+%_ptr_Input__arr_gl_PerVertex_0_uint_32 = OpTypePointer Input %_arr_gl_PerVertex_0_uint_32
+      %gl_in = OpVariable %_ptr_Input__arr_gl_PerVertex_0_uint_32 Input
+%_ptr_Input_v4float = OpTypePointer Input %v4float
+      %int_1 = OpConstant %int 1
+     %uint_2 = OpConstant %uint 2
+      %int_2 = OpConstant %int 2
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+%_ptr_Function_uint = OpTypePointer Function %uint
+  %uint_1296 = OpConstant %uint 1296
+%_arr_uint_uint_1296 = OpTypeArray %uint %uint_1296
+     %block0 = OpTypeStruct %_arr_uint_uint_1296
+%_ptr_Uniform_block0 = OpTypePointer Uniform %block0
+        %__0 = OpVariable %_ptr_Uniform_block0 Uniform
+%_arr_uint_uint_32 = OpTypeArray %uint %uint_32
+%_ptr_Input__arr_uint_uint_32 = OpTypePointer Input %_arr_uint_uint_32
+     %ndx_in = OpVariable %_ptr_Input__arr_uint_uint_32 Input
+%_ptr_Input_uint = OpTypePointer Input %uint
+%_ptr_Uniform_uint = OpTypePointer Uniform %uint
+%_ptr_Output_float = OpTypePointer Output %float
+%frexp_x_out = OpVariable %_ptr_Output_float Output
+%frexp_exp_out = OpVariable %_ptr_Output_float Output
+%frexpStruct_x_out = OpVariable %_ptr_Output_float Output
+%frexpStruct_exp_out = OpVariable %_ptr_Output_float Output
+       %main = OpFunction %void None %3
+          %5 = OpLabel
+    %in_uint = OpVariable %_ptr_Function_uint Function
+   %in_float = OpVariable %_ptr_Function_float Function
+        %x_0 = OpVariable %_ptr_Function_float Function
+      %exp_0 = OpVariable %_ptr_Function_int Function
+      %res_0 = OpVariable %_ptr_Function_frexpStructType Function
+         %40 = OpAccessChain %_ptr_Input_float %gl_TessCoord %uint_0
+         %41 = OpLoad %float %40
+         %48 = OpAccessChain %_ptr_Input_v4float %gl_in %int_0 %int_0
+         %49 = OpLoad %v4float %48
+         %50 = OpVectorTimesScalar %v4float %49 %41
+         %51 = OpAccessChain %_ptr_Input_float %gl_TessCoord %uint_1
+         %52 = OpLoad %float %51
+         %54 = OpAccessChain %_ptr_Input_v4float %gl_in %int_1 %int_0
+         %55 = OpLoad %v4float %54
+         %56 = OpVectorTimesScalar %v4float %55 %52
+         %57 = OpFAdd %v4float %50 %56
+         %59 = OpAccessChain %_ptr_Input_float %gl_TessCoord %uint_2
+         %60 = OpLoad %float %59
+         %62 = OpAccessChain %_ptr_Input_v4float %gl_in %int_2 %int_0
+         %63 = OpLoad %v4float %62
+         %64 = OpVectorTimesScalar %v4float %63 %60
+         %65 = OpFAdd %v4float %57 %64
+         %67 = OpAccessChain %_ptr_Output_v4float %_ %int_0
+               OpStore %67 %65
+         %79 = OpAccessChain %_ptr_Input_uint %ndx_in %int_0
+         %80 = OpLoad %uint %79
+         %82 = OpAccessChain %_ptr_Uniform_uint %__0 %int_0 %80
+         %83 = OpLoad %uint %82
+               OpStore %in_uint %83
+         %85 = OpLoad %uint %in_uint
+         %86 = OpBitcast %float %85
+               OpStore %in_float %86
+         %88 = OpLoad %float %in_float
+         %90 = OpExtInst %float %1 Frexp %88 %exp_0
+               OpStore %x_0 %90
+         %93 = OpLoad %float %in_float
+         %94 = OpExtInst %frexpStructType %1 FrexpStruct %93
+               OpStore %res_0 %94
+         %97 = OpLoad %float %x_0
+               OpStore %frexp_x_out %97
+         %99 = OpLoad %int %exp_0
+        %100 = OpBitcast %float %99
+               OpStore %frexp_exp_out %100
+        %102 = OpAccessChain %_ptr_Function_float %res_0 %int_0
+        %103 = OpLoad %float %102
+               OpStore %frexpStruct_x_out %103
+        %105 = OpAccessChain %_ptr_Function_int %res_0 %int_1
+        %106 = OpLoad %int %105
+        %107 = OpBitcast %float %106
+               OpStore %frexpStruct_exp_out %107
+               OpReturn
+               OpFunctionEnd
+END
+
+# SHADER fragment frag_shader GLSL
+# #version 430
+# precision highp float;
+#
+# layout (location = 0) flat in float frexp_x_in;
+# layout (location = 1) flat in float frexp_exp_in;
+# layout (location = 2) flat in float frexpStruct_x_in;
+# layout (location = 3) flat in float frexpStruct_exp_in;
+#
+# layout (location = 0) out vec4 frexp_x_out;
+# layout (location = 1) out vec4 frexp_exp_out;
+# layout (location = 2) out vec4 frexpStruct_x_out;
+# layout (location = 3) out vec4 frexpStruct_exp_out;
+#
+# const vec4 clear_value = vec4(0.0, 0.0, 0.0, 1.0);
+#
+# void main ()
+# {
+#     frexp_x_out = clear_value;
+#     frexp_exp_out = clear_value;
+#     frexpStruct_x_out = clear_value;
+#     frexpStruct_exp_out = clear_value;
+#     frexp_x_out.r = frexp_x_in;
+#     frexp_exp_out.r = frexp_exp_in;
+#     frexpStruct_x_out.r = frexpStruct_x_in;
+#     frexpStruct_exp_out.r = frexpStruct_exp_in;
+# }
+# END
+
+SHADER fragment frag_shader SPIRV-ASM
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %main "main" %frexp_x_out %frexp_exp_out %frexpStruct_x_out %frexpStruct_exp_out %frexp_x_in %frexp_exp_in %frexpStruct_x_in %frexpStruct_exp_in
+               OpExecutionMode %main OriginUpperLeft
+               OpDecorate %frexp_x_out Location 0
+               OpDecorate %frexp_exp_out Location 1
+               OpDecorate %frexpStruct_x_out Location 2
+               OpDecorate %frexpStruct_exp_out Location 3
+               OpDecorate %frexp_x_in Flat
+               OpDecorate %frexp_x_in Location 0
+               OpDecorate %frexp_exp_in Flat
+               OpDecorate %frexp_exp_in Location 1
+               OpDecorate %frexpStruct_x_in Flat
+               OpDecorate %frexpStruct_x_in Location 2
+               OpDecorate %frexpStruct_exp_in Flat
+               OpDecorate %frexpStruct_exp_in Location 3
+       %void = OpTypeVoid
+          %3 = OpTypeFunction %void
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+%frexp_x_out = OpVariable %_ptr_Output_v4float Output
+    %float_0 = OpConstant %float 0
+    %float_1 = OpConstant %float 1
+         %12 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_1
+%frexp_exp_out = OpVariable %_ptr_Output_v4float Output
+%frexpStruct_x_out = OpVariable %_ptr_Output_v4float Output
+%frexpStruct_exp_out = OpVariable %_ptr_Output_v4float Output
+%_ptr_Input_float = OpTypePointer Input %float
+ %frexp_x_in = OpVariable %_ptr_Input_float Input
+       %uint = OpTypeInt 32 0
+     %uint_0 = OpConstant %uint 0
+%_ptr_Output_float = OpTypePointer Output %float
+%frexp_exp_in = OpVariable %_ptr_Input_float Input
+%frexpStruct_x_in = OpVariable %_ptr_Input_float Input
+%frexpStruct_exp_in = OpVariable %_ptr_Input_float Input
+       %main = OpFunction %void None %3
+          %5 = OpLabel
+               OpStore %frexp_x_out %12
+               OpStore %frexp_exp_out %12
+               OpStore %frexpStruct_x_out %12
+               OpStore %frexpStruct_exp_out %12
+         %18 = OpLoad %float %frexp_x_in
+         %22 = OpAccessChain %_ptr_Output_float %frexp_x_out %uint_0
+               OpStore %22 %18
+         %24 = OpLoad %float %frexp_exp_in
+         %25 = OpAccessChain %_ptr_Output_float %frexp_exp_out %uint_0
+               OpStore %25 %24
+         %27 = OpLoad %float %frexpStruct_x_in
+         %28 = OpAccessChain %_ptr_Output_float %frexpStruct_x_out %uint_0
+               OpStore %28 %27
+         %30 = OpLoad %float %frexpStruct_exp_in
+         %31 = OpAccessChain %_ptr_Output_float %frexpStruct_exp_out %uint_0
+               OpStore %31 %30
+               OpReturn
+               OpFunctionEnd
+END
+
+BUFFER buf_in DATA_TYPE uint32 SIZE 1296 FILE TEXT input.txt
+BUFFER vertices DATA_TYPE vec2<float> SIZE 7776 FILE TEXT grid_vertices.txt
+
+BUFFER frexp_x FORMAT R32G32B32A32_SFLOAT
+BUFFER frexp_exp FORMAT R32G32B32A32_SFLOAT
+BUFFER frexpStruct_x FORMAT R32G32B32A32_SFLOAT
+BUFFER frexpStruct_exp FORMAT R32G32B32A32_SFLOAT
+
+PIPELINE graphics test_pipeline
+    FRAMEBUFFER_SIZE 144 144
+
+    ATTACH vert_shader
+    ATTACH tesc_shader
+    ATTACH tese_shader
+    ATTACH frag_shader
+
+    VERTEX_DATA vertices LOCATION 0
+
+    BIND BUFFER buf_in AS storage DESCRIPTOR_SET 0 BINDING 0
+    BIND BUFFER frexp_x AS color LOCATION 0
+    BIND BUFFER frexp_exp AS color LOCATION 1
+    BIND BUFFER frexpStruct_x AS color LOCATION 2
+    BIND BUFFER frexpStruct_exp AS color LOCATION 3
+END
+
+#RUN test_pipeline DRAW_GRID POS 0 0 SIZE 144 144 CELLS 144 144
+RUN test_pipeline DRAW_ARRAY AS PATCH_LIST START_IDX 0 COUNT 7776
+
+EXPECT frexp_x EQ_BUFFER frexpStruct_x
+EXPECT frexp_exp EQ_BUFFER frexpStruct_exp
diff --git a/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/frexpstruct_1_vert.amber b/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/frexpstruct_1_vert.amber
new file mode 100644
index 0000000..4063fcc
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/frexpstruct_1_vert.amber
@@ -0,0 +1,328 @@
+#!amber
+
+# Copyright 2021 Google LLC
+#
+# 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.
+
+# A vertex shader test for FrexpStruct.
+
+# SHADER vertex vert_shader GLSL
+# #version 430
+# precision highp float;
+#
+# const uint ndp = 1296;
+# const uint ndpSqrt = uint(sqrt(ndp));
+# const float halfGridElementSize = 1.0 / float(ndpSqrt);
+#
+# layout (location = 0) in vec2 position;
+# layout (location = 0) flat out float frexp_x_out;
+# layout (location = 1) flat out float frexp_exp_out;
+# layout (location = 2) flat out float frexpStruct_x_out;
+# layout (location = 3) flat out float frexpStruct_exp_out;
+#
+# layout(set = 0, binding = 0) readonly buffer block0 {
+#     uint in_values[ndp];
+# };
+#
+# struct frexpStructType
+# {
+#     float x;
+#     int exp;
+# };
+#
+# // Replaced with native function in SPIR-V.
+# frexpStructType frexpStruct (float orig)
+# {
+#     float x;
+#     int exp;
+#     x = frexp(orig, exp);
+#     frexpStructType res = { x, exp };
+#     return res;
+# }
+#
+# void main ()
+# {
+#     uint xcoord = uint(ndpSqrt * ((position.x + halfGridElementSize + 1) / 2) - 1);
+#     uint ycoord = uint(ndpSqrt * ((position.y + halfGridElementSize + 1) / 2) - 1);
+#     uint ndx = xcoord + ycoord * ndpSqrt;
+#
+#     uint in_uint = in_values[ndx];
+#     float in_float = uintBitsToFloat(in_uint);
+#     float x;
+#     int exp;
+#     frexpStructType res;
+#
+#     x = frexp(in_float, exp);
+#     res = frexpStruct(in_float);
+#
+#     frexp_x_out = x;
+#     frexp_exp_out = intBitsToFloat(exp);
+#     frexpStruct_x_out = res.x;
+#     frexpStruct_exp_out = intBitsToFloat(res.exp);
+#
+#     gl_Position = vec4(position, 0, 1);
+#
+#     return;
+# }
+# END
+
+SHADER vertex vert_shader SPIRV-ASM
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %main "main" %position %frexp_x_out %frexp_exp_out %frexpStruct_x_out %frexpStruct_exp_out %__0
+               OpDecorate %position Location 0
+               OpDecorate %_arr_uint_uint_1296 ArrayStride 4
+               OpMemberDecorate %block0 0 NonWritable
+               OpMemberDecorate %block0 0 Offset 0
+               OpDecorate %block0 BufferBlock
+               OpDecorate %_ DescriptorSet 0
+               OpDecorate %_ Binding 0
+               OpDecorate %frexp_x_out Flat
+               OpDecorate %frexp_x_out Location 0
+               OpDecorate %frexp_exp_out Flat
+               OpDecorate %frexp_exp_out Location 1
+               OpDecorate %frexpStruct_x_out Flat
+               OpDecorate %frexpStruct_x_out Location 2
+               OpDecorate %frexpStruct_exp_out Flat
+               OpDecorate %frexpStruct_exp_out Location 3
+               OpMemberDecorate %gl_PerVertex 0 BuiltIn Position
+               OpMemberDecorate %gl_PerVertex 1 BuiltIn PointSize
+               OpMemberDecorate %gl_PerVertex 2 BuiltIn ClipDistance
+               OpDecorate %gl_PerVertex Block
+       %void = OpTypeVoid
+          %3 = OpTypeFunction %void
+      %float = OpTypeFloat 32
+%_ptr_Function_float = OpTypePointer Function %float
+        %int = OpTypeInt 32 1
+%frexpStructType = OpTypeStruct %float %int
+         %10 = OpTypeFunction %frexpStructType %_ptr_Function_float
+%_ptr_Function_int = OpTypePointer Function %int
+%_ptr_Function_frexpStructType = OpTypePointer Function %frexpStructType
+       %uint = OpTypeInt 32 0
+%_ptr_Function_uint = OpTypePointer Function %uint
+   %float_36 = OpConstant %float 36
+    %v2float = OpTypeVector %float 2
+%_ptr_Input_v2float = OpTypePointer Input %v2float
+   %position = OpVariable %_ptr_Input_v2float Input
+     %uint_0 = OpConstant %uint 0
+%_ptr_Input_float = OpTypePointer Input %float
+%float_0_027777778 = OpConstant %float 0.027777778
+    %float_1 = OpConstant %float 1
+    %float_2 = OpConstant %float 2
+     %uint_1 = OpConstant %uint 1
+    %uint_36 = OpConstant %uint 36
+  %uint_1296 = OpConstant %uint 1296
+%_arr_uint_uint_1296 = OpTypeArray %uint %uint_1296
+     %block0 = OpTypeStruct %_arr_uint_uint_1296
+%_ptr_Uniform_block0 = OpTypePointer Uniform %block0
+          %_ = OpVariable %_ptr_Uniform_block0 Uniform
+      %int_0 = OpConstant %int 0
+%_ptr_Uniform_uint = OpTypePointer Uniform %uint
+%_ptr_Output_float = OpTypePointer Output %float
+%frexp_x_out = OpVariable %_ptr_Output_float Output
+%frexp_exp_out = OpVariable %_ptr_Output_float Output
+%frexpStruct_x_out = OpVariable %_ptr_Output_float Output
+%frexpStruct_exp_out = OpVariable %_ptr_Output_float Output
+      %int_1 = OpConstant %int 1
+    %v4float = OpTypeVector %float 4
+%_arr_float_uint_1 = OpTypeArray %float %uint_1
+%gl_PerVertex = OpTypeStruct %v4float %float %_arr_float_uint_1
+%_ptr_Output_gl_PerVertex = OpTypePointer Output %gl_PerVertex
+        %__0 = OpVariable %_ptr_Output_gl_PerVertex Output
+    %float_0 = OpConstant %float 0
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+       %main = OpFunction %void None %3
+          %5 = OpLabel
+     %xcoord = OpVariable %_ptr_Function_uint Function
+     %ycoord = OpVariable %_ptr_Function_uint Function
+        %ndx = OpVariable %_ptr_Function_uint Function
+    %in_uint = OpVariable %_ptr_Function_uint Function
+   %in_float = OpVariable %_ptr_Function_float Function
+        %x_0 = OpVariable %_ptr_Function_float Function
+      %exp_0 = OpVariable %_ptr_Function_int Function
+      %res_0 = OpVariable %_ptr_Function_frexpStructType Function
+         %36 = OpAccessChain %_ptr_Input_float %position %uint_0
+         %37 = OpLoad %float %36
+         %39 = OpFAdd %float %37 %float_0_027777778
+         %41 = OpFAdd %float %39 %float_1
+         %43 = OpFDiv %float %41 %float_2
+         %44 = OpFMul %float %float_36 %43
+         %45 = OpFSub %float %44 %float_1
+         %46 = OpConvertFToU %uint %45
+               OpStore %xcoord %46
+         %49 = OpAccessChain %_ptr_Input_float %position %uint_1
+         %50 = OpLoad %float %49
+         %51 = OpFAdd %float %50 %float_0_027777778
+         %52 = OpFAdd %float %51 %float_1
+         %53 = OpFDiv %float %52 %float_2
+         %54 = OpFMul %float %float_36 %53
+         %55 = OpFSub %float %54 %float_1
+         %56 = OpConvertFToU %uint %55
+               OpStore %ycoord %56
+         %58 = OpLoad %uint %xcoord
+         %59 = OpLoad %uint %ycoord
+         %61 = OpIMul %uint %59 %uint_36
+         %62 = OpIAdd %uint %58 %61
+               OpStore %ndx %62
+         %70 = OpLoad %uint %ndx
+         %72 = OpAccessChain %_ptr_Uniform_uint %_ %int_0 %70
+         %73 = OpLoad %uint %72
+               OpStore %in_uint %73
+         %75 = OpLoad %uint %in_uint
+         %76 = OpBitcast %float %75
+               OpStore %in_float %76
+         %78 = OpLoad %float %in_float
+         %80 = OpExtInst %float %1 Frexp %78 %exp_0
+               OpStore %x_0 %80
+         %83 = OpLoad %float %in_float
+         %84 = OpExtInst %frexpStructType %1 FrexpStruct %83
+               OpStore %res_0 %84
+         %87 = OpLoad %float %x_0
+               OpStore %frexp_x_out %87
+         %89 = OpLoad %int %exp_0
+         %90 = OpBitcast %float %89
+               OpStore %frexp_exp_out %90
+         %92 = OpAccessChain %_ptr_Function_float %res_0 %int_0
+         %93 = OpLoad %float %92
+               OpStore %frexpStruct_x_out %93
+         %96 = OpAccessChain %_ptr_Function_int %res_0 %int_1
+         %97 = OpLoad %int %96
+         %98 = OpBitcast %float %97
+               OpStore %frexpStruct_exp_out %98
+        %104 = OpLoad %v2float %position
+        %106 = OpCompositeExtract %float %104 0
+        %107 = OpCompositeExtract %float %104 1
+        %108 = OpCompositeConstruct %v4float %106 %107 %float_0 %float_1
+        %110 = OpAccessChain %_ptr_Output_v4float %__0 %int_0
+               OpStore %110 %108
+               OpReturn
+               OpFunctionEnd
+END
+
+# SHADER fragment frag_shader GLSL
+# #version 430
+# precision highp float;
+#
+# layout (location = 0) flat in float frexp_x_in;
+# layout (location = 1) flat in float frexp_exp_in;
+# layout (location = 2) flat in float frexpStruct_x_in;
+# layout (location = 3) flat in float frexpStruct_exp_in;
+#
+# layout (location = 0) out vec4 frexp_x_out;
+# layout (location = 1) out vec4 frexp_exp_out;
+# layout (location = 2) out vec4 frexpStruct_x_out;
+# layout (location = 3) out vec4 frexpStruct_exp_out;
+#
+# const vec4 clear_value = vec4(0.0, 0.0, 0.0, 1.0);
+#
+# void main ()
+# {
+#     frexp_x_out = clear_value;
+#     frexp_exp_out = clear_value;
+#     frexpStruct_x_out = clear_value;
+#     frexpStruct_exp_out = clear_value;
+#     frexp_x_out.r = frexp_x_in;
+#     frexp_exp_out.r = frexp_exp_in;
+#     frexpStruct_x_out.r = frexpStruct_x_in;
+#     frexpStruct_exp_out.r = frexpStruct_exp_in;
+# }
+# END
+
+SHADER fragment frag_shader SPIRV-ASM
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %main "main" %frexp_x_out %frexp_exp_out %frexpStruct_x_out %frexpStruct_exp_out %frexp_x_in %frexp_exp_in %frexpStruct_x_in %frexpStruct_exp_in
+               OpExecutionMode %main OriginUpperLeft
+               OpDecorate %frexp_x_out Location 0
+               OpDecorate %frexp_exp_out Location 1
+               OpDecorate %frexpStruct_x_out Location 2
+               OpDecorate %frexpStruct_exp_out Location 3
+               OpDecorate %frexp_x_in Flat
+               OpDecorate %frexp_x_in Location 0
+               OpDecorate %frexp_exp_in Flat
+               OpDecorate %frexp_exp_in Location 1
+               OpDecorate %frexpStruct_x_in Flat
+               OpDecorate %frexpStruct_x_in Location 2
+               OpDecorate %frexpStruct_exp_in Flat
+               OpDecorate %frexpStruct_exp_in Location 3
+       %void = OpTypeVoid
+          %3 = OpTypeFunction %void
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+%frexp_x_out = OpVariable %_ptr_Output_v4float Output
+    %float_0 = OpConstant %float 0
+    %float_1 = OpConstant %float 1
+         %12 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_1
+%frexp_exp_out = OpVariable %_ptr_Output_v4float Output
+%frexpStruct_x_out = OpVariable %_ptr_Output_v4float Output
+%frexpStruct_exp_out = OpVariable %_ptr_Output_v4float Output
+%_ptr_Input_float = OpTypePointer Input %float
+ %frexp_x_in = OpVariable %_ptr_Input_float Input
+       %uint = OpTypeInt 32 0
+     %uint_0 = OpConstant %uint 0
+%_ptr_Output_float = OpTypePointer Output %float
+%frexp_exp_in = OpVariable %_ptr_Input_float Input
+%frexpStruct_x_in = OpVariable %_ptr_Input_float Input
+%frexpStruct_exp_in = OpVariable %_ptr_Input_float Input
+       %main = OpFunction %void None %3
+          %5 = OpLabel
+               OpStore %frexp_x_out %12
+               OpStore %frexp_exp_out %12
+               OpStore %frexpStruct_x_out %12
+               OpStore %frexpStruct_exp_out %12
+         %18 = OpLoad %float %frexp_x_in
+         %22 = OpAccessChain %_ptr_Output_float %frexp_x_out %uint_0
+               OpStore %22 %18
+         %24 = OpLoad %float %frexp_exp_in
+         %25 = OpAccessChain %_ptr_Output_float %frexp_exp_out %uint_0
+               OpStore %25 %24
+         %27 = OpLoad %float %frexpStruct_x_in
+         %28 = OpAccessChain %_ptr_Output_float %frexpStruct_x_out %uint_0
+               OpStore %28 %27
+         %30 = OpLoad %float %frexpStruct_exp_in
+         %31 = OpAccessChain %_ptr_Output_float %frexpStruct_exp_out %uint_0
+               OpStore %31 %30
+               OpReturn
+               OpFunctionEnd
+END
+
+BUFFER buf_in DATA_TYPE uint32 SIZE 1296 FILE TEXT input.txt
+BUFFER vertices DATA_TYPE vec2<float> SIZE 7776 FILE TEXT grid_vertices.txt
+
+BUFFER frexp_x FORMAT R32G32B32A32_SFLOAT
+BUFFER frexp_exp FORMAT R32G32B32A32_SFLOAT
+BUFFER frexpStruct_x FORMAT R32G32B32A32_SFLOAT
+BUFFER frexpStruct_exp FORMAT R32G32B32A32_SFLOAT
+
+PIPELINE graphics test_pipeline
+    FRAMEBUFFER_SIZE 144 144
+
+    ATTACH vert_shader
+    ATTACH frag_shader
+
+    VERTEX_DATA vertices LOCATION 0
+
+    BIND BUFFER buf_in AS storage DESCRIPTOR_SET 0 BINDING 0
+    BIND BUFFER frexp_x AS color LOCATION 0
+    BIND BUFFER frexp_exp AS color LOCATION 1
+    BIND BUFFER frexpStruct_x AS color LOCATION 2
+    BIND BUFFER frexpStruct_exp AS color LOCATION 3
+END
+
+RUN test_pipeline DRAW_ARRAY AS TRIANGLE_LIST START_IDX 0 COUNT 7776
+
+EXPECT frexp_x EQ_BUFFER frexpStruct_x
+EXPECT frexp_exp EQ_BUFFER frexpStruct_exp
diff --git a/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/frexpstruct_2_comp.amber b/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/frexpstruct_2_comp.amber
new file mode 100644
index 0000000..a5af11a
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/frexpstruct_2_comp.amber
@@ -0,0 +1,215 @@
+#!amber
+
+# Copyright 2021 Google LLC
+#
+# 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.
+
+# A compute shader test for FrexpStruct.
+
+# SHADER compute comp_shader GLSL
+# #version 430
+# precision highp float;
+#
+# const uint ndp = 1296 / 2;
+# const uint half_ndp = ndp / 2;
+#
+# layout(set = 0, binding = 0) readonly buffer block0 {
+#     uvec2 in_values[half_ndp];
+# };
+#
+# layout(set = 0, binding = 1) buffer block1 {
+#     vec2 frexp_out[ndp];
+# };
+#
+# layout(set = 0, binding = 2) buffer block2 {
+#     vec2 frexpStruct_out[ndp];
+# };
+#
+# struct frexpStructType
+# {
+#     vec2 x;
+#     ivec2 exp;
+# };
+#
+# // Replaced with native function in SPIR-V.
+# frexpStructType frexpStruct (vec2 orig)
+# {
+#     vec2 x;
+#     ivec2 exp;
+#     x = frexp(orig, exp);
+#     frexpStructType res = { x, exp };
+#     return res;
+# }
+#
+# void main ()
+# {
+#     for (uint ndx = 0; ndx < ndp; ndx += 2)
+#     {
+#         uvec2 in_uint = in_values[ndx/2];
+#         vec2 in_float = uintBitsToFloat(in_uint);
+#         vec2 x;
+#         ivec2 exp;
+#
+#         x = frexp(in_float, exp);
+#         frexpStructType res = frexpStruct(in_float);
+#
+#         frexp_out[ndx] = intBitsToFloat(exp);
+#         frexp_out[ndx+1] = x;
+#         frexpStruct_out[ndx] = intBitsToFloat(res.exp);
+#         frexpStruct_out[ndx+1] = res.x;
+#     }
+#
+#     return;
+# }
+# END
+
+SHADER compute comp_shader SPIRV-ASM
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint GLCompute %main "main"
+               OpExecutionMode %main LocalSize 1 1 1
+               OpDecorate %_arr_v2uint_uint_324 ArrayStride 8
+               OpMemberDecorate %block0 0 NonWritable
+               OpMemberDecorate %block0 0 Offset 0
+               OpDecorate %block0 BufferBlock
+               OpDecorate %_ DescriptorSet 0
+               OpDecorate %_ Binding 0
+               OpDecorate %_arr_v2float_uint_648 ArrayStride 8
+               OpMemberDecorate %block1 0 Offset 0
+               OpDecorate %block1 BufferBlock
+               OpDecorate %__0 DescriptorSet 0
+               OpDecorate %__0 Binding 1
+               OpDecorate %_arr_v2float_uint_648_0 ArrayStride 8
+               OpMemberDecorate %block2 0 Offset 0
+               OpDecorate %block2 BufferBlock
+               OpDecorate %__1 DescriptorSet 0
+               OpDecorate %__1 Binding 2
+       %void = OpTypeVoid
+          %3 = OpTypeFunction %void
+      %float = OpTypeFloat 32
+    %v2float = OpTypeVector %float 2
+%_ptr_Function_v2float = OpTypePointer Function %v2float
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+%frexpStructType = OpTypeStruct %v2float %v2int
+         %12 = OpTypeFunction %frexpStructType %_ptr_Function_v2float
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+%_ptr_Function_frexpStructType = OpTypePointer Function %frexpStructType
+       %uint = OpTypeInt 32 0
+%_ptr_Function_uint = OpTypePointer Function %uint
+     %uint_0 = OpConstant %uint 0
+   %uint_648 = OpConstant %uint 648
+       %bool = OpTypeBool
+     %v2uint = OpTypeVector %uint 2
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+   %uint_324 = OpConstant %uint 324
+%_arr_v2uint_uint_324 = OpTypeArray %v2uint %uint_324
+     %block0 = OpTypeStruct %_arr_v2uint_uint_324
+%_ptr_Uniform_block0 = OpTypePointer Uniform %block0
+          %_ = OpVariable %_ptr_Uniform_block0 Uniform
+      %int_0 = OpConstant %int 0
+     %uint_2 = OpConstant %uint 2
+%_ptr_Uniform_v2uint = OpTypePointer Uniform %v2uint
+%_arr_v2float_uint_648 = OpTypeArray %v2float %uint_648
+     %block1 = OpTypeStruct %_arr_v2float_uint_648
+%_ptr_Uniform_block1 = OpTypePointer Uniform %block1
+        %__0 = OpVariable %_ptr_Uniform_block1 Uniform
+%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
+     %uint_1 = OpConstant %uint 1
+%_arr_v2float_uint_648_0 = OpTypeArray %v2float %uint_648
+     %block2 = OpTypeStruct %_arr_v2float_uint_648_0
+%_ptr_Uniform_block2 = OpTypePointer Uniform %block2
+        %__1 = OpVariable %_ptr_Uniform_block2 Uniform
+      %int_1 = OpConstant %int 1
+       %main = OpFunction %void None %3
+          %5 = OpLabel
+        %ndx = OpVariable %_ptr_Function_uint Function
+    %in_uint = OpVariable %_ptr_Function_v2uint Function
+   %in_float = OpVariable %_ptr_Function_v2float Function
+        %x_0 = OpVariable %_ptr_Function_v2float Function
+      %exp_0 = OpVariable %_ptr_Function_v2int Function
+      %res_0 = OpVariable %_ptr_Function_frexpStructType Function
+               OpStore %ndx %uint_0
+               OpBranch %33
+         %33 = OpLabel
+               OpLoopMerge %35 %36 None
+               OpBranch %37
+         %37 = OpLabel
+         %38 = OpLoad %uint %ndx
+         %41 = OpULessThan %bool %38 %uint_648
+               OpBranchConditional %41 %34 %35
+         %34 = OpLabel
+         %51 = OpLoad %uint %ndx
+         %53 = OpUDiv %uint %51 %uint_2
+         %55 = OpAccessChain %_ptr_Uniform_v2uint %_ %int_0 %53
+         %56 = OpLoad %v2uint %55
+               OpStore %in_uint %56
+         %58 = OpLoad %v2uint %in_uint
+         %59 = OpBitcast %v2float %58
+               OpStore %in_float %59
+         %61 = OpLoad %v2float %in_float
+         %63 = OpExtInst %v2float %1 Frexp %61 %exp_0
+               OpStore %x_0 %63
+         %66 = OpLoad %v2float %in_float
+         %67 = OpExtInst %frexpStructType %1 FrexpStruct %66
+               OpStore %res_0 %67
+         %72 = OpLoad %uint %ndx
+         %73 = OpLoad %v2int %exp_0
+         %74 = OpBitcast %v2float %73
+         %76 = OpAccessChain %_ptr_Uniform_v2float %__0 %int_0 %72
+               OpStore %76 %74
+         %77 = OpLoad %uint %ndx
+         %79 = OpIAdd %uint %77 %uint_1
+         %80 = OpLoad %v2float %x_0
+         %81 = OpAccessChain %_ptr_Uniform_v2float %__0 %int_0 %79
+               OpStore %81 %80
+         %86 = OpLoad %uint %ndx
+         %88 = OpAccessChain %_ptr_Function_v2int %res_0 %int_1
+         %89 = OpLoad %v2int %88
+         %90 = OpBitcast %v2float %89
+         %91 = OpAccessChain %_ptr_Uniform_v2float %__1 %int_0 %86
+               OpStore %91 %90
+         %92 = OpLoad %uint %ndx
+         %93 = OpIAdd %uint %92 %uint_1
+         %94 = OpAccessChain %_ptr_Function_v2float %res_0 %int_0
+         %95 = OpLoad %v2float %94
+         %96 = OpAccessChain %_ptr_Uniform_v2float %__1 %int_0 %93
+               OpStore %96 %95
+               OpBranch %36
+         %36 = OpLabel
+         %97 = OpLoad %uint %ndx
+         %98 = OpIAdd %uint %97 %uint_2
+               OpStore %ndx %98
+               OpBranch %33
+         %35 = OpLabel
+               OpReturn
+               OpFunctionEnd
+END
+
+BUFFER buf_in DATA_TYPE uint32 SIZE 1296 FILE TEXT input.txt
+
+BUFFER buf_frexp DATA_TYPE vec2<float> SIZE 648 FILL 0.0
+BUFFER buf_frexpStruct DATA_TYPE vec2<float> SIZE 648 FILL 1.0
+
+PIPELINE compute test_pipeline
+    ATTACH comp_shader
+
+    BIND BUFFER buf_in AS storage DESCRIPTOR_SET 0 BINDING 0
+    BIND BUFFER buf_frexp AS storage DESCRIPTOR_SET 0 BINDING 1
+    BIND BUFFER buf_frexpStruct AS storage DESCRIPTOR_SET 0 BINDING 2
+END
+
+RUN test_pipeline 1 1 1
+
+EXPECT buf_frexp EQ_BUFFER buf_frexpStruct
diff --git a/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/frexpstruct_2_frag.amber b/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/frexpstruct_2_frag.amber
new file mode 100644
index 0000000..d127317
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/frexpstruct_2_frag.amber
@@ -0,0 +1,288 @@
+#!amber
+
+# Copyright 2021 Google LLC
+#
+# 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.
+
+# A fragment shader test for FrexpStruct.
+
+# SHADER vertex vert_shader GLSL
+# #version 430
+# precision highp float;
+#
+# const uint ndp = 1296;
+# const uint ndpSqrt = uint(sqrt(ndp));
+# const float halfGridElementSize = 1.0 / float(ndpSqrt);
+#
+# layout (location = 0) in vec2 position;
+# layout (location = 0) flat out uint ndx_out;
+#
+# void main ()
+# {
+#     uint xcoord = uint(ndpSqrt * ((position.x + halfGridElementSize + 1) / 2) - 1);
+#     uint ycoord = uint(ndpSqrt * ((position.y + halfGridElementSize + 1) / 2) - 1);
+#     ndx_out = xcoord + ycoord * ndpSqrt;
+#
+#     gl_Position = vec4(position, 0, 1);
+#
+#     return;
+# }
+# END
+
+SHADER vertex vert_shader SPIRV-ASM
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %main "main" %position %ndx_out %_
+               OpDecorate %position Location 0
+               OpDecorate %ndx_out Flat
+               OpDecorate %ndx_out Location 0
+               OpMemberDecorate %gl_PerVertex 0 BuiltIn Position
+               OpMemberDecorate %gl_PerVertex 1 BuiltIn PointSize
+               OpMemberDecorate %gl_PerVertex 2 BuiltIn ClipDistance
+               OpDecorate %gl_PerVertex Block
+       %void = OpTypeVoid
+          %3 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+      %float = OpTypeFloat 32
+    %v2float = OpTypeVector %float 2
+%_ptr_Input_v2float = OpTypePointer Input %v2float
+   %position = OpVariable %_ptr_Input_v2float Input
+     %uint_0 = OpConstant %uint 0
+%_ptr_Input_float = OpTypePointer Input %float
+    %float_1 = OpConstant %float 1
+     %uint_1 = OpConstant %uint 1
+%_ptr_Output_uint = OpTypePointer Output %uint
+    %ndx_out = OpVariable %_ptr_Output_uint Output
+    %uint_36 = OpConstant %uint 36
+    %v4float = OpTypeVector %float 4
+%_arr_float_uint_1 = OpTypeArray %float %uint_1
+%gl_PerVertex = OpTypeStruct %v4float %float %_arr_float_uint_1
+%_ptr_Output_gl_PerVertex = OpTypePointer Output %gl_PerVertex
+          %_ = OpVariable %_ptr_Output_gl_PerVertex Output
+        %int = OpTypeInt 32 1
+      %int_0 = OpConstant %int 0
+    %float_0 = OpConstant %float 0
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+%float_1_02777779 = OpConstant %float 1.02777779
+   %float_18 = OpConstant %float 18
+       %main = OpFunction %void None %3
+          %5 = OpLabel
+         %16 = OpAccessChain %_ptr_Input_float %position %uint_0
+         %17 = OpLoad %float %16
+         %21 = OpFAdd %float %17 %float_1_02777779
+         %24 = OpFMul %float %21 %float_18
+         %25 = OpFSub %float %24 %float_1
+         %26 = OpConvertFToU %uint %25
+         %29 = OpAccessChain %_ptr_Input_float %position %uint_1
+         %30 = OpLoad %float %29
+         %32 = OpFAdd %float %30 %float_1_02777779
+         %34 = OpFMul %float %32 %float_18
+         %35 = OpFSub %float %34 %float_1
+         %36 = OpConvertFToU %uint %35
+         %42 = OpIMul %uint %36 %uint_36
+         %43 = OpIAdd %uint %26 %42
+               OpStore %ndx_out %43
+         %51 = OpLoad %v2float %position
+         %53 = OpCompositeExtract %float %51 0
+         %54 = OpCompositeExtract %float %51 1
+         %55 = OpCompositeConstruct %v4float %53 %54 %float_0 %float_1
+         %57 = OpAccessChain %_ptr_Output_v4float %_ %int_0
+               OpStore %57 %55
+               OpReturn
+               OpFunctionEnd
+END
+
+# SHADER fragment frag_shader GLSL
+# #version 430
+# precision highp float;
+#
+# const uint ndp = 1296;
+# const vec4 clear_value = vec4(0.0, 0.0, 0.0, 1.0);
+#
+# layout(set = 0, binding = 0) readonly buffer block0 {
+#     uvec2 in_values[ndp];
+# };
+#
+# layout (location = 0) flat in uint ndx_in;
+# layout (location = 0) out vec4 frexp_x_out;
+# layout (location = 1) out vec4 frexp_exp_out;
+# layout (location = 2) out vec4 frexpStruct_x_out;
+# layout (location = 3) out vec4 frexpStruct_exp_out;
+#
+# struct frexpStructType
+# {
+#     vec2 x;
+#     ivec2 exp;
+# };
+#
+# // Replaced with native function in SPIR-V.
+# frexpStructType frexpStruct (vec2 orig)
+# {
+#     vec2 x;
+#     ivec2 exp;
+#     x = frexp(orig, exp);
+#     frexpStructType res = { x, exp };
+#     return res;
+# }
+#
+# void main ()
+# {
+#     uvec2 in_uint = in_values[ndx_in];
+#     vec2 in_float = uintBitsToFloat(in_uint);
+#     vec2 x;
+#     ivec2 exp;
+#     frexpStructType res;
+#
+#     x = frexp(in_float, exp);
+#     res = frexpStruct(in_float);
+#
+#     frexp_x_out = clear_value;
+#     frexp_exp_out = clear_value;
+#     frexpStruct_x_out = clear_value;
+#     frexpStruct_exp_out = clear_value;
+#     frexp_x_out.rg = x;
+#     frexp_exp_out.rg = intBitsToFloat(exp);
+#     frexpStruct_x_out.rg = res.x;
+#     frexpStruct_exp_out.rg = intBitsToFloat(res.exp);
+#
+#     return;
+# }
+# END
+
+SHADER fragment frag_shader SPIRV-ASM
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %main "main" %ndx_in %frexp_x_out %frexp_exp_out %frexpStruct_x_out %frexpStruct_exp_out
+               OpExecutionMode %main OriginUpperLeft
+               OpDecorate %_arr_v2uint_uint_1296 ArrayStride 8
+               OpMemberDecorate %block0 0 NonWritable
+               OpMemberDecorate %block0 0 Offset 0
+               OpDecorate %block0 BufferBlock
+               OpDecorate %_ DescriptorSet 0
+               OpDecorate %_ Binding 0
+               OpDecorate %ndx_in Flat
+               OpDecorate %ndx_in Location 0
+               OpDecorate %frexp_x_out Location 0
+               OpDecorate %frexp_exp_out Location 1
+               OpDecorate %frexpStruct_x_out Location 2
+               OpDecorate %frexpStruct_exp_out Location 3
+       %void = OpTypeVoid
+          %3 = OpTypeFunction %void
+      %float = OpTypeFloat 32
+    %v2float = OpTypeVector %float 2
+%_ptr_Function_v2float = OpTypePointer Function %v2float
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+%frexpStructType = OpTypeStruct %v2float %v2int
+         %12 = OpTypeFunction %frexpStructType %_ptr_Function_v2float
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+%_ptr_Function_frexpStructType = OpTypePointer Function %frexpStructType
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+  %uint_1296 = OpConstant %uint 1296
+%_arr_v2uint_uint_1296 = OpTypeArray %v2uint %uint_1296
+     %block0 = OpTypeStruct %_arr_v2uint_uint_1296
+%_ptr_Uniform_block0 = OpTypePointer Uniform %block0
+          %_ = OpVariable %_ptr_Uniform_block0 Uniform
+      %int_0 = OpConstant %int 0
+%_ptr_Input_uint = OpTypePointer Input %uint
+     %ndx_in = OpVariable %_ptr_Input_uint Input
+%_ptr_Uniform_v2uint = OpTypePointer Uniform %v2uint
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+%frexp_x_out = OpVariable %_ptr_Output_v4float Output
+    %float_0 = OpConstant %float 0
+    %float_1 = OpConstant %float 1
+         %61 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_1
+%frexp_exp_out = OpVariable %_ptr_Output_v4float Output
+%frexpStruct_x_out = OpVariable %_ptr_Output_v4float Output
+%frexpStruct_exp_out = OpVariable %_ptr_Output_v4float Output
+      %int_1 = OpConstant %int 1
+       %main = OpFunction %void None %3
+          %5 = OpLabel
+    %in_uint = OpVariable %_ptr_Function_v2uint Function
+   %in_float = OpVariable %_ptr_Function_v2float Function
+        %x_0 = OpVariable %_ptr_Function_v2float Function
+      %exp_0 = OpVariable %_ptr_Function_v2int Function
+      %res_0 = OpVariable %_ptr_Function_frexpStructType Function
+         %41 = OpLoad %uint %ndx_in
+         %43 = OpAccessChain %_ptr_Uniform_v2uint %_ %int_0 %41
+         %44 = OpLoad %v2uint %43
+               OpStore %in_uint %44
+         %46 = OpLoad %v2uint %in_uint
+         %47 = OpBitcast %v2float %46
+               OpStore %in_float %47
+         %49 = OpLoad %v2float %in_float
+         %51 = OpExtInst %v2float %1 Frexp %49 %exp_0
+               OpStore %x_0 %51
+         %54 = OpLoad %v2float %in_float
+         %55 = OpExtInst %frexpStructType %1 FrexpStruct %54
+               OpStore %res_0 %55
+               OpStore %frexp_x_out %61
+               OpStore %frexp_exp_out %61
+               OpStore %frexpStruct_x_out %61
+               OpStore %frexpStruct_exp_out %61
+         %65 = OpLoad %v2float %x_0
+         %66 = OpLoad %v4float %frexp_x_out
+         %67 = OpVectorShuffle %v4float %66 %65 4 5 2 3
+               OpStore %frexp_x_out %67
+         %68 = OpLoad %v2int %exp_0
+         %69 = OpBitcast %v2float %68
+         %70 = OpLoad %v4float %frexp_exp_out
+         %71 = OpVectorShuffle %v4float %70 %69 4 5 2 3
+               OpStore %frexp_exp_out %71
+         %72 = OpAccessChain %_ptr_Function_v2float %res_0 %int_0
+         %73 = OpLoad %v2float %72
+         %74 = OpLoad %v4float %frexpStruct_x_out
+         %75 = OpVectorShuffle %v4float %74 %73 4 5 2 3
+               OpStore %frexpStruct_x_out %75
+         %77 = OpAccessChain %_ptr_Function_v2int %res_0 %int_1
+         %78 = OpLoad %v2int %77
+         %79 = OpBitcast %v2float %78
+         %80 = OpLoad %v4float %frexpStruct_exp_out
+         %81 = OpVectorShuffle %v4float %80 %79 4 5 2 3
+               OpStore %frexpStruct_exp_out %81
+               OpReturn
+               OpFunctionEnd
+END
+
+BUFFER buf_in DATA_TYPE uint32 SIZE 1296 FILE TEXT input.txt
+BUFFER vertices DATA_TYPE vec2<float> SIZE 7776 FILE TEXT grid_vertices.txt
+
+BUFFER frexp_x FORMAT R32G32B32A32_SFLOAT
+BUFFER frexp_exp FORMAT R32G32B32A32_SFLOAT
+BUFFER frexpStruct_x FORMAT R32G32B32A32_SFLOAT
+BUFFER frexpStruct_exp FORMAT R32G32B32A32_SFLOAT
+
+PIPELINE graphics test_pipeline
+    FRAMEBUFFER_SIZE 144 144
+
+    ATTACH vert_shader
+    ATTACH frag_shader
+
+    VERTEX_DATA vertices LOCATION 0
+
+    BIND BUFFER buf_in AS storage DESCRIPTOR_SET 0 BINDING 0
+    BIND BUFFER frexp_x AS color LOCATION 0
+    BIND BUFFER frexp_exp AS color LOCATION 1
+    BIND BUFFER frexpStruct_x AS color LOCATION 2
+    BIND BUFFER frexpStruct_exp AS color LOCATION 3
+END
+
+RUN test_pipeline DRAW_ARRAY AS TRIANGLE_LIST START_IDX 0 COUNT 7776
+
+EXPECT frexp_x EQ_BUFFER frexpStruct_x
+EXPECT frexp_exp EQ_BUFFER frexpStruct_exp
diff --git a/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/frexpstruct_2_geom.amber b/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/frexpstruct_2_geom.amber
new file mode 100644
index 0000000..f421130
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/frexpstruct_2_geom.amber
@@ -0,0 +1,430 @@
+#!amber
+
+# Copyright 2021 Google LLC
+#
+# 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.
+
+# A geometry shader test for FrexpStruct.
+
+DEVICE_FEATURE geometryShader
+
+# SHADER vertex vert_shader GLSL
+# #version 430
+# precision highp float;
+#
+# const uint ndp = 1296;
+# const uint ndpSqrt = uint(sqrt(ndp));
+# const float halfGridElementSize = 1.0 / float(ndpSqrt);
+#
+# layout (location = 0) in vec2 position;
+# layout (location = 0) flat out uint ndx_out;
+#
+# void main ()
+# {
+#     uint xcoord = uint(ndpSqrt * ((position.x + halfGridElementSize + 1) / 2) - 1);
+#     uint ycoord = uint(ndpSqrt * ((position.y + halfGridElementSize + 1) / 2) - 1);
+#     ndx_out = xcoord + ycoord * ndpSqrt;
+#
+#     gl_Position = vec4(position, 0, 1);
+#
+#     return;
+# }
+# END
+
+SHADER vertex vert_shader SPIRV-ASM
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %main "main" %position %ndx_out %_
+               OpDecorate %position Location 0
+               OpDecorate %ndx_out Flat
+               OpDecorate %ndx_out Location 0
+               OpMemberDecorate %gl_PerVertex 0 BuiltIn Position
+               OpMemberDecorate %gl_PerVertex 1 BuiltIn PointSize
+               OpMemberDecorate %gl_PerVertex 2 BuiltIn ClipDistance
+               OpDecorate %gl_PerVertex Block
+       %void = OpTypeVoid
+          %3 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+      %float = OpTypeFloat 32
+    %v2float = OpTypeVector %float 2
+%_ptr_Input_v2float = OpTypePointer Input %v2float
+   %position = OpVariable %_ptr_Input_v2float Input
+     %uint_0 = OpConstant %uint 0
+%_ptr_Input_float = OpTypePointer Input %float
+    %float_1 = OpConstant %float 1
+     %uint_1 = OpConstant %uint 1
+%_ptr_Output_uint = OpTypePointer Output %uint
+    %ndx_out = OpVariable %_ptr_Output_uint Output
+    %uint_36 = OpConstant %uint 36
+    %v4float = OpTypeVector %float 4
+%_arr_float_uint_1 = OpTypeArray %float %uint_1
+%gl_PerVertex = OpTypeStruct %v4float %float %_arr_float_uint_1
+%_ptr_Output_gl_PerVertex = OpTypePointer Output %gl_PerVertex
+          %_ = OpVariable %_ptr_Output_gl_PerVertex Output
+        %int = OpTypeInt 32 1
+      %int_0 = OpConstant %int 0
+    %float_0 = OpConstant %float 0
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+%float_1_02777779 = OpConstant %float 1.02777779
+   %float_18 = OpConstant %float 18
+       %main = OpFunction %void None %3
+          %5 = OpLabel
+         %16 = OpAccessChain %_ptr_Input_float %position %uint_0
+         %17 = OpLoad %float %16
+         %21 = OpFAdd %float %17 %float_1_02777779
+         %24 = OpFMul %float %21 %float_18
+         %25 = OpFSub %float %24 %float_1
+         %26 = OpConvertFToU %uint %25
+         %29 = OpAccessChain %_ptr_Input_float %position %uint_1
+         %30 = OpLoad %float %29
+         %32 = OpFAdd %float %30 %float_1_02777779
+         %34 = OpFMul %float %32 %float_18
+         %35 = OpFSub %float %34 %float_1
+         %36 = OpConvertFToU %uint %35
+         %42 = OpIMul %uint %36 %uint_36
+         %43 = OpIAdd %uint %26 %42
+               OpStore %ndx_out %43
+         %51 = OpLoad %v2float %position
+         %53 = OpCompositeExtract %float %51 0
+         %54 = OpCompositeExtract %float %51 1
+         %55 = OpCompositeConstruct %v4float %53 %54 %float_0 %float_1
+         %57 = OpAccessChain %_ptr_Output_v4float %_ %int_0
+               OpStore %57 %55
+               OpReturn
+               OpFunctionEnd
+END
+
+# SHADER geometry geom_shader GLSL
+# #version 430
+# precision highp float;
+#
+# const uint ndp = 1296;
+#
+# layout(set = 0, binding = 0) readonly buffer block0 {
+#     uvec2 in_values[ndp];
+# };
+#
+# layout (triangles) in;
+# layout (triangle_strip, max_vertices = 3) out;
+#
+# layout (location = 0) flat in uint ndx_in[];
+# layout (location = 0) flat out vec2 frexp_x_out;
+# layout (location = 1) flat out vec2 frexp_exp_out;
+# layout (location = 2) flat out vec2 frexpStruct_x_out;
+# layout (location = 3) flat out vec2 frexpStruct_exp_out;
+#
+# struct frexpStructType
+# {
+#     vec2 x;
+#     ivec2 exp;
+# };
+#
+# // Replaced with native function in SPIR-V.
+# frexpStructType frexpStruct (vec2 orig)
+# {
+#     vec2 x;
+#     ivec2 exp;
+#     x = frexp(orig, exp);
+#     frexpStructType res = { x, exp };
+#     return res;
+# }
+#
+# void main ()
+# {
+#     for (int vertex = 0; vertex < 3; vertex++)
+#     {
+#         uvec2 in_uint = in_values[ndx_in[vertex]];
+#         vec2 in_float = uintBitsToFloat(in_uint);
+#         vec2 x;
+#         ivec2 exp;
+#         frexpStructType res;
+#
+#         x = frexp(in_float, exp);
+#         res = frexpStruct(in_float);
+#
+#         frexp_x_out = x;
+#         frexp_exp_out = intBitsToFloat(exp);
+#         frexpStruct_x_out = res.x;
+#         frexpStruct_exp_out = intBitsToFloat(res.exp);
+#
+#         gl_Position = gl_in[vertex].gl_Position;
+#         EmitVertex();
+#     }
+#
+#     EndPrimitive();
+# }
+# END
+
+SHADER geometry geom_shader SPIRV-ASM
+               OpCapability Geometry
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Geometry %main "main" %ndx_in %frexp_x_out %frexp_exp_out %frexpStruct_x_out %frexpStruct_exp_out %__0 %gl_in
+               OpExecutionMode %main Triangles
+               OpExecutionMode %main Invocations 1
+               OpExecutionMode %main OutputTriangleStrip
+               OpExecutionMode %main OutputVertices 3
+               OpDecorate %_arr_v2uint_uint_1296 ArrayStride 8
+               OpMemberDecorate %block0 0 NonWritable
+               OpMemberDecorate %block0 0 Offset 0
+               OpDecorate %block0 BufferBlock
+               OpDecorate %_ DescriptorSet 0
+               OpDecorate %_ Binding 0
+               OpDecorate %ndx_in Flat
+               OpDecorate %ndx_in Location 0
+               OpDecorate %frexp_x_out Flat
+               OpDecorate %frexp_x_out Location 0
+               OpDecorate %frexp_exp_out Flat
+               OpDecorate %frexp_exp_out Location 1
+               OpDecorate %frexpStruct_x_out Flat
+               OpDecorate %frexpStruct_x_out Location 2
+               OpDecorate %frexpStruct_exp_out Flat
+               OpDecorate %frexpStruct_exp_out Location 3
+               OpMemberDecorate %gl_PerVertex 0 BuiltIn Position
+               OpMemberDecorate %gl_PerVertex 1 BuiltIn PointSize
+               OpMemberDecorate %gl_PerVertex 2 BuiltIn ClipDistance
+               OpDecorate %gl_PerVertex Block
+               OpMemberDecorate %gl_PerVertex_0 0 BuiltIn Position
+               OpMemberDecorate %gl_PerVertex_0 1 BuiltIn PointSize
+               OpMemberDecorate %gl_PerVertex_0 2 BuiltIn ClipDistance
+               OpDecorate %gl_PerVertex_0 Block
+       %void = OpTypeVoid
+          %3 = OpTypeFunction %void
+      %float = OpTypeFloat 32
+    %v2float = OpTypeVector %float 2
+%_ptr_Function_v2float = OpTypePointer Function %v2float
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+%frexpStructType = OpTypeStruct %v2float %v2int
+         %12 = OpTypeFunction %frexpStructType %_ptr_Function_v2float
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+%_ptr_Function_frexpStructType = OpTypePointer Function %frexpStructType
+%_ptr_Function_int = OpTypePointer Function %int
+      %int_0 = OpConstant %int 0
+      %int_3 = OpConstant %int 3
+       %bool = OpTypeBool
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+  %uint_1296 = OpConstant %uint 1296
+%_arr_v2uint_uint_1296 = OpTypeArray %v2uint %uint_1296
+     %block0 = OpTypeStruct %_arr_v2uint_uint_1296
+%_ptr_Uniform_block0 = OpTypePointer Uniform %block0
+          %_ = OpVariable %_ptr_Uniform_block0 Uniform
+     %uint_3 = OpConstant %uint 3
+%_arr_uint_uint_3 = OpTypeArray %uint %uint_3
+%_ptr_Input__arr_uint_uint_3 = OpTypePointer Input %_arr_uint_uint_3
+     %ndx_in = OpVariable %_ptr_Input__arr_uint_uint_3 Input
+%_ptr_Input_uint = OpTypePointer Input %uint
+%_ptr_Uniform_v2uint = OpTypePointer Uniform %v2uint
+%_ptr_Output_v2float = OpTypePointer Output %v2float
+%frexp_x_out = OpVariable %_ptr_Output_v2float Output
+%frexp_exp_out = OpVariable %_ptr_Output_v2float Output
+%frexpStruct_x_out = OpVariable %_ptr_Output_v2float Output
+%frexpStruct_exp_out = OpVariable %_ptr_Output_v2float Output
+      %int_1 = OpConstant %int 1
+    %v4float = OpTypeVector %float 4
+     %uint_1 = OpConstant %uint 1
+%_arr_float_uint_1 = OpTypeArray %float %uint_1
+%gl_PerVertex = OpTypeStruct %v4float %float %_arr_float_uint_1
+%_ptr_Output_gl_PerVertex = OpTypePointer Output %gl_PerVertex
+        %__0 = OpVariable %_ptr_Output_gl_PerVertex Output
+%gl_PerVertex_0 = OpTypeStruct %v4float %float %_arr_float_uint_1
+%_arr_gl_PerVertex_0_uint_3 = OpTypeArray %gl_PerVertex_0 %uint_3
+%_ptr_Input__arr_gl_PerVertex_0_uint_3 = OpTypePointer Input %_arr_gl_PerVertex_0_uint_3
+      %gl_in = OpVariable %_ptr_Input__arr_gl_PerVertex_0_uint_3 Input
+%_ptr_Input_v4float = OpTypePointer Input %v4float
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+       %main = OpFunction %void None %3
+          %5 = OpLabel
+     %vertex = OpVariable %_ptr_Function_int Function
+    %in_uint = OpVariable %_ptr_Function_v2uint Function
+   %in_float = OpVariable %_ptr_Function_v2float Function
+        %x_0 = OpVariable %_ptr_Function_v2float Function
+      %exp_0 = OpVariable %_ptr_Function_v2int Function
+      %res_0 = OpVariable %_ptr_Function_frexpStructType Function
+               OpStore %vertex %int_0
+               OpBranch %32
+         %32 = OpLabel
+               OpLoopMerge %34 %35 None
+               OpBranch %36
+         %36 = OpLabel
+         %37 = OpLoad %int %vertex
+         %40 = OpSLessThan %bool %37 %int_3
+               OpBranchConditional %40 %33 %34
+         %33 = OpLabel
+         %54 = OpLoad %int %vertex
+         %56 = OpAccessChain %_ptr_Input_uint %ndx_in %54
+         %57 = OpLoad %uint %56
+         %59 = OpAccessChain %_ptr_Uniform_v2uint %_ %int_0 %57
+         %60 = OpLoad %v2uint %59
+               OpStore %in_uint %60
+         %62 = OpLoad %v2uint %in_uint
+         %63 = OpBitcast %v2float %62
+               OpStore %in_float %63
+         %65 = OpLoad %v2float %in_float
+         %67 = OpExtInst %v2float %1 Frexp %65 %exp_0
+               OpStore %x_0 %67
+         %70 = OpLoad %v2float %in_float
+         %71 = OpExtInst %frexpStructType %1 FrexpStruct %70
+               OpStore %res_0 %71
+         %74 = OpLoad %v2float %x_0
+               OpStore %frexp_x_out %74
+         %76 = OpLoad %v2int %exp_0
+         %77 = OpBitcast %v2float %76
+               OpStore %frexp_exp_out %77
+         %79 = OpAccessChain %_ptr_Function_v2float %res_0 %int_0
+         %80 = OpLoad %v2float %79
+               OpStore %frexpStruct_x_out %80
+         %83 = OpAccessChain %_ptr_Function_v2int %res_0 %int_1
+         %84 = OpLoad %v2int %83
+         %85 = OpBitcast %v2float %84
+               OpStore %frexpStruct_exp_out %85
+         %96 = OpLoad %int %vertex
+         %98 = OpAccessChain %_ptr_Input_v4float %gl_in %96 %int_0
+         %99 = OpLoad %v4float %98
+        %101 = OpAccessChain %_ptr_Output_v4float %__0 %int_0
+               OpStore %101 %99
+               OpEmitVertex
+               OpBranch %35
+         %35 = OpLabel
+        %102 = OpLoad %int %vertex
+        %103 = OpIAdd %int %102 %int_1
+               OpStore %vertex %103
+               OpBranch %32
+         %34 = OpLabel
+               OpEndPrimitive
+               OpReturn
+               OpFunctionEnd
+END
+
+# SHADER fragment frag_shader GLSL
+# #version 430
+# precision highp float;
+#
+# layout (location = 0) flat in vec2 frexp_x_in;
+# layout (location = 1) flat in vec2 frexp_exp_in;
+# layout (location = 2) flat in vec2 frexpStruct_x_in;
+# layout (location = 3) flat in vec2 frexpStruct_exp_in;
+#
+# layout (location = 0) out vec4 frexp_x_out;
+# layout (location = 1) out vec4 frexp_exp_out;
+# layout (location = 2) out vec4 frexpStruct_x_out;
+# layout (location = 3) out vec4 frexpStruct_exp_out;
+#
+# const vec4 clear_value = vec4(0.0, 0.0, 0.0, 1.0);
+#
+# void main ()
+# {
+#     frexp_x_out = clear_value;
+#     frexp_exp_out = clear_value;
+#     frexpStruct_x_out = clear_value;
+#     frexpStruct_exp_out = clear_value;
+#     frexp_x_out.rg = frexp_x_in;
+#     frexp_exp_out.rg = frexp_exp_in;
+#     frexpStruct_x_out.rg = frexpStruct_x_in;
+#     frexpStruct_exp_out.rg = frexpStruct_exp_in;
+# }
+# END
+
+SHADER fragment frag_shader SPIRV-ASM
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %main "main" %frexp_x_out %frexp_exp_out %frexpStruct_x_out %frexpStruct_exp_out %frexp_x_in %frexp_exp_in %frexpStruct_x_in %frexpStruct_exp_in
+               OpExecutionMode %main OriginUpperLeft
+               OpDecorate %frexp_x_out Location 0
+               OpDecorate %frexp_exp_out Location 1
+               OpDecorate %frexpStruct_x_out Location 2
+               OpDecorate %frexpStruct_exp_out Location 3
+               OpDecorate %frexp_x_in Flat
+               OpDecorate %frexp_x_in Location 0
+               OpDecorate %frexp_exp_in Flat
+               OpDecorate %frexp_exp_in Location 1
+               OpDecorate %frexpStruct_x_in Flat
+               OpDecorate %frexpStruct_x_in Location 2
+               OpDecorate %frexpStruct_exp_in Flat
+               OpDecorate %frexpStruct_exp_in Location 3
+       %void = OpTypeVoid
+          %3 = OpTypeFunction %void
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+%frexp_x_out = OpVariable %_ptr_Output_v4float Output
+    %float_0 = OpConstant %float 0
+    %float_1 = OpConstant %float 1
+         %12 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_1
+%frexp_exp_out = OpVariable %_ptr_Output_v4float Output
+%frexpStruct_x_out = OpVariable %_ptr_Output_v4float Output
+%frexpStruct_exp_out = OpVariable %_ptr_Output_v4float Output
+    %v2float = OpTypeVector %float 2
+%_ptr_Input_v2float = OpTypePointer Input %v2float
+ %frexp_x_in = OpVariable %_ptr_Input_v2float Input
+%frexp_exp_in = OpVariable %_ptr_Input_v2float Input
+%frexpStruct_x_in = OpVariable %_ptr_Input_v2float Input
+%frexpStruct_exp_in = OpVariable %_ptr_Input_v2float Input
+       %main = OpFunction %void None %3
+          %5 = OpLabel
+               OpStore %frexp_x_out %12
+               OpStore %frexp_exp_out %12
+               OpStore %frexpStruct_x_out %12
+               OpStore %frexpStruct_exp_out %12
+         %19 = OpLoad %v2float %frexp_x_in
+         %20 = OpLoad %v4float %frexp_x_out
+         %21 = OpVectorShuffle %v4float %20 %19 4 5 2 3
+               OpStore %frexp_x_out %21
+         %23 = OpLoad %v2float %frexp_exp_in
+         %24 = OpLoad %v4float %frexp_exp_out
+         %25 = OpVectorShuffle %v4float %24 %23 4 5 2 3
+               OpStore %frexp_exp_out %25
+         %27 = OpLoad %v2float %frexpStruct_x_in
+         %28 = OpLoad %v4float %frexpStruct_x_out
+         %29 = OpVectorShuffle %v4float %28 %27 4 5 2 3
+               OpStore %frexpStruct_x_out %29
+         %31 = OpLoad %v2float %frexpStruct_exp_in
+         %32 = OpLoad %v4float %frexpStruct_exp_out
+         %33 = OpVectorShuffle %v4float %32 %31 4 5 2 3
+               OpStore %frexpStruct_exp_out %33
+               OpReturn
+               OpFunctionEnd
+END
+
+BUFFER buf_in DATA_TYPE uint32 SIZE 1296 FILE TEXT input.txt
+BUFFER vertices DATA_TYPE vec2<float> SIZE 7776 FILE TEXT grid_vertices.txt
+
+BUFFER frexp_x FORMAT R32G32B32A32_SFLOAT
+BUFFER frexp_exp FORMAT R32G32B32A32_SFLOAT
+BUFFER frexpStruct_x FORMAT R32G32B32A32_SFLOAT
+BUFFER frexpStruct_exp FORMAT R32G32B32A32_SFLOAT
+
+PIPELINE graphics test_pipeline
+    FRAMEBUFFER_SIZE 144 144
+
+    ATTACH vert_shader
+    ATTACH geom_shader
+    ATTACH frag_shader
+
+    VERTEX_DATA vertices LOCATION 0
+
+    BIND BUFFER buf_in AS storage DESCRIPTOR_SET 0 BINDING 0
+    BIND BUFFER frexp_x AS color LOCATION 0
+    BIND BUFFER frexp_exp AS color LOCATION 1
+    BIND BUFFER frexpStruct_x AS color LOCATION 2
+    BIND BUFFER frexpStruct_exp AS color LOCATION 3
+END
+
+RUN test_pipeline DRAW_ARRAY AS TRIANGLE_LIST START_IDX 0 COUNT 7776
+
+EXPECT frexp_x EQ_BUFFER frexpStruct_x
+EXPECT frexp_exp EQ_BUFFER frexpStruct_exp
diff --git a/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/frexpstruct_2_tesc.amber b/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/frexpstruct_2_tesc.amber
new file mode 100644
index 0000000..3abf115
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/frexpstruct_2_tesc.amber
@@ -0,0 +1,588 @@
+#!amber
+
+# Copyright 2021 Google LLC
+#
+# 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.
+
+# A tessellation control shader test for FrexpStruct.
+
+DEVICE_FEATURE tessellationShader
+
+# SHADER vertex vert_shader GLSL
+# #version 430
+# precision highp float;
+#
+# const uint ndp = 1296;
+# const uint ndpSqrt = uint(sqrt(ndp));
+# const float halfGridElementSize = 1.0 / float(ndpSqrt);
+#
+# layout (location = 0) in vec2 position;
+# layout (location = 0) flat out uint ndx_out;
+#
+# void main ()
+# {
+#     uint xcoord = uint(ndpSqrt * ((position.x + halfGridElementSize + 1) / 2) - 1);
+#     uint ycoord = uint(ndpSqrt * ((position.y + halfGridElementSize + 1) / 2) - 1);
+#     ndx_out = xcoord + ycoord * ndpSqrt;
+#
+#     gl_Position = vec4(position, 0, 1);
+#
+#     return;
+# }
+# END
+
+SHADER vertex vert_shader SPIRV-ASM
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %main "main" %position %ndx_out %_
+               OpDecorate %position Location 0
+               OpDecorate %ndx_out Flat
+               OpDecorate %ndx_out Location 0
+               OpMemberDecorate %gl_PerVertex 0 BuiltIn Position
+               OpMemberDecorate %gl_PerVertex 1 BuiltIn PointSize
+               OpMemberDecorate %gl_PerVertex 2 BuiltIn ClipDistance
+               OpDecorate %gl_PerVertex Block
+       %void = OpTypeVoid
+          %3 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+      %float = OpTypeFloat 32
+    %v2float = OpTypeVector %float 2
+%_ptr_Input_v2float = OpTypePointer Input %v2float
+   %position = OpVariable %_ptr_Input_v2float Input
+     %uint_0 = OpConstant %uint 0
+%_ptr_Input_float = OpTypePointer Input %float
+    %float_1 = OpConstant %float 1
+     %uint_1 = OpConstant %uint 1
+%_ptr_Output_uint = OpTypePointer Output %uint
+    %ndx_out = OpVariable %_ptr_Output_uint Output
+    %uint_36 = OpConstant %uint 36
+    %v4float = OpTypeVector %float 4
+%_arr_float_uint_1 = OpTypeArray %float %uint_1
+%gl_PerVertex = OpTypeStruct %v4float %float %_arr_float_uint_1
+%_ptr_Output_gl_PerVertex = OpTypePointer Output %gl_PerVertex
+          %_ = OpVariable %_ptr_Output_gl_PerVertex Output
+        %int = OpTypeInt 32 1
+      %int_0 = OpConstant %int 0
+    %float_0 = OpConstant %float 0
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+%float_1_02777779 = OpConstant %float 1.02777779
+   %float_18 = OpConstant %float 18
+       %main = OpFunction %void None %3
+          %5 = OpLabel
+         %16 = OpAccessChain %_ptr_Input_float %position %uint_0
+         %17 = OpLoad %float %16
+         %21 = OpFAdd %float %17 %float_1_02777779
+         %24 = OpFMul %float %21 %float_18
+         %25 = OpFSub %float %24 %float_1
+         %26 = OpConvertFToU %uint %25
+         %29 = OpAccessChain %_ptr_Input_float %position %uint_1
+         %30 = OpLoad %float %29
+         %32 = OpFAdd %float %30 %float_1_02777779
+         %34 = OpFMul %float %32 %float_18
+         %35 = OpFSub %float %34 %float_1
+         %36 = OpConvertFToU %uint %35
+         %42 = OpIMul %uint %36 %uint_36
+         %43 = OpIAdd %uint %26 %42
+               OpStore %ndx_out %43
+         %51 = OpLoad %v2float %position
+         %53 = OpCompositeExtract %float %51 0
+         %54 = OpCompositeExtract %float %51 1
+         %55 = OpCompositeConstruct %v4float %53 %54 %float_0 %float_1
+         %57 = OpAccessChain %_ptr_Output_v4float %_ %int_0
+               OpStore %57 %55
+               OpReturn
+               OpFunctionEnd
+END
+
+# SHADER tessellation_control tesc_shader GLSL
+# #version 430
+# precision highp float;
+#
+# const uint ndp = 1296;
+#
+# layout (vertices = 3) out;
+#
+# layout (location = 0) flat in uint ndx_in[];
+# layout (location = 0) flat out vec2 frexp_x_out[];
+# layout (location = 1) flat out vec2 frexp_exp_out[];
+# layout (location = 2) flat out vec2 frexpStruct_x_out[];
+# layout (location = 3) flat out vec2 frexpStruct_exp_out[];
+#
+# layout(set = 0, binding = 0) readonly buffer block0 {
+#     uvec2 in_values[ndp];
+# };
+#
+# struct frexpStructType
+# {
+#     vec2 x;
+#     ivec2 exp;
+# };
+#
+# // Replaced with native function in SPIR-V.
+# frexpStructType frexpStruct (vec2 orig)
+# {
+#     vec2 x;
+#     ivec2 exp;
+#     x = frexp(orig, exp);
+#     frexpStructType res = { x, exp };
+#     return res;
+# }
+#
+# void main ()
+# {
+#     uvec2 in_uint = in_values[ndx_in[gl_InvocationID]];
+#     vec2 in_float = uintBitsToFloat(in_uint);
+#     vec2 x;
+#     ivec2 exp;
+#     frexpStructType res;
+#
+#     x = frexp(in_float, exp);
+#     res = frexpStruct(in_float);
+#
+#     frexp_x_out[gl_InvocationID] = x;
+#     frexp_exp_out[gl_InvocationID] = intBitsToFloat(exp);
+#     frexpStruct_x_out[gl_InvocationID] = res.x;
+#     frexpStruct_exp_out[gl_InvocationID] = intBitsToFloat(res.exp);
+#
+#     gl_TessLevelInner[0] = 1.0;
+#     gl_TessLevelInner[1] = 1.0;
+#     gl_TessLevelOuter[0] = 1.0;
+#     gl_TessLevelOuter[1] = 1.0;
+#     gl_TessLevelOuter[2] = 1.0;
+#     gl_TessLevelOuter[3] = 1.0;
+#     gl_out[gl_InvocationID].gl_Position = gl_in[gl_InvocationID].gl_Position;
+# }
+# END
+
+SHADER tessellation_control tesc_shader SPIRV-ASM
+               OpCapability Tessellation
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint TessellationControl %main "main" %ndx_in %gl_InvocationID %frexp_x_out %frexp_exp_out %frexpStruct_x_out %frexpStruct_exp_out %gl_TessLevelInner %gl_TessLevelOuter %gl_out %gl_in
+               OpExecutionMode %main OutputVertices 3
+               OpDecorate %_arr_v2uint_uint_1296 ArrayStride 8
+               OpMemberDecorate %block0 0 NonWritable
+               OpMemberDecorate %block0 0 Offset 0
+               OpDecorate %block0 BufferBlock
+               OpDecorate %_ DescriptorSet 0
+               OpDecorate %_ Binding 0
+               OpDecorate %ndx_in Flat
+               OpDecorate %ndx_in Location 0
+               OpDecorate %gl_InvocationID BuiltIn InvocationId
+               OpDecorate %frexp_x_out Flat
+               OpDecorate %frexp_x_out Location 0
+               OpDecorate %frexp_exp_out Flat
+               OpDecorate %frexp_exp_out Location 1
+               OpDecorate %frexpStruct_x_out Flat
+               OpDecorate %frexpStruct_x_out Location 2
+               OpDecorate %frexpStruct_exp_out Flat
+               OpDecorate %frexpStruct_exp_out Location 3
+               OpDecorate %gl_TessLevelInner Patch
+               OpDecorate %gl_TessLevelInner BuiltIn TessLevelInner
+               OpDecorate %gl_TessLevelOuter Patch
+               OpDecorate %gl_TessLevelOuter BuiltIn TessLevelOuter
+               OpMemberDecorate %gl_PerVertex 0 BuiltIn Position
+               OpMemberDecorate %gl_PerVertex 1 BuiltIn PointSize
+               OpMemberDecorate %gl_PerVertex 2 BuiltIn ClipDistance
+               OpDecorate %gl_PerVertex Block
+               OpMemberDecorate %gl_PerVertex_0 0 BuiltIn Position
+               OpMemberDecorate %gl_PerVertex_0 1 BuiltIn PointSize
+               OpMemberDecorate %gl_PerVertex_0 2 BuiltIn ClipDistance
+               OpDecorate %gl_PerVertex_0 Block
+       %void = OpTypeVoid
+          %3 = OpTypeFunction %void
+      %float = OpTypeFloat 32
+    %v2float = OpTypeVector %float 2
+%_ptr_Function_v2float = OpTypePointer Function %v2float
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+%frexpStructType = OpTypeStruct %v2float %v2int
+         %12 = OpTypeFunction %frexpStructType %_ptr_Function_v2float
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+%_ptr_Function_frexpStructType = OpTypePointer Function %frexpStructType
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+  %uint_1296 = OpConstant %uint 1296
+%_arr_v2uint_uint_1296 = OpTypeArray %v2uint %uint_1296
+     %block0 = OpTypeStruct %_arr_v2uint_uint_1296
+%_ptr_Uniform_block0 = OpTypePointer Uniform %block0
+          %_ = OpVariable %_ptr_Uniform_block0 Uniform
+      %int_0 = OpConstant %int 0
+    %uint_32 = OpConstant %uint 32
+%_arr_uint_uint_32 = OpTypeArray %uint %uint_32
+%_ptr_Input__arr_uint_uint_32 = OpTypePointer Input %_arr_uint_uint_32
+     %ndx_in = OpVariable %_ptr_Input__arr_uint_uint_32 Input
+%_ptr_Input_int = OpTypePointer Input %int
+%gl_InvocationID = OpVariable %_ptr_Input_int Input
+%_ptr_Input_uint = OpTypePointer Input %uint
+%_ptr_Uniform_v2uint = OpTypePointer Uniform %v2uint
+     %uint_3 = OpConstant %uint 3
+%_arr_v2float_uint_3 = OpTypeArray %v2float %uint_3
+%_ptr_Output__arr_v2float_uint_3 = OpTypePointer Output %_arr_v2float_uint_3
+%frexp_x_out = OpVariable %_ptr_Output__arr_v2float_uint_3 Output
+%_ptr_Output_v2float = OpTypePointer Output %v2float
+%frexp_exp_out = OpVariable %_ptr_Output__arr_v2float_uint_3 Output
+%frexpStruct_x_out = OpVariable %_ptr_Output__arr_v2float_uint_3 Output
+%frexpStruct_exp_out = OpVariable %_ptr_Output__arr_v2float_uint_3 Output
+      %int_1 = OpConstant %int 1
+     %uint_2 = OpConstant %uint 2
+%_arr_float_uint_2 = OpTypeArray %float %uint_2
+%_ptr_Output__arr_float_uint_2 = OpTypePointer Output %_arr_float_uint_2
+%gl_TessLevelInner = OpVariable %_ptr_Output__arr_float_uint_2 Output
+    %float_1 = OpConstant %float 1
+%_ptr_Output_float = OpTypePointer Output %float
+     %uint_4 = OpConstant %uint 4
+%_arr_float_uint_4 = OpTypeArray %float %uint_4
+%_ptr_Output__arr_float_uint_4 = OpTypePointer Output %_arr_float_uint_4
+%gl_TessLevelOuter = OpVariable %_ptr_Output__arr_float_uint_4 Output
+      %int_2 = OpConstant %int 2
+      %int_3 = OpConstant %int 3
+    %v4float = OpTypeVector %float 4
+     %uint_1 = OpConstant %uint 1
+%_arr_float_uint_1 = OpTypeArray %float %uint_1
+%gl_PerVertex = OpTypeStruct %v4float %float %_arr_float_uint_1
+%_arr_gl_PerVertex_uint_3 = OpTypeArray %gl_PerVertex %uint_3
+%_ptr_Output__arr_gl_PerVertex_uint_3 = OpTypePointer Output %_arr_gl_PerVertex_uint_3
+     %gl_out = OpVariable %_ptr_Output__arr_gl_PerVertex_uint_3 Output
+%gl_PerVertex_0 = OpTypeStruct %v4float %float %_arr_float_uint_1
+%_arr_gl_PerVertex_0_uint_32 = OpTypeArray %gl_PerVertex_0 %uint_32
+%_ptr_Input__arr_gl_PerVertex_0_uint_32 = OpTypePointer Input %_arr_gl_PerVertex_0_uint_32
+      %gl_in = OpVariable %_ptr_Input__arr_gl_PerVertex_0_uint_32 Input
+%_ptr_Input_v4float = OpTypePointer Input %v4float
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+       %main = OpFunction %void None %3
+          %5 = OpLabel
+    %in_uint = OpVariable %_ptr_Function_v2uint Function
+   %in_float = OpVariable %_ptr_Function_v2float Function
+        %x_0 = OpVariable %_ptr_Function_v2float Function
+      %exp_0 = OpVariable %_ptr_Function_v2int Function
+      %res_0 = OpVariable %_ptr_Function_frexpStructType Function
+         %45 = OpLoad %int %gl_InvocationID
+         %47 = OpAccessChain %_ptr_Input_uint %ndx_in %45
+         %48 = OpLoad %uint %47
+         %50 = OpAccessChain %_ptr_Uniform_v2uint %_ %int_0 %48
+         %51 = OpLoad %v2uint %50
+               OpStore %in_uint %51
+         %53 = OpLoad %v2uint %in_uint
+         %54 = OpBitcast %v2float %53
+               OpStore %in_float %54
+         %56 = OpLoad %v2float %in_float
+         %58 = OpExtInst %v2float %1 Frexp %56 %exp_0
+               OpStore %x_0 %58
+         %61 = OpLoad %v2float %in_float
+         %62 = OpExtInst %frexpStructType %1 FrexpStruct %61
+               OpStore %res_0 %62
+         %67 = OpLoad %int %gl_InvocationID
+         %68 = OpLoad %v2float %x_0
+         %70 = OpAccessChain %_ptr_Output_v2float %frexp_x_out %67
+               OpStore %70 %68
+         %72 = OpLoad %int %gl_InvocationID
+         %73 = OpLoad %v2int %exp_0
+         %74 = OpBitcast %v2float %73
+         %75 = OpAccessChain %_ptr_Output_v2float %frexp_exp_out %72
+               OpStore %75 %74
+         %77 = OpLoad %int %gl_InvocationID
+         %78 = OpAccessChain %_ptr_Function_v2float %res_0 %int_0
+         %79 = OpLoad %v2float %78
+         %80 = OpAccessChain %_ptr_Output_v2float %frexpStruct_x_out %77
+               OpStore %80 %79
+         %82 = OpLoad %int %gl_InvocationID
+         %84 = OpAccessChain %_ptr_Function_v2int %res_0 %int_1
+         %85 = OpLoad %v2int %84
+         %86 = OpBitcast %v2float %85
+         %87 = OpAccessChain %_ptr_Output_v2float %frexpStruct_exp_out %82
+               OpStore %87 %86
+         %94 = OpAccessChain %_ptr_Output_float %gl_TessLevelInner %int_0
+               OpStore %94 %float_1
+         %95 = OpAccessChain %_ptr_Output_float %gl_TessLevelInner %int_1
+               OpStore %95 %float_1
+        %100 = OpAccessChain %_ptr_Output_float %gl_TessLevelOuter %int_0
+               OpStore %100 %float_1
+        %101 = OpAccessChain %_ptr_Output_float %gl_TessLevelOuter %int_1
+               OpStore %101 %float_1
+        %103 = OpAccessChain %_ptr_Output_float %gl_TessLevelOuter %int_2
+               OpStore %103 %float_1
+        %105 = OpAccessChain %_ptr_Output_float %gl_TessLevelOuter %int_3
+               OpStore %105 %float_1
+        %113 = OpLoad %int %gl_InvocationID
+        %118 = OpLoad %int %gl_InvocationID
+        %120 = OpAccessChain %_ptr_Input_v4float %gl_in %118 %int_0
+        %121 = OpLoad %v4float %120
+        %123 = OpAccessChain %_ptr_Output_v4float %gl_out %113 %int_0
+               OpStore %123 %121
+               OpReturn
+               OpFunctionEnd
+END
+
+# SHADER tessellation_evaluation tese_shader GLSL
+# #version 430
+# precision highp float;
+#
+# layout (triangles) in;
+#
+# layout (location = 0) flat in vec2 frexp_x_in[];
+# layout (location = 1) flat in vec2 frexp_exp_in[];
+# layout (location = 2) flat in vec2 frexpStruct_x_in[];
+# layout (location = 3) flat in vec2 frexpStruct_exp_in[];
+#
+# layout (location = 0) flat out vec2 frexp_x_out;
+# layout (location = 1) flat out vec2 frexp_exp_out;
+# layout (location = 2) flat out vec2 frexpStruct_x_out;
+# layout (location = 3) flat out vec2 frexpStruct_exp_out;
+#
+# void main ()
+# {
+#     gl_Position = gl_TessCoord.x * gl_in[0].gl_Position +
+#                   gl_TessCoord.y * gl_in[1].gl_Position +
+#                   gl_TessCoord.z * gl_in[2].gl_Position;
+#
+#     frexp_x_out = frexp_x_in[0];
+#     frexp_exp_out = frexp_exp_in[0];
+#     frexpStruct_x_out = frexpStruct_x_in[0];
+#     frexpStruct_exp_out = frexpStruct_exp_in[0];
+# }
+# END
+
+SHADER tessellation_evaluation tese_shader SPIRV-ASM
+               OpCapability Tessellation
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint TessellationEvaluation %main "main" %_ %gl_TessCoord %gl_in %frexp_x_out %frexp_x_in %frexp_exp_out %frexp_exp_in %frexpStruct_x_out %frexpStruct_x_in %frexpStruct_exp_out %frexpStruct_exp_in
+               OpExecutionMode %main Triangles
+               OpExecutionMode %main SpacingEqual
+               OpExecutionMode %main VertexOrderCcw
+               OpMemberDecorate %gl_PerVertex 0 BuiltIn Position
+               OpMemberDecorate %gl_PerVertex 1 BuiltIn PointSize
+               OpMemberDecorate %gl_PerVertex 2 BuiltIn ClipDistance
+               OpDecorate %gl_PerVertex Block
+               OpDecorate %gl_TessCoord BuiltIn TessCoord
+               OpMemberDecorate %gl_PerVertex_0 0 BuiltIn Position
+               OpMemberDecorate %gl_PerVertex_0 1 BuiltIn PointSize
+               OpMemberDecorate %gl_PerVertex_0 2 BuiltIn ClipDistance
+               OpDecorate %gl_PerVertex_0 Block
+               OpDecorate %frexp_x_out Flat
+               OpDecorate %frexp_x_out Location 0
+               OpDecorate %frexp_x_in Flat
+               OpDecorate %frexp_x_in Location 0
+               OpDecorate %frexp_exp_out Flat
+               OpDecorate %frexp_exp_out Location 1
+               OpDecorate %frexp_exp_in Flat
+               OpDecorate %frexp_exp_in Location 1
+               OpDecorate %frexpStruct_x_out Flat
+               OpDecorate %frexpStruct_x_out Location 2
+               OpDecorate %frexpStruct_x_in Flat
+               OpDecorate %frexpStruct_x_in Location 2
+               OpDecorate %frexpStruct_exp_out Flat
+               OpDecorate %frexpStruct_exp_out Location 3
+               OpDecorate %frexpStruct_exp_in Flat
+               OpDecorate %frexpStruct_exp_in Location 3
+       %void = OpTypeVoid
+          %3 = OpTypeFunction %void
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+       %uint = OpTypeInt 32 0
+     %uint_1 = OpConstant %uint 1
+%_arr_float_uint_1 = OpTypeArray %float %uint_1
+%gl_PerVertex = OpTypeStruct %v4float %float %_arr_float_uint_1
+%_ptr_Output_gl_PerVertex = OpTypePointer Output %gl_PerVertex
+          %_ = OpVariable %_ptr_Output_gl_PerVertex Output
+        %int = OpTypeInt 32 1
+      %int_0 = OpConstant %int 0
+    %v3float = OpTypeVector %float 3
+%_ptr_Input_v3float = OpTypePointer Input %v3float
+%gl_TessCoord = OpVariable %_ptr_Input_v3float Input
+     %uint_0 = OpConstant %uint 0
+%_ptr_Input_float = OpTypePointer Input %float
+%gl_PerVertex_0 = OpTypeStruct %v4float %float %_arr_float_uint_1
+    %uint_32 = OpConstant %uint 32
+%_arr_gl_PerVertex_0_uint_32 = OpTypeArray %gl_PerVertex_0 %uint_32
+%_ptr_Input__arr_gl_PerVertex_0_uint_32 = OpTypePointer Input %_arr_gl_PerVertex_0_uint_32
+      %gl_in = OpVariable %_ptr_Input__arr_gl_PerVertex_0_uint_32 Input
+%_ptr_Input_v4float = OpTypePointer Input %v4float
+      %int_1 = OpConstant %int 1
+     %uint_2 = OpConstant %uint 2
+      %int_2 = OpConstant %int 2
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+    %v2float = OpTypeVector %float 2
+%_ptr_Output_v2float = OpTypePointer Output %v2float
+%frexp_x_out = OpVariable %_ptr_Output_v2float Output
+%_arr_v2float_uint_32 = OpTypeArray %v2float %uint_32
+%_ptr_Input__arr_v2float_uint_32 = OpTypePointer Input %_arr_v2float_uint_32
+ %frexp_x_in = OpVariable %_ptr_Input__arr_v2float_uint_32 Input
+%_ptr_Input_v2float = OpTypePointer Input %v2float
+%frexp_exp_out = OpVariable %_ptr_Output_v2float Output
+%frexp_exp_in = OpVariable %_ptr_Input__arr_v2float_uint_32 Input
+%frexpStruct_x_out = OpVariable %_ptr_Output_v2float Output
+%frexpStruct_x_in = OpVariable %_ptr_Input__arr_v2float_uint_32 Input
+%frexpStruct_exp_out = OpVariable %_ptr_Output_v2float Output
+%frexpStruct_exp_in = OpVariable %_ptr_Input__arr_v2float_uint_32 Input
+       %main = OpFunction %void None %3
+          %5 = OpLabel
+         %21 = OpAccessChain %_ptr_Input_float %gl_TessCoord %uint_0
+         %22 = OpLoad %float %21
+         %29 = OpAccessChain %_ptr_Input_v4float %gl_in %int_0 %int_0
+         %30 = OpLoad %v4float %29
+         %31 = OpVectorTimesScalar %v4float %30 %22
+         %32 = OpAccessChain %_ptr_Input_float %gl_TessCoord %uint_1
+         %33 = OpLoad %float %32
+         %35 = OpAccessChain %_ptr_Input_v4float %gl_in %int_1 %int_0
+         %36 = OpLoad %v4float %35
+         %37 = OpVectorTimesScalar %v4float %36 %33
+         %38 = OpFAdd %v4float %31 %37
+         %40 = OpAccessChain %_ptr_Input_float %gl_TessCoord %uint_2
+         %41 = OpLoad %float %40
+         %43 = OpAccessChain %_ptr_Input_v4float %gl_in %int_2 %int_0
+         %44 = OpLoad %v4float %43
+         %45 = OpVectorTimesScalar %v4float %44 %41
+         %46 = OpFAdd %v4float %38 %45
+         %48 = OpAccessChain %_ptr_Output_v4float %_ %int_0
+               OpStore %48 %46
+         %56 = OpAccessChain %_ptr_Input_v2float %frexp_x_in %int_0
+         %57 = OpLoad %v2float %56
+               OpStore %frexp_x_out %57
+         %60 = OpAccessChain %_ptr_Input_v2float %frexp_exp_in %int_0
+         %61 = OpLoad %v2float %60
+               OpStore %frexp_exp_out %61
+         %64 = OpAccessChain %_ptr_Input_v2float %frexpStruct_x_in %int_0
+         %65 = OpLoad %v2float %64
+               OpStore %frexpStruct_x_out %65
+         %68 = OpAccessChain %_ptr_Input_v2float %frexpStruct_exp_in %int_0
+         %69 = OpLoad %v2float %68
+               OpStore %frexpStruct_exp_out %69
+               OpReturn
+               OpFunctionEnd
+END
+
+# SHADER fragment frag_shader GLSL
+# #version 430
+# precision highp float;
+#
+# layout (location = 0) flat in vec2 frexp_x_in;
+# layout (location = 1) flat in vec2 frexp_exp_in;
+# layout (location = 2) flat in vec2 frexpStruct_x_in;
+# layout (location = 3) flat in vec2 frexpStruct_exp_in;
+#
+# layout (location = 0) out vec4 frexp_x_out;
+# layout (location = 1) out vec4 frexp_exp_out;
+# layout (location = 2) out vec4 frexpStruct_x_out;
+# layout (location = 3) out vec4 frexpStruct_exp_out;
+#
+# const vec4 clear_value = vec4(0.0, 0.0, 0.0, 1.0);
+#
+# void main ()
+# {
+#     frexp_x_out = clear_value;
+#     frexp_exp_out = clear_value;
+#     frexpStruct_x_out = clear_value;
+#     frexpStruct_exp_out = clear_value;
+#     frexp_x_out.rg = frexp_x_in;
+#     frexp_exp_out.rg = frexp_exp_in;
+#     frexpStruct_x_out.rg = frexpStruct_x_in;
+#     frexpStruct_exp_out.rg = frexpStruct_exp_in;
+# }
+# END
+
+SHADER fragment frag_shader SPIRV-ASM
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %main "main" %frexp_x_out %frexp_exp_out %frexpStruct_x_out %frexpStruct_exp_out %frexp_x_in %frexp_exp_in %frexpStruct_x_in %frexpStruct_exp_in
+               OpExecutionMode %main OriginUpperLeft
+               OpDecorate %frexp_x_out Location 0
+               OpDecorate %frexp_exp_out Location 1
+               OpDecorate %frexpStruct_x_out Location 2
+               OpDecorate %frexpStruct_exp_out Location 3
+               OpDecorate %frexp_x_in Flat
+               OpDecorate %frexp_x_in Location 0
+               OpDecorate %frexp_exp_in Flat
+               OpDecorate %frexp_exp_in Location 1
+               OpDecorate %frexpStruct_x_in Flat
+               OpDecorate %frexpStruct_x_in Location 2
+               OpDecorate %frexpStruct_exp_in Flat
+               OpDecorate %frexpStruct_exp_in Location 3
+       %void = OpTypeVoid
+          %3 = OpTypeFunction %void
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+%frexp_x_out = OpVariable %_ptr_Output_v4float Output
+    %float_0 = OpConstant %float 0
+    %float_1 = OpConstant %float 1
+         %12 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_1
+%frexp_exp_out = OpVariable %_ptr_Output_v4float Output
+%frexpStruct_x_out = OpVariable %_ptr_Output_v4float Output
+%frexpStruct_exp_out = OpVariable %_ptr_Output_v4float Output
+    %v2float = OpTypeVector %float 2
+%_ptr_Input_v2float = OpTypePointer Input %v2float
+ %frexp_x_in = OpVariable %_ptr_Input_v2float Input
+%frexp_exp_in = OpVariable %_ptr_Input_v2float Input
+%frexpStruct_x_in = OpVariable %_ptr_Input_v2float Input
+%frexpStruct_exp_in = OpVariable %_ptr_Input_v2float Input
+       %main = OpFunction %void None %3
+          %5 = OpLabel
+               OpStore %frexp_x_out %12
+               OpStore %frexp_exp_out %12
+               OpStore %frexpStruct_x_out %12
+               OpStore %frexpStruct_exp_out %12
+         %19 = OpLoad %v2float %frexp_x_in
+         %20 = OpLoad %v4float %frexp_x_out
+         %21 = OpVectorShuffle %v4float %20 %19 4 5 2 3
+               OpStore %frexp_x_out %21
+         %23 = OpLoad %v2float %frexp_exp_in
+         %24 = OpLoad %v4float %frexp_exp_out
+         %25 = OpVectorShuffle %v4float %24 %23 4 5 2 3
+               OpStore %frexp_exp_out %25
+         %27 = OpLoad %v2float %frexpStruct_x_in
+         %28 = OpLoad %v4float %frexpStruct_x_out
+         %29 = OpVectorShuffle %v4float %28 %27 4 5 2 3
+               OpStore %frexpStruct_x_out %29
+         %31 = OpLoad %v2float %frexpStruct_exp_in
+         %32 = OpLoad %v4float %frexpStruct_exp_out
+         %33 = OpVectorShuffle %v4float %32 %31 4 5 2 3
+               OpStore %frexpStruct_exp_out %33
+               OpReturn
+               OpFunctionEnd
+END
+
+BUFFER buf_in DATA_TYPE uint32 SIZE 1296 FILE TEXT input.txt
+BUFFER vertices DATA_TYPE vec2<float> SIZE 7776 FILE TEXT grid_vertices.txt
+
+BUFFER frexp_x FORMAT R32G32B32A32_SFLOAT
+BUFFER frexp_exp FORMAT R32G32B32A32_SFLOAT
+BUFFER frexpStruct_x FORMAT R32G32B32A32_SFLOAT
+BUFFER frexpStruct_exp FORMAT R32G32B32A32_SFLOAT
+
+PIPELINE graphics test_pipeline
+    FRAMEBUFFER_SIZE 144 144
+
+    ATTACH vert_shader
+    ATTACH tesc_shader
+    ATTACH tese_shader
+    ATTACH frag_shader
+
+    VERTEX_DATA vertices LOCATION 0
+
+    BIND BUFFER buf_in AS storage DESCRIPTOR_SET 0 BINDING 0
+    BIND BUFFER frexp_x AS color LOCATION 0
+    BIND BUFFER frexp_exp AS color LOCATION 1
+    BIND BUFFER frexpStruct_x AS color LOCATION 2
+    BIND BUFFER frexpStruct_exp AS color LOCATION 3
+END
+
+#RUN test_pipeline DRAW_GRID POS 0 0 SIZE 144 144 CELLS 144 144
+RUN test_pipeline DRAW_ARRAY AS PATCH_LIST START_IDX 0 COUNT 7776
+
+EXPECT frexp_x EQ_BUFFER frexpStruct_x
+EXPECT frexp_exp EQ_BUFFER frexpStruct_exp
diff --git a/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/frexpstruct_2_tese.amber b/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/frexpstruct_2_tese.amber
new file mode 100644
index 0000000..dadfad9
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/frexpstruct_2_tese.amber
@@ -0,0 +1,541 @@
+#!amber
+
+# Copyright 2021 Google LLC
+#
+# 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.
+
+# A tessellation evaluation shader test for FrexpStruct.
+
+DEVICE_FEATURE tessellationShader
+
+# SHADER vertex vert_shader GLSL
+# #version 430
+# precision highp float;
+#
+# const uint ndp = 1296;
+# const uint ndpSqrt = uint(sqrt(ndp));
+# const float halfGridElementSize = 1.0 / float(ndpSqrt);
+#
+# layout (location = 0) in vec2 position;
+# layout (location = 0) flat out uint ndx_out;
+#
+# void main ()
+# {
+#     uint xcoord = uint(ndpSqrt * ((position.x + halfGridElementSize + 1) / 2) - 1);
+#     uint ycoord = uint(ndpSqrt * ((position.y + halfGridElementSize + 1) / 2) - 1);
+#     ndx_out = xcoord + ycoord * ndpSqrt;
+#
+#     gl_Position = vec4(position, 0, 1);
+#
+#     return;
+# }
+# END
+
+SHADER vertex vert_shader SPIRV-ASM
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %main "main" %position %ndx_out %_
+               OpDecorate %position Location 0
+               OpDecorate %ndx_out Flat
+               OpDecorate %ndx_out Location 0
+               OpMemberDecorate %gl_PerVertex 0 BuiltIn Position
+               OpMemberDecorate %gl_PerVertex 1 BuiltIn PointSize
+               OpMemberDecorate %gl_PerVertex 2 BuiltIn ClipDistance
+               OpDecorate %gl_PerVertex Block
+       %void = OpTypeVoid
+          %3 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+      %float = OpTypeFloat 32
+    %v2float = OpTypeVector %float 2
+%_ptr_Input_v2float = OpTypePointer Input %v2float
+   %position = OpVariable %_ptr_Input_v2float Input
+     %uint_0 = OpConstant %uint 0
+%_ptr_Input_float = OpTypePointer Input %float
+    %float_1 = OpConstant %float 1
+     %uint_1 = OpConstant %uint 1
+%_ptr_Output_uint = OpTypePointer Output %uint
+    %ndx_out = OpVariable %_ptr_Output_uint Output
+    %uint_36 = OpConstant %uint 36
+    %v4float = OpTypeVector %float 4
+%_arr_float_uint_1 = OpTypeArray %float %uint_1
+%gl_PerVertex = OpTypeStruct %v4float %float %_arr_float_uint_1
+%_ptr_Output_gl_PerVertex = OpTypePointer Output %gl_PerVertex
+          %_ = OpVariable %_ptr_Output_gl_PerVertex Output
+        %int = OpTypeInt 32 1
+      %int_0 = OpConstant %int 0
+    %float_0 = OpConstant %float 0
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+%float_1_02777779 = OpConstant %float 1.02777779
+   %float_18 = OpConstant %float 18
+       %main = OpFunction %void None %3
+          %5 = OpLabel
+         %16 = OpAccessChain %_ptr_Input_float %position %uint_0
+         %17 = OpLoad %float %16
+         %21 = OpFAdd %float %17 %float_1_02777779
+         %24 = OpFMul %float %21 %float_18
+         %25 = OpFSub %float %24 %float_1
+         %26 = OpConvertFToU %uint %25
+         %29 = OpAccessChain %_ptr_Input_float %position %uint_1
+         %30 = OpLoad %float %29
+         %32 = OpFAdd %float %30 %float_1_02777779
+         %34 = OpFMul %float %32 %float_18
+         %35 = OpFSub %float %34 %float_1
+         %36 = OpConvertFToU %uint %35
+         %42 = OpIMul %uint %36 %uint_36
+         %43 = OpIAdd %uint %26 %42
+               OpStore %ndx_out %43
+         %51 = OpLoad %v2float %position
+         %53 = OpCompositeExtract %float %51 0
+         %54 = OpCompositeExtract %float %51 1
+         %55 = OpCompositeConstruct %v4float %53 %54 %float_0 %float_1
+         %57 = OpAccessChain %_ptr_Output_v4float %_ %int_0
+               OpStore %57 %55
+               OpReturn
+               OpFunctionEnd
+END
+
+# SHADER tessellation_control tesc_shader GLSL
+# #version 430
+# precision highp float;
+#
+# layout (vertices = 3) out;
+#
+# layout (location = 0) flat in uint ndx_in[];
+# layout (location = 0) flat out uint ndx_out[];
+#
+# void main ()
+# {
+#     gl_TessLevelInner[0]    = 1.0;
+#     gl_TessLevelInner[1]    = 1.0;
+#     gl_TessLevelOuter[0]    = 1.0;
+#     gl_TessLevelOuter[1]    = 1.0;
+#     gl_TessLevelOuter[2]    = 1.0;
+#     gl_TessLevelOuter[3]    = 1.0;
+#
+#     gl_out[gl_InvocationID].gl_Position = gl_in[gl_InvocationID].gl_Position;
+#     ndx_out[gl_InvocationID] = ndx_in[gl_InvocationID];
+# }
+# END
+
+SHADER tessellation_control tesc_shader SPIRV-ASM
+               OpCapability Tessellation
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint TessellationControl %main "main" %gl_TessLevelInner %gl_TessLevelOuter %gl_out %gl_InvocationID %gl_in %ndx_out %ndx_in
+               OpExecutionMode %main OutputVertices 3
+               OpDecorate %gl_TessLevelInner Patch
+               OpDecorate %gl_TessLevelInner BuiltIn TessLevelInner
+               OpDecorate %gl_TessLevelOuter Patch
+               OpDecorate %gl_TessLevelOuter BuiltIn TessLevelOuter
+               OpMemberDecorate %gl_PerVertex 0 BuiltIn Position
+               OpMemberDecorate %gl_PerVertex 1 BuiltIn PointSize
+               OpMemberDecorate %gl_PerVertex 2 BuiltIn ClipDistance
+               OpDecorate %gl_PerVertex Block
+               OpDecorate %gl_InvocationID BuiltIn InvocationId
+               OpMemberDecorate %gl_PerVertex_0 0 BuiltIn Position
+               OpMemberDecorate %gl_PerVertex_0 1 BuiltIn PointSize
+               OpMemberDecorate %gl_PerVertex_0 2 BuiltIn ClipDistance
+               OpDecorate %gl_PerVertex_0 Block
+               OpDecorate %ndx_out Flat
+               OpDecorate %ndx_out Location 0
+               OpDecorate %ndx_in Flat
+               OpDecorate %ndx_in Location 0
+       %void = OpTypeVoid
+          %3 = OpTypeFunction %void
+      %float = OpTypeFloat 32
+       %uint = OpTypeInt 32 0
+     %uint_2 = OpConstant %uint 2
+%_arr_float_uint_2 = OpTypeArray %float %uint_2
+%_ptr_Output__arr_float_uint_2 = OpTypePointer Output %_arr_float_uint_2
+%gl_TessLevelInner = OpVariable %_ptr_Output__arr_float_uint_2 Output
+        %int = OpTypeInt 32 1
+      %int_0 = OpConstant %int 0
+    %float_1 = OpConstant %float 1
+%_ptr_Output_float = OpTypePointer Output %float
+      %int_1 = OpConstant %int 1
+     %uint_4 = OpConstant %uint 4
+%_arr_float_uint_4 = OpTypeArray %float %uint_4
+%_ptr_Output__arr_float_uint_4 = OpTypePointer Output %_arr_float_uint_4
+%gl_TessLevelOuter = OpVariable %_ptr_Output__arr_float_uint_4 Output
+      %int_2 = OpConstant %int 2
+      %int_3 = OpConstant %int 3
+    %v4float = OpTypeVector %float 4
+     %uint_1 = OpConstant %uint 1
+%_arr_float_uint_1 = OpTypeArray %float %uint_1
+%gl_PerVertex = OpTypeStruct %v4float %float %_arr_float_uint_1
+     %uint_3 = OpConstant %uint 3
+%_arr_gl_PerVertex_uint_3 = OpTypeArray %gl_PerVertex %uint_3
+%_ptr_Output__arr_gl_PerVertex_uint_3 = OpTypePointer Output %_arr_gl_PerVertex_uint_3
+     %gl_out = OpVariable %_ptr_Output__arr_gl_PerVertex_uint_3 Output
+%_ptr_Input_int = OpTypePointer Input %int
+%gl_InvocationID = OpVariable %_ptr_Input_int Input
+%gl_PerVertex_0 = OpTypeStruct %v4float %float %_arr_float_uint_1
+    %uint_32 = OpConstant %uint 32
+%_arr_gl_PerVertex_0_uint_32 = OpTypeArray %gl_PerVertex_0 %uint_32
+%_ptr_Input__arr_gl_PerVertex_0_uint_32 = OpTypePointer Input %_arr_gl_PerVertex_0_uint_32
+      %gl_in = OpVariable %_ptr_Input__arr_gl_PerVertex_0_uint_32 Input
+%_ptr_Input_v4float = OpTypePointer Input %v4float
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+%_arr_uint_uint_3 = OpTypeArray %uint %uint_3
+%_ptr_Output__arr_uint_uint_3 = OpTypePointer Output %_arr_uint_uint_3
+    %ndx_out = OpVariable %_ptr_Output__arr_uint_uint_3 Output
+%_arr_uint_uint_32 = OpTypeArray %uint %uint_32
+%_ptr_Input__arr_uint_uint_32 = OpTypePointer Input %_arr_uint_uint_32
+     %ndx_in = OpVariable %_ptr_Input__arr_uint_uint_32 Input
+%_ptr_Input_uint = OpTypePointer Input %uint
+%_ptr_Output_uint = OpTypePointer Output %uint
+       %main = OpFunction %void None %3
+          %5 = OpLabel
+         %16 = OpAccessChain %_ptr_Output_float %gl_TessLevelInner %int_0
+               OpStore %16 %float_1
+         %18 = OpAccessChain %_ptr_Output_float %gl_TessLevelInner %int_1
+               OpStore %18 %float_1
+         %23 = OpAccessChain %_ptr_Output_float %gl_TessLevelOuter %int_0
+               OpStore %23 %float_1
+         %24 = OpAccessChain %_ptr_Output_float %gl_TessLevelOuter %int_1
+               OpStore %24 %float_1
+         %26 = OpAccessChain %_ptr_Output_float %gl_TessLevelOuter %int_2
+               OpStore %26 %float_1
+         %28 = OpAccessChain %_ptr_Output_float %gl_TessLevelOuter %int_3
+               OpStore %28 %float_1
+         %39 = OpLoad %int %gl_InvocationID
+         %47 = OpAccessChain %_ptr_Input_v4float %gl_in %39 %int_0
+         %48 = OpLoad %v4float %47
+         %50 = OpAccessChain %_ptr_Output_v4float %gl_out %39 %int_0
+               OpStore %50 %48
+         %60 = OpAccessChain %_ptr_Input_uint %ndx_in %39
+         %61 = OpLoad %uint %60
+         %63 = OpAccessChain %_ptr_Output_uint %ndx_out %39
+               OpStore %63 %61
+               OpReturn
+               OpFunctionEnd
+END
+
+# SHADER tessellation_evaluation tese_shader GLSL
+# #version 430
+# precision highp float;
+#
+# const uint ndp = 1296;
+#
+# layout (triangles) in;
+#
+# layout (location = 0) flat in uint ndx_in[];
+# layout (location = 0) flat out vec2 frexp_x_out;
+# layout (location = 1) flat out vec2 frexp_exp_out;
+# layout (location = 2) flat out vec2 frexpStruct_x_out;
+# layout (location = 3) flat out vec2 frexpStruct_exp_out;
+#
+# layout(set = 0, binding = 0) readonly buffer block0 {
+#     uvec2 in_values[ndp];
+# };
+#
+# struct frexpStructType
+# {
+#     vec2 x;
+#     ivec2 exp;
+# };
+#
+# // Replaced with native function in SPIR-V.
+# frexpStructType frexpStruct (vec2 orig)
+# {
+#     vec2 x;
+#     ivec2 exp;
+#     x = frexp(orig, exp);
+#     frexpStructType res = { x, exp };
+#     return res;
+# }
+#
+# void main ()
+# {
+#     gl_Position = gl_TessCoord.x * gl_in[0].gl_Position +
+#                   gl_TessCoord.y * gl_in[1].gl_Position +
+#                   gl_TessCoord.z * gl_in[2].gl_Position;
+#
+#     uvec2 in_uint = in_values[ndx_in[0]];
+#     vec2 in_float = uintBitsToFloat(in_uint);
+#     vec2 x;
+#     ivec2 exp;
+#     frexpStructType res;
+#
+#     x = frexp(in_float, exp);
+#     res = frexpStruct(in_float);
+#
+#     frexp_x_out = x;
+#     frexp_exp_out = intBitsToFloat(exp);
+#     frexpStruct_x_out = res.x;
+#     frexpStruct_exp_out = intBitsToFloat(res.exp);
+# }
+# END
+
+SHADER tessellation_evaluation tese_shader SPIRV-ASM
+               OpCapability Tessellation
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint TessellationEvaluation %main "main" %_ %gl_TessCoord %gl_in %ndx_in %frexp_x_out %frexp_exp_out %frexpStruct_x_out %frexpStruct_exp_out
+               OpExecutionMode %main Triangles
+               OpExecutionMode %main SpacingEqual
+               OpExecutionMode %main VertexOrderCcw
+               OpMemberDecorate %gl_PerVertex 0 BuiltIn Position
+               OpMemberDecorate %gl_PerVertex 1 BuiltIn PointSize
+               OpMemberDecorate %gl_PerVertex 2 BuiltIn ClipDistance
+               OpDecorate %gl_PerVertex Block
+               OpDecorate %gl_TessCoord BuiltIn TessCoord
+               OpMemberDecorate %gl_PerVertex_0 0 BuiltIn Position
+               OpMemberDecorate %gl_PerVertex_0 1 BuiltIn PointSize
+               OpMemberDecorate %gl_PerVertex_0 2 BuiltIn ClipDistance
+               OpDecorate %gl_PerVertex_0 Block
+               OpDecorate %_arr_v2uint_uint_1296 ArrayStride 8
+               OpMemberDecorate %block0 0 NonWritable
+               OpMemberDecorate %block0 0 Offset 0
+               OpDecorate %block0 BufferBlock
+               OpDecorate %__0 DescriptorSet 0
+               OpDecorate %__0 Binding 0
+               OpDecorate %ndx_in Flat
+               OpDecorate %ndx_in Location 0
+               OpDecorate %frexp_x_out Flat
+               OpDecorate %frexp_x_out Location 0
+               OpDecorate %frexp_exp_out Flat
+               OpDecorate %frexp_exp_out Location 1
+               OpDecorate %frexpStruct_x_out Flat
+               OpDecorate %frexpStruct_x_out Location 2
+               OpDecorate %frexpStruct_exp_out Flat
+               OpDecorate %frexpStruct_exp_out Location 3
+       %void = OpTypeVoid
+          %3 = OpTypeFunction %void
+      %float = OpTypeFloat 32
+    %v2float = OpTypeVector %float 2
+%_ptr_Function_v2float = OpTypePointer Function %v2float
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+%frexpStructType = OpTypeStruct %v2float %v2int
+         %12 = OpTypeFunction %frexpStructType %_ptr_Function_v2float
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+%_ptr_Function_frexpStructType = OpTypePointer Function %frexpStructType
+    %v4float = OpTypeVector %float 4
+       %uint = OpTypeInt 32 0
+     %uint_1 = OpConstant %uint 1
+%_arr_float_uint_1 = OpTypeArray %float %uint_1
+%gl_PerVertex = OpTypeStruct %v4float %float %_arr_float_uint_1
+%_ptr_Output_gl_PerVertex = OpTypePointer Output %gl_PerVertex
+          %_ = OpVariable %_ptr_Output_gl_PerVertex Output
+      %int_0 = OpConstant %int 0
+    %v3float = OpTypeVector %float 3
+%_ptr_Input_v3float = OpTypePointer Input %v3float
+%gl_TessCoord = OpVariable %_ptr_Input_v3float Input
+     %uint_0 = OpConstant %uint 0
+%_ptr_Input_float = OpTypePointer Input %float
+%gl_PerVertex_0 = OpTypeStruct %v4float %float %_arr_float_uint_1
+    %uint_32 = OpConstant %uint 32
+%_arr_gl_PerVertex_0_uint_32 = OpTypeArray %gl_PerVertex_0 %uint_32
+%_ptr_Input__arr_gl_PerVertex_0_uint_32 = OpTypePointer Input %_arr_gl_PerVertex_0_uint_32
+      %gl_in = OpVariable %_ptr_Input__arr_gl_PerVertex_0_uint_32 Input
+%_ptr_Input_v4float = OpTypePointer Input %v4float
+      %int_1 = OpConstant %int 1
+     %uint_2 = OpConstant %uint 2
+      %int_2 = OpConstant %int 2
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+     %v2uint = OpTypeVector %uint 2
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+  %uint_1296 = OpConstant %uint 1296
+%_arr_v2uint_uint_1296 = OpTypeArray %v2uint %uint_1296
+     %block0 = OpTypeStruct %_arr_v2uint_uint_1296
+%_ptr_Uniform_block0 = OpTypePointer Uniform %block0
+        %__0 = OpVariable %_ptr_Uniform_block0 Uniform
+%_arr_uint_uint_32 = OpTypeArray %uint %uint_32
+%_ptr_Input__arr_uint_uint_32 = OpTypePointer Input %_arr_uint_uint_32
+     %ndx_in = OpVariable %_ptr_Input__arr_uint_uint_32 Input
+%_ptr_Input_uint = OpTypePointer Input %uint
+%_ptr_Uniform_v2uint = OpTypePointer Uniform %v2uint
+%_ptr_Output_v2float = OpTypePointer Output %v2float
+%frexp_x_out = OpVariable %_ptr_Output_v2float Output
+%frexp_exp_out = OpVariable %_ptr_Output_v2float Output
+%frexpStruct_x_out = OpVariable %_ptr_Output_v2float Output
+%frexpStruct_exp_out = OpVariable %_ptr_Output_v2float Output
+       %main = OpFunction %void None %3
+          %5 = OpLabel
+    %in_uint = OpVariable %_ptr_Function_v2uint Function
+   %in_float = OpVariable %_ptr_Function_v2float Function
+        %x_0 = OpVariable %_ptr_Function_v2float Function
+      %exp_0 = OpVariable %_ptr_Function_v2int Function
+      %res_0 = OpVariable %_ptr_Function_frexpStructType Function
+         %42 = OpAccessChain %_ptr_Input_float %gl_TessCoord %uint_0
+         %43 = OpLoad %float %42
+         %50 = OpAccessChain %_ptr_Input_v4float %gl_in %int_0 %int_0
+         %51 = OpLoad %v4float %50
+         %52 = OpVectorTimesScalar %v4float %51 %43
+         %53 = OpAccessChain %_ptr_Input_float %gl_TessCoord %uint_1
+         %54 = OpLoad %float %53
+         %56 = OpAccessChain %_ptr_Input_v4float %gl_in %int_1 %int_0
+         %57 = OpLoad %v4float %56
+         %58 = OpVectorTimesScalar %v4float %57 %54
+         %59 = OpFAdd %v4float %52 %58
+         %61 = OpAccessChain %_ptr_Input_float %gl_TessCoord %uint_2
+         %62 = OpLoad %float %61
+         %64 = OpAccessChain %_ptr_Input_v4float %gl_in %int_2 %int_0
+         %65 = OpLoad %v4float %64
+         %66 = OpVectorTimesScalar %v4float %65 %62
+         %67 = OpFAdd %v4float %59 %66
+         %69 = OpAccessChain %_ptr_Output_v4float %_ %int_0
+               OpStore %69 %67
+         %82 = OpAccessChain %_ptr_Input_uint %ndx_in %int_0
+         %83 = OpLoad %uint %82
+         %85 = OpAccessChain %_ptr_Uniform_v2uint %__0 %int_0 %83
+         %86 = OpLoad %v2uint %85
+               OpStore %in_uint %86
+         %88 = OpLoad %v2uint %in_uint
+         %89 = OpBitcast %v2float %88
+               OpStore %in_float %89
+         %91 = OpLoad %v2float %in_float
+         %93 = OpExtInst %v2float %1 Frexp %91 %exp_0
+               OpStore %x_0 %93
+         %96 = OpLoad %v2float %in_float
+         %97 = OpExtInst %frexpStructType %1 FrexpStruct %96
+               OpStore %res_0 %97
+        %100 = OpLoad %v2float %x_0
+               OpStore %frexp_x_out %100
+        %102 = OpLoad %v2int %exp_0
+        %103 = OpBitcast %v2float %102
+               OpStore %frexp_exp_out %103
+        %105 = OpAccessChain %_ptr_Function_v2float %res_0 %int_0
+        %106 = OpLoad %v2float %105
+               OpStore %frexpStruct_x_out %106
+        %108 = OpAccessChain %_ptr_Function_v2int %res_0 %int_1
+        %109 = OpLoad %v2int %108
+        %110 = OpBitcast %v2float %109
+               OpStore %frexpStruct_exp_out %110
+               OpReturn
+               OpFunctionEnd
+END
+
+# SHADER fragment frag_shader GLSL
+# #version 430
+# precision highp float;
+#
+# layout (location = 0) flat in vec2 frexp_x_in;
+# layout (location = 1) flat in vec2 frexp_exp_in;
+# layout (location = 2) flat in vec2 frexpStruct_x_in;
+# layout (location = 3) flat in vec2 frexpStruct_exp_in;
+#
+# layout (location = 0) out vec4 frexp_x_out;
+# layout (location = 1) out vec4 frexp_exp_out;
+# layout (location = 2) out vec4 frexpStruct_x_out;
+# layout (location = 3) out vec4 frexpStruct_exp_out;
+#
+# const vec4 clear_value = vec4(0.0, 0.0, 0.0, 1.0);
+#
+# void main ()
+# {
+#     frexp_x_out = clear_value;
+#     frexp_exp_out = clear_value;
+#     frexpStruct_x_out = clear_value;
+#     frexpStruct_exp_out = clear_value;
+#     frexp_x_out.rg = frexp_x_in;
+#     frexp_exp_out.rg = frexp_exp_in;
+#     frexpStruct_x_out.rg = frexpStruct_x_in;
+#     frexpStruct_exp_out.rg = frexpStruct_exp_in;
+# }
+# END
+
+SHADER fragment frag_shader SPIRV-ASM
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %main "main" %frexp_x_out %frexp_exp_out %frexpStruct_x_out %frexpStruct_exp_out %frexp_x_in %frexp_exp_in %frexpStruct_x_in %frexpStruct_exp_in
+               OpExecutionMode %main OriginUpperLeft
+               OpDecorate %frexp_x_out Location 0
+               OpDecorate %frexp_exp_out Location 1
+               OpDecorate %frexpStruct_x_out Location 2
+               OpDecorate %frexpStruct_exp_out Location 3
+               OpDecorate %frexp_x_in Flat
+               OpDecorate %frexp_x_in Location 0
+               OpDecorate %frexp_exp_in Flat
+               OpDecorate %frexp_exp_in Location 1
+               OpDecorate %frexpStruct_x_in Flat
+               OpDecorate %frexpStruct_x_in Location 2
+               OpDecorate %frexpStruct_exp_in Flat
+               OpDecorate %frexpStruct_exp_in Location 3
+       %void = OpTypeVoid
+          %3 = OpTypeFunction %void
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+%frexp_x_out = OpVariable %_ptr_Output_v4float Output
+    %float_0 = OpConstant %float 0
+    %float_1 = OpConstant %float 1
+         %12 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_1
+%frexp_exp_out = OpVariable %_ptr_Output_v4float Output
+%frexpStruct_x_out = OpVariable %_ptr_Output_v4float Output
+%frexpStruct_exp_out = OpVariable %_ptr_Output_v4float Output
+    %v2float = OpTypeVector %float 2
+%_ptr_Input_v2float = OpTypePointer Input %v2float
+ %frexp_x_in = OpVariable %_ptr_Input_v2float Input
+%frexp_exp_in = OpVariable %_ptr_Input_v2float Input
+%frexpStruct_x_in = OpVariable %_ptr_Input_v2float Input
+%frexpStruct_exp_in = OpVariable %_ptr_Input_v2float Input
+       %main = OpFunction %void None %3
+          %5 = OpLabel
+               OpStore %frexp_x_out %12
+               OpStore %frexp_exp_out %12
+               OpStore %frexpStruct_x_out %12
+               OpStore %frexpStruct_exp_out %12
+         %19 = OpLoad %v2float %frexp_x_in
+         %20 = OpLoad %v4float %frexp_x_out
+         %21 = OpVectorShuffle %v4float %20 %19 4 5 2 3
+               OpStore %frexp_x_out %21
+         %23 = OpLoad %v2float %frexp_exp_in
+         %24 = OpLoad %v4float %frexp_exp_out
+         %25 = OpVectorShuffle %v4float %24 %23 4 5 2 3
+               OpStore %frexp_exp_out %25
+         %27 = OpLoad %v2float %frexpStruct_x_in
+         %28 = OpLoad %v4float %frexpStruct_x_out
+         %29 = OpVectorShuffle %v4float %28 %27 4 5 2 3
+               OpStore %frexpStruct_x_out %29
+         %31 = OpLoad %v2float %frexpStruct_exp_in
+         %32 = OpLoad %v4float %frexpStruct_exp_out
+         %33 = OpVectorShuffle %v4float %32 %31 4 5 2 3
+               OpStore %frexpStruct_exp_out %33
+               OpReturn
+               OpFunctionEnd
+END
+
+BUFFER buf_in DATA_TYPE uint32 SIZE 1296 FILE TEXT input.txt
+BUFFER vertices DATA_TYPE vec2<float> SIZE 7776 FILE TEXT grid_vertices.txt
+
+BUFFER frexp_x FORMAT R32G32B32A32_SFLOAT
+BUFFER frexp_exp FORMAT R32G32B32A32_SFLOAT
+BUFFER frexpStruct_x FORMAT R32G32B32A32_SFLOAT
+BUFFER frexpStruct_exp FORMAT R32G32B32A32_SFLOAT
+
+PIPELINE graphics test_pipeline
+    FRAMEBUFFER_SIZE 144 144
+
+    ATTACH vert_shader
+    ATTACH tesc_shader
+    ATTACH tese_shader
+    ATTACH frag_shader
+
+    VERTEX_DATA vertices LOCATION 0
+
+    BIND BUFFER buf_in AS storage DESCRIPTOR_SET 0 BINDING 0
+    BIND BUFFER frexp_x AS color LOCATION 0
+    BIND BUFFER frexp_exp AS color LOCATION 1
+    BIND BUFFER frexpStruct_x AS color LOCATION 2
+    BIND BUFFER frexpStruct_exp AS color LOCATION 3
+END
+
+#RUN test_pipeline DRAW_GRID POS 0 0 SIZE 144 144 CELLS 144 144
+RUN test_pipeline DRAW_ARRAY AS PATCH_LIST START_IDX 0 COUNT 7776
+
+EXPECT frexp_x EQ_BUFFER frexpStruct_x
+EXPECT frexp_exp EQ_BUFFER frexpStruct_exp
diff --git a/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/frexpstruct_2_vert.amber b/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/frexpstruct_2_vert.amber
new file mode 100644
index 0000000..31d38bd
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/frexpstruct_2_vert.amber
@@ -0,0 +1,333 @@
+#!amber
+
+# Copyright 2021 Google LLC
+#
+# 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.
+
+# A vertex shader test for FrexpStruct.
+
+# SHADER vertex vert_shader GLSL
+# #version 430
+# precision highp float;
+#
+# const uint ndp = 1296;
+# const uint ndpSqrt = uint(sqrt(ndp));
+# const float halfGridElementSize = 1.0 / float(ndpSqrt);
+#
+# layout (location = 0) in vec2 position;
+# layout (location = 0) flat out vec2 frexp_x_out;
+# layout (location = 1) flat out vec2 frexp_exp_out;
+# layout (location = 2) flat out vec2 frexpStruct_x_out;
+# layout (location = 3) flat out vec2 frexpStruct_exp_out;
+#
+# layout(set = 0, binding = 0) readonly buffer block0 {
+#     uvec2 in_values[ndp];
+# };
+#
+# struct frexpStructType
+# {
+#     vec2 x;
+#     ivec2 exp;
+# };
+#
+# // Replaced with native function in SPIR-V.
+# frexpStructType frexpStruct (vec2 orig)
+# {
+#     vec2 x;
+#     ivec2 exp;
+#     x = frexp(orig, exp);
+#     frexpStructType res = { x, exp };
+#     return res;
+# }
+#
+# void main ()
+# {
+#     uint xcoord = uint(ndpSqrt * ((position.x + halfGridElementSize + 1) / 2) - 1);
+#     uint ycoord = uint(ndpSqrt * ((position.y + halfGridElementSize + 1) / 2) - 1);
+#     uint ndx = xcoord + ycoord * ndpSqrt;
+#
+#     uvec2 in_uint = in_values[ndx];
+#     vec2 in_float = uintBitsToFloat(in_uint);
+#     vec2 x;
+#     ivec2 exp;
+#     frexpStructType res;
+#
+#     x = frexp(in_float, exp);
+#     res = frexpStruct(in_float);
+#
+#     frexp_x_out = x;
+#     frexp_exp_out = intBitsToFloat(exp);
+#     frexpStruct_x_out = res.x;
+#     frexpStruct_exp_out = intBitsToFloat(res.exp);
+#
+#     gl_Position = vec4(position, 0, 1);
+#
+#     return;
+# }
+# END
+
+SHADER vertex vert_shader SPIRV-ASM
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %main "main" %position %frexp_x_out %frexp_exp_out %frexpStruct_x_out %frexpStruct_exp_out %__0
+               OpDecorate %position Location 0
+               OpDecorate %_arr_v2uint_uint_1296 ArrayStride 8
+               OpMemberDecorate %block0 0 NonWritable
+               OpMemberDecorate %block0 0 Offset 0
+               OpDecorate %block0 BufferBlock
+               OpDecorate %_ DescriptorSet 0
+               OpDecorate %_ Binding 0
+               OpDecorate %frexp_x_out Flat
+               OpDecorate %frexp_x_out Location 0
+               OpDecorate %frexp_exp_out Flat
+               OpDecorate %frexp_exp_out Location 1
+               OpDecorate %frexpStruct_x_out Flat
+               OpDecorate %frexpStruct_x_out Location 2
+               OpDecorate %frexpStruct_exp_out Flat
+               OpDecorate %frexpStruct_exp_out Location 3
+               OpMemberDecorate %gl_PerVertex 0 BuiltIn Position
+               OpMemberDecorate %gl_PerVertex 1 BuiltIn PointSize
+               OpMemberDecorate %gl_PerVertex 2 BuiltIn ClipDistance
+               OpDecorate %gl_PerVertex Block
+       %void = OpTypeVoid
+          %3 = OpTypeFunction %void
+      %float = OpTypeFloat 32
+    %v2float = OpTypeVector %float 2
+%_ptr_Function_v2float = OpTypePointer Function %v2float
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+%frexpStructType = OpTypeStruct %v2float %v2int
+         %12 = OpTypeFunction %frexpStructType %_ptr_Function_v2float
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+%_ptr_Function_frexpStructType = OpTypePointer Function %frexpStructType
+       %uint = OpTypeInt 32 0
+%_ptr_Function_uint = OpTypePointer Function %uint
+   %float_36 = OpConstant %float 36
+%_ptr_Input_v2float = OpTypePointer Input %v2float
+   %position = OpVariable %_ptr_Input_v2float Input
+     %uint_0 = OpConstant %uint 0
+%_ptr_Input_float = OpTypePointer Input %float
+%float_0_027777778 = OpConstant %float 0.027777778
+    %float_1 = OpConstant %float 1
+    %float_2 = OpConstant %float 2
+     %uint_1 = OpConstant %uint 1
+    %uint_36 = OpConstant %uint 36
+     %v2uint = OpTypeVector %uint 2
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+  %uint_1296 = OpConstant %uint 1296
+%_arr_v2uint_uint_1296 = OpTypeArray %v2uint %uint_1296
+     %block0 = OpTypeStruct %_arr_v2uint_uint_1296
+%_ptr_Uniform_block0 = OpTypePointer Uniform %block0
+          %_ = OpVariable %_ptr_Uniform_block0 Uniform
+      %int_0 = OpConstant %int 0
+%_ptr_Uniform_v2uint = OpTypePointer Uniform %v2uint
+%_ptr_Output_v2float = OpTypePointer Output %v2float
+%frexp_x_out = OpVariable %_ptr_Output_v2float Output
+%frexp_exp_out = OpVariable %_ptr_Output_v2float Output
+%frexpStruct_x_out = OpVariable %_ptr_Output_v2float Output
+%frexpStruct_exp_out = OpVariable %_ptr_Output_v2float Output
+      %int_1 = OpConstant %int 1
+    %v4float = OpTypeVector %float 4
+%_arr_float_uint_1 = OpTypeArray %float %uint_1
+%gl_PerVertex = OpTypeStruct %v4float %float %_arr_float_uint_1
+%_ptr_Output_gl_PerVertex = OpTypePointer Output %gl_PerVertex
+        %__0 = OpVariable %_ptr_Output_gl_PerVertex Output
+    %float_0 = OpConstant %float 0
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+       %main = OpFunction %void None %3
+          %5 = OpLabel
+     %xcoord = OpVariable %_ptr_Function_uint Function
+     %ycoord = OpVariable %_ptr_Function_uint Function
+        %ndx = OpVariable %_ptr_Function_uint Function
+    %in_uint = OpVariable %_ptr_Function_v2uint Function
+   %in_float = OpVariable %_ptr_Function_v2float Function
+        %x_0 = OpVariable %_ptr_Function_v2float Function
+      %exp_0 = OpVariable %_ptr_Function_v2int Function
+      %res_0 = OpVariable %_ptr_Function_frexpStructType Function
+         %37 = OpAccessChain %_ptr_Input_float %position %uint_0
+         %38 = OpLoad %float %37
+         %40 = OpFAdd %float %38 %float_0_027777778
+         %42 = OpFAdd %float %40 %float_1
+         %44 = OpFDiv %float %42 %float_2
+         %45 = OpFMul %float %float_36 %44
+         %46 = OpFSub %float %45 %float_1
+         %47 = OpConvertFToU %uint %46
+               OpStore %xcoord %47
+         %50 = OpAccessChain %_ptr_Input_float %position %uint_1
+         %51 = OpLoad %float %50
+         %52 = OpFAdd %float %51 %float_0_027777778
+         %53 = OpFAdd %float %52 %float_1
+         %54 = OpFDiv %float %53 %float_2
+         %55 = OpFMul %float %float_36 %54
+         %56 = OpFSub %float %55 %float_1
+         %57 = OpConvertFToU %uint %56
+               OpStore %ycoord %57
+         %59 = OpLoad %uint %xcoord
+         %60 = OpLoad %uint %ycoord
+         %62 = OpIMul %uint %60 %uint_36
+         %63 = OpIAdd %uint %59 %62
+               OpStore %ndx %63
+         %73 = OpLoad %uint %ndx
+         %75 = OpAccessChain %_ptr_Uniform_v2uint %_ %int_0 %73
+         %76 = OpLoad %v2uint %75
+               OpStore %in_uint %76
+         %78 = OpLoad %v2uint %in_uint
+         %79 = OpBitcast %v2float %78
+               OpStore %in_float %79
+         %81 = OpLoad %v2float %in_float
+         %83 = OpExtInst %v2float %1 Frexp %81 %exp_0
+               OpStore %x_0 %83
+         %86 = OpLoad %v2float %in_float
+         %87 = OpExtInst %frexpStructType %1 FrexpStruct %86
+               OpStore %res_0 %87
+         %90 = OpLoad %v2float %x_0
+               OpStore %frexp_x_out %90
+         %92 = OpLoad %v2int %exp_0
+         %93 = OpBitcast %v2float %92
+               OpStore %frexp_exp_out %93
+         %95 = OpAccessChain %_ptr_Function_v2float %res_0 %int_0
+         %96 = OpLoad %v2float %95
+               OpStore %frexpStruct_x_out %96
+         %99 = OpAccessChain %_ptr_Function_v2int %res_0 %int_1
+        %100 = OpLoad %v2int %99
+        %101 = OpBitcast %v2float %100
+               OpStore %frexpStruct_exp_out %101
+        %107 = OpLoad %v2float %position
+        %109 = OpCompositeExtract %float %107 0
+        %110 = OpCompositeExtract %float %107 1
+        %111 = OpCompositeConstruct %v4float %109 %110 %float_0 %float_1
+        %113 = OpAccessChain %_ptr_Output_v4float %__0 %int_0
+               OpStore %113 %111
+               OpReturn
+               OpFunctionEnd
+END
+
+# SHADER fragment frag_shader GLSL
+# #version 430
+# precision highp float;
+#
+# layout (location = 0) flat in vec2 frexp_x_in;
+# layout (location = 1) flat in vec2 frexp_exp_in;
+# layout (location = 2) flat in vec2 frexpStruct_x_in;
+# layout (location = 3) flat in vec2 frexpStruct_exp_in;
+#
+# layout (location = 0) out vec4 frexp_x_out;
+# layout (location = 1) out vec4 frexp_exp_out;
+# layout (location = 2) out vec4 frexpStruct_x_out;
+# layout (location = 3) out vec4 frexpStruct_exp_out;
+#
+# const vec4 clear_value = vec4(0.0, 0.0, 0.0, 1.0);
+#
+# void main ()
+# {
+#     frexp_x_out = clear_value;
+#     frexp_exp_out = clear_value;
+#     frexpStruct_x_out = clear_value;
+#     frexpStruct_exp_out = clear_value;
+#     frexp_x_out.rg = frexp_x_in;
+#     frexp_exp_out.rg = frexp_exp_in;
+#     frexpStruct_x_out.rg = frexpStruct_x_in;
+#     frexpStruct_exp_out.rg = frexpStruct_exp_in;
+# }
+# END
+
+SHADER fragment frag_shader SPIRV-ASM
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %main "main" %frexp_x_out %frexp_exp_out %frexpStruct_x_out %frexpStruct_exp_out %frexp_x_in %frexp_exp_in %frexpStruct_x_in %frexpStruct_exp_in
+               OpExecutionMode %main OriginUpperLeft
+               OpDecorate %frexp_x_out Location 0
+               OpDecorate %frexp_exp_out Location 1
+               OpDecorate %frexpStruct_x_out Location 2
+               OpDecorate %frexpStruct_exp_out Location 3
+               OpDecorate %frexp_x_in Flat
+               OpDecorate %frexp_x_in Location 0
+               OpDecorate %frexp_exp_in Flat
+               OpDecorate %frexp_exp_in Location 1
+               OpDecorate %frexpStruct_x_in Flat
+               OpDecorate %frexpStruct_x_in Location 2
+               OpDecorate %frexpStruct_exp_in Flat
+               OpDecorate %frexpStruct_exp_in Location 3
+       %void = OpTypeVoid
+          %3 = OpTypeFunction %void
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+%frexp_x_out = OpVariable %_ptr_Output_v4float Output
+    %float_0 = OpConstant %float 0
+    %float_1 = OpConstant %float 1
+         %12 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_1
+%frexp_exp_out = OpVariable %_ptr_Output_v4float Output
+%frexpStruct_x_out = OpVariable %_ptr_Output_v4float Output
+%frexpStruct_exp_out = OpVariable %_ptr_Output_v4float Output
+    %v2float = OpTypeVector %float 2
+%_ptr_Input_v2float = OpTypePointer Input %v2float
+ %frexp_x_in = OpVariable %_ptr_Input_v2float Input
+%frexp_exp_in = OpVariable %_ptr_Input_v2float Input
+%frexpStruct_x_in = OpVariable %_ptr_Input_v2float Input
+%frexpStruct_exp_in = OpVariable %_ptr_Input_v2float Input
+       %main = OpFunction %void None %3
+          %5 = OpLabel
+               OpStore %frexp_x_out %12
+               OpStore %frexp_exp_out %12
+               OpStore %frexpStruct_x_out %12
+               OpStore %frexpStruct_exp_out %12
+         %19 = OpLoad %v2float %frexp_x_in
+         %20 = OpLoad %v4float %frexp_x_out
+         %21 = OpVectorShuffle %v4float %20 %19 4 5 2 3
+               OpStore %frexp_x_out %21
+         %23 = OpLoad %v2float %frexp_exp_in
+         %24 = OpLoad %v4float %frexp_exp_out
+         %25 = OpVectorShuffle %v4float %24 %23 4 5 2 3
+               OpStore %frexp_exp_out %25
+         %27 = OpLoad %v2float %frexpStruct_x_in
+         %28 = OpLoad %v4float %frexpStruct_x_out
+         %29 = OpVectorShuffle %v4float %28 %27 4 5 2 3
+               OpStore %frexpStruct_x_out %29
+         %31 = OpLoad %v2float %frexpStruct_exp_in
+         %32 = OpLoad %v4float %frexpStruct_exp_out
+         %33 = OpVectorShuffle %v4float %32 %31 4 5 2 3
+               OpStore %frexpStruct_exp_out %33
+               OpReturn
+               OpFunctionEnd
+END
+
+BUFFER buf_in DATA_TYPE uint32 SIZE 1296 FILE TEXT input.txt
+BUFFER vertices DATA_TYPE vec2<float> SIZE 7776 FILE TEXT grid_vertices.txt
+
+BUFFER frexp_x FORMAT R32G32B32A32_SFLOAT
+BUFFER frexp_exp FORMAT R32G32B32A32_SFLOAT
+BUFFER frexpStruct_x FORMAT R32G32B32A32_SFLOAT
+BUFFER frexpStruct_exp FORMAT R32G32B32A32_SFLOAT
+
+PIPELINE graphics test_pipeline
+    FRAMEBUFFER_SIZE 144 144
+
+    ATTACH vert_shader
+    ATTACH frag_shader
+
+    VERTEX_DATA vertices LOCATION 0
+
+    BIND BUFFER buf_in AS storage DESCRIPTOR_SET 0 BINDING 0
+    BIND BUFFER frexp_x AS color LOCATION 0
+    BIND BUFFER frexp_exp AS color LOCATION 1
+    BIND BUFFER frexpStruct_x AS color LOCATION 2
+    BIND BUFFER frexpStruct_exp AS color LOCATION 3
+END
+
+RUN test_pipeline DRAW_ARRAY AS TRIANGLE_LIST START_IDX 0 COUNT 7776
+
+EXPECT frexp_x EQ_BUFFER frexpStruct_x
+EXPECT frexp_exp EQ_BUFFER frexpStruct_exp
diff --git a/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/frexpstruct_3_comp.amber b/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/frexpstruct_3_comp.amber
new file mode 100644
index 0000000..a637659
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/frexpstruct_3_comp.amber
@@ -0,0 +1,215 @@
+#!amber
+
+# Copyright 2021 Google LLC
+#
+# 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.
+
+# A compute shader test for FrexpStruct.
+
+# SHADER compute comp_shader GLSL
+# #version 430
+# precision highp float;
+#
+# const uint ndp = 1296 / 3;
+# const uint half_ndp = ndp / 2;
+#
+# layout(set = 0, binding = 0) readonly buffer block0 {
+#     uvec3 in_values[half_ndp];
+# };
+#
+# layout(set = 0, binding = 1) buffer block1 {
+#     vec3 frexp_out[ndp];
+# };
+#
+# layout(set = 0, binding = 2) buffer block2 {
+#     vec3 frexpStruct_out[ndp];
+# };
+#
+# struct frexpStructType
+# {
+#     vec3 x;
+#     ivec3 exp;
+# };
+#
+# // Replaced with native function in SPIR-V.
+# frexpStructType frexpStruct (vec3 orig)
+# {
+#     vec3 x;
+#     ivec3 exp;
+#     x = frexp(orig, exp);
+#     frexpStructType res = { x, exp };
+#     return res;
+# }
+#
+# void main ()
+# {
+#     for (uint ndx = 0; ndx < ndp; ndx += 2)
+#     {
+#         uvec3 in_uint = in_values[ndx/2];
+#         vec3 in_float = uintBitsToFloat(in_uint);
+#         vec3 x;
+#         ivec3 exp;
+#
+#         x = frexp(in_float, exp);
+#         frexpStructType res = frexpStruct(in_float);
+#
+#         frexp_out[ndx] = intBitsToFloat(exp);
+#         frexp_out[ndx+1] = x;
+#         frexpStruct_out[ndx] = intBitsToFloat(res.exp);
+#         frexpStruct_out[ndx+1] = res.x;
+#     }
+#
+#     return;
+# }
+# END
+
+SHADER compute comp_shader SPIRV-ASM
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint GLCompute %main "main"
+               OpExecutionMode %main LocalSize 1 1 1
+               OpDecorate %_arr_v3uint_uint_216 ArrayStride 16
+               OpMemberDecorate %block0 0 NonWritable
+               OpMemberDecorate %block0 0 Offset 0
+               OpDecorate %block0 BufferBlock
+               OpDecorate %_ DescriptorSet 0
+               OpDecorate %_ Binding 0
+               OpDecorate %_arr_v3float_uint_432 ArrayStride 16
+               OpMemberDecorate %block1 0 Offset 0
+               OpDecorate %block1 BufferBlock
+               OpDecorate %__0 DescriptorSet 0
+               OpDecorate %__0 Binding 1
+               OpDecorate %_arr_v3float_uint_432_0 ArrayStride 16
+               OpMemberDecorate %block2 0 Offset 0
+               OpDecorate %block2 BufferBlock
+               OpDecorate %__1 DescriptorSet 0
+               OpDecorate %__1 Binding 2
+       %void = OpTypeVoid
+          %3 = OpTypeFunction %void
+      %float = OpTypeFloat 32
+    %v3float = OpTypeVector %float 3
+%_ptr_Function_v3float = OpTypePointer Function %v3float
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+%frexpStructType = OpTypeStruct %v3float %v3int
+         %12 = OpTypeFunction %frexpStructType %_ptr_Function_v3float
+%_ptr_Function_v3int = OpTypePointer Function %v3int
+%_ptr_Function_frexpStructType = OpTypePointer Function %frexpStructType
+       %uint = OpTypeInt 32 0
+%_ptr_Function_uint = OpTypePointer Function %uint
+     %uint_0 = OpConstant %uint 0
+   %uint_432 = OpConstant %uint 432
+       %bool = OpTypeBool
+     %v3uint = OpTypeVector %uint 3
+%_ptr_Function_v3uint = OpTypePointer Function %v3uint
+   %uint_216 = OpConstant %uint 216
+%_arr_v3uint_uint_216 = OpTypeArray %v3uint %uint_216
+     %block0 = OpTypeStruct %_arr_v3uint_uint_216
+%_ptr_Uniform_block0 = OpTypePointer Uniform %block0
+          %_ = OpVariable %_ptr_Uniform_block0 Uniform
+      %int_0 = OpConstant %int 0
+     %uint_2 = OpConstant %uint 2
+%_ptr_Uniform_v3uint = OpTypePointer Uniform %v3uint
+%_arr_v3float_uint_432 = OpTypeArray %v3float %uint_432
+     %block1 = OpTypeStruct %_arr_v3float_uint_432
+%_ptr_Uniform_block1 = OpTypePointer Uniform %block1
+        %__0 = OpVariable %_ptr_Uniform_block1 Uniform
+%_ptr_Uniform_v3float = OpTypePointer Uniform %v3float
+     %uint_1 = OpConstant %uint 1
+%_arr_v3float_uint_432_0 = OpTypeArray %v3float %uint_432
+     %block2 = OpTypeStruct %_arr_v3float_uint_432_0
+%_ptr_Uniform_block2 = OpTypePointer Uniform %block2
+        %__1 = OpVariable %_ptr_Uniform_block2 Uniform
+      %int_1 = OpConstant %int 1
+       %main = OpFunction %void None %3
+          %5 = OpLabel
+        %ndx = OpVariable %_ptr_Function_uint Function
+    %in_uint = OpVariable %_ptr_Function_v3uint Function
+   %in_float = OpVariable %_ptr_Function_v3float Function
+        %x_0 = OpVariable %_ptr_Function_v3float Function
+      %exp_0 = OpVariable %_ptr_Function_v3int Function
+      %res_0 = OpVariable %_ptr_Function_frexpStructType Function
+               OpStore %ndx %uint_0
+               OpBranch %33
+         %33 = OpLabel
+               OpLoopMerge %35 %36 None
+               OpBranch %37
+         %37 = OpLabel
+         %38 = OpLoad %uint %ndx
+         %41 = OpULessThan %bool %38 %uint_432
+               OpBranchConditional %41 %34 %35
+         %34 = OpLabel
+         %51 = OpLoad %uint %ndx
+         %53 = OpUDiv %uint %51 %uint_2
+         %55 = OpAccessChain %_ptr_Uniform_v3uint %_ %int_0 %53
+         %56 = OpLoad %v3uint %55
+               OpStore %in_uint %56
+         %58 = OpLoad %v3uint %in_uint
+         %59 = OpBitcast %v3float %58
+               OpStore %in_float %59
+         %61 = OpLoad %v3float %in_float
+         %63 = OpExtInst %v3float %1 Frexp %61 %exp_0
+               OpStore %x_0 %63
+         %66 = OpLoad %v3float %in_float
+         %67 = OpExtInst %frexpStructType %1 FrexpStruct %66
+               OpStore %res_0 %67
+         %72 = OpLoad %uint %ndx
+         %73 = OpLoad %v3int %exp_0
+         %74 = OpBitcast %v3float %73
+         %76 = OpAccessChain %_ptr_Uniform_v3float %__0 %int_0 %72
+               OpStore %76 %74
+         %77 = OpLoad %uint %ndx
+         %79 = OpIAdd %uint %77 %uint_1
+         %80 = OpLoad %v3float %x_0
+         %81 = OpAccessChain %_ptr_Uniform_v3float %__0 %int_0 %79
+               OpStore %81 %80
+         %86 = OpLoad %uint %ndx
+         %88 = OpAccessChain %_ptr_Function_v3int %res_0 %int_1
+         %89 = OpLoad %v3int %88
+         %90 = OpBitcast %v3float %89
+         %91 = OpAccessChain %_ptr_Uniform_v3float %__1 %int_0 %86
+               OpStore %91 %90
+         %92 = OpLoad %uint %ndx
+         %93 = OpIAdd %uint %92 %uint_1
+         %94 = OpAccessChain %_ptr_Function_v3float %res_0 %int_0
+         %95 = OpLoad %v3float %94
+         %96 = OpAccessChain %_ptr_Uniform_v3float %__1 %int_0 %93
+               OpStore %96 %95
+               OpBranch %36
+         %36 = OpLabel
+         %97 = OpLoad %uint %ndx
+         %98 = OpIAdd %uint %97 %uint_2
+               OpStore %ndx %98
+               OpBranch %33
+         %35 = OpLabel
+               OpReturn
+               OpFunctionEnd
+END
+
+BUFFER buf_in DATA_TYPE uint32 SIZE 1296 FILE TEXT input.txt
+
+BUFFER buf_frexp DATA_TYPE vec3<float> SIZE 432 FILL 0.0
+BUFFER buf_frexpStruct DATA_TYPE vec3<float> SIZE 432 FILL 1.0
+
+PIPELINE compute test_pipeline
+    ATTACH comp_shader
+
+    BIND BUFFER buf_in AS storage DESCRIPTOR_SET 0 BINDING 0
+    BIND BUFFER buf_frexp AS storage DESCRIPTOR_SET 0 BINDING 1
+    BIND BUFFER buf_frexpStruct AS storage DESCRIPTOR_SET 0 BINDING 2
+END
+
+RUN test_pipeline 1 1 1
+
+EXPECT buf_frexp EQ_BUFFER buf_frexpStruct
diff --git a/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/frexpstruct_3_frag.amber b/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/frexpstruct_3_frag.amber
new file mode 100644
index 0000000..d11db06
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/frexpstruct_3_frag.amber
@@ -0,0 +1,288 @@
+#!amber
+
+# Copyright 2021 Google LLC
+#
+# 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.
+
+# A fragment shader test for FrexpStruct.
+
+# SHADER vertex vert_shader GLSL
+# #version 430
+# precision highp float;
+#
+# const uint ndp = 1296;
+# const uint ndpSqrt = uint(sqrt(ndp));
+# const float halfGridElementSize = 1.0 / float(ndpSqrt);
+#
+# layout (location = 0) in vec2 position;
+# layout (location = 0) flat out uint ndx_out;
+#
+# void main ()
+# {
+#     uint xcoord = uint(ndpSqrt * ((position.x + halfGridElementSize + 1) / 2) - 1);
+#     uint ycoord = uint(ndpSqrt * ((position.y + halfGridElementSize + 1) / 2) - 1);
+#     ndx_out = xcoord + ycoord * ndpSqrt;
+#
+#     gl_Position = vec4(position, 0, 1);
+#
+#     return;
+# }
+# END
+
+SHADER vertex vert_shader SPIRV-ASM
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %main "main" %position %ndx_out %_
+               OpDecorate %position Location 0
+               OpDecorate %ndx_out Flat
+               OpDecorate %ndx_out Location 0
+               OpMemberDecorate %gl_PerVertex 0 BuiltIn Position
+               OpMemberDecorate %gl_PerVertex 1 BuiltIn PointSize
+               OpMemberDecorate %gl_PerVertex 2 BuiltIn ClipDistance
+               OpDecorate %gl_PerVertex Block
+       %void = OpTypeVoid
+          %3 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+      %float = OpTypeFloat 32
+    %v2float = OpTypeVector %float 2
+%_ptr_Input_v2float = OpTypePointer Input %v2float
+   %position = OpVariable %_ptr_Input_v2float Input
+     %uint_0 = OpConstant %uint 0
+%_ptr_Input_float = OpTypePointer Input %float
+    %float_1 = OpConstant %float 1
+     %uint_1 = OpConstant %uint 1
+%_ptr_Output_uint = OpTypePointer Output %uint
+    %ndx_out = OpVariable %_ptr_Output_uint Output
+    %uint_36 = OpConstant %uint 36
+    %v4float = OpTypeVector %float 4
+%_arr_float_uint_1 = OpTypeArray %float %uint_1
+%gl_PerVertex = OpTypeStruct %v4float %float %_arr_float_uint_1
+%_ptr_Output_gl_PerVertex = OpTypePointer Output %gl_PerVertex
+          %_ = OpVariable %_ptr_Output_gl_PerVertex Output
+        %int = OpTypeInt 32 1
+      %int_0 = OpConstant %int 0
+    %float_0 = OpConstant %float 0
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+%float_1_02777779 = OpConstant %float 1.02777779
+   %float_18 = OpConstant %float 18
+       %main = OpFunction %void None %3
+          %5 = OpLabel
+         %16 = OpAccessChain %_ptr_Input_float %position %uint_0
+         %17 = OpLoad %float %16
+         %21 = OpFAdd %float %17 %float_1_02777779
+         %24 = OpFMul %float %21 %float_18
+         %25 = OpFSub %float %24 %float_1
+         %26 = OpConvertFToU %uint %25
+         %29 = OpAccessChain %_ptr_Input_float %position %uint_1
+         %30 = OpLoad %float %29
+         %32 = OpFAdd %float %30 %float_1_02777779
+         %34 = OpFMul %float %32 %float_18
+         %35 = OpFSub %float %34 %float_1
+         %36 = OpConvertFToU %uint %35
+         %42 = OpIMul %uint %36 %uint_36
+         %43 = OpIAdd %uint %26 %42
+               OpStore %ndx_out %43
+         %51 = OpLoad %v2float %position
+         %53 = OpCompositeExtract %float %51 0
+         %54 = OpCompositeExtract %float %51 1
+         %55 = OpCompositeConstruct %v4float %53 %54 %float_0 %float_1
+         %57 = OpAccessChain %_ptr_Output_v4float %_ %int_0
+               OpStore %57 %55
+               OpReturn
+               OpFunctionEnd
+END
+
+# SHADER fragment frag_shader GLSL
+# #version 430
+# precision highp float;
+#
+# const uint ndp = 1296;
+# const vec4 clear_value = vec4(0.0, 0.0, 0.0, 1.0);
+#
+# layout(set = 0, binding = 0) readonly buffer block0 {
+#     uvec3 in_values[ndp];
+# };
+#
+# layout (location = 0) flat in uint ndx_in;
+# layout (location = 0) out vec4 frexp_x_out;
+# layout (location = 1) out vec4 frexp_exp_out;
+# layout (location = 2) out vec4 frexpStruct_x_out;
+# layout (location = 3) out vec4 frexpStruct_exp_out;
+#
+# struct frexpStructType
+# {
+#     vec3 x;
+#     ivec3 exp;
+# };
+#
+# // Replaced with native function in SPIR-V.
+# frexpStructType frexpStruct (vec3 orig)
+# {
+#     vec3 x;
+#     ivec3 exp;
+#     x = frexp(orig, exp);
+#     frexpStructType res = { x, exp };
+#     return res;
+# }
+#
+# void main ()
+# {
+#     uvec3 in_uint = in_values[ndx_in];
+#     vec3 in_float = uintBitsToFloat(in_uint);
+#     vec3 x;
+#     ivec3 exp;
+#     frexpStructType res;
+#
+#     x = frexp(in_float, exp);
+#     res = frexpStruct(in_float);
+#
+#     frexp_x_out = clear_value;
+#     frexp_exp_out = clear_value;
+#     frexpStruct_x_out = clear_value;
+#     frexpStruct_exp_out = clear_value;
+#     frexp_x_out.rgb = x;
+#     frexp_exp_out.rgb = intBitsToFloat(exp);
+#     frexpStruct_x_out.rgb = res.x;
+#     frexpStruct_exp_out.rgb = intBitsToFloat(res.exp);
+#
+#     return;
+# }
+# END
+
+SHADER fragment frag_shader SPIRV-ASM
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %main "main" %ndx_in %frexp_x_out %frexp_exp_out %frexpStruct_x_out %frexpStruct_exp_out
+               OpExecutionMode %main OriginUpperLeft
+               OpDecorate %_arr_v3uint_uint_1296 ArrayStride 16
+               OpMemberDecorate %block0 0 NonWritable
+               OpMemberDecorate %block0 0 Offset 0
+               OpDecorate %block0 BufferBlock
+               OpDecorate %_ DescriptorSet 0
+               OpDecorate %_ Binding 0
+               OpDecorate %ndx_in Flat
+               OpDecorate %ndx_in Location 0
+               OpDecorate %frexp_x_out Location 0
+               OpDecorate %frexp_exp_out Location 1
+               OpDecorate %frexpStruct_x_out Location 2
+               OpDecorate %frexpStruct_exp_out Location 3
+       %void = OpTypeVoid
+          %3 = OpTypeFunction %void
+      %float = OpTypeFloat 32
+    %v3float = OpTypeVector %float 3
+%_ptr_Function_v3float = OpTypePointer Function %v3float
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+%frexpStructType = OpTypeStruct %v3float %v3int
+         %12 = OpTypeFunction %frexpStructType %_ptr_Function_v3float
+%_ptr_Function_v3int = OpTypePointer Function %v3int
+%_ptr_Function_frexpStructType = OpTypePointer Function %frexpStructType
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+%_ptr_Function_v3uint = OpTypePointer Function %v3uint
+  %uint_1296 = OpConstant %uint 1296
+%_arr_v3uint_uint_1296 = OpTypeArray %v3uint %uint_1296
+     %block0 = OpTypeStruct %_arr_v3uint_uint_1296
+%_ptr_Uniform_block0 = OpTypePointer Uniform %block0
+          %_ = OpVariable %_ptr_Uniform_block0 Uniform
+      %int_0 = OpConstant %int 0
+%_ptr_Input_uint = OpTypePointer Input %uint
+     %ndx_in = OpVariable %_ptr_Input_uint Input
+%_ptr_Uniform_v3uint = OpTypePointer Uniform %v3uint
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+%frexp_x_out = OpVariable %_ptr_Output_v4float Output
+    %float_0 = OpConstant %float 0
+    %float_1 = OpConstant %float 1
+         %61 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_1
+%frexp_exp_out = OpVariable %_ptr_Output_v4float Output
+%frexpStruct_x_out = OpVariable %_ptr_Output_v4float Output
+%frexpStruct_exp_out = OpVariable %_ptr_Output_v4float Output
+      %int_1 = OpConstant %int 1
+       %main = OpFunction %void None %3
+          %5 = OpLabel
+    %in_uint = OpVariable %_ptr_Function_v3uint Function
+   %in_float = OpVariable %_ptr_Function_v3float Function
+        %x_0 = OpVariable %_ptr_Function_v3float Function
+      %exp_0 = OpVariable %_ptr_Function_v3int Function
+      %res_0 = OpVariable %_ptr_Function_frexpStructType Function
+         %41 = OpLoad %uint %ndx_in
+         %43 = OpAccessChain %_ptr_Uniform_v3uint %_ %int_0 %41
+         %44 = OpLoad %v3uint %43
+               OpStore %in_uint %44
+         %46 = OpLoad %v3uint %in_uint
+         %47 = OpBitcast %v3float %46
+               OpStore %in_float %47
+         %49 = OpLoad %v3float %in_float
+         %51 = OpExtInst %v3float %1 Frexp %49 %exp_0
+               OpStore %x_0 %51
+         %54 = OpLoad %v3float %in_float
+         %55 = OpExtInst %frexpStructType %1 FrexpStruct %54
+               OpStore %res_0 %55
+               OpStore %frexp_x_out %61
+               OpStore %frexp_exp_out %61
+               OpStore %frexpStruct_x_out %61
+               OpStore %frexpStruct_exp_out %61
+         %65 = OpLoad %v3float %x_0
+         %66 = OpLoad %v4float %frexp_x_out
+         %67 = OpVectorShuffle %v4float %66 %65 4 5 6 3
+               OpStore %frexp_x_out %67
+         %68 = OpLoad %v3int %exp_0
+         %69 = OpBitcast %v3float %68
+         %70 = OpLoad %v4float %frexp_exp_out
+         %71 = OpVectorShuffle %v4float %70 %69 4 5 6 3
+               OpStore %frexp_exp_out %71
+         %72 = OpAccessChain %_ptr_Function_v3float %res_0 %int_0
+         %73 = OpLoad %v3float %72
+         %74 = OpLoad %v4float %frexpStruct_x_out
+         %75 = OpVectorShuffle %v4float %74 %73 4 5 6 3
+               OpStore %frexpStruct_x_out %75
+         %77 = OpAccessChain %_ptr_Function_v3int %res_0 %int_1
+         %78 = OpLoad %v3int %77
+         %79 = OpBitcast %v3float %78
+         %80 = OpLoad %v4float %frexpStruct_exp_out
+         %81 = OpVectorShuffle %v4float %80 %79 4 5 6 3
+               OpStore %frexpStruct_exp_out %81
+               OpReturn
+               OpFunctionEnd
+END
+
+BUFFER buf_in DATA_TYPE uint32 SIZE 1296 FILE TEXT input.txt
+BUFFER vertices DATA_TYPE vec2<float> SIZE 7776 FILE TEXT grid_vertices.txt
+
+BUFFER frexp_x FORMAT R32G32B32A32_SFLOAT
+BUFFER frexp_exp FORMAT R32G32B32A32_SFLOAT
+BUFFER frexpStruct_x FORMAT R32G32B32A32_SFLOAT
+BUFFER frexpStruct_exp FORMAT R32G32B32A32_SFLOAT
+
+PIPELINE graphics test_pipeline
+    FRAMEBUFFER_SIZE 144 144
+
+    ATTACH vert_shader
+    ATTACH frag_shader
+
+    VERTEX_DATA vertices LOCATION 0
+
+    BIND BUFFER buf_in AS storage DESCRIPTOR_SET 0 BINDING 0
+    BIND BUFFER frexp_x AS color LOCATION 0
+    BIND BUFFER frexp_exp AS color LOCATION 1
+    BIND BUFFER frexpStruct_x AS color LOCATION 2
+    BIND BUFFER frexpStruct_exp AS color LOCATION 3
+END
+
+RUN test_pipeline DRAW_ARRAY AS TRIANGLE_LIST START_IDX 0 COUNT 7776
+
+EXPECT frexp_x EQ_BUFFER frexpStruct_x
+EXPECT frexp_exp EQ_BUFFER frexpStruct_exp
diff --git a/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/frexpstruct_3_geom.amber b/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/frexpstruct_3_geom.amber
new file mode 100644
index 0000000..1cbb73d
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/frexpstruct_3_geom.amber
@@ -0,0 +1,430 @@
+#!amber
+
+# Copyright 2021 Google LLC
+#
+# 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.
+
+# A geometry shader test for FrexpStruct.
+
+DEVICE_FEATURE geometryShader
+
+# SHADER vertex vert_shader GLSL
+# #version 430
+# precision highp float;
+#
+# const uint ndp = 1296;
+# const uint ndpSqrt = uint(sqrt(ndp));
+# const float halfGridElementSize = 1.0 / float(ndpSqrt);
+#
+# layout (location = 0) in vec2 position;
+# layout (location = 0) flat out uint ndx_out;
+#
+# void main ()
+# {
+#     uint xcoord = uint(ndpSqrt * ((position.x + halfGridElementSize + 1) / 2) - 1);
+#     uint ycoord = uint(ndpSqrt * ((position.y + halfGridElementSize + 1) / 2) - 1);
+#     ndx_out = xcoord + ycoord * ndpSqrt;
+#
+#     gl_Position = vec4(position, 0, 1);
+#
+#     return;
+# }
+# END
+
+SHADER vertex vert_shader SPIRV-ASM
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %main "main" %position %ndx_out %_
+               OpDecorate %position Location 0
+               OpDecorate %ndx_out Flat
+               OpDecorate %ndx_out Location 0
+               OpMemberDecorate %gl_PerVertex 0 BuiltIn Position
+               OpMemberDecorate %gl_PerVertex 1 BuiltIn PointSize
+               OpMemberDecorate %gl_PerVertex 2 BuiltIn ClipDistance
+               OpDecorate %gl_PerVertex Block
+       %void = OpTypeVoid
+          %3 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+      %float = OpTypeFloat 32
+    %v2float = OpTypeVector %float 2
+%_ptr_Input_v2float = OpTypePointer Input %v2float
+   %position = OpVariable %_ptr_Input_v2float Input
+     %uint_0 = OpConstant %uint 0
+%_ptr_Input_float = OpTypePointer Input %float
+    %float_1 = OpConstant %float 1
+     %uint_1 = OpConstant %uint 1
+%_ptr_Output_uint = OpTypePointer Output %uint
+    %ndx_out = OpVariable %_ptr_Output_uint Output
+    %uint_36 = OpConstant %uint 36
+    %v4float = OpTypeVector %float 4
+%_arr_float_uint_1 = OpTypeArray %float %uint_1
+%gl_PerVertex = OpTypeStruct %v4float %float %_arr_float_uint_1
+%_ptr_Output_gl_PerVertex = OpTypePointer Output %gl_PerVertex
+          %_ = OpVariable %_ptr_Output_gl_PerVertex Output
+        %int = OpTypeInt 32 1
+      %int_0 = OpConstant %int 0
+    %float_0 = OpConstant %float 0
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+%float_1_02777779 = OpConstant %float 1.02777779
+   %float_18 = OpConstant %float 18
+       %main = OpFunction %void None %3
+          %5 = OpLabel
+         %16 = OpAccessChain %_ptr_Input_float %position %uint_0
+         %17 = OpLoad %float %16
+         %21 = OpFAdd %float %17 %float_1_02777779
+         %24 = OpFMul %float %21 %float_18
+         %25 = OpFSub %float %24 %float_1
+         %26 = OpConvertFToU %uint %25
+         %29 = OpAccessChain %_ptr_Input_float %position %uint_1
+         %30 = OpLoad %float %29
+         %32 = OpFAdd %float %30 %float_1_02777779
+         %34 = OpFMul %float %32 %float_18
+         %35 = OpFSub %float %34 %float_1
+         %36 = OpConvertFToU %uint %35
+         %42 = OpIMul %uint %36 %uint_36
+         %43 = OpIAdd %uint %26 %42
+               OpStore %ndx_out %43
+         %51 = OpLoad %v2float %position
+         %53 = OpCompositeExtract %float %51 0
+         %54 = OpCompositeExtract %float %51 1
+         %55 = OpCompositeConstruct %v4float %53 %54 %float_0 %float_1
+         %57 = OpAccessChain %_ptr_Output_v4float %_ %int_0
+               OpStore %57 %55
+               OpReturn
+               OpFunctionEnd
+END
+
+# SHADER geometry geom_shader GLSL
+# #version 430
+# precision highp float;
+#
+# const uint ndp = 1296;
+#
+# layout(set = 0, binding = 0) readonly buffer block0 {
+#     uvec3 in_values[ndp];
+# };
+#
+# layout (triangles) in;
+# layout (triangle_strip, max_vertices = 3) out;
+#
+# layout (location = 0) flat in uint ndx_in[];
+# layout (location = 0) flat out vec3 frexp_x_out;
+# layout (location = 1) flat out vec3 frexp_exp_out;
+# layout (location = 2) flat out vec3 frexpStruct_x_out;
+# layout (location = 3) flat out vec3 frexpStruct_exp_out;
+#
+# struct frexpStructType
+# {
+#     vec3 x;
+#     ivec3 exp;
+# };
+#
+# // Replaced with native function in SPIR-V.
+# frexpStructType frexpStruct (vec3 orig)
+# {
+#     vec3 x;
+#     ivec3 exp;
+#     x = frexp(orig, exp);
+#     frexpStructType res = { x, exp };
+#     return res;
+# }
+#
+# void main ()
+# {
+#     for (int vertex = 0; vertex < 3; vertex++)
+#     {
+#         uvec3 in_uint = in_values[ndx_in[vertex]];
+#         vec3 in_float = uintBitsToFloat(in_uint);
+#         vec3 x;
+#         ivec3 exp;
+#         frexpStructType res;
+#
+#         x = frexp(in_float, exp);
+#         res = frexpStruct(in_float);
+#
+#         frexp_x_out = x;
+#         frexp_exp_out = intBitsToFloat(exp);
+#         frexpStruct_x_out = res.x;
+#         frexpStruct_exp_out = intBitsToFloat(res.exp);
+#
+#         gl_Position = gl_in[vertex].gl_Position;
+#         EmitVertex();
+#     }
+#
+#     EndPrimitive();
+# }
+# END
+
+SHADER geometry geom_shader SPIRV-ASM
+               OpCapability Geometry
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Geometry %main "main" %ndx_in %frexp_x_out %frexp_exp_out %frexpStruct_x_out %frexpStruct_exp_out %__0 %gl_in
+               OpExecutionMode %main Triangles
+               OpExecutionMode %main Invocations 1
+               OpExecutionMode %main OutputTriangleStrip
+               OpExecutionMode %main OutputVertices 3
+               OpDecorate %_arr_v3uint_uint_1296 ArrayStride 16
+               OpMemberDecorate %block0 0 NonWritable
+               OpMemberDecorate %block0 0 Offset 0
+               OpDecorate %block0 BufferBlock
+               OpDecorate %_ DescriptorSet 0
+               OpDecorate %_ Binding 0
+               OpDecorate %ndx_in Flat
+               OpDecorate %ndx_in Location 0
+               OpDecorate %frexp_x_out Flat
+               OpDecorate %frexp_x_out Location 0
+               OpDecorate %frexp_exp_out Flat
+               OpDecorate %frexp_exp_out Location 1
+               OpDecorate %frexpStruct_x_out Flat
+               OpDecorate %frexpStruct_x_out Location 2
+               OpDecorate %frexpStruct_exp_out Flat
+               OpDecorate %frexpStruct_exp_out Location 3
+               OpMemberDecorate %gl_PerVertex 0 BuiltIn Position
+               OpMemberDecorate %gl_PerVertex 1 BuiltIn PointSize
+               OpMemberDecorate %gl_PerVertex 2 BuiltIn ClipDistance
+               OpDecorate %gl_PerVertex Block
+               OpMemberDecorate %gl_PerVertex_0 0 BuiltIn Position
+               OpMemberDecorate %gl_PerVertex_0 1 BuiltIn PointSize
+               OpMemberDecorate %gl_PerVertex_0 2 BuiltIn ClipDistance
+               OpDecorate %gl_PerVertex_0 Block
+       %void = OpTypeVoid
+          %3 = OpTypeFunction %void
+      %float = OpTypeFloat 32
+    %v3float = OpTypeVector %float 3
+%_ptr_Function_v3float = OpTypePointer Function %v3float
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+%frexpStructType = OpTypeStruct %v3float %v3int
+         %12 = OpTypeFunction %frexpStructType %_ptr_Function_v3float
+%_ptr_Function_v3int = OpTypePointer Function %v3int
+%_ptr_Function_frexpStructType = OpTypePointer Function %frexpStructType
+%_ptr_Function_int = OpTypePointer Function %int
+      %int_0 = OpConstant %int 0
+      %int_3 = OpConstant %int 3
+       %bool = OpTypeBool
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+%_ptr_Function_v3uint = OpTypePointer Function %v3uint
+  %uint_1296 = OpConstant %uint 1296
+%_arr_v3uint_uint_1296 = OpTypeArray %v3uint %uint_1296
+     %block0 = OpTypeStruct %_arr_v3uint_uint_1296
+%_ptr_Uniform_block0 = OpTypePointer Uniform %block0
+          %_ = OpVariable %_ptr_Uniform_block0 Uniform
+     %uint_3 = OpConstant %uint 3
+%_arr_uint_uint_3 = OpTypeArray %uint %uint_3
+%_ptr_Input__arr_uint_uint_3 = OpTypePointer Input %_arr_uint_uint_3
+     %ndx_in = OpVariable %_ptr_Input__arr_uint_uint_3 Input
+%_ptr_Input_uint = OpTypePointer Input %uint
+%_ptr_Uniform_v3uint = OpTypePointer Uniform %v3uint
+%_ptr_Output_v3float = OpTypePointer Output %v3float
+%frexp_x_out = OpVariable %_ptr_Output_v3float Output
+%frexp_exp_out = OpVariable %_ptr_Output_v3float Output
+%frexpStruct_x_out = OpVariable %_ptr_Output_v3float Output
+%frexpStruct_exp_out = OpVariable %_ptr_Output_v3float Output
+      %int_1 = OpConstant %int 1
+    %v4float = OpTypeVector %float 4
+     %uint_1 = OpConstant %uint 1
+%_arr_float_uint_1 = OpTypeArray %float %uint_1
+%gl_PerVertex = OpTypeStruct %v4float %float %_arr_float_uint_1
+%_ptr_Output_gl_PerVertex = OpTypePointer Output %gl_PerVertex
+        %__0 = OpVariable %_ptr_Output_gl_PerVertex Output
+%gl_PerVertex_0 = OpTypeStruct %v4float %float %_arr_float_uint_1
+%_arr_gl_PerVertex_0_uint_3 = OpTypeArray %gl_PerVertex_0 %uint_3
+%_ptr_Input__arr_gl_PerVertex_0_uint_3 = OpTypePointer Input %_arr_gl_PerVertex_0_uint_3
+      %gl_in = OpVariable %_ptr_Input__arr_gl_PerVertex_0_uint_3 Input
+%_ptr_Input_v4float = OpTypePointer Input %v4float
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+       %main = OpFunction %void None %3
+          %5 = OpLabel
+     %vertex = OpVariable %_ptr_Function_int Function
+    %in_uint = OpVariable %_ptr_Function_v3uint Function
+   %in_float = OpVariable %_ptr_Function_v3float Function
+        %x_0 = OpVariable %_ptr_Function_v3float Function
+      %exp_0 = OpVariable %_ptr_Function_v3int Function
+      %res_0 = OpVariable %_ptr_Function_frexpStructType Function
+               OpStore %vertex %int_0
+               OpBranch %32
+         %32 = OpLabel
+               OpLoopMerge %34 %35 None
+               OpBranch %36
+         %36 = OpLabel
+         %37 = OpLoad %int %vertex
+         %40 = OpSLessThan %bool %37 %int_3
+               OpBranchConditional %40 %33 %34
+         %33 = OpLabel
+         %54 = OpLoad %int %vertex
+         %56 = OpAccessChain %_ptr_Input_uint %ndx_in %54
+         %57 = OpLoad %uint %56
+         %59 = OpAccessChain %_ptr_Uniform_v3uint %_ %int_0 %57
+         %60 = OpLoad %v3uint %59
+               OpStore %in_uint %60
+         %62 = OpLoad %v3uint %in_uint
+         %63 = OpBitcast %v3float %62
+               OpStore %in_float %63
+         %65 = OpLoad %v3float %in_float
+         %67 = OpExtInst %v3float %1 Frexp %65 %exp_0
+               OpStore %x_0 %67
+         %70 = OpLoad %v3float %in_float
+         %71 = OpExtInst %frexpStructType %1 FrexpStruct %70
+               OpStore %res_0 %71
+         %74 = OpLoad %v3float %x_0
+               OpStore %frexp_x_out %74
+         %76 = OpLoad %v3int %exp_0
+         %77 = OpBitcast %v3float %76
+               OpStore %frexp_exp_out %77
+         %79 = OpAccessChain %_ptr_Function_v3float %res_0 %int_0
+         %80 = OpLoad %v3float %79
+               OpStore %frexpStruct_x_out %80
+         %83 = OpAccessChain %_ptr_Function_v3int %res_0 %int_1
+         %84 = OpLoad %v3int %83
+         %85 = OpBitcast %v3float %84
+               OpStore %frexpStruct_exp_out %85
+         %96 = OpLoad %int %vertex
+         %98 = OpAccessChain %_ptr_Input_v4float %gl_in %96 %int_0
+         %99 = OpLoad %v4float %98
+        %101 = OpAccessChain %_ptr_Output_v4float %__0 %int_0
+               OpStore %101 %99
+               OpEmitVertex
+               OpBranch %35
+         %35 = OpLabel
+        %102 = OpLoad %int %vertex
+        %103 = OpIAdd %int %102 %int_1
+               OpStore %vertex %103
+               OpBranch %32
+         %34 = OpLabel
+               OpEndPrimitive
+               OpReturn
+               OpFunctionEnd
+END
+
+# SHADER fragment frag_shader GLSL
+# #version 430
+# precision highp float;
+#
+# layout (location = 0) flat in vec3 frexp_x_in;
+# layout (location = 1) flat in vec3 frexp_exp_in;
+# layout (location = 2) flat in vec3 frexpStruct_x_in;
+# layout (location = 3) flat in vec3 frexpStruct_exp_in;
+#
+# layout (location = 0) out vec4 frexp_x_out;
+# layout (location = 1) out vec4 frexp_exp_out;
+# layout (location = 2) out vec4 frexpStruct_x_out;
+# layout (location = 3) out vec4 frexpStruct_exp_out;
+#
+# const vec4 clear_value = vec4(0.0, 0.0, 0.0, 1.0);
+#
+# void main ()
+# {
+#     frexp_x_out = clear_value;
+#     frexp_exp_out = clear_value;
+#     frexpStruct_x_out = clear_value;
+#     frexpStruct_exp_out = clear_value;
+#     frexp_x_out.rgb = frexp_x_in;
+#     frexp_exp_out.rgb = frexp_exp_in;
+#     frexpStruct_x_out.rgb = frexpStruct_x_in;
+#     frexpStruct_exp_out.rgb = frexpStruct_exp_in;
+# }
+# END
+
+SHADER fragment frag_shader SPIRV-ASM
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %main "main" %frexp_x_out %frexp_exp_out %frexpStruct_x_out %frexpStruct_exp_out %frexp_x_in %frexp_exp_in %frexpStruct_x_in %frexpStruct_exp_in
+               OpExecutionMode %main OriginUpperLeft
+               OpDecorate %frexp_x_out Location 0
+               OpDecorate %frexp_exp_out Location 1
+               OpDecorate %frexpStruct_x_out Location 2
+               OpDecorate %frexpStruct_exp_out Location 3
+               OpDecorate %frexp_x_in Flat
+               OpDecorate %frexp_x_in Location 0
+               OpDecorate %frexp_exp_in Flat
+               OpDecorate %frexp_exp_in Location 1
+               OpDecorate %frexpStruct_x_in Flat
+               OpDecorate %frexpStruct_x_in Location 2
+               OpDecorate %frexpStruct_exp_in Flat
+               OpDecorate %frexpStruct_exp_in Location 3
+       %void = OpTypeVoid
+          %3 = OpTypeFunction %void
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+%frexp_x_out = OpVariable %_ptr_Output_v4float Output
+    %float_0 = OpConstant %float 0
+    %float_1 = OpConstant %float 1
+         %12 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_1
+%frexp_exp_out = OpVariable %_ptr_Output_v4float Output
+%frexpStruct_x_out = OpVariable %_ptr_Output_v4float Output
+%frexpStruct_exp_out = OpVariable %_ptr_Output_v4float Output
+    %v3float = OpTypeVector %float 3
+%_ptr_Input_v3float = OpTypePointer Input %v3float
+ %frexp_x_in = OpVariable %_ptr_Input_v3float Input
+%frexp_exp_in = OpVariable %_ptr_Input_v3float Input
+%frexpStruct_x_in = OpVariable %_ptr_Input_v3float Input
+%frexpStruct_exp_in = OpVariable %_ptr_Input_v3float Input
+       %main = OpFunction %void None %3
+          %5 = OpLabel
+               OpStore %frexp_x_out %12
+               OpStore %frexp_exp_out %12
+               OpStore %frexpStruct_x_out %12
+               OpStore %frexpStruct_exp_out %12
+         %19 = OpLoad %v3float %frexp_x_in
+         %20 = OpLoad %v4float %frexp_x_out
+         %21 = OpVectorShuffle %v4float %20 %19 4 5 6 3
+               OpStore %frexp_x_out %21
+         %23 = OpLoad %v3float %frexp_exp_in
+         %24 = OpLoad %v4float %frexp_exp_out
+         %25 = OpVectorShuffle %v4float %24 %23 4 5 6 3
+               OpStore %frexp_exp_out %25
+         %27 = OpLoad %v3float %frexpStruct_x_in
+         %28 = OpLoad %v4float %frexpStruct_x_out
+         %29 = OpVectorShuffle %v4float %28 %27 4 5 6 3
+               OpStore %frexpStruct_x_out %29
+         %31 = OpLoad %v3float %frexpStruct_exp_in
+         %32 = OpLoad %v4float %frexpStruct_exp_out
+         %33 = OpVectorShuffle %v4float %32 %31 4 5 6 3
+               OpStore %frexpStruct_exp_out %33
+               OpReturn
+               OpFunctionEnd
+END
+
+BUFFER buf_in DATA_TYPE uint32 SIZE 1296 FILE TEXT input.txt
+BUFFER vertices DATA_TYPE vec2<float> SIZE 7776 FILE TEXT grid_vertices.txt
+
+BUFFER frexp_x FORMAT R32G32B32A32_SFLOAT
+BUFFER frexp_exp FORMAT R32G32B32A32_SFLOAT
+BUFFER frexpStruct_x FORMAT R32G32B32A32_SFLOAT
+BUFFER frexpStruct_exp FORMAT R32G32B32A32_SFLOAT
+
+PIPELINE graphics test_pipeline
+    FRAMEBUFFER_SIZE 144 144
+
+    ATTACH vert_shader
+    ATTACH geom_shader
+    ATTACH frag_shader
+
+    VERTEX_DATA vertices LOCATION 0
+
+    BIND BUFFER buf_in AS storage DESCRIPTOR_SET 0 BINDING 0
+    BIND BUFFER frexp_x AS color LOCATION 0
+    BIND BUFFER frexp_exp AS color LOCATION 1
+    BIND BUFFER frexpStruct_x AS color LOCATION 2
+    BIND BUFFER frexpStruct_exp AS color LOCATION 3
+END
+
+RUN test_pipeline DRAW_ARRAY AS TRIANGLE_LIST START_IDX 0 COUNT 7776
+
+EXPECT frexp_x EQ_BUFFER frexpStruct_x
+EXPECT frexp_exp EQ_BUFFER frexpStruct_exp
diff --git a/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/frexpstruct_3_tesc.amber b/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/frexpstruct_3_tesc.amber
new file mode 100644
index 0000000..2d2a02f
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/frexpstruct_3_tesc.amber
@@ -0,0 +1,586 @@
+#!amber
+
+# Copyright 2021 Google LLC
+#
+# 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.
+
+# A tessellation control shader test for FrexpStruct.
+
+DEVICE_FEATURE tessellationShader
+
+# SHADER vertex vert_shader GLSL
+# #version 430
+# precision highp float;
+#
+# const uint ndp = 1296;
+# const uint ndpSqrt = uint(sqrt(ndp));
+# const float halfGridElementSize = 1.0 / float(ndpSqrt);
+#
+# layout (location = 0) in vec2 position;
+# layout (location = 0) flat out uint ndx_out;
+#
+# void main ()
+# {
+#     uint xcoord = uint(ndpSqrt * ((position.x + halfGridElementSize + 1) / 2) - 1);
+#     uint ycoord = uint(ndpSqrt * ((position.y + halfGridElementSize + 1) / 2) - 1);
+#     ndx_out = xcoord + ycoord * ndpSqrt;
+#
+#     gl_Position = vec4(position, 0, 1);
+#
+#     return;
+# }
+# END
+
+SHADER vertex vert_shader SPIRV-ASM
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %main "main" %position %ndx_out %_
+               OpDecorate %position Location 0
+               OpDecorate %ndx_out Flat
+               OpDecorate %ndx_out Location 0
+               OpMemberDecorate %gl_PerVertex 0 BuiltIn Position
+               OpMemberDecorate %gl_PerVertex 1 BuiltIn PointSize
+               OpMemberDecorate %gl_PerVertex 2 BuiltIn ClipDistance
+               OpDecorate %gl_PerVertex Block
+       %void = OpTypeVoid
+          %3 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+      %float = OpTypeFloat 32
+    %v2float = OpTypeVector %float 2
+%_ptr_Input_v2float = OpTypePointer Input %v2float
+   %position = OpVariable %_ptr_Input_v2float Input
+     %uint_0 = OpConstant %uint 0
+%_ptr_Input_float = OpTypePointer Input %float
+    %float_1 = OpConstant %float 1
+     %uint_1 = OpConstant %uint 1
+%_ptr_Output_uint = OpTypePointer Output %uint
+    %ndx_out = OpVariable %_ptr_Output_uint Output
+    %uint_36 = OpConstant %uint 36
+    %v4float = OpTypeVector %float 4
+%_arr_float_uint_1 = OpTypeArray %float %uint_1
+%gl_PerVertex = OpTypeStruct %v4float %float %_arr_float_uint_1
+%_ptr_Output_gl_PerVertex = OpTypePointer Output %gl_PerVertex
+          %_ = OpVariable %_ptr_Output_gl_PerVertex Output
+        %int = OpTypeInt 32 1
+      %int_0 = OpConstant %int 0
+    %float_0 = OpConstant %float 0
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+%float_1_02777779 = OpConstant %float 1.02777779
+   %float_18 = OpConstant %float 18
+       %main = OpFunction %void None %3
+          %5 = OpLabel
+         %16 = OpAccessChain %_ptr_Input_float %position %uint_0
+         %17 = OpLoad %float %16
+         %21 = OpFAdd %float %17 %float_1_02777779
+         %24 = OpFMul %float %21 %float_18
+         %25 = OpFSub %float %24 %float_1
+         %26 = OpConvertFToU %uint %25
+         %29 = OpAccessChain %_ptr_Input_float %position %uint_1
+         %30 = OpLoad %float %29
+         %32 = OpFAdd %float %30 %float_1_02777779
+         %34 = OpFMul %float %32 %float_18
+         %35 = OpFSub %float %34 %float_1
+         %36 = OpConvertFToU %uint %35
+         %42 = OpIMul %uint %36 %uint_36
+         %43 = OpIAdd %uint %26 %42
+               OpStore %ndx_out %43
+         %51 = OpLoad %v2float %position
+         %53 = OpCompositeExtract %float %51 0
+         %54 = OpCompositeExtract %float %51 1
+         %55 = OpCompositeConstruct %v4float %53 %54 %float_0 %float_1
+         %57 = OpAccessChain %_ptr_Output_v4float %_ %int_0
+               OpStore %57 %55
+               OpReturn
+               OpFunctionEnd
+END
+
+# SHADER tessellation_control tesc_shader GLSL
+# #version 430
+# precision highp float;
+#
+# const uint ndp = 1296;
+#
+# layout (vertices = 3) out;
+#
+# layout (location = 0) flat in uint ndx_in[];
+# layout (location = 0) flat out vec3 frexp_x_out[];
+# layout (location = 1) flat out vec3 frexp_exp_out[];
+# layout (location = 2) flat out vec3 frexpStruct_x_out[];
+# layout (location = 3) flat out vec3 frexpStruct_exp_out[];
+#
+# layout(set = 0, binding = 0) readonly buffer block0 {
+#     uvec3 in_values[ndp];
+# };
+#
+# struct frexpStructType
+# {
+#     vec3 x;
+#     ivec3 exp;
+# };
+#
+# // Replaced with native function in SPIR-V.
+# frexpStructType frexpStruct (vec3 orig)
+# {
+#     vec3 x;
+#     ivec3 exp;
+#     x = frexp(orig, exp);
+#     frexpStructType res = { x, exp };
+#     return res;
+# }
+#
+# void main ()
+# {
+#     uvec3 in_uint = in_values[ndx_in[gl_InvocationID]];
+#     vec3 in_float = uintBitsToFloat(in_uint);
+#     vec3 x;
+#     ivec3 exp;
+#     frexpStructType res;
+#
+#     x = frexp(in_float, exp);
+#     res = frexpStruct(in_float);
+#
+#     frexp_x_out[gl_InvocationID] = x;
+#     frexp_exp_out[gl_InvocationID] = intBitsToFloat(exp);
+#     frexpStruct_x_out[gl_InvocationID] = res.x;
+#     frexpStruct_exp_out[gl_InvocationID] = intBitsToFloat(res.exp);
+#
+#     gl_TessLevelInner[0] = 1.0;
+#     gl_TessLevelInner[1] = 1.0;
+#     gl_TessLevelOuter[0] = 1.0;
+#     gl_TessLevelOuter[1] = 1.0;
+#     gl_TessLevelOuter[2] = 1.0;
+#     gl_TessLevelOuter[3] = 1.0;
+#     gl_out[gl_InvocationID].gl_Position = gl_in[gl_InvocationID].gl_Position;
+# }
+# END
+
+SHADER tessellation_control tesc_shader SPIRV-ASM
+               OpCapability Tessellation
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint TessellationControl %main "main" %ndx_in %gl_InvocationID %frexp_x_out %frexp_exp_out %frexpStruct_x_out %frexpStruct_exp_out %gl_TessLevelInner %gl_TessLevelOuter %gl_out %gl_in
+               OpExecutionMode %main OutputVertices 3
+               OpDecorate %_arr_v3uint_uint_1296 ArrayStride 16
+               OpMemberDecorate %block0 0 NonWritable
+               OpMemberDecorate %block0 0 Offset 0
+               OpDecorate %block0 BufferBlock
+               OpDecorate %_ DescriptorSet 0
+               OpDecorate %_ Binding 0
+               OpDecorate %ndx_in Flat
+               OpDecorate %ndx_in Location 0
+               OpDecorate %gl_InvocationID BuiltIn InvocationId
+               OpDecorate %frexp_x_out Flat
+               OpDecorate %frexp_x_out Location 0
+               OpDecorate %frexp_exp_out Flat
+               OpDecorate %frexp_exp_out Location 1
+               OpDecorate %frexpStruct_x_out Flat
+               OpDecorate %frexpStruct_x_out Location 2
+               OpDecorate %frexpStruct_exp_out Flat
+               OpDecorate %frexpStruct_exp_out Location 3
+               OpDecorate %gl_TessLevelInner Patch
+               OpDecorate %gl_TessLevelInner BuiltIn TessLevelInner
+               OpDecorate %gl_TessLevelOuter Patch
+               OpDecorate %gl_TessLevelOuter BuiltIn TessLevelOuter
+               OpMemberDecorate %gl_PerVertex 0 BuiltIn Position
+               OpMemberDecorate %gl_PerVertex 1 BuiltIn PointSize
+               OpMemberDecorate %gl_PerVertex 2 BuiltIn ClipDistance
+               OpDecorate %gl_PerVertex Block
+               OpMemberDecorate %gl_PerVertex_0 0 BuiltIn Position
+               OpMemberDecorate %gl_PerVertex_0 1 BuiltIn PointSize
+               OpMemberDecorate %gl_PerVertex_0 2 BuiltIn ClipDistance
+               OpDecorate %gl_PerVertex_0 Block
+       %void = OpTypeVoid
+          %3 = OpTypeFunction %void
+      %float = OpTypeFloat 32
+    %v3float = OpTypeVector %float 3
+%_ptr_Function_v3float = OpTypePointer Function %v3float
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+%frexpStructType = OpTypeStruct %v3float %v3int
+         %12 = OpTypeFunction %frexpStructType %_ptr_Function_v3float
+%_ptr_Function_v3int = OpTypePointer Function %v3int
+%_ptr_Function_frexpStructType = OpTypePointer Function %frexpStructType
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+%_ptr_Function_v3uint = OpTypePointer Function %v3uint
+  %uint_1296 = OpConstant %uint 1296
+%_arr_v3uint_uint_1296 = OpTypeArray %v3uint %uint_1296
+     %block0 = OpTypeStruct %_arr_v3uint_uint_1296
+%_ptr_Uniform_block0 = OpTypePointer Uniform %block0
+          %_ = OpVariable %_ptr_Uniform_block0 Uniform
+      %int_0 = OpConstant %int 0
+    %uint_32 = OpConstant %uint 32
+%_arr_uint_uint_32 = OpTypeArray %uint %uint_32
+%_ptr_Input__arr_uint_uint_32 = OpTypePointer Input %_arr_uint_uint_32
+     %ndx_in = OpVariable %_ptr_Input__arr_uint_uint_32 Input
+%_ptr_Input_int = OpTypePointer Input %int
+%gl_InvocationID = OpVariable %_ptr_Input_int Input
+%_ptr_Input_uint = OpTypePointer Input %uint
+%_ptr_Uniform_v3uint = OpTypePointer Uniform %v3uint
+     %uint_3 = OpConstant %uint 3
+%_arr_v3float_uint_3 = OpTypeArray %v3float %uint_3
+%_ptr_Output__arr_v3float_uint_3 = OpTypePointer Output %_arr_v3float_uint_3
+%frexp_x_out = OpVariable %_ptr_Output__arr_v3float_uint_3 Output
+%_ptr_Output_v3float = OpTypePointer Output %v3float
+%frexp_exp_out = OpVariable %_ptr_Output__arr_v3float_uint_3 Output
+%frexpStruct_x_out = OpVariable %_ptr_Output__arr_v3float_uint_3 Output
+%frexpStruct_exp_out = OpVariable %_ptr_Output__arr_v3float_uint_3 Output
+      %int_1 = OpConstant %int 1
+     %uint_2 = OpConstant %uint 2
+%_arr_float_uint_2 = OpTypeArray %float %uint_2
+%_ptr_Output__arr_float_uint_2 = OpTypePointer Output %_arr_float_uint_2
+%gl_TessLevelInner = OpVariable %_ptr_Output__arr_float_uint_2 Output
+    %float_1 = OpConstant %float 1
+%_ptr_Output_float = OpTypePointer Output %float
+     %uint_4 = OpConstant %uint 4
+%_arr_float_uint_4 = OpTypeArray %float %uint_4
+%_ptr_Output__arr_float_uint_4 = OpTypePointer Output %_arr_float_uint_4
+%gl_TessLevelOuter = OpVariable %_ptr_Output__arr_float_uint_4 Output
+      %int_2 = OpConstant %int 2
+      %int_3 = OpConstant %int 3
+    %v4float = OpTypeVector %float 4
+     %uint_1 = OpConstant %uint 1
+%_arr_float_uint_1 = OpTypeArray %float %uint_1
+%gl_PerVertex = OpTypeStruct %v4float %float %_arr_float_uint_1
+%_arr_gl_PerVertex_uint_3 = OpTypeArray %gl_PerVertex %uint_3
+%_ptr_Output__arr_gl_PerVertex_uint_3 = OpTypePointer Output %_arr_gl_PerVertex_uint_3
+     %gl_out = OpVariable %_ptr_Output__arr_gl_PerVertex_uint_3 Output
+%gl_PerVertex_0 = OpTypeStruct %v4float %float %_arr_float_uint_1
+%_arr_gl_PerVertex_0_uint_32 = OpTypeArray %gl_PerVertex_0 %uint_32
+%_ptr_Input__arr_gl_PerVertex_0_uint_32 = OpTypePointer Input %_arr_gl_PerVertex_0_uint_32
+      %gl_in = OpVariable %_ptr_Input__arr_gl_PerVertex_0_uint_32 Input
+%_ptr_Input_v4float = OpTypePointer Input %v4float
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+       %main = OpFunction %void None %3
+          %5 = OpLabel
+    %in_uint = OpVariable %_ptr_Function_v3uint Function
+   %in_float = OpVariable %_ptr_Function_v3float Function
+        %x_0 = OpVariable %_ptr_Function_v3float Function
+      %exp_0 = OpVariable %_ptr_Function_v3int Function
+      %res_0 = OpVariable %_ptr_Function_frexpStructType Function
+         %45 = OpLoad %int %gl_InvocationID
+         %47 = OpAccessChain %_ptr_Input_uint %ndx_in %45
+         %48 = OpLoad %uint %47
+         %50 = OpAccessChain %_ptr_Uniform_v3uint %_ %int_0 %48
+         %51 = OpLoad %v3uint %50
+               OpStore %in_uint %51
+         %53 = OpLoad %v3uint %in_uint
+         %54 = OpBitcast %v3float %53
+               OpStore %in_float %54
+         %56 = OpLoad %v3float %in_float
+         %58 = OpExtInst %v3float %1 Frexp %56 %exp_0
+               OpStore %x_0 %58
+         %61 = OpLoad %v3float %in_float
+         %62 = OpExtInst %frexpStructType %1 FrexpStruct %61
+               OpStore %res_0 %62
+         %67 = OpLoad %int %gl_InvocationID
+         %68 = OpLoad %v3float %x_0
+         %70 = OpAccessChain %_ptr_Output_v3float %frexp_x_out %67
+               OpStore %70 %68
+         %72 = OpLoad %int %gl_InvocationID
+         %73 = OpLoad %v3int %exp_0
+         %74 = OpBitcast %v3float %73
+         %75 = OpAccessChain %_ptr_Output_v3float %frexp_exp_out %72
+               OpStore %75 %74
+         %77 = OpLoad %int %gl_InvocationID
+         %78 = OpAccessChain %_ptr_Function_v3float %res_0 %int_0
+         %79 = OpLoad %v3float %78
+         %80 = OpAccessChain %_ptr_Output_v3float %frexpStruct_x_out %77
+               OpStore %80 %79
+         %82 = OpLoad %int %gl_InvocationID
+         %84 = OpAccessChain %_ptr_Function_v3int %res_0 %int_1
+         %85 = OpLoad %v3int %84
+         %86 = OpBitcast %v3float %85
+         %87 = OpAccessChain %_ptr_Output_v3float %frexpStruct_exp_out %82
+               OpStore %87 %86
+         %94 = OpAccessChain %_ptr_Output_float %gl_TessLevelInner %int_0
+               OpStore %94 %float_1
+         %95 = OpAccessChain %_ptr_Output_float %gl_TessLevelInner %int_1
+               OpStore %95 %float_1
+        %100 = OpAccessChain %_ptr_Output_float %gl_TessLevelOuter %int_0
+               OpStore %100 %float_1
+        %101 = OpAccessChain %_ptr_Output_float %gl_TessLevelOuter %int_1
+               OpStore %101 %float_1
+        %103 = OpAccessChain %_ptr_Output_float %gl_TessLevelOuter %int_2
+               OpStore %103 %float_1
+        %105 = OpAccessChain %_ptr_Output_float %gl_TessLevelOuter %int_3
+               OpStore %105 %float_1
+        %113 = OpLoad %int %gl_InvocationID
+        %118 = OpLoad %int %gl_InvocationID
+        %120 = OpAccessChain %_ptr_Input_v4float %gl_in %118 %int_0
+        %121 = OpLoad %v4float %120
+        %123 = OpAccessChain %_ptr_Output_v4float %gl_out %113 %int_0
+               OpStore %123 %121
+               OpReturn
+               OpFunctionEnd
+END
+
+# SHADER tessellation_evaluation tese_shader GLSL
+# #version 430
+# precision highp float;
+#
+# layout (triangles) in;
+#
+# layout (location = 0) flat in vec3 frexp_x_in[];
+# layout (location = 1) flat in vec3 frexp_exp_in[];
+# layout (location = 2) flat in vec3 frexpStruct_x_in[];
+# layout (location = 3) flat in vec3 frexpStruct_exp_in[];
+#
+# layout (location = 0) flat out vec3 frexp_x_out;
+# layout (location = 1) flat out vec3 frexp_exp_out;
+# layout (location = 2) flat out vec3 frexpStruct_x_out;
+# layout (location = 3) flat out vec3 frexpStruct_exp_out;
+#
+# void main ()
+# {
+#     gl_Position = gl_TessCoord.x * gl_in[0].gl_Position +
+#                   gl_TessCoord.y * gl_in[1].gl_Position +
+#                   gl_TessCoord.z * gl_in[2].gl_Position;
+#
+#     frexp_x_out = frexp_x_in[0];
+#     frexp_exp_out = frexp_exp_in[0];
+#     frexpStruct_x_out = frexpStruct_x_in[0];
+#     frexpStruct_exp_out = frexpStruct_exp_in[0];
+# }
+# END
+
+SHADER tessellation_evaluation tese_shader SPIRV-ASM
+               OpCapability Tessellation
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint TessellationEvaluation %main "main" %_ %gl_TessCoord %gl_in %frexp_x_out %frexp_x_in %frexp_exp_out %frexp_exp_in %frexpStruct_x_out %frexpStruct_x_in %frexpStruct_exp_out %frexpStruct_exp_in
+               OpExecutionMode %main Triangles
+               OpExecutionMode %main SpacingEqual
+               OpExecutionMode %main VertexOrderCcw
+               OpMemberDecorate %gl_PerVertex 0 BuiltIn Position
+               OpMemberDecorate %gl_PerVertex 1 BuiltIn PointSize
+               OpMemberDecorate %gl_PerVertex 2 BuiltIn ClipDistance
+               OpDecorate %gl_PerVertex Block
+               OpDecorate %gl_TessCoord BuiltIn TessCoord
+               OpMemberDecorate %gl_PerVertex_0 0 BuiltIn Position
+               OpMemberDecorate %gl_PerVertex_0 1 BuiltIn PointSize
+               OpMemberDecorate %gl_PerVertex_0 2 BuiltIn ClipDistance
+               OpDecorate %gl_PerVertex_0 Block
+               OpDecorate %frexp_x_out Flat
+               OpDecorate %frexp_x_out Location 0
+               OpDecorate %frexp_x_in Flat
+               OpDecorate %frexp_x_in Location 0
+               OpDecorate %frexp_exp_out Flat
+               OpDecorate %frexp_exp_out Location 1
+               OpDecorate %frexp_exp_in Flat
+               OpDecorate %frexp_exp_in Location 1
+               OpDecorate %frexpStruct_x_out Flat
+               OpDecorate %frexpStruct_x_out Location 2
+               OpDecorate %frexpStruct_x_in Flat
+               OpDecorate %frexpStruct_x_in Location 2
+               OpDecorate %frexpStruct_exp_out Flat
+               OpDecorate %frexpStruct_exp_out Location 3
+               OpDecorate %frexpStruct_exp_in Flat
+               OpDecorate %frexpStruct_exp_in Location 3
+       %void = OpTypeVoid
+          %3 = OpTypeFunction %void
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+       %uint = OpTypeInt 32 0
+     %uint_1 = OpConstant %uint 1
+%_arr_float_uint_1 = OpTypeArray %float %uint_1
+%gl_PerVertex = OpTypeStruct %v4float %float %_arr_float_uint_1
+%_ptr_Output_gl_PerVertex = OpTypePointer Output %gl_PerVertex
+          %_ = OpVariable %_ptr_Output_gl_PerVertex Output
+        %int = OpTypeInt 32 1
+      %int_0 = OpConstant %int 0
+    %v3float = OpTypeVector %float 3
+%_ptr_Input_v3float = OpTypePointer Input %v3float
+%gl_TessCoord = OpVariable %_ptr_Input_v3float Input
+     %uint_0 = OpConstant %uint 0
+%_ptr_Input_float = OpTypePointer Input %float
+%gl_PerVertex_0 = OpTypeStruct %v4float %float %_arr_float_uint_1
+    %uint_32 = OpConstant %uint 32
+%_arr_gl_PerVertex_0_uint_32 = OpTypeArray %gl_PerVertex_0 %uint_32
+%_ptr_Input__arr_gl_PerVertex_0_uint_32 = OpTypePointer Input %_arr_gl_PerVertex_0_uint_32
+      %gl_in = OpVariable %_ptr_Input__arr_gl_PerVertex_0_uint_32 Input
+%_ptr_Input_v4float = OpTypePointer Input %v4float
+      %int_1 = OpConstant %int 1
+     %uint_2 = OpConstant %uint 2
+      %int_2 = OpConstant %int 2
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+%_ptr_Output_v3float = OpTypePointer Output %v3float
+%frexp_x_out = OpVariable %_ptr_Output_v3float Output
+%_arr_v3float_uint_32 = OpTypeArray %v3float %uint_32
+%_ptr_Input__arr_v3float_uint_32 = OpTypePointer Input %_arr_v3float_uint_32
+ %frexp_x_in = OpVariable %_ptr_Input__arr_v3float_uint_32 Input
+%frexp_exp_out = OpVariable %_ptr_Output_v3float Output
+%frexp_exp_in = OpVariable %_ptr_Input__arr_v3float_uint_32 Input
+%frexpStruct_x_out = OpVariable %_ptr_Output_v3float Output
+%frexpStruct_x_in = OpVariable %_ptr_Input__arr_v3float_uint_32 Input
+%frexpStruct_exp_out = OpVariable %_ptr_Output_v3float Output
+%frexpStruct_exp_in = OpVariable %_ptr_Input__arr_v3float_uint_32 Input
+       %main = OpFunction %void None %3
+          %5 = OpLabel
+         %21 = OpAccessChain %_ptr_Input_float %gl_TessCoord %uint_0
+         %22 = OpLoad %float %21
+         %29 = OpAccessChain %_ptr_Input_v4float %gl_in %int_0 %int_0
+         %30 = OpLoad %v4float %29
+         %31 = OpVectorTimesScalar %v4float %30 %22
+         %32 = OpAccessChain %_ptr_Input_float %gl_TessCoord %uint_1
+         %33 = OpLoad %float %32
+         %35 = OpAccessChain %_ptr_Input_v4float %gl_in %int_1 %int_0
+         %36 = OpLoad %v4float %35
+         %37 = OpVectorTimesScalar %v4float %36 %33
+         %38 = OpFAdd %v4float %31 %37
+         %40 = OpAccessChain %_ptr_Input_float %gl_TessCoord %uint_2
+         %41 = OpLoad %float %40
+         %43 = OpAccessChain %_ptr_Input_v4float %gl_in %int_2 %int_0
+         %44 = OpLoad %v4float %43
+         %45 = OpVectorTimesScalar %v4float %44 %41
+         %46 = OpFAdd %v4float %38 %45
+         %48 = OpAccessChain %_ptr_Output_v4float %_ %int_0
+               OpStore %48 %46
+         %54 = OpAccessChain %_ptr_Input_v3float %frexp_x_in %int_0
+         %55 = OpLoad %v3float %54
+               OpStore %frexp_x_out %55
+         %58 = OpAccessChain %_ptr_Input_v3float %frexp_exp_in %int_0
+         %59 = OpLoad %v3float %58
+               OpStore %frexp_exp_out %59
+         %62 = OpAccessChain %_ptr_Input_v3float %frexpStruct_x_in %int_0
+         %63 = OpLoad %v3float %62
+               OpStore %frexpStruct_x_out %63
+         %66 = OpAccessChain %_ptr_Input_v3float %frexpStruct_exp_in %int_0
+         %67 = OpLoad %v3float %66
+               OpStore %frexpStruct_exp_out %67
+               OpReturn
+               OpFunctionEnd
+END
+
+# SHADER fragment frag_shader GLSL
+# #version 430
+# precision highp float;
+#
+# layout (location = 0) flat in vec3 frexp_x_in;
+# layout (location = 1) flat in vec3 frexp_exp_in;
+# layout (location = 2) flat in vec3 frexpStruct_x_in;
+# layout (location = 3) flat in vec3 frexpStruct_exp_in;
+#
+# layout (location = 0) out vec4 frexp_x_out;
+# layout (location = 1) out vec4 frexp_exp_out;
+# layout (location = 2) out vec4 frexpStruct_x_out;
+# layout (location = 3) out vec4 frexpStruct_exp_out;
+#
+# const vec4 clear_value = vec4(0.0, 0.0, 0.0, 1.0);
+#
+# void main ()
+# {
+#     frexp_x_out = clear_value;
+#     frexp_exp_out = clear_value;
+#     frexpStruct_x_out = clear_value;
+#     frexpStruct_exp_out = clear_value;
+#     frexp_x_out.rgb = frexp_x_in;
+#     frexp_exp_out.rgb = frexp_exp_in;
+#     frexpStruct_x_out.rgb = frexpStruct_x_in;
+#     frexpStruct_exp_out.rgb = frexpStruct_exp_in;
+# }
+# END
+
+SHADER fragment frag_shader SPIRV-ASM
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %main "main" %frexp_x_out %frexp_exp_out %frexpStruct_x_out %frexpStruct_exp_out %frexp_x_in %frexp_exp_in %frexpStruct_x_in %frexpStruct_exp_in
+               OpExecutionMode %main OriginUpperLeft
+               OpDecorate %frexp_x_out Location 0
+               OpDecorate %frexp_exp_out Location 1
+               OpDecorate %frexpStruct_x_out Location 2
+               OpDecorate %frexpStruct_exp_out Location 3
+               OpDecorate %frexp_x_in Flat
+               OpDecorate %frexp_x_in Location 0
+               OpDecorate %frexp_exp_in Flat
+               OpDecorate %frexp_exp_in Location 1
+               OpDecorate %frexpStruct_x_in Flat
+               OpDecorate %frexpStruct_x_in Location 2
+               OpDecorate %frexpStruct_exp_in Flat
+               OpDecorate %frexpStruct_exp_in Location 3
+       %void = OpTypeVoid
+          %3 = OpTypeFunction %void
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+%frexp_x_out = OpVariable %_ptr_Output_v4float Output
+    %float_0 = OpConstant %float 0
+    %float_1 = OpConstant %float 1
+         %12 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_1
+%frexp_exp_out = OpVariable %_ptr_Output_v4float Output
+%frexpStruct_x_out = OpVariable %_ptr_Output_v4float Output
+%frexpStruct_exp_out = OpVariable %_ptr_Output_v4float Output
+    %v3float = OpTypeVector %float 3
+%_ptr_Input_v3float = OpTypePointer Input %v3float
+ %frexp_x_in = OpVariable %_ptr_Input_v3float Input
+%frexp_exp_in = OpVariable %_ptr_Input_v3float Input
+%frexpStruct_x_in = OpVariable %_ptr_Input_v3float Input
+%frexpStruct_exp_in = OpVariable %_ptr_Input_v3float Input
+       %main = OpFunction %void None %3
+          %5 = OpLabel
+               OpStore %frexp_x_out %12
+               OpStore %frexp_exp_out %12
+               OpStore %frexpStruct_x_out %12
+               OpStore %frexpStruct_exp_out %12
+         %19 = OpLoad %v3float %frexp_x_in
+         %20 = OpLoad %v4float %frexp_x_out
+         %21 = OpVectorShuffle %v4float %20 %19 4 5 6 3
+               OpStore %frexp_x_out %21
+         %23 = OpLoad %v3float %frexp_exp_in
+         %24 = OpLoad %v4float %frexp_exp_out
+         %25 = OpVectorShuffle %v4float %24 %23 4 5 6 3
+               OpStore %frexp_exp_out %25
+         %27 = OpLoad %v3float %frexpStruct_x_in
+         %28 = OpLoad %v4float %frexpStruct_x_out
+         %29 = OpVectorShuffle %v4float %28 %27 4 5 6 3
+               OpStore %frexpStruct_x_out %29
+         %31 = OpLoad %v3float %frexpStruct_exp_in
+         %32 = OpLoad %v4float %frexpStruct_exp_out
+         %33 = OpVectorShuffle %v4float %32 %31 4 5 6 3
+               OpStore %frexpStruct_exp_out %33
+               OpReturn
+               OpFunctionEnd
+END
+
+BUFFER buf_in DATA_TYPE uint32 SIZE 1296 FILE TEXT input.txt
+BUFFER vertices DATA_TYPE vec2<float> SIZE 7776 FILE TEXT grid_vertices.txt
+
+BUFFER frexp_x FORMAT R32G32B32A32_SFLOAT
+BUFFER frexp_exp FORMAT R32G32B32A32_SFLOAT
+BUFFER frexpStruct_x FORMAT R32G32B32A32_SFLOAT
+BUFFER frexpStruct_exp FORMAT R32G32B32A32_SFLOAT
+
+PIPELINE graphics test_pipeline
+    FRAMEBUFFER_SIZE 144 144
+
+    ATTACH vert_shader
+    ATTACH tesc_shader
+    ATTACH tese_shader
+    ATTACH frag_shader
+
+    VERTEX_DATA vertices LOCATION 0
+
+    BIND BUFFER buf_in AS storage DESCRIPTOR_SET 0 BINDING 0
+    BIND BUFFER frexp_x AS color LOCATION 0
+    BIND BUFFER frexp_exp AS color LOCATION 1
+    BIND BUFFER frexpStruct_x AS color LOCATION 2
+    BIND BUFFER frexpStruct_exp AS color LOCATION 3
+END
+
+#RUN test_pipeline DRAW_GRID POS 0 0 SIZE 144 144 CELLS 144 144
+RUN test_pipeline DRAW_ARRAY AS PATCH_LIST START_IDX 0 COUNT 7776
+
+EXPECT frexp_x EQ_BUFFER frexpStruct_x
+EXPECT frexp_exp EQ_BUFFER frexpStruct_exp
diff --git a/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/frexpstruct_3_tese.amber b/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/frexpstruct_3_tese.amber
new file mode 100644
index 0000000..90d71f0
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/frexpstruct_3_tese.amber
@@ -0,0 +1,540 @@
+#!amber
+
+# Copyright 2021 Google LLC
+#
+# 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.
+
+# A tessellation evaluation shader test for FrexpStruct.
+
+DEVICE_FEATURE tessellationShader
+
+# SHADER vertex vert_shader GLSL
+# #version 430
+# precision highp float;
+#
+# const uint ndp = 1296;
+# const uint ndpSqrt = uint(sqrt(ndp));
+# const float halfGridElementSize = 1.0 / float(ndpSqrt);
+#
+# layout (location = 0) in vec2 position;
+# layout (location = 0) flat out uint ndx_out;
+#
+# void main ()
+# {
+#     uint xcoord = uint(ndpSqrt * ((position.x + halfGridElementSize + 1) / 2) - 1);
+#     uint ycoord = uint(ndpSqrt * ((position.y + halfGridElementSize + 1) / 2) - 1);
+#     ndx_out = xcoord + ycoord * ndpSqrt;
+#
+#     gl_Position = vec4(position, 0, 1);
+#
+#     return;
+# }
+# END
+
+SHADER vertex vert_shader SPIRV-ASM
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %main "main" %position %ndx_out %_
+               OpDecorate %position Location 0
+               OpDecorate %ndx_out Flat
+               OpDecorate %ndx_out Location 0
+               OpMemberDecorate %gl_PerVertex 0 BuiltIn Position
+               OpMemberDecorate %gl_PerVertex 1 BuiltIn PointSize
+               OpMemberDecorate %gl_PerVertex 2 BuiltIn ClipDistance
+               OpDecorate %gl_PerVertex Block
+       %void = OpTypeVoid
+          %3 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+      %float = OpTypeFloat 32
+    %v2float = OpTypeVector %float 2
+%_ptr_Input_v2float = OpTypePointer Input %v2float
+   %position = OpVariable %_ptr_Input_v2float Input
+     %uint_0 = OpConstant %uint 0
+%_ptr_Input_float = OpTypePointer Input %float
+    %float_1 = OpConstant %float 1
+     %uint_1 = OpConstant %uint 1
+%_ptr_Output_uint = OpTypePointer Output %uint
+    %ndx_out = OpVariable %_ptr_Output_uint Output
+    %uint_36 = OpConstant %uint 36
+    %v4float = OpTypeVector %float 4
+%_arr_float_uint_1 = OpTypeArray %float %uint_1
+%gl_PerVertex = OpTypeStruct %v4float %float %_arr_float_uint_1
+%_ptr_Output_gl_PerVertex = OpTypePointer Output %gl_PerVertex
+          %_ = OpVariable %_ptr_Output_gl_PerVertex Output
+        %int = OpTypeInt 32 1
+      %int_0 = OpConstant %int 0
+    %float_0 = OpConstant %float 0
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+%float_1_02777779 = OpConstant %float 1.02777779
+   %float_18 = OpConstant %float 18
+       %main = OpFunction %void None %3
+          %5 = OpLabel
+         %16 = OpAccessChain %_ptr_Input_float %position %uint_0
+         %17 = OpLoad %float %16
+         %21 = OpFAdd %float %17 %float_1_02777779
+         %24 = OpFMul %float %21 %float_18
+         %25 = OpFSub %float %24 %float_1
+         %26 = OpConvertFToU %uint %25
+         %29 = OpAccessChain %_ptr_Input_float %position %uint_1
+         %30 = OpLoad %float %29
+         %32 = OpFAdd %float %30 %float_1_02777779
+         %34 = OpFMul %float %32 %float_18
+         %35 = OpFSub %float %34 %float_1
+         %36 = OpConvertFToU %uint %35
+         %42 = OpIMul %uint %36 %uint_36
+         %43 = OpIAdd %uint %26 %42
+               OpStore %ndx_out %43
+         %51 = OpLoad %v2float %position
+         %53 = OpCompositeExtract %float %51 0
+         %54 = OpCompositeExtract %float %51 1
+         %55 = OpCompositeConstruct %v4float %53 %54 %float_0 %float_1
+         %57 = OpAccessChain %_ptr_Output_v4float %_ %int_0
+               OpStore %57 %55
+               OpReturn
+               OpFunctionEnd
+END
+
+# SHADER tessellation_control tesc_shader GLSL
+# #version 430
+# precision highp float;
+#
+# layout (vertices = 3) out;
+#
+# layout (location = 0) flat in uint ndx_in[];
+# layout (location = 0) flat out uint ndx_out[];
+#
+# void main ()
+# {
+#     gl_TessLevelInner[0]    = 1.0;
+#     gl_TessLevelInner[1]    = 1.0;
+#     gl_TessLevelOuter[0]    = 1.0;
+#     gl_TessLevelOuter[1]    = 1.0;
+#     gl_TessLevelOuter[2]    = 1.0;
+#     gl_TessLevelOuter[3]    = 1.0;
+#
+#     gl_out[gl_InvocationID].gl_Position = gl_in[gl_InvocationID].gl_Position;
+#     ndx_out[gl_InvocationID] = ndx_in[gl_InvocationID];
+# }
+# END
+
+SHADER tessellation_control tesc_shader SPIRV-ASM
+               OpCapability Tessellation
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint TessellationControl %main "main" %gl_TessLevelInner %gl_TessLevelOuter %gl_out %gl_InvocationID %gl_in %ndx_out %ndx_in
+               OpExecutionMode %main OutputVertices 3
+               OpDecorate %gl_TessLevelInner Patch
+               OpDecorate %gl_TessLevelInner BuiltIn TessLevelInner
+               OpDecorate %gl_TessLevelOuter Patch
+               OpDecorate %gl_TessLevelOuter BuiltIn TessLevelOuter
+               OpMemberDecorate %gl_PerVertex 0 BuiltIn Position
+               OpMemberDecorate %gl_PerVertex 1 BuiltIn PointSize
+               OpMemberDecorate %gl_PerVertex 2 BuiltIn ClipDistance
+               OpDecorate %gl_PerVertex Block
+               OpDecorate %gl_InvocationID BuiltIn InvocationId
+               OpMemberDecorate %gl_PerVertex_0 0 BuiltIn Position
+               OpMemberDecorate %gl_PerVertex_0 1 BuiltIn PointSize
+               OpMemberDecorate %gl_PerVertex_0 2 BuiltIn ClipDistance
+               OpDecorate %gl_PerVertex_0 Block
+               OpDecorate %ndx_out Flat
+               OpDecorate %ndx_out Location 0
+               OpDecorate %ndx_in Flat
+               OpDecorate %ndx_in Location 0
+       %void = OpTypeVoid
+          %3 = OpTypeFunction %void
+      %float = OpTypeFloat 32
+       %uint = OpTypeInt 32 0
+     %uint_2 = OpConstant %uint 2
+%_arr_float_uint_2 = OpTypeArray %float %uint_2
+%_ptr_Output__arr_float_uint_2 = OpTypePointer Output %_arr_float_uint_2
+%gl_TessLevelInner = OpVariable %_ptr_Output__arr_float_uint_2 Output
+        %int = OpTypeInt 32 1
+      %int_0 = OpConstant %int 0
+    %float_1 = OpConstant %float 1
+%_ptr_Output_float = OpTypePointer Output %float
+      %int_1 = OpConstant %int 1
+     %uint_4 = OpConstant %uint 4
+%_arr_float_uint_4 = OpTypeArray %float %uint_4
+%_ptr_Output__arr_float_uint_4 = OpTypePointer Output %_arr_float_uint_4
+%gl_TessLevelOuter = OpVariable %_ptr_Output__arr_float_uint_4 Output
+      %int_2 = OpConstant %int 2
+      %int_3 = OpConstant %int 3
+    %v4float = OpTypeVector %float 4
+     %uint_1 = OpConstant %uint 1
+%_arr_float_uint_1 = OpTypeArray %float %uint_1
+%gl_PerVertex = OpTypeStruct %v4float %float %_arr_float_uint_1
+     %uint_3 = OpConstant %uint 3
+%_arr_gl_PerVertex_uint_3 = OpTypeArray %gl_PerVertex %uint_3
+%_ptr_Output__arr_gl_PerVertex_uint_3 = OpTypePointer Output %_arr_gl_PerVertex_uint_3
+     %gl_out = OpVariable %_ptr_Output__arr_gl_PerVertex_uint_3 Output
+%_ptr_Input_int = OpTypePointer Input %int
+%gl_InvocationID = OpVariable %_ptr_Input_int Input
+%gl_PerVertex_0 = OpTypeStruct %v4float %float %_arr_float_uint_1
+    %uint_32 = OpConstant %uint 32
+%_arr_gl_PerVertex_0_uint_32 = OpTypeArray %gl_PerVertex_0 %uint_32
+%_ptr_Input__arr_gl_PerVertex_0_uint_32 = OpTypePointer Input %_arr_gl_PerVertex_0_uint_32
+      %gl_in = OpVariable %_ptr_Input__arr_gl_PerVertex_0_uint_32 Input
+%_ptr_Input_v4float = OpTypePointer Input %v4float
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+%_arr_uint_uint_3 = OpTypeArray %uint %uint_3
+%_ptr_Output__arr_uint_uint_3 = OpTypePointer Output %_arr_uint_uint_3
+    %ndx_out = OpVariable %_ptr_Output__arr_uint_uint_3 Output
+%_arr_uint_uint_32 = OpTypeArray %uint %uint_32
+%_ptr_Input__arr_uint_uint_32 = OpTypePointer Input %_arr_uint_uint_32
+     %ndx_in = OpVariable %_ptr_Input__arr_uint_uint_32 Input
+%_ptr_Input_uint = OpTypePointer Input %uint
+%_ptr_Output_uint = OpTypePointer Output %uint
+       %main = OpFunction %void None %3
+          %5 = OpLabel
+         %16 = OpAccessChain %_ptr_Output_float %gl_TessLevelInner %int_0
+               OpStore %16 %float_1
+         %18 = OpAccessChain %_ptr_Output_float %gl_TessLevelInner %int_1
+               OpStore %18 %float_1
+         %23 = OpAccessChain %_ptr_Output_float %gl_TessLevelOuter %int_0
+               OpStore %23 %float_1
+         %24 = OpAccessChain %_ptr_Output_float %gl_TessLevelOuter %int_1
+               OpStore %24 %float_1
+         %26 = OpAccessChain %_ptr_Output_float %gl_TessLevelOuter %int_2
+               OpStore %26 %float_1
+         %28 = OpAccessChain %_ptr_Output_float %gl_TessLevelOuter %int_3
+               OpStore %28 %float_1
+         %39 = OpLoad %int %gl_InvocationID
+         %47 = OpAccessChain %_ptr_Input_v4float %gl_in %39 %int_0
+         %48 = OpLoad %v4float %47
+         %50 = OpAccessChain %_ptr_Output_v4float %gl_out %39 %int_0
+               OpStore %50 %48
+         %60 = OpAccessChain %_ptr_Input_uint %ndx_in %39
+         %61 = OpLoad %uint %60
+         %63 = OpAccessChain %_ptr_Output_uint %ndx_out %39
+               OpStore %63 %61
+               OpReturn
+               OpFunctionEnd
+END
+
+# SHADER tessellation_evaluation tese_shader GLSL
+# #version 430
+# precision highp float;
+#
+# const uint ndp = 1296;
+#
+# layout (triangles) in;
+#
+# layout (location = 0) flat in uint ndx_in[];
+# layout (location = 0) flat out vec3 frexp_x_out;
+# layout (location = 1) flat out vec3 frexp_exp_out;
+# layout (location = 2) flat out vec3 frexpStruct_x_out;
+# layout (location = 3) flat out vec3 frexpStruct_exp_out;
+#
+# layout(set = 0, binding = 0) readonly buffer block0 {
+#     uvec3 in_values[ndp];
+# };
+#
+# struct frexpStructType
+# {
+#     vec3 x;
+#     ivec3 exp;
+# };
+#
+# // Replaced with native function in SPIR-V.
+# frexpStructType frexpStruct (vec3 orig)
+# {
+#     vec3 x;
+#     ivec3 exp;
+#     x = frexp(orig, exp);
+#     frexpStructType res = { x, exp };
+#     return res;
+# }
+#
+# void main ()
+# {
+#     gl_Position = gl_TessCoord.x * gl_in[0].gl_Position +
+#                   gl_TessCoord.y * gl_in[1].gl_Position +
+#                   gl_TessCoord.z * gl_in[2].gl_Position;
+#
+#     uvec3 in_uint = in_values[ndx_in[0]];
+#     vec3 in_float = uintBitsToFloat(in_uint);
+#     vec3 x;
+#     ivec3 exp;
+#     frexpStructType res;
+#
+#     x = frexp(in_float, exp);
+#     res = frexpStruct(in_float);
+#
+#     frexp_x_out = x;
+#     frexp_exp_out = intBitsToFloat(exp);
+#     frexpStruct_x_out = res.x;
+#     frexpStruct_exp_out = intBitsToFloat(res.exp);
+# }
+# END
+
+SHADER tessellation_evaluation tese_shader SPIRV-ASM
+               OpCapability Tessellation
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint TessellationEvaluation %main "main" %_ %gl_TessCoord %gl_in %ndx_in %frexp_x_out %frexp_exp_out %frexpStruct_x_out %frexpStruct_exp_out
+               OpExecutionMode %main Triangles
+               OpExecutionMode %main SpacingEqual
+               OpExecutionMode %main VertexOrderCcw
+               OpMemberDecorate %gl_PerVertex 0 BuiltIn Position
+               OpMemberDecorate %gl_PerVertex 1 BuiltIn PointSize
+               OpMemberDecorate %gl_PerVertex 2 BuiltIn ClipDistance
+               OpDecorate %gl_PerVertex Block
+               OpDecorate %gl_TessCoord BuiltIn TessCoord
+               OpMemberDecorate %gl_PerVertex_0 0 BuiltIn Position
+               OpMemberDecorate %gl_PerVertex_0 1 BuiltIn PointSize
+               OpMemberDecorate %gl_PerVertex_0 2 BuiltIn ClipDistance
+               OpDecorate %gl_PerVertex_0 Block
+               OpDecorate %_arr_v3uint_uint_1296 ArrayStride 16
+               OpMemberDecorate %block0 0 NonWritable
+               OpMemberDecorate %block0 0 Offset 0
+               OpDecorate %block0 BufferBlock
+               OpDecorate %__0 DescriptorSet 0
+               OpDecorate %__0 Binding 0
+               OpDecorate %ndx_in Flat
+               OpDecorate %ndx_in Location 0
+               OpDecorate %frexp_x_out Flat
+               OpDecorate %frexp_x_out Location 0
+               OpDecorate %frexp_exp_out Flat
+               OpDecorate %frexp_exp_out Location 1
+               OpDecorate %frexpStruct_x_out Flat
+               OpDecorate %frexpStruct_x_out Location 2
+               OpDecorate %frexpStruct_exp_out Flat
+               OpDecorate %frexpStruct_exp_out Location 3
+       %void = OpTypeVoid
+          %3 = OpTypeFunction %void
+      %float = OpTypeFloat 32
+    %v3float = OpTypeVector %float 3
+%_ptr_Function_v3float = OpTypePointer Function %v3float
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+%frexpStructType = OpTypeStruct %v3float %v3int
+         %12 = OpTypeFunction %frexpStructType %_ptr_Function_v3float
+%_ptr_Function_v3int = OpTypePointer Function %v3int
+%_ptr_Function_frexpStructType = OpTypePointer Function %frexpStructType
+    %v4float = OpTypeVector %float 4
+       %uint = OpTypeInt 32 0
+     %uint_1 = OpConstant %uint 1
+%_arr_float_uint_1 = OpTypeArray %float %uint_1
+%gl_PerVertex = OpTypeStruct %v4float %float %_arr_float_uint_1
+%_ptr_Output_gl_PerVertex = OpTypePointer Output %gl_PerVertex
+          %_ = OpVariable %_ptr_Output_gl_PerVertex Output
+      %int_0 = OpConstant %int 0
+%_ptr_Input_v3float = OpTypePointer Input %v3float
+%gl_TessCoord = OpVariable %_ptr_Input_v3float Input
+     %uint_0 = OpConstant %uint 0
+%_ptr_Input_float = OpTypePointer Input %float
+%gl_PerVertex_0 = OpTypeStruct %v4float %float %_arr_float_uint_1
+    %uint_32 = OpConstant %uint 32
+%_arr_gl_PerVertex_0_uint_32 = OpTypeArray %gl_PerVertex_0 %uint_32
+%_ptr_Input__arr_gl_PerVertex_0_uint_32 = OpTypePointer Input %_arr_gl_PerVertex_0_uint_32
+      %gl_in = OpVariable %_ptr_Input__arr_gl_PerVertex_0_uint_32 Input
+%_ptr_Input_v4float = OpTypePointer Input %v4float
+      %int_1 = OpConstant %int 1
+     %uint_2 = OpConstant %uint 2
+      %int_2 = OpConstant %int 2
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+     %v3uint = OpTypeVector %uint 3
+%_ptr_Function_v3uint = OpTypePointer Function %v3uint
+  %uint_1296 = OpConstant %uint 1296
+%_arr_v3uint_uint_1296 = OpTypeArray %v3uint %uint_1296
+     %block0 = OpTypeStruct %_arr_v3uint_uint_1296
+%_ptr_Uniform_block0 = OpTypePointer Uniform %block0
+        %__0 = OpVariable %_ptr_Uniform_block0 Uniform
+%_arr_uint_uint_32 = OpTypeArray %uint %uint_32
+%_ptr_Input__arr_uint_uint_32 = OpTypePointer Input %_arr_uint_uint_32
+     %ndx_in = OpVariable %_ptr_Input__arr_uint_uint_32 Input
+%_ptr_Input_uint = OpTypePointer Input %uint
+%_ptr_Uniform_v3uint = OpTypePointer Uniform %v3uint
+%_ptr_Output_v3float = OpTypePointer Output %v3float
+%frexp_x_out = OpVariable %_ptr_Output_v3float Output
+%frexp_exp_out = OpVariable %_ptr_Output_v3float Output
+%frexpStruct_x_out = OpVariable %_ptr_Output_v3float Output
+%frexpStruct_exp_out = OpVariable %_ptr_Output_v3float Output
+       %main = OpFunction %void None %3
+          %5 = OpLabel
+    %in_uint = OpVariable %_ptr_Function_v3uint Function
+   %in_float = OpVariable %_ptr_Function_v3float Function
+        %x_0 = OpVariable %_ptr_Function_v3float Function
+      %exp_0 = OpVariable %_ptr_Function_v3int Function
+      %res_0 = OpVariable %_ptr_Function_frexpStructType Function
+         %41 = OpAccessChain %_ptr_Input_float %gl_TessCoord %uint_0
+         %42 = OpLoad %float %41
+         %49 = OpAccessChain %_ptr_Input_v4float %gl_in %int_0 %int_0
+         %50 = OpLoad %v4float %49
+         %51 = OpVectorTimesScalar %v4float %50 %42
+         %52 = OpAccessChain %_ptr_Input_float %gl_TessCoord %uint_1
+         %53 = OpLoad %float %52
+         %55 = OpAccessChain %_ptr_Input_v4float %gl_in %int_1 %int_0
+         %56 = OpLoad %v4float %55
+         %57 = OpVectorTimesScalar %v4float %56 %53
+         %58 = OpFAdd %v4float %51 %57
+         %60 = OpAccessChain %_ptr_Input_float %gl_TessCoord %uint_2
+         %61 = OpLoad %float %60
+         %63 = OpAccessChain %_ptr_Input_v4float %gl_in %int_2 %int_0
+         %64 = OpLoad %v4float %63
+         %65 = OpVectorTimesScalar %v4float %64 %61
+         %66 = OpFAdd %v4float %58 %65
+         %68 = OpAccessChain %_ptr_Output_v4float %_ %int_0
+               OpStore %68 %66
+         %81 = OpAccessChain %_ptr_Input_uint %ndx_in %int_0
+         %82 = OpLoad %uint %81
+         %84 = OpAccessChain %_ptr_Uniform_v3uint %__0 %int_0 %82
+         %85 = OpLoad %v3uint %84
+               OpStore %in_uint %85
+         %87 = OpLoad %v3uint %in_uint
+         %88 = OpBitcast %v3float %87
+               OpStore %in_float %88
+         %90 = OpLoad %v3float %in_float
+         %92 = OpExtInst %v3float %1 Frexp %90 %exp_0
+               OpStore %x_0 %92
+         %95 = OpLoad %v3float %in_float
+         %96 = OpExtInst %frexpStructType %1 FrexpStruct %95
+               OpStore %res_0 %96
+         %99 = OpLoad %v3float %x_0
+               OpStore %frexp_x_out %99
+        %101 = OpLoad %v3int %exp_0
+        %102 = OpBitcast %v3float %101
+               OpStore %frexp_exp_out %102
+        %104 = OpAccessChain %_ptr_Function_v3float %res_0 %int_0
+        %105 = OpLoad %v3float %104
+               OpStore %frexpStruct_x_out %105
+        %107 = OpAccessChain %_ptr_Function_v3int %res_0 %int_1
+        %108 = OpLoad %v3int %107
+        %109 = OpBitcast %v3float %108
+               OpStore %frexpStruct_exp_out %109
+               OpReturn
+               OpFunctionEnd
+END
+
+# SHADER fragment frag_shader GLSL
+# #version 430
+# precision highp float;
+#
+# layout (location = 0) flat in vec3 frexp_x_in;
+# layout (location = 1) flat in vec3 frexp_exp_in;
+# layout (location = 2) flat in vec3 frexpStruct_x_in;
+# layout (location = 3) flat in vec3 frexpStruct_exp_in;
+#
+# layout (location = 0) out vec4 frexp_x_out;
+# layout (location = 1) out vec4 frexp_exp_out;
+# layout (location = 2) out vec4 frexpStruct_x_out;
+# layout (location = 3) out vec4 frexpStruct_exp_out;
+#
+# const vec4 clear_value = vec4(0.0, 0.0, 0.0, 1.0);
+#
+# void main ()
+# {
+#     frexp_x_out = clear_value;
+#     frexp_exp_out = clear_value;
+#     frexpStruct_x_out = clear_value;
+#     frexpStruct_exp_out = clear_value;
+#     frexp_x_out.rgb = frexp_x_in;
+#     frexp_exp_out.rgb = frexp_exp_in;
+#     frexpStruct_x_out.rgb = frexpStruct_x_in;
+#     frexpStruct_exp_out.rgb = frexpStruct_exp_in;
+# }
+# END
+
+SHADER fragment frag_shader SPIRV-ASM
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %main "main" %frexp_x_out %frexp_exp_out %frexpStruct_x_out %frexpStruct_exp_out %frexp_x_in %frexp_exp_in %frexpStruct_x_in %frexpStruct_exp_in
+               OpExecutionMode %main OriginUpperLeft
+               OpDecorate %frexp_x_out Location 0
+               OpDecorate %frexp_exp_out Location 1
+               OpDecorate %frexpStruct_x_out Location 2
+               OpDecorate %frexpStruct_exp_out Location 3
+               OpDecorate %frexp_x_in Flat
+               OpDecorate %frexp_x_in Location 0
+               OpDecorate %frexp_exp_in Flat
+               OpDecorate %frexp_exp_in Location 1
+               OpDecorate %frexpStruct_x_in Flat
+               OpDecorate %frexpStruct_x_in Location 2
+               OpDecorate %frexpStruct_exp_in Flat
+               OpDecorate %frexpStruct_exp_in Location 3
+       %void = OpTypeVoid
+          %3 = OpTypeFunction %void
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+%frexp_x_out = OpVariable %_ptr_Output_v4float Output
+    %float_0 = OpConstant %float 0
+    %float_1 = OpConstant %float 1
+         %12 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_1
+%frexp_exp_out = OpVariable %_ptr_Output_v4float Output
+%frexpStruct_x_out = OpVariable %_ptr_Output_v4float Output
+%frexpStruct_exp_out = OpVariable %_ptr_Output_v4float Output
+    %v3float = OpTypeVector %float 3
+%_ptr_Input_v3float = OpTypePointer Input %v3float
+ %frexp_x_in = OpVariable %_ptr_Input_v3float Input
+%frexp_exp_in = OpVariable %_ptr_Input_v3float Input
+%frexpStruct_x_in = OpVariable %_ptr_Input_v3float Input
+%frexpStruct_exp_in = OpVariable %_ptr_Input_v3float Input
+       %main = OpFunction %void None %3
+          %5 = OpLabel
+               OpStore %frexp_x_out %12
+               OpStore %frexp_exp_out %12
+               OpStore %frexpStruct_x_out %12
+               OpStore %frexpStruct_exp_out %12
+         %19 = OpLoad %v3float %frexp_x_in
+         %20 = OpLoad %v4float %frexp_x_out
+         %21 = OpVectorShuffle %v4float %20 %19 4 5 6 3
+               OpStore %frexp_x_out %21
+         %23 = OpLoad %v3float %frexp_exp_in
+         %24 = OpLoad %v4float %frexp_exp_out
+         %25 = OpVectorShuffle %v4float %24 %23 4 5 6 3
+               OpStore %frexp_exp_out %25
+         %27 = OpLoad %v3float %frexpStruct_x_in
+         %28 = OpLoad %v4float %frexpStruct_x_out
+         %29 = OpVectorShuffle %v4float %28 %27 4 5 6 3
+               OpStore %frexpStruct_x_out %29
+         %31 = OpLoad %v3float %frexpStruct_exp_in
+         %32 = OpLoad %v4float %frexpStruct_exp_out
+         %33 = OpVectorShuffle %v4float %32 %31 4 5 6 3
+               OpStore %frexpStruct_exp_out %33
+               OpReturn
+               OpFunctionEnd
+END
+
+BUFFER buf_in DATA_TYPE uint32 SIZE 1296 FILE TEXT input.txt
+BUFFER vertices DATA_TYPE vec2<float> SIZE 7776 FILE TEXT grid_vertices.txt
+
+BUFFER frexp_x FORMAT R32G32B32A32_SFLOAT
+BUFFER frexp_exp FORMAT R32G32B32A32_SFLOAT
+BUFFER frexpStruct_x FORMAT R32G32B32A32_SFLOAT
+BUFFER frexpStruct_exp FORMAT R32G32B32A32_SFLOAT
+
+PIPELINE graphics test_pipeline
+    FRAMEBUFFER_SIZE 144 144
+
+    ATTACH vert_shader
+    ATTACH tesc_shader
+    ATTACH tese_shader
+    ATTACH frag_shader
+
+    VERTEX_DATA vertices LOCATION 0
+
+    BIND BUFFER buf_in AS storage DESCRIPTOR_SET 0 BINDING 0
+    BIND BUFFER frexp_x AS color LOCATION 0
+    BIND BUFFER frexp_exp AS color LOCATION 1
+    BIND BUFFER frexpStruct_x AS color LOCATION 2
+    BIND BUFFER frexpStruct_exp AS color LOCATION 3
+END
+
+#RUN test_pipeline DRAW_GRID POS 0 0 SIZE 144 144 CELLS 144 144
+RUN test_pipeline DRAW_ARRAY AS PATCH_LIST START_IDX 0 COUNT 7776
+
+EXPECT frexp_x EQ_BUFFER frexpStruct_x
+EXPECT frexp_exp EQ_BUFFER frexpStruct_exp
diff --git a/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/frexpstruct_3_vert.amber b/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/frexpstruct_3_vert.amber
new file mode 100644
index 0000000..ac15518
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/frexpstruct_3_vert.amber
@@ -0,0 +1,334 @@
+#!amber
+
+# Copyright 2021 Google LLC
+#
+# 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.
+
+# A vertex shader test for FrexpStruct.
+
+# SHADER vertex vert_shader GLSL
+# #version 430
+# precision highp float;
+#
+# const uint ndp = 1296;
+# const uint ndpSqrt = uint(sqrt(ndp));
+# const float halfGridElementSize = 1.0 / float(ndpSqrt);
+#
+# layout (location = 0) in vec2 position;
+# layout (location = 0) flat out vec3 frexp_x_out;
+# layout (location = 1) flat out vec3 frexp_exp_out;
+# layout (location = 2) flat out vec3 frexpStruct_x_out;
+# layout (location = 3) flat out vec3 frexpStruct_exp_out;
+#
+# layout(set = 0, binding = 0) readonly buffer block0 {
+#     uvec3 in_values[ndp];
+# };
+#
+# struct frexpStructType
+# {
+#     vec3 x;
+#     ivec3 exp;
+# };
+#
+# // Replaced with native function in SPIR-V.
+# frexpStructType frexpStruct (vec3 orig)
+# {
+#     vec3 x;
+#     ivec3 exp;
+#     x = frexp(orig, exp);
+#     frexpStructType res = { x, exp };
+#     return res;
+# }
+#
+# void main ()
+# {
+#     uint xcoord = uint(ndpSqrt * ((position.x + halfGridElementSize + 1) / 2) - 1);
+#     uint ycoord = uint(ndpSqrt * ((position.y + halfGridElementSize + 1) / 2) - 1);
+#     uint ndx = xcoord + ycoord * ndpSqrt;
+#
+#     uvec3 in_uint = in_values[ndx];
+#     vec3 in_float = uintBitsToFloat(in_uint);
+#     vec3 x;
+#     ivec3 exp;
+#     frexpStructType res;
+#
+#     x = frexp(in_float, exp);
+#     res = frexpStruct(in_float);
+#
+#     frexp_x_out = x;
+#     frexp_exp_out = intBitsToFloat(exp);
+#     frexpStruct_x_out = res.x;
+#     frexpStruct_exp_out = intBitsToFloat(res.exp);
+#
+#     gl_Position = vec4(position, 0, 1);
+#
+#     return;
+# }
+# END
+
+SHADER vertex vert_shader SPIRV-ASM
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %main "main" %position %frexp_x_out %frexp_exp_out %frexpStruct_x_out %frexpStruct_exp_out %__0
+               OpDecorate %position Location 0
+               OpDecorate %_arr_v3uint_uint_1296 ArrayStride 16
+               OpMemberDecorate %block0 0 NonWritable
+               OpMemberDecorate %block0 0 Offset 0
+               OpDecorate %block0 BufferBlock
+               OpDecorate %_ DescriptorSet 0
+               OpDecorate %_ Binding 0
+               OpDecorate %frexp_x_out Flat
+               OpDecorate %frexp_x_out Location 0
+               OpDecorate %frexp_exp_out Flat
+               OpDecorate %frexp_exp_out Location 1
+               OpDecorate %frexpStruct_x_out Flat
+               OpDecorate %frexpStruct_x_out Location 2
+               OpDecorate %frexpStruct_exp_out Flat
+               OpDecorate %frexpStruct_exp_out Location 3
+               OpMemberDecorate %gl_PerVertex 0 BuiltIn Position
+               OpMemberDecorate %gl_PerVertex 1 BuiltIn PointSize
+               OpMemberDecorate %gl_PerVertex 2 BuiltIn ClipDistance
+               OpDecorate %gl_PerVertex Block
+       %void = OpTypeVoid
+          %3 = OpTypeFunction %void
+      %float = OpTypeFloat 32
+    %v3float = OpTypeVector %float 3
+%_ptr_Function_v3float = OpTypePointer Function %v3float
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+%frexpStructType = OpTypeStruct %v3float %v3int
+         %12 = OpTypeFunction %frexpStructType %_ptr_Function_v3float
+%_ptr_Function_v3int = OpTypePointer Function %v3int
+%_ptr_Function_frexpStructType = OpTypePointer Function %frexpStructType
+       %uint = OpTypeInt 32 0
+%_ptr_Function_uint = OpTypePointer Function %uint
+   %float_36 = OpConstant %float 36
+    %v2float = OpTypeVector %float 2
+%_ptr_Input_v2float = OpTypePointer Input %v2float
+   %position = OpVariable %_ptr_Input_v2float Input
+     %uint_0 = OpConstant %uint 0
+%_ptr_Input_float = OpTypePointer Input %float
+%float_0_027777778 = OpConstant %float 0.027777778
+    %float_1 = OpConstant %float 1
+    %float_2 = OpConstant %float 2
+     %uint_1 = OpConstant %uint 1
+    %uint_36 = OpConstant %uint 36
+     %v3uint = OpTypeVector %uint 3
+%_ptr_Function_v3uint = OpTypePointer Function %v3uint
+  %uint_1296 = OpConstant %uint 1296
+%_arr_v3uint_uint_1296 = OpTypeArray %v3uint %uint_1296
+     %block0 = OpTypeStruct %_arr_v3uint_uint_1296
+%_ptr_Uniform_block0 = OpTypePointer Uniform %block0
+          %_ = OpVariable %_ptr_Uniform_block0 Uniform
+      %int_0 = OpConstant %int 0
+%_ptr_Uniform_v3uint = OpTypePointer Uniform %v3uint
+%_ptr_Output_v3float = OpTypePointer Output %v3float
+%frexp_x_out = OpVariable %_ptr_Output_v3float Output
+%frexp_exp_out = OpVariable %_ptr_Output_v3float Output
+%frexpStruct_x_out = OpVariable %_ptr_Output_v3float Output
+%frexpStruct_exp_out = OpVariable %_ptr_Output_v3float Output
+      %int_1 = OpConstant %int 1
+    %v4float = OpTypeVector %float 4
+%_arr_float_uint_1 = OpTypeArray %float %uint_1
+%gl_PerVertex = OpTypeStruct %v4float %float %_arr_float_uint_1
+%_ptr_Output_gl_PerVertex = OpTypePointer Output %gl_PerVertex
+        %__0 = OpVariable %_ptr_Output_gl_PerVertex Output
+    %float_0 = OpConstant %float 0
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+       %main = OpFunction %void None %3
+          %5 = OpLabel
+     %xcoord = OpVariable %_ptr_Function_uint Function
+     %ycoord = OpVariable %_ptr_Function_uint Function
+        %ndx = OpVariable %_ptr_Function_uint Function
+    %in_uint = OpVariable %_ptr_Function_v3uint Function
+   %in_float = OpVariable %_ptr_Function_v3float Function
+        %x_0 = OpVariable %_ptr_Function_v3float Function
+      %exp_0 = OpVariable %_ptr_Function_v3int Function
+      %res_0 = OpVariable %_ptr_Function_frexpStructType Function
+         %38 = OpAccessChain %_ptr_Input_float %position %uint_0
+         %39 = OpLoad %float %38
+         %41 = OpFAdd %float %39 %float_0_027777778
+         %43 = OpFAdd %float %41 %float_1
+         %45 = OpFDiv %float %43 %float_2
+         %46 = OpFMul %float %float_36 %45
+         %47 = OpFSub %float %46 %float_1
+         %48 = OpConvertFToU %uint %47
+               OpStore %xcoord %48
+         %51 = OpAccessChain %_ptr_Input_float %position %uint_1
+         %52 = OpLoad %float %51
+         %53 = OpFAdd %float %52 %float_0_027777778
+         %54 = OpFAdd %float %53 %float_1
+         %55 = OpFDiv %float %54 %float_2
+         %56 = OpFMul %float %float_36 %55
+         %57 = OpFSub %float %56 %float_1
+         %58 = OpConvertFToU %uint %57
+               OpStore %ycoord %58
+         %60 = OpLoad %uint %xcoord
+         %61 = OpLoad %uint %ycoord
+         %63 = OpIMul %uint %61 %uint_36
+         %64 = OpIAdd %uint %60 %63
+               OpStore %ndx %64
+         %74 = OpLoad %uint %ndx
+         %76 = OpAccessChain %_ptr_Uniform_v3uint %_ %int_0 %74
+         %77 = OpLoad %v3uint %76
+               OpStore %in_uint %77
+         %79 = OpLoad %v3uint %in_uint
+         %80 = OpBitcast %v3float %79
+               OpStore %in_float %80
+         %82 = OpLoad %v3float %in_float
+         %84 = OpExtInst %v3float %1 Frexp %82 %exp_0
+               OpStore %x_0 %84
+         %87 = OpLoad %v3float %in_float
+         %88 = OpExtInst %frexpStructType %1 FrexpStruct %87
+               OpStore %res_0 %88
+         %91 = OpLoad %v3float %x_0
+               OpStore %frexp_x_out %91
+         %93 = OpLoad %v3int %exp_0
+         %94 = OpBitcast %v3float %93
+               OpStore %frexp_exp_out %94
+         %96 = OpAccessChain %_ptr_Function_v3float %res_0 %int_0
+         %97 = OpLoad %v3float %96
+               OpStore %frexpStruct_x_out %97
+        %100 = OpAccessChain %_ptr_Function_v3int %res_0 %int_1
+        %101 = OpLoad %v3int %100
+        %102 = OpBitcast %v3float %101
+               OpStore %frexpStruct_exp_out %102
+        %108 = OpLoad %v2float %position
+        %110 = OpCompositeExtract %float %108 0
+        %111 = OpCompositeExtract %float %108 1
+        %112 = OpCompositeConstruct %v4float %110 %111 %float_0 %float_1
+        %114 = OpAccessChain %_ptr_Output_v4float %__0 %int_0
+               OpStore %114 %112
+               OpReturn
+               OpFunctionEnd
+END
+
+# SHADER fragment frag_shader GLSL
+# #version 430
+# precision highp float;
+#
+# layout (location = 0) flat in vec3 frexp_x_in;
+# layout (location = 1) flat in vec3 frexp_exp_in;
+# layout (location = 2) flat in vec3 frexpStruct_x_in;
+# layout (location = 3) flat in vec3 frexpStruct_exp_in;
+#
+# layout (location = 0) out vec4 frexp_x_out;
+# layout (location = 1) out vec4 frexp_exp_out;
+# layout (location = 2) out vec4 frexpStruct_x_out;
+# layout (location = 3) out vec4 frexpStruct_exp_out;
+#
+# const vec4 clear_value = vec4(0.0, 0.0, 0.0, 1.0);
+#
+# void main ()
+# {
+#     frexp_x_out = clear_value;
+#     frexp_exp_out = clear_value;
+#     frexpStruct_x_out = clear_value;
+#     frexpStruct_exp_out = clear_value;
+#     frexp_x_out.rgb = frexp_x_in;
+#     frexp_exp_out.rgb = frexp_exp_in;
+#     frexpStruct_x_out.rgb = frexpStruct_x_in;
+#     frexpStruct_exp_out.rgb = frexpStruct_exp_in;
+# }
+# END
+
+SHADER fragment frag_shader SPIRV-ASM
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %main "main" %frexp_x_out %frexp_exp_out %frexpStruct_x_out %frexpStruct_exp_out %frexp_x_in %frexp_exp_in %frexpStruct_x_in %frexpStruct_exp_in
+               OpExecutionMode %main OriginUpperLeft
+               OpDecorate %frexp_x_out Location 0
+               OpDecorate %frexp_exp_out Location 1
+               OpDecorate %frexpStruct_x_out Location 2
+               OpDecorate %frexpStruct_exp_out Location 3
+               OpDecorate %frexp_x_in Flat
+               OpDecorate %frexp_x_in Location 0
+               OpDecorate %frexp_exp_in Flat
+               OpDecorate %frexp_exp_in Location 1
+               OpDecorate %frexpStruct_x_in Flat
+               OpDecorate %frexpStruct_x_in Location 2
+               OpDecorate %frexpStruct_exp_in Flat
+               OpDecorate %frexpStruct_exp_in Location 3
+       %void = OpTypeVoid
+          %3 = OpTypeFunction %void
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+%frexp_x_out = OpVariable %_ptr_Output_v4float Output
+    %float_0 = OpConstant %float 0
+    %float_1 = OpConstant %float 1
+         %12 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_1
+%frexp_exp_out = OpVariable %_ptr_Output_v4float Output
+%frexpStruct_x_out = OpVariable %_ptr_Output_v4float Output
+%frexpStruct_exp_out = OpVariable %_ptr_Output_v4float Output
+    %v3float = OpTypeVector %float 3
+%_ptr_Input_v3float = OpTypePointer Input %v3float
+ %frexp_x_in = OpVariable %_ptr_Input_v3float Input
+%frexp_exp_in = OpVariable %_ptr_Input_v3float Input
+%frexpStruct_x_in = OpVariable %_ptr_Input_v3float Input
+%frexpStruct_exp_in = OpVariable %_ptr_Input_v3float Input
+       %main = OpFunction %void None %3
+          %5 = OpLabel
+               OpStore %frexp_x_out %12
+               OpStore %frexp_exp_out %12
+               OpStore %frexpStruct_x_out %12
+               OpStore %frexpStruct_exp_out %12
+         %19 = OpLoad %v3float %frexp_x_in
+         %20 = OpLoad %v4float %frexp_x_out
+         %21 = OpVectorShuffle %v4float %20 %19 4 5 6 3
+               OpStore %frexp_x_out %21
+         %23 = OpLoad %v3float %frexp_exp_in
+         %24 = OpLoad %v4float %frexp_exp_out
+         %25 = OpVectorShuffle %v4float %24 %23 4 5 6 3
+               OpStore %frexp_exp_out %25
+         %27 = OpLoad %v3float %frexpStruct_x_in
+         %28 = OpLoad %v4float %frexpStruct_x_out
+         %29 = OpVectorShuffle %v4float %28 %27 4 5 6 3
+               OpStore %frexpStruct_x_out %29
+         %31 = OpLoad %v3float %frexpStruct_exp_in
+         %32 = OpLoad %v4float %frexpStruct_exp_out
+         %33 = OpVectorShuffle %v4float %32 %31 4 5 6 3
+               OpStore %frexpStruct_exp_out %33
+               OpReturn
+               OpFunctionEnd
+END
+
+BUFFER buf_in DATA_TYPE uint32 SIZE 1296 FILE TEXT input.txt
+BUFFER vertices DATA_TYPE vec2<float> SIZE 7776 FILE TEXT grid_vertices.txt
+
+BUFFER frexp_x FORMAT R32G32B32A32_SFLOAT
+BUFFER frexp_exp FORMAT R32G32B32A32_SFLOAT
+BUFFER frexpStruct_x FORMAT R32G32B32A32_SFLOAT
+BUFFER frexpStruct_exp FORMAT R32G32B32A32_SFLOAT
+
+PIPELINE graphics test_pipeline
+    FRAMEBUFFER_SIZE 144 144
+
+    ATTACH vert_shader
+    ATTACH frag_shader
+
+    VERTEX_DATA vertices LOCATION 0
+
+    BIND BUFFER buf_in AS storage DESCRIPTOR_SET 0 BINDING 0
+    BIND BUFFER frexp_x AS color LOCATION 0
+    BIND BUFFER frexp_exp AS color LOCATION 1
+    BIND BUFFER frexpStruct_x AS color LOCATION 2
+    BIND BUFFER frexpStruct_exp AS color LOCATION 3
+END
+
+RUN test_pipeline DRAW_ARRAY AS TRIANGLE_LIST START_IDX 0 COUNT 7776
+
+EXPECT frexp_x EQ_BUFFER frexpStruct_x
+EXPECT frexp_exp EQ_BUFFER frexpStruct_exp
diff --git a/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/frexpstruct_4_comp.amber b/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/frexpstruct_4_comp.amber
new file mode 100644
index 0000000..a41dee0
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/frexpstruct_4_comp.amber
@@ -0,0 +1,215 @@
+#!amber
+
+# Copyright 2021 Google LLC
+#
+# 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.
+
+# A compute shader test for FrexpStruct.
+
+# SHADER compute comp_shader GLSL
+# #version 430
+# precision highp float;
+#
+# const uint ndp = 1296 / 4;
+# const uint half_ndp = ndp / 2;
+#
+# layout(set = 0, binding = 0) readonly buffer block0 {
+#     uvec4 in_values[half_ndp];
+# };
+#
+# layout(set = 0, binding = 1) buffer block1 {
+#     vec4 frexp_out[ndp];
+# };
+#
+# layout(set = 0, binding = 2) buffer block2 {
+#     vec4 frexpStruct_out[ndp];
+# };
+#
+# struct frexpStructType
+# {
+#     vec4 x;
+#     ivec4 exp;
+# };
+#
+# // Replaced with native function in SPIR-V.
+# frexpStructType frexpStruct (vec4 orig)
+# {
+#     vec4 x;
+#     ivec4 exp;
+#     x = frexp(orig, exp);
+#     frexpStructType res = { x, exp };
+#     return res;
+# }
+#
+# void main ()
+# {
+#     for (uint ndx = 0; ndx < ndp; ndx += 2)
+#     {
+#         uvec4 in_uint = in_values[ndx/2];
+#         vec4 in_float = uintBitsToFloat(in_uint);
+#         vec4 x;
+#         ivec4 exp;
+#
+#         x = frexp(in_float, exp);
+#         frexpStructType res = frexpStruct(in_float);
+#
+#         frexp_out[ndx] = intBitsToFloat(exp);
+#         frexp_out[ndx+1] = x;
+#         frexpStruct_out[ndx] = intBitsToFloat(res.exp);
+#         frexpStruct_out[ndx+1] = res.x;
+#     }
+#
+#     return;
+# }
+# END
+
+SHADER compute comp_shader SPIRV-ASM
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint GLCompute %main "main"
+               OpExecutionMode %main LocalSize 1 1 1
+               OpDecorate %_arr_v4uint_uint_162 ArrayStride 16
+               OpMemberDecorate %block0 0 NonWritable
+               OpMemberDecorate %block0 0 Offset 0
+               OpDecorate %block0 BufferBlock
+               OpDecorate %_ DescriptorSet 0
+               OpDecorate %_ Binding 0
+               OpDecorate %_arr_v4float_uint_324 ArrayStride 16
+               OpMemberDecorate %block1 0 Offset 0
+               OpDecorate %block1 BufferBlock
+               OpDecorate %__0 DescriptorSet 0
+               OpDecorate %__0 Binding 1
+               OpDecorate %_arr_v4float_uint_324_0 ArrayStride 16
+               OpMemberDecorate %block2 0 Offset 0
+               OpDecorate %block2 BufferBlock
+               OpDecorate %__1 DescriptorSet 0
+               OpDecorate %__1 Binding 2
+       %void = OpTypeVoid
+          %3 = OpTypeFunction %void
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+        %int = OpTypeInt 32 1
+      %v4int = OpTypeVector %int 4
+%frexpStructType = OpTypeStruct %v4float %v4int
+         %12 = OpTypeFunction %frexpStructType %_ptr_Function_v4float
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+%_ptr_Function_frexpStructType = OpTypePointer Function %frexpStructType
+       %uint = OpTypeInt 32 0
+%_ptr_Function_uint = OpTypePointer Function %uint
+     %uint_0 = OpConstant %uint 0
+   %uint_324 = OpConstant %uint 324
+       %bool = OpTypeBool
+     %v4uint = OpTypeVector %uint 4
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+   %uint_162 = OpConstant %uint 162
+%_arr_v4uint_uint_162 = OpTypeArray %v4uint %uint_162
+     %block0 = OpTypeStruct %_arr_v4uint_uint_162
+%_ptr_Uniform_block0 = OpTypePointer Uniform %block0
+          %_ = OpVariable %_ptr_Uniform_block0 Uniform
+      %int_0 = OpConstant %int 0
+     %uint_2 = OpConstant %uint 2
+%_ptr_Uniform_v4uint = OpTypePointer Uniform %v4uint
+%_arr_v4float_uint_324 = OpTypeArray %v4float %uint_324
+     %block1 = OpTypeStruct %_arr_v4float_uint_324
+%_ptr_Uniform_block1 = OpTypePointer Uniform %block1
+        %__0 = OpVariable %_ptr_Uniform_block1 Uniform
+%_ptr_Uniform_v4float = OpTypePointer Uniform %v4float
+     %uint_1 = OpConstant %uint 1
+%_arr_v4float_uint_324_0 = OpTypeArray %v4float %uint_324
+     %block2 = OpTypeStruct %_arr_v4float_uint_324_0
+%_ptr_Uniform_block2 = OpTypePointer Uniform %block2
+        %__1 = OpVariable %_ptr_Uniform_block2 Uniform
+      %int_1 = OpConstant %int 1
+       %main = OpFunction %void None %3
+          %5 = OpLabel
+        %ndx = OpVariable %_ptr_Function_uint Function
+    %in_uint = OpVariable %_ptr_Function_v4uint Function
+   %in_float = OpVariable %_ptr_Function_v4float Function
+        %x_0 = OpVariable %_ptr_Function_v4float Function
+      %exp_0 = OpVariable %_ptr_Function_v4int Function
+      %res_0 = OpVariable %_ptr_Function_frexpStructType Function
+               OpStore %ndx %uint_0
+               OpBranch %33
+         %33 = OpLabel
+               OpLoopMerge %35 %36 None
+               OpBranch %37
+         %37 = OpLabel
+         %38 = OpLoad %uint %ndx
+         %41 = OpULessThan %bool %38 %uint_324
+               OpBranchConditional %41 %34 %35
+         %34 = OpLabel
+         %51 = OpLoad %uint %ndx
+         %53 = OpUDiv %uint %51 %uint_2
+         %55 = OpAccessChain %_ptr_Uniform_v4uint %_ %int_0 %53
+         %56 = OpLoad %v4uint %55
+               OpStore %in_uint %56
+         %58 = OpLoad %v4uint %in_uint
+         %59 = OpBitcast %v4float %58
+               OpStore %in_float %59
+         %61 = OpLoad %v4float %in_float
+         %63 = OpExtInst %v4float %1 Frexp %61 %exp_0
+               OpStore %x_0 %63
+         %66 = OpLoad %v4float %in_float
+         %67 = OpExtInst %frexpStructType %1 FrexpStruct %66
+               OpStore %res_0 %67
+         %72 = OpLoad %uint %ndx
+         %73 = OpLoad %v4int %exp_0
+         %74 = OpBitcast %v4float %73
+         %76 = OpAccessChain %_ptr_Uniform_v4float %__0 %int_0 %72
+               OpStore %76 %74
+         %77 = OpLoad %uint %ndx
+         %79 = OpIAdd %uint %77 %uint_1
+         %80 = OpLoad %v4float %x_0
+         %81 = OpAccessChain %_ptr_Uniform_v4float %__0 %int_0 %79
+               OpStore %81 %80
+         %86 = OpLoad %uint %ndx
+         %88 = OpAccessChain %_ptr_Function_v4int %res_0 %int_1
+         %89 = OpLoad %v4int %88
+         %90 = OpBitcast %v4float %89
+         %91 = OpAccessChain %_ptr_Uniform_v4float %__1 %int_0 %86
+               OpStore %91 %90
+         %92 = OpLoad %uint %ndx
+         %93 = OpIAdd %uint %92 %uint_1
+         %94 = OpAccessChain %_ptr_Function_v4float %res_0 %int_0
+         %95 = OpLoad %v4float %94
+         %96 = OpAccessChain %_ptr_Uniform_v4float %__1 %int_0 %93
+               OpStore %96 %95
+               OpBranch %36
+         %36 = OpLabel
+         %97 = OpLoad %uint %ndx
+         %98 = OpIAdd %uint %97 %uint_2
+               OpStore %ndx %98
+               OpBranch %33
+         %35 = OpLabel
+               OpReturn
+               OpFunctionEnd
+END
+
+BUFFER buf_in DATA_TYPE uint32 SIZE 1296 FILE TEXT input.txt
+
+BUFFER buf_frexp DATA_TYPE vec4<float> SIZE 324 FILL 0.0
+BUFFER buf_frexpStruct DATA_TYPE vec4<float> SIZE 324 FILL 1.0
+
+PIPELINE compute test_pipeline
+    ATTACH comp_shader
+
+    BIND BUFFER buf_in AS storage DESCRIPTOR_SET 0 BINDING 0
+    BIND BUFFER buf_frexp AS storage DESCRIPTOR_SET 0 BINDING 1
+    BIND BUFFER buf_frexpStruct AS storage DESCRIPTOR_SET 0 BINDING 2
+END
+
+RUN test_pipeline 1 1 1
+
+EXPECT buf_frexp EQ_BUFFER buf_frexpStruct
diff --git a/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/frexpstruct_4_frag.amber b/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/frexpstruct_4_frag.amber
new file mode 100644
index 0000000..d75a75f
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/frexpstruct_4_frag.amber
@@ -0,0 +1,267 @@
+#!amber
+
+# Copyright 2021 Google LLC
+#
+# 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.
+
+# A fragment shader test for FrexpStruct.
+
+# SHADER vertex vert_shader GLSL
+# #version 430
+# precision highp float;
+#
+# const uint ndp = 1296;
+# const uint ndpSqrt = uint(sqrt(ndp));
+# const float halfGridElementSize = 1.0 / float(ndpSqrt);
+#
+# layout (location = 0) in vec2 position;
+# layout (location = 0) flat out uint ndx_out;
+#
+# void main ()
+# {
+#     uint xcoord = uint(ndpSqrt * ((position.x + halfGridElementSize + 1) / 2) - 1);
+#     uint ycoord = uint(ndpSqrt * ((position.y + halfGridElementSize + 1) / 2) - 1);
+#     ndx_out = xcoord + ycoord * ndpSqrt;
+#
+#     gl_Position = vec4(position, 0, 1);
+#
+#     return;
+# }
+# END
+
+SHADER vertex vert_shader SPIRV-ASM
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %main "main" %position %ndx_out %_
+               OpDecorate %position Location 0
+               OpDecorate %ndx_out Flat
+               OpDecorate %ndx_out Location 0
+               OpMemberDecorate %gl_PerVertex 0 BuiltIn Position
+               OpMemberDecorate %gl_PerVertex 1 BuiltIn PointSize
+               OpMemberDecorate %gl_PerVertex 2 BuiltIn ClipDistance
+               OpDecorate %gl_PerVertex Block
+       %void = OpTypeVoid
+          %3 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+      %float = OpTypeFloat 32
+    %v2float = OpTypeVector %float 2
+%_ptr_Input_v2float = OpTypePointer Input %v2float
+   %position = OpVariable %_ptr_Input_v2float Input
+     %uint_0 = OpConstant %uint 0
+%_ptr_Input_float = OpTypePointer Input %float
+    %float_1 = OpConstant %float 1
+     %uint_1 = OpConstant %uint 1
+%_ptr_Output_uint = OpTypePointer Output %uint
+    %ndx_out = OpVariable %_ptr_Output_uint Output
+    %uint_36 = OpConstant %uint 36
+    %v4float = OpTypeVector %float 4
+%_arr_float_uint_1 = OpTypeArray %float %uint_1
+%gl_PerVertex = OpTypeStruct %v4float %float %_arr_float_uint_1
+%_ptr_Output_gl_PerVertex = OpTypePointer Output %gl_PerVertex
+          %_ = OpVariable %_ptr_Output_gl_PerVertex Output
+        %int = OpTypeInt 32 1
+      %int_0 = OpConstant %int 0
+    %float_0 = OpConstant %float 0
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+%float_1_02777779 = OpConstant %float 1.02777779
+   %float_18 = OpConstant %float 18
+       %main = OpFunction %void None %3
+          %5 = OpLabel
+         %16 = OpAccessChain %_ptr_Input_float %position %uint_0
+         %17 = OpLoad %float %16
+         %21 = OpFAdd %float %17 %float_1_02777779
+         %24 = OpFMul %float %21 %float_18
+         %25 = OpFSub %float %24 %float_1
+         %26 = OpConvertFToU %uint %25
+         %29 = OpAccessChain %_ptr_Input_float %position %uint_1
+         %30 = OpLoad %float %29
+         %32 = OpFAdd %float %30 %float_1_02777779
+         %34 = OpFMul %float %32 %float_18
+         %35 = OpFSub %float %34 %float_1
+         %36 = OpConvertFToU %uint %35
+         %42 = OpIMul %uint %36 %uint_36
+         %43 = OpIAdd %uint %26 %42
+               OpStore %ndx_out %43
+         %51 = OpLoad %v2float %position
+         %53 = OpCompositeExtract %float %51 0
+         %54 = OpCompositeExtract %float %51 1
+         %55 = OpCompositeConstruct %v4float %53 %54 %float_0 %float_1
+         %57 = OpAccessChain %_ptr_Output_v4float %_ %int_0
+               OpStore %57 %55
+               OpReturn
+               OpFunctionEnd
+END
+
+# SHADER fragment frag_shader GLSL
+# #version 430
+# precision highp float;
+#
+# const uint ndp = 1296;
+#
+# layout(set = 0, binding = 0) readonly buffer block0 {
+#     uvec4 in_values[ndp];
+# };
+#
+# layout (location = 0) flat in uint ndx_in;
+# layout (location = 0) out vec4 frexp_x_out;
+# layout (location = 1) out vec4 frexp_exp_out;
+# layout (location = 2) out vec4 frexpStruct_x_out;
+# layout (location = 3) out vec4 frexpStruct_exp_out;
+#
+# struct frexpStructType
+# {
+#     vec4 x;
+#     ivec4 exp;
+# };
+#
+# // Replaced with native function in SPIR-V.
+# frexpStructType frexpStruct (vec4 orig)
+# {
+#     vec4 x;
+#     ivec4 exp;
+#     x = frexp(orig, exp);
+#     frexpStructType res = { x, exp };
+#     return res;
+# }
+#
+# void main ()
+# {
+#     uvec4 in_uint = in_values[ndx_in];
+#     vec4 in_float = uintBitsToFloat(in_uint);
+#     vec4 x;
+#     ivec4 exp;
+#     frexpStructType res;
+#
+#     x = frexp(in_float, exp);
+#     res = frexpStruct(in_float);
+#
+#     frexp_x_out.rgba = x;
+#     frexp_exp_out.rgba = intBitsToFloat(exp);
+#     frexpStruct_x_out.rgba = res.x;
+#     frexpStruct_exp_out.rgba = intBitsToFloat(res.exp);
+#
+#     return;
+# }
+# END
+
+SHADER fragment frag_shader SPIRV-ASM
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %main "main" %ndx_in %frexp_x_out %frexp_exp_out %frexpStruct_x_out %frexpStruct_exp_out
+               OpExecutionMode %main OriginUpperLeft
+               OpDecorate %_arr_v4uint_uint_1296 ArrayStride 16
+               OpMemberDecorate %block0 0 NonWritable
+               OpMemberDecorate %block0 0 Offset 0
+               OpDecorate %block0 BufferBlock
+               OpDecorate %_ DescriptorSet 0
+               OpDecorate %_ Binding 0
+               OpDecorate %ndx_in Flat
+               OpDecorate %ndx_in Location 0
+               OpDecorate %frexp_x_out Location 0
+               OpDecorate %frexp_exp_out Location 1
+               OpDecorate %frexpStruct_x_out Location 2
+               OpDecorate %frexpStruct_exp_out Location 3
+       %void = OpTypeVoid
+          %3 = OpTypeFunction %void
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+        %int = OpTypeInt 32 1
+      %v4int = OpTypeVector %int 4
+%frexpStructType = OpTypeStruct %v4float %v4int
+         %12 = OpTypeFunction %frexpStructType %_ptr_Function_v4float
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+%_ptr_Function_frexpStructType = OpTypePointer Function %frexpStructType
+       %uint = OpTypeInt 32 0
+     %v4uint = OpTypeVector %uint 4
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+  %uint_1296 = OpConstant %uint 1296
+%_arr_v4uint_uint_1296 = OpTypeArray %v4uint %uint_1296
+     %block0 = OpTypeStruct %_arr_v4uint_uint_1296
+%_ptr_Uniform_block0 = OpTypePointer Uniform %block0
+          %_ = OpVariable %_ptr_Uniform_block0 Uniform
+      %int_0 = OpConstant %int 0
+%_ptr_Input_uint = OpTypePointer Input %uint
+     %ndx_in = OpVariable %_ptr_Input_uint Input
+%_ptr_Uniform_v4uint = OpTypePointer Uniform %v4uint
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+%frexp_x_out = OpVariable %_ptr_Output_v4float Output
+%frexp_exp_out = OpVariable %_ptr_Output_v4float Output
+%frexpStruct_x_out = OpVariable %_ptr_Output_v4float Output
+%frexpStruct_exp_out = OpVariable %_ptr_Output_v4float Output
+      %int_1 = OpConstant %int 1
+       %main = OpFunction %void None %3
+          %5 = OpLabel
+    %in_uint = OpVariable %_ptr_Function_v4uint Function
+   %in_float = OpVariable %_ptr_Function_v4float Function
+        %x_0 = OpVariable %_ptr_Function_v4float Function
+      %exp_0 = OpVariable %_ptr_Function_v4int Function
+      %res_0 = OpVariable %_ptr_Function_frexpStructType Function
+         %41 = OpLoad %uint %ndx_in
+         %43 = OpAccessChain %_ptr_Uniform_v4uint %_ %int_0 %41
+         %44 = OpLoad %v4uint %43
+               OpStore %in_uint %44
+         %46 = OpLoad %v4uint %in_uint
+         %47 = OpBitcast %v4float %46
+               OpStore %in_float %47
+         %49 = OpLoad %v4float %in_float
+         %51 = OpExtInst %v4float %1 Frexp %49 %exp_0
+               OpStore %x_0 %51
+         %54 = OpLoad %v4float %in_float
+         %55 = OpExtInst %frexpStructType %1 FrexpStruct %54
+               OpStore %res_0 %55
+         %58 = OpLoad %v4float %x_0
+               OpStore %frexp_x_out %58
+         %60 = OpLoad %v4int %exp_0
+         %61 = OpBitcast %v4float %60
+               OpStore %frexp_exp_out %61
+         %63 = OpAccessChain %_ptr_Function_v4float %res_0 %int_0
+         %64 = OpLoad %v4float %63
+               OpStore %frexpStruct_x_out %64
+         %67 = OpAccessChain %_ptr_Function_v4int %res_0 %int_1
+         %68 = OpLoad %v4int %67
+         %69 = OpBitcast %v4float %68
+               OpStore %frexpStruct_exp_out %69
+               OpReturn
+               OpFunctionEnd
+END
+
+BUFFER buf_in DATA_TYPE uint32 SIZE 1296 FILE TEXT input.txt
+BUFFER vertices DATA_TYPE vec2<float> SIZE 7776 FILE TEXT grid_vertices.txt
+
+BUFFER frexp_x FORMAT R32G32B32A32_SFLOAT
+BUFFER frexp_exp FORMAT R32G32B32A32_SFLOAT
+BUFFER frexpStruct_x FORMAT R32G32B32A32_SFLOAT
+BUFFER frexpStruct_exp FORMAT R32G32B32A32_SFLOAT
+
+PIPELINE graphics test_pipeline
+    FRAMEBUFFER_SIZE 144 144
+
+    ATTACH vert_shader
+    ATTACH frag_shader
+
+    VERTEX_DATA vertices LOCATION 0
+
+    BIND BUFFER buf_in AS storage DESCRIPTOR_SET 0 BINDING 0
+    BIND BUFFER frexp_x AS color LOCATION 0
+    BIND BUFFER frexp_exp AS color LOCATION 1
+    BIND BUFFER frexpStruct_x AS color LOCATION 2
+    BIND BUFFER frexpStruct_exp AS color LOCATION 3
+END
+
+RUN test_pipeline DRAW_ARRAY AS TRIANGLE_LIST START_IDX 0 COUNT 7776
+
+EXPECT frexp_x EQ_BUFFER frexpStruct_x
+EXPECT frexp_exp EQ_BUFFER frexpStruct_exp
diff --git a/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/frexpstruct_4_geom.amber b/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/frexpstruct_4_geom.amber
new file mode 100644
index 0000000..b25735c
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/frexpstruct_4_geom.amber
@@ -0,0 +1,407 @@
+#!amber
+
+# Copyright 2021 Google LLC
+#
+# 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.
+
+# A geometry shader test for FrexpStruct.
+
+DEVICE_FEATURE geometryShader
+
+# SHADER vertex vert_shader GLSL
+# #version 430
+# precision highp float;
+#
+# const uint ndp = 1296;
+# const uint ndpSqrt = uint(sqrt(ndp));
+# const float halfGridElementSize = 1.0 / float(ndpSqrt);
+#
+# layout (location = 0) in vec2 position;
+# layout (location = 0) flat out uint ndx_out;
+#
+# void main ()
+# {
+#     uint xcoord = uint(ndpSqrt * ((position.x + halfGridElementSize + 1) / 2) - 1);
+#     uint ycoord = uint(ndpSqrt * ((position.y + halfGridElementSize + 1) / 2) - 1);
+#     ndx_out = xcoord + ycoord * ndpSqrt;
+#
+#     gl_Position = vec4(position, 0, 1);
+#
+#     return;
+# }
+# END
+
+SHADER vertex vert_shader SPIRV-ASM
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %main "main" %position %ndx_out %_
+               OpDecorate %position Location 0
+               OpDecorate %ndx_out Flat
+               OpDecorate %ndx_out Location 0
+               OpMemberDecorate %gl_PerVertex 0 BuiltIn Position
+               OpMemberDecorate %gl_PerVertex 1 BuiltIn PointSize
+               OpMemberDecorate %gl_PerVertex 2 BuiltIn ClipDistance
+               OpDecorate %gl_PerVertex Block
+       %void = OpTypeVoid
+          %3 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+      %float = OpTypeFloat 32
+    %v2float = OpTypeVector %float 2
+%_ptr_Input_v2float = OpTypePointer Input %v2float
+   %position = OpVariable %_ptr_Input_v2float Input
+     %uint_0 = OpConstant %uint 0
+%_ptr_Input_float = OpTypePointer Input %float
+    %float_1 = OpConstant %float 1
+     %uint_1 = OpConstant %uint 1
+%_ptr_Output_uint = OpTypePointer Output %uint
+    %ndx_out = OpVariable %_ptr_Output_uint Output
+    %uint_36 = OpConstant %uint 36
+    %v4float = OpTypeVector %float 4
+%_arr_float_uint_1 = OpTypeArray %float %uint_1
+%gl_PerVertex = OpTypeStruct %v4float %float %_arr_float_uint_1
+%_ptr_Output_gl_PerVertex = OpTypePointer Output %gl_PerVertex
+          %_ = OpVariable %_ptr_Output_gl_PerVertex Output
+        %int = OpTypeInt 32 1
+      %int_0 = OpConstant %int 0
+    %float_0 = OpConstant %float 0
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+%float_1_02777779 = OpConstant %float 1.02777779
+   %float_18 = OpConstant %float 18
+       %main = OpFunction %void None %3
+          %5 = OpLabel
+         %16 = OpAccessChain %_ptr_Input_float %position %uint_0
+         %17 = OpLoad %float %16
+         %21 = OpFAdd %float %17 %float_1_02777779
+         %24 = OpFMul %float %21 %float_18
+         %25 = OpFSub %float %24 %float_1
+         %26 = OpConvertFToU %uint %25
+         %29 = OpAccessChain %_ptr_Input_float %position %uint_1
+         %30 = OpLoad %float %29
+         %32 = OpFAdd %float %30 %float_1_02777779
+         %34 = OpFMul %float %32 %float_18
+         %35 = OpFSub %float %34 %float_1
+         %36 = OpConvertFToU %uint %35
+         %42 = OpIMul %uint %36 %uint_36
+         %43 = OpIAdd %uint %26 %42
+               OpStore %ndx_out %43
+         %51 = OpLoad %v2float %position
+         %53 = OpCompositeExtract %float %51 0
+         %54 = OpCompositeExtract %float %51 1
+         %55 = OpCompositeConstruct %v4float %53 %54 %float_0 %float_1
+         %57 = OpAccessChain %_ptr_Output_v4float %_ %int_0
+               OpStore %57 %55
+               OpReturn
+               OpFunctionEnd
+END
+
+# SHADER geometry geom_shader GLSL
+# #version 430
+# precision highp float;
+#
+# const uint ndp = 1296;
+#
+# layout(set = 0, binding = 0) readonly buffer block0 {
+#     uvec4 in_values[ndp];
+# };
+#
+# layout (triangles) in;
+# layout (triangle_strip, max_vertices = 3) out;
+#
+# layout (location = 0) flat in uint ndx_in[];
+# layout (location = 0) flat out vec4 frexp_x_out;
+# layout (location = 1) flat out vec4 frexp_exp_out;
+# layout (location = 2) flat out vec4 frexpStruct_x_out;
+# layout (location = 3) flat out vec4 frexpStruct_exp_out;
+#
+# struct frexpStructType
+# {
+#     vec4 x;
+#     ivec4 exp;
+# };
+#
+# // Replaced with native function in SPIR-V.
+# frexpStructType frexpStruct (vec4 orig)
+# {
+#     vec4 x;
+#     ivec4 exp;
+#     x = frexp(orig, exp);
+#     frexpStructType res = { x, exp };
+#     return res;
+# }
+#
+# void main ()
+# {
+#     for (int vertex = 0; vertex < 3; vertex++)
+#     {
+#         uvec4 in_uint = in_values[ndx_in[vertex]];
+#         vec4 in_float = uintBitsToFloat(in_uint);
+#         vec4 x;
+#         ivec4 exp;
+#         frexpStructType res;
+#
+#         x = frexp(in_float, exp);
+#         res = frexpStruct(in_float);
+#
+#         frexp_x_out = x;
+#         frexp_exp_out = intBitsToFloat(exp);
+#         frexpStruct_x_out = res.x;
+#         frexpStruct_exp_out = intBitsToFloat(res.exp);
+#
+#         gl_Position = gl_in[vertex].gl_Position;
+#         EmitVertex();
+#     }
+#
+#     EndPrimitive();
+# }
+# END
+
+SHADER geometry geom_shader SPIRV-ASM
+               OpCapability Geometry
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Geometry %main "main" %ndx_in %frexp_x_out %frexp_exp_out %frexpStruct_x_out %frexpStruct_exp_out %__0 %gl_in
+               OpExecutionMode %main Triangles
+               OpExecutionMode %main Invocations 1
+               OpExecutionMode %main OutputTriangleStrip
+               OpExecutionMode %main OutputVertices 3
+               OpDecorate %_arr_v4uint_uint_1296 ArrayStride 16
+               OpMemberDecorate %block0 0 NonWritable
+               OpMemberDecorate %block0 0 Offset 0
+               OpDecorate %block0 BufferBlock
+               OpDecorate %_ DescriptorSet 0
+               OpDecorate %_ Binding 0
+               OpDecorate %ndx_in Flat
+               OpDecorate %ndx_in Location 0
+               OpDecorate %frexp_x_out Flat
+               OpDecorate %frexp_x_out Location 0
+               OpDecorate %frexp_exp_out Flat
+               OpDecorate %frexp_exp_out Location 1
+               OpDecorate %frexpStruct_x_out Flat
+               OpDecorate %frexpStruct_x_out Location 2
+               OpDecorate %frexpStruct_exp_out Flat
+               OpDecorate %frexpStruct_exp_out Location 3
+               OpMemberDecorate %gl_PerVertex 0 BuiltIn Position
+               OpMemberDecorate %gl_PerVertex 1 BuiltIn PointSize
+               OpMemberDecorate %gl_PerVertex 2 BuiltIn ClipDistance
+               OpDecorate %gl_PerVertex Block
+               OpMemberDecorate %gl_PerVertex_0 0 BuiltIn Position
+               OpMemberDecorate %gl_PerVertex_0 1 BuiltIn PointSize
+               OpMemberDecorate %gl_PerVertex_0 2 BuiltIn ClipDistance
+               OpDecorate %gl_PerVertex_0 Block
+       %void = OpTypeVoid
+          %3 = OpTypeFunction %void
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+        %int = OpTypeInt 32 1
+      %v4int = OpTypeVector %int 4
+%frexpStructType = OpTypeStruct %v4float %v4int
+         %12 = OpTypeFunction %frexpStructType %_ptr_Function_v4float
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+%_ptr_Function_frexpStructType = OpTypePointer Function %frexpStructType
+%_ptr_Function_int = OpTypePointer Function %int
+      %int_0 = OpConstant %int 0
+      %int_3 = OpConstant %int 3
+       %bool = OpTypeBool
+       %uint = OpTypeInt 32 0
+     %v4uint = OpTypeVector %uint 4
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+  %uint_1296 = OpConstant %uint 1296
+%_arr_v4uint_uint_1296 = OpTypeArray %v4uint %uint_1296
+     %block0 = OpTypeStruct %_arr_v4uint_uint_1296
+%_ptr_Uniform_block0 = OpTypePointer Uniform %block0
+          %_ = OpVariable %_ptr_Uniform_block0 Uniform
+     %uint_3 = OpConstant %uint 3
+%_arr_uint_uint_3 = OpTypeArray %uint %uint_3
+%_ptr_Input__arr_uint_uint_3 = OpTypePointer Input %_arr_uint_uint_3
+     %ndx_in = OpVariable %_ptr_Input__arr_uint_uint_3 Input
+%_ptr_Input_uint = OpTypePointer Input %uint
+%_ptr_Uniform_v4uint = OpTypePointer Uniform %v4uint
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+%frexp_x_out = OpVariable %_ptr_Output_v4float Output
+%frexp_exp_out = OpVariable %_ptr_Output_v4float Output
+%frexpStruct_x_out = OpVariable %_ptr_Output_v4float Output
+%frexpStruct_exp_out = OpVariable %_ptr_Output_v4float Output
+      %int_1 = OpConstant %int 1
+     %uint_1 = OpConstant %uint 1
+%_arr_float_uint_1 = OpTypeArray %float %uint_1
+%gl_PerVertex = OpTypeStruct %v4float %float %_arr_float_uint_1
+%_ptr_Output_gl_PerVertex = OpTypePointer Output %gl_PerVertex
+        %__0 = OpVariable %_ptr_Output_gl_PerVertex Output
+%gl_PerVertex_0 = OpTypeStruct %v4float %float %_arr_float_uint_1
+%_arr_gl_PerVertex_0_uint_3 = OpTypeArray %gl_PerVertex_0 %uint_3
+%_ptr_Input__arr_gl_PerVertex_0_uint_3 = OpTypePointer Input %_arr_gl_PerVertex_0_uint_3
+      %gl_in = OpVariable %_ptr_Input__arr_gl_PerVertex_0_uint_3 Input
+%_ptr_Input_v4float = OpTypePointer Input %v4float
+       %main = OpFunction %void None %3
+          %5 = OpLabel
+     %vertex = OpVariable %_ptr_Function_int Function
+    %in_uint = OpVariable %_ptr_Function_v4uint Function
+   %in_float = OpVariable %_ptr_Function_v4float Function
+        %x_0 = OpVariable %_ptr_Function_v4float Function
+      %exp_0 = OpVariable %_ptr_Function_v4int Function
+      %res_0 = OpVariable %_ptr_Function_frexpStructType Function
+               OpStore %vertex %int_0
+               OpBranch %32
+         %32 = OpLabel
+               OpLoopMerge %34 %35 None
+               OpBranch %36
+         %36 = OpLabel
+         %37 = OpLoad %int %vertex
+         %40 = OpSLessThan %bool %37 %int_3
+               OpBranchConditional %40 %33 %34
+         %33 = OpLabel
+         %54 = OpLoad %int %vertex
+         %56 = OpAccessChain %_ptr_Input_uint %ndx_in %54
+         %57 = OpLoad %uint %56
+         %59 = OpAccessChain %_ptr_Uniform_v4uint %_ %int_0 %57
+         %60 = OpLoad %v4uint %59
+               OpStore %in_uint %60
+         %62 = OpLoad %v4uint %in_uint
+         %63 = OpBitcast %v4float %62
+               OpStore %in_float %63
+         %65 = OpLoad %v4float %in_float
+         %67 = OpExtInst %v4float %1 Frexp %65 %exp_0
+               OpStore %x_0 %67
+         %70 = OpLoad %v4float %in_float
+         %71 = OpExtInst %frexpStructType %1 FrexpStruct %70
+               OpStore %res_0 %71
+         %74 = OpLoad %v4float %x_0
+               OpStore %frexp_x_out %74
+         %76 = OpLoad %v4int %exp_0
+         %77 = OpBitcast %v4float %76
+               OpStore %frexp_exp_out %77
+         %79 = OpAccessChain %_ptr_Function_v4float %res_0 %int_0
+         %80 = OpLoad %v4float %79
+               OpStore %frexpStruct_x_out %80
+         %83 = OpAccessChain %_ptr_Function_v4int %res_0 %int_1
+         %84 = OpLoad %v4int %83
+         %85 = OpBitcast %v4float %84
+               OpStore %frexpStruct_exp_out %85
+         %95 = OpLoad %int %vertex
+         %97 = OpAccessChain %_ptr_Input_v4float %gl_in %95 %int_0
+         %98 = OpLoad %v4float %97
+         %99 = OpAccessChain %_ptr_Output_v4float %__0 %int_0
+               OpStore %99 %98
+               OpEmitVertex
+               OpBranch %35
+         %35 = OpLabel
+        %100 = OpLoad %int %vertex
+        %101 = OpIAdd %int %100 %int_1
+               OpStore %vertex %101
+               OpBranch %32
+         %34 = OpLabel
+               OpEndPrimitive
+               OpReturn
+               OpFunctionEnd
+END
+
+# SHADER fragment frag_shader GLSL
+# #version 430
+# precision highp float;
+#
+# layout (location = 0) flat in vec4 frexp_x_in;
+# layout (location = 1) flat in vec4 frexp_exp_in;
+# layout (location = 2) flat in vec4 frexpStruct_x_in;
+# layout (location = 3) flat in vec4 frexpStruct_exp_in;
+#
+# layout (location = 0) out vec4 frexp_x_out;
+# layout (location = 1) out vec4 frexp_exp_out;
+# layout (location = 2) out vec4 frexpStruct_x_out;
+# layout (location = 3) out vec4 frexpStruct_exp_out;
+#
+#
+# void main ()
+# {
+#     frexp_x_out.rgba = frexp_x_in;
+#     frexp_exp_out.rgba = frexp_exp_in;
+#     frexpStruct_x_out.rgba = frexpStruct_x_in;
+#     frexpStruct_exp_out.rgba = frexpStruct_exp_in;
+# }
+# END
+
+SHADER fragment frag_shader SPIRV-ASM
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %main "main" %frexp_x_out %frexp_x_in %frexp_exp_out %frexp_exp_in %frexpStruct_x_out %frexpStruct_x_in %frexpStruct_exp_out %frexpStruct_exp_in
+               OpExecutionMode %main OriginUpperLeft
+               OpDecorate %frexp_x_out Location 0
+               OpDecorate %frexp_x_in Flat
+               OpDecorate %frexp_x_in Location 0
+               OpDecorate %frexp_exp_out Location 1
+               OpDecorate %frexp_exp_in Flat
+               OpDecorate %frexp_exp_in Location 1
+               OpDecorate %frexpStruct_x_out Location 2
+               OpDecorate %frexpStruct_x_in Flat
+               OpDecorate %frexpStruct_x_in Location 2
+               OpDecorate %frexpStruct_exp_out Location 3
+               OpDecorate %frexpStruct_exp_in Flat
+               OpDecorate %frexpStruct_exp_in Location 3
+       %void = OpTypeVoid
+          %3 = OpTypeFunction %void
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+%frexp_x_out = OpVariable %_ptr_Output_v4float Output
+%_ptr_Input_v4float = OpTypePointer Input %v4float
+ %frexp_x_in = OpVariable %_ptr_Input_v4float Input
+%frexp_exp_out = OpVariable %_ptr_Output_v4float Output
+%frexp_exp_in = OpVariable %_ptr_Input_v4float Input
+%frexpStruct_x_out = OpVariable %_ptr_Output_v4float Output
+%frexpStruct_x_in = OpVariable %_ptr_Input_v4float Input
+%frexpStruct_exp_out = OpVariable %_ptr_Output_v4float Output
+%frexpStruct_exp_in = OpVariable %_ptr_Input_v4float Input
+       %main = OpFunction %void None %3
+          %5 = OpLabel
+         %12 = OpLoad %v4float %frexp_x_in
+               OpStore %frexp_x_out %12
+         %15 = OpLoad %v4float %frexp_exp_in
+               OpStore %frexp_exp_out %15
+         %18 = OpLoad %v4float %frexpStruct_x_in
+               OpStore %frexpStruct_x_out %18
+         %21 = OpLoad %v4float %frexpStruct_exp_in
+               OpStore %frexpStruct_exp_out %21
+               OpReturn
+               OpFunctionEnd
+END
+
+BUFFER buf_in DATA_TYPE uint32 SIZE 1296 FILE TEXT input.txt
+BUFFER vertices DATA_TYPE vec2<float> SIZE 7776 FILE TEXT grid_vertices.txt
+
+BUFFER frexp_x FORMAT R32G32B32A32_SFLOAT
+BUFFER frexp_exp FORMAT R32G32B32A32_SFLOAT
+BUFFER frexpStruct_x FORMAT R32G32B32A32_SFLOAT
+BUFFER frexpStruct_exp FORMAT R32G32B32A32_SFLOAT
+
+PIPELINE graphics test_pipeline
+    FRAMEBUFFER_SIZE 144 144
+
+    ATTACH vert_shader
+    ATTACH geom_shader
+    ATTACH frag_shader
+
+    VERTEX_DATA vertices LOCATION 0
+
+    BIND BUFFER buf_in AS storage DESCRIPTOR_SET 0 BINDING 0
+    BIND BUFFER frexp_x AS color LOCATION 0
+    BIND BUFFER frexp_exp AS color LOCATION 1
+    BIND BUFFER frexpStruct_x AS color LOCATION 2
+    BIND BUFFER frexpStruct_exp AS color LOCATION 3
+END
+
+RUN test_pipeline DRAW_ARRAY AS TRIANGLE_LIST START_IDX 0 COUNT 7776
+
+EXPECT frexp_x EQ_BUFFER frexpStruct_x
+EXPECT frexp_exp EQ_BUFFER frexpStruct_exp
diff --git a/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/frexpstruct_4_tesc.amber b/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/frexpstruct_4_tesc.amber
new file mode 100644
index 0000000..8d1f772
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/frexpstruct_4_tesc.amber
@@ -0,0 +1,562 @@
+#!amber
+
+# Copyright 2021 Google LLC
+#
+# 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.
+
+# A tessellation control shader test for FrexpStruct.
+
+DEVICE_FEATURE tessellationShader
+
+# SHADER vertex vert_shader GLSL
+# #version 430
+# precision highp float;
+#
+# const uint ndp = 1296;
+# const uint ndpSqrt = uint(sqrt(ndp));
+# const float halfGridElementSize = 1.0 / float(ndpSqrt);
+#
+# layout (location = 0) in vec2 position;
+# layout (location = 0) flat out uint ndx_out;
+#
+# void main ()
+# {
+#     uint xcoord = uint(ndpSqrt * ((position.x + halfGridElementSize + 1) / 2) - 1);
+#     uint ycoord = uint(ndpSqrt * ((position.y + halfGridElementSize + 1) / 2) - 1);
+#     ndx_out = xcoord + ycoord * ndpSqrt;
+#
+#     gl_Position = vec4(position, 0, 1);
+#
+#     return;
+# }
+# END
+
+SHADER vertex vert_shader SPIRV-ASM
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %main "main" %position %ndx_out %_
+               OpDecorate %position Location 0
+               OpDecorate %ndx_out Flat
+               OpDecorate %ndx_out Location 0
+               OpMemberDecorate %gl_PerVertex 0 BuiltIn Position
+               OpMemberDecorate %gl_PerVertex 1 BuiltIn PointSize
+               OpMemberDecorate %gl_PerVertex 2 BuiltIn ClipDistance
+               OpDecorate %gl_PerVertex Block
+       %void = OpTypeVoid
+          %3 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+      %float = OpTypeFloat 32
+    %v2float = OpTypeVector %float 2
+%_ptr_Input_v2float = OpTypePointer Input %v2float
+   %position = OpVariable %_ptr_Input_v2float Input
+     %uint_0 = OpConstant %uint 0
+%_ptr_Input_float = OpTypePointer Input %float
+    %float_1 = OpConstant %float 1
+     %uint_1 = OpConstant %uint 1
+%_ptr_Output_uint = OpTypePointer Output %uint
+    %ndx_out = OpVariable %_ptr_Output_uint Output
+    %uint_36 = OpConstant %uint 36
+    %v4float = OpTypeVector %float 4
+%_arr_float_uint_1 = OpTypeArray %float %uint_1
+%gl_PerVertex = OpTypeStruct %v4float %float %_arr_float_uint_1
+%_ptr_Output_gl_PerVertex = OpTypePointer Output %gl_PerVertex
+          %_ = OpVariable %_ptr_Output_gl_PerVertex Output
+        %int = OpTypeInt 32 1
+      %int_0 = OpConstant %int 0
+    %float_0 = OpConstant %float 0
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+%float_1_02777779 = OpConstant %float 1.02777779
+   %float_18 = OpConstant %float 18
+       %main = OpFunction %void None %3
+          %5 = OpLabel
+         %16 = OpAccessChain %_ptr_Input_float %position %uint_0
+         %17 = OpLoad %float %16
+         %21 = OpFAdd %float %17 %float_1_02777779
+         %24 = OpFMul %float %21 %float_18
+         %25 = OpFSub %float %24 %float_1
+         %26 = OpConvertFToU %uint %25
+         %29 = OpAccessChain %_ptr_Input_float %position %uint_1
+         %30 = OpLoad %float %29
+         %32 = OpFAdd %float %30 %float_1_02777779
+         %34 = OpFMul %float %32 %float_18
+         %35 = OpFSub %float %34 %float_1
+         %36 = OpConvertFToU %uint %35
+         %42 = OpIMul %uint %36 %uint_36
+         %43 = OpIAdd %uint %26 %42
+               OpStore %ndx_out %43
+         %51 = OpLoad %v2float %position
+         %53 = OpCompositeExtract %float %51 0
+         %54 = OpCompositeExtract %float %51 1
+         %55 = OpCompositeConstruct %v4float %53 %54 %float_0 %float_1
+         %57 = OpAccessChain %_ptr_Output_v4float %_ %int_0
+               OpStore %57 %55
+               OpReturn
+               OpFunctionEnd
+END
+
+# SHADER tessellation_control tesc_shader GLSL
+# #version 430
+# precision highp float;
+#
+# const uint ndp = 1296;
+#
+# layout (vertices = 3) out;
+#
+# layout (location = 0) flat in uint ndx_in[];
+# layout (location = 0) flat out vec4 frexp_x_out[];
+# layout (location = 1) flat out vec4 frexp_exp_out[];
+# layout (location = 2) flat out vec4 frexpStruct_x_out[];
+# layout (location = 3) flat out vec4 frexpStruct_exp_out[];
+#
+# layout(set = 0, binding = 0) readonly buffer block0 {
+#     uvec4 in_values[ndp];
+# };
+#
+# struct frexpStructType
+# {
+#     vec4 x;
+#     ivec4 exp;
+# };
+#
+# // Replaced with native function in SPIR-V.
+# frexpStructType frexpStruct (vec4 orig)
+# {
+#     vec4 x;
+#     ivec4 exp;
+#     x = frexp(orig, exp);
+#     frexpStructType res = { x, exp };
+#     return res;
+# }
+#
+# void main ()
+# {
+#     uvec4 in_uint = in_values[ndx_in[gl_InvocationID]];
+#     vec4 in_float = uintBitsToFloat(in_uint);
+#     vec4 x;
+#     ivec4 exp;
+#     frexpStructType res;
+#
+#     x = frexp(in_float, exp);
+#     res = frexpStruct(in_float);
+#
+#     frexp_x_out[gl_InvocationID] = x;
+#     frexp_exp_out[gl_InvocationID] = intBitsToFloat(exp);
+#     frexpStruct_x_out[gl_InvocationID] = res.x;
+#     frexpStruct_exp_out[gl_InvocationID] = intBitsToFloat(res.exp);
+#
+#     gl_TessLevelInner[0] = 1.0;
+#     gl_TessLevelInner[1] = 1.0;
+#     gl_TessLevelOuter[0] = 1.0;
+#     gl_TessLevelOuter[1] = 1.0;
+#     gl_TessLevelOuter[2] = 1.0;
+#     gl_TessLevelOuter[3] = 1.0;
+#     gl_out[gl_InvocationID].gl_Position = gl_in[gl_InvocationID].gl_Position;
+# }
+# END
+
+SHADER tessellation_control tesc_shader SPIRV-ASM
+               OpCapability Tessellation
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint TessellationControl %main "main" %ndx_in %gl_InvocationID %frexp_x_out %frexp_exp_out %frexpStruct_x_out %frexpStruct_exp_out %gl_TessLevelInner %gl_TessLevelOuter %gl_out %gl_in
+               OpExecutionMode %main OutputVertices 3
+               OpDecorate %_arr_v4uint_uint_1296 ArrayStride 16
+               OpMemberDecorate %block0 0 NonWritable
+               OpMemberDecorate %block0 0 Offset 0
+               OpDecorate %block0 BufferBlock
+               OpDecorate %_ DescriptorSet 0
+               OpDecorate %_ Binding 0
+               OpDecorate %ndx_in Flat
+               OpDecorate %ndx_in Location 0
+               OpDecorate %gl_InvocationID BuiltIn InvocationId
+               OpDecorate %frexp_x_out Flat
+               OpDecorate %frexp_x_out Location 0
+               OpDecorate %frexp_exp_out Flat
+               OpDecorate %frexp_exp_out Location 1
+               OpDecorate %frexpStruct_x_out Flat
+               OpDecorate %frexpStruct_x_out Location 2
+               OpDecorate %frexpStruct_exp_out Flat
+               OpDecorate %frexpStruct_exp_out Location 3
+               OpDecorate %gl_TessLevelInner Patch
+               OpDecorate %gl_TessLevelInner BuiltIn TessLevelInner
+               OpDecorate %gl_TessLevelOuter Patch
+               OpDecorate %gl_TessLevelOuter BuiltIn TessLevelOuter
+               OpMemberDecorate %gl_PerVertex 0 BuiltIn Position
+               OpMemberDecorate %gl_PerVertex 1 BuiltIn PointSize
+               OpMemberDecorate %gl_PerVertex 2 BuiltIn ClipDistance
+               OpDecorate %gl_PerVertex Block
+               OpMemberDecorate %gl_PerVertex_0 0 BuiltIn Position
+               OpMemberDecorate %gl_PerVertex_0 1 BuiltIn PointSize
+               OpMemberDecorate %gl_PerVertex_0 2 BuiltIn ClipDistance
+               OpDecorate %gl_PerVertex_0 Block
+       %void = OpTypeVoid
+          %3 = OpTypeFunction %void
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+        %int = OpTypeInt 32 1
+      %v4int = OpTypeVector %int 4
+%frexpStructType = OpTypeStruct %v4float %v4int
+         %12 = OpTypeFunction %frexpStructType %_ptr_Function_v4float
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+%_ptr_Function_frexpStructType = OpTypePointer Function %frexpStructType
+       %uint = OpTypeInt 32 0
+     %v4uint = OpTypeVector %uint 4
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+  %uint_1296 = OpConstant %uint 1296
+%_arr_v4uint_uint_1296 = OpTypeArray %v4uint %uint_1296
+     %block0 = OpTypeStruct %_arr_v4uint_uint_1296
+%_ptr_Uniform_block0 = OpTypePointer Uniform %block0
+          %_ = OpVariable %_ptr_Uniform_block0 Uniform
+      %int_0 = OpConstant %int 0
+    %uint_32 = OpConstant %uint 32
+%_arr_uint_uint_32 = OpTypeArray %uint %uint_32
+%_ptr_Input__arr_uint_uint_32 = OpTypePointer Input %_arr_uint_uint_32
+     %ndx_in = OpVariable %_ptr_Input__arr_uint_uint_32 Input
+%_ptr_Input_int = OpTypePointer Input %int
+%gl_InvocationID = OpVariable %_ptr_Input_int Input
+%_ptr_Input_uint = OpTypePointer Input %uint
+%_ptr_Uniform_v4uint = OpTypePointer Uniform %v4uint
+     %uint_3 = OpConstant %uint 3
+%_arr_v4float_uint_3 = OpTypeArray %v4float %uint_3
+%_ptr_Output__arr_v4float_uint_3 = OpTypePointer Output %_arr_v4float_uint_3
+%frexp_x_out = OpVariable %_ptr_Output__arr_v4float_uint_3 Output
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+%frexp_exp_out = OpVariable %_ptr_Output__arr_v4float_uint_3 Output
+%frexpStruct_x_out = OpVariable %_ptr_Output__arr_v4float_uint_3 Output
+%frexpStruct_exp_out = OpVariable %_ptr_Output__arr_v4float_uint_3 Output
+      %int_1 = OpConstant %int 1
+     %uint_2 = OpConstant %uint 2
+%_arr_float_uint_2 = OpTypeArray %float %uint_2
+%_ptr_Output__arr_float_uint_2 = OpTypePointer Output %_arr_float_uint_2
+%gl_TessLevelInner = OpVariable %_ptr_Output__arr_float_uint_2 Output
+    %float_1 = OpConstant %float 1
+%_ptr_Output_float = OpTypePointer Output %float
+     %uint_4 = OpConstant %uint 4
+%_arr_float_uint_4 = OpTypeArray %float %uint_4
+%_ptr_Output__arr_float_uint_4 = OpTypePointer Output %_arr_float_uint_4
+%gl_TessLevelOuter = OpVariable %_ptr_Output__arr_float_uint_4 Output
+      %int_2 = OpConstant %int 2
+      %int_3 = OpConstant %int 3
+     %uint_1 = OpConstant %uint 1
+%_arr_float_uint_1 = OpTypeArray %float %uint_1
+%gl_PerVertex = OpTypeStruct %v4float %float %_arr_float_uint_1
+%_arr_gl_PerVertex_uint_3 = OpTypeArray %gl_PerVertex %uint_3
+%_ptr_Output__arr_gl_PerVertex_uint_3 = OpTypePointer Output %_arr_gl_PerVertex_uint_3
+     %gl_out = OpVariable %_ptr_Output__arr_gl_PerVertex_uint_3 Output
+%gl_PerVertex_0 = OpTypeStruct %v4float %float %_arr_float_uint_1
+%_arr_gl_PerVertex_0_uint_32 = OpTypeArray %gl_PerVertex_0 %uint_32
+%_ptr_Input__arr_gl_PerVertex_0_uint_32 = OpTypePointer Input %_arr_gl_PerVertex_0_uint_32
+      %gl_in = OpVariable %_ptr_Input__arr_gl_PerVertex_0_uint_32 Input
+%_ptr_Input_v4float = OpTypePointer Input %v4float
+       %main = OpFunction %void None %3
+          %5 = OpLabel
+    %in_uint = OpVariable %_ptr_Function_v4uint Function
+   %in_float = OpVariable %_ptr_Function_v4float Function
+        %x_0 = OpVariable %_ptr_Function_v4float Function
+      %exp_0 = OpVariable %_ptr_Function_v4int Function
+      %res_0 = OpVariable %_ptr_Function_frexpStructType Function
+         %45 = OpLoad %int %gl_InvocationID
+         %47 = OpAccessChain %_ptr_Input_uint %ndx_in %45
+         %48 = OpLoad %uint %47
+         %50 = OpAccessChain %_ptr_Uniform_v4uint %_ %int_0 %48
+         %51 = OpLoad %v4uint %50
+               OpStore %in_uint %51
+         %53 = OpLoad %v4uint %in_uint
+         %54 = OpBitcast %v4float %53
+               OpStore %in_float %54
+         %56 = OpLoad %v4float %in_float
+         %58 = OpExtInst %v4float %1 Frexp %56 %exp_0
+               OpStore %x_0 %58
+         %61 = OpLoad %v4float %in_float
+         %62 = OpExtInst %frexpStructType %1 FrexpStruct %61
+               OpStore %res_0 %62
+         %67 = OpLoad %int %gl_InvocationID
+         %68 = OpLoad %v4float %x_0
+         %70 = OpAccessChain %_ptr_Output_v4float %frexp_x_out %67
+               OpStore %70 %68
+         %72 = OpLoad %int %gl_InvocationID
+         %73 = OpLoad %v4int %exp_0
+         %74 = OpBitcast %v4float %73
+         %75 = OpAccessChain %_ptr_Output_v4float %frexp_exp_out %72
+               OpStore %75 %74
+         %77 = OpLoad %int %gl_InvocationID
+         %78 = OpAccessChain %_ptr_Function_v4float %res_0 %int_0
+         %79 = OpLoad %v4float %78
+         %80 = OpAccessChain %_ptr_Output_v4float %frexpStruct_x_out %77
+               OpStore %80 %79
+         %82 = OpLoad %int %gl_InvocationID
+         %84 = OpAccessChain %_ptr_Function_v4int %res_0 %int_1
+         %85 = OpLoad %v4int %84
+         %86 = OpBitcast %v4float %85
+         %87 = OpAccessChain %_ptr_Output_v4float %frexpStruct_exp_out %82
+               OpStore %87 %86
+         %94 = OpAccessChain %_ptr_Output_float %gl_TessLevelInner %int_0
+               OpStore %94 %float_1
+         %95 = OpAccessChain %_ptr_Output_float %gl_TessLevelInner %int_1
+               OpStore %95 %float_1
+        %100 = OpAccessChain %_ptr_Output_float %gl_TessLevelOuter %int_0
+               OpStore %100 %float_1
+        %101 = OpAccessChain %_ptr_Output_float %gl_TessLevelOuter %int_1
+               OpStore %101 %float_1
+        %103 = OpAccessChain %_ptr_Output_float %gl_TessLevelOuter %int_2
+               OpStore %103 %float_1
+        %105 = OpAccessChain %_ptr_Output_float %gl_TessLevelOuter %int_3
+               OpStore %105 %float_1
+        %112 = OpLoad %int %gl_InvocationID
+        %117 = OpLoad %int %gl_InvocationID
+        %119 = OpAccessChain %_ptr_Input_v4float %gl_in %117 %int_0
+        %120 = OpLoad %v4float %119
+        %121 = OpAccessChain %_ptr_Output_v4float %gl_out %112 %int_0
+               OpStore %121 %120
+               OpReturn
+               OpFunctionEnd
+END
+
+# SHADER tessellation_evaluation tese_shader GLSL
+# #version 430
+# precision highp float;
+#
+# layout (triangles) in;
+#
+# layout (location = 0) flat in vec4 frexp_x_in[];
+# layout (location = 1) flat in vec4 frexp_exp_in[];
+# layout (location = 2) flat in vec4 frexpStruct_x_in[];
+# layout (location = 3) flat in vec4 frexpStruct_exp_in[];
+#
+# layout (location = 0) flat out vec4 frexp_x_out;
+# layout (location = 1) flat out vec4 frexp_exp_out;
+# layout (location = 2) flat out vec4 frexpStruct_x_out;
+# layout (location = 3) flat out vec4 frexpStruct_exp_out;
+#
+# void main ()
+# {
+#     gl_Position = gl_TessCoord.x * gl_in[0].gl_Position +
+#                   gl_TessCoord.y * gl_in[1].gl_Position +
+#                   gl_TessCoord.z * gl_in[2].gl_Position;
+#
+#     frexp_x_out = frexp_x_in[0];
+#     frexp_exp_out = frexp_exp_in[0];
+#     frexpStruct_x_out = frexpStruct_x_in[0];
+#     frexpStruct_exp_out = frexpStruct_exp_in[0];
+# }
+# END
+
+SHADER tessellation_evaluation tese_shader SPIRV-ASM
+               OpCapability Tessellation
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint TessellationEvaluation %main "main" %_ %gl_TessCoord %gl_in %frexp_x_out %frexp_x_in %frexp_exp_out %frexp_exp_in %frexpStruct_x_out %frexpStruct_x_in %frexpStruct_exp_out %frexpStruct_exp_in
+               OpExecutionMode %main Triangles
+               OpExecutionMode %main SpacingEqual
+               OpExecutionMode %main VertexOrderCcw
+               OpMemberDecorate %gl_PerVertex 0 BuiltIn Position
+               OpMemberDecorate %gl_PerVertex 1 BuiltIn PointSize
+               OpMemberDecorate %gl_PerVertex 2 BuiltIn ClipDistance
+               OpDecorate %gl_PerVertex Block
+               OpDecorate %gl_TessCoord BuiltIn TessCoord
+               OpMemberDecorate %gl_PerVertex_0 0 BuiltIn Position
+               OpMemberDecorate %gl_PerVertex_0 1 BuiltIn PointSize
+               OpMemberDecorate %gl_PerVertex_0 2 BuiltIn ClipDistance
+               OpDecorate %gl_PerVertex_0 Block
+               OpDecorate %frexp_x_out Flat
+               OpDecorate %frexp_x_out Location 0
+               OpDecorate %frexp_x_in Flat
+               OpDecorate %frexp_x_in Location 0
+               OpDecorate %frexp_exp_out Flat
+               OpDecorate %frexp_exp_out Location 1
+               OpDecorate %frexp_exp_in Flat
+               OpDecorate %frexp_exp_in Location 1
+               OpDecorate %frexpStruct_x_out Flat
+               OpDecorate %frexpStruct_x_out Location 2
+               OpDecorate %frexpStruct_x_in Flat
+               OpDecorate %frexpStruct_x_in Location 2
+               OpDecorate %frexpStruct_exp_out Flat
+               OpDecorate %frexpStruct_exp_out Location 3
+               OpDecorate %frexpStruct_exp_in Flat
+               OpDecorate %frexpStruct_exp_in Location 3
+       %void = OpTypeVoid
+          %3 = OpTypeFunction %void
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+       %uint = OpTypeInt 32 0
+     %uint_1 = OpConstant %uint 1
+%_arr_float_uint_1 = OpTypeArray %float %uint_1
+%gl_PerVertex = OpTypeStruct %v4float %float %_arr_float_uint_1
+%_ptr_Output_gl_PerVertex = OpTypePointer Output %gl_PerVertex
+          %_ = OpVariable %_ptr_Output_gl_PerVertex Output
+        %int = OpTypeInt 32 1
+      %int_0 = OpConstant %int 0
+    %v3float = OpTypeVector %float 3
+%_ptr_Input_v3float = OpTypePointer Input %v3float
+%gl_TessCoord = OpVariable %_ptr_Input_v3float Input
+     %uint_0 = OpConstant %uint 0
+%_ptr_Input_float = OpTypePointer Input %float
+%gl_PerVertex_0 = OpTypeStruct %v4float %float %_arr_float_uint_1
+    %uint_32 = OpConstant %uint 32
+%_arr_gl_PerVertex_0_uint_32 = OpTypeArray %gl_PerVertex_0 %uint_32
+%_ptr_Input__arr_gl_PerVertex_0_uint_32 = OpTypePointer Input %_arr_gl_PerVertex_0_uint_32
+      %gl_in = OpVariable %_ptr_Input__arr_gl_PerVertex_0_uint_32 Input
+%_ptr_Input_v4float = OpTypePointer Input %v4float
+      %int_1 = OpConstant %int 1
+     %uint_2 = OpConstant %uint 2
+      %int_2 = OpConstant %int 2
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+%frexp_x_out = OpVariable %_ptr_Output_v4float Output
+%_arr_v4float_uint_32 = OpTypeArray %v4float %uint_32
+%_ptr_Input__arr_v4float_uint_32 = OpTypePointer Input %_arr_v4float_uint_32
+ %frexp_x_in = OpVariable %_ptr_Input__arr_v4float_uint_32 Input
+%frexp_exp_out = OpVariable %_ptr_Output_v4float Output
+%frexp_exp_in = OpVariable %_ptr_Input__arr_v4float_uint_32 Input
+%frexpStruct_x_out = OpVariable %_ptr_Output_v4float Output
+%frexpStruct_x_in = OpVariable %_ptr_Input__arr_v4float_uint_32 Input
+%frexpStruct_exp_out = OpVariable %_ptr_Output_v4float Output
+%frexpStruct_exp_in = OpVariable %_ptr_Input__arr_v4float_uint_32 Input
+       %main = OpFunction %void None %3
+          %5 = OpLabel
+         %21 = OpAccessChain %_ptr_Input_float %gl_TessCoord %uint_0
+         %22 = OpLoad %float %21
+         %29 = OpAccessChain %_ptr_Input_v4float %gl_in %int_0 %int_0
+         %30 = OpLoad %v4float %29
+         %31 = OpVectorTimesScalar %v4float %30 %22
+         %32 = OpAccessChain %_ptr_Input_float %gl_TessCoord %uint_1
+         %33 = OpLoad %float %32
+         %35 = OpAccessChain %_ptr_Input_v4float %gl_in %int_1 %int_0
+         %36 = OpLoad %v4float %35
+         %37 = OpVectorTimesScalar %v4float %36 %33
+         %38 = OpFAdd %v4float %31 %37
+         %40 = OpAccessChain %_ptr_Input_float %gl_TessCoord %uint_2
+         %41 = OpLoad %float %40
+         %43 = OpAccessChain %_ptr_Input_v4float %gl_in %int_2 %int_0
+         %44 = OpLoad %v4float %43
+         %45 = OpVectorTimesScalar %v4float %44 %41
+         %46 = OpFAdd %v4float %38 %45
+         %48 = OpAccessChain %_ptr_Output_v4float %_ %int_0
+               OpStore %48 %46
+         %53 = OpAccessChain %_ptr_Input_v4float %frexp_x_in %int_0
+         %54 = OpLoad %v4float %53
+               OpStore %frexp_x_out %54
+         %57 = OpAccessChain %_ptr_Input_v4float %frexp_exp_in %int_0
+         %58 = OpLoad %v4float %57
+               OpStore %frexp_exp_out %58
+         %61 = OpAccessChain %_ptr_Input_v4float %frexpStruct_x_in %int_0
+         %62 = OpLoad %v4float %61
+               OpStore %frexpStruct_x_out %62
+         %65 = OpAccessChain %_ptr_Input_v4float %frexpStruct_exp_in %int_0
+         %66 = OpLoad %v4float %65
+               OpStore %frexpStruct_exp_out %66
+               OpReturn
+               OpFunctionEnd
+END
+
+# SHADER fragment frag_shader GLSL
+# #version 430
+# precision highp float;
+#
+# layout (location = 0) flat in vec4 frexp_x_in;
+# layout (location = 1) flat in vec4 frexp_exp_in;
+# layout (location = 2) flat in vec4 frexpStruct_x_in;
+# layout (location = 3) flat in vec4 frexpStruct_exp_in;
+#
+# layout (location = 0) out vec4 frexp_x_out;
+# layout (location = 1) out vec4 frexp_exp_out;
+# layout (location = 2) out vec4 frexpStruct_x_out;
+# layout (location = 3) out vec4 frexpStruct_exp_out;
+#
+#
+# void main ()
+# {
+#     frexp_x_out.rgba = frexp_x_in;
+#     frexp_exp_out.rgba = frexp_exp_in;
+#     frexpStruct_x_out.rgba = frexpStruct_x_in;
+#     frexpStruct_exp_out.rgba = frexpStruct_exp_in;
+# }
+# END
+
+SHADER fragment frag_shader SPIRV-ASM
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %main "main" %frexp_x_out %frexp_x_in %frexp_exp_out %frexp_exp_in %frexpStruct_x_out %frexpStruct_x_in %frexpStruct_exp_out %frexpStruct_exp_in
+               OpExecutionMode %main OriginUpperLeft
+               OpDecorate %frexp_x_out Location 0
+               OpDecorate %frexp_x_in Flat
+               OpDecorate %frexp_x_in Location 0
+               OpDecorate %frexp_exp_out Location 1
+               OpDecorate %frexp_exp_in Flat
+               OpDecorate %frexp_exp_in Location 1
+               OpDecorate %frexpStruct_x_out Location 2
+               OpDecorate %frexpStruct_x_in Flat
+               OpDecorate %frexpStruct_x_in Location 2
+               OpDecorate %frexpStruct_exp_out Location 3
+               OpDecorate %frexpStruct_exp_in Flat
+               OpDecorate %frexpStruct_exp_in Location 3
+       %void = OpTypeVoid
+          %3 = OpTypeFunction %void
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+%frexp_x_out = OpVariable %_ptr_Output_v4float Output
+%_ptr_Input_v4float = OpTypePointer Input %v4float
+ %frexp_x_in = OpVariable %_ptr_Input_v4float Input
+%frexp_exp_out = OpVariable %_ptr_Output_v4float Output
+%frexp_exp_in = OpVariable %_ptr_Input_v4float Input
+%frexpStruct_x_out = OpVariable %_ptr_Output_v4float Output
+%frexpStruct_x_in = OpVariable %_ptr_Input_v4float Input
+%frexpStruct_exp_out = OpVariable %_ptr_Output_v4float Output
+%frexpStruct_exp_in = OpVariable %_ptr_Input_v4float Input
+       %main = OpFunction %void None %3
+          %5 = OpLabel
+         %12 = OpLoad %v4float %frexp_x_in
+               OpStore %frexp_x_out %12
+         %15 = OpLoad %v4float %frexp_exp_in
+               OpStore %frexp_exp_out %15
+         %18 = OpLoad %v4float %frexpStruct_x_in
+               OpStore %frexpStruct_x_out %18
+         %21 = OpLoad %v4float %frexpStruct_exp_in
+               OpStore %frexpStruct_exp_out %21
+               OpReturn
+               OpFunctionEnd
+END
+
+BUFFER buf_in DATA_TYPE uint32 SIZE 1296 FILE TEXT input.txt
+BUFFER vertices DATA_TYPE vec2<float> SIZE 7776 FILE TEXT grid_vertices.txt
+
+BUFFER frexp_x FORMAT R32G32B32A32_SFLOAT
+BUFFER frexp_exp FORMAT R32G32B32A32_SFLOAT
+BUFFER frexpStruct_x FORMAT R32G32B32A32_SFLOAT
+BUFFER frexpStruct_exp FORMAT R32G32B32A32_SFLOAT
+
+PIPELINE graphics test_pipeline
+    FRAMEBUFFER_SIZE 144 144
+
+    ATTACH vert_shader
+    ATTACH tesc_shader
+    ATTACH tese_shader
+    ATTACH frag_shader
+
+    VERTEX_DATA vertices LOCATION 0
+
+    BIND BUFFER buf_in AS storage DESCRIPTOR_SET 0 BINDING 0
+    BIND BUFFER frexp_x AS color LOCATION 0
+    BIND BUFFER frexp_exp AS color LOCATION 1
+    BIND BUFFER frexpStruct_x AS color LOCATION 2
+    BIND BUFFER frexpStruct_exp AS color LOCATION 3
+END
+
+#RUN test_pipeline DRAW_GRID POS 0 0 SIZE 144 144 CELLS 144 144
+RUN test_pipeline DRAW_ARRAY AS PATCH_LIST START_IDX 0 COUNT 7776
+
+EXPECT frexp_x EQ_BUFFER frexpStruct_x
+EXPECT frexp_exp EQ_BUFFER frexpStruct_exp
diff --git a/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/frexpstruct_4_tese.amber b/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/frexpstruct_4_tese.amber
new file mode 100644
index 0000000..7104926
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/frexpstruct_4_tese.amber
@@ -0,0 +1,518 @@
+#!amber
+
+# Copyright 2021 Google LLC
+#
+# 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.
+
+# A tessellation evaluation shader test for FrexpStruct.
+
+DEVICE_FEATURE tessellationShader
+
+# SHADER vertex vert_shader GLSL
+# #version 430
+# precision highp float;
+#
+# const uint ndp = 1296;
+# const uint ndpSqrt = uint(sqrt(ndp));
+# const float halfGridElementSize = 1.0 / float(ndpSqrt);
+#
+# layout (location = 0) in vec2 position;
+# layout (location = 0) flat out uint ndx_out;
+#
+# void main ()
+# {
+#     uint xcoord = uint(ndpSqrt * ((position.x + halfGridElementSize + 1) / 2) - 1);
+#     uint ycoord = uint(ndpSqrt * ((position.y + halfGridElementSize + 1) / 2) - 1);
+#     ndx_out = xcoord + ycoord * ndpSqrt;
+#
+#     gl_Position = vec4(position, 0, 1);
+#
+#     return;
+# }
+# END
+
+SHADER vertex vert_shader SPIRV-ASM
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %main "main" %position %ndx_out %_
+               OpDecorate %position Location 0
+               OpDecorate %ndx_out Flat
+               OpDecorate %ndx_out Location 0
+               OpMemberDecorate %gl_PerVertex 0 BuiltIn Position
+               OpMemberDecorate %gl_PerVertex 1 BuiltIn PointSize
+               OpMemberDecorate %gl_PerVertex 2 BuiltIn ClipDistance
+               OpDecorate %gl_PerVertex Block
+       %void = OpTypeVoid
+          %3 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+      %float = OpTypeFloat 32
+    %v2float = OpTypeVector %float 2
+%_ptr_Input_v2float = OpTypePointer Input %v2float
+   %position = OpVariable %_ptr_Input_v2float Input
+     %uint_0 = OpConstant %uint 0
+%_ptr_Input_float = OpTypePointer Input %float
+    %float_1 = OpConstant %float 1
+     %uint_1 = OpConstant %uint 1
+%_ptr_Output_uint = OpTypePointer Output %uint
+    %ndx_out = OpVariable %_ptr_Output_uint Output
+    %uint_36 = OpConstant %uint 36
+    %v4float = OpTypeVector %float 4
+%_arr_float_uint_1 = OpTypeArray %float %uint_1
+%gl_PerVertex = OpTypeStruct %v4float %float %_arr_float_uint_1
+%_ptr_Output_gl_PerVertex = OpTypePointer Output %gl_PerVertex
+          %_ = OpVariable %_ptr_Output_gl_PerVertex Output
+        %int = OpTypeInt 32 1
+      %int_0 = OpConstant %int 0
+    %float_0 = OpConstant %float 0
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+%float_1_02777779 = OpConstant %float 1.02777779
+   %float_18 = OpConstant %float 18
+       %main = OpFunction %void None %3
+          %5 = OpLabel
+         %16 = OpAccessChain %_ptr_Input_float %position %uint_0
+         %17 = OpLoad %float %16
+         %21 = OpFAdd %float %17 %float_1_02777779
+         %24 = OpFMul %float %21 %float_18
+         %25 = OpFSub %float %24 %float_1
+         %26 = OpConvertFToU %uint %25
+         %29 = OpAccessChain %_ptr_Input_float %position %uint_1
+         %30 = OpLoad %float %29
+         %32 = OpFAdd %float %30 %float_1_02777779
+         %34 = OpFMul %float %32 %float_18
+         %35 = OpFSub %float %34 %float_1
+         %36 = OpConvertFToU %uint %35
+         %42 = OpIMul %uint %36 %uint_36
+         %43 = OpIAdd %uint %26 %42
+               OpStore %ndx_out %43
+         %51 = OpLoad %v2float %position
+         %53 = OpCompositeExtract %float %51 0
+         %54 = OpCompositeExtract %float %51 1
+         %55 = OpCompositeConstruct %v4float %53 %54 %float_0 %float_1
+         %57 = OpAccessChain %_ptr_Output_v4float %_ %int_0
+               OpStore %57 %55
+               OpReturn
+               OpFunctionEnd
+END
+
+# SHADER tessellation_control tesc_shader GLSL
+# #version 430
+# precision highp float;
+#
+# layout (vertices = 3) out;
+#
+# layout (location = 0) flat in uint ndx_in[];
+# layout (location = 0) flat out uint ndx_out[];
+#
+# void main ()
+# {
+#     gl_TessLevelInner[0]    = 1.0;
+#     gl_TessLevelInner[1]    = 1.0;
+#     gl_TessLevelOuter[0]    = 1.0;
+#     gl_TessLevelOuter[1]    = 1.0;
+#     gl_TessLevelOuter[2]    = 1.0;
+#     gl_TessLevelOuter[3]    = 1.0;
+#
+#     gl_out[gl_InvocationID].gl_Position = gl_in[gl_InvocationID].gl_Position;
+#     ndx_out[gl_InvocationID] = ndx_in[gl_InvocationID];
+# }
+# END
+
+SHADER tessellation_control tesc_shader SPIRV-ASM
+               OpCapability Tessellation
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint TessellationControl %main "main" %gl_TessLevelInner %gl_TessLevelOuter %gl_out %gl_InvocationID %gl_in %ndx_out %ndx_in
+               OpExecutionMode %main OutputVertices 3
+               OpDecorate %gl_TessLevelInner Patch
+               OpDecorate %gl_TessLevelInner BuiltIn TessLevelInner
+               OpDecorate %gl_TessLevelOuter Patch
+               OpDecorate %gl_TessLevelOuter BuiltIn TessLevelOuter
+               OpMemberDecorate %gl_PerVertex 0 BuiltIn Position
+               OpMemberDecorate %gl_PerVertex 1 BuiltIn PointSize
+               OpMemberDecorate %gl_PerVertex 2 BuiltIn ClipDistance
+               OpDecorate %gl_PerVertex Block
+               OpDecorate %gl_InvocationID BuiltIn InvocationId
+               OpMemberDecorate %gl_PerVertex_0 0 BuiltIn Position
+               OpMemberDecorate %gl_PerVertex_0 1 BuiltIn PointSize
+               OpMemberDecorate %gl_PerVertex_0 2 BuiltIn ClipDistance
+               OpDecorate %gl_PerVertex_0 Block
+               OpDecorate %ndx_out Flat
+               OpDecorate %ndx_out Location 0
+               OpDecorate %ndx_in Flat
+               OpDecorate %ndx_in Location 0
+       %void = OpTypeVoid
+          %3 = OpTypeFunction %void
+      %float = OpTypeFloat 32
+       %uint = OpTypeInt 32 0
+     %uint_2 = OpConstant %uint 2
+%_arr_float_uint_2 = OpTypeArray %float %uint_2
+%_ptr_Output__arr_float_uint_2 = OpTypePointer Output %_arr_float_uint_2
+%gl_TessLevelInner = OpVariable %_ptr_Output__arr_float_uint_2 Output
+        %int = OpTypeInt 32 1
+      %int_0 = OpConstant %int 0
+    %float_1 = OpConstant %float 1
+%_ptr_Output_float = OpTypePointer Output %float
+      %int_1 = OpConstant %int 1
+     %uint_4 = OpConstant %uint 4
+%_arr_float_uint_4 = OpTypeArray %float %uint_4
+%_ptr_Output__arr_float_uint_4 = OpTypePointer Output %_arr_float_uint_4
+%gl_TessLevelOuter = OpVariable %_ptr_Output__arr_float_uint_4 Output
+      %int_2 = OpConstant %int 2
+      %int_3 = OpConstant %int 3
+    %v4float = OpTypeVector %float 4
+     %uint_1 = OpConstant %uint 1
+%_arr_float_uint_1 = OpTypeArray %float %uint_1
+%gl_PerVertex = OpTypeStruct %v4float %float %_arr_float_uint_1
+     %uint_3 = OpConstant %uint 3
+%_arr_gl_PerVertex_uint_3 = OpTypeArray %gl_PerVertex %uint_3
+%_ptr_Output__arr_gl_PerVertex_uint_3 = OpTypePointer Output %_arr_gl_PerVertex_uint_3
+     %gl_out = OpVariable %_ptr_Output__arr_gl_PerVertex_uint_3 Output
+%_ptr_Input_int = OpTypePointer Input %int
+%gl_InvocationID = OpVariable %_ptr_Input_int Input
+%gl_PerVertex_0 = OpTypeStruct %v4float %float %_arr_float_uint_1
+    %uint_32 = OpConstant %uint 32
+%_arr_gl_PerVertex_0_uint_32 = OpTypeArray %gl_PerVertex_0 %uint_32
+%_ptr_Input__arr_gl_PerVertex_0_uint_32 = OpTypePointer Input %_arr_gl_PerVertex_0_uint_32
+      %gl_in = OpVariable %_ptr_Input__arr_gl_PerVertex_0_uint_32 Input
+%_ptr_Input_v4float = OpTypePointer Input %v4float
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+%_arr_uint_uint_3 = OpTypeArray %uint %uint_3
+%_ptr_Output__arr_uint_uint_3 = OpTypePointer Output %_arr_uint_uint_3
+    %ndx_out = OpVariable %_ptr_Output__arr_uint_uint_3 Output
+%_arr_uint_uint_32 = OpTypeArray %uint %uint_32
+%_ptr_Input__arr_uint_uint_32 = OpTypePointer Input %_arr_uint_uint_32
+     %ndx_in = OpVariable %_ptr_Input__arr_uint_uint_32 Input
+%_ptr_Input_uint = OpTypePointer Input %uint
+%_ptr_Output_uint = OpTypePointer Output %uint
+       %main = OpFunction %void None %3
+          %5 = OpLabel
+         %16 = OpAccessChain %_ptr_Output_float %gl_TessLevelInner %int_0
+               OpStore %16 %float_1
+         %18 = OpAccessChain %_ptr_Output_float %gl_TessLevelInner %int_1
+               OpStore %18 %float_1
+         %23 = OpAccessChain %_ptr_Output_float %gl_TessLevelOuter %int_0
+               OpStore %23 %float_1
+         %24 = OpAccessChain %_ptr_Output_float %gl_TessLevelOuter %int_1
+               OpStore %24 %float_1
+         %26 = OpAccessChain %_ptr_Output_float %gl_TessLevelOuter %int_2
+               OpStore %26 %float_1
+         %28 = OpAccessChain %_ptr_Output_float %gl_TessLevelOuter %int_3
+               OpStore %28 %float_1
+         %39 = OpLoad %int %gl_InvocationID
+         %47 = OpAccessChain %_ptr_Input_v4float %gl_in %39 %int_0
+         %48 = OpLoad %v4float %47
+         %50 = OpAccessChain %_ptr_Output_v4float %gl_out %39 %int_0
+               OpStore %50 %48
+         %60 = OpAccessChain %_ptr_Input_uint %ndx_in %39
+         %61 = OpLoad %uint %60
+         %63 = OpAccessChain %_ptr_Output_uint %ndx_out %39
+               OpStore %63 %61
+               OpReturn
+               OpFunctionEnd
+END
+
+# SHADER tessellation_evaluation tese_shader GLSL
+# #version 430
+# precision highp float;
+#
+# const uint ndp = 1296;
+#
+# layout (triangles) in;
+#
+# layout (location = 0) flat in uint ndx_in[];
+# layout (location = 0) flat out vec4 frexp_x_out;
+# layout (location = 1) flat out vec4 frexp_exp_out;
+# layout (location = 2) flat out vec4 frexpStruct_x_out;
+# layout (location = 3) flat out vec4 frexpStruct_exp_out;
+#
+# layout(set = 0, binding = 0) readonly buffer block0 {
+#     uvec4 in_values[ndp];
+# };
+#
+# struct frexpStructType
+# {
+#     vec4 x;
+#     ivec4 exp;
+# };
+#
+# // Replaced with native function in SPIR-V.
+# frexpStructType frexpStruct (vec4 orig)
+# {
+#     vec4 x;
+#     ivec4 exp;
+#     x = frexp(orig, exp);
+#     frexpStructType res = { x, exp };
+#     return res;
+# }
+#
+# void main ()
+# {
+#     gl_Position = gl_TessCoord.x * gl_in[0].gl_Position +
+#                   gl_TessCoord.y * gl_in[1].gl_Position +
+#                   gl_TessCoord.z * gl_in[2].gl_Position;
+#
+#     uvec4 in_uint = in_values[ndx_in[0]];
+#     vec4 in_float = uintBitsToFloat(in_uint);
+#     vec4 x;
+#     ivec4 exp;
+#     frexpStructType res;
+#
+#     x = frexp(in_float, exp);
+#     res = frexpStruct(in_float);
+#
+#     frexp_x_out = x;
+#     frexp_exp_out = intBitsToFloat(exp);
+#     frexpStruct_x_out = res.x;
+#     frexpStruct_exp_out = intBitsToFloat(res.exp);
+# }
+# END
+
+SHADER tessellation_evaluation tese_shader SPIRV-ASM
+               OpCapability Tessellation
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint TessellationEvaluation %main "main" %_ %gl_TessCoord %gl_in %ndx_in %frexp_x_out %frexp_exp_out %frexpStruct_x_out %frexpStruct_exp_out
+               OpExecutionMode %main Triangles
+               OpExecutionMode %main SpacingEqual
+               OpExecutionMode %main VertexOrderCcw
+               OpMemberDecorate %gl_PerVertex 0 BuiltIn Position
+               OpMemberDecorate %gl_PerVertex 1 BuiltIn PointSize
+               OpMemberDecorate %gl_PerVertex 2 BuiltIn ClipDistance
+               OpDecorate %gl_PerVertex Block
+               OpDecorate %gl_TessCoord BuiltIn TessCoord
+               OpMemberDecorate %gl_PerVertex_0 0 BuiltIn Position
+               OpMemberDecorate %gl_PerVertex_0 1 BuiltIn PointSize
+               OpMemberDecorate %gl_PerVertex_0 2 BuiltIn ClipDistance
+               OpDecorate %gl_PerVertex_0 Block
+               OpDecorate %_arr_v4uint_uint_1296 ArrayStride 16
+               OpMemberDecorate %block0 0 NonWritable
+               OpMemberDecorate %block0 0 Offset 0
+               OpDecorate %block0 BufferBlock
+               OpDecorate %__0 DescriptorSet 0
+               OpDecorate %__0 Binding 0
+               OpDecorate %ndx_in Flat
+               OpDecorate %ndx_in Location 0
+               OpDecorate %frexp_x_out Flat
+               OpDecorate %frexp_x_out Location 0
+               OpDecorate %frexp_exp_out Flat
+               OpDecorate %frexp_exp_out Location 1
+               OpDecorate %frexpStruct_x_out Flat
+               OpDecorate %frexpStruct_x_out Location 2
+               OpDecorate %frexpStruct_exp_out Flat
+               OpDecorate %frexpStruct_exp_out Location 3
+       %void = OpTypeVoid
+          %3 = OpTypeFunction %void
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+        %int = OpTypeInt 32 1
+      %v4int = OpTypeVector %int 4
+%frexpStructType = OpTypeStruct %v4float %v4int
+         %12 = OpTypeFunction %frexpStructType %_ptr_Function_v4float
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+%_ptr_Function_frexpStructType = OpTypePointer Function %frexpStructType
+       %uint = OpTypeInt 32 0
+     %uint_1 = OpConstant %uint 1
+%_arr_float_uint_1 = OpTypeArray %float %uint_1
+%gl_PerVertex = OpTypeStruct %v4float %float %_arr_float_uint_1
+%_ptr_Output_gl_PerVertex = OpTypePointer Output %gl_PerVertex
+          %_ = OpVariable %_ptr_Output_gl_PerVertex Output
+      %int_0 = OpConstant %int 0
+    %v3float = OpTypeVector %float 3
+%_ptr_Input_v3float = OpTypePointer Input %v3float
+%gl_TessCoord = OpVariable %_ptr_Input_v3float Input
+     %uint_0 = OpConstant %uint 0
+%_ptr_Input_float = OpTypePointer Input %float
+%gl_PerVertex_0 = OpTypeStruct %v4float %float %_arr_float_uint_1
+    %uint_32 = OpConstant %uint 32
+%_arr_gl_PerVertex_0_uint_32 = OpTypeArray %gl_PerVertex_0 %uint_32
+%_ptr_Input__arr_gl_PerVertex_0_uint_32 = OpTypePointer Input %_arr_gl_PerVertex_0_uint_32
+      %gl_in = OpVariable %_ptr_Input__arr_gl_PerVertex_0_uint_32 Input
+%_ptr_Input_v4float = OpTypePointer Input %v4float
+      %int_1 = OpConstant %int 1
+     %uint_2 = OpConstant %uint 2
+      %int_2 = OpConstant %int 2
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+     %v4uint = OpTypeVector %uint 4
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+  %uint_1296 = OpConstant %uint 1296
+%_arr_v4uint_uint_1296 = OpTypeArray %v4uint %uint_1296
+     %block0 = OpTypeStruct %_arr_v4uint_uint_1296
+%_ptr_Uniform_block0 = OpTypePointer Uniform %block0
+        %__0 = OpVariable %_ptr_Uniform_block0 Uniform
+%_arr_uint_uint_32 = OpTypeArray %uint %uint_32
+%_ptr_Input__arr_uint_uint_32 = OpTypePointer Input %_arr_uint_uint_32
+     %ndx_in = OpVariable %_ptr_Input__arr_uint_uint_32 Input
+%_ptr_Input_uint = OpTypePointer Input %uint
+%_ptr_Uniform_v4uint = OpTypePointer Uniform %v4uint
+%frexp_x_out = OpVariable %_ptr_Output_v4float Output
+%frexp_exp_out = OpVariable %_ptr_Output_v4float Output
+%frexpStruct_x_out = OpVariable %_ptr_Output_v4float Output
+%frexpStruct_exp_out = OpVariable %_ptr_Output_v4float Output
+       %main = OpFunction %void None %3
+          %5 = OpLabel
+    %in_uint = OpVariable %_ptr_Function_v4uint Function
+   %in_float = OpVariable %_ptr_Function_v4float Function
+        %x_0 = OpVariable %_ptr_Function_v4float Function
+      %exp_0 = OpVariable %_ptr_Function_v4int Function
+      %res_0 = OpVariable %_ptr_Function_frexpStructType Function
+         %41 = OpAccessChain %_ptr_Input_float %gl_TessCoord %uint_0
+         %42 = OpLoad %float %41
+         %49 = OpAccessChain %_ptr_Input_v4float %gl_in %int_0 %int_0
+         %50 = OpLoad %v4float %49
+         %51 = OpVectorTimesScalar %v4float %50 %42
+         %52 = OpAccessChain %_ptr_Input_float %gl_TessCoord %uint_1
+         %53 = OpLoad %float %52
+         %55 = OpAccessChain %_ptr_Input_v4float %gl_in %int_1 %int_0
+         %56 = OpLoad %v4float %55
+         %57 = OpVectorTimesScalar %v4float %56 %53
+         %58 = OpFAdd %v4float %51 %57
+         %60 = OpAccessChain %_ptr_Input_float %gl_TessCoord %uint_2
+         %61 = OpLoad %float %60
+         %63 = OpAccessChain %_ptr_Input_v4float %gl_in %int_2 %int_0
+         %64 = OpLoad %v4float %63
+         %65 = OpVectorTimesScalar %v4float %64 %61
+         %66 = OpFAdd %v4float %58 %65
+         %68 = OpAccessChain %_ptr_Output_v4float %_ %int_0
+               OpStore %68 %66
+         %81 = OpAccessChain %_ptr_Input_uint %ndx_in %int_0
+         %82 = OpLoad %uint %81
+         %84 = OpAccessChain %_ptr_Uniform_v4uint %__0 %int_0 %82
+         %85 = OpLoad %v4uint %84
+               OpStore %in_uint %85
+         %87 = OpLoad %v4uint %in_uint
+         %88 = OpBitcast %v4float %87
+               OpStore %in_float %88
+         %90 = OpLoad %v4float %in_float
+         %92 = OpExtInst %v4float %1 Frexp %90 %exp_0
+               OpStore %x_0 %92
+         %95 = OpLoad %v4float %in_float
+         %96 = OpExtInst %frexpStructType %1 FrexpStruct %95
+               OpStore %res_0 %96
+         %98 = OpLoad %v4float %x_0
+               OpStore %frexp_x_out %98
+        %100 = OpLoad %v4int %exp_0
+        %101 = OpBitcast %v4float %100
+               OpStore %frexp_exp_out %101
+        %103 = OpAccessChain %_ptr_Function_v4float %res_0 %int_0
+        %104 = OpLoad %v4float %103
+               OpStore %frexpStruct_x_out %104
+        %106 = OpAccessChain %_ptr_Function_v4int %res_0 %int_1
+        %107 = OpLoad %v4int %106
+        %108 = OpBitcast %v4float %107
+               OpStore %frexpStruct_exp_out %108
+               OpReturn
+               OpFunctionEnd
+END
+
+# SHADER fragment frag_shader GLSL
+# #version 430
+# precision highp float;
+#
+# layout (location = 0) flat in vec4 frexp_x_in;
+# layout (location = 1) flat in vec4 frexp_exp_in;
+# layout (location = 2) flat in vec4 frexpStruct_x_in;
+# layout (location = 3) flat in vec4 frexpStruct_exp_in;
+#
+# layout (location = 0) out vec4 frexp_x_out;
+# layout (location = 1) out vec4 frexp_exp_out;
+# layout (location = 2) out vec4 frexpStruct_x_out;
+# layout (location = 3) out vec4 frexpStruct_exp_out;
+#
+#
+# void main ()
+# {
+#     frexp_x_out.rgba = frexp_x_in;
+#     frexp_exp_out.rgba = frexp_exp_in;
+#     frexpStruct_x_out.rgba = frexpStruct_x_in;
+#     frexpStruct_exp_out.rgba = frexpStruct_exp_in;
+# }
+# END
+
+SHADER fragment frag_shader SPIRV-ASM
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %main "main" %frexp_x_out %frexp_x_in %frexp_exp_out %frexp_exp_in %frexpStruct_x_out %frexpStruct_x_in %frexpStruct_exp_out %frexpStruct_exp_in
+               OpExecutionMode %main OriginUpperLeft
+               OpDecorate %frexp_x_out Location 0
+               OpDecorate %frexp_x_in Flat
+               OpDecorate %frexp_x_in Location 0
+               OpDecorate %frexp_exp_out Location 1
+               OpDecorate %frexp_exp_in Flat
+               OpDecorate %frexp_exp_in Location 1
+               OpDecorate %frexpStruct_x_out Location 2
+               OpDecorate %frexpStruct_x_in Flat
+               OpDecorate %frexpStruct_x_in Location 2
+               OpDecorate %frexpStruct_exp_out Location 3
+               OpDecorate %frexpStruct_exp_in Flat
+               OpDecorate %frexpStruct_exp_in Location 3
+       %void = OpTypeVoid
+          %3 = OpTypeFunction %void
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+%frexp_x_out = OpVariable %_ptr_Output_v4float Output
+%_ptr_Input_v4float = OpTypePointer Input %v4float
+ %frexp_x_in = OpVariable %_ptr_Input_v4float Input
+%frexp_exp_out = OpVariable %_ptr_Output_v4float Output
+%frexp_exp_in = OpVariable %_ptr_Input_v4float Input
+%frexpStruct_x_out = OpVariable %_ptr_Output_v4float Output
+%frexpStruct_x_in = OpVariable %_ptr_Input_v4float Input
+%frexpStruct_exp_out = OpVariable %_ptr_Output_v4float Output
+%frexpStruct_exp_in = OpVariable %_ptr_Input_v4float Input
+       %main = OpFunction %void None %3
+          %5 = OpLabel
+         %12 = OpLoad %v4float %frexp_x_in
+               OpStore %frexp_x_out %12
+         %15 = OpLoad %v4float %frexp_exp_in
+               OpStore %frexp_exp_out %15
+         %18 = OpLoad %v4float %frexpStruct_x_in
+               OpStore %frexpStruct_x_out %18
+         %21 = OpLoad %v4float %frexpStruct_exp_in
+               OpStore %frexpStruct_exp_out %21
+               OpReturn
+               OpFunctionEnd
+END
+
+BUFFER buf_in DATA_TYPE uint32 SIZE 1296 FILE TEXT input.txt
+BUFFER vertices DATA_TYPE vec2<float> SIZE 7776 FILE TEXT grid_vertices.txt
+
+BUFFER frexp_x FORMAT R32G32B32A32_SFLOAT
+BUFFER frexp_exp FORMAT R32G32B32A32_SFLOAT
+BUFFER frexpStruct_x FORMAT R32G32B32A32_SFLOAT
+BUFFER frexpStruct_exp FORMAT R32G32B32A32_SFLOAT
+
+PIPELINE graphics test_pipeline
+    FRAMEBUFFER_SIZE 144 144
+
+    ATTACH vert_shader
+    ATTACH tesc_shader
+    ATTACH tese_shader
+    ATTACH frag_shader
+
+    VERTEX_DATA vertices LOCATION 0
+
+    BIND BUFFER buf_in AS storage DESCRIPTOR_SET 0 BINDING 0
+    BIND BUFFER frexp_x AS color LOCATION 0
+    BIND BUFFER frexp_exp AS color LOCATION 1
+    BIND BUFFER frexpStruct_x AS color LOCATION 2
+    BIND BUFFER frexpStruct_exp AS color LOCATION 3
+END
+
+#RUN test_pipeline DRAW_GRID POS 0 0 SIZE 144 144 CELLS 144 144
+RUN test_pipeline DRAW_ARRAY AS PATCH_LIST START_IDX 0 COUNT 7776
+
+EXPECT frexp_x EQ_BUFFER frexpStruct_x
+EXPECT frexp_exp EQ_BUFFER frexpStruct_exp
diff --git a/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/frexpstruct_4_vert.amber b/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/frexpstruct_4_vert.amber
new file mode 100644
index 0000000..41d8aed
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/float32/comparison/frexpstruct_4_vert.amber
@@ -0,0 +1,311 @@
+#!amber
+
+# Copyright 2021 Google LLC
+#
+# 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.
+
+# A vertex shader test for FrexpStruct.
+
+# SHADER vertex vert_shader GLSL
+# #version 430
+# precision highp float;
+#
+# const uint ndp = 1296;
+# const uint ndpSqrt = uint(sqrt(ndp));
+# const float halfGridElementSize = 1.0 / float(ndpSqrt);
+#
+# layout (location = 0) in vec2 position;
+# layout (location = 0) flat out vec4 frexp_x_out;
+# layout (location = 1) flat out vec4 frexp_exp_out;
+# layout (location = 2) flat out vec4 frexpStruct_x_out;
+# layout (location = 3) flat out vec4 frexpStruct_exp_out;
+#
+# layout(set = 0, binding = 0) readonly buffer block0 {
+#     uvec4 in_values[ndp];
+# };
+#
+# struct frexpStructType
+# {
+#     vec4 x;
+#     ivec4 exp;
+# };
+#
+# // Replaced with native function in SPIR-V.
+# frexpStructType frexpStruct (vec4 orig)
+# {
+#     vec4 x;
+#     ivec4 exp;
+#     x = frexp(orig, exp);
+#     frexpStructType res = { x, exp };
+#     return res;
+# }
+#
+# void main ()
+# {
+#     uint xcoord = uint(ndpSqrt * ((position.x + halfGridElementSize + 1) / 2) - 1);
+#     uint ycoord = uint(ndpSqrt * ((position.y + halfGridElementSize + 1) / 2) - 1);
+#     uint ndx = xcoord + ycoord * ndpSqrt;
+#
+#     uvec4 in_uint = in_values[ndx];
+#     vec4 in_float = uintBitsToFloat(in_uint);
+#     vec4 x;
+#     ivec4 exp;
+#     frexpStructType res;
+#
+#     x = frexp(in_float, exp);
+#     res = frexpStruct(in_float);
+#
+#     frexp_x_out = x;
+#     frexp_exp_out = intBitsToFloat(exp);
+#     frexpStruct_x_out = res.x;
+#     frexpStruct_exp_out = intBitsToFloat(res.exp);
+#
+#     gl_Position = vec4(position, 0, 1);
+#
+#     return;
+# }
+# END
+
+SHADER vertex vert_shader SPIRV-ASM
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %main "main" %position %frexp_x_out %frexp_exp_out %frexpStruct_x_out %frexpStruct_exp_out %__0
+               OpDecorate %position Location 0
+               OpDecorate %_arr_v4uint_uint_1296 ArrayStride 16
+               OpMemberDecorate %block0 0 NonWritable
+               OpMemberDecorate %block0 0 Offset 0
+               OpDecorate %block0 BufferBlock
+               OpDecorate %_ DescriptorSet 0
+               OpDecorate %_ Binding 0
+               OpDecorate %frexp_x_out Flat
+               OpDecorate %frexp_x_out Location 0
+               OpDecorate %frexp_exp_out Flat
+               OpDecorate %frexp_exp_out Location 1
+               OpDecorate %frexpStruct_x_out Flat
+               OpDecorate %frexpStruct_x_out Location 2
+               OpDecorate %frexpStruct_exp_out Flat
+               OpDecorate %frexpStruct_exp_out Location 3
+               OpMemberDecorate %gl_PerVertex 0 BuiltIn Position
+               OpMemberDecorate %gl_PerVertex 1 BuiltIn PointSize
+               OpMemberDecorate %gl_PerVertex 2 BuiltIn ClipDistance
+               OpDecorate %gl_PerVertex Block
+       %void = OpTypeVoid
+          %3 = OpTypeFunction %void
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+        %int = OpTypeInt 32 1
+      %v4int = OpTypeVector %int 4
+%frexpStructType = OpTypeStruct %v4float %v4int
+         %12 = OpTypeFunction %frexpStructType %_ptr_Function_v4float
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+%_ptr_Function_frexpStructType = OpTypePointer Function %frexpStructType
+       %uint = OpTypeInt 32 0
+%_ptr_Function_uint = OpTypePointer Function %uint
+   %float_36 = OpConstant %float 36
+    %v2float = OpTypeVector %float 2
+%_ptr_Input_v2float = OpTypePointer Input %v2float
+   %position = OpVariable %_ptr_Input_v2float Input
+     %uint_0 = OpConstant %uint 0
+%_ptr_Input_float = OpTypePointer Input %float
+%float_0_027777778 = OpConstant %float 0.027777778
+    %float_1 = OpConstant %float 1
+    %float_2 = OpConstant %float 2
+     %uint_1 = OpConstant %uint 1
+    %uint_36 = OpConstant %uint 36
+     %v4uint = OpTypeVector %uint 4
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+  %uint_1296 = OpConstant %uint 1296
+%_arr_v4uint_uint_1296 = OpTypeArray %v4uint %uint_1296
+     %block0 = OpTypeStruct %_arr_v4uint_uint_1296
+%_ptr_Uniform_block0 = OpTypePointer Uniform %block0
+          %_ = OpVariable %_ptr_Uniform_block0 Uniform
+      %int_0 = OpConstant %int 0
+%_ptr_Uniform_v4uint = OpTypePointer Uniform %v4uint
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+%frexp_x_out = OpVariable %_ptr_Output_v4float Output
+%frexp_exp_out = OpVariable %_ptr_Output_v4float Output
+%frexpStruct_x_out = OpVariable %_ptr_Output_v4float Output
+%frexpStruct_exp_out = OpVariable %_ptr_Output_v4float Output
+      %int_1 = OpConstant %int 1
+%_arr_float_uint_1 = OpTypeArray %float %uint_1
+%gl_PerVertex = OpTypeStruct %v4float %float %_arr_float_uint_1
+%_ptr_Output_gl_PerVertex = OpTypePointer Output %gl_PerVertex
+        %__0 = OpVariable %_ptr_Output_gl_PerVertex Output
+    %float_0 = OpConstant %float 0
+       %main = OpFunction %void None %3
+          %5 = OpLabel
+     %xcoord = OpVariable %_ptr_Function_uint Function
+     %ycoord = OpVariable %_ptr_Function_uint Function
+        %ndx = OpVariable %_ptr_Function_uint Function
+    %in_uint = OpVariable %_ptr_Function_v4uint Function
+   %in_float = OpVariable %_ptr_Function_v4float Function
+        %x_0 = OpVariable %_ptr_Function_v4float Function
+      %exp_0 = OpVariable %_ptr_Function_v4int Function
+      %res_0 = OpVariable %_ptr_Function_frexpStructType Function
+         %38 = OpAccessChain %_ptr_Input_float %position %uint_0
+         %39 = OpLoad %float %38
+         %41 = OpFAdd %float %39 %float_0_027777778
+         %43 = OpFAdd %float %41 %float_1
+         %45 = OpFDiv %float %43 %float_2
+         %46 = OpFMul %float %float_36 %45
+         %47 = OpFSub %float %46 %float_1
+         %48 = OpConvertFToU %uint %47
+               OpStore %xcoord %48
+         %51 = OpAccessChain %_ptr_Input_float %position %uint_1
+         %52 = OpLoad %float %51
+         %53 = OpFAdd %float %52 %float_0_027777778
+         %54 = OpFAdd %float %53 %float_1
+         %55 = OpFDiv %float %54 %float_2
+         %56 = OpFMul %float %float_36 %55
+         %57 = OpFSub %float %56 %float_1
+         %58 = OpConvertFToU %uint %57
+               OpStore %ycoord %58
+         %60 = OpLoad %uint %xcoord
+         %61 = OpLoad %uint %ycoord
+         %63 = OpIMul %uint %61 %uint_36
+         %64 = OpIAdd %uint %60 %63
+               OpStore %ndx %64
+         %74 = OpLoad %uint %ndx
+         %76 = OpAccessChain %_ptr_Uniform_v4uint %_ %int_0 %74
+         %77 = OpLoad %v4uint %76
+               OpStore %in_uint %77
+         %79 = OpLoad %v4uint %in_uint
+         %80 = OpBitcast %v4float %79
+               OpStore %in_float %80
+         %82 = OpLoad %v4float %in_float
+         %84 = OpExtInst %v4float %1 Frexp %82 %exp_0
+               OpStore %x_0 %84
+         %87 = OpLoad %v4float %in_float
+         %88 = OpExtInst %frexpStructType %1 FrexpStruct %87
+               OpStore %res_0 %88
+         %91 = OpLoad %v4float %x_0
+               OpStore %frexp_x_out %91
+         %93 = OpLoad %v4int %exp_0
+         %94 = OpBitcast %v4float %93
+               OpStore %frexp_exp_out %94
+         %96 = OpAccessChain %_ptr_Function_v4float %res_0 %int_0
+         %97 = OpLoad %v4float %96
+               OpStore %frexpStruct_x_out %97
+        %100 = OpAccessChain %_ptr_Function_v4int %res_0 %int_1
+        %101 = OpLoad %v4int %100
+        %102 = OpBitcast %v4float %101
+               OpStore %frexpStruct_exp_out %102
+        %107 = OpLoad %v2float %position
+        %109 = OpCompositeExtract %float %107 0
+        %110 = OpCompositeExtract %float %107 1
+        %111 = OpCompositeConstruct %v4float %109 %110 %float_0 %float_1
+        %112 = OpAccessChain %_ptr_Output_v4float %__0 %int_0
+               OpStore %112 %111
+               OpReturn
+               OpFunctionEnd
+END
+
+# SHADER fragment frag_shader GLSL
+# #version 430
+# precision highp float;
+#
+# layout (location = 0) flat in vec4 frexp_x_in;
+# layout (location = 1) flat in vec4 frexp_exp_in;
+# layout (location = 2) flat in vec4 frexpStruct_x_in;
+# layout (location = 3) flat in vec4 frexpStruct_exp_in;
+#
+# layout (location = 0) out vec4 frexp_x_out;
+# layout (location = 1) out vec4 frexp_exp_out;
+# layout (location = 2) out vec4 frexpStruct_x_out;
+# layout (location = 3) out vec4 frexpStruct_exp_out;
+#
+#
+# void main ()
+# {
+#     frexp_x_out.rgba = frexp_x_in;
+#     frexp_exp_out.rgba = frexp_exp_in;
+#     frexpStruct_x_out.rgba = frexpStruct_x_in;
+#     frexpStruct_exp_out.rgba = frexpStruct_exp_in;
+# }
+# END
+
+SHADER fragment frag_shader SPIRV-ASM
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %main "main" %frexp_x_out %frexp_x_in %frexp_exp_out %frexp_exp_in %frexpStruct_x_out %frexpStruct_x_in %frexpStruct_exp_out %frexpStruct_exp_in
+               OpExecutionMode %main OriginUpperLeft
+               OpDecorate %frexp_x_out Location 0
+               OpDecorate %frexp_x_in Flat
+               OpDecorate %frexp_x_in Location 0
+               OpDecorate %frexp_exp_out Location 1
+               OpDecorate %frexp_exp_in Flat
+               OpDecorate %frexp_exp_in Location 1
+               OpDecorate %frexpStruct_x_out Location 2
+               OpDecorate %frexpStruct_x_in Flat
+               OpDecorate %frexpStruct_x_in Location 2
+               OpDecorate %frexpStruct_exp_out Location 3
+               OpDecorate %frexpStruct_exp_in Flat
+               OpDecorate %frexpStruct_exp_in Location 3
+       %void = OpTypeVoid
+          %3 = OpTypeFunction %void
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+%frexp_x_out = OpVariable %_ptr_Output_v4float Output
+%_ptr_Input_v4float = OpTypePointer Input %v4float
+ %frexp_x_in = OpVariable %_ptr_Input_v4float Input
+%frexp_exp_out = OpVariable %_ptr_Output_v4float Output
+%frexp_exp_in = OpVariable %_ptr_Input_v4float Input
+%frexpStruct_x_out = OpVariable %_ptr_Output_v4float Output
+%frexpStruct_x_in = OpVariable %_ptr_Input_v4float Input
+%frexpStruct_exp_out = OpVariable %_ptr_Output_v4float Output
+%frexpStruct_exp_in = OpVariable %_ptr_Input_v4float Input
+       %main = OpFunction %void None %3
+          %5 = OpLabel
+         %12 = OpLoad %v4float %frexp_x_in
+               OpStore %frexp_x_out %12
+         %15 = OpLoad %v4float %frexp_exp_in
+               OpStore %frexp_exp_out %15
+         %18 = OpLoad %v4float %frexpStruct_x_in
+               OpStore %frexpStruct_x_out %18
+         %21 = OpLoad %v4float %frexpStruct_exp_in
+               OpStore %frexpStruct_exp_out %21
+               OpReturn
+               OpFunctionEnd
+END
+
+BUFFER buf_in DATA_TYPE uint32 SIZE 1296 FILE TEXT input.txt
+BUFFER vertices DATA_TYPE vec2<float> SIZE 7776 FILE TEXT grid_vertices.txt
+
+BUFFER frexp_x FORMAT R32G32B32A32_SFLOAT
+BUFFER frexp_exp FORMAT R32G32B32A32_SFLOAT
+BUFFER frexpStruct_x FORMAT R32G32B32A32_SFLOAT
+BUFFER frexpStruct_exp FORMAT R32G32B32A32_SFLOAT
+
+PIPELINE graphics test_pipeline
+    FRAMEBUFFER_SIZE 144 144
+
+    ATTACH vert_shader
+    ATTACH frag_shader
+
+    VERTEX_DATA vertices LOCATION 0
+
+    BIND BUFFER buf_in AS storage DESCRIPTOR_SET 0 BINDING 0
+    BIND BUFFER frexp_x AS color LOCATION 0
+    BIND BUFFER frexp_exp AS color LOCATION 1
+    BIND BUFFER frexpStruct_x AS color LOCATION 2
+    BIND BUFFER frexpStruct_exp AS color LOCATION 3
+END
+
+RUN test_pipeline DRAW_ARRAY AS TRIANGLE_LIST START_IDX 0 COUNT 7776
+
+EXPECT frexp_x EQ_BUFFER frexpStruct_x
+EXPECT frexp_exp EQ_BUFFER frexpStruct_exp
diff --git a/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/spirv1p4/entrypoint/comp_workgroup_entry_point.amber b/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/spirv1p4/entrypoint/comp_workgroup_entry_point.amber
index 0746244..1993946 100644
--- a/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/spirv1p4/entrypoint/comp_workgroup_entry_point.amber
+++ b/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/spirv1p4/entrypoint/comp_workgroup_entry_point.amber
@@ -17,6 +17,7 @@
 ;
 ; void main() {
 ;     atomicExchange(wg_data[gl_LocalInvocationIndex], gl_LocalInvocationIndex);
+;     barrier();
 ;     uint val = atomicExchange(wg_data[(gl_LocalInvocationIndex+1)%4], 0);
 ;     x[gl_LocalInvocationIndex] = val;
 ; }
@@ -62,6 +63,7 @@
 %_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
      %v3uint = OpTypeVector %uint 3
      %uint_2 = OpConstant %uint 2
+   %uint_264 = OpConstant %uint 264
 %gl_WorkGroupSize = OpConstantComposite %v3uint %uint_2 %uint_2 %uint_1
        %main = OpFunction %void None %3
           %5 = OpLabel
@@ -70,6 +72,7 @@
          %15 = OpAccessChain %_ptr_Workgroup_uint %wg_data %13
          %16 = OpLoad %uint %gl_LocalInvocationIndex
          %19 = OpAtomicExchange %uint %15 %uint_1 %uint_0 %16
+               OpControlBarrier %uint_2 %uint_2 %uint_264
          %22 = OpLoad %uint %gl_LocalInvocationIndex
          %23 = OpIAdd %uint %22 %uint_1
          %24 = OpUMod %uint %23 %uint_4
@@ -88,4 +91,4 @@
 compute entrypoint main
 compute 1 1 1
 
-probe ssbo int 0:1 0 == 1 2 3 0
\ No newline at end of file
+probe ssbo int 0:1 0 == 1 2 3 0
diff --git a/external/vulkancts/doc/vulkan-cts-withdrawal-2021-01.txt b/external/vulkancts/doc/vulkan-cts-withdrawal-2021-01.txt
new file mode 100644
index 0000000..f47d57d
--- /dev/null
+++ b/external/vulkancts/doc/vulkan-cts-withdrawal-2021-01.txt
@@ -0,0 +1,34 @@
+Dear Adopters,
+
+This announcement provides notification that the Khronos Group Inc. intends
+to withdraw Vulkan CTS 1.2.1.x releases.
+
+These releases are being discontinued due to improved quality and coverage
+provided by more recent releases. Once the releases are withdrawn it will not be
+possible to make conformance submissions against these releases.
+
+The Khronos Group recommends updating to Vulkan CTS 1.2.5.x and more recent releases
+as early as possible.
+
+This announcement covers the following tags as listed on
+https://github.com/KhronosGroup/VK-GL-CTS/tags:
+- vulkan-cts-1.2.1.0
+- vulkan-cts-1.2.1.1
+- vulkan-cts-1.2.1.2
+
+More information about Khronos Conformance and withdrawal policies can be found
+in the Khronos Group Conformance Process document
+(https://www.khronos.org/files/conformance_procedures.pdf) Attachment M.
+Please contact the Vulkan CTS TSG chair (alexander.galazin at arm.com) or
+the Vulkan Working Group chair (tom.olson at arm.com) if you have any questions.
+
+Below are some key dates to acknowledge:
+
+2021-01-17 Notice of intent to withdraw Vulkan CTS 1.2.1.x
+           distributed via email to adopters.
+
+2021-07-16 The affected releases are withdrawn.
+
+11 January 2021
+Alexander Galazin
+Vulkan CTS TSG Chair
diff --git a/external/vulkancts/framework/vulkan/CMakeLists.txt b/external/vulkancts/framework/vulkan/CMakeLists.txt
index 37dc216..575ccb2 100644
--- a/external/vulkancts/framework/vulkan/CMakeLists.txt
+++ b/external/vulkancts/framework/vulkan/CMakeLists.txt
@@ -125,6 +125,10 @@
 
 set(VKUTIL_LIBS ${VKUTIL_LIBS} SPIRV-Tools SPIRV-Tools-opt)
 
+if(DEQP_HAVE_RENDERDOC_HEADER)
+	add_definitions(-DDEQP_HAVE_RENDERDOC_HEADER=1)
+endif()
+
 PCH(VKUTILNOSHADER_SRCS ../../modules/vulkan/pch.cpp)
 PCH(VKUTIL_SRCS ../../modules/vulkan/pch.cpp)
 
diff --git a/external/vulkancts/framework/vulkan/vkBasicTypes.inl b/external/vulkancts/framework/vulkan/vkBasicTypes.inl
index 64fadd6..d8bfe97 100644
--- a/external/vulkancts/framework/vulkan/vkBasicTypes.inl
+++ b/external/vulkancts/framework/vulkan/vkBasicTypes.inl
@@ -2,28 +2,28 @@
  * be lost! Modify the generating script instead.
  * This file was generated by /scripts/gen_framework.py
  */
-#define VK_API_VERSION_1_0					(static_cast<deUint32>			(VK_MAKE_VERSION(1, 0, 0)))
-#define VK_API_VERSION_1_1					(static_cast<deUint32>			(VK_MAKE_VERSION(1, 1, 0)))
-#define VK_API_VERSION_1_2					(static_cast<deUint32>			(VK_MAKE_VERSION(1, 2, 0)))
-#define VK_MAX_PHYSICAL_DEVICE_NAME_SIZE	(static_cast<size_t>			(256))
-#define VK_MAX_EXTENSION_NAME_SIZE			(static_cast<size_t>			(256))
-#define VK_MAX_DRIVER_NAME_SIZE				(static_cast<size_t>			(256))
-#define VK_MAX_DRIVER_INFO_SIZE				(static_cast<size_t>			(256))
-#define VK_UUID_SIZE						(static_cast<size_t>			(16))
-#define VK_LUID_SIZE						(static_cast<size_t>			(8))
-#define VK_MAX_MEMORY_TYPES					(static_cast<size_t>			(32))
-#define VK_MAX_MEMORY_HEAPS					(static_cast<size_t>			(16))
-#define VK_MAX_DESCRIPTION_SIZE				(static_cast<size_t>			(256))
-#define VK_MAX_DEVICE_GROUP_SIZE			(static_cast<size_t>			(32))
+#define VK_API_VERSION_1_0					(static_cast<deUint32>			(VK_MAKE_API_VERSION(0, 1, 0, 0)))
+#define VK_API_VERSION_1_1					(static_cast<deUint32>			(VK_MAKE_API_VERSION(0, 1, 1, 0)))
+#define VK_API_VERSION_1_2					(static_cast<deUint32>			(VK_MAKE_API_VERSION(0, 1, 2, 0)))
+#define VK_MAX_PHYSICAL_DEVICE_NAME_SIZE	(static_cast<size_t>			(256U))
+#define VK_MAX_EXTENSION_NAME_SIZE			(static_cast<size_t>			(256U))
+#define VK_MAX_DRIVER_NAME_SIZE				(static_cast<size_t>			(256U))
+#define VK_MAX_DRIVER_INFO_SIZE				(static_cast<size_t>			(256U))
+#define VK_UUID_SIZE						(static_cast<size_t>			(16U))
+#define VK_LUID_SIZE						(static_cast<size_t>			(8U))
+#define VK_MAX_MEMORY_TYPES					(static_cast<size_t>			(32U))
+#define VK_MAX_MEMORY_HEAPS					(static_cast<size_t>			(16U))
+#define VK_MAX_DESCRIPTION_SIZE				(static_cast<size_t>			(256U))
+#define VK_MAX_DEVICE_GROUP_SIZE			(static_cast<size_t>			(32U))
 #define VK_ATTACHMENT_UNUSED				(static_cast<deUint32>			((~0U)))
 #define VK_SUBPASS_EXTERNAL					(static_cast<deUint32>			((~0U)))
 #define VK_QUEUE_FAMILY_IGNORED				(static_cast<deUint32>			((~0U)))
-#define VK_QUEUE_FAMILY_EXTERNAL			(static_cast<deUint32>			((~0U-1)))
+#define VK_QUEUE_FAMILY_EXTERNAL			(static_cast<deUint32>			((~1U)))
 #define VK_REMAINING_MIP_LEVELS				(static_cast<deUint32>			((~0U)))
 #define VK_REMAINING_ARRAY_LAYERS			(static_cast<deUint32>			((~0U)))
 #define VK_WHOLE_SIZE						(static_cast<vk::VkDeviceSize>	((~0ULL)))
-#define VK_TRUE								(static_cast<vk::VkBool32>		(1))
-#define VK_FALSE							(static_cast<vk::VkBool32>		(0))
+#define VK_TRUE								(static_cast<vk::VkBool32>		(1U))
+#define VK_FALSE							(static_cast<vk::VkBool32>		(0U))
 #define VK_API_MAX_FRAMEWORK_VERSION		VK_API_VERSION_1_2
 
 VK_DEFINE_NON_DISPATCHABLE_HANDLE	(VkBuffer,							HANDLE_TYPE_BUFFER);
@@ -66,6 +66,8 @@
 VK_DEFINE_NON_DISPATCHABLE_HANDLE	(VkIndirectCommandsLayoutNV,		HANDLE_TYPE_INDIRECT_COMMANDS_LAYOUT_NV);
 VK_DEFINE_NON_DISPATCHABLE_HANDLE	(VkPrivateDataSlotEXT,				HANDLE_TYPE_PRIVATE_DATA_SLOT_EXT);
 VK_DEFINE_NON_DISPATCHABLE_HANDLE	(VkAccelerationStructureKHR,		HANDLE_TYPE_ACCELERATION_STRUCTURE_KHR);
+VK_DEFINE_NON_DISPATCHABLE_HANDLE	(VkVideoSessionKHR,					HANDLE_TYPE_VIDEO_SESSION_KHR);
+VK_DEFINE_NON_DISPATCHABLE_HANDLE	(VkVideoSessionParametersKHR,		HANDLE_TYPE_VIDEO_SESSION_PARAMETERS_KHR);
 VK_DEFINE_NON_DISPATCHABLE_HANDLE	(VkSamplerYcbcrConversionKHR,		HANDLE_TYPE_SAMPLER_YCBCR_CONVERSION);
 VK_DEFINE_NON_DISPATCHABLE_HANDLE	(VkDescriptorUpdateTemplateKHR,		HANDLE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE);
 
@@ -305,6 +307,25 @@
 	VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_NAME_INFO_EXT									= 1000022000,
 	VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_TAG_INFO_EXT									= 1000022001,
 	VK_STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT										= 1000022002,
+	VK_STRUCTURE_TYPE_VIDEO_PROFILE_KHR													= 1000023000,
+	VK_STRUCTURE_TYPE_VIDEO_CAPABILITIES_KHR											= 1000023001,
+	VK_STRUCTURE_TYPE_VIDEO_PICTURE_RESOURCE_KHR										= 1000023002,
+	VK_STRUCTURE_TYPE_VIDEO_GET_MEMORY_PROPERTIES_KHR									= 1000023003,
+	VK_STRUCTURE_TYPE_VIDEO_BIND_MEMORY_KHR												= 1000023004,
+	VK_STRUCTURE_TYPE_VIDEO_SESSION_CREATE_INFO_KHR										= 1000023005,
+	VK_STRUCTURE_TYPE_VIDEO_SESSION_PARAMETERS_CREATE_INFO_KHR							= 1000023006,
+	VK_STRUCTURE_TYPE_VIDEO_SESSION_PARAMETERS_UPDATE_INFO_KHR							= 1000023007,
+	VK_STRUCTURE_TYPE_VIDEO_BEGIN_CODING_INFO_KHR										= 1000023008,
+	VK_STRUCTURE_TYPE_VIDEO_END_CODING_INFO_KHR											= 1000023009,
+	VK_STRUCTURE_TYPE_VIDEO_CODING_CONTROL_INFO_KHR										= 1000023010,
+	VK_STRUCTURE_TYPE_VIDEO_REFERENCE_SLOT_KHR											= 1000023011,
+	VK_STRUCTURE_TYPE_VIDEO_QUEUE_FAMILY_PROPERTIES_2_KHR								= 1000023012,
+	VK_STRUCTURE_TYPE_VIDEO_PROFILES_KHR												= 1000023013,
+	VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_FORMAT_INFO_KHR								= 1000023014,
+	VK_STRUCTURE_TYPE_VIDEO_FORMAT_PROPERTIES_KHR										= 1000023015,
+	VK_STRUCTURE_TYPE_VIDEO_DECODE_INFO_KHR												= 1000024000,
+	VK_STRUCTURE_TYPE_VIDEO_ENCODE_INFO_KHR												= 1000299000,
+	VK_STRUCTURE_TYPE_VIDEO_ENCODE_RATE_CONTROL_INFO_KHR								= 1000299001,
 	VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV							= 1000026000,
 	VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_BUFFER_CREATE_INFO_NV						= 1000026001,
 	VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV						= 1000026002,
@@ -313,6 +334,23 @@
 	VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_STREAM_CREATE_INFO_EXT				= 1000028002,
 	VK_STRUCTURE_TYPE_IMAGE_VIEW_HANDLE_INFO_NVX										= 1000030000,
 	VK_STRUCTURE_TYPE_IMAGE_VIEW_ADDRESS_PROPERTIES_NVX									= 1000030001,
+	VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_CAPABILITIES_EXT								= 1000038000,
+	VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_SESSION_CREATE_INFO_EXT							= 1000038001,
+	VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_SESSION_PARAMETERS_CREATE_INFO_EXT				= 1000038002,
+	VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_SESSION_PARAMETERS_ADD_INFO_EXT					= 1000038003,
+	VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_VCL_FRAME_INFO_EXT								= 1000038004,
+	VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_DPB_SLOT_INFO_EXT								= 1000038005,
+	VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_NALU_SLICE_EXT									= 1000038006,
+	VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_EMIT_PICTURE_PARAMETERS_EXT						= 1000038007,
+	VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_PROFILE_EXT										= 1000038008,
+	VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_CAPABILITIES_EXT								= 1000040000,
+	VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_SESSION_CREATE_INFO_EXT							= 1000040001,
+	VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_PICTURE_INFO_EXT								= 1000040002,
+	VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_MVC_EXT											= 1000040003,
+	VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_PROFILE_EXT										= 1000040004,
+	VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_SESSION_PARAMETERS_CREATE_INFO_EXT				= 1000040005,
+	VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_SESSION_PARAMETERS_ADD_INFO_EXT					= 1000040006,
+	VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_DPB_SLOT_INFO_EXT								= 1000040007,
 	VK_STRUCTURE_TYPE_TEXTURE_LOD_GATHER_FORMAT_PROPERTIES_AMD							= 1000041000,
 	VK_STRUCTURE_TYPE_STREAM_DESCRIPTOR_SURFACE_CREATE_INFO_GGP							= 1000049000,
 	VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CORNER_SAMPLED_IMAGE_FEATURES_NV					= 1000050000,
@@ -468,6 +506,13 @@
 	VK_STRUCTURE_TYPE_PIPELINE_COMPILER_CONTROL_CREATE_INFO_AMD							= 1000183000,
 	VK_STRUCTURE_TYPE_CALIBRATED_TIMESTAMP_INFO_EXT										= 1000184000,
 	VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_AMD						= 1000185000,
+	VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_CAPABILITIES_EXT								= 1000187000,
+	VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_SESSION_CREATE_INFO_EXT							= 1000187001,
+	VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_SESSION_PARAMETERS_CREATE_INFO_EXT				= 1000187002,
+	VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_SESSION_PARAMETERS_ADD_INFO_EXT					= 1000187003,
+	VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_PROFILE_EXT										= 1000187004,
+	VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_PICTURE_INFO_EXT								= 1000187005,
+	VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_DPB_SLOT_INFO_EXT								= 1000187006,
 	VK_STRUCTURE_TYPE_DEVICE_MEMORY_OVERALLOCATION_CREATE_INFO_AMD						= 1000189000,
 	VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT			= 1000190000,
 	VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_EXT				= 1000190001,
@@ -552,6 +597,10 @@
 	VK_STRUCTURE_TYPE_GENERATED_COMMANDS_INFO_NV										= 1000277005,
 	VK_STRUCTURE_TYPE_GENERATED_COMMANDS_MEMORY_REQUIREMENTS_INFO_NV					= 1000277006,
 	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,
@@ -585,6 +634,7 @@
 	VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_PROPERTIES_NV			= 1000326000,
 	VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_FEATURES_NV			= 1000326001,
 	VK_STRUCTURE_TYPE_PIPELINE_FRAGMENT_SHADING_RATE_ENUM_STATE_CREATE_INFO_NV			= 1000326002,
+	VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_2_PLANE_444_FORMATS_FEATURES_EXT			= 1000330000,
 	VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_FEATURES_EXT				= 1000332000,
 	VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_PROPERTIES_EXT				= 1000332001,
 	VK_STRUCTURE_TYPE_COPY_COMMAND_TRANSFORM_INFO_QCOM									= 1000333000,
@@ -605,6 +655,18 @@
 	VK_STRUCTURE_TYPE_DIRECTFB_SURFACE_CREATE_INFO_EXT									= 1000346000,
 	VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MUTABLE_DESCRIPTOR_TYPE_FEATURES_VALVE			= 1000351000,
 	VK_STRUCTURE_TYPE_MUTABLE_DESCRIPTOR_TYPE_CREATE_INFO_VALVE							= 1000351002,
+	VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_INPUT_DYNAMIC_STATE_FEATURES_EXT			= 1000352000,
+	VK_STRUCTURE_TYPE_VERTEX_INPUT_BINDING_DESCRIPTION_2_EXT							= 1000352001,
+	VK_STRUCTURE_TYPE_VERTEX_INPUT_ATTRIBUTE_DESCRIPTION_2_EXT							= 1000352002,
+	VK_STRUCTURE_TYPE_IMPORT_MEMORY_ZIRCON_HANDLE_INFO_FUCHSIA							= 1000364000,
+	VK_STRUCTURE_TYPE_MEMORY_ZIRCON_HANDLE_PROPERTIES_FUCHSIA							= 1000364001,
+	VK_STRUCTURE_TYPE_MEMORY_GET_ZIRCON_HANDLE_INFO_FUCHSIA								= 1000364002,
+	VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_ZIRCON_HANDLE_INFO_FUCHSIA						= 1000365000,
+	VK_STRUCTURE_TYPE_SEMAPHORE_GET_ZIRCON_HANDLE_INFO_FUCHSIA							= 1000365001,
+	VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_2_FEATURES_EXT				= 1000377000,
+	VK_STRUCTURE_TYPE_SCREEN_SURFACE_CREATE_INFO_QNX									= 1000378000,
+	VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COLOR_WRITE_ENABLE_FEATURES_EXT					= 1000381000,
+	VK_STRUCTURE_TYPE_PIPELINE_COLOR_WRITE_CREATE_INFO_EXT								= 1000381001,
 	VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES							= VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES,
 	VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETER_FEATURES					= VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES,
 	VK_STRUCTURE_TYPE_DEBUG_REPORT_CREATE_INFO_EXT										= VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT,
@@ -740,6 +802,12 @@
 	VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL						= 1000241002,
 	VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL						= 1000241003,
 	VK_IMAGE_LAYOUT_PRESENT_SRC_KHR									= 1000001002,
+	VK_IMAGE_LAYOUT_VIDEO_DECODE_DST_KHR							= 1000024000,
+	VK_IMAGE_LAYOUT_VIDEO_DECODE_SRC_KHR							= 1000024001,
+	VK_IMAGE_LAYOUT_VIDEO_DECODE_DPB_KHR							= 1000024002,
+	VK_IMAGE_LAYOUT_VIDEO_ENCODE_DST_KHR							= 1000299000,
+	VK_IMAGE_LAYOUT_VIDEO_ENCODE_SRC_KHR							= 1000299001,
+	VK_IMAGE_LAYOUT_VIDEO_ENCODE_DPB_KHR							= 1000299002,
 	VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR								= 1000111000,
 	VK_IMAGE_LAYOUT_SHADING_RATE_OPTIMAL_NV							= 1000164003,
 	VK_IMAGE_LAYOUT_FRAGMENT_DENSITY_MAP_OPTIMAL_EXT				= 1000218000,
@@ -790,6 +858,8 @@
 	VK_OBJECT_TYPE_DISPLAY_KHR						= 1000002000,
 	VK_OBJECT_TYPE_DISPLAY_MODE_KHR					= 1000002001,
 	VK_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT		= 1000011000,
+	VK_OBJECT_TYPE_VIDEO_SESSION_KHR				= 1000023000,
+	VK_OBJECT_TYPE_VIDEO_SESSION_PARAMETERS_KHR		= 1000023001,
 	VK_OBJECT_TYPE_DEBUG_UTILS_MESSENGER_EXT		= 1000128000,
 	VK_OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR		= 1000150000,
 	VK_OBJECT_TYPE_VALIDATION_CACHE_EXT				= 1000160000,
@@ -1081,6 +1151,10 @@
 	VK_FORMAT_ASTC_10x10_SFLOAT_BLOCK_EXT						= 1000066011,
 	VK_FORMAT_ASTC_12x10_SFLOAT_BLOCK_EXT						= 1000066012,
 	VK_FORMAT_ASTC_12x12_SFLOAT_BLOCK_EXT						= 1000066013,
+	VK_FORMAT_G8_B8R8_2PLANE_444_UNORM_EXT						= 1000330000,
+	VK_FORMAT_G10X6_B10X6R10X6_2PLANE_444_UNORM_3PACK16_EXT		= 1000330001,
+	VK_FORMAT_G12X4_B12X4R12X4_2PLANE_444_UNORM_3PACK16_EXT		= 1000330002,
+	VK_FORMAT_G16_B16R16_2PLANE_444_UNORM_EXT					= 1000330003,
 	VK_FORMAT_A4R4G4B4_UNORM_PACK16_EXT							= 1000340000,
 	VK_FORMAT_A4B4G4R4_UNORM_PACK16_EXT							= 1000340001,
 	VK_FORMAT_G8B8G8R8_422_UNORM_KHR							= VK_FORMAT_G8B8G8R8_422_UNORM,
@@ -1153,6 +1227,8 @@
 	VK_QUERY_TYPE_OCCLUSION										= 0,
 	VK_QUERY_TYPE_PIPELINE_STATISTICS							= 1,
 	VK_QUERY_TYPE_TIMESTAMP										= 2,
+	VK_QUERY_TYPE_RESULT_STATUS_ONLY_KHR						= 1000023000,
+	VK_QUERY_TYPE_VIDEO_ENCODE_BITSTREAM_BUFFER_RANGE_KHR		= 1000299000,
 	VK_QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT					= 1000028004,
 	VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR							= 1000116000,
 	VK_QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR		= 1000150000,
@@ -1323,6 +1399,13 @@
 	VK_DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE_EXT			= 1000267009,
 	VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE_EXT				= 1000267010,
 	VK_DYNAMIC_STATE_STENCIL_OP_EXT							= 1000267011,
+	VK_DYNAMIC_STATE_VERTEX_INPUT_EXT						= 1000352000,
+	VK_DYNAMIC_STATE_PATCH_CONTROL_POINTS_EXT				= 1000377000,
+	VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE_EXT			= 1000377001,
+	VK_DYNAMIC_STATE_DEPTH_BIAS_ENABLE_EXT					= 1000377002,
+	VK_DYNAMIC_STATE_LOGIC_OP_EXT							= 1000377003,
+	VK_DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE_EXT			= 1000377004,
+	VK_DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXT					= 1000381000,
 	VK_DYNAMIC_STATE_MAX_ENUM								= 0x7FFFFFFF,
 };
 
@@ -1599,6 +1682,8 @@
 	VK_DRIVER_ID_BROADCOM_PROPRIETARY			= 12,
 	VK_DRIVER_ID_MESA_LLVMPIPE					= 13,
 	VK_DRIVER_ID_MOLTENVK						= 14,
+	VK_DRIVER_ID_COREAVI_PROPRIETARY			= 15,
+	VK_DRIVER_ID_SAMSUNG_PROPRIETARY			= 21,
 	VK_DRIVER_ID_AMD_PROPRIETARY_KHR			= VK_DRIVER_ID_AMD_PROPRIETARY,
 	VK_DRIVER_ID_AMD_OPEN_SOURCE_KHR			= VK_DRIVER_ID_AMD_OPEN_SOURCE,
 	VK_DRIVER_ID_MESA_RADV_KHR					= VK_DRIVER_ID_MESA_RADV,
@@ -2198,6 +2283,208 @@
 	VK_SHADER_GROUP_SHADER_MAX_ENUM_KHR		= 0x7FFFFFFF,
 };
 
+enum VkQueryResultStatusKHR
+{
+	VK_QUERY_RESULT_STATUS_ERROR_KHR		= -1,
+	VK_QUERY_RESULT_STATUS_NOT_READY_KHR	= 0,
+	VK_QUERY_RESULT_STATUS_COMPLETE_KHR		= 1,
+	VK_QUERY_RESULT_STATUS_MAX_ENUM_KHR		= 0x7FFFFFFF,
+};
+
+enum StdVideoH264ChromaFormatIdc
+{
+	std_video_h264_chroma_format_idc_monochrome	= 0,
+	std_video_h264_chroma_format_idc_420		= 1,
+	std_video_h264_chroma_format_idc_422		= 2,
+	std_video_h264_chroma_format_idc_444		= 3,
+	STD_VIDEO_H264_CHROMA_FORMAT_IDC_LAST,
+};
+
+enum StdVideoH264ProfileIdc
+{
+	std_video_h264_profile_idc_baseline				= 66,
+	std_video_h264_profile_idc_main					= 77,
+	std_video_h264_profile_idc_high					= 100,
+	std_video_h264_profile_idc_high_444_predictive	= 244,
+	std_video_h264_profile_idc_invalid				= 0x7FFFFFFF,
+};
+
+enum StdVideoH264Level
+{
+	std_video_h264_level_1_0		= 0,
+	std_video_h264_level_1_1		= 1,
+	std_video_h264_level_1_2		= 2,
+	std_video_h264_level_1_3		= 3,
+	std_video_h264_level_2_0		= 4,
+	std_video_h264_level_2_1		= 5,
+	std_video_h264_level_2_2		= 6,
+	std_video_h264_level_3_0		= 7,
+	std_video_h264_level_3_1		= 8,
+	std_video_h264_level_3_2		= 9,
+	std_video_h264_level_4_0		= 10,
+	std_video_h264_level_4_1		= 11,
+	std_video_h264_level_4_2		= 12,
+	std_video_h264_level_5_0		= 13,
+	std_video_h264_level_5_1		= 14,
+	std_video_h264_level_5_2		= 15,
+	std_video_h264_level_6_0		= 16,
+	std_video_h264_level_6_1		= 17,
+	std_video_h264_level_6_2		= 18,
+	STD_VIDEO_H264_LEVEL_LAST,
+	std_video_h264_level_invalid	= 0x7FFFFFFF,
+};
+
+enum StdVideoH264PocType
+{
+	std_video_h264_poc_type_0		= 0,
+	std_video_h264_poc_type_1		= 1,
+	std_video_h264_poc_type_2		= 2,
+	STD_VIDEO_H264_POC_TYPE_LAST,
+	std_video_h264_poc_type_invalid	= 0x7FFFFFFF,
+};
+
+enum StdVideoH264AspectRatioIdc
+{
+	std_video_h264_aspect_ratio_idc_unspecified		= 0,
+	std_video_h264_aspect_ratio_idc_square			= 1,
+	std_video_h264_aspect_ratio_idc_12_11			= 2,
+	std_video_h264_aspect_ratio_idc_10_11			= 3,
+	std_video_h264_aspect_ratio_idc_16_11			= 4,
+	std_video_h264_aspect_ratio_idc_40_33			= 5,
+	std_video_h264_aspect_ratio_idc_24_11			= 6,
+	std_video_h264_aspect_ratio_idc_20_11			= 7,
+	std_video_h264_aspect_ratio_idc_32_11			= 8,
+	std_video_h264_aspect_ratio_idc_80_33			= 9,
+	std_video_h264_aspect_ratio_idc_18_11			= 10,
+	std_video_h264_aspect_ratio_idc_15_11			= 11,
+	std_video_h264_aspect_ratio_idc_64_33			= 12,
+	std_video_h264_aspect_ratio_idc_160_99			= 13,
+	std_video_h264_aspect_ratio_idc_4_3				= 14,
+	std_video_h264_aspect_ratio_idc_3_2				= 15,
+	std_video_h264_aspect_ratio_idc_2_1				= 16,
+	std_video_h264_aspect_ratio_idc_extended_sar	= 255,
+	std_video_h264_aspect_ratio_idc_invalid			= 0x7FFFFFFF,
+};
+
+enum StdVideoH264WeightedBiPredIdc
+{
+	std_video_h264_default_weighted_b_slices_prediction_idc		= 0,
+	std_video_h264_explicit_weighted_b_slices_prediction_idc	= 1,
+	std_video_h264_implicit_weighted_b_slices_prediction_idc	= 2,
+	STD_VIDEO_H264_WEIGHTED_BI_PRED_IDC_LAST,
+	std_video_h264_invalid_weighted_b_slices_prediction_idc		= 0x7FFFFFFF,
+};
+
+enum StdVideoH264ModificationOfPicNumsIdc
+{
+	std_video_h264_modification_of_pic_nums_idc_short_term_subtract	= 0,
+	std_video_h264_modification_of_pic_nums_idc_short_term_add		= 1,
+	std_video_h264_modification_of_pic_nums_idc_long_term			= 2,
+	std_video_h264_modification_of_pic_nums_idc_end					= 3,
+	STD_VIDEO_H264_MODIFICATION_OF_PIC_NUMS_IDC_LAST,
+	std_video_h264_modification_of_pic_nums_idc_invalid				= 0x7FFFFFFF,
+};
+
+enum StdVideoH264MemMgmtControlOp
+{
+	std_video_h264_mem_mgmt_control_op_end							= 0,
+	std_video_h264_mem_mgmt_control_op_unmark_short_term			= 1,
+	std_video_h264_mem_mgmt_control_op_unmark_long_term				= 2,
+	std_video_h264_mem_mgmt_control_op_mark_long_term				= 3,
+	std_video_h264_mem_mgmt_control_op_set_max_long_term_index		= 4,
+	std_video_h264_mem_mgmt_control_op_unmark_all					= 5,
+	std_video_h264_mem_mgmt_control_op_mark_current_as_long_term	= 6,
+	STD_VIDEO_H264_MEM_MGMT_CONTROL_OP_LAST,
+	std_video_h264_mem_mgmt_control_op_invalid						= 0x7FFFFFFF,
+};
+
+enum StdVideoH264CabacInitIdc
+{
+	std_video_h264_cabac_init_idc_0			= 0,
+	std_video_h264_cabac_init_idc_1			= 1,
+	std_video_h264_cabac_init_idc_2			= 2,
+	STD_VIDEO_H264_CABAC_INIT_IDC_LAST,
+	std_video_h264_cabac_init_idc_invalid	= 0x7FFFFFFF,
+};
+
+enum StdVideoH264DisableDeblockingFilterIdc
+{
+	std_video_h264_disable_deblocking_filter_idc_disabled	= 0,
+	std_video_h264_disable_deblocking_filter_idc_enabled	= 1,
+	std_video_h264_disable_deblocking_filter_idc_partial	= 2,
+	STD_VIDEO_H264_DISABLE_DEBLOCKING_FILTER_IDC_LAST,
+	std_video_h264_disable_deblocking_filter_idc_invalid	= 0x7FFFFFFF,
+};
+
+enum StdVideoH264PictureType
+{
+	std_video_h264_picture_type_i		= 0,
+	std_video_h264_picture_type_p		= 1,
+	std_video_h264_picture_type_b		= 2,
+	STD_VIDEO_H264_PICTURE_TYPE_LAST,
+	std_video_h264_picture_type_invalid	= 0x7FFFFFFF,
+};
+
+enum StdVideoH264SliceType
+{
+	std_video_h264_slice_type_i			= 0,
+	std_video_h264_slice_type_p			= 1,
+	std_video_h264_slice_type_b			= 2,
+	STD_VIDEO_H264_SLICE_TYPE_LAST,
+	std_video_h264_slice_type_invalid	= 0x7FFFFFFF,
+};
+
+enum StdVideoH264NonVclNaluType
+{
+	std_video_h264_non_vcl_nalu_type_sps				= 0,
+	std_video_h264_non_vcl_nalu_type_pps				= 1,
+	std_video_h264_non_vcl_nalu_type_aud				= 2,
+	std_video_h264_non_vcl_nalu_type_prefix				= 3,
+	std_video_h264_non_vcl_nalu_type_end_of_sequence	= 4,
+	std_video_h264_non_vcl_nalu_type_end_of_stream		= 5,
+	std_video_h264_non_vcl_nalu_type_precoded			= 6,
+	STD_VIDEO_H264_NON_VCL_NALU_TYPE_LAST,
+	std_video_h264_non_vcl_nalu_type_invalid			= 0x7FFFFFFF,
+};
+
+enum StdVideoH265ChromaFormatIdc
+{
+	std_video_h265_chroma_format_idc_monochrome	= 0,
+	std_video_h265_chroma_format_idc_420		= 1,
+	std_video_h265_chroma_format_idc_422		= 2,
+	std_video_h265_chroma_format_idc_444		= 3,
+	STD_VIDEO_H265_CHROMA_FORMAT_IDC_LAST,
+};
+
+enum StdVideoH265ProfileIdc
+{
+	std_video_h265_profile_idc_main						= 1,
+	std_video_h265_profile_idc_main_10					= 2,
+	std_video_h265_profile_idc_main_still_picture		= 3,
+	std_video_h265_profile_idc_format_range_extensions	= 4,
+	std_video_h265_profile_idc_scc_extensions			= 9,
+	std_video_h265_profile_idc_invalid					= 0x7FFFFFFF,
+};
+
+enum StdVideoH265Level
+{
+	std_video_h265_level_1_0		= 0,
+	std_video_h265_level_2_0		= 1,
+	std_video_h265_level_2_1		= 2,
+	std_video_h265_level_3_0		= 3,
+	std_video_h265_level_3_1		= 4,
+	std_video_h265_level_4_0		= 5,
+	std_video_h265_level_4_1		= 6,
+	std_video_h265_level_5_0		= 7,
+	std_video_h265_level_5_1		= 8,
+	std_video_h265_level_5_2		= 9,
+	std_video_h265_level_6_0		= 10,
+	std_video_h265_level_6_1		= 11,
+	std_video_h265_level_6_2		= 12,
+	STD_VIDEO_H265_LEVEL_LAST,
+	std_video_h265_level_invalid	= 0x7FFFFFFF,
+};
+
 enum VkFullScreenExclusiveEXT
 {
 	VK_FULL_SCREEN_EXCLUSIVE_DEFAULT_EXT				= 0,
@@ -2320,6 +2607,10 @@
 	VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT														= 0x00800000,
 	VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT													= 0x00010000,
 	VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG												= 0x00002000,
+	VK_FORMAT_FEATURE_VIDEO_DECODE_OUTPUT_BIT_KHR														= 0x02000000,
+	VK_FORMAT_FEATURE_VIDEO_DECODE_DPB_BIT_KHR															= 0x04000000,
+	VK_FORMAT_FEATURE_VIDEO_ENCODE_INPUT_BIT_KHR														= 0x08000000,
+	VK_FORMAT_FEATURE_VIDEO_ENCODE_DPB_BIT_KHR															= 0x10000000,
 	VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR										= 0x20000000,
 	VK_FORMAT_FEATURE_FRAGMENT_DENSITY_MAP_BIT_EXT														= 0x01000000,
 	VK_FORMAT_FEATURE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR											= 0x40000000,
@@ -2388,6 +2679,12 @@
 	VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT				= 0x00000020,
 	VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT					= 0x00000040,
 	VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT						= 0x00000080,
+	VK_IMAGE_USAGE_VIDEO_DECODE_DST_BIT_KHR					= 0x00000400,
+	VK_IMAGE_USAGE_VIDEO_DECODE_SRC_BIT_KHR					= 0x00000800,
+	VK_IMAGE_USAGE_VIDEO_DECODE_DPB_BIT_KHR					= 0x00001000,
+	VK_IMAGE_USAGE_VIDEO_ENCODE_DST_BIT_KHR					= 0x00002000,
+	VK_IMAGE_USAGE_VIDEO_ENCODE_SRC_BIT_KHR					= 0x00004000,
+	VK_IMAGE_USAGE_VIDEO_ENCODE_DPB_BIT_KHR					= 0x00008000,
 	VK_IMAGE_USAGE_SHADING_RATE_IMAGE_BIT_NV				= 0x00000100,
 	VK_IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT				= 0x00000200,
 	VK_IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR	= VK_IMAGE_USAGE_SHADING_RATE_IMAGE_BIT_NV,
@@ -2420,12 +2717,14 @@
 
 enum VkQueueFlagBits
 {
-	VK_QUEUE_GRAPHICS_BIT		= 0x00000001,
-	VK_QUEUE_COMPUTE_BIT		= 0x00000002,
-	VK_QUEUE_TRANSFER_BIT		= 0x00000004,
-	VK_QUEUE_SPARSE_BINDING_BIT	= 0x00000008,
-	VK_QUEUE_PROTECTED_BIT		= 0x00000010,
-	VK_QUEUE_FLAG_BITS_MAX_ENUM	= 0x7FFFFFFF,
+	VK_QUEUE_GRAPHICS_BIT			= 0x00000001,
+	VK_QUEUE_COMPUTE_BIT			= 0x00000002,
+	VK_QUEUE_TRANSFER_BIT			= 0x00000004,
+	VK_QUEUE_SPARSE_BINDING_BIT		= 0x00000008,
+	VK_QUEUE_PROTECTED_BIT			= 0x00000010,
+	VK_QUEUE_VIDEO_DECODE_BIT_KHR	= 0x00000020,
+	VK_QUEUE_VIDEO_ENCODE_BIT_KHR	= 0x00000040,
+	VK_QUEUE_FLAG_BITS_MAX_ENUM		= 0x7FFFFFFF,
 };
 typedef deUint32 VkQueueFlags;
 
@@ -2525,6 +2824,7 @@
 	VK_QUERY_RESULT_WAIT_BIT				= 0x00000002,
 	VK_QUERY_RESULT_WITH_AVAILABILITY_BIT	= 0x00000004,
 	VK_QUERY_RESULT_PARTIAL_BIT				= 0x00000008,
+	VK_QUERY_RESULT_WITH_STATUS_BIT_KHR		= 0x00000010,
 	VK_QUERY_RESULT_FLAG_BITS_MAX_ENUM		= 0x7FFFFFFF,
 };
 typedef deUint32 VkQueryResultFlags;
@@ -2554,6 +2854,10 @@
 	VK_BUFFER_USAGE_VERTEX_BUFFER_BIT										= 0x00000080,
 	VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT										= 0x00000100,
 	VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT								= 0x00020000,
+	VK_BUFFER_USAGE_VIDEO_DECODE_SRC_BIT_KHR								= 0x00002000,
+	VK_BUFFER_USAGE_VIDEO_DECODE_DST_BIT_KHR								= 0x00004000,
+	VK_BUFFER_USAGE_VIDEO_ENCODE_DST_BIT_KHR								= 0x00008000,
+	VK_BUFFER_USAGE_VIDEO_ENCODE_SRC_BIT_KHR								= 0x00010000,
 	VK_BUFFER_USAGE_TRANSFORM_FEEDBACK_BUFFER_BIT_EXT						= 0x00000800,
 	VK_BUFFER_USAGE_TRANSFORM_FEEDBACK_COUNTER_BUFFER_BIT_EXT				= 0x00001000,
 	VK_BUFFER_USAGE_CONDITIONAL_RENDERING_BIT_EXT							= 0x00000200,
@@ -2846,6 +3150,7 @@
 	VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID	= 0x00000400,
 	VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT				= 0x00000080,
 	VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT	= 0x00000100,
+	VK_EXTERNAL_MEMORY_HANDLE_TYPE_ZIRCON_VMO_BIT_FUCHSIA				= 0x00000800,
 	VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT_KHR					= VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT,
 	VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR					= VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT,
 	VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_KHR				= VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT,
@@ -2916,6 +3221,7 @@
 	VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT		= 0x00000004,
 	VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT			= 0x00000008,
 	VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT				= 0x00000010,
+	VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_ZIRCON_EVENT_BIT_FUCHSIA	= 0x00000080,
 	VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D11_FENCE_BIT			= VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT,
 	VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT_KHR			= VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT,
 	VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR		= VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT,
@@ -3227,6 +3533,156 @@
 };
 typedef deUint32 VkAccelerationStructureCreateFlagsKHR;
 
+enum VkVideoCodecOperationFlagBitsKHR
+{
+	VK_VIDEO_CODEC_OPERATION_INVALID_BIT_KHR		= 0,
+	VK_VIDEO_CODEC_OPERATION_ENCODE_H264_BIT_EXT	= 0x00010000,
+	VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_EXT	= 0x00000001,
+	VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_EXT	= 0x00000002,
+	VK_VIDEO_CODEC_OPERATION_FLAG_BITS_MAX_ENUM_KHR	= 0x7FFFFFFF,
+};
+typedef deUint32 VkVideoCodecOperationFlagsKHR;
+
+enum VkVideoChromaSubsamplingFlagBitsKHR
+{
+	VK_VIDEO_CHROMA_SUBSAMPLING_INVALID_BIT_KHR			= 0,
+	VK_VIDEO_CHROMA_SUBSAMPLING_MONOCHROME_BIT_KHR		= 0x00000001,
+	VK_VIDEO_CHROMA_SUBSAMPLING_420_BIT_KHR				= 0x00000002,
+	VK_VIDEO_CHROMA_SUBSAMPLING_422_BIT_KHR				= 0x00000004,
+	VK_VIDEO_CHROMA_SUBSAMPLING_444_BIT_KHR				= 0x00000008,
+	VK_VIDEO_CHROMA_SUBSAMPLING_FLAG_BITS_MAX_ENUM_KHR	= 0x7FFFFFFF,
+};
+typedef deUint32 VkVideoChromaSubsamplingFlagsKHR;
+
+enum VkVideoComponentBitDepthFlagBitsKHR
+{
+	VK_VIDEO_COMPONENT_BIT_DEPTH_INVALID_KHR			= 0,
+	VK_VIDEO_COMPONENT_BIT_DEPTH_8_BIT_KHR				= 0x00000001,
+	VK_VIDEO_COMPONENT_BIT_DEPTH_10_BIT_KHR				= 0x00000004,
+	VK_VIDEO_COMPONENT_BIT_DEPTH_12_BIT_KHR				= 0x00000010,
+	VK_VIDEO_COMPONENT_BIT_DEPTH_FLAG_BITS_MAX_ENUM_KHR	= 0x7FFFFFFF,
+};
+typedef deUint32 VkVideoComponentBitDepthFlagsKHR;
+
+enum VkVideoCapabilitiesFlagBitsKHR
+{
+	VK_VIDEO_CAPABILITIES_PROTECTED_CONTENT_BIT_KHR			= 0x00000001,
+	VK_VIDEO_CAPABILITIES_SEPARATE_REFERENCE_IMAGES_BIT_KHR	= 0x00000002,
+	VK_VIDEO_CAPABILITIES_FLAG_BITS_MAX_ENUM_KHR			= 0x7FFFFFFF,
+};
+typedef deUint32 VkVideoCapabilitiesFlagsKHR;
+
+enum VkVideoSessionCreateFlagBitsKHR
+{
+	VK_VIDEO_SESSION_CREATE_DEFAULT_KHR					= 0,
+	VK_VIDEO_SESSION_CREATE_PROTECTED_CONTENT_BIT_KHR	= 0x00000001,
+	VK_VIDEO_SESSION_CREATE_FLAG_BITS_MAX_ENUM_KHR		= 0x7FFFFFFF,
+};
+typedef deUint32 VkVideoSessionCreateFlagsKHR;
+
+enum VkVideoCodingControlFlagBitsKHR
+{
+	VK_VIDEO_CODING_CONTROL_DEFAULT_KHR				= 0,
+	VK_VIDEO_CODING_CONTROL_RESET_BIT_KHR			= 0x00000001,
+	VK_VIDEO_CODING_CONTROL_FLAG_BITS_MAX_ENUM_KHR	= 0x7FFFFFFF,
+};
+typedef deUint32 VkVideoCodingControlFlagsKHR;
+
+enum VkVideoCodingQualityPresetFlagBitsKHR
+{
+	VK_VIDEO_CODING_QUALITY_PRESET_DEFAULT_BIT_KHR			= 0,
+	VK_VIDEO_CODING_QUALITY_PRESET_NORMAL_BIT_KHR			= 0x00000001,
+	VK_VIDEO_CODING_QUALITY_PRESET_POWER_BIT_KHR			= 0x00000002,
+	VK_VIDEO_CODING_QUALITY_PRESET_QUALITY_BIT_KHR			= 0x00000004,
+	VK_VIDEO_CODING_QUALITY_PRESET_FLAG_BITS_MAX_ENUM_KHR	= 0x7FFFFFFF,
+};
+typedef deUint32 VkVideoCodingQualityPresetFlagsKHR;
+
+enum VkVideoDecodeFlagBitsKHR
+{
+	VK_VIDEO_DECODE_DEFAULT_KHR				= 0,
+	VK_VIDEO_DECODE_RESERVED_0_BIT_KHR		= 0x00000001,
+	VK_VIDEO_DECODE_FLAG_BITS_MAX_ENUM_KHR	= 0x7FFFFFFF,
+};
+typedef deUint32 VkVideoDecodeFlagsKHR;
+
+enum VkVideoEncodeFlagBitsKHR
+{
+	VK_VIDEO_ENCODE_DEFAULT_KHR				= 0,
+	VK_VIDEO_ENCODE_RESERVED_0_BIT_KHR		= 0x00000001,
+	VK_VIDEO_ENCODE_FLAG_BITS_MAX_ENUM_KHR	= 0x7FFFFFFF,
+};
+typedef deUint32 VkVideoEncodeFlagsKHR;
+
+enum VkVideoEncodeRateControlFlagBitsKHR
+{
+	VK_VIDEO_ENCODE_RATE_CONTROL_DEFAULT_KHR			= 0,
+	VK_VIDEO_ENCODE_RATE_CONTROL_RESET_BIT_KHR			= 0x00000001,
+	VK_VIDEO_ENCODE_RATE_CONTROL_FLAG_BITS_MAX_ENUM_KHR	= 0x7FFFFFFF,
+};
+typedef deUint32 VkVideoEncodeRateControlFlagsKHR;
+
+enum VkVideoEncodeRateControlModeFlagBitsKHR
+{
+	VK_VIDEO_ENCODE_RATE_CONTROL_MODE_NONE_BIT_KHR				= 0,
+	VK_VIDEO_ENCODE_RATE_CONTROL_MODE_CBR_BIT_KHR				= 1,
+	VK_VIDEO_ENCODE_RATE_CONTROL_MODE_VBR_BIT_KHR				= 2,
+	VK_VIDEO_ENCODE_RATE_CONTROL_MODE_FLAG_BITS_MAX_ENUM_KHR	= 0x7FFFFFFF,
+};
+typedef deUint32 VkVideoEncodeRateControlModeFlagsKHR;
+
+enum VkVideoEncodeH264CapabilitiesFlagBitsEXT
+{
+	VK_VIDEO_ENCODE_H264_CAPABILITY_CABAC_BIT_EXT							= 0x00000001,
+	VK_VIDEO_ENCODE_H264_CAPABILITY_CAVLC_BIT_EXT							= 0x00000002,
+	VK_VIDEO_ENCODE_H264_CAPABILITY_WEIGHTED_BI_PRED_IMPLICIT_BIT_EXT		= 0x00000004,
+	VK_VIDEO_ENCODE_H264_CAPABILITY_TRANSFORM_8X8_BIT_EXT					= 0x00000008,
+	VK_VIDEO_ENCODE_H264_CAPABILITY_CHROMA_QP_OFFSET_BIT_EXT				= 0x00000010,
+	VK_VIDEO_ENCODE_H264_CAPABILITY_SECOND_CHROMA_QP_OFFSET_BIT_EXT			= 0x00000020,
+	VK_VIDEO_ENCODE_H264_CAPABILITY_DEBLOCKING_FILTER_DISABLED_BIT_EXT		= 0x00000040,
+	VK_VIDEO_ENCODE_H264_CAPABILITY_DEBLOCKING_FILTER_ENABLED_BIT_EXT		= 0x00000080,
+	VK_VIDEO_ENCODE_H264_CAPABILITY_DEBLOCKING_FILTER_PARTIAL_BIT_EXT		= 0x00000100,
+	VK_VIDEO_ENCODE_H264_CAPABILITY_MULTIPLE_SLICE_PER_FRAME_BIT_EXT		= 0x00000200,
+	VK_VIDEO_ENCODE_H264_CAPABILITY_EVENLY_DISTRIBUTED_SLICE_SIZE_BIT_EXT	= 0x00000400,
+	VK_VIDEO_ENCODE_H264_CAPABILITIES_FLAG_BITS_MAX_ENUM_EXT				= 0x7FFFFFFF,
+};
+typedef deUint32 VkVideoEncodeH264CapabilitiesFlagsEXT;
+
+enum VkVideoEncodeH264InputModeFlagBitsEXT
+{
+	VK_VIDEO_ENCODE_H264_INPUT_MODE_FRAME_BIT_EXT			= 0x00000001,
+	VK_VIDEO_ENCODE_H264_INPUT_MODE_SLICE_BIT_EXT			= 0x00000002,
+	VK_VIDEO_ENCODE_H264_INPUT_MODE_NON_VCL_BIT_EXT			= 0x00000004,
+	VK_VIDEO_ENCODE_H264_INPUT_MODE_FLAG_BITS_MAX_ENUM_EXT	= 0x7FFFFFFF,
+};
+typedef deUint32 VkVideoEncodeH264InputModeFlagsEXT;
+
+enum VkVideoEncodeH264OutputModeFlagBitsEXT
+{
+	VK_VIDEO_ENCODE_H264_OUTPUT_MODE_FRAME_BIT_EXT			= 0x00000001,
+	VK_VIDEO_ENCODE_H264_OUTPUT_MODE_SLICE_BIT_EXT			= 0x00000002,
+	VK_VIDEO_ENCODE_H264_OUTPUT_MODE_NON_VCL_BIT_EXT		= 0x00000004,
+	VK_VIDEO_ENCODE_H264_OUTPUT_MODE_FLAG_BITS_MAX_ENUM_EXT	= 0x7FFFFFFF,
+};
+typedef deUint32 VkVideoEncodeH264OutputModeFlagsEXT;
+
+enum VkVideoEncodeH264CreateFlagBitsEXT
+{
+	VK_VIDEO_ENCODE_H264_CREATE_DEFAULT_EXT				= 0,
+	VK_VIDEO_ENCODE_H264_CREATE_RESERVED_0_BIT_EXT		= 0x00000001,
+	VK_VIDEO_ENCODE_H264_CREATE_FLAG_BITS_MAX_ENUM_EXT	= 0x7FFFFFFF,
+};
+typedef deUint32 VkVideoEncodeH264CreateFlagsEXT;
+
+enum VkVideoDecodeH264FieldLayoutFlagBitsEXT
+{
+	VK_VIDEO_DECODE_H264_PROGRESSIVE_PICTURES_ONLY_EXT					= 0,
+	VK_VIDEO_DECODE_H264_FIELD_LAYOUT_LINE_INTERLACED_PLANE_BIT_EXT		= 0x00000001,
+	VK_VIDEO_DECODE_H264_FIELD_LAYOUT_SEPARATE_INTERLACED_PLANE_BIT_EXT	= 0x00000002,
+	VK_VIDEO_DECODE_H264_FIELD_LAYOUT_FLAG_BITS_MAX_ENUM_EXT			= 0x7FFFFFFF,
+};
+typedef deUint32 VkVideoDecodeH264FieldLayoutFlagsEXT;
+
 typedef deUint32 VkInstanceCreateFlags;
 
 typedef deUint32 VkDeviceCreateFlags;
@@ -3297,6 +3753,14 @@
 
 typedef deUint32 VkAndroidSurfaceCreateFlagsKHR;
 
+typedef deUint32 VkVideoBeginCodingFlagsKHR;
+
+typedef deUint32 VkVideoEndCodingFlagsKHR;
+
+typedef deUint32 VkVideoDecodeH264CreateFlagsEXT;
+
+typedef deUint32 VkVideoDecodeH265CreateFlagsEXT;
+
 typedef deUint32 VkImagePipeSurfaceCreateFlagsFUCHSIA;
 
 typedef deUint32 VkStreamDescriptorSurfaceCreateFlagsGGP;
@@ -3354,81 +3818,91 @@
 typedef VkDescriptorUpdateTemplateCreateFlags VkDescriptorUpdateTemplateCreateFlagsKHR;
 
 typedef deUint64 VkPipelineStageFlags2KHR;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_NONE_KHR									= 0;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_TOP_OF_PIPE_BIT_KHR						= 0x00000001;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_DRAW_INDIRECT_BIT_KHR						= 0x00000002;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_VERTEX_INPUT_BIT_KHR						= 0x00000004;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_VERTEX_SHADER_BIT_KHR						= 0x00000008;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_TESSELLATION_CONTROL_SHADER_BIT_KHR		= 0x00000010;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_TESSELLATION_EVALUATION_SHADER_BIT_KHR	= 0x00000020;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_GEOMETRY_SHADER_BIT_KHR					= 0x00000040;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT_KHR					= 0x00000080;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT_KHR				= 0x00000100;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT_KHR				= 0x00000200;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT_KHR			= 0x00000400;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT_KHR					= 0x00000800;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_ALL_TRANSFER_BIT_KHR						= 0x00001000;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_TRANSFER_BIT_KHR							= 0x00001000;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_BOTTOM_OF_PIPE_BIT_KHR					= 0x00002000;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_HOST_BIT_KHR								= 0x00004000;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR						= 0x00008000;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR						= 0x00010000;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_COPY_BIT_KHR								= 0x100000000ULL;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_RESOLVE_BIT_KHR							= 0x200000000ULL;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_BLIT_BIT_KHR								= 0x400000000ULL;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_CLEAR_BIT_KHR								= 0x800000000ULL;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_INDEX_INPUT_BIT_KHR						= 0x1000000000ULL;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_VERTEX_ATTRIBUTE_INPUT_BIT_KHR			= 0x2000000000ULL;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_PRE_RASTERIZATION_SHADERS_BIT_KHR			= 0x4000000000ULL;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT				= 0x01000000;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_CONDITIONAL_RENDERING_BIT_EXT				= 0x00040000;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_COMMAND_PREPROCESS_BIT_NV					= 0x00020000;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR	= 0x00400000;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_SHADING_RATE_IMAGE_BIT_NV					= 0x00400000;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR		= 0x02000000;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_KHR				= 0x00200000;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_NV					= 0x00200000;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_NV		= 0x02000000;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_FRAGMENT_DENSITY_PROCESS_BIT_EXT			= 0x00800000;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_TASK_SHADER_BIT_NV						= 0x00080000;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_MESH_SHADER_BIT_NV						= 0x00100000;
+typedef deUint64 VkPipelineStageFlagBits2KHR;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_NONE_KHR									= 0ULL;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_TOP_OF_PIPE_BIT_KHR						= 0x00000001ULL;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_DRAW_INDIRECT_BIT_KHR						= 0x00000002ULL;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_VERTEX_INPUT_BIT_KHR						= 0x00000004ULL;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_VERTEX_SHADER_BIT_KHR						= 0x00000008ULL;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_TESSELLATION_CONTROL_SHADER_BIT_KHR		= 0x00000010ULL;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_TESSELLATION_EVALUATION_SHADER_BIT_KHR		= 0x00000020ULL;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_GEOMETRY_SHADER_BIT_KHR					= 0x00000040ULL;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT_KHR					= 0x00000080ULL;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT_KHR				= 0x00000100ULL;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT_KHR				= 0x00000200ULL;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT_KHR			= 0x00000400ULL;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT_KHR						= 0x00000800ULL;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_ALL_TRANSFER_BIT_KHR						= 0x00001000ULL;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_TRANSFER_BIT_KHR							= 0x00001000;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_BOTTOM_OF_PIPE_BIT_KHR						= 0x00002000ULL;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_HOST_BIT_KHR								= 0x00004000ULL;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR						= 0x00008000ULL;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR						= 0x00010000ULL;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_COPY_BIT_KHR								= 0x100000000ULL;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_RESOLVE_BIT_KHR							= 0x200000000ULL;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_BLIT_BIT_KHR								= 0x400000000ULL;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_CLEAR_BIT_KHR								= 0x800000000ULL;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_INDEX_INPUT_BIT_KHR						= 0x1000000000ULL;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_VERTEX_ATTRIBUTE_INPUT_BIT_KHR				= 0x2000000000ULL;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_PRE_RASTERIZATION_SHADERS_BIT_KHR			= 0x4000000000ULL;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_VIDEO_DECODE_BIT_KHR						= 0x04000000ULL;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_VIDEO_ENCODE_BIT_KHR						= 0x08000000ULL;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT					= 0x01000000ULL;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_CONDITIONAL_RENDERING_BIT_EXT				= 0x00040000ULL;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_COMMAND_PREPROCESS_BIT_NV					= 0x00020000ULL;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR	= 0x00400000ULL;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_SHADING_RATE_IMAGE_BIT_NV					= 0x00400000;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR		= 0x02000000ULL;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_KHR					= 0x00200000ULL;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_NV					= 0x00200000;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_NV		= 0x02000000;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_FRAGMENT_DENSITY_PROCESS_BIT_EXT			= 0x00800000ULL;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_TASK_SHADER_BIT_NV							= 0x00080000ULL;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_MESH_SHADER_BIT_NV							= 0x00100000ULL;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_FLAG_BITS_2KHR_MAX_ENUM_KHR					= 0x7FFFFFFFFFFFFFFFULL;
 
 typedef deUint64 VkAccessFlags2KHR;
-static const VkAccessFlags2KHR VK_ACCESS_2_NONE_KHR											= 0;
-static const VkAccessFlags2KHR VK_ACCESS_2_INDIRECT_COMMAND_READ_BIT_KHR					= 0x00000001;
-static const VkAccessFlags2KHR VK_ACCESS_2_INDEX_READ_BIT_KHR								= 0x00000002;
-static const VkAccessFlags2KHR VK_ACCESS_2_VERTEX_ATTRIBUTE_READ_BIT_KHR					= 0x00000004;
-static const VkAccessFlags2KHR VK_ACCESS_2_UNIFORM_READ_BIT_KHR								= 0x00000008;
-static const VkAccessFlags2KHR VK_ACCESS_2_INPUT_ATTACHMENT_READ_BIT_KHR					= 0x00000010;
-static const VkAccessFlags2KHR VK_ACCESS_2_SHADER_READ_BIT_KHR								= 0x00000020;
-static const VkAccessFlags2KHR VK_ACCESS_2_SHADER_WRITE_BIT_KHR								= 0x00000040;
-static const VkAccessFlags2KHR VK_ACCESS_2_COLOR_ATTACHMENT_READ_BIT_KHR					= 0x00000080;
-static const VkAccessFlags2KHR VK_ACCESS_2_COLOR_ATTACHMENT_WRITE_BIT_KHR					= 0x00000100;
-static const VkAccessFlags2KHR VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_READ_BIT_KHR			= 0x00000200;
-static const VkAccessFlags2KHR VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT_KHR			= 0x00000400;
-static const VkAccessFlags2KHR VK_ACCESS_2_TRANSFER_READ_BIT_KHR							= 0x00000800;
-static const VkAccessFlags2KHR VK_ACCESS_2_TRANSFER_WRITE_BIT_KHR							= 0x00001000;
-static const VkAccessFlags2KHR VK_ACCESS_2_HOST_READ_BIT_KHR								= 0x00002000;
-static const VkAccessFlags2KHR VK_ACCESS_2_HOST_WRITE_BIT_KHR								= 0x00004000;
-static const VkAccessFlags2KHR VK_ACCESS_2_MEMORY_READ_BIT_KHR								= 0x00008000;
-static const VkAccessFlags2KHR VK_ACCESS_2_MEMORY_WRITE_BIT_KHR								= 0x00010000;
-static const VkAccessFlags2KHR VK_ACCESS_2_SHADER_SAMPLED_READ_BIT_KHR						= 0x100000000ULL;
-static const VkAccessFlags2KHR VK_ACCESS_2_SHADER_STORAGE_READ_BIT_KHR						= 0x200000000ULL;
-static const VkAccessFlags2KHR VK_ACCESS_2_SHADER_STORAGE_WRITE_BIT_KHR						= 0x400000000ULL;
-static const VkAccessFlags2KHR VK_ACCESS_2_TRANSFORM_FEEDBACK_WRITE_BIT_EXT					= 0x02000000;
-static const VkAccessFlags2KHR VK_ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT			= 0x04000000;
-static const VkAccessFlags2KHR VK_ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT			= 0x08000000;
-static const VkAccessFlags2KHR VK_ACCESS_2_CONDITIONAL_RENDERING_READ_BIT_EXT				= 0x00100000;
-static const VkAccessFlags2KHR VK_ACCESS_2_COMMAND_PREPROCESS_READ_BIT_NV					= 0x00020000;
-static const VkAccessFlags2KHR VK_ACCESS_2_COMMAND_PREPROCESS_WRITE_BIT_NV					= 0x00040000;
-static const VkAccessFlags2KHR VK_ACCESS_2_FRAGMENT_SHADING_RATE_ATTACHMENT_READ_BIT_KHR	= 0x00800000;
-static const VkAccessFlags2KHR VK_ACCESS_2_SHADING_RATE_IMAGE_READ_BIT_NV					= 0x00800000;
-static const VkAccessFlags2KHR VK_ACCESS_2_ACCELERATION_STRUCTURE_READ_BIT_KHR				= 0x00200000;
-static const VkAccessFlags2KHR VK_ACCESS_2_ACCELERATION_STRUCTURE_WRITE_BIT_KHR				= 0x00400000;
-static const VkAccessFlags2KHR VK_ACCESS_2_ACCELERATION_STRUCTURE_READ_BIT_NV				= 0x00200000;
-static const VkAccessFlags2KHR VK_ACCESS_2_ACCELERATION_STRUCTURE_WRITE_BIT_NV				= 0x00400000;
-static const VkAccessFlags2KHR VK_ACCESS_2_FRAGMENT_DENSITY_MAP_READ_BIT_EXT				= 0x01000000;
-static const VkAccessFlags2KHR VK_ACCESS_2_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT		= 0x00080000;
+typedef deUint64 VkAccessFlagBits2KHR;
+static const VkAccessFlagBits2KHR VK_ACCESS_2_NONE_KHR										= 0ULL;
+static const VkAccessFlagBits2KHR VK_ACCESS_2_INDIRECT_COMMAND_READ_BIT_KHR					= 0x00000001ULL;
+static const VkAccessFlagBits2KHR VK_ACCESS_2_INDEX_READ_BIT_KHR							= 0x00000002ULL;
+static const VkAccessFlagBits2KHR VK_ACCESS_2_VERTEX_ATTRIBUTE_READ_BIT_KHR					= 0x00000004ULL;
+static const VkAccessFlagBits2KHR VK_ACCESS_2_UNIFORM_READ_BIT_KHR							= 0x00000008ULL;
+static const VkAccessFlagBits2KHR VK_ACCESS_2_INPUT_ATTACHMENT_READ_BIT_KHR					= 0x00000010ULL;
+static const VkAccessFlagBits2KHR VK_ACCESS_2_SHADER_READ_BIT_KHR							= 0x00000020ULL;
+static const VkAccessFlagBits2KHR VK_ACCESS_2_SHADER_WRITE_BIT_KHR							= 0x00000040ULL;
+static const VkAccessFlagBits2KHR VK_ACCESS_2_COLOR_ATTACHMENT_READ_BIT_KHR					= 0x00000080ULL;
+static const VkAccessFlagBits2KHR VK_ACCESS_2_COLOR_ATTACHMENT_WRITE_BIT_KHR				= 0x00000100ULL;
+static const VkAccessFlagBits2KHR VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_READ_BIT_KHR			= 0x00000200ULL;
+static const VkAccessFlagBits2KHR VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT_KHR		= 0x00000400ULL;
+static const VkAccessFlagBits2KHR VK_ACCESS_2_TRANSFER_READ_BIT_KHR							= 0x00000800ULL;
+static const VkAccessFlagBits2KHR VK_ACCESS_2_TRANSFER_WRITE_BIT_KHR						= 0x00001000ULL;
+static const VkAccessFlagBits2KHR VK_ACCESS_2_HOST_READ_BIT_KHR								= 0x00002000ULL;
+static const VkAccessFlagBits2KHR VK_ACCESS_2_HOST_WRITE_BIT_KHR							= 0x00004000ULL;
+static const VkAccessFlagBits2KHR VK_ACCESS_2_MEMORY_READ_BIT_KHR							= 0x00008000ULL;
+static const VkAccessFlagBits2KHR VK_ACCESS_2_MEMORY_WRITE_BIT_KHR							= 0x00010000ULL;
+static const VkAccessFlagBits2KHR VK_ACCESS_2_SHADER_SAMPLED_READ_BIT_KHR					= 0x100000000ULL;
+static const VkAccessFlagBits2KHR VK_ACCESS_2_SHADER_STORAGE_READ_BIT_KHR					= 0x200000000ULL;
+static const VkAccessFlagBits2KHR VK_ACCESS_2_SHADER_STORAGE_WRITE_BIT_KHR					= 0x400000000ULL;
+static const VkAccessFlagBits2KHR VK_ACCESS_2_VIDEO_DECODE_READ_BIT_KHR						= 0x800000000ULL;
+static const VkAccessFlagBits2KHR VK_ACCESS_2_VIDEO_DECODE_WRITE_BIT_KHR					= 0x1000000000ULL;
+static const VkAccessFlagBits2KHR VK_ACCESS_2_VIDEO_ENCODE_READ_BIT_KHR						= 0x2000000000ULL;
+static const VkAccessFlagBits2KHR VK_ACCESS_2_VIDEO_ENCODE_WRITE_BIT_KHR					= 0x4000000000ULL;
+static const VkAccessFlagBits2KHR VK_ACCESS_2_TRANSFORM_FEEDBACK_WRITE_BIT_EXT				= 0x02000000ULL;
+static const VkAccessFlagBits2KHR VK_ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT		= 0x04000000ULL;
+static const VkAccessFlagBits2KHR VK_ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT		= 0x08000000ULL;
+static const VkAccessFlagBits2KHR VK_ACCESS_2_CONDITIONAL_RENDERING_READ_BIT_EXT			= 0x00100000ULL;
+static const VkAccessFlagBits2KHR VK_ACCESS_2_COMMAND_PREPROCESS_READ_BIT_NV				= 0x00020000ULL;
+static const VkAccessFlagBits2KHR VK_ACCESS_2_COMMAND_PREPROCESS_WRITE_BIT_NV				= 0x00040000ULL;
+static const VkAccessFlagBits2KHR VK_ACCESS_2_FRAGMENT_SHADING_RATE_ATTACHMENT_READ_BIT_KHR	= 0x00800000ULL;
+static const VkAccessFlagBits2KHR VK_ACCESS_2_SHADING_RATE_IMAGE_READ_BIT_NV				= 0x00800000;
+static const VkAccessFlagBits2KHR VK_ACCESS_2_ACCELERATION_STRUCTURE_READ_BIT_KHR			= 0x00200000ULL;
+static const VkAccessFlagBits2KHR VK_ACCESS_2_ACCELERATION_STRUCTURE_WRITE_BIT_KHR			= 0x00400000ULL;
+static const VkAccessFlagBits2KHR VK_ACCESS_2_ACCELERATION_STRUCTURE_READ_BIT_NV			= 0x00200000;
+static const VkAccessFlagBits2KHR VK_ACCESS_2_ACCELERATION_STRUCTURE_WRITE_BIT_NV			= 0x00400000;
+static const VkAccessFlagBits2KHR VK_ACCESS_2_FRAGMENT_DENSITY_MAP_READ_BIT_EXT				= 0x01000000ULL;
+static const VkAccessFlagBits2KHR VK_ACCESS_2_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT		= 0x00080000ULL;
+static const VkAccessFlagBits2KHR VK_ACCESS_FLAG_BITS_2KHR_MAX_ENUM_KHR						= 0x7FFFFFFFFFFFFFFFULL;
 
 VK_DEFINE_PLATFORM_TYPE(XlibDisplayPtr,				void*);
 VK_DEFINE_PLATFORM_TYPE(XlibWindow,					deUintptr);
@@ -3476,7 +3950,7 @@
 #define VK_KHR_PUSH_DESCRIPTOR_SPEC_VERSION 2
 #define VK_KHR_SHADER_FLOAT16_INT8_SPEC_VERSION 1
 #define VK_KHR_16BIT_STORAGE_SPEC_VERSION 1
-#define VK_KHR_INCREMENTAL_PRESENT_SPEC_VERSION 1
+#define VK_KHR_INCREMENTAL_PRESENT_SPEC_VERSION 2
 #define VK_KHR_DESCRIPTOR_UPDATE_TEMPLATE_SPEC_VERSION 1
 #define VK_KHR_IMAGELESS_FRAMEBUFFER_SPEC_VERSION 1
 #define VK_KHR_CREATE_RENDERPASS_2_EXTENSION_NAME "VK_KHR_create_renderpass2"
@@ -3519,13 +3993,14 @@
 #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
 #define VK_KHR_ZERO_INITIALIZE_WORKGROUP_MEMORY_SPEC_VERSION 1
 #define VK_KHR_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_SPEC_VERSION 1
 #define VK_KHR_COPY_COMMANDS_2_EXTENSION_NAME "VK_KHR_copy_commands2"
-#define VK_EXT_DEBUG_REPORT_SPEC_VERSION 9
+#define VK_EXT_DEBUG_REPORT_SPEC_VERSION 10
 #define VK_NV_GLSL_SHADER_SPEC_VERSION 1
 #define VK_EXT_DEPTH_RANGE_UNRESTRICTED_SPEC_VERSION 1
 #define VK_IMG_FILTER_CUBIC_SPEC_VERSION 1
@@ -3571,7 +4046,7 @@
 #define VK_EXT_HDR_METADATA_SPEC_VERSION 2
 #define VK_EXT_EXTERNAL_MEMORY_DMA_BUF_SPEC_VERSION 1
 #define VK_EXT_QUEUE_FAMILY_FOREIGN_SPEC_VERSION 1
-#define VK_QUEUE_FAMILY_FOREIGN_EXT (~0U-2)
+#define VK_QUEUE_FAMILY_FOREIGN_EXT (~2U)
 #define VK_EXT_DEBUG_UTILS_SPEC_VERSION 2
 #define VK_EXT_SAMPLER_FILTER_MINMAX_SPEC_VERSION 2
 #define VK_AMD_GPU_SHADER_INT16_SPEC_VERSION 2
@@ -3601,7 +4076,7 @@
 #define VK_EXT_EXTERNAL_MEMORY_HOST_SPEC_VERSION 1
 #define VK_AMD_BUFFER_MARKER_SPEC_VERSION 1
 #define VK_AMD_PIPELINE_COMPILER_CONTROL_SPEC_VERSION 1
-#define VK_EXT_CALIBRATED_TIMESTAMPS_SPEC_VERSION 1
+#define VK_EXT_CALIBRATED_TIMESTAMPS_SPEC_VERSION 2
 #define VK_AMD_SHADER_CORE_PROPERTIES_SPEC_VERSION 2
 #define VK_AMD_MEMORY_OVERALLOCATION_BEHAVIOR_SPEC_VERSION 1
 #define VK_EXT_VERTEX_ATTRIBUTE_DIVISOR_SPEC_VERSION 3
@@ -3644,8 +4119,9 @@
 #define VK_EXT_EXTENDED_DYNAMIC_STATE_SPEC_VERSION 1
 #define VK_EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_SPEC_VERSION 1
 #define VK_NV_DEVICE_GENERATED_COMMANDS_SPEC_VERSION 3
+#define VK_NV_INHERITED_VIEWPORT_SCISSOR_SPEC_VERSION 1
 #define VK_EXT_TEXEL_BUFFER_ALIGNMENT_SPEC_VERSION 1
-#define VK_QCOM_RENDER_PASS_TRANSFORM_SPEC_VERSION 1
+#define VK_QCOM_RENDER_PASS_TRANSFORM_SPEC_VERSION 2
 #define VK_EXT_DEVICE_MEMORY_REPORT_SPEC_VERSION 2
 #define VK_EXT_ROBUSTNESS_2_SPEC_VERSION 1
 #define VK_EXT_CUSTOM_BORDER_COLOR_SPEC_VERSION 12
@@ -3655,19 +4131,37 @@
 #define VK_NV_DEVICE_DIAGNOSTICS_CONFIG_SPEC_VERSION 1
 #define VK_QCOM_render_pass_store_ops_EXTENSION_NAME "VK_QCOM_render_pass_store_ops"
 #define VK_NV_FRAGMENT_SHADING_RATE_ENUMS_SPEC_VERSION 1
+#define VK_EXT_YCBCR_2PLANE_444_FORMATS_SPEC_VERSION 1
 #define VK_EXT_FRAGMENT_DENSITY_MAP_2_SPEC_VERSION 1
-#define VK_QCOM_ROTATED_COPY_COMMANDS_SPEC_VERSION 0
+#define VK_QCOM_ROTATED_COPY_COMMANDS_SPEC_VERSION 1
 #define VK_EXT_IMAGE_ROBUSTNESS_SPEC_VERSION 1
 #define VK_EXT_4444_FORMATS_SPEC_VERSION 1
 #define VK_NV_ACQUIRE_WINRT_DISPLAY_SPEC_VERSION 1
 #define VK_VALVE_MUTABLE_DESCRIPTOR_TYPE_SPEC_VERSION 1
+#define VK_EXT_VERTEX_INPUT_DYNAMIC_STATE_SPEC_VERSION 2
+#define VK_EXT_EXTENDED_DYNAMIC_STATE_2_SPEC_VERSION 1
+#define VK_EXT_COLOR_WRITE_ENABLE_SPEC_VERSION 1
 #define VK_KHR_ACCELERATION_STRUCTURE_SPEC_VERSION 11
 #define VK_KHR_RAY_TRACING_PIPELINE_SPEC_VERSION 1
 #define VK_KHR_RAY_QUERY_SPEC_VERSION 1
 #define VK_KHR_ANDROID_SURFACE_SPEC_VERSION 6
 #define VK_ANDROID_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER_SPEC_VERSION 3
+#define VK_KHR_VIDEO_QUEUE_SPEC_VERSION 1
+#define VK_KHR_VIDEO_DECODE_QUEUE_SPEC_VERSION 1
 #define VK_KHR_PORTABILITY_SUBSET_SPEC_VERSION 1
+#define VK_KHR_VIDEO_ENCODE_QUEUE_SPEC_VERSION 2
+#define VK_STD_VULKAN_VIDEO_CODEC_H264_API_VERSION_0_9 VK_MAKE_VIDEO_STD_VERSION(0, 9, 0)
+#define VK_STD_VULKAN_VIDEO_CODEC_H264_SPEC_VERSION VK_STD_VULKAN_VIDEO_CODEC_H264_API_VERSION_0_9
+#define VK_STD_VULKAN_VIDEO_CODEC_H264_EXTENSION_NAME "VK_STD_vulkan_video_codec_h264"
+#define VK_EXT_VIDEO_ENCODE_H264_SPEC_VERSION 1
+#define VK_EXT_VIDEO_DECODE_H264_SPEC_VERSION 1
+#define VK_STD_VULKAN_VIDEO_CODEC_H265_API_VERSION_0_5 VK_MAKE_VIDEO_STD_VERSION(0, 5, 0)
+#define VK_STD_VULKAN_VIDEO_CODEC_H265_SPEC_VERSION VK_STD_VULKAN_VIDEO_CODEC_H265_API_VERSION_0_5
+#define VK_STD_VULKAN_VIDEO_CODEC_H265_EXTENSION_NAME "VK_STD_vulkan_video_codec_h265"
+#define VK_EXT_VIDEO_DECODE_H265_SPEC_VERSION 1
 #define VK_FUCHSIA_IMAGEPIPE_SURFACE_SPEC_VERSION 1
+#define VK_FUCHSIA_EXTERNAL_MEMORY_SPEC_VERSION 1
+#define VK_FUCHSIA_EXTERNAL_SEMAPHORE_SPEC_VERSION 1
 #define VK_GGP_STREAM_DESCRIPTOR_SURFACE_SPEC_VERSION 1
 #define VK_GGP_FRAME_TOKEN_SPEC_VERSION 1
 #define VK_MVK_IOS_SURFACE_SPEC_VERSION 3
diff --git a/external/vulkancts/framework/vulkan/vkCmdUtil.cpp b/external/vulkancts/framework/vulkan/vkCmdUtil.cpp
index 20171b3..e3e530a 100644
--- a/external/vulkancts/framework/vulkan/vkCmdUtil.cpp
+++ b/external/vulkancts/framework/vulkan/vkCmdUtil.cpp
@@ -198,18 +198,30 @@
 	vk.cmdEndRenderPass(commandBuffer);
 }
 
-void submitCommandsAndWait (const DeviceInterface&	vk,
-							const VkDevice			device,
-							const VkQueue			queue,
-							const VkCommandBuffer	commandBuffer,
-							const bool				useDeviceGroups,
-							const deUint32			deviceMask)
+void submitCommandsAndWait (const DeviceInterface&		vk,
+							const VkDevice				device,
+							const VkQueue				queue,
+							const VkCommandBuffer		commandBuffer,
+							const bool					useDeviceGroups,
+							const deUint32				deviceMask,
+							const deUint32				waitSemaphoreCount,
+							const VkSemaphore*			waitSemaphores,
+							const VkPipelineStageFlags*	waitStages)
 {
+	// For simplicity. A more complete approach can be found in vkt::sparse::submitCommandsAndWait().
+	DE_ASSERT(!(useDeviceGroups && waitSemaphoreCount > 0u));
+
+	if (waitSemaphoreCount > 0u)
+	{
+		DE_ASSERT(waitSemaphores != nullptr);
+		DE_ASSERT(waitStages != nullptr);
+	}
+
 	const Unique<VkFence>	fence					(createFence(vk, device));
 
 	VkDeviceGroupSubmitInfo	deviceGroupSubmitInfo	=
 	{
-		VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO_KHR,	//	VkStructureType		sType;
+		VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO,		//	VkStructureType		sType;
 		DE_NULL,										//	const void*			pNext;
 		0u,												//	deUint32			waitSemaphoreCount;
 		DE_NULL,										//	const deUint32*		pWaitSemaphoreDeviceIndices;
@@ -223,13 +235,13 @@
 	{
 		VK_STRUCTURE_TYPE_SUBMIT_INFO,						// VkStructureType				sType;
 		useDeviceGroups ? &deviceGroupSubmitInfo : DE_NULL,	// const void*					pNext;
-		0u,													// deUint32						waitSemaphoreCount;
-		DE_NULL,											// const VkSemaphore*			pWaitSemaphores;
-		(const VkPipelineStageFlags*)DE_NULL,				// const VkPipelineStageFlags*	pWaitDstStageMask;
+		waitSemaphoreCount,									// deUint32						waitSemaphoreCount;
+		waitSemaphores,										// const VkSemaphore*			pWaitSemaphores;
+		waitStages,											// const VkPipelineStageFlags*	pWaitDstStageMask;
 		1u,													// deUint32						commandBufferCount;
 		&commandBuffer,										// const VkCommandBuffer*		pCommandBuffers;
 		0u,													// deUint32						signalSemaphoreCount;
-		DE_NULL,											// const VkSemaphore*			pSignalSemaphores;
+		nullptr,											// const VkSemaphore*			pSignalSemaphores;
 	};
 
 	VK_CHECK(vk.queueSubmit(queue, 1u, &submitInfo, *fence));
diff --git a/external/vulkancts/framework/vulkan/vkCmdUtil.hpp b/external/vulkancts/framework/vulkan/vkCmdUtil.hpp
index 91a7e42..a766e2d 100644
--- a/external/vulkancts/framework/vulkan/vkCmdUtil.hpp
+++ b/external/vulkancts/framework/vulkan/vkCmdUtil.hpp
@@ -110,12 +110,15 @@
 void endRenderPass (const DeviceInterface&	vk,
 					const VkCommandBuffer	commandBuffer);
 
-void submitCommandsAndWait	(const DeviceInterface&	vk,
-							 const VkDevice			device,
-							 const VkQueue			queue,
-							 const VkCommandBuffer	commandBuffer,
-							 const bool				useDeviceGroups = false,
-							 const deUint32			deviceMask = 1u);
+void submitCommandsAndWait	(const DeviceInterface&			vk,
+							 const VkDevice					device,
+							 const VkQueue					queue,
+							 const VkCommandBuffer			commandBuffer,
+							 const bool						useDeviceGroups = false,
+							 const deUint32					deviceMask = 1u,
+							 const deUint32					waitSemaphoreCount = 0u,
+							 const VkSemaphore*				waitSemaphores = nullptr,
+							 const VkPipelineStageFlags*	waitStages = nullptr);
 
 } // vk
 
diff --git a/external/vulkancts/framework/vulkan/vkConcreteDeviceInterface.inl b/external/vulkancts/framework/vulkan/vkConcreteDeviceInterface.inl
index 100f6f7..c6bfae0 100644
--- a/external/vulkancts/framework/vulkan/vkConcreteDeviceInterface.inl
+++ b/external/vulkancts/framework/vulkan/vkConcreteDeviceInterface.inl
@@ -296,6 +296,13 @@
 virtual VkResult			setPrivateDataEXT								(VkDevice device, VkObjectType objectType, deUint64 objectHandle, VkPrivateDataSlotEXT privateDataSlot, deUint64 data) const;
 virtual void				getPrivateDataEXT								(VkDevice device, VkObjectType objectType, deUint64 objectHandle, VkPrivateDataSlotEXT privateDataSlot, deUint64* pData) const;
 virtual void				cmdSetFragmentShadingRateEnumNV					(VkCommandBuffer commandBuffer, VkFragmentShadingRateNV shadingRate, const VkFragmentShadingRateCombinerOpKHR combinerOps[2]) const;
+virtual void				cmdSetVertexInputEXT							(VkCommandBuffer commandBuffer, deUint32 vertexBindingDescriptionCount, const VkVertexInputBindingDescription2EXT* pVertexBindingDescriptions, deUint32 vertexAttributeDescriptionCount, const VkVertexInputAttributeDescription2EXT* pVertexAttributeDescriptions) const;
+virtual void				cmdSetPatchControlPointsEXT						(VkCommandBuffer commandBuffer, deUint32 patchControlPoints) const;
+virtual void				cmdSetRasterizerDiscardEnableEXT				(VkCommandBuffer commandBuffer, VkBool32 rasterizerDiscardEnable) const;
+virtual void				cmdSetDepthBiasEnableEXT						(VkCommandBuffer commandBuffer, VkBool32 depthBiasEnable) const;
+virtual void				cmdSetLogicOpEXT								(VkCommandBuffer commandBuffer, VkLogicOp logicOp) const;
+virtual void				cmdSetPrimitiveRestartEnableEXT					(VkCommandBuffer commandBuffer, VkBool32 primitiveRestartEnable) const;
+virtual void				cmdSetColorWriteEnableEXT						(VkCommandBuffer commandBuffer, deUint32 attachmentCount, const VkBool32* pColorWriteEnables) const;
 virtual VkResult			createAccelerationStructureKHR					(VkDevice device, const VkAccelerationStructureCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkAccelerationStructureKHR* pAccelerationStructure) const;
 virtual void				destroyAccelerationStructureKHR					(VkDevice device, VkAccelerationStructureKHR accelerationStructure, const VkAllocationCallbacks* pAllocator) const;
 virtual void				cmdBuildAccelerationStructuresKHR				(VkCommandBuffer commandBuffer, deUint32 infoCount, const VkAccelerationStructureBuildGeometryInfoKHR* pInfos, const VkAccelerationStructureBuildRangeInfoKHR* const* ppBuildRangeInfos) const;
@@ -320,6 +327,22 @@
 virtual void				cmdSetRayTracingPipelineStackSizeKHR			(VkCommandBuffer commandBuffer, deUint32 pipelineStackSize) const;
 virtual VkResult			getAndroidHardwareBufferPropertiesANDROID		(VkDevice device, const struct pt::AndroidHardwareBufferPtr buffer, VkAndroidHardwareBufferPropertiesANDROID* pProperties) const;
 virtual VkResult			getMemoryAndroidHardwareBufferANDROID			(VkDevice device, const VkMemoryGetAndroidHardwareBufferInfoANDROID* pInfo, struct pt::AndroidHardwareBufferPtr* pBuffer) const;
+virtual VkResult			createVideoSessionKHR							(VkDevice device, const VkVideoSessionCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkVideoSessionKHR* pVideoSession) const;
+virtual void				destroyVideoSessionKHR							(VkDevice device, VkVideoSessionKHR videoSession, const VkAllocationCallbacks* pAllocator) const;
+virtual VkResult			getVideoSessionMemoryRequirementsKHR			(VkDevice device, VkVideoSessionKHR videoSession, deUint32* pVideoSessionMemoryRequirementsCount, VkVideoGetMemoryPropertiesKHR* pVideoSessionMemoryRequirements) const;
+virtual VkResult			bindVideoSessionMemoryKHR						(VkDevice device, VkVideoSessionKHR videoSession, deUint32 videoSessionBindMemoryCount, const VkVideoBindMemoryKHR* pVideoSessionBindMemories) const;
+virtual VkResult			createVideoSessionParametersKHR					(VkDevice device, const VkVideoSessionParametersCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkVideoSessionParametersKHR* pVideoSessionParameters) const;
+virtual VkResult			updateVideoSessionParametersKHR					(VkDevice device, VkVideoSessionParametersKHR videoSessionParameters, const VkVideoSessionParametersUpdateInfoKHR* pUpdateInfo) const;
+virtual void				destroyVideoSessionParametersKHR				(VkDevice device, VkVideoSessionParametersKHR videoSessionParameters, const VkAllocationCallbacks* pAllocator) const;
+virtual void				cmdBeginVideoCodingKHR							(VkCommandBuffer commandBuffer, const VkVideoBeginCodingInfoKHR* pBeginInfo) const;
+virtual void				cmdEndVideoCodingKHR							(VkCommandBuffer commandBuffer, const VkVideoEndCodingInfoKHR* pEndCodingInfo) const;
+virtual void				cmdControlVideoCodingKHR						(VkCommandBuffer commandBuffer, const VkVideoCodingControlInfoKHR* pCodingControlInfo) const;
+virtual void				cmdDecodeVideoKHR								(VkCommandBuffer commandBuffer, const VkVideoDecodeInfoKHR* pFrameInfo) const;
+virtual void				cmdEncodeVideoKHR								(VkCommandBuffer commandBuffer, const VkVideoEncodeInfoKHR* pEncodeInfo) const;
+virtual VkResult			getMemoryZirconHandleFUCHSIA					(VkDevice device, const VkMemoryGetZirconHandleInfoFUCHSIA* pGetZirconHandleInfo, pt::zx_handle_t* pZirconHandle) const;
+virtual VkResult			getMemoryZirconHandlePropertiesFUCHSIA			(VkDevice device, VkExternalMemoryHandleTypeFlagBits handleType, pt::zx_handle_t zirconHandle, VkMemoryZirconHandlePropertiesFUCHSIA* pMemoryZirconHandleProperties) const;
+virtual VkResult			importSemaphoreZirconHandleFUCHSIA				(VkDevice device, const VkImportSemaphoreZirconHandleInfoFUCHSIA* pImportSemaphoreZirconHandleInfo) const;
+virtual VkResult			getSemaphoreZirconHandleFUCHSIA					(VkDevice device, const VkSemaphoreGetZirconHandleInfoFUCHSIA* pGetZirconHandleInfo, pt::zx_handle_t* pZirconHandle) const;
 virtual VkResult			getMemoryWin32HandleKHR							(VkDevice device, const VkMemoryGetWin32HandleInfoKHR* pGetWin32HandleInfo, pt::Win32Handle* pHandle) const;
 virtual VkResult			getMemoryWin32HandlePropertiesKHR				(VkDevice device, VkExternalMemoryHandleTypeFlagBits handleType, pt::Win32Handle handle, VkMemoryWin32HandlePropertiesKHR* pMemoryWin32HandleProperties) const;
 virtual VkResult			importSemaphoreWin32HandleKHR					(VkDevice device, const VkImportSemaphoreWin32HandleInfoKHR* pImportSemaphoreWin32HandleInfo) const;
diff --git a/external/vulkancts/framework/vulkan/vkConcreteInstanceInterface.inl b/external/vulkancts/framework/vulkan/vkConcreteInstanceInterface.inl
index 27e74a8..b13a499 100644
--- a/external/vulkancts/framework/vulkan/vkConcreteInstanceInterface.inl
+++ b/external/vulkancts/framework/vulkan/vkConcreteInstanceInterface.inl
@@ -65,6 +65,8 @@
 virtual VkResult	acquireWinrtDisplayNV											(VkPhysicalDevice physicalDevice, VkDisplayKHR display) const;
 virtual VkResult	getWinrtDisplayNV												(VkPhysicalDevice physicalDevice, deUint32 deviceRelativeId, VkDisplayKHR* pDisplay) const;
 virtual VkResult	createAndroidSurfaceKHR											(VkInstance instance, const VkAndroidSurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface) const;
+virtual VkResult	getPhysicalDeviceVideoCapabilitiesKHR							(VkPhysicalDevice physicalDevice, const VkVideoProfileKHR* pVideoProfile, VkVideoCapabilitiesKHR* pCapabilities) const;
+virtual VkResult	getPhysicalDeviceVideoFormatPropertiesKHR						(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceVideoFormatInfoKHR* pVideoFormatInfo, deUint32* pVideoFormatPropertyCount, VkVideoFormatPropertiesKHR* pVideoFormatProperties) const;
 virtual VkResult	createImagePipeSurfaceFUCHSIA									(VkInstance instance, const VkImagePipeSurfaceCreateInfoFUCHSIA* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface) const;
 virtual VkResult	createStreamDescriptorSurfaceGGP								(VkInstance instance, const VkStreamDescriptorSurfaceCreateInfoGGP* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface) const;
 virtual VkResult	createIOSSurfaceMVK												(VkInstance instance, const VkIOSSurfaceCreateInfoMVK* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface) const;
diff --git a/external/vulkancts/framework/vulkan/vkDefs.hpp b/external/vulkancts/framework/vulkan/vkDefs.hpp
index 051c226..22dd256 100644
--- a/external/vulkancts/framework/vulkan/vkDefs.hpp
+++ b/external/vulkancts/framework/vulkan/vkDefs.hpp
@@ -49,12 +49,15 @@
 };														\
 } // pt
 
-#define VK_MAKE_VERSION(MAJOR, MINOR, PATCH)	(((deUint32)(MAJOR) << 22u) | ((deUint32)(MINOR) << 12u) | (deUint32)(PATCH))
+#define VK_MAKE_API_VERSION(VARIANT, MAJOR, MINOR, PATCH)	\
+												((((deUint32)(VARIANT)) << 29) | (((deUint32)(MAJOR)) << 22) | (((deUint32)(MINOR)) << 12) | ((deUint32)(PATCH)))
+#define VK_MAKE_VERSION(MAJOR, MINOR, PATCH)	VK_MAKE_API_VERSION(0, MAJOR, MINOR, PATCH)
 #define VK_BIT(NUM)								(1u<<(deUint32)(NUM))
 
-#define VK_VERSION_MAJOR(version)				((deUint32)(version) >> 22)
-#define VK_VERSION_MINOR(version)				(((deUint32)(version) >> 12) & 0x3ff)
-#define VK_VERSION_PATCH(version)				((deUint32)(version) & 0xfff)
+#define VK_API_VERSION_VARIANT(version)			((deUint32)(version) >> 29)
+#define VK_API_VERSION_MAJOR(version)			(((deUint32)(version) >> 22) & 0x7FU)
+#define VK_API_VERSION_MINOR(version)			(((deUint32)(version) >> 12) & 0x3FFU)
+#define VK_API_VERSION_PATCH(version)			((deUint32)(version) & 0xFFFU)
 
 #define VK_CHECK(EXPR)							vk::checkResult((EXPR), #EXPR, __FILE__, __LINE__)
 #define VK_CHECK_MSG(EXPR, MSG)					vk::checkResult((EXPR), MSG, __FILE__, __LINE__)
@@ -135,6 +138,7 @@
 	TYPE_ANDROID,
 	TYPE_WIN32,
 	TYPE_MACOS,
+	TYPE_HEADLESS,
 
 	TYPE_LAST
 };
diff --git a/external/vulkancts/framework/vulkan/vkDeviceDriverImpl.inl b/external/vulkancts/framework/vulkan/vkDeviceDriverImpl.inl
index 699f701..7c889d2 100644
--- a/external/vulkancts/framework/vulkan/vkDeviceDriverImpl.inl
+++ b/external/vulkancts/framework/vulkan/vkDeviceDriverImpl.inl
@@ -1473,6 +1473,41 @@
 	m_vk.cmdSetFragmentShadingRateEnumNV(commandBuffer, shadingRate, combinerOps);
 }
 
+void DeviceDriver::cmdSetVertexInputEXT (VkCommandBuffer commandBuffer, deUint32 vertexBindingDescriptionCount, const VkVertexInputBindingDescription2EXT* pVertexBindingDescriptions, deUint32 vertexAttributeDescriptionCount, const VkVertexInputAttributeDescription2EXT* pVertexAttributeDescriptions) const
+{
+	m_vk.cmdSetVertexInputEXT(commandBuffer, vertexBindingDescriptionCount, pVertexBindingDescriptions, vertexAttributeDescriptionCount, pVertexAttributeDescriptions);
+}
+
+void DeviceDriver::cmdSetPatchControlPointsEXT (VkCommandBuffer commandBuffer, deUint32 patchControlPoints) const
+{
+	m_vk.cmdSetPatchControlPointsEXT(commandBuffer, patchControlPoints);
+}
+
+void DeviceDriver::cmdSetRasterizerDiscardEnableEXT (VkCommandBuffer commandBuffer, VkBool32 rasterizerDiscardEnable) const
+{
+	m_vk.cmdSetRasterizerDiscardEnableEXT(commandBuffer, rasterizerDiscardEnable);
+}
+
+void DeviceDriver::cmdSetDepthBiasEnableEXT (VkCommandBuffer commandBuffer, VkBool32 depthBiasEnable) const
+{
+	m_vk.cmdSetDepthBiasEnableEXT(commandBuffer, depthBiasEnable);
+}
+
+void DeviceDriver::cmdSetLogicOpEXT (VkCommandBuffer commandBuffer, VkLogicOp logicOp) const
+{
+	m_vk.cmdSetLogicOpEXT(commandBuffer, logicOp);
+}
+
+void DeviceDriver::cmdSetPrimitiveRestartEnableEXT (VkCommandBuffer commandBuffer, VkBool32 primitiveRestartEnable) const
+{
+	m_vk.cmdSetPrimitiveRestartEnableEXT(commandBuffer, primitiveRestartEnable);
+}
+
+void DeviceDriver::cmdSetColorWriteEnableEXT (VkCommandBuffer commandBuffer, deUint32 attachmentCount, const VkBool32* pColorWriteEnables) const
+{
+	m_vk.cmdSetColorWriteEnableEXT(commandBuffer, attachmentCount, pColorWriteEnables);
+}
+
 VkResult DeviceDriver::createAccelerationStructureKHR (VkDevice device, const VkAccelerationStructureCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkAccelerationStructureKHR* pAccelerationStructure) const
 {
 	return m_vk.createAccelerationStructureKHR(device, pCreateInfo, pAllocator, pAccelerationStructure);
@@ -1593,6 +1628,86 @@
 	return m_vk.getMemoryAndroidHardwareBufferANDROID(device, pInfo, pBuffer);
 }
 
+VkResult DeviceDriver::createVideoSessionKHR (VkDevice device, const VkVideoSessionCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkVideoSessionKHR* pVideoSession) const
+{
+	return m_vk.createVideoSessionKHR(device, pCreateInfo, pAllocator, pVideoSession);
+}
+
+void DeviceDriver::destroyVideoSessionKHR (VkDevice device, VkVideoSessionKHR videoSession, const VkAllocationCallbacks* pAllocator) const
+{
+	m_vk.destroyVideoSessionKHR(device, videoSession, pAllocator);
+}
+
+VkResult DeviceDriver::getVideoSessionMemoryRequirementsKHR (VkDevice device, VkVideoSessionKHR videoSession, deUint32* pVideoSessionMemoryRequirementsCount, VkVideoGetMemoryPropertiesKHR* pVideoSessionMemoryRequirements) const
+{
+	return m_vk.getVideoSessionMemoryRequirementsKHR(device, videoSession, pVideoSessionMemoryRequirementsCount, pVideoSessionMemoryRequirements);
+}
+
+VkResult DeviceDriver::bindVideoSessionMemoryKHR (VkDevice device, VkVideoSessionKHR videoSession, deUint32 videoSessionBindMemoryCount, const VkVideoBindMemoryKHR* pVideoSessionBindMemories) const
+{
+	return m_vk.bindVideoSessionMemoryKHR(device, videoSession, videoSessionBindMemoryCount, pVideoSessionBindMemories);
+}
+
+VkResult DeviceDriver::createVideoSessionParametersKHR (VkDevice device, const VkVideoSessionParametersCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkVideoSessionParametersKHR* pVideoSessionParameters) const
+{
+	return m_vk.createVideoSessionParametersKHR(device, pCreateInfo, pAllocator, pVideoSessionParameters);
+}
+
+VkResult DeviceDriver::updateVideoSessionParametersKHR (VkDevice device, VkVideoSessionParametersKHR videoSessionParameters, const VkVideoSessionParametersUpdateInfoKHR* pUpdateInfo) const
+{
+	return m_vk.updateVideoSessionParametersKHR(device, videoSessionParameters, pUpdateInfo);
+}
+
+void DeviceDriver::destroyVideoSessionParametersKHR (VkDevice device, VkVideoSessionParametersKHR videoSessionParameters, const VkAllocationCallbacks* pAllocator) const
+{
+	m_vk.destroyVideoSessionParametersKHR(device, videoSessionParameters, pAllocator);
+}
+
+void DeviceDriver::cmdBeginVideoCodingKHR (VkCommandBuffer commandBuffer, const VkVideoBeginCodingInfoKHR* pBeginInfo) const
+{
+	m_vk.cmdBeginVideoCodingKHR(commandBuffer, pBeginInfo);
+}
+
+void DeviceDriver::cmdEndVideoCodingKHR (VkCommandBuffer commandBuffer, const VkVideoEndCodingInfoKHR* pEndCodingInfo) const
+{
+	m_vk.cmdEndVideoCodingKHR(commandBuffer, pEndCodingInfo);
+}
+
+void DeviceDriver::cmdControlVideoCodingKHR (VkCommandBuffer commandBuffer, const VkVideoCodingControlInfoKHR* pCodingControlInfo) const
+{
+	m_vk.cmdControlVideoCodingKHR(commandBuffer, pCodingControlInfo);
+}
+
+void DeviceDriver::cmdDecodeVideoKHR (VkCommandBuffer commandBuffer, const VkVideoDecodeInfoKHR* pFrameInfo) const
+{
+	m_vk.cmdDecodeVideoKHR(commandBuffer, pFrameInfo);
+}
+
+void DeviceDriver::cmdEncodeVideoKHR (VkCommandBuffer commandBuffer, const VkVideoEncodeInfoKHR* pEncodeInfo) const
+{
+	m_vk.cmdEncodeVideoKHR(commandBuffer, pEncodeInfo);
+}
+
+VkResult DeviceDriver::getMemoryZirconHandleFUCHSIA (VkDevice device, const VkMemoryGetZirconHandleInfoFUCHSIA* pGetZirconHandleInfo, pt::zx_handle_t* pZirconHandle) const
+{
+	return m_vk.getMemoryZirconHandleFUCHSIA(device, pGetZirconHandleInfo, pZirconHandle);
+}
+
+VkResult DeviceDriver::getMemoryZirconHandlePropertiesFUCHSIA (VkDevice device, VkExternalMemoryHandleTypeFlagBits handleType, pt::zx_handle_t zirconHandle, VkMemoryZirconHandlePropertiesFUCHSIA* pMemoryZirconHandleProperties) const
+{
+	return m_vk.getMemoryZirconHandlePropertiesFUCHSIA(device, handleType, zirconHandle, pMemoryZirconHandleProperties);
+}
+
+VkResult DeviceDriver::importSemaphoreZirconHandleFUCHSIA (VkDevice device, const VkImportSemaphoreZirconHandleInfoFUCHSIA* pImportSemaphoreZirconHandleInfo) const
+{
+	return m_vk.importSemaphoreZirconHandleFUCHSIA(device, pImportSemaphoreZirconHandleInfo);
+}
+
+VkResult DeviceDriver::getSemaphoreZirconHandleFUCHSIA (VkDevice device, const VkSemaphoreGetZirconHandleInfoFUCHSIA* pGetZirconHandleInfo, pt::zx_handle_t* pZirconHandle) const
+{
+	return m_vk.getSemaphoreZirconHandleFUCHSIA(device, pGetZirconHandleInfo, pZirconHandle);
+}
+
 VkResult DeviceDriver::getMemoryWin32HandleKHR (VkDevice device, const VkMemoryGetWin32HandleInfoKHR* pGetWin32HandleInfo, pt::Win32Handle* pHandle) const
 {
 	return m_vk.getMemoryWin32HandleKHR(device, pGetWin32HandleInfo, pHandle);
diff --git a/external/vulkancts/framework/vulkan/vkDeviceExtensions.inl b/external/vulkancts/framework/vulkan/vkDeviceExtensions.inl
index 8f7c6bc..122e92a 100644
--- a/external/vulkancts/framework/vulkan/vkDeviceExtensions.inl
+++ b/external/vulkancts/framework/vulkan/vkDeviceExtensions.inl
@@ -74,5 +74,7 @@
 	"VK_KHR_zero_initialize_workgroup_memory",
 	"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 d37688c..5249970 100644
--- a/external/vulkancts/framework/vulkan/vkDeviceFeatures.inl
+++ b/external/vulkancts/framework/vulkan/vkDeviceFeatures.inl
@@ -15,6 +15,7 @@
 #define VK_KHR_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME "VK_KHR_buffer_device_address"
 #define VK_EXT_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME "VK_EXT_buffer_device_address"
 #define DECL_AMD_COHERENT_MEMORY_EXTENSION_NAME "not_existent_feature"
+#define VK_EXT_COLOR_WRITE_ENABLE_EXTENSION_NAME "VK_EXT_color_write_enable"
 #define VK_NV_COMPUTE_SHADER_DERIVATIVES_EXTENSION_NAME "VK_NV_compute_shader_derivatives"
 #define VK_EXT_CONDITIONAL_RENDERING_EXTENSION_NAME "VK_EXT_conditional_rendering"
 #define VK_NV_COOPERATIVE_MATRIX_EXTENSION_NAME "VK_NV_cooperative_matrix"
@@ -29,6 +30,7 @@
 #define DECL_NV_DIAGNOSTICS_CONFIG_EXTENSION_NAME "not_existent_feature"
 #define VK_NV_SCISSOR_EXCLUSIVE_EXTENSION_NAME "VK_NV_scissor_exclusive"
 #define VK_EXT_EXTENDED_DYNAMIC_STATE_EXTENSION_NAME "VK_EXT_extended_dynamic_state"
+#define VK_EXT_EXTENDED_DYNAMIC_STATE_2_EXTENSION_NAME "VK_EXT_extended_dynamic_state2"
 #define VK_EXT_FRAGMENT_DENSITY_MAP_EXTENSION_NAME "VK_EXT_fragment_density_map"
 #define VK_EXT_FRAGMENT_DENSITY_MAP_2_EXTENSION_NAME "VK_EXT_fragment_density_map2"
 #define VK_NV_FRAGMENT_SHADER_BARYCENTRIC_EXTENSION_NAME "VK_NV_fragment_shader_barycentric"
@@ -39,6 +41,7 @@
 #define VK_KHR_IMAGELESS_FRAMEBUFFER_EXTENSION_NAME "VK_KHR_imageless_framebuffer"
 #define VK_EXT_IMAGE_ROBUSTNESS_EXTENSION_NAME "VK_EXT_image_robustness"
 #define VK_EXT_INDEX_TYPE_UINT8_EXTENSION_NAME "VK_EXT_index_type_uint8"
+#define VK_NV_INHERITED_VIEWPORT_SCISSOR_EXTENSION_NAME "VK_NV_inherited_viewport_scissor"
 #define VK_EXT_INLINE_UNIFORM_BLOCK_EXTENSION_NAME "VK_EXT_inline_uniform_block"
 #define VK_EXT_LINE_RASTERIZATION_EXTENSION_NAME "VK_EXT_line_rasterization"
 #define VK_EXT_MEMORY_PRIORITY_EXTENSION_NAME "VK_EXT_memory_priority"
@@ -66,6 +69,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"
@@ -80,8 +84,10 @@
 #define VK_KHR_UNIFORM_BUFFER_STANDARD_LAYOUT_EXTENSION_NAME "VK_KHR_uniform_buffer_standard_layout"
 #define VK_KHR_VARIABLE_POINTERS_EXTENSION_NAME "VK_KHR_variable_pointers"
 #define VK_EXT_VERTEX_ATTRIBUTE_DIVISOR_EXTENSION_NAME "VK_EXT_vertex_attribute_divisor"
+#define VK_EXT_VERTEX_INPUT_DYNAMIC_STATE_EXTENSION_NAME "VK_EXT_vertex_input_dynamic_state"
 #define VK_KHR_VULKAN_MEMORY_MODEL_EXTENSION_NAME "VK_KHR_vulkan_memory_model"
 #define VK_KHR_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_EXTENSION_NAME "VK_KHR_workgroup_memory_explicit_layout"
+#define DECL_EXT_YCBCR_2_PLANE_444_FORMATS_EXTENSION_NAME "not_existent_feature"
 #define VK_EXT_YCBCR_IMAGE_ARRAYS_EXTENSION_NAME "VK_EXT_ycbcr_image_arrays"
 #define VK_KHR_ZERO_INITIALIZE_WORKGROUP_MEMORY_EXTENSION_NAME "VK_KHR_zero_initialize_workgroup_memory"
 
@@ -202,6 +208,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&) {}
@@ -240,6 +247,7 @@
 template<> void initFeatureFromBlob<VkPhysicalDeviceExtendedDynamicStateFeaturesEXT>(VkPhysicalDeviceExtendedDynamicStateFeaturesEXT&, const AllFeaturesBlobs&) {}
 template<> void initFeatureFromBlob<VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT>(VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT&, const AllFeaturesBlobs&) {}
 template<> void initFeatureFromBlob<VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV>(VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV&, const AllFeaturesBlobs&) {}
+template<> void initFeatureFromBlob<VkPhysicalDeviceInheritedViewportScissorFeaturesNV>(VkPhysicalDeviceInheritedViewportScissorFeaturesNV&, const AllFeaturesBlobs&) {}
 template<> void initFeatureFromBlob<VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT>(VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT&, const AllFeaturesBlobs&) {}
 template<> void initFeatureFromBlob<VkPhysicalDeviceDeviceMemoryReportFeaturesEXT>(VkPhysicalDeviceDeviceMemoryReportFeaturesEXT&, const AllFeaturesBlobs&) {}
 template<> void initFeatureFromBlob<VkPhysicalDeviceRobustness2FeaturesEXT>(VkPhysicalDeviceRobustness2FeaturesEXT&, const AllFeaturesBlobs&) {}
@@ -248,92 +256,102 @@
 template<> void initFeatureFromBlob<VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT>(VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT&, const AllFeaturesBlobs&) {}
 template<> void initFeatureFromBlob<VkPhysicalDeviceDiagnosticsConfigFeaturesNV>(VkPhysicalDeviceDiagnosticsConfigFeaturesNV&, const AllFeaturesBlobs&) {}
 template<> void initFeatureFromBlob<VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV>(VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV&, const AllFeaturesBlobs&) {}
+template<> void initFeatureFromBlob<VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT>(VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT&, const AllFeaturesBlobs&) {}
 template<> void initFeatureFromBlob<VkPhysicalDeviceFragmentDensityMap2FeaturesEXT>(VkPhysicalDeviceFragmentDensityMap2FeaturesEXT&, const AllFeaturesBlobs&) {}
 template<> void initFeatureFromBlob<VkPhysicalDeviceImageRobustnessFeaturesEXT>(VkPhysicalDeviceImageRobustnessFeaturesEXT&, const AllFeaturesBlobs&) {}
 template<> void initFeatureFromBlob<VkPhysicalDevice4444FormatsFeaturesEXT>(VkPhysicalDevice4444FormatsFeaturesEXT&, const AllFeaturesBlobs&) {}
 template<> void initFeatureFromBlob<VkPhysicalDeviceMutableDescriptorTypeFeaturesVALVE>(VkPhysicalDeviceMutableDescriptorTypeFeaturesVALVE&, const AllFeaturesBlobs&) {}
+template<> void initFeatureFromBlob<VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT>(VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT&, const AllFeaturesBlobs&) {}
+template<> void initFeatureFromBlob<VkPhysicalDeviceExtendedDynamicState2FeaturesEXT>(VkPhysicalDeviceExtendedDynamicState2FeaturesEXT&, const AllFeaturesBlobs&) {}
+template<> void initFeatureFromBlob<VkPhysicalDeviceColorWriteEnableFeaturesEXT>(VkPhysicalDeviceColorWriteEnableFeaturesEXT&, const AllFeaturesBlobs&) {}
 template<> void initFeatureFromBlob<VkPhysicalDeviceAccelerationStructureFeaturesKHR>(VkPhysicalDeviceAccelerationStructureFeaturesKHR&, const AllFeaturesBlobs&) {}
 template<> void initFeatureFromBlob<VkPhysicalDeviceRayTracingPipelineFeaturesKHR>(VkPhysicalDeviceRayTracingPipelineFeaturesKHR&, const AllFeaturesBlobs&) {}
 template<> void initFeatureFromBlob<VkPhysicalDeviceRayQueryFeaturesKHR>(VkPhysicalDeviceRayQueryFeaturesKHR&, const AllFeaturesBlobs&) {}
 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, 78}; }
-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, 77}; }
-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, 76}; }
-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, 75}; }
-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, 74}; }
-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, 73}; }
-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, 72}; }
-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, 71}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceCoherentMemoryFeaturesAMD>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COHERENT_MEMORY_FEATURES_AMD, DECL_AMD_COHERENT_MEMORY_EXTENSION_NAME, 0, 70}; }
-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, 69}; }
-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, 68}; }
-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, 67}; }
-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, 66}; }
-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, 65}; }
-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, 64}; }
-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, 63}; }
-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, 62}; }
-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, 61}; }
-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, 60}; }
-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, 59}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceDiagnosticsConfigFeaturesNV>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DIAGNOSTICS_CONFIG_FEATURES_NV, DECL_NV_DIAGNOSTICS_CONFIG_EXTENSION_NAME, 0, 58}; }
-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, 57}; }
-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, 56}; }
-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, 55}; }
-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, 54}; }
-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, 53}; }
-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, 52}; }
-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, 51}; }
-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, 50}; }
-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, 49}; }
-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, 48}; }
-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, 47}; }
-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, 46}; }
-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, 45}; }
-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, 44}; }
-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, 43}; }
-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, 42}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceMultiviewFeatures>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES, VK_KHR_MULTIVIEW_EXTENSION_NAME, VK_KHR_MULTIVIEW_SPEC_VERSION, 41}; }
-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, 40}; }
-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, 39}; }
-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, 38}; }
-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, 37}; }
-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, 36}; }
-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, 35}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceProtectedMemoryFeatures>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES, DECL_PROTECTED_MEMORY_EXTENSION_NAME, 0, 34}; }
-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, 33}; }
-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, 32}; }
-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, 31}; }
-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, 30}; }
-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, 29}; }
-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, 28}; }
-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, 27}; }
-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, 26}; }
-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, 25}; }
-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, 24}; }
-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, 23}; }
-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, 22}; }
-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, 21}; }
-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, 20}; }
-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, 19}; }
-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, 18}; }
-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, 17}; }
-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, 16}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TERMINATE_INVOCATION_FEATURES_KHR, VK_KHR_SHADER_TERMINATE_INVOCATION_EXTENSION_NAME, VK_KHR_SHADER_TERMINATE_INVOCATION_SPEC_VERSION, 15}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceShadingRateImageFeaturesNV>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_FEATURES_NV, VK_NV_SHADING_RATE_IMAGE_EXTENSION_NAME, VK_NV_SHADING_RATE_IMAGE_SPEC_VERSION, 14}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceSubgroupSizeControlFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES_EXT, VK_EXT_SUBGROUP_SIZE_CONTROL_EXTENSION_NAME, VK_EXT_SUBGROUP_SIZE_CONTROL_SPEC_VERSION, 13}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceSynchronization2FeaturesKHR>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SYNCHRONIZATION_2_FEATURES_KHR, VK_KHR_SYNCHRONIZATION_2_EXTENSION_NAME, VK_KHR_SYNCHRONIZATION_2_SPEC_VERSION, 12}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT, VK_EXT_TEXEL_BUFFER_ALIGNMENT_EXTENSION_NAME, VK_EXT_TEXEL_BUFFER_ALIGNMENT_SPEC_VERSION, 11}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES_EXT, VK_EXT_TEXTURE_COMPRESSION_ASTC_HDR_EXTENSION_NAME, VK_EXT_TEXTURE_COMPRESSION_ASTC_HDR_SPEC_VERSION, 10}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceTimelineSemaphoreFeatures>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES, VK_KHR_TIMELINE_SEMAPHORE_EXTENSION_NAME, VK_KHR_TIMELINE_SEMAPHORE_SPEC_VERSION, 9}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceTransformFeedbackFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_FEATURES_EXT, VK_EXT_TRANSFORM_FEEDBACK_EXTENSION_NAME, VK_EXT_TRANSFORM_FEEDBACK_SPEC_VERSION, 8}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceUniformBufferStandardLayoutFeatures>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES, VK_KHR_UNIFORM_BUFFER_STANDARD_LAYOUT_EXTENSION_NAME, VK_KHR_UNIFORM_BUFFER_STANDARD_LAYOUT_SPEC_VERSION, 7}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceVariablePointersFeatures>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES, VK_KHR_VARIABLE_POINTERS_EXTENSION_NAME, VK_KHR_VARIABLE_POINTERS_SPEC_VERSION, 6}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT, VK_EXT_VERTEX_ATTRIBUTE_DIVISOR_EXTENSION_NAME, VK_EXT_VERTEX_ATTRIBUTE_DIVISOR_SPEC_VERSION, 5}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceVulkanMemoryModelFeatures>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES, VK_KHR_VULKAN_MEMORY_MODEL_EXTENSION_NAME, VK_KHR_VULKAN_MEMORY_MODEL_SPEC_VERSION, 4}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_FEATURES_KHR, VK_KHR_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_EXTENSION_NAME, VK_KHR_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_SPEC_VERSION, 3}; }
+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}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TERMINATE_INVOCATION_FEATURES_KHR, VK_KHR_SHADER_TERMINATE_INVOCATION_EXTENSION_NAME, VK_KHR_SHADER_TERMINATE_INVOCATION_SPEC_VERSION, 17}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceShadingRateImageFeaturesNV>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_FEATURES_NV, VK_NV_SHADING_RATE_IMAGE_EXTENSION_NAME, VK_NV_SHADING_RATE_IMAGE_SPEC_VERSION, 16}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceSubgroupSizeControlFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES_EXT, VK_EXT_SUBGROUP_SIZE_CONTROL_EXTENSION_NAME, VK_EXT_SUBGROUP_SIZE_CONTROL_SPEC_VERSION, 15}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceSynchronization2FeaturesKHR>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SYNCHRONIZATION_2_FEATURES_KHR, VK_KHR_SYNCHRONIZATION_2_EXTENSION_NAME, VK_KHR_SYNCHRONIZATION_2_SPEC_VERSION, 14}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT, VK_EXT_TEXEL_BUFFER_ALIGNMENT_EXTENSION_NAME, VK_EXT_TEXEL_BUFFER_ALIGNMENT_SPEC_VERSION, 13}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES_EXT, VK_EXT_TEXTURE_COMPRESSION_ASTC_HDR_EXTENSION_NAME, VK_EXT_TEXTURE_COMPRESSION_ASTC_HDR_SPEC_VERSION, 12}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceTimelineSemaphoreFeatures>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES, VK_KHR_TIMELINE_SEMAPHORE_EXTENSION_NAME, VK_KHR_TIMELINE_SEMAPHORE_SPEC_VERSION, 11}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceTransformFeedbackFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_FEATURES_EXT, VK_EXT_TRANSFORM_FEEDBACK_EXTENSION_NAME, VK_EXT_TRANSFORM_FEEDBACK_SPEC_VERSION, 10}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceUniformBufferStandardLayoutFeatures>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES, VK_KHR_UNIFORM_BUFFER_STANDARD_LAYOUT_EXTENSION_NAME, VK_KHR_UNIFORM_BUFFER_STANDARD_LAYOUT_SPEC_VERSION, 9}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceVariablePointersFeatures>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES, VK_KHR_VARIABLE_POINTERS_EXTENSION_NAME, VK_KHR_VARIABLE_POINTERS_SPEC_VERSION, 8}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT, VK_EXT_VERTEX_ATTRIBUTE_DIVISOR_EXTENSION_NAME, VK_EXT_VERTEX_ATTRIBUTE_DIVISOR_SPEC_VERSION, 7}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_INPUT_DYNAMIC_STATE_FEATURES_EXT, VK_EXT_VERTEX_INPUT_DYNAMIC_STATE_EXTENSION_NAME, VK_EXT_VERTEX_INPUT_DYNAMIC_STATE_SPEC_VERSION, 6}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceVulkanMemoryModelFeatures>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES, VK_KHR_VULKAN_MEMORY_MODEL_EXTENSION_NAME, VK_KHR_VULKAN_MEMORY_MODEL_SPEC_VERSION, 5}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_FEATURES_KHR, VK_KHR_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_EXTENSION_NAME, VK_KHR_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_SPEC_VERSION, 4}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_2_PLANE_444_FORMATS_FEATURES_EXT, DECL_EXT_YCBCR_2_PLANE_444_FORMATS_EXTENSION_NAME, 0, 3}; }
 template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceYcbcrImageArraysFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_IMAGE_ARRAYS_FEATURES_EXT, VK_EXT_YCBCR_IMAGE_ARRAYS_EXTENSION_NAME, VK_EXT_YCBCR_IMAGE_ARRAYS_SPEC_VERSION, 2}; }
 template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ZERO_INITIALIZE_WORKGROUP_MEMORY_FEATURES_KHR, VK_KHR_ZERO_INITIALIZE_WORKGROUP_MEMORY_EXTENSION_NAME, VK_KHR_ZERO_INITIALIZE_WORKGROUP_MEMORY_SPEC_VERSION, 1}; }
 
@@ -349,6 +367,7 @@
 	{ createFeatureStructWrapper<VkPhysicalDeviceBufferDeviceAddressFeatures>, VK_KHR_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME, VK_KHR_BUFFER_DEVICE_ADDRESS_SPEC_VERSION },
 	{ createFeatureStructWrapper<VkPhysicalDeviceBufferDeviceAddressFeaturesEXT>, VK_EXT_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME, VK_EXT_BUFFER_DEVICE_ADDRESS_SPEC_VERSION },
 	{ createFeatureStructWrapper<VkPhysicalDeviceCoherentMemoryFeaturesAMD>, DECL_AMD_COHERENT_MEMORY_EXTENSION_NAME, 0 },
+	{ createFeatureStructWrapper<VkPhysicalDeviceColorWriteEnableFeaturesEXT>, VK_EXT_COLOR_WRITE_ENABLE_EXTENSION_NAME, VK_EXT_COLOR_WRITE_ENABLE_SPEC_VERSION },
 	{ createFeatureStructWrapper<VkPhysicalDeviceComputeShaderDerivativesFeaturesNV>, VK_NV_COMPUTE_SHADER_DERIVATIVES_EXTENSION_NAME, VK_NV_COMPUTE_SHADER_DERIVATIVES_SPEC_VERSION },
 	{ createFeatureStructWrapper<VkPhysicalDeviceConditionalRenderingFeaturesEXT>, VK_EXT_CONDITIONAL_RENDERING_EXTENSION_NAME, VK_EXT_CONDITIONAL_RENDERING_SPEC_VERSION },
 	{ createFeatureStructWrapper<VkPhysicalDeviceCooperativeMatrixFeaturesNV>, VK_NV_COOPERATIVE_MATRIX_EXTENSION_NAME, VK_NV_COOPERATIVE_MATRIX_SPEC_VERSION },
@@ -363,6 +382,7 @@
 	{ createFeatureStructWrapper<VkPhysicalDeviceDiagnosticsConfigFeaturesNV>, DECL_NV_DIAGNOSTICS_CONFIG_EXTENSION_NAME, 0 },
 	{ createFeatureStructWrapper<VkPhysicalDeviceExclusiveScissorFeaturesNV>, VK_NV_SCISSOR_EXCLUSIVE_EXTENSION_NAME, VK_NV_SCISSOR_EXCLUSIVE_SPEC_VERSION },
 	{ createFeatureStructWrapper<VkPhysicalDeviceExtendedDynamicStateFeaturesEXT>, VK_EXT_EXTENDED_DYNAMIC_STATE_EXTENSION_NAME, VK_EXT_EXTENDED_DYNAMIC_STATE_SPEC_VERSION },
+	{ createFeatureStructWrapper<VkPhysicalDeviceExtendedDynamicState2FeaturesEXT>, VK_EXT_EXTENDED_DYNAMIC_STATE_2_EXTENSION_NAME, VK_EXT_EXTENDED_DYNAMIC_STATE_2_SPEC_VERSION },
 	{ createFeatureStructWrapper<VkPhysicalDeviceFragmentDensityMapFeaturesEXT>, VK_EXT_FRAGMENT_DENSITY_MAP_EXTENSION_NAME, VK_EXT_FRAGMENT_DENSITY_MAP_SPEC_VERSION },
 	{ createFeatureStructWrapper<VkPhysicalDeviceFragmentDensityMap2FeaturesEXT>, VK_EXT_FRAGMENT_DENSITY_MAP_2_EXTENSION_NAME, VK_EXT_FRAGMENT_DENSITY_MAP_2_SPEC_VERSION },
 	{ createFeatureStructWrapper<VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV>, VK_NV_FRAGMENT_SHADER_BARYCENTRIC_EXTENSION_NAME, VK_NV_FRAGMENT_SHADER_BARYCENTRIC_SPEC_VERSION },
@@ -373,6 +393,7 @@
 	{ createFeatureStructWrapper<VkPhysicalDeviceImagelessFramebufferFeatures>, VK_KHR_IMAGELESS_FRAMEBUFFER_EXTENSION_NAME, VK_KHR_IMAGELESS_FRAMEBUFFER_SPEC_VERSION },
 	{ createFeatureStructWrapper<VkPhysicalDeviceImageRobustnessFeaturesEXT>, VK_EXT_IMAGE_ROBUSTNESS_EXTENSION_NAME, VK_EXT_IMAGE_ROBUSTNESS_SPEC_VERSION },
 	{ createFeatureStructWrapper<VkPhysicalDeviceIndexTypeUint8FeaturesEXT>, VK_EXT_INDEX_TYPE_UINT8_EXTENSION_NAME, VK_EXT_INDEX_TYPE_UINT8_SPEC_VERSION },
+	{ createFeatureStructWrapper<VkPhysicalDeviceInheritedViewportScissorFeaturesNV>, VK_NV_INHERITED_VIEWPORT_SCISSOR_EXTENSION_NAME, VK_NV_INHERITED_VIEWPORT_SCISSOR_SPEC_VERSION },
 	{ createFeatureStructWrapper<VkPhysicalDeviceInlineUniformBlockFeaturesEXT>, VK_EXT_INLINE_UNIFORM_BLOCK_EXTENSION_NAME, VK_EXT_INLINE_UNIFORM_BLOCK_SPEC_VERSION },
 	{ createFeatureStructWrapper<VkPhysicalDeviceLineRasterizationFeaturesEXT>, VK_EXT_LINE_RASTERIZATION_EXTENSION_NAME, VK_EXT_LINE_RASTERIZATION_SPEC_VERSION },
 	{ createFeatureStructWrapper<VkPhysicalDeviceMemoryPriorityFeaturesEXT>, VK_EXT_MEMORY_PRIORITY_EXTENSION_NAME, VK_EXT_MEMORY_PRIORITY_SPEC_VERSION },
@@ -400,6 +421,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 },
@@ -414,8 +436,10 @@
 	{ createFeatureStructWrapper<VkPhysicalDeviceUniformBufferStandardLayoutFeatures>, VK_KHR_UNIFORM_BUFFER_STANDARD_LAYOUT_EXTENSION_NAME, VK_KHR_UNIFORM_BUFFER_STANDARD_LAYOUT_SPEC_VERSION },
 	{ createFeatureStructWrapper<VkPhysicalDeviceVariablePointersFeatures>, VK_KHR_VARIABLE_POINTERS_EXTENSION_NAME, VK_KHR_VARIABLE_POINTERS_SPEC_VERSION },
 	{ createFeatureStructWrapper<VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT>, VK_EXT_VERTEX_ATTRIBUTE_DIVISOR_EXTENSION_NAME, VK_EXT_VERTEX_ATTRIBUTE_DIVISOR_SPEC_VERSION },
+	{ createFeatureStructWrapper<VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT>, VK_EXT_VERTEX_INPUT_DYNAMIC_STATE_EXTENSION_NAME, VK_EXT_VERTEX_INPUT_DYNAMIC_STATE_SPEC_VERSION },
 	{ createFeatureStructWrapper<VkPhysicalDeviceVulkanMemoryModelFeatures>, VK_KHR_VULKAN_MEMORY_MODEL_EXTENSION_NAME, VK_KHR_VULKAN_MEMORY_MODEL_SPEC_VERSION },
 	{ createFeatureStructWrapper<VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR>, VK_KHR_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_EXTENSION_NAME, VK_KHR_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_SPEC_VERSION },
+	{ createFeatureStructWrapper<VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT>, DECL_EXT_YCBCR_2_PLANE_444_FORMATS_EXTENSION_NAME, 0 },
 	{ createFeatureStructWrapper<VkPhysicalDeviceYcbcrImageArraysFeaturesEXT>, VK_EXT_YCBCR_IMAGE_ARRAYS_EXTENSION_NAME, VK_EXT_YCBCR_IMAGE_ARRAYS_SPEC_VERSION },
 	{ createFeatureStructWrapper<VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR>, VK_KHR_ZERO_INITIALIZE_WORKGROUP_MEMORY_EXTENSION_NAME, VK_KHR_ZERO_INITIALIZE_WORKGROUP_MEMORY_SPEC_VERSION },
 };
diff --git a/external/vulkancts/framework/vulkan/vkDeviceFeatures2.inl b/external/vulkancts/framework/vulkan/vkDeviceFeatures2.inl
index b5a73da..337cee1 100644
--- a/external/vulkancts/framework/vulkan/vkDeviceFeatures2.inl
+++ b/external/vulkancts/framework/vulkan/vkDeviceFeatures2.inl
@@ -19,6 +19,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));
@@ -37,6 +38,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)
 {
@@ -57,6 +59,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 = isConditionalRenderingFeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONDITIONAL_RENDERING_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM;
 	deviceConditionalRenderingFeaturesEXT[ndx].pNext = &deviceScalarBlockLayoutFeatures[ndx];
@@ -107,7 +110,10 @@
 	deviceFragmentDensityMapFeaturesEXT[ndx].pNext = &deviceFragmentDensityMap2FeaturesEXT[ndx];
 
 	deviceFragmentDensityMap2FeaturesEXT[ndx].sType = isFragmentDensityMap2FeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM;
-	deviceFragmentDensityMap2FeaturesEXT[ndx].pNext = DE_NULL;
+	deviceFragmentDensityMap2FeaturesEXT[ndx].pNext = &deviceShaderIntegerDotProductFeaturesKHR[ndx];
+
+	deviceShaderIntegerDotProductFeaturesKHR[ndx].sType = isShaderIntegerDotProductFeaturesKHR ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_FEATURES_KHR : VK_STRUCTURE_TYPE_MAX_ENUM;
+	deviceShaderIntegerDotProductFeaturesKHR[ndx].pNext = DE_NULL;
 
 	deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features));
 	extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
@@ -149,6 +155,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 ||
@@ -272,3 +280,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 9736acf..c67a87d 100644
--- a/external/vulkancts/framework/vulkan/vkDeviceFeaturesForContextDecl.inl
+++ b/external/vulkancts/framework/vulkan/vkDeviceFeaturesForContextDecl.inl
@@ -11,6 +11,7 @@
 const vk::VkPhysicalDeviceBufferDeviceAddressFeatures&					getBufferDeviceAddressFeatures					(void) const;
 const vk::VkPhysicalDeviceBufferDeviceAddressFeaturesEXT&				getBufferDeviceAddressFeaturesEXT				(void) const;
 const vk::VkPhysicalDeviceCoherentMemoryFeaturesAMD&					getCoherentMemoryFeaturesAMD					(void) const;
+const vk::VkPhysicalDeviceColorWriteEnableFeaturesEXT&					getColorWriteEnableFeaturesEXT					(void) const;
 const vk::VkPhysicalDeviceComputeShaderDerivativesFeaturesNV&			getComputeShaderDerivativesFeatures				(void) const;
 const vk::VkPhysicalDeviceConditionalRenderingFeaturesEXT&				getConditionalRenderingFeaturesEXT				(void) const;
 const vk::VkPhysicalDeviceCooperativeMatrixFeaturesNV&					getCooperativeMatrixFeatures					(void) const;
@@ -25,6 +26,7 @@
 const vk::VkPhysicalDeviceDiagnosticsConfigFeaturesNV&					getDiagnosticsConfigFeatures					(void) const;
 const vk::VkPhysicalDeviceExclusiveScissorFeaturesNV&					getExclusiveScissorFeatures						(void) const;
 const vk::VkPhysicalDeviceExtendedDynamicStateFeaturesEXT&				getExtendedDynamicStateFeaturesEXT				(void) const;
+const vk::VkPhysicalDeviceExtendedDynamicState2FeaturesEXT&				getExtendedDynamicState2FeaturesEXT				(void) const;
 const vk::VkPhysicalDeviceFragmentDensityMapFeaturesEXT&				getFragmentDensityMapFeaturesEXT				(void) const;
 const vk::VkPhysicalDeviceFragmentDensityMap2FeaturesEXT&				getFragmentDensityMap2FeaturesEXT				(void) const;
 const vk::VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV&			getFragmentShaderBarycentricFeatures			(void) const;
@@ -35,6 +37,7 @@
 const vk::VkPhysicalDeviceImagelessFramebufferFeatures&					getImagelessFramebufferFeatures					(void) const;
 const vk::VkPhysicalDeviceImageRobustnessFeaturesEXT&					getImageRobustnessFeaturesEXT					(void) const;
 const vk::VkPhysicalDeviceIndexTypeUint8FeaturesEXT&					getIndexTypeUint8FeaturesEXT					(void) const;
+const vk::VkPhysicalDeviceInheritedViewportScissorFeaturesNV&			getInheritedViewportScissorFeatures				(void) const;
 const vk::VkPhysicalDeviceInlineUniformBlockFeaturesEXT&				getInlineUniformBlockFeaturesEXT				(void) const;
 const vk::VkPhysicalDeviceLineRasterizationFeaturesEXT&					getLineRasterizationFeaturesEXT					(void) const;
 const vk::VkPhysicalDeviceMemoryPriorityFeaturesEXT&					getMemoryPriorityFeaturesEXT					(void) const;
@@ -62,6 +65,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;
@@ -76,7 +80,9 @@
 const vk::VkPhysicalDeviceUniformBufferStandardLayoutFeatures&			getUniformBufferStandardLayoutFeatures			(void) const;
 const vk::VkPhysicalDeviceVariablePointersFeatures&						getVariablePointersFeatures						(void) const;
 const vk::VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT&			getVertexAttributeDivisorFeaturesEXT			(void) const;
+const vk::VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT&			getVertexInputDynamicStateFeaturesEXT			(void) const;
 const vk::VkPhysicalDeviceVulkanMemoryModelFeatures&					getVulkanMemoryModelFeatures					(void) const;
 const vk::VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR&		getWorkgroupMemoryExplicitLayoutFeatures		(void) const;
+const vk::VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT&				getYcbcr2Plane444FormatsFeaturesEXT				(void) const;
 const vk::VkPhysicalDeviceYcbcrImageArraysFeaturesEXT&					getYcbcrImageArraysFeaturesEXT					(void) const;
 const vk::VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR&		getZeroInitializeWorkgroupMemoryFeatures		(void) const;
diff --git a/external/vulkancts/framework/vulkan/vkDeviceFeaturesForContextDefs.inl b/external/vulkancts/framework/vulkan/vkDeviceFeaturesForContextDefs.inl
index cbe1dfe..d9e2018 100644
--- a/external/vulkancts/framework/vulkan/vkDeviceFeaturesForContextDefs.inl
+++ b/external/vulkancts/framework/vulkan/vkDeviceFeaturesForContextDefs.inl
@@ -11,6 +11,7 @@
 const vk::VkPhysicalDeviceBufferDeviceAddressFeatures&					Context::getBufferDeviceAddressFeatures					(void) const { return m_device->getBufferDeviceAddressFeatures();				}
 const vk::VkPhysicalDeviceBufferDeviceAddressFeaturesEXT&				Context::getBufferDeviceAddressFeaturesEXT				(void) const { return m_device->getBufferDeviceAddressFeaturesEXT();			}
 const vk::VkPhysicalDeviceCoherentMemoryFeaturesAMD&					Context::getCoherentMemoryFeaturesAMD					(void) const { return m_device->getCoherentMemoryFeaturesAMD();					}
+const vk::VkPhysicalDeviceColorWriteEnableFeaturesEXT&					Context::getColorWriteEnableFeaturesEXT					(void) const { return m_device->getColorWriteEnableFeaturesEXT();				}
 const vk::VkPhysicalDeviceComputeShaderDerivativesFeaturesNV&			Context::getComputeShaderDerivativesFeatures			(void) const { return m_device->getComputeShaderDerivativesFeatures();			}
 const vk::VkPhysicalDeviceConditionalRenderingFeaturesEXT&				Context::getConditionalRenderingFeaturesEXT				(void) const { return m_device->getConditionalRenderingFeaturesEXT();			}
 const vk::VkPhysicalDeviceCooperativeMatrixFeaturesNV&					Context::getCooperativeMatrixFeatures					(void) const { return m_device->getCooperativeMatrixFeatures();					}
@@ -25,6 +26,7 @@
 const vk::VkPhysicalDeviceDiagnosticsConfigFeaturesNV&					Context::getDiagnosticsConfigFeatures					(void) const { return m_device->getDiagnosticsConfigFeatures();					}
 const vk::VkPhysicalDeviceExclusiveScissorFeaturesNV&					Context::getExclusiveScissorFeatures					(void) const { return m_device->getExclusiveScissorFeatures();					}
 const vk::VkPhysicalDeviceExtendedDynamicStateFeaturesEXT&				Context::getExtendedDynamicStateFeaturesEXT				(void) const { return m_device->getExtendedDynamicStateFeaturesEXT();			}
+const vk::VkPhysicalDeviceExtendedDynamicState2FeaturesEXT&				Context::getExtendedDynamicState2FeaturesEXT			(void) const { return m_device->getExtendedDynamicState2FeaturesEXT();			}
 const vk::VkPhysicalDeviceFragmentDensityMapFeaturesEXT&				Context::getFragmentDensityMapFeaturesEXT				(void) const { return m_device->getFragmentDensityMapFeaturesEXT();				}
 const vk::VkPhysicalDeviceFragmentDensityMap2FeaturesEXT&				Context::getFragmentDensityMap2FeaturesEXT				(void) const { return m_device->getFragmentDensityMap2FeaturesEXT();			}
 const vk::VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV&			Context::getFragmentShaderBarycentricFeatures			(void) const { return m_device->getFragmentShaderBarycentricFeatures();			}
@@ -35,6 +37,7 @@
 const vk::VkPhysicalDeviceImagelessFramebufferFeatures&					Context::getImagelessFramebufferFeatures				(void) const { return m_device->getImagelessFramebufferFeatures();				}
 const vk::VkPhysicalDeviceImageRobustnessFeaturesEXT&					Context::getImageRobustnessFeaturesEXT					(void) const { return m_device->getImageRobustnessFeaturesEXT();				}
 const vk::VkPhysicalDeviceIndexTypeUint8FeaturesEXT&					Context::getIndexTypeUint8FeaturesEXT					(void) const { return m_device->getIndexTypeUint8FeaturesEXT();					}
+const vk::VkPhysicalDeviceInheritedViewportScissorFeaturesNV&			Context::getInheritedViewportScissorFeatures			(void) const { return m_device->getInheritedViewportScissorFeatures();			}
 const vk::VkPhysicalDeviceInlineUniformBlockFeaturesEXT&				Context::getInlineUniformBlockFeaturesEXT				(void) const { return m_device->getInlineUniformBlockFeaturesEXT();				}
 const vk::VkPhysicalDeviceLineRasterizationFeaturesEXT&					Context::getLineRasterizationFeaturesEXT				(void) const { return m_device->getLineRasterizationFeaturesEXT();				}
 const vk::VkPhysicalDeviceMemoryPriorityFeaturesEXT&					Context::getMemoryPriorityFeaturesEXT					(void) const { return m_device->getMemoryPriorityFeaturesEXT();					}
@@ -62,6 +65,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();		}
@@ -76,7 +80,9 @@
 const vk::VkPhysicalDeviceUniformBufferStandardLayoutFeatures&			Context::getUniformBufferStandardLayoutFeatures			(void) const { return m_device->getUniformBufferStandardLayoutFeatures();		}
 const vk::VkPhysicalDeviceVariablePointersFeatures&						Context::getVariablePointersFeatures					(void) const { return m_device->getVariablePointersFeatures();					}
 const vk::VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT&			Context::getVertexAttributeDivisorFeaturesEXT			(void) const { return m_device->getVertexAttributeDivisorFeaturesEXT();			}
+const vk::VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT&			Context::getVertexInputDynamicStateFeaturesEXT			(void) const { return m_device->getVertexInputDynamicStateFeaturesEXT();		}
 const vk::VkPhysicalDeviceVulkanMemoryModelFeatures&					Context::getVulkanMemoryModelFeatures					(void) const { return m_device->getVulkanMemoryModelFeatures();					}
 const vk::VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR&		Context::getWorkgroupMemoryExplicitLayoutFeatures		(void) const { return m_device->getWorkgroupMemoryExplicitLayoutFeatures();		}
+const vk::VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT&				Context::getYcbcr2Plane444FormatsFeaturesEXT			(void) const { return m_device->getYcbcr2Plane444FormatsFeaturesEXT();			}
 const vk::VkPhysicalDeviceYcbcrImageArraysFeaturesEXT&					Context::getYcbcrImageArraysFeaturesEXT					(void) const { return m_device->getYcbcrImageArraysFeaturesEXT();				}
 const vk::VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR&		Context::getZeroInitializeWorkgroupMemoryFeatures		(void) const { return m_device->getZeroInitializeWorkgroupMemoryFeatures();		}
diff --git a/external/vulkancts/framework/vulkan/vkDeviceFeaturesForDefaultDeviceDefs.inl b/external/vulkancts/framework/vulkan/vkDeviceFeaturesForDefaultDeviceDefs.inl
index 504fa4c..2ad7aae 100644
--- a/external/vulkancts/framework/vulkan/vkDeviceFeaturesForDefaultDeviceDefs.inl
+++ b/external/vulkancts/framework/vulkan/vkDeviceFeaturesForDefaultDeviceDefs.inl
@@ -11,6 +11,7 @@
 const VkPhysicalDeviceBufferDeviceAddressFeatures&					getBufferDeviceAddressFeatures					(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceBufferDeviceAddressFeatures>();					}
 const VkPhysicalDeviceBufferDeviceAddressFeaturesEXT&				getBufferDeviceAddressFeaturesEXT				(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceBufferDeviceAddressFeaturesEXT>();				}
 const VkPhysicalDeviceCoherentMemoryFeaturesAMD&					getCoherentMemoryFeaturesAMD					(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceCoherentMemoryFeaturesAMD>();						}
+const VkPhysicalDeviceColorWriteEnableFeaturesEXT&					getColorWriteEnableFeaturesEXT					(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceColorWriteEnableFeaturesEXT>();					}
 const VkPhysicalDeviceComputeShaderDerivativesFeaturesNV&			getComputeShaderDerivativesFeatures				(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceComputeShaderDerivativesFeaturesNV>();			}
 const VkPhysicalDeviceConditionalRenderingFeaturesEXT&				getConditionalRenderingFeaturesEXT				(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceConditionalRenderingFeaturesEXT>();				}
 const VkPhysicalDeviceCooperativeMatrixFeaturesNV&					getCooperativeMatrixFeatures					(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceCooperativeMatrixFeaturesNV>();					}
@@ -25,6 +26,7 @@
 const VkPhysicalDeviceDiagnosticsConfigFeaturesNV&					getDiagnosticsConfigFeatures					(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceDiagnosticsConfigFeaturesNV>();					}
 const VkPhysicalDeviceExclusiveScissorFeaturesNV&					getExclusiveScissorFeatures						(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceExclusiveScissorFeaturesNV>();					}
 const VkPhysicalDeviceExtendedDynamicStateFeaturesEXT&				getExtendedDynamicStateFeaturesEXT				(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceExtendedDynamicStateFeaturesEXT>();				}
+const VkPhysicalDeviceExtendedDynamicState2FeaturesEXT&				getExtendedDynamicState2FeaturesEXT				(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceExtendedDynamicState2FeaturesEXT>();				}
 const VkPhysicalDeviceFragmentDensityMapFeaturesEXT&				getFragmentDensityMapFeaturesEXT				(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceFragmentDensityMapFeaturesEXT>();					}
 const VkPhysicalDeviceFragmentDensityMap2FeaturesEXT&				getFragmentDensityMap2FeaturesEXT				(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceFragmentDensityMap2FeaturesEXT>();				}
 const VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV&			getFragmentShaderBarycentricFeatures			(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV>();			}
@@ -35,6 +37,7 @@
 const VkPhysicalDeviceImagelessFramebufferFeatures&					getImagelessFramebufferFeatures					(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceImagelessFramebufferFeatures>();					}
 const VkPhysicalDeviceImageRobustnessFeaturesEXT&					getImageRobustnessFeaturesEXT					(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceImageRobustnessFeaturesEXT>();					}
 const VkPhysicalDeviceIndexTypeUint8FeaturesEXT&					getIndexTypeUint8FeaturesEXT					(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceIndexTypeUint8FeaturesEXT>();						}
+const VkPhysicalDeviceInheritedViewportScissorFeaturesNV&			getInheritedViewportScissorFeatures				(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceInheritedViewportScissorFeaturesNV>();			}
 const VkPhysicalDeviceInlineUniformBlockFeaturesEXT&				getInlineUniformBlockFeaturesEXT				(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceInlineUniformBlockFeaturesEXT>();					}
 const VkPhysicalDeviceLineRasterizationFeaturesEXT&					getLineRasterizationFeaturesEXT					(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceLineRasterizationFeaturesEXT>();					}
 const VkPhysicalDeviceMemoryPriorityFeaturesEXT&					getMemoryPriorityFeaturesEXT					(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceMemoryPriorityFeaturesEXT>();						}
@@ -62,6 +65,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>();			}
@@ -76,7 +80,9 @@
 const VkPhysicalDeviceUniformBufferStandardLayoutFeatures&			getUniformBufferStandardLayoutFeatures			(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceUniformBufferStandardLayoutFeatures>();			}
 const VkPhysicalDeviceVariablePointersFeatures&						getVariablePointersFeatures						(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceVariablePointersFeatures>();						}
 const VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT&			getVertexAttributeDivisorFeaturesEXT			(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT>();				}
+const VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT&			getVertexInputDynamicStateFeaturesEXT			(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT>();			}
 const VkPhysicalDeviceVulkanMemoryModelFeatures&					getVulkanMemoryModelFeatures					(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceVulkanMemoryModelFeatures>();						}
 const VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR&		getWorkgroupMemoryExplicitLayoutFeatures		(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR>();		}
+const VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT&				getYcbcr2Plane444FormatsFeaturesEXT				(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT>();				}
 const VkPhysicalDeviceYcbcrImageArraysFeaturesEXT&					getYcbcrImageArraysFeaturesEXT					(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceYcbcrImageArraysFeaturesEXT>();					}
 const VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR&		getZeroInitializeWorkgroupMemoryFeatures		(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR>();		}
diff --git a/external/vulkancts/framework/vulkan/vkDeviceFunctionPointers.inl b/external/vulkancts/framework/vulkan/vkDeviceFunctionPointers.inl
index 42d9bee..ebc3e6d 100644
--- a/external/vulkancts/framework/vulkan/vkDeviceFunctionPointers.inl
+++ b/external/vulkancts/framework/vulkan/vkDeviceFunctionPointers.inl
@@ -296,6 +296,13 @@
 SetPrivateDataEXTFunc								setPrivateDataEXT;
 GetPrivateDataEXTFunc								getPrivateDataEXT;
 CmdSetFragmentShadingRateEnumNVFunc					cmdSetFragmentShadingRateEnumNV;
+CmdSetVertexInputEXTFunc							cmdSetVertexInputEXT;
+CmdSetPatchControlPointsEXTFunc						cmdSetPatchControlPointsEXT;
+CmdSetRasterizerDiscardEnableEXTFunc				cmdSetRasterizerDiscardEnableEXT;
+CmdSetDepthBiasEnableEXTFunc						cmdSetDepthBiasEnableEXT;
+CmdSetLogicOpEXTFunc								cmdSetLogicOpEXT;
+CmdSetPrimitiveRestartEnableEXTFunc					cmdSetPrimitiveRestartEnableEXT;
+CmdSetColorWriteEnableEXTFunc						cmdSetColorWriteEnableEXT;
 CreateAccelerationStructureKHRFunc					createAccelerationStructureKHR;
 DestroyAccelerationStructureKHRFunc					destroyAccelerationStructureKHR;
 CmdBuildAccelerationStructuresKHRFunc				cmdBuildAccelerationStructuresKHR;
@@ -320,6 +327,22 @@
 CmdSetRayTracingPipelineStackSizeKHRFunc			cmdSetRayTracingPipelineStackSizeKHR;
 GetAndroidHardwareBufferPropertiesANDROIDFunc		getAndroidHardwareBufferPropertiesANDROID;
 GetMemoryAndroidHardwareBufferANDROIDFunc			getMemoryAndroidHardwareBufferANDROID;
+CreateVideoSessionKHRFunc							createVideoSessionKHR;
+DestroyVideoSessionKHRFunc							destroyVideoSessionKHR;
+GetVideoSessionMemoryRequirementsKHRFunc			getVideoSessionMemoryRequirementsKHR;
+BindVideoSessionMemoryKHRFunc						bindVideoSessionMemoryKHR;
+CreateVideoSessionParametersKHRFunc					createVideoSessionParametersKHR;
+UpdateVideoSessionParametersKHRFunc					updateVideoSessionParametersKHR;
+DestroyVideoSessionParametersKHRFunc				destroyVideoSessionParametersKHR;
+CmdBeginVideoCodingKHRFunc							cmdBeginVideoCodingKHR;
+CmdEndVideoCodingKHRFunc							cmdEndVideoCodingKHR;
+CmdControlVideoCodingKHRFunc						cmdControlVideoCodingKHR;
+CmdDecodeVideoKHRFunc								cmdDecodeVideoKHR;
+CmdEncodeVideoKHRFunc								cmdEncodeVideoKHR;
+GetMemoryZirconHandleFUCHSIAFunc					getMemoryZirconHandleFUCHSIA;
+GetMemoryZirconHandlePropertiesFUCHSIAFunc			getMemoryZirconHandlePropertiesFUCHSIA;
+ImportSemaphoreZirconHandleFUCHSIAFunc				importSemaphoreZirconHandleFUCHSIA;
+GetSemaphoreZirconHandleFUCHSIAFunc					getSemaphoreZirconHandleFUCHSIA;
 GetMemoryWin32HandleKHRFunc							getMemoryWin32HandleKHR;
 GetMemoryWin32HandlePropertiesKHRFunc				getMemoryWin32HandlePropertiesKHR;
 ImportSemaphoreWin32HandleKHRFunc					importSemaphoreWin32HandleKHR;
diff --git a/external/vulkancts/framework/vulkan/vkDeviceProperties.inl b/external/vulkancts/framework/vulkan/vkDeviceProperties.inl
index 8dabb0d..20475ad 100644
--- a/external/vulkancts/framework/vulkan/vkDeviceProperties.inl
+++ b/external/vulkancts/framework/vulkan/vkDeviceProperties.inl
@@ -41,6 +41,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"
@@ -162,6 +163,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&) {}
@@ -195,41 +197,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}; }
@@ -276,6 +279,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 def2bdd..ec8e02f 100644
--- a/external/vulkancts/framework/vulkan/vkDevicePropertiesForContextDecl.inl
+++ b/external/vulkancts/framework/vulkan/vkDevicePropertiesForContextDecl.inl
@@ -37,6 +37,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 836e343..b6dc682 100644
--- a/external/vulkancts/framework/vulkan/vkDevicePropertiesForContextDefs.inl
+++ b/external/vulkancts/framework/vulkan/vkDevicePropertiesForContextDefs.inl
@@ -37,6 +37,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 d752a84..6351269 100644
--- a/external/vulkancts/framework/vulkan/vkDevicePropertiesForDefaultDeviceDefs.inl
+++ b/external/vulkancts/framework/vulkan/vkDevicePropertiesForDefaultDeviceDefs.inl
@@ -37,6 +37,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 eb55eb0..d4fc47b 100644
--- a/external/vulkancts/framework/vulkan/vkExtensionFunctions.inl
+++ b/external/vulkancts/framework/vulkan/vkExtensionFunctions.inl
@@ -283,6 +283,10 @@
 	{
 		return;
 	}
+	if (extName == "VK_KHR_shader_integer_dot_product")
+	{
+		return;
+	}
 	if (extName == "VK_KHR_pipeline_library")
 	{
 		return;
@@ -786,6 +790,10 @@
 	{
 		return;
 	}
+	if (extName == "VK_NV_inherited_viewport_scissor")
+	{
+		return;
+	}
 	if (extName == "VK_EXT_texel_buffer_alignment")
 	{
 		return;
@@ -826,6 +834,10 @@
 	{
 		return;
 	}
+	if (extName == "VK_EXT_ycbcr_2plane_444_formats")
+	{
+		return;
+	}
 	if (extName == "VK_EXT_fragment_density_map2")
 	{
 		return;
@@ -852,6 +864,18 @@
 	{
 		return;
 	}
+	if (extName == "VK_EXT_vertex_input_dynamic_state")
+	{
+		return;
+	}
+	if (extName == "VK_EXT_extended_dynamic_state2")
+	{
+		return;
+	}
+	if (extName == "VK_EXT_color_write_enable")
+	{
+		return;
+	}
 	if (extName == "VK_KHR_acceleration_structure")
 	{
 		return;
@@ -873,15 +897,49 @@
 	{
 		return;
 	}
+	if (extName == "VK_KHR_video_queue")
+	{
+		functions.push_back("vkGetPhysicalDeviceVideoCapabilitiesKHR");
+		functions.push_back("vkGetPhysicalDeviceVideoFormatPropertiesKHR");
+		return;
+	}
+	if (extName == "VK_KHR_video_decode_queue")
+	{
+		return;
+	}
 	if (extName == "VK_KHR_portability_subset")
 	{
 		return;
 	}
+	if (extName == "VK_KHR_video_encode_queue")
+	{
+		return;
+	}
+	if (extName == "VK_EXT_video_encode_h264")
+	{
+		return;
+	}
+	if (extName == "VK_EXT_video_decode_h264")
+	{
+		return;
+	}
+	if (extName == "VK_EXT_video_decode_h265")
+	{
+		return;
+	}
 	if (extName == "VK_FUCHSIA_imagepipe_surface")
 	{
 		functions.push_back("vkCreateImagePipeSurfaceFUCHSIA");
 		return;
 	}
+	if (extName == "VK_FUCHSIA_external_memory")
+	{
+		return;
+	}
+	if (extName == "VK_FUCHSIA_external_semaphore")
+	{
+		return;
+	}
 	if (extName == "VK_GGP_stream_descriptor_surface")
 	{
 		functions.push_back("vkCreateStreamDescriptorSurfaceGGP");
@@ -1278,6 +1336,10 @@
 		functions.push_back("vkGetPipelineExecutableInternalRepresentationsKHR");
 		return;
 	}
+	if (extName == "VK_KHR_shader_integer_dot_product")
+	{
+		return;
+	}
 	if (extName == "VK_KHR_pipeline_library")
 	{
 		return;
@@ -1874,6 +1936,10 @@
 		functions.push_back("vkDestroyIndirectCommandsLayoutNV");
 		return;
 	}
+	if (extName == "VK_NV_inherited_viewport_scissor")
+	{
+		return;
+	}
 	if (extName == "VK_EXT_texel_buffer_alignment")
 	{
 		return;
@@ -1919,6 +1985,10 @@
 		functions.push_back("vkCmdSetFragmentShadingRateEnumNV");
 		return;
 	}
+	if (extName == "VK_EXT_ycbcr_2plane_444_formats")
+	{
+		return;
+	}
 	if (extName == "VK_EXT_fragment_density_map2")
 	{
 		return;
@@ -1943,6 +2013,25 @@
 	{
 		return;
 	}
+	if (extName == "VK_EXT_vertex_input_dynamic_state")
+	{
+		functions.push_back("vkCmdSetVertexInputEXT");
+		return;
+	}
+	if (extName == "VK_EXT_extended_dynamic_state2")
+	{
+		functions.push_back("vkCmdSetPatchControlPointsEXT");
+		functions.push_back("vkCmdSetRasterizerDiscardEnableEXT");
+		functions.push_back("vkCmdSetDepthBiasEnableEXT");
+		functions.push_back("vkCmdSetLogicOpEXT");
+		functions.push_back("vkCmdSetPrimitiveRestartEnableEXT");
+		return;
+	}
+	if (extName == "VK_EXT_color_write_enable")
+	{
+		functions.push_back("vkCmdSetColorWriteEnableEXT");
+		return;
+	}
 	if (extName == "VK_KHR_acceleration_structure")
 	{
 		functions.push_back("vkCreateAccelerationStructureKHR");
@@ -1987,14 +2076,62 @@
 		functions.push_back("vkGetMemoryAndroidHardwareBufferANDROID");
 		return;
 	}
+	if (extName == "VK_KHR_video_queue")
+	{
+		functions.push_back("vkCreateVideoSessionKHR");
+		functions.push_back("vkDestroyVideoSessionKHR");
+		functions.push_back("vkGetVideoSessionMemoryRequirementsKHR");
+		functions.push_back("vkBindVideoSessionMemoryKHR");
+		functions.push_back("vkCreateVideoSessionParametersKHR");
+		functions.push_back("vkUpdateVideoSessionParametersKHR");
+		functions.push_back("vkDestroyVideoSessionParametersKHR");
+		functions.push_back("vkCmdBeginVideoCodingKHR");
+		functions.push_back("vkCmdEndVideoCodingKHR");
+		functions.push_back("vkCmdControlVideoCodingKHR");
+		return;
+	}
+	if (extName == "VK_KHR_video_decode_queue")
+	{
+		functions.push_back("vkCmdDecodeVideoKHR");
+		return;
+	}
 	if (extName == "VK_KHR_portability_subset")
 	{
 		return;
 	}
+	if (extName == "VK_KHR_video_encode_queue")
+	{
+		functions.push_back("vkCmdEncodeVideoKHR");
+		return;
+	}
+	if (extName == "VK_EXT_video_encode_h264")
+	{
+		return;
+	}
+	if (extName == "VK_EXT_video_decode_h264")
+	{
+		return;
+	}
+	if (extName == "VK_EXT_video_decode_h265")
+	{
+		return;
+	}
 	if (extName == "VK_FUCHSIA_imagepipe_surface")
 	{
 		return;
 	}
+	if (extName == "VK_FUCHSIA_external_memory")
+	{
+		functions.push_back("vkGetMemoryZirconHandleFUCHSIA");
+		functions.push_back("vkGetMemoryZirconHandlePropertiesFUCHSIA");
+		return;
+	}
+	if (extName == "VK_FUCHSIA_external_semaphore")
+	{
+		functions.push_back("vkImportSemaphoreZirconHandleFUCHSIA");
+		functions.push_back("vkGetSemaphoreZirconHandleFUCHSIA");
+		return;
+	}
 	if (extName == "VK_GGP_stream_descriptor_surface")
 	{
 		return;
@@ -2104,6 +2241,7 @@
 	"VK_EXT_headless_surface",
 	"VK_NV_acquire_winrt_display",
 	"VK_KHR_android_surface",
+	"VK_KHR_video_queue",
 	"VK_FUCHSIA_imagepipe_surface",
 	"VK_GGP_stream_descriptor_surface",
 	"VK_MVK_ios_surface",
@@ -2173,9 +2311,16 @@
 	"VK_NV_device_generated_commands",
 	"VK_EXT_private_data",
 	"VK_NV_fragment_shading_rate_enums",
+	"VK_EXT_vertex_input_dynamic_state",
+	"VK_EXT_extended_dynamic_state2",
+	"VK_EXT_color_write_enable",
 	"VK_KHR_acceleration_structure",
 	"VK_KHR_ray_tracing_pipeline",
 	"VK_ANDROID_external_memory_android_hardware_buffer",
+	"VK_KHR_video_decode_queue",
+	"VK_KHR_video_encode_queue",
+	"VK_FUCHSIA_external_memory",
+	"VK_FUCHSIA_external_semaphore",
 	"VK_KHR_external_memory_win32",
 	"VK_KHR_external_semaphore_win32",
 	"VK_KHR_external_fence_win32",
diff --git a/external/vulkancts/framework/vulkan/vkFunctionPointerTypes.inl b/external/vulkancts/framework/vulkan/vkFunctionPointerTypes.inl
index b42a7c9..d0c7c0d 100644
--- a/external/vulkancts/framework/vulkan/vkFunctionPointerTypes.inl
+++ b/external/vulkancts/framework/vulkan/vkFunctionPointerTypes.inl
@@ -402,6 +402,13 @@
 typedef VKAPI_ATTR void					(VKAPI_CALL* CmdSetFragmentShadingRateEnumNVFunc)									(VkCommandBuffer commandBuffer, VkFragmentShadingRateNV shadingRate, const VkFragmentShadingRateCombinerOpKHR combinerOps[2]);
 typedef VKAPI_ATTR VkResult				(VKAPI_CALL* AcquireWinrtDisplayNVFunc)												(VkPhysicalDevice physicalDevice, VkDisplayKHR display);
 typedef VKAPI_ATTR VkResult				(VKAPI_CALL* GetWinrtDisplayNVFunc)													(VkPhysicalDevice physicalDevice, deUint32 deviceRelativeId, VkDisplayKHR* pDisplay);
+typedef VKAPI_ATTR void					(VKAPI_CALL* CmdSetVertexInputEXTFunc)												(VkCommandBuffer commandBuffer, deUint32 vertexBindingDescriptionCount, const VkVertexInputBindingDescription2EXT* pVertexBindingDescriptions, deUint32 vertexAttributeDescriptionCount, const VkVertexInputAttributeDescription2EXT* pVertexAttributeDescriptions);
+typedef VKAPI_ATTR void					(VKAPI_CALL* CmdSetPatchControlPointsEXTFunc)										(VkCommandBuffer commandBuffer, deUint32 patchControlPoints);
+typedef VKAPI_ATTR void					(VKAPI_CALL* CmdSetRasterizerDiscardEnableEXTFunc)									(VkCommandBuffer commandBuffer, VkBool32 rasterizerDiscardEnable);
+typedef VKAPI_ATTR void					(VKAPI_CALL* CmdSetDepthBiasEnableEXTFunc)											(VkCommandBuffer commandBuffer, VkBool32 depthBiasEnable);
+typedef VKAPI_ATTR void					(VKAPI_CALL* CmdSetLogicOpEXTFunc)													(VkCommandBuffer commandBuffer, VkLogicOp logicOp);
+typedef VKAPI_ATTR void					(VKAPI_CALL* CmdSetPrimitiveRestartEnableEXTFunc)									(VkCommandBuffer commandBuffer, VkBool32 primitiveRestartEnable);
+typedef VKAPI_ATTR void					(VKAPI_CALL* CmdSetColorWriteEnableEXTFunc)											(VkCommandBuffer commandBuffer, deUint32 attachmentCount, const VkBool32* pColorWriteEnables);
 typedef VKAPI_ATTR VkResult				(VKAPI_CALL* CreateAccelerationStructureKHRFunc)									(VkDevice device, const VkAccelerationStructureCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkAccelerationStructureKHR* pAccelerationStructure);
 typedef VKAPI_ATTR void					(VKAPI_CALL* DestroyAccelerationStructureKHRFunc)									(VkDevice device, VkAccelerationStructureKHR accelerationStructure, const VkAllocationCallbacks* pAllocator);
 typedef VKAPI_ATTR void					(VKAPI_CALL* CmdBuildAccelerationStructuresKHRFunc)									(VkCommandBuffer commandBuffer, deUint32 infoCount, const VkAccelerationStructureBuildGeometryInfoKHR* pInfos, const VkAccelerationStructureBuildRangeInfoKHR* const* ppBuildRangeInfos);
@@ -427,7 +434,25 @@
 typedef VKAPI_ATTR VkResult				(VKAPI_CALL* CreateAndroidSurfaceKHRFunc)											(VkInstance instance, const VkAndroidSurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
 typedef VKAPI_ATTR VkResult				(VKAPI_CALL* GetAndroidHardwareBufferPropertiesANDROIDFunc)							(VkDevice device, const struct pt::AndroidHardwareBufferPtr buffer, VkAndroidHardwareBufferPropertiesANDROID* pProperties);
 typedef VKAPI_ATTR VkResult				(VKAPI_CALL* GetMemoryAndroidHardwareBufferANDROIDFunc)								(VkDevice device, const VkMemoryGetAndroidHardwareBufferInfoANDROID* pInfo, struct pt::AndroidHardwareBufferPtr* pBuffer);
+typedef VKAPI_ATTR VkResult				(VKAPI_CALL* GetPhysicalDeviceVideoCapabilitiesKHRFunc)								(VkPhysicalDevice physicalDevice, const VkVideoProfileKHR* pVideoProfile, VkVideoCapabilitiesKHR* pCapabilities);
+typedef VKAPI_ATTR VkResult				(VKAPI_CALL* GetPhysicalDeviceVideoFormatPropertiesKHRFunc)							(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceVideoFormatInfoKHR* pVideoFormatInfo, deUint32* pVideoFormatPropertyCount, VkVideoFormatPropertiesKHR* pVideoFormatProperties);
+typedef VKAPI_ATTR VkResult				(VKAPI_CALL* CreateVideoSessionKHRFunc)												(VkDevice device, const VkVideoSessionCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkVideoSessionKHR* pVideoSession);
+typedef VKAPI_ATTR void					(VKAPI_CALL* DestroyVideoSessionKHRFunc)											(VkDevice device, VkVideoSessionKHR videoSession, const VkAllocationCallbacks* pAllocator);
+typedef VKAPI_ATTR VkResult				(VKAPI_CALL* GetVideoSessionMemoryRequirementsKHRFunc)								(VkDevice device, VkVideoSessionKHR videoSession, deUint32* pVideoSessionMemoryRequirementsCount, VkVideoGetMemoryPropertiesKHR* pVideoSessionMemoryRequirements);
+typedef VKAPI_ATTR VkResult				(VKAPI_CALL* BindVideoSessionMemoryKHRFunc)											(VkDevice device, VkVideoSessionKHR videoSession, deUint32 videoSessionBindMemoryCount, const VkVideoBindMemoryKHR* pVideoSessionBindMemories);
+typedef VKAPI_ATTR VkResult				(VKAPI_CALL* CreateVideoSessionParametersKHRFunc)									(VkDevice device, const VkVideoSessionParametersCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkVideoSessionParametersKHR* pVideoSessionParameters);
+typedef VKAPI_ATTR VkResult				(VKAPI_CALL* UpdateVideoSessionParametersKHRFunc)									(VkDevice device, VkVideoSessionParametersKHR videoSessionParameters, const VkVideoSessionParametersUpdateInfoKHR* pUpdateInfo);
+typedef VKAPI_ATTR void					(VKAPI_CALL* DestroyVideoSessionParametersKHRFunc)									(VkDevice device, VkVideoSessionParametersKHR videoSessionParameters, const VkAllocationCallbacks* pAllocator);
+typedef VKAPI_ATTR void					(VKAPI_CALL* CmdBeginVideoCodingKHRFunc)											(VkCommandBuffer commandBuffer, const VkVideoBeginCodingInfoKHR* pBeginInfo);
+typedef VKAPI_ATTR void					(VKAPI_CALL* CmdEndVideoCodingKHRFunc)												(VkCommandBuffer commandBuffer, const VkVideoEndCodingInfoKHR* pEndCodingInfo);
+typedef VKAPI_ATTR void					(VKAPI_CALL* CmdControlVideoCodingKHRFunc)											(VkCommandBuffer commandBuffer, const VkVideoCodingControlInfoKHR* pCodingControlInfo);
+typedef VKAPI_ATTR void					(VKAPI_CALL* CmdDecodeVideoKHRFunc)													(VkCommandBuffer commandBuffer, const VkVideoDecodeInfoKHR* pFrameInfo);
+typedef VKAPI_ATTR void					(VKAPI_CALL* CmdEncodeVideoKHRFunc)													(VkCommandBuffer commandBuffer, const VkVideoEncodeInfoKHR* pEncodeInfo);
 typedef VKAPI_ATTR VkResult				(VKAPI_CALL* CreateImagePipeSurfaceFUCHSIAFunc)										(VkInstance instance, const VkImagePipeSurfaceCreateInfoFUCHSIA* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
+typedef VKAPI_ATTR VkResult				(VKAPI_CALL* GetMemoryZirconHandleFUCHSIAFunc)										(VkDevice device, const VkMemoryGetZirconHandleInfoFUCHSIA* pGetZirconHandleInfo, pt::zx_handle_t* pZirconHandle);
+typedef VKAPI_ATTR VkResult				(VKAPI_CALL* GetMemoryZirconHandlePropertiesFUCHSIAFunc)							(VkDevice device, VkExternalMemoryHandleTypeFlagBits handleType, pt::zx_handle_t zirconHandle, VkMemoryZirconHandlePropertiesFUCHSIA* pMemoryZirconHandleProperties);
+typedef VKAPI_ATTR VkResult				(VKAPI_CALL* ImportSemaphoreZirconHandleFUCHSIAFunc)								(VkDevice device, const VkImportSemaphoreZirconHandleInfoFUCHSIA* pImportSemaphoreZirconHandleInfo);
+typedef VKAPI_ATTR VkResult				(VKAPI_CALL* GetSemaphoreZirconHandleFUCHSIAFunc)									(VkDevice device, const VkSemaphoreGetZirconHandleInfoFUCHSIA* pGetZirconHandleInfo, pt::zx_handle_t* pZirconHandle);
 typedef VKAPI_ATTR VkResult				(VKAPI_CALL* CreateStreamDescriptorSurfaceGGPFunc)									(VkInstance instance, const VkStreamDescriptorSurfaceCreateInfoGGP* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
 typedef VKAPI_ATTR VkResult				(VKAPI_CALL* CreateIOSSurfaceMVKFunc)												(VkInstance instance, const VkIOSSurfaceCreateInfoMVK* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
 typedef VKAPI_ATTR VkResult				(VKAPI_CALL* CreateMacOSSurfaceMVKFunc)												(VkInstance instance, const VkMacOSSurfaceCreateInfoMVK* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
diff --git a/external/vulkancts/framework/vulkan/vkGetStructureTypeImpl.inl b/external/vulkancts/framework/vulkan/vkGetStructureTypeImpl.inl
index 362b819..bf9425d 100644
--- a/external/vulkancts/framework/vulkan/vkGetStructureTypeImpl.inl
+++ b/external/vulkancts/framework/vulkan/vkGetStructureTypeImpl.inl
@@ -1062,6 +1062,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;
@@ -1977,6 +1987,16 @@
 	return VK_STRUCTURE_TYPE_GENERATED_COMMANDS_MEMORY_REQUIREMENTS_INFO_NV;
 }
 
+template<> VkStructureType getStructureType<VkPhysicalDeviceInheritedViewportScissorFeaturesNV> (void)
+{
+	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INHERITED_VIEWPORT_SCISSOR_FEATURES_NV;
+}
+
+template<> VkStructureType getStructureType<VkCommandBufferInheritanceViewportScissorInfoNV> (void)
+{
+	return VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_VIEWPORT_SCISSOR_INFO_NV;
+}
+
 template<> VkStructureType getStructureType<VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT> (void)
 {
 	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT;
@@ -2082,6 +2102,11 @@
 	return VK_STRUCTURE_TYPE_PIPELINE_FRAGMENT_SHADING_RATE_ENUM_STATE_CREATE_INFO_NV;
 }
 
+template<> VkStructureType getStructureType<VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT> (void)
+{
+	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_2_PLANE_444_FORMATS_FEATURES_EXT;
+}
+
 template<> VkStructureType getStructureType<VkPhysicalDeviceFragmentDensityMap2FeaturesEXT> (void)
 {
 	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_FEATURES_EXT;
@@ -2117,6 +2142,36 @@
 	return VK_STRUCTURE_TYPE_MUTABLE_DESCRIPTOR_TYPE_CREATE_INFO_VALVE;
 }
 
+template<> VkStructureType getStructureType<VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT> (void)
+{
+	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_INPUT_DYNAMIC_STATE_FEATURES_EXT;
+}
+
+template<> VkStructureType getStructureType<VkVertexInputBindingDescription2EXT> (void)
+{
+	return VK_STRUCTURE_TYPE_VERTEX_INPUT_BINDING_DESCRIPTION_2_EXT;
+}
+
+template<> VkStructureType getStructureType<VkVertexInputAttributeDescription2EXT> (void)
+{
+	return VK_STRUCTURE_TYPE_VERTEX_INPUT_ATTRIBUTE_DESCRIPTION_2_EXT;
+}
+
+template<> VkStructureType getStructureType<VkPhysicalDeviceExtendedDynamicState2FeaturesEXT> (void)
+{
+	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_2_FEATURES_EXT;
+}
+
+template<> VkStructureType getStructureType<VkPhysicalDeviceColorWriteEnableFeaturesEXT> (void)
+{
+	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COLOR_WRITE_ENABLE_FEATURES_EXT;
+}
+
+template<> VkStructureType getStructureType<VkPipelineColorWriteCreateInfoEXT> (void)
+{
+	return VK_STRUCTURE_TYPE_PIPELINE_COLOR_WRITE_CREATE_INFO_EXT;
+}
+
 template<> VkStructureType getStructureType<VkAccelerationStructureGeometryTrianglesDataKHR> (void)
 {
 	return VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_TRIANGLES_DATA_KHR;
@@ -2257,6 +2312,91 @@
 	return VK_STRUCTURE_TYPE_EXTERNAL_FORMAT_ANDROID;
 }
 
+template<> VkStructureType getStructureType<VkVideoQueueFamilyProperties2KHR> (void)
+{
+	return VK_STRUCTURE_TYPE_VIDEO_QUEUE_FAMILY_PROPERTIES_2_KHR;
+}
+
+template<> VkStructureType getStructureType<VkVideoProfileKHR> (void)
+{
+	return VK_STRUCTURE_TYPE_VIDEO_PROFILE_KHR;
+}
+
+template<> VkStructureType getStructureType<VkVideoProfilesKHR> (void)
+{
+	return VK_STRUCTURE_TYPE_VIDEO_PROFILES_KHR;
+}
+
+template<> VkStructureType getStructureType<VkVideoCapabilitiesKHR> (void)
+{
+	return VK_STRUCTURE_TYPE_VIDEO_CAPABILITIES_KHR;
+}
+
+template<> VkStructureType getStructureType<VkPhysicalDeviceVideoFormatInfoKHR> (void)
+{
+	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_FORMAT_INFO_KHR;
+}
+
+template<> VkStructureType getStructureType<VkVideoFormatPropertiesKHR> (void)
+{
+	return VK_STRUCTURE_TYPE_VIDEO_FORMAT_PROPERTIES_KHR;
+}
+
+template<> VkStructureType getStructureType<VkVideoPictureResourceKHR> (void)
+{
+	return VK_STRUCTURE_TYPE_VIDEO_PICTURE_RESOURCE_KHR;
+}
+
+template<> VkStructureType getStructureType<VkVideoReferenceSlotKHR> (void)
+{
+	return VK_STRUCTURE_TYPE_VIDEO_REFERENCE_SLOT_KHR;
+}
+
+template<> VkStructureType getStructureType<VkVideoGetMemoryPropertiesKHR> (void)
+{
+	return VK_STRUCTURE_TYPE_VIDEO_GET_MEMORY_PROPERTIES_KHR;
+}
+
+template<> VkStructureType getStructureType<VkVideoBindMemoryKHR> (void)
+{
+	return VK_STRUCTURE_TYPE_VIDEO_BIND_MEMORY_KHR;
+}
+
+template<> VkStructureType getStructureType<VkVideoSessionCreateInfoKHR> (void)
+{
+	return VK_STRUCTURE_TYPE_VIDEO_SESSION_CREATE_INFO_KHR;
+}
+
+template<> VkStructureType getStructureType<VkVideoSessionParametersCreateInfoKHR> (void)
+{
+	return VK_STRUCTURE_TYPE_VIDEO_SESSION_PARAMETERS_CREATE_INFO_KHR;
+}
+
+template<> VkStructureType getStructureType<VkVideoSessionParametersUpdateInfoKHR> (void)
+{
+	return VK_STRUCTURE_TYPE_VIDEO_SESSION_PARAMETERS_UPDATE_INFO_KHR;
+}
+
+template<> VkStructureType getStructureType<VkVideoBeginCodingInfoKHR> (void)
+{
+	return VK_STRUCTURE_TYPE_VIDEO_BEGIN_CODING_INFO_KHR;
+}
+
+template<> VkStructureType getStructureType<VkVideoEndCodingInfoKHR> (void)
+{
+	return VK_STRUCTURE_TYPE_VIDEO_END_CODING_INFO_KHR;
+}
+
+template<> VkStructureType getStructureType<VkVideoCodingControlInfoKHR> (void)
+{
+	return VK_STRUCTURE_TYPE_VIDEO_CODING_CONTROL_INFO_KHR;
+}
+
+template<> VkStructureType getStructureType<VkVideoDecodeInfoKHR> (void)
+{
+	return VK_STRUCTURE_TYPE_VIDEO_DECODE_INFO_KHR;
+}
+
 template<> VkStructureType getStructureType<VkPhysicalDevicePortabilitySubsetFeaturesKHR> (void)
 {
 	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PORTABILITY_SUBSET_FEATURES_KHR;
@@ -2267,11 +2407,166 @@
 	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PORTABILITY_SUBSET_PROPERTIES_KHR;
 }
 
+template<> VkStructureType getStructureType<VkVideoEncodeInfoKHR> (void)
+{
+	return VK_STRUCTURE_TYPE_VIDEO_ENCODE_INFO_KHR;
+}
+
+template<> VkStructureType getStructureType<VkVideoEncodeRateControlInfoKHR> (void)
+{
+	return VK_STRUCTURE_TYPE_VIDEO_ENCODE_RATE_CONTROL_INFO_KHR;
+}
+
+template<> VkStructureType getStructureType<VkVideoEncodeH264CapabilitiesEXT> (void)
+{
+	return VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_CAPABILITIES_EXT;
+}
+
+template<> VkStructureType getStructureType<VkVideoEncodeH264SessionCreateInfoEXT> (void)
+{
+	return VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_SESSION_CREATE_INFO_EXT;
+}
+
+template<> VkStructureType getStructureType<VkVideoEncodeH264SessionParametersAddInfoEXT> (void)
+{
+	return VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_SESSION_PARAMETERS_ADD_INFO_EXT;
+}
+
+template<> VkStructureType getStructureType<VkVideoEncodeH264SessionParametersCreateInfoEXT> (void)
+{
+	return VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_SESSION_PARAMETERS_CREATE_INFO_EXT;
+}
+
+template<> VkStructureType getStructureType<VkVideoEncodeH264DpbSlotInfoEXT> (void)
+{
+	return VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_DPB_SLOT_INFO_EXT;
+}
+
+template<> VkStructureType getStructureType<VkVideoEncodeH264NaluSliceEXT> (void)
+{
+	return VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_NALU_SLICE_EXT;
+}
+
+template<> VkStructureType getStructureType<VkVideoEncodeH264VclFrameInfoEXT> (void)
+{
+	return VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_VCL_FRAME_INFO_EXT;
+}
+
+template<> VkStructureType getStructureType<VkVideoEncodeH264EmitPictureParametersEXT> (void)
+{
+	return VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_EMIT_PICTURE_PARAMETERS_EXT;
+}
+
+template<> VkStructureType getStructureType<VkVideoEncodeH264ProfileEXT> (void)
+{
+	return VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_PROFILE_EXT;
+}
+
+template<> VkStructureType getStructureType<VkVideoDecodeH264ProfileEXT> (void)
+{
+	return VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_PROFILE_EXT;
+}
+
+template<> VkStructureType getStructureType<VkVideoDecodeH264CapabilitiesEXT> (void)
+{
+	return VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_CAPABILITIES_EXT;
+}
+
+template<> VkStructureType getStructureType<VkVideoDecodeH264SessionCreateInfoEXT> (void)
+{
+	return VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_SESSION_CREATE_INFO_EXT;
+}
+
+template<> VkStructureType getStructureType<VkVideoDecodeH264SessionParametersAddInfoEXT> (void)
+{
+	return VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_SESSION_PARAMETERS_ADD_INFO_EXT;
+}
+
+template<> VkStructureType getStructureType<VkVideoDecodeH264SessionParametersCreateInfoEXT> (void)
+{
+	return VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_SESSION_PARAMETERS_CREATE_INFO_EXT;
+}
+
+template<> VkStructureType getStructureType<VkVideoDecodeH264PictureInfoEXT> (void)
+{
+	return VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_PICTURE_INFO_EXT;
+}
+
+template<> VkStructureType getStructureType<VkVideoDecodeH264MvcEXT> (void)
+{
+	return VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_MVC_EXT;
+}
+
+template<> VkStructureType getStructureType<VkVideoDecodeH264DpbSlotInfoEXT> (void)
+{
+	return VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_DPB_SLOT_INFO_EXT;
+}
+
+template<> VkStructureType getStructureType<VkVideoDecodeH265ProfileEXT> (void)
+{
+	return VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_PROFILE_EXT;
+}
+
+template<> VkStructureType getStructureType<VkVideoDecodeH265CapabilitiesEXT> (void)
+{
+	return VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_CAPABILITIES_EXT;
+}
+
+template<> VkStructureType getStructureType<VkVideoDecodeH265SessionCreateInfoEXT> (void)
+{
+	return VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_SESSION_CREATE_INFO_EXT;
+}
+
+template<> VkStructureType getStructureType<VkVideoDecodeH265SessionParametersAddInfoEXT> (void)
+{
+	return VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_SESSION_PARAMETERS_ADD_INFO_EXT;
+}
+
+template<> VkStructureType getStructureType<VkVideoDecodeH265SessionParametersCreateInfoEXT> (void)
+{
+	return VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_SESSION_PARAMETERS_CREATE_INFO_EXT;
+}
+
+template<> VkStructureType getStructureType<VkVideoDecodeH265PictureInfoEXT> (void)
+{
+	return VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_PICTURE_INFO_EXT;
+}
+
+template<> VkStructureType getStructureType<VkVideoDecodeH265DpbSlotInfoEXT> (void)
+{
+	return VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_DPB_SLOT_INFO_EXT;
+}
+
 template<> VkStructureType getStructureType<VkImagePipeSurfaceCreateInfoFUCHSIA> (void)
 {
 	return VK_STRUCTURE_TYPE_IMAGEPIPE_SURFACE_CREATE_INFO_FUCHSIA;
 }
 
+template<> VkStructureType getStructureType<VkImportMemoryZirconHandleInfoFUCHSIA> (void)
+{
+	return VK_STRUCTURE_TYPE_IMPORT_MEMORY_ZIRCON_HANDLE_INFO_FUCHSIA;
+}
+
+template<> VkStructureType getStructureType<VkMemoryZirconHandlePropertiesFUCHSIA> (void)
+{
+	return VK_STRUCTURE_TYPE_MEMORY_ZIRCON_HANDLE_PROPERTIES_FUCHSIA;
+}
+
+template<> VkStructureType getStructureType<VkMemoryGetZirconHandleInfoFUCHSIA> (void)
+{
+	return VK_STRUCTURE_TYPE_MEMORY_GET_ZIRCON_HANDLE_INFO_FUCHSIA;
+}
+
+template<> VkStructureType getStructureType<VkImportSemaphoreZirconHandleInfoFUCHSIA> (void)
+{
+	return VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_ZIRCON_HANDLE_INFO_FUCHSIA;
+}
+
+template<> VkStructureType getStructureType<VkSemaphoreGetZirconHandleInfoFUCHSIA> (void)
+{
+	return VK_STRUCTURE_TYPE_SEMAPHORE_GET_ZIRCON_HANDLE_INFO_FUCHSIA;
+}
+
 template<> VkStructureType getStructureType<VkStreamDescriptorSurfaceCreateInfoGGP> (void)
 {
 	return VK_STRUCTURE_TYPE_STREAM_DESCRIPTOR_SURFACE_CREATE_INFO_GGP;
diff --git a/external/vulkancts/framework/vulkan/vkHandleType.inl b/external/vulkancts/framework/vulkan/vkHandleType.inl
index 4ed54ab..0f7bb76 100644
--- a/external/vulkancts/framework/vulkan/vkHandleType.inl
+++ b/external/vulkancts/framework/vulkan/vkHandleType.inl
@@ -44,8 +44,10 @@
 	HANDLE_TYPE_INDIRECT_COMMANDS_LAYOUT_NV,
 	HANDLE_TYPE_PRIVATE_DATA_SLOT_EXT,
 	HANDLE_TYPE_ACCELERATION_STRUCTURE_KHR,
+	HANDLE_TYPE_VIDEO_SESSION_KHR,
+	HANDLE_TYPE_VIDEO_SESSION_PARAMETERS_KHR,
 	HANDLE_TYPE_SAMPLER_YCBCR_CONVERSION_KHR		= HANDLE_TYPE_SAMPLER_YCBCR_CONVERSION,
 	HANDLE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_KHR		= HANDLE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE,
-	HANDLE_TYPE_LAST								= HANDLE_TYPE_ACCELERATION_STRUCTURE_KHR + 1
+	HANDLE_TYPE_LAST								= HANDLE_TYPE_VIDEO_SESSION_PARAMETERS_KHR + 1
 };
 
diff --git a/external/vulkancts/framework/vulkan/vkImageUtil.cpp b/external/vulkancts/framework/vulkan/vkImageUtil.cpp
index 89b3e0e..8895f1b 100644
--- a/external/vulkancts/framework/vulkan/vkImageUtil.cpp
+++ b/external/vulkancts/framework/vulkan/vkImageUtil.cpp
@@ -203,40 +203,44 @@
 {
 	switch (format)
 	{
-		case VK_FORMAT_G8B8G8R8_422_UNORM_KHR:
-		case VK_FORMAT_B8G8R8G8_422_UNORM_KHR:
-		case VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM_KHR:
-		case VK_FORMAT_G8_B8R8_2PLANE_420_UNORM_KHR:
-		case VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM_KHR:
-		case VK_FORMAT_G8_B8R8_2PLANE_422_UNORM_KHR:
-		case VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM_KHR:
-		case VK_FORMAT_R10X6_UNORM_PACK16_KHR:
-		case VK_FORMAT_R10X6G10X6_UNORM_2PACK16_KHR:
-		case VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16_KHR:
-		case VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16_KHR:
-		case VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16_KHR:
-		case VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16_KHR:
-		case VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16_KHR:
-		case VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16_KHR:
-		case VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16_KHR:
-		case VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16_KHR:
-		case VK_FORMAT_R12X4_UNORM_PACK16_KHR:
-		case VK_FORMAT_R12X4G12X4_UNORM_2PACK16_KHR:
-		case VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16_KHR:
-		case VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16_KHR:
-		case VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16_KHR:
-		case VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16_KHR:
-		case VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16_KHR:
-		case VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16_KHR:
-		case VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16_KHR:
-		case VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16_KHR:
-		case VK_FORMAT_G16B16G16R16_422_UNORM_KHR:
-		case VK_FORMAT_B16G16R16G16_422_UNORM_KHR:
-		case VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM_KHR:
-		case VK_FORMAT_G16_B16R16_2PLANE_420_UNORM_KHR:
-		case VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM_KHR:
-		case VK_FORMAT_G16_B16R16_2PLANE_422_UNORM_KHR:
-		case VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM_KHR:
+		case VK_FORMAT_G8B8G8R8_422_UNORM:
+		case VK_FORMAT_B8G8R8G8_422_UNORM:
+		case VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM:
+		case VK_FORMAT_G8_B8R8_2PLANE_420_UNORM:
+		case VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM:
+		case VK_FORMAT_G8_B8R8_2PLANE_422_UNORM:
+		case VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM:
+		case VK_FORMAT_R10X6_UNORM_PACK16:
+		case VK_FORMAT_R10X6G10X6_UNORM_2PACK16:
+		case VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16:
+		case VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16:
+		case VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16:
+		case VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16:
+		case VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16:
+		case VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16:
+		case VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16:
+		case VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16:
+		case VK_FORMAT_R12X4_UNORM_PACK16:
+		case VK_FORMAT_R12X4G12X4_UNORM_2PACK16:
+		case VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16:
+		case VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16:
+		case VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16:
+		case VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16:
+		case VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16:
+		case VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16:
+		case VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16:
+		case VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16:
+		case VK_FORMAT_G16B16G16R16_422_UNORM:
+		case VK_FORMAT_B16G16R16G16_422_UNORM:
+		case VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM:
+		case VK_FORMAT_G16_B16R16_2PLANE_420_UNORM:
+		case VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM:
+		case VK_FORMAT_G16_B16R16_2PLANE_422_UNORM:
+		case VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM:
+		case VK_FORMAT_G8_B8R8_2PLANE_444_UNORM_EXT:
+		case VK_FORMAT_G10X6_B10X6R10X6_2PLANE_444_UNORM_3PACK16_EXT:
+		case VK_FORMAT_G12X4_B12X4R12X4_2PLANE_444_UNORM_3PACK16_EXT:
+		case VK_FORMAT_G16_B16R16_2PLANE_444_UNORM_EXT:
 			return true;
 
 		default:
@@ -244,18 +248,33 @@
 	}
 }
 
+bool isYCbCrExtensionFormat (VkFormat format)
+{
+	switch (format)
+	{
+	case VK_FORMAT_G8_B8R8_2PLANE_444_UNORM_EXT:
+	case VK_FORMAT_G10X6_B10X6R10X6_2PLANE_444_UNORM_3PACK16_EXT:
+	case VK_FORMAT_G12X4_B12X4R12X4_2PLANE_444_UNORM_3PACK16_EXT:
+	case VK_FORMAT_G16_B16R16_2PLANE_444_UNORM_EXT:
+		return true;
+
+	default:
+		return false;
+	}
+}
+
 bool isYCbCr420Format (VkFormat format)
 {
 	switch (format)
 	{
-		case VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM_KHR:
-		case VK_FORMAT_G8_B8R8_2PLANE_420_UNORM_KHR:
-		case VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16_KHR:
-		case VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16_KHR:
-		case VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16_KHR:
-		case VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16_KHR:
-		case VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM_KHR:
-		case VK_FORMAT_G16_B16R16_2PLANE_420_UNORM_KHR:
+		case VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM:
+		case VK_FORMAT_G8_B8R8_2PLANE_420_UNORM:
+		case VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16:
+		case VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16:
+		case VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16:
+		case VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16:
+		case VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM:
+		case VK_FORMAT_G16_B16R16_2PLANE_420_UNORM:
 			return true;
 
 		default:
@@ -267,22 +286,22 @@
 {
 	switch (format)
 	{
-		case VK_FORMAT_G8B8G8R8_422_UNORM_KHR:
-		case VK_FORMAT_B8G8R8G8_422_UNORM_KHR:
-		case VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM_KHR:
-		case VK_FORMAT_G8_B8R8_2PLANE_422_UNORM_KHR:
-		case VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16_KHR:
-		case VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16_KHR:
-		case VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16_KHR:
-		case VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16_KHR:
-		case VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16_KHR:
-		case VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16_KHR:
-		case VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16_KHR:
-		case VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16_KHR:
-		case VK_FORMAT_G16B16G16R16_422_UNORM_KHR:
-		case VK_FORMAT_B16G16R16G16_422_UNORM_KHR:
-		case VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM_KHR:
-		case VK_FORMAT_G16_B16R16_2PLANE_422_UNORM_KHR:
+		case VK_FORMAT_G8B8G8R8_422_UNORM:
+		case VK_FORMAT_B8G8R8G8_422_UNORM:
+		case VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM:
+		case VK_FORMAT_G8_B8R8_2PLANE_422_UNORM:
+		case VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16:
+		case VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16:
+		case VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16:
+		case VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16:
+		case VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16:
+		case VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16:
+		case VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16:
+		case VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16:
+		case VK_FORMAT_G16B16G16R16_422_UNORM:
+		case VK_FORMAT_B16G16R16G16_422_UNORM:
+		case VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM:
+		case VK_FORMAT_G16_B16R16_2PLANE_422_UNORM:
 			return true;
 
 		default:
@@ -301,16 +320,105 @@
 
 	const deUint8	unorm			= (deUint8)tcu::TEXTURECHANNELCLASS_UNSIGNED_FIXED_POINT;
 
+	if (format >= VK_FORMAT_G8_B8R8_2PLANE_444_UNORM_EXT && format <= VK_FORMAT_G16_B16R16_2PLANE_444_UNORM_EXT)
+	{
+		static const PlanarFormatDescription s_formatInfo[] =
+		{
+			// VK_FORMAT_G8_B8R8_2PLANE_444_UNORM
+			{
+				2, // planes
+				chanR|chanG|chanB,
+				1,1,
+				{
+				//		Size	WDiv	HDiv	planeCompatibleFormat
+					{	1,		1,		1,		VK_FORMAT_R8_UNORM },
+					{	2,		1,		1,		VK_FORMAT_R8G8_UNORM },
+					{	0,		0,		0,		VK_FORMAT_UNDEFINED },
+				},
+				{
+				//		Plane	Type	Offs	Size	Stride
+					{	1,		unorm,	8,		8,		2 },	// R
+					{	0,		unorm,	0,		8,		1 },	// G
+					{	1,		unorm,	0,		8,		2 },	// B
+					{ 0, 0, 0, 0, 0 }
+				}
+			},
+			// VK_FORMAT_G10X6_B10X6R10X6_2PLANE_444_UNORM_3PACK16_EXT
+			{
+				2, // planes
+				chanR|chanG|chanB,
+				1,1,
+				{
+				//		Size	WDiv	HDiv	planeCompatibleFormat
+					{	2,		1,		1,		VK_FORMAT_R10X6_UNORM_PACK16 },
+					{	4,		1,		1,		VK_FORMAT_R10X6G10X6_UNORM_2PACK16 },
+					{	0,		0,		0,		VK_FORMAT_UNDEFINED },
+				},
+				{
+				//		Plane	Type	Offs	Size	Stride
+					{	1,		unorm,	22,		10,		4 },	// R
+					{	0,		unorm,	6,		10,		2 },	// G
+					{	1,		unorm,	6,		10,		4 },	// B
+					{ 0, 0, 0, 0, 0 }
+				}
+			},
+			// VK_FORMAT_G12X4_B12X4R12X4_2PLANE_444_UNORM_3PACK16_EXT
+			{
+				2, // planes
+				chanR|chanG|chanB,
+				1,1,
+				{
+				//		Size	WDiv	HDiv	planeCompatibleFormat
+					{	2,		1,		1,		VK_FORMAT_R12X4_UNORM_PACK16 },
+					{	4,		1,		1,		VK_FORMAT_R12X4G12X4_UNORM_2PACK16 },
+					{	0,		0,		0,		VK_FORMAT_UNDEFINED },
+				},
+				{
+				//		Plane	Type	Offs	Size	Stride
+					{	1,		unorm,	20,		12,		4 },	// R
+					{	0,		unorm,	4,		12,		2 },	// G
+					{	1,		unorm,	4,		12,		4 },	// B
+					{ 0, 0, 0, 0, 0 }
+				}
+			},
+			// VK_FORMAT_G16_B16R16_2PLANE_444_UNORM_EXT
+			{
+				2, // planes
+				chanR|chanG|chanB,
+				1,1,
+				{
+				//		Size	WDiv	HDiv	planeCompatibleFormat
+					{	2,		1,		1,		VK_FORMAT_R16_UNORM },
+					{	4,		1,		1,		VK_FORMAT_R16G16_UNORM },
+					{	0,		0,		0,		VK_FORMAT_UNDEFINED },
+				},
+				{
+				//		Plane	Type	Offs	Size	Stride
+					{	1,		unorm,	16,		16,		4 },	// R
+					{	0,		unorm,	0,		16,		2 },	// G
+					{	1,		unorm,	0,		16,		4 },	// B
+					{ 0, 0, 0, 0, 0 }
+				}
+			},
+		};
+
+		const size_t	offset	= (size_t)VK_FORMAT_G8_B8R8_2PLANE_444_UNORM_EXT;
+
+		DE_ASSERT(de::inBounds<size_t>((size_t)format, offset, offset+(size_t)DE_LENGTH_OF_ARRAY(s_formatInfo)));
+
+		return s_formatInfo[(size_t)format-offset];
+	}
+
 	static const PlanarFormatDescription s_formatInfo[] =
 	{
-		// VK_FORMAT_G8B8G8R8_422_UNORM_KHR
+		// VK_FORMAT_G8B8G8R8_422_UNORM
 		{
 			1, // planes
 			chanR|chanG|chanB,
 			2,1,
 			{
 			//		Size	WDiv	HDiv	planeCompatibleFormat
-				{	4,		1,		1,		VK_FORMAT_G8B8G8R8_422_UNORM_KHR	},
+				{	4,		1,		1,		VK_FORMAT_G8B8G8R8_422_UNORM	},
 				{	0,		0,		0,		VK_FORMAT_UNDEFINED	},
 				{	0,		0,		0,		VK_FORMAT_UNDEFINED	},
 			},
@@ -322,14 +430,14 @@
 				{ 0, 0, 0, 0, 0 }
 			}
 		},
-		// VK_FORMAT_B8G8R8G8_422_UNORM_KHR
+		// VK_FORMAT_B8G8R8G8_422_UNORM
 		{
 			1, // planes
 			chanR|chanG|chanB,
 			2,1,
 			{
 			//		Size	WDiv	HDiv	planeCompatibleFormat
-				{	4,		1,		1,		VK_FORMAT_B8G8R8G8_422_UNORM_KHR },
+				{	4,		1,		1,		VK_FORMAT_B8G8R8G8_422_UNORM },
 				{	0,		0,		0,		VK_FORMAT_UNDEFINED },
 				{	0,		0,		0,		VK_FORMAT_UNDEFINED },
 			},
@@ -341,7 +449,7 @@
 				{ 0, 0, 0, 0, 0 }
 			}
 		},
-		// VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM_KHR
+		// VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM
 		{
 			3, // planes
 			chanR|chanG|chanB,
@@ -360,7 +468,7 @@
 				{ 0, 0, 0, 0, 0 }
 			}
 		},
-		// VK_FORMAT_G8_B8R8_2PLANE_420_UNORM_KHR
+		// VK_FORMAT_G8_B8R8_2PLANE_420_UNORM
 		{
 			2, // planes
 			chanR|chanG|chanB,
@@ -379,7 +487,7 @@
 				{ 0, 0, 0, 0, 0 }
 			}
 		},
-		// VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM_KHR
+		// VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM
 		{
 			3, // planes
 			chanR|chanG|chanB,
@@ -398,7 +506,7 @@
 				{ 0, 0, 0, 0, 0 }
 			}
 		},
-		// VK_FORMAT_G8_B8R8_2PLANE_422_UNORM_KHR
+		// VK_FORMAT_G8_B8R8_2PLANE_422_UNORM
 		{
 			2, // planes
 			chanR|chanG|chanB,
@@ -417,7 +525,7 @@
 				{ 0, 0, 0, 0, 0 }
 			}
 		},
-		// VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM_KHR
+		// VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM
 		{
 			3, // planes
 			chanR|chanG|chanB,
@@ -436,14 +544,14 @@
 				{ 0, 0, 0, 0, 0 }
 			}
 		},
-		// VK_FORMAT_R10X6_UNORM_PACK16_KHR
+		// VK_FORMAT_R10X6_UNORM_PACK16
 		{
 			1, // planes
 			chanR,
 			1,1,
 			{
 			//		Size	WDiv	HDiv	planeCompatibleFormat
-				{	2,		1,		1,		VK_FORMAT_R10X6_UNORM_PACK16_KHR },
+				{	2,		1,		1,		VK_FORMAT_R10X6_UNORM_PACK16 },
 				{	0,		0,		0,		VK_FORMAT_UNDEFINED },
 				{	0,		0,		0,		VK_FORMAT_UNDEFINED },
 			},
@@ -455,14 +563,14 @@
 				{ 0, 0, 0, 0, 0 },
 			}
 		},
-		// VK_FORMAT_R10X6G10X6_UNORM_2PACK16_KHR
+		// VK_FORMAT_R10X6G10X6_UNORM_2PACK16
 		{
 			1, // planes
 			chanR|chanG,
 			1,1,
 			{
 			//		Size	WDiv	HDiv	planeCompatibleFormat
-				{	4,		1,		1,		VK_FORMAT_R10X6G10X6_UNORM_2PACK16_KHR },
+				{	4,		1,		1,		VK_FORMAT_R10X6G10X6_UNORM_2PACK16 },
 				{	0,		0,		0,		VK_FORMAT_UNDEFINED },
 				{	0,		0,		0,		VK_FORMAT_UNDEFINED },
 			},
@@ -474,14 +582,14 @@
 				{ 0, 0, 0, 0, 0 },
 			}
 		},
-		// VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16_KHR
+		// VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16
 		{
 			1, // planes
 			chanR|chanG|chanB|chanA,
 			1,1,
 			{
 			//		Size	WDiv	HDiv	planeCompatibleFormat
-				{	8,		1,		1,		VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16_KHR },
+				{	8,		1,		1,		VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16 },
 				{	0,		0,		0,		VK_FORMAT_UNDEFINED },
 				{	0,		0,		0,		VK_FORMAT_UNDEFINED },
 			},
@@ -493,14 +601,14 @@
 				{	0,		unorm,	54,		10,		8 },	// A
 			}
 		},
-		// VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16_KHR
+		// VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16
 		{
 			1, // planes
 			chanR|chanG|chanB,
 			2,1,
 			{
 			//		Size	WDiv	HDiv	planeCompatibleFormat
-				{	8,		1,		1,		VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16_KHR },
+				{	8,		1,		1,		VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16 },
 				{	0,		0,		0,		VK_FORMAT_UNDEFINED },
 				{	0,		0,		0,		VK_FORMAT_UNDEFINED },
 			},
@@ -512,14 +620,14 @@
 				{ 0, 0, 0, 0, 0 }
 			}
 		},
-		// VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16_KHR
+		// VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16
 		{
 			1, // planes
 			chanR|chanG|chanB,
 			2,1,
 			{
 			//		Size	WDiv	HDiv	planeCompatibleFormat
-				{	8,		1,		1,		VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16_KHR },
+				{	8,		1,		1,		VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16 },
 				{	0,		0,		0,		VK_FORMAT_UNDEFINED },
 				{	0,		0,		0,		VK_FORMAT_UNDEFINED },
 			},
@@ -531,7 +639,7 @@
 				{ 0, 0, 0, 0, 0 }
 			}
 		},
-		// VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16_KHR
+		// VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16
 		{
 			3, // planes
 			chanR|chanG|chanB,
@@ -550,7 +658,7 @@
 				{ 0, 0, 0, 0, 0 }
 			}
 		},
-		// VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16_KHR
+		// VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16
 		{
 			2, // planes
 			chanR|chanG|chanB,
@@ -569,7 +677,7 @@
 				{ 0, 0, 0, 0, 0 }
 			}
 		},
-		// VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16_KHR
+		// VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16
 		{
 			3, // planes
 			chanR|chanG|chanB,
@@ -588,7 +696,7 @@
 				{ 0, 0, 0, 0, 0 }
 			}
 		},
-		// VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16_KHR
+		// VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16
 		{
 			2, // planes
 			chanR|chanG|chanB,
@@ -607,7 +715,7 @@
 				{ 0, 0, 0, 0, 0 }
 			}
 		},
-		// VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16_KHR
+		// VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16
 		{
 			3, // planes
 			chanR|chanG|chanB,
@@ -626,14 +734,14 @@
 				{ 0, 0, 0, 0, 0 }
 			}
 		},
-		// VK_FORMAT_R12X4_UNORM_PACK16_KHR
+		// VK_FORMAT_R12X4_UNORM_PACK16
 		{
 			1, // planes
 			chanR,
 			1,1,
 			{
 			//		Size	WDiv	HDiv	planeCompatibleFormat
-				{	2,		1,		1,		VK_FORMAT_R12X4_UNORM_PACK16_KHR },
+				{	2,		1,		1,		VK_FORMAT_R12X4_UNORM_PACK16 },
 				{	0,		0,		0,		VK_FORMAT_UNDEFINED },
 				{	0,		0,		0,		VK_FORMAT_UNDEFINED },
 			},
@@ -645,14 +753,14 @@
 				{ 0, 0, 0, 0, 0 },
 			}
 		},
-		// VK_FORMAT_R12X4G12X4_UNORM_2PACK16_KHR
+		// VK_FORMAT_R12X4G12X4_UNORM_2PACK16
 		{
 			1, // planes
 			chanR|chanG,
 			1,1,
 			{
 			//		Size	WDiv	HDiv	planeCompatibleFormat
-				{	4,		1,		1,		VK_FORMAT_R12X4G12X4_UNORM_2PACK16_KHR },
+				{	4,		1,		1,		VK_FORMAT_R12X4G12X4_UNORM_2PACK16 },
 				{	0,		0,		0,		VK_FORMAT_UNDEFINED },
 				{	0,		0,		0,		VK_FORMAT_UNDEFINED },
 			},
@@ -664,14 +772,14 @@
 				{ 0, 0, 0, 0, 0 },
 			}
 		},
-		// VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16_KHR
+		// VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16
 		{
 			1, // planes
 			chanR|chanG|chanB|chanA,
 			1,1,
 			{
 			//		Size	WDiv	HDiv	planeCompatibleFormat
-				{	8,		1,		1,		VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16_KHR },
+				{	8,		1,		1,		VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16 },
 				{	0,		0,		0,		VK_FORMAT_UNDEFINED },
 				{	0,		0,		0,		VK_FORMAT_UNDEFINED },
 			},
@@ -683,14 +791,14 @@
 				{	0,		unorm,	52,		12,		8 },	// A
 			}
 		},
-		// VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16_KHR
+		// VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16
 		{
 			1, // planes
 			chanR|chanG|chanB,
 			2,1,
 			{
 			//		Size	WDiv	HDiv	planeCompatibleFormat
-				{	8,		1,		1,		VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16_KHR },
+				{	8,		1,		1,		VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16 },
 				{	0,		0,		0,		VK_FORMAT_UNDEFINED },
 				{	0,		0,		0,		VK_FORMAT_UNDEFINED },
 			},
@@ -702,14 +810,14 @@
 				{ 0, 0, 0, 0, 0 }
 			}
 		},
-		// VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16_KHR
+		// VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16
 		{
 			1, // planes
 			chanR|chanG|chanB,
 			2,1,
 			{
 			//		Size	WDiv	HDiv	planeCompatibleFormat
-				{	8,		1,		1,		VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16_KHR },
+				{	8,		1,		1,		VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16 },
 				{	0,		0,		0,		VK_FORMAT_UNDEFINED },
 				{	0,		0,		0,		VK_FORMAT_UNDEFINED },
 			},
@@ -721,7 +829,7 @@
 				{ 0, 0, 0, 0, 0 }
 			}
 		},
-		// VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16_KHR
+		// VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16
 		{
 			3, // planes
 			chanR|chanG|chanB,
@@ -740,7 +848,7 @@
 				{ 0, 0, 0, 0, 0 }
 			}
 		},
-		// VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16_KHR
+		// VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16
 		{
 			2, // planes
 			chanR|chanG|chanB,
@@ -759,7 +867,7 @@
 				{ 0, 0, 0, 0, 0 }
 			}
 		},
-		// VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16_KHR
+		// VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16
 		{
 			3, // planes
 			chanR|chanG|chanB,
@@ -778,7 +886,7 @@
 				{ 0, 0, 0, 0, 0 }
 			}
 		},
-		// VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16_KHR
+		// VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16
 		{
 			2, // planes
 			chanR|chanG|chanB,
@@ -797,7 +905,7 @@
 				{ 0, 0, 0, 0, 0 }
 			}
 		},
-		// VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16_KHR
+		// VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16
 		{
 			3, // planes
 			chanR|chanG|chanB,
@@ -816,14 +924,14 @@
 				{ 0, 0, 0, 0, 0 }
 			}
 		},
-		// VK_FORMAT_G16B16G16R16_422_UNORM_KHR
+		// VK_FORMAT_G16B16G16R16_422_UNORM
 		{
 			1, // planes
 			chanR|chanG|chanB,
 			2,1,
 			{
 			//		Size	WDiv	HDiv	planeCompatibleFormat
-				{	8,		1,		1,		VK_FORMAT_G16B16G16R16_422_UNORM_KHR },
+				{	8,		1,		1,		VK_FORMAT_G16B16G16R16_422_UNORM },
 				{	0,		0,		0,		VK_FORMAT_UNDEFINED },
 				{	0,		0,		0,		VK_FORMAT_UNDEFINED },
 			},
@@ -835,14 +943,14 @@
 				{ 0, 0, 0, 0, 0 }
 			}
 		},
-		// VK_FORMAT_B16G16R16G16_422_UNORM_KHR
+		// VK_FORMAT_B16G16R16G16_422_UNORM
 		{
 			1, // planes
 			chanR|chanG|chanB,
 			2,1,
 			{
 			//		Size	WDiv	HDiv	planeCompatibleFormat
-				{	8,		1,		1,		VK_FORMAT_B16G16R16G16_422_UNORM_KHR },
+				{	8,		1,		1,		VK_FORMAT_B16G16R16G16_422_UNORM },
 				{	0,		0,		0,		VK_FORMAT_UNDEFINED },
 				{	0,		0,		0,		VK_FORMAT_UNDEFINED },
 			},
@@ -854,7 +962,7 @@
 				{ 0, 0, 0, 0, 0 }
 			}
 		},
-		// VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM_KHR
+		// VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM
 		{
 			3, // planes
 			chanR|chanG|chanB,
@@ -873,7 +981,7 @@
 				{ 0, 0, 0, 0, 0 }
 			}
 		},
-		// VK_FORMAT_G16_B16R16_2PLANE_420_UNORM_KHR
+		// VK_FORMAT_G16_B16R16_2PLANE_420_UNORM
 		{
 			2, // planes
 			chanR|chanG|chanB,
@@ -892,7 +1000,7 @@
 				{ 0, 0, 0, 0, 0 }
 			}
 		},
-		// VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM_KHR
+		// VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM
 		{
 			3, // planes
 			chanR|chanG|chanB,
@@ -911,7 +1019,7 @@
 				{ 0, 0, 0, 0, 0 }
 			}
 		},
-		// VK_FORMAT_G16_B16R16_2PLANE_422_UNORM_KHR
+		// VK_FORMAT_G16_B16R16_2PLANE_422_UNORM
 		{
 			2, // planes
 			chanR|chanG|chanB,
@@ -930,7 +1038,7 @@
 				{ 0, 0, 0, 0, 0 }
 			}
 		},
-		// VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM_KHR
+		// VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM
 		{
 			3, // planes
 			chanR|chanG|chanB,
@@ -951,7 +1059,7 @@
 		},
 	};
 
-	const size_t	offset	= (size_t)VK_FORMAT_G8B8G8R8_422_UNORM_KHR;
+	const size_t	offset	= (size_t)VK_FORMAT_G8B8G8R8_422_UNORM;
 
 	DE_ASSERT(de::inBounds<size_t>((size_t)format, offset, offset+(size_t)DE_LENGTH_OF_ARRAY(s_formatInfo)));
 
@@ -2272,44 +2380,48 @@
 {
 	switch (format)
 	{
-		case VK_FORMAT_G8B8G8R8_422_UNORM_KHR:
-		case VK_FORMAT_B8G8R8G8_422_UNORM_KHR:
-		case VK_FORMAT_R10X6_UNORM_PACK16_KHR:
-		case VK_FORMAT_R10X6G10X6_UNORM_2PACK16_KHR:
-		case VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16_KHR:
-		case VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16_KHR:
-		case VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16_KHR:
-		case VK_FORMAT_R12X4_UNORM_PACK16_KHR:
-		case VK_FORMAT_R12X4G12X4_UNORM_2PACK16_KHR:
-		case VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16_KHR:
-		case VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16_KHR:
-		case VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16_KHR:
-		case VK_FORMAT_G16B16G16R16_422_UNORM_KHR:
-		case VK_FORMAT_B16G16R16G16_422_UNORM_KHR:
+		case VK_FORMAT_G8B8G8R8_422_UNORM:
+		case VK_FORMAT_B8G8R8G8_422_UNORM:
+		case VK_FORMAT_R10X6_UNORM_PACK16:
+		case VK_FORMAT_R10X6G10X6_UNORM_2PACK16:
+		case VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16:
+		case VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16:
+		case VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16:
+		case VK_FORMAT_R12X4_UNORM_PACK16:
+		case VK_FORMAT_R12X4G12X4_UNORM_2PACK16:
+		case VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16:
+		case VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16:
+		case VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16:
+		case VK_FORMAT_G16B16G16R16_422_UNORM:
+		case VK_FORMAT_B16G16R16G16_422_UNORM:
 			return 1;
 
-		case VK_FORMAT_G8_B8R8_2PLANE_420_UNORM_KHR:
-		case VK_FORMAT_G8_B8R8_2PLANE_422_UNORM_KHR:
-		case VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16_KHR:
-		case VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16_KHR:
-		case VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16_KHR:
-		case VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16_KHR:
-		case VK_FORMAT_G16_B16R16_2PLANE_420_UNORM_KHR:
-		case VK_FORMAT_G16_B16R16_2PLANE_422_UNORM_KHR:
+		case VK_FORMAT_G8_B8R8_2PLANE_420_UNORM:
+		case VK_FORMAT_G8_B8R8_2PLANE_422_UNORM:
+		case VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16:
+		case VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16:
+		case VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16:
+		case VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16:
+		case VK_FORMAT_G16_B16R16_2PLANE_420_UNORM:
+		case VK_FORMAT_G16_B16R16_2PLANE_422_UNORM:
+		case VK_FORMAT_G8_B8R8_2PLANE_444_UNORM_EXT:
+		case VK_FORMAT_G10X6_B10X6R10X6_2PLANE_444_UNORM_3PACK16_EXT:
+		case VK_FORMAT_G12X4_B12X4R12X4_2PLANE_444_UNORM_3PACK16_EXT:
+		case VK_FORMAT_G16_B16R16_2PLANE_444_UNORM_EXT:
 			return 2;
 
-		case VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM_KHR:
-		case VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM_KHR:
-		case VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM_KHR:
-		case VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16_KHR:
-		case VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16_KHR:
-		case VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16_KHR:
-		case VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16_KHR:
-		case VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16_KHR:
-		case VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16_KHR:
-		case VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM_KHR:
-		case VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM_KHR:
-		case VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM_KHR:
+		case VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM:
+		case VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM:
+		case VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM:
+		case VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16:
+		case VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16:
+		case VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16:
+		case VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16:
+		case VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16:
+		case VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16:
+		case VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM:
+		case VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM:
+		case VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM:
 			return 3;
 
 		default:
@@ -2424,16 +2536,16 @@
 VkImageAspectFlagBits getPlaneAspect (deUint32 planeNdx)
 {
 	DE_ASSERT(de::inBounds(planeNdx, 0u, 3u));
-	return (VkImageAspectFlagBits)(VK_IMAGE_ASPECT_PLANE_0_BIT_KHR << planeNdx);
+	return (VkImageAspectFlagBits)(VK_IMAGE_ASPECT_PLANE_0_BIT << planeNdx);
 }
 
 deUint32 getAspectPlaneNdx (VkImageAspectFlagBits flags)
 {
 	switch (flags)
 	{
-		case VK_IMAGE_ASPECT_PLANE_0_BIT_KHR:	return 0;
-		case VK_IMAGE_ASPECT_PLANE_1_BIT_KHR:	return 1;
-		case VK_IMAGE_ASPECT_PLANE_2_BIT_KHR:	return 2;
+		case VK_IMAGE_ASPECT_PLANE_0_BIT:	return 0;
+		case VK_IMAGE_ASPECT_PLANE_1_BIT:	return 1;
+		case VK_IMAGE_ASPECT_PLANE_2_BIT:	return 2;
 		default:
 			DE_FATAL("Invalid plane aspect");
 			return 0;
@@ -2444,30 +2556,30 @@
 {
 	switch (format)
 	{
-		case VK_FORMAT_G8B8G8R8_422_UNORM_KHR:
-		case VK_FORMAT_B8G8R8G8_422_UNORM_KHR:
-		case VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM_KHR:
-		case VK_FORMAT_G8_B8R8_2PLANE_420_UNORM_KHR:
-		case VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM_KHR:
-		case VK_FORMAT_G8_B8R8_2PLANE_422_UNORM_KHR:
-		case VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16_KHR:
-		case VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16_KHR:
-		case VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16_KHR:
-		case VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16_KHR:
-		case VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16_KHR:
-		case VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16_KHR:
-		case VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16_KHR:
-		case VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16_KHR:
-		case VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16_KHR:
-		case VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16_KHR:
-		case VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16_KHR:
-		case VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16_KHR:
-		case VK_FORMAT_G16B16G16R16_422_UNORM_KHR:
-		case VK_FORMAT_B16G16R16G16_422_UNORM_KHR:
-		case VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM_KHR:
-		case VK_FORMAT_G16_B16R16_2PLANE_420_UNORM_KHR:
-		case VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM_KHR:
-		case VK_FORMAT_G16_B16R16_2PLANE_422_UNORM_KHR:
+		case VK_FORMAT_G8B8G8R8_422_UNORM:
+		case VK_FORMAT_B8G8R8G8_422_UNORM:
+		case VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM:
+		case VK_FORMAT_G8_B8R8_2PLANE_420_UNORM:
+		case VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM:
+		case VK_FORMAT_G8_B8R8_2PLANE_422_UNORM:
+		case VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16:
+		case VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16:
+		case VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16:
+		case VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16:
+		case VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16:
+		case VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16:
+		case VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16:
+		case VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16:
+		case VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16:
+		case VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16:
+		case VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16:
+		case VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16:
+		case VK_FORMAT_G16B16G16R16_422_UNORM:
+		case VK_FORMAT_B16G16R16G16_422_UNORM:
+		case VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM:
+		case VK_FORMAT_G16_B16R16_2PLANE_420_UNORM:
+		case VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM:
+		case VK_FORMAT_G16_B16R16_2PLANE_422_UNORM:
 			return true;
 
 		default:
@@ -2670,13 +2782,13 @@
 		case FMT_CASE(DS, UNSIGNED_INT_24_8_REV):			return VK_FORMAT_D24_UNORM_S8_UINT;
 		case FMT_CASE(DS, FLOAT_UNSIGNED_INT_24_8_REV):		return VK_FORMAT_D32_SFLOAT_S8_UINT;
 
-		case FMT_CASE(R,	UNORM_SHORT_10):				return VK_FORMAT_R10X6_UNORM_PACK16_KHR;
-		case FMT_CASE(RG,	UNORM_SHORT_10):				return VK_FORMAT_R10X6G10X6_UNORM_2PACK16_KHR;
-		case FMT_CASE(RGBA,	UNORM_SHORT_10):				return VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16_KHR;
+		case FMT_CASE(R,	UNORM_SHORT_10):				return VK_FORMAT_R10X6_UNORM_PACK16;
+		case FMT_CASE(RG,	UNORM_SHORT_10):				return VK_FORMAT_R10X6G10X6_UNORM_2PACK16;
+		case FMT_CASE(RGBA,	UNORM_SHORT_10):				return VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16;
 
-		case FMT_CASE(R,	UNORM_SHORT_12):				return VK_FORMAT_R12X4_UNORM_PACK16_KHR;
-		case FMT_CASE(RG,	UNORM_SHORT_12):				return VK_FORMAT_R12X4G12X4_UNORM_2PACK16_KHR;
-		case FMT_CASE(RGBA,	UNORM_SHORT_12):				return VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16_KHR;
+		case FMT_CASE(R,	UNORM_SHORT_12):				return VK_FORMAT_R12X4_UNORM_PACK16;
+		case FMT_CASE(RG,	UNORM_SHORT_12):				return VK_FORMAT_R12X4G12X4_UNORM_2PACK16;
+		case FMT_CASE(RGBA,	UNORM_SHORT_12):				return VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16;
 
 		case FMT_CASE(R,	USCALED_INT8):					return VK_FORMAT_R8_USCALED;
 		case FMT_CASE(RG,	USCALED_INT8):					return VK_FORMAT_R8G8_USCALED;
@@ -2954,13 +3066,13 @@
 		case VK_FORMAT_A2B10G10R10_SINT_PACK32:		return TextureFormat(TextureFormat::RGBA,	TextureFormat::SIGNED_INT_1010102_REV);
 
 		// YCbCr formats that can be mapped
-		case VK_FORMAT_R10X6_UNORM_PACK16_KHR:					return TextureFormat(TextureFormat::R,		TextureFormat::UNORM_SHORT_10);
-		case VK_FORMAT_R10X6G10X6_UNORM_2PACK16_KHR:			return TextureFormat(TextureFormat::RG,		TextureFormat::UNORM_SHORT_10);
-		case VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16_KHR:	return TextureFormat(TextureFormat::RGBA,	TextureFormat::UNORM_SHORT_10);
+		case VK_FORMAT_R10X6_UNORM_PACK16:					return TextureFormat(TextureFormat::R,		TextureFormat::UNORM_SHORT_10);
+		case VK_FORMAT_R10X6G10X6_UNORM_2PACK16:			return TextureFormat(TextureFormat::RG,		TextureFormat::UNORM_SHORT_10);
+		case VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16:	return TextureFormat(TextureFormat::RGBA,	TextureFormat::UNORM_SHORT_10);
 
-		case VK_FORMAT_R12X4_UNORM_PACK16_KHR:					return TextureFormat(TextureFormat::R,		TextureFormat::UNORM_SHORT_12);
-		case VK_FORMAT_R12X4G12X4_UNORM_2PACK16_KHR:			return TextureFormat(TextureFormat::RG,		TextureFormat::UNORM_SHORT_12);
-		case VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16_KHR:	return TextureFormat(TextureFormat::RGBA,	TextureFormat::UNORM_SHORT_12);
+		case VK_FORMAT_R12X4_UNORM_PACK16:					return TextureFormat(TextureFormat::R,		TextureFormat::UNORM_SHORT_12);
+		case VK_FORMAT_R12X4G12X4_UNORM_2PACK16:			return TextureFormat(TextureFormat::RG,		TextureFormat::UNORM_SHORT_12);
+		case VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16:	return TextureFormat(TextureFormat::RGBA,	TextureFormat::UNORM_SHORT_12);
 
 		case VK_FORMAT_A4R4G4B4_UNORM_PACK16_EXT:				return TextureFormat(TextureFormat::ARGB,	TextureFormat::UNORM_SHORT_4444);
 		case VK_FORMAT_A4B4G4R4_UNORM_PACK16_EXT:				return TextureFormat(TextureFormat::ABGR,	TextureFormat::UNORM_SHORT_4444);
@@ -3317,7 +3429,17 @@
 		}
 	}
 
-	for (int formatNdx = VK_FORMAT_G8B8G8R8_422_UNORM_KHR; formatNdx <= VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM_KHR; formatNdx++)
+	for (int formatNdx = VK_FORMAT_G8B8G8R8_422_UNORM; formatNdx <= VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM; formatNdx++)
+	{
+		const VkFormat					format	= (VkFormat)formatNdx;
+		const PlanarFormatDescription&	info	= getPlanarFormatDescription(format);
+
+		DE_TEST_ASSERT(isYCbCrFormat(format));
+		DE_TEST_ASSERT(de::inRange<deUint8>(info.numPlanes, 1u, 3u));
+		DE_TEST_ASSERT(info.numPlanes == getPlaneCount(format));
+	}
+
+	for (int formatNdx = VK_FORMAT_G8_B8R8_2PLANE_444_UNORM_EXT; formatNdx <= VK_FORMAT_G16_B16R16_2PLANE_444_UNORM_EXT; formatNdx++)
 	{
 		const VkFormat					format	= (VkFormat)formatNdx;
 		const PlanarFormatDescription&	info	= getPlanarFormatDescription(format);
@@ -3689,7 +3811,7 @@
 		const VkStructureType nextType = *reinterpret_cast<const VkStructureType*>(pNext);
 		switch (nextType)
 		{
-			case VK_STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO_EXT:
+			case VK_STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO:
 			{
 				const VkSamplerReductionModeCreateInfo reductionModeCreateInfo = *reinterpret_cast<const VkSamplerReductionModeCreateInfo*>(pNext);
 				reductionMode = mapVkSamplerReductionMode(reductionModeCreateInfo.reductionMode);
@@ -4971,12 +5093,21 @@
 
 bool checkSparseImageFormatSupport (const VkPhysicalDevice		physicalDevice,
 									const InstanceInterface&	instance,
+									const VkFormat				format,
+									const VkImageType			imageType,
+									const VkSampleCountFlagBits	sampleCount,
+									const VkImageUsageFlags		usageFlags,
+									const VkImageTiling			imageTiling)
+{
+	const auto propVec = getPhysicalDeviceSparseImageFormatProperties(instance, physicalDevice, format, imageType, sampleCount, usageFlags, imageTiling);
+	return (propVec.size() != 0);
+}
+
+bool checkSparseImageFormatSupport (const VkPhysicalDevice		physicalDevice,
+									const InstanceInterface&	instance,
 									const VkImageCreateInfo&	imageCreateInfo)
 {
-	const std::vector<VkSparseImageFormatProperties> sparseImageFormatPropVec =
-		getPhysicalDeviceSparseImageFormatProperties(instance, physicalDevice, imageCreateInfo.format, imageCreateInfo.imageType, imageCreateInfo.samples, imageCreateInfo.usage, imageCreateInfo.tiling);
-
-	return (sparseImageFormatPropVec.size() != 0);
+	return checkSparseImageFormatSupport(physicalDevice, instance, imageCreateInfo.format, imageCreateInfo.imageType, imageCreateInfo.samples, imageCreateInfo.usage, imageCreateInfo.tiling);
 }
 
 } // vk
diff --git a/external/vulkancts/framework/vulkan/vkImageUtil.hpp b/external/vulkancts/framework/vulkan/vkImageUtil.hpp
index 0bfe4d9..b26d006 100644
--- a/external/vulkancts/framework/vulkan/vkImageUtil.hpp
+++ b/external/vulkancts/framework/vulkan/vkImageUtil.hpp
@@ -130,6 +130,7 @@
 };
 
 bool							isYCbCrFormat					(VkFormat						format);
+bool							isYCbCrExtensionFormat			(VkFormat						format);
 PlanarFormatDescription			getPlanarFormatDescription		(VkFormat						format);
 int								getPlaneCount					(VkFormat						format);
 deUint32						getMipmapCount					(VkFormat						format,
@@ -327,6 +328,14 @@
  * Checks if the physical device supports creation of the specified
  * image format.
  *//*--------------------------------------------------------------------*/
+bool	checkSparseImageFormatSupport			(const VkPhysicalDevice							physicalDevice,
+												 const InstanceInterface&						instance,
+												 const VkFormat									format,
+												 const VkImageType								imageType,
+												 const VkSampleCountFlagBits					sampleCount,
+												 const VkImageUsageFlags						usageFlags,
+												 const VkImageTiling							imageTiling);
+
 bool	checkSparseImageFormatSupport			(const vk::VkPhysicalDevice						physicalDevice,
 												 const vk::InstanceInterface&					instance,
 												 const vk::VkImageCreateInfo&					imageCreateInfo);
diff --git a/external/vulkancts/framework/vulkan/vkInitDeviceFunctionPointers.inl b/external/vulkancts/framework/vulkan/vkInitDeviceFunctionPointers.inl
index 57ef14d..b453f2f 100644
--- a/external/vulkancts/framework/vulkan/vkInitDeviceFunctionPointers.inl
+++ b/external/vulkancts/framework/vulkan/vkInitDeviceFunctionPointers.inl
@@ -352,6 +352,13 @@
 m_vk.setPrivateDataEXT									= (SetPrivateDataEXTFunc)								GET_PROC_ADDR("vkSetPrivateDataEXT");
 m_vk.getPrivateDataEXT									= (GetPrivateDataEXTFunc)								GET_PROC_ADDR("vkGetPrivateDataEXT");
 m_vk.cmdSetFragmentShadingRateEnumNV					= (CmdSetFragmentShadingRateEnumNVFunc)					GET_PROC_ADDR("vkCmdSetFragmentShadingRateEnumNV");
+m_vk.cmdSetVertexInputEXT								= (CmdSetVertexInputEXTFunc)							GET_PROC_ADDR("vkCmdSetVertexInputEXT");
+m_vk.cmdSetPatchControlPointsEXT						= (CmdSetPatchControlPointsEXTFunc)						GET_PROC_ADDR("vkCmdSetPatchControlPointsEXT");
+m_vk.cmdSetRasterizerDiscardEnableEXT					= (CmdSetRasterizerDiscardEnableEXTFunc)				GET_PROC_ADDR("vkCmdSetRasterizerDiscardEnableEXT");
+m_vk.cmdSetDepthBiasEnableEXT							= (CmdSetDepthBiasEnableEXTFunc)						GET_PROC_ADDR("vkCmdSetDepthBiasEnableEXT");
+m_vk.cmdSetLogicOpEXT									= (CmdSetLogicOpEXTFunc)								GET_PROC_ADDR("vkCmdSetLogicOpEXT");
+m_vk.cmdSetPrimitiveRestartEnableEXT					= (CmdSetPrimitiveRestartEnableEXTFunc)					GET_PROC_ADDR("vkCmdSetPrimitiveRestartEnableEXT");
+m_vk.cmdSetColorWriteEnableEXT							= (CmdSetColorWriteEnableEXTFunc)						GET_PROC_ADDR("vkCmdSetColorWriteEnableEXT");
 m_vk.createAccelerationStructureKHR						= (CreateAccelerationStructureKHRFunc)					GET_PROC_ADDR("vkCreateAccelerationStructureKHR");
 m_vk.destroyAccelerationStructureKHR					= (DestroyAccelerationStructureKHRFunc)					GET_PROC_ADDR("vkDestroyAccelerationStructureKHR");
 m_vk.cmdBuildAccelerationStructuresKHR					= (CmdBuildAccelerationStructuresKHRFunc)				GET_PROC_ADDR("vkCmdBuildAccelerationStructuresKHR");
@@ -376,6 +383,22 @@
 m_vk.cmdSetRayTracingPipelineStackSizeKHR				= (CmdSetRayTracingPipelineStackSizeKHRFunc)			GET_PROC_ADDR("vkCmdSetRayTracingPipelineStackSizeKHR");
 m_vk.getAndroidHardwareBufferPropertiesANDROID			= (GetAndroidHardwareBufferPropertiesANDROIDFunc)		GET_PROC_ADDR("vkGetAndroidHardwareBufferPropertiesANDROID");
 m_vk.getMemoryAndroidHardwareBufferANDROID				= (GetMemoryAndroidHardwareBufferANDROIDFunc)			GET_PROC_ADDR("vkGetMemoryAndroidHardwareBufferANDROID");
+m_vk.createVideoSessionKHR								= (CreateVideoSessionKHRFunc)							GET_PROC_ADDR("vkCreateVideoSessionKHR");
+m_vk.destroyVideoSessionKHR								= (DestroyVideoSessionKHRFunc)							GET_PROC_ADDR("vkDestroyVideoSessionKHR");
+m_vk.getVideoSessionMemoryRequirementsKHR				= (GetVideoSessionMemoryRequirementsKHRFunc)			GET_PROC_ADDR("vkGetVideoSessionMemoryRequirementsKHR");
+m_vk.bindVideoSessionMemoryKHR							= (BindVideoSessionMemoryKHRFunc)						GET_PROC_ADDR("vkBindVideoSessionMemoryKHR");
+m_vk.createVideoSessionParametersKHR					= (CreateVideoSessionParametersKHRFunc)					GET_PROC_ADDR("vkCreateVideoSessionParametersKHR");
+m_vk.updateVideoSessionParametersKHR					= (UpdateVideoSessionParametersKHRFunc)					GET_PROC_ADDR("vkUpdateVideoSessionParametersKHR");
+m_vk.destroyVideoSessionParametersKHR					= (DestroyVideoSessionParametersKHRFunc)				GET_PROC_ADDR("vkDestroyVideoSessionParametersKHR");
+m_vk.cmdBeginVideoCodingKHR								= (CmdBeginVideoCodingKHRFunc)							GET_PROC_ADDR("vkCmdBeginVideoCodingKHR");
+m_vk.cmdEndVideoCodingKHR								= (CmdEndVideoCodingKHRFunc)							GET_PROC_ADDR("vkCmdEndVideoCodingKHR");
+m_vk.cmdControlVideoCodingKHR							= (CmdControlVideoCodingKHRFunc)						GET_PROC_ADDR("vkCmdControlVideoCodingKHR");
+m_vk.cmdDecodeVideoKHR									= (CmdDecodeVideoKHRFunc)								GET_PROC_ADDR("vkCmdDecodeVideoKHR");
+m_vk.cmdEncodeVideoKHR									= (CmdEncodeVideoKHRFunc)								GET_PROC_ADDR("vkCmdEncodeVideoKHR");
+m_vk.getMemoryZirconHandleFUCHSIA						= (GetMemoryZirconHandleFUCHSIAFunc)					GET_PROC_ADDR("vkGetMemoryZirconHandleFUCHSIA");
+m_vk.getMemoryZirconHandlePropertiesFUCHSIA				= (GetMemoryZirconHandlePropertiesFUCHSIAFunc)			GET_PROC_ADDR("vkGetMemoryZirconHandlePropertiesFUCHSIA");
+m_vk.importSemaphoreZirconHandleFUCHSIA					= (ImportSemaphoreZirconHandleFUCHSIAFunc)				GET_PROC_ADDR("vkImportSemaphoreZirconHandleFUCHSIA");
+m_vk.getSemaphoreZirconHandleFUCHSIA					= (GetSemaphoreZirconHandleFUCHSIAFunc)					GET_PROC_ADDR("vkGetSemaphoreZirconHandleFUCHSIA");
 m_vk.getMemoryWin32HandleKHR							= (GetMemoryWin32HandleKHRFunc)							GET_PROC_ADDR("vkGetMemoryWin32HandleKHR");
 m_vk.getMemoryWin32HandlePropertiesKHR					= (GetMemoryWin32HandlePropertiesKHRFunc)				GET_PROC_ADDR("vkGetMemoryWin32HandlePropertiesKHR");
 m_vk.importSemaphoreWin32HandleKHR						= (ImportSemaphoreWin32HandleKHRFunc)					GET_PROC_ADDR("vkImportSemaphoreWin32HandleKHR");
diff --git a/external/vulkancts/framework/vulkan/vkInitInstanceFunctionPointers.inl b/external/vulkancts/framework/vulkan/vkInitInstanceFunctionPointers.inl
index 52eaed7..de67b1d 100644
--- a/external/vulkancts/framework/vulkan/vkInitInstanceFunctionPointers.inl
+++ b/external/vulkancts/framework/vulkan/vkInitInstanceFunctionPointers.inl
@@ -97,6 +97,8 @@
 m_vk.acquireWinrtDisplayNV												= (AcquireWinrtDisplayNVFunc)											GET_PROC_ADDR("vkAcquireWinrtDisplayNV");
 m_vk.getWinrtDisplayNV													= (GetWinrtDisplayNVFunc)												GET_PROC_ADDR("vkGetWinrtDisplayNV");
 m_vk.createAndroidSurfaceKHR											= (CreateAndroidSurfaceKHRFunc)											GET_PROC_ADDR("vkCreateAndroidSurfaceKHR");
+m_vk.getPhysicalDeviceVideoCapabilitiesKHR								= (GetPhysicalDeviceVideoCapabilitiesKHRFunc)							GET_PROC_ADDR("vkGetPhysicalDeviceVideoCapabilitiesKHR");
+m_vk.getPhysicalDeviceVideoFormatPropertiesKHR							= (GetPhysicalDeviceVideoFormatPropertiesKHRFunc)						GET_PROC_ADDR("vkGetPhysicalDeviceVideoFormatPropertiesKHR");
 m_vk.createImagePipeSurfaceFUCHSIA										= (CreateImagePipeSurfaceFUCHSIAFunc)									GET_PROC_ADDR("vkCreateImagePipeSurfaceFUCHSIA");
 m_vk.createStreamDescriptorSurfaceGGP									= (CreateStreamDescriptorSurfaceGGPFunc)								GET_PROC_ADDR("vkCreateStreamDescriptorSurfaceGGP");
 m_vk.createIOSSurfaceMVK												= (CreateIOSSurfaceMVKFunc)												GET_PROC_ADDR("vkCreateIOSSurfaceMVK");
diff --git a/external/vulkancts/framework/vulkan/vkInstanceDriverImpl.inl b/external/vulkancts/framework/vulkan/vkInstanceDriverImpl.inl
index 4666a78..a8bb1d7 100644
--- a/external/vulkancts/framework/vulkan/vkInstanceDriverImpl.inl
+++ b/external/vulkancts/framework/vulkan/vkInstanceDriverImpl.inl
@@ -368,6 +368,16 @@
 	return m_vk.createAndroidSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface);
 }
 
+VkResult InstanceDriver::getPhysicalDeviceVideoCapabilitiesKHR (VkPhysicalDevice physicalDevice, const VkVideoProfileKHR* pVideoProfile, VkVideoCapabilitiesKHR* pCapabilities) const
+{
+	return m_vk.getPhysicalDeviceVideoCapabilitiesKHR(physicalDevice, pVideoProfile, pCapabilities);
+}
+
+VkResult InstanceDriver::getPhysicalDeviceVideoFormatPropertiesKHR (VkPhysicalDevice physicalDevice, const VkPhysicalDeviceVideoFormatInfoKHR* pVideoFormatInfo, deUint32* pVideoFormatPropertyCount, VkVideoFormatPropertiesKHR* pVideoFormatProperties) const
+{
+	return m_vk.getPhysicalDeviceVideoFormatPropertiesKHR(physicalDevice, pVideoFormatInfo, pVideoFormatPropertyCount, pVideoFormatProperties);
+}
+
 VkResult InstanceDriver::createImagePipeSurfaceFUCHSIA (VkInstance instance, const VkImagePipeSurfaceCreateInfoFUCHSIA* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface) const
 {
 	return m_vk.createImagePipeSurfaceFUCHSIA(instance, pCreateInfo, pAllocator, pSurface);
diff --git a/external/vulkancts/framework/vulkan/vkInstanceFunctionPointers.inl b/external/vulkancts/framework/vulkan/vkInstanceFunctionPointers.inl
index 9cb24ab..82e7841 100644
--- a/external/vulkancts/framework/vulkan/vkInstanceFunctionPointers.inl
+++ b/external/vulkancts/framework/vulkan/vkInstanceFunctionPointers.inl
@@ -75,6 +75,8 @@
 AcquireWinrtDisplayNVFunc											acquireWinrtDisplayNV;
 GetWinrtDisplayNVFunc												getWinrtDisplayNV;
 CreateAndroidSurfaceKHRFunc											createAndroidSurfaceKHR;
+GetPhysicalDeviceVideoCapabilitiesKHRFunc							getPhysicalDeviceVideoCapabilitiesKHR;
+GetPhysicalDeviceVideoFormatPropertiesKHRFunc						getPhysicalDeviceVideoFormatPropertiesKHR;
 CreateImagePipeSurfaceFUCHSIAFunc									createImagePipeSurfaceFUCHSIA;
 CreateStreamDescriptorSurfaceGGPFunc								createStreamDescriptorSurfaceGGP;
 CreateIOSSurfaceMVKFunc												createIOSSurfaceMVK;
diff --git a/external/vulkancts/framework/vulkan/vkKnownDriverIds.inl b/external/vulkancts/framework/vulkan/vkKnownDriverIds.inl
index c678266..cde343e 100644
--- a/external/vulkancts/framework/vulkan/vkKnownDriverIds.inl
+++ b/external/vulkancts/framework/vulkan/vkKnownDriverIds.inl
@@ -22,6 +22,8 @@
 	{"VK_DRIVER_ID_BROADCOM_PROPRIETARY", 12},
 	{"VK_DRIVER_ID_MESA_LLVMPIPE", 13},
 	{"VK_DRIVER_ID_MOLTENVK", 14},
+	{"VK_DRIVER_ID_COREAVI_PROPRIETARY", 15},
+	{"VK_DRIVER_ID_SAMSUNG_PROPRIETARY", 21},
 	{"VK_DRIVER_ID_AMD_PROPRIETARY_KHR", 1},	// VK_DRIVER_ID_AMD_PROPRIETARY
 	{"VK_DRIVER_ID_AMD_OPEN_SOURCE_KHR", 2},	// VK_DRIVER_ID_AMD_OPEN_SOURCE
 	{"VK_DRIVER_ID_MESA_RADV_KHR", 3},	// VK_DRIVER_ID_MESA_RADV
diff --git a/external/vulkancts/framework/vulkan/vkMandatoryFeatures.inl b/external/vulkancts/framework/vulkan/vkMandatoryFeatures.inl
index b3db34e..7558037 100644
--- a/external/vulkancts/framework/vulkan/vkMandatoryFeatures.inl
+++ b/external/vulkancts/framework/vulkan/vkMandatoryFeatures.inl
@@ -47,16 +47,36 @@
 		nextPtr  = &physicalDevice8BitStorageFeaturesKHR.pNext;
 	}
 
+	vk::VkPhysicalDeviceAccelerationStructureFeaturesKHR physicalDeviceAccelerationStructureFeaturesKHR;
+	deMemset(&physicalDeviceAccelerationStructureFeaturesKHR, 0, sizeof(physicalDeviceAccelerationStructureFeaturesKHR));
+
+	if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) )
+	{
+		physicalDeviceAccelerationStructureFeaturesKHR.sType = getStructureType<VkPhysicalDeviceAccelerationStructureFeaturesKHR>();
+		*nextPtr = &physicalDeviceAccelerationStructureFeaturesKHR;
+		nextPtr  = &physicalDeviceAccelerationStructureFeaturesKHR.pNext;
+	}
+
 	vk::VkPhysicalDeviceBufferDeviceAddressFeaturesKHR physicalDeviceBufferDeviceAddressFeaturesKHR;
 	deMemset(&physicalDeviceBufferDeviceAddressFeaturesKHR, 0, sizeof(physicalDeviceBufferDeviceAddressFeaturesKHR));
 
-	if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_KHR_buffer_device_address")) )
+	if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_KHR_buffer_device_address")) || context.contextSupports(vk::ApiVersion(1, 1, 0)) )
 	{
 		physicalDeviceBufferDeviceAddressFeaturesKHR.sType = getStructureType<VkPhysicalDeviceBufferDeviceAddressFeaturesKHR>();
 		*nextPtr = &physicalDeviceBufferDeviceAddressFeaturesKHR;
 		nextPtr  = &physicalDeviceBufferDeviceAddressFeaturesKHR.pNext;
 	}
 
+	vk::VkPhysicalDeviceColorWriteEnableFeaturesEXT physicalDeviceColorWriteEnableFeaturesEXT;
+	deMemset(&physicalDeviceColorWriteEnableFeaturesEXT, 0, sizeof(physicalDeviceColorWriteEnableFeaturesEXT));
+
+	if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_EXT_color_write_enable")) )
+	{
+		physicalDeviceColorWriteEnableFeaturesEXT.sType = getStructureType<VkPhysicalDeviceColorWriteEnableFeaturesEXT>();
+		*nextPtr = &physicalDeviceColorWriteEnableFeaturesEXT;
+		nextPtr  = &physicalDeviceColorWriteEnableFeaturesEXT.pNext;
+	}
+
 	vk::VkPhysicalDeviceConditionalRenderingFeaturesEXT physicalDeviceConditionalRenderingFeaturesEXT;
 	deMemset(&physicalDeviceConditionalRenderingFeaturesEXT, 0, sizeof(physicalDeviceConditionalRenderingFeaturesEXT));
 
@@ -80,13 +100,23 @@
 	vk::VkPhysicalDeviceDescriptorIndexingFeaturesEXT physicalDeviceDescriptorIndexingFeaturesEXT;
 	deMemset(&physicalDeviceDescriptorIndexingFeaturesEXT, 0, sizeof(physicalDeviceDescriptorIndexingFeaturesEXT));
 
-	if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_EXT_descriptor_indexing")) )
+	if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_EXT_descriptor_indexing")) || context.contextSupports(vk::ApiVersion(1, 1, 0)) )
 	{
 		physicalDeviceDescriptorIndexingFeaturesEXT.sType = getStructureType<VkPhysicalDeviceDescriptorIndexingFeaturesEXT>();
 		*nextPtr = &physicalDeviceDescriptorIndexingFeaturesEXT;
 		nextPtr  = &physicalDeviceDescriptorIndexingFeaturesEXT.pNext;
 	}
 
+	vk::VkPhysicalDeviceExtendedDynamicState2FeaturesEXT physicalDeviceExtendedDynamicState2FeaturesEXT;
+	deMemset(&physicalDeviceExtendedDynamicState2FeaturesEXT, 0, sizeof(physicalDeviceExtendedDynamicState2FeaturesEXT));
+
+	if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_EXT_extended_dynamic_state2")) )
+	{
+		physicalDeviceExtendedDynamicState2FeaturesEXT.sType = getStructureType<VkPhysicalDeviceExtendedDynamicState2FeaturesEXT>();
+		*nextPtr = &physicalDeviceExtendedDynamicState2FeaturesEXT;
+		nextPtr  = &physicalDeviceExtendedDynamicState2FeaturesEXT.pNext;
+	}
+
 	vk::VkPhysicalDeviceFragmentDensityMapFeaturesEXT physicalDeviceFragmentDensityMapFeaturesEXT;
 	deMemset(&physicalDeviceFragmentDensityMapFeaturesEXT, 0, sizeof(physicalDeviceFragmentDensityMapFeaturesEXT));
 
@@ -187,6 +217,16 @@
 		nextPtr  = &physicalDevicePerformanceQueryFeaturesKHR.pNext;
 	}
 
+	vk::VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT physicalDevicePipelineCreationCacheControlFeaturesEXT;
+	deMemset(&physicalDevicePipelineCreationCacheControlFeaturesEXT, 0, sizeof(physicalDevicePipelineCreationCacheControlFeaturesEXT));
+
+	if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_EXT_pipeline_creation_cache_control")) )
+	{
+		physicalDevicePipelineCreationCacheControlFeaturesEXT.sType = getStructureType<VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT>();
+		*nextPtr = &physicalDevicePipelineCreationCacheControlFeaturesEXT;
+		nextPtr  = &physicalDevicePipelineCreationCacheControlFeaturesEXT.pNext;
+	}
+
 	vk::VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR physicalDevicePipelineExecutablePropertiesFeaturesKHR;
 	deMemset(&physicalDevicePipelineExecutablePropertiesFeaturesKHR, 0, sizeof(physicalDevicePipelineExecutablePropertiesFeaturesKHR));
 
@@ -197,6 +237,26 @@
 		nextPtr  = &physicalDevicePipelineExecutablePropertiesFeaturesKHR.pNext;
 	}
 
+	vk::VkPhysicalDeviceRayQueryFeaturesKHR physicalDeviceRayQueryFeaturesKHR;
+	deMemset(&physicalDeviceRayQueryFeaturesKHR, 0, sizeof(physicalDeviceRayQueryFeaturesKHR));
+
+	if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_KHR_ray_query")) )
+	{
+		physicalDeviceRayQueryFeaturesKHR.sType = getStructureType<VkPhysicalDeviceRayQueryFeaturesKHR>();
+		*nextPtr = &physicalDeviceRayQueryFeaturesKHR;
+		nextPtr  = &physicalDeviceRayQueryFeaturesKHR.pNext;
+	}
+
+	vk::VkPhysicalDeviceRayTracingPipelineFeaturesKHR physicalDeviceRayTracingPipelineFeaturesKHR;
+	deMemset(&physicalDeviceRayTracingPipelineFeaturesKHR, 0, sizeof(physicalDeviceRayTracingPipelineFeaturesKHR));
+
+	if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_KHR_ray_tracing_pipeline")) )
+	{
+		physicalDeviceRayTracingPipelineFeaturesKHR.sType = getStructureType<VkPhysicalDeviceRayTracingPipelineFeaturesKHR>();
+		*nextPtr = &physicalDeviceRayTracingPipelineFeaturesKHR;
+		nextPtr  = &physicalDeviceRayTracingPipelineFeaturesKHR.pNext;
+	}
+
 	vk::VkPhysicalDeviceSamplerYcbcrConversionFeaturesKHR physicalDeviceSamplerYcbcrConversionFeaturesKHR;
 	deMemset(&physicalDeviceSamplerYcbcrConversionFeaturesKHR, 0, sizeof(physicalDeviceSamplerYcbcrConversionFeaturesKHR));
 
@@ -277,6 +337,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));
 
@@ -387,6 +457,16 @@
 		nextPtr  = &physicalDeviceVertexAttributeDivisorFeaturesEXT.pNext;
 	}
 
+	vk::VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT physicalDeviceVertexInputDynamicStateFeaturesEXT;
+	deMemset(&physicalDeviceVertexInputDynamicStateFeaturesEXT, 0, sizeof(physicalDeviceVertexInputDynamicStateFeaturesEXT));
+
+	if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_EXT_vertex_input_dynamic_state")) )
+	{
+		physicalDeviceVertexInputDynamicStateFeaturesEXT.sType = getStructureType<VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT>();
+		*nextPtr = &physicalDeviceVertexInputDynamicStateFeaturesEXT;
+		nextPtr  = &physicalDeviceVertexInputDynamicStateFeaturesEXT.pNext;
+	}
+
 	vk::VkPhysicalDeviceVulkan11Features physicalDeviceVulkan11Features;
 	deMemset(&physicalDeviceVulkan11Features, 0, sizeof(physicalDeviceVulkan11Features));
 
@@ -427,6 +507,16 @@
 		nextPtr  = &physicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR.pNext;
 	}
 
+	vk::VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT physicalDeviceYcbcr2Plane444FormatsFeaturesEXT;
+	deMemset(&physicalDeviceYcbcr2Plane444FormatsFeaturesEXT, 0, sizeof(physicalDeviceYcbcr2Plane444FormatsFeaturesEXT));
+
+	if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_EXT_ycbcr_2plane_444_formats")) )
+	{
+		physicalDeviceYcbcr2Plane444FormatsFeaturesEXT.sType = getStructureType<VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT>();
+		*nextPtr = &physicalDeviceYcbcr2Plane444FormatsFeaturesEXT;
+		nextPtr  = &physicalDeviceYcbcr2Plane444FormatsFeaturesEXT.pNext;
+	}
+
 	vk::VkPhysicalDeviceYcbcrImageArraysFeaturesEXT physicalDeviceYcbcrImageArraysFeaturesEXT;
 	deMemset(&physicalDeviceYcbcrImageArraysFeaturesEXT, 0, sizeof(physicalDeviceYcbcrImageArraysFeaturesEXT));
 
@@ -764,6 +854,15 @@
 		}
 	}
 
+	if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_EXT_pipeline_creation_cache_control")) )
+	{
+		if ( physicalDevicePipelineCreationCacheControlFeaturesEXT.pipelineCreationCacheControl == VK_FALSE )
+		{
+			log << tcu::TestLog::Message << "Mandatory feature pipelineCreationCacheControl not supported" << tcu::TestLog::EndMessage;
+			result = false;
+		}
+	}
+
 	if ( context.contextSupports(vk::ApiVersion(1, 2, 0)) )
 	{
 		if ( physicalDeviceVulkan12Features.separateDepthStencilLayouts == VK_FALSE )
@@ -811,6 +910,24 @@
 
 	if ( context.contextSupports(vk::ApiVersion(1, 2, 0)) && physicalDeviceVulkan12Features.descriptorIndexing )
 	{
+		if ( coreFeatures.features.shaderSampledImageArrayDynamicIndexing == VK_FALSE )
+		{
+			log << tcu::TestLog::Message << "Mandatory feature shaderSampledImageArrayDynamicIndexing not supported" << tcu::TestLog::EndMessage;
+			result = false;
+		}
+	}
+
+	if ( context.contextSupports(vk::ApiVersion(1, 2, 0)) && physicalDeviceVulkan12Features.descriptorIndexing )
+	{
+		if ( coreFeatures.features.shaderStorageBufferArrayDynamicIndexing == VK_FALSE )
+		{
+			log << tcu::TestLog::Message << "Mandatory feature shaderStorageBufferArrayDynamicIndexing not supported" << tcu::TestLog::EndMessage;
+			result = false;
+		}
+	}
+
+	if ( context.contextSupports(vk::ApiVersion(1, 2, 0)) && physicalDeviceVulkan12Features.descriptorIndexing )
+	{
 		if ( physicalDeviceVulkan12Features.shaderUniformTexelBufferArrayDynamicIndexing == VK_FALSE )
 		{
 			log << tcu::TestLog::Message << "Mandatory feature shaderUniformTexelBufferArrayDynamicIndexing not supported" << tcu::TestLog::EndMessage;
@@ -1214,6 +1331,366 @@
 		}
 	}
 
+	if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) )
+	{
+		if ( physicalDeviceAccelerationStructureFeaturesKHR.accelerationStructure == VK_FALSE )
+		{
+			log << tcu::TestLog::Message << "Mandatory feature accelerationStructure not supported" << tcu::TestLog::EndMessage;
+			result = false;
+		}
+	}
+
+	if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) )
+	{
+		if ( physicalDeviceAccelerationStructureFeaturesKHR.descriptorBindingAccelerationStructureUpdateAfterBind == VK_FALSE )
+		{
+			log << tcu::TestLog::Message << "Mandatory feature descriptorBindingAccelerationStructureUpdateAfterBind not supported" << tcu::TestLog::EndMessage;
+			result = false;
+		}
+	}
+
+	if ( context.contextSupports(vk::ApiVersion(1, 1, 0)) && isExtensionSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) )
+	{
+		if ( coreFeatures.features.shaderSampledImageArrayDynamicIndexing == VK_FALSE )
+		{
+			log << tcu::TestLog::Message << "Mandatory feature shaderSampledImageArrayDynamicIndexing not supported" << tcu::TestLog::EndMessage;
+			result = false;
+		}
+	}
+
+	if ( context.contextSupports(vk::ApiVersion(1, 1, 0)) && isExtensionSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) )
+	{
+		if ( coreFeatures.features.shaderStorageBufferArrayDynamicIndexing == VK_FALSE )
+		{
+			log << tcu::TestLog::Message << "Mandatory feature shaderStorageBufferArrayDynamicIndexing not supported" << tcu::TestLog::EndMessage;
+			result = false;
+		}
+	}
+
+	if ( context.contextSupports(vk::ApiVersion(1, 2, 0)) && isExtensionSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) )
+	{
+		if ( physicalDeviceVulkan12Features.shaderUniformTexelBufferArrayDynamicIndexing == VK_FALSE )
+		{
+			log << tcu::TestLog::Message << "Mandatory feature shaderUniformTexelBufferArrayDynamicIndexing not supported" << tcu::TestLog::EndMessage;
+			result = false;
+		}
+	}
+
+	if ( context.contextSupports(vk::ApiVersion(1, 2, 0)) && isExtensionSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) )
+	{
+		if ( physicalDeviceVulkan12Features.shaderStorageTexelBufferArrayDynamicIndexing == VK_FALSE )
+		{
+			log << tcu::TestLog::Message << "Mandatory feature shaderStorageTexelBufferArrayDynamicIndexing not supported" << tcu::TestLog::EndMessage;
+			result = false;
+		}
+	}
+
+	if ( context.contextSupports(vk::ApiVersion(1, 2, 0)) && isExtensionSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) )
+	{
+		if ( physicalDeviceVulkan12Features.shaderSampledImageArrayNonUniformIndexing == VK_FALSE )
+		{
+			log << tcu::TestLog::Message << "Mandatory feature shaderSampledImageArrayNonUniformIndexing not supported" << tcu::TestLog::EndMessage;
+			result = false;
+		}
+	}
+
+	if ( context.contextSupports(vk::ApiVersion(1, 2, 0)) && isExtensionSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) )
+	{
+		if ( physicalDeviceVulkan12Features.shaderStorageBufferArrayNonUniformIndexing == VK_FALSE )
+		{
+			log << tcu::TestLog::Message << "Mandatory feature shaderStorageBufferArrayNonUniformIndexing not supported" << tcu::TestLog::EndMessage;
+			result = false;
+		}
+	}
+
+	if ( context.contextSupports(vk::ApiVersion(1, 2, 0)) && isExtensionSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) )
+	{
+		if ( physicalDeviceVulkan12Features.shaderUniformTexelBufferArrayNonUniformIndexing == VK_FALSE )
+		{
+			log << tcu::TestLog::Message << "Mandatory feature shaderUniformTexelBufferArrayNonUniformIndexing not supported" << tcu::TestLog::EndMessage;
+			result = false;
+		}
+	}
+
+	if ( context.contextSupports(vk::ApiVersion(1, 2, 0)) && isExtensionSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) )
+	{
+		if ( physicalDeviceVulkan12Features.descriptorBindingSampledImageUpdateAfterBind == VK_FALSE )
+		{
+			log << tcu::TestLog::Message << "Mandatory feature descriptorBindingSampledImageUpdateAfterBind not supported" << tcu::TestLog::EndMessage;
+			result = false;
+		}
+	}
+
+	if ( context.contextSupports(vk::ApiVersion(1, 2, 0)) && isExtensionSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) )
+	{
+		if ( physicalDeviceVulkan12Features.descriptorBindingStorageImageUpdateAfterBind == VK_FALSE )
+		{
+			log << tcu::TestLog::Message << "Mandatory feature descriptorBindingStorageImageUpdateAfterBind not supported" << tcu::TestLog::EndMessage;
+			result = false;
+		}
+	}
+
+	if ( context.contextSupports(vk::ApiVersion(1, 2, 0)) && isExtensionSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) )
+	{
+		if ( physicalDeviceVulkan12Features.descriptorBindingStorageBufferUpdateAfterBind == VK_FALSE )
+		{
+			log << tcu::TestLog::Message << "Mandatory feature descriptorBindingStorageBufferUpdateAfterBind not supported" << tcu::TestLog::EndMessage;
+			result = false;
+		}
+	}
+
+	if ( context.contextSupports(vk::ApiVersion(1, 2, 0)) && isExtensionSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) )
+	{
+		if ( physicalDeviceVulkan12Features.descriptorBindingUniformTexelBufferUpdateAfterBind == VK_FALSE )
+		{
+			log << tcu::TestLog::Message << "Mandatory feature descriptorBindingUniformTexelBufferUpdateAfterBind not supported" << tcu::TestLog::EndMessage;
+			result = false;
+		}
+	}
+
+	if ( context.contextSupports(vk::ApiVersion(1, 2, 0)) && isExtensionSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) )
+	{
+		if ( physicalDeviceVulkan12Features.descriptorBindingStorageTexelBufferUpdateAfterBind == VK_FALSE )
+		{
+			log << tcu::TestLog::Message << "Mandatory feature descriptorBindingStorageTexelBufferUpdateAfterBind not supported" << tcu::TestLog::EndMessage;
+			result = false;
+		}
+	}
+
+	if ( context.contextSupports(vk::ApiVersion(1, 2, 0)) && isExtensionSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) )
+	{
+		if ( physicalDeviceVulkan12Features.descriptorBindingUpdateUnusedWhilePending == VK_FALSE )
+		{
+			log << tcu::TestLog::Message << "Mandatory feature descriptorBindingUpdateUnusedWhilePending not supported" << tcu::TestLog::EndMessage;
+			result = false;
+		}
+	}
+
+	if ( context.contextSupports(vk::ApiVersion(1, 2, 0)) && isExtensionSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) )
+	{
+		if ( physicalDeviceVulkan12Features.descriptorBindingPartiallyBound == VK_FALSE )
+		{
+			log << tcu::TestLog::Message << "Mandatory feature descriptorBindingPartiallyBound not supported" << tcu::TestLog::EndMessage;
+			result = false;
+		}
+	}
+
+	if ( context.contextSupports(vk::ApiVersion(1, 2, 0)) && isExtensionSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) )
+	{
+		if ( physicalDeviceVulkan12Features.runtimeDescriptorArray == VK_FALSE )
+		{
+			log << tcu::TestLog::Message << "Mandatory feature runtimeDescriptorArray not supported" << tcu::TestLog::EndMessage;
+			result = false;
+		}
+	}
+
+	if ( context.contextSupports(vk::ApiVersion(1, 2, 0)) && isExtensionSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) )
+	{
+		if ( physicalDeviceVulkan12Features.bufferDeviceAddress == VK_FALSE )
+		{
+			log << tcu::TestLog::Message << "Mandatory feature bufferDeviceAddress not supported" << tcu::TestLog::EndMessage;
+			result = false;
+		}
+	}
+
+	if ( context.contextSupports(vk::ApiVersion(1, 1, 0)) && isExtensionSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) )
+	{
+		if ( physicalDeviceBufferDeviceAddressFeaturesKHR.bufferDeviceAddress == VK_FALSE )
+		{
+			log << tcu::TestLog::Message << "Mandatory feature bufferDeviceAddress not supported" << tcu::TestLog::EndMessage;
+			result = false;
+		}
+	}
+
+	if ( context.contextSupports(vk::ApiVersion(1, 1, 0)) && isExtensionSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) )
+	{
+		if ( physicalDeviceDescriptorIndexingFeaturesEXT.shaderUniformTexelBufferArrayDynamicIndexing == VK_FALSE )
+		{
+			log << tcu::TestLog::Message << "Mandatory feature shaderUniformTexelBufferArrayDynamicIndexing not supported" << tcu::TestLog::EndMessage;
+			result = false;
+		}
+	}
+
+	if ( context.contextSupports(vk::ApiVersion(1, 1, 0)) && isExtensionSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) )
+	{
+		if ( physicalDeviceDescriptorIndexingFeaturesEXT.shaderStorageTexelBufferArrayDynamicIndexing == VK_FALSE )
+		{
+			log << tcu::TestLog::Message << "Mandatory feature shaderStorageTexelBufferArrayDynamicIndexing not supported" << tcu::TestLog::EndMessage;
+			result = false;
+		}
+	}
+
+	if ( context.contextSupports(vk::ApiVersion(1, 1, 0)) && isExtensionSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) )
+	{
+		if ( physicalDeviceDescriptorIndexingFeaturesEXT.shaderSampledImageArrayNonUniformIndexing == VK_FALSE )
+		{
+			log << tcu::TestLog::Message << "Mandatory feature shaderSampledImageArrayNonUniformIndexing not supported" << tcu::TestLog::EndMessage;
+			result = false;
+		}
+	}
+
+	if ( context.contextSupports(vk::ApiVersion(1, 1, 0)) && isExtensionSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) )
+	{
+		if ( physicalDeviceDescriptorIndexingFeaturesEXT.shaderStorageBufferArrayNonUniformIndexing == VK_FALSE )
+		{
+			log << tcu::TestLog::Message << "Mandatory feature shaderStorageBufferArrayNonUniformIndexing not supported" << tcu::TestLog::EndMessage;
+			result = false;
+		}
+	}
+
+	if ( context.contextSupports(vk::ApiVersion(1, 1, 0)) && isExtensionSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) )
+	{
+		if ( physicalDeviceDescriptorIndexingFeaturesEXT.shaderUniformTexelBufferArrayNonUniformIndexing == VK_FALSE )
+		{
+			log << tcu::TestLog::Message << "Mandatory feature shaderUniformTexelBufferArrayNonUniformIndexing not supported" << tcu::TestLog::EndMessage;
+			result = false;
+		}
+	}
+
+	if ( context.contextSupports(vk::ApiVersion(1, 1, 0)) && isExtensionSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) )
+	{
+		if ( physicalDeviceDescriptorIndexingFeaturesEXT.descriptorBindingSampledImageUpdateAfterBind == VK_FALSE )
+		{
+			log << tcu::TestLog::Message << "Mandatory feature descriptorBindingSampledImageUpdateAfterBind not supported" << tcu::TestLog::EndMessage;
+			result = false;
+		}
+	}
+
+	if ( context.contextSupports(vk::ApiVersion(1, 1, 0)) && isExtensionSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) )
+	{
+		if ( physicalDeviceDescriptorIndexingFeaturesEXT.descriptorBindingStorageImageUpdateAfterBind == VK_FALSE )
+		{
+			log << tcu::TestLog::Message << "Mandatory feature descriptorBindingStorageImageUpdateAfterBind not supported" << tcu::TestLog::EndMessage;
+			result = false;
+		}
+	}
+
+	if ( context.contextSupports(vk::ApiVersion(1, 1, 0)) && isExtensionSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) )
+	{
+		if ( physicalDeviceDescriptorIndexingFeaturesEXT.descriptorBindingStorageBufferUpdateAfterBind == VK_FALSE )
+		{
+			log << tcu::TestLog::Message << "Mandatory feature descriptorBindingStorageBufferUpdateAfterBind not supported" << tcu::TestLog::EndMessage;
+			result = false;
+		}
+	}
+
+	if ( context.contextSupports(vk::ApiVersion(1, 1, 0)) && isExtensionSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) )
+	{
+		if ( physicalDeviceDescriptorIndexingFeaturesEXT.descriptorBindingUniformTexelBufferUpdateAfterBind == VK_FALSE )
+		{
+			log << tcu::TestLog::Message << "Mandatory feature descriptorBindingUniformTexelBufferUpdateAfterBind not supported" << tcu::TestLog::EndMessage;
+			result = false;
+		}
+	}
+
+	if ( context.contextSupports(vk::ApiVersion(1, 1, 0)) && isExtensionSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) )
+	{
+		if ( physicalDeviceDescriptorIndexingFeaturesEXT.descriptorBindingStorageTexelBufferUpdateAfterBind == VK_FALSE )
+		{
+			log << tcu::TestLog::Message << "Mandatory feature descriptorBindingStorageTexelBufferUpdateAfterBind not supported" << tcu::TestLog::EndMessage;
+			result = false;
+		}
+	}
+
+	if ( context.contextSupports(vk::ApiVersion(1, 1, 0)) && isExtensionSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) )
+	{
+		if ( physicalDeviceDescriptorIndexingFeaturesEXT.descriptorBindingUpdateUnusedWhilePending == VK_FALSE )
+		{
+			log << tcu::TestLog::Message << "Mandatory feature descriptorBindingUpdateUnusedWhilePending not supported" << tcu::TestLog::EndMessage;
+			result = false;
+		}
+	}
+
+	if ( context.contextSupports(vk::ApiVersion(1, 1, 0)) && isExtensionSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) )
+	{
+		if ( physicalDeviceDescriptorIndexingFeaturesEXT.descriptorBindingPartiallyBound == VK_FALSE )
+		{
+			log << tcu::TestLog::Message << "Mandatory feature descriptorBindingPartiallyBound not supported" << tcu::TestLog::EndMessage;
+			result = false;
+		}
+	}
+
+	if ( context.contextSupports(vk::ApiVersion(1, 1, 0)) && isExtensionSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) )
+	{
+		if ( physicalDeviceDescriptorIndexingFeaturesEXT.runtimeDescriptorArray == VK_FALSE )
+		{
+			log << tcu::TestLog::Message << "Mandatory feature runtimeDescriptorArray not supported" << tcu::TestLog::EndMessage;
+			result = false;
+		}
+	}
+
+	if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_KHR_ray_tracing_pipeline")) )
+	{
+		if ( ( physicalDeviceRayTracingPipelineFeaturesKHR.rayTracingPipeline == VK_FALSE ) && ( physicalDeviceRayTracingPipelineFeaturesKHR.rayTracingPipelineTraceRaysIndirect == VK_FALSE ) )
+		{
+			log << tcu::TestLog::Message << "Mandatory feature rayTracingPipeline or rayTracingPipelineTraceRaysIndirect not supported" << tcu::TestLog::EndMessage;
+			result = false;
+		}
+	}
+
+	if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_KHR_ray_tracing_pipeline")) && isExtensionSupported(deviceExtensions, RequiredExtension("VK_KHR_ray_query")) )
+	{
+		if ( physicalDeviceRayTracingPipelineFeaturesKHR.rayTraversalPrimitiveCulling == VK_FALSE )
+		{
+			log << tcu::TestLog::Message << "Mandatory feature rayTraversalPrimitiveCulling not supported" << tcu::TestLog::EndMessage;
+			result = false;
+		}
+	}
+
+	if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_KHR_ray_query")) )
+	{
+		if ( physicalDeviceRayQueryFeaturesKHR.rayQuery == VK_FALSE )
+		{
+			log << tcu::TestLog::Message << "Mandatory feature rayQuery not supported" << tcu::TestLog::EndMessage;
+			result = false;
+		}
+	}
+
+	if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_EXT_vertex_input_dynamic_state")) )
+	{
+		if ( physicalDeviceVertexInputDynamicStateFeaturesEXT.vertexInputDynamicState == VK_FALSE )
+		{
+			log << tcu::TestLog::Message << "Mandatory feature vertexInputDynamicState not supported" << tcu::TestLog::EndMessage;
+			result = false;
+		}
+	}
+
+	if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_EXT_color_write_enable")) )
+	{
+		if ( physicalDeviceColorWriteEnableFeaturesEXT.colorWriteEnable == VK_FALSE )
+		{
+			log << tcu::TestLog::Message << "Mandatory feature colorWriteEnable not supported" << tcu::TestLog::EndMessage;
+			result = false;
+		}
+	}
+
+	if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_EXT_ycbcr_2plane_444_formats")) )
+	{
+		if ( physicalDeviceYcbcr2Plane444FormatsFeaturesEXT.ycbcr2plane444Formats == VK_FALSE )
+		{
+			log << tcu::TestLog::Message << "Mandatory feature ycbcr2plane444Formats not supported" << tcu::TestLog::EndMessage;
+			result = false;
+		}
+	}
+
+	if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_EXT_extended_dynamic_state2")) )
+	{
+		if ( physicalDeviceExtendedDynamicState2FeaturesEXT.extendedDynamicState2 == VK_FALSE )
+		{
+			log << tcu::TestLog::Message << "Mandatory feature extendedDynamicState2 not supported" << tcu::TestLog::EndMessage;
+			result = false;
+		}
+	}
+
+	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/vkMemUtil.cpp b/external/vulkancts/framework/vulkan/vkMemUtil.cpp
index 0642cd0..d5f4801 100644
--- a/external/vulkancts/framework/vulkan/vkMemUtil.cpp
+++ b/external/vulkancts/framework/vulkan/vkMemUtil.cpp
@@ -237,7 +237,7 @@
 
 	if (requirement & MemoryRequirement::DeviceAddress)
 	{
-		allocFlagsInfo.flags |= VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT_KHR;
+		allocFlagsInfo.flags |= VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT;
 		allocInfo.pNext = &allocFlagsInfo;
 	}
 
@@ -292,7 +292,7 @@
 	const VkMemoryRequirements				memoryRequirements		= getBufferMemoryRequirements(vkd, device, buffer);
 	const VkMemoryDedicatedAllocateInfo		dedicatedAllocationInfo	=
 	{
-		VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO_KHR,				// VkStructureType		sType
+		VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO,					// VkStructureType		sType
 		DE_NULL,															// const void*			pNext
 		DE_NULL,															// VkImage				image
 		buffer																// VkBuffer				buffer
@@ -311,7 +311,7 @@
 	const VkMemoryRequirements				memoryRequirements		= getImageMemoryRequirements(vkd, device, image);
 	const VkMemoryDedicatedAllocateInfo		dedicatedAllocationInfo	=
 	{
-		VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO_KHR,			// VkStructureType		sType
+		VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO,				// VkStructureType		sType
 		DE_NULL,														// const void*			pNext
 		image,															// VkImage				image
 		DE_NULL															// VkBuffer				buffer
@@ -391,7 +391,7 @@
 
 		VkBindImagePlaneMemoryInfo	planeInfo	=
 		{
-			VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO_KHR,
+			VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO,
 			DE_NULL,
 			planeAspect
 		};
@@ -399,7 +399,7 @@
 
 		VkBindImageMemoryInfo		coreInfo	=
 		{
-			VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO_KHR,
+			VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO,
 			&planeInfos.back(),
 			image,
 			allocations.back()->getMemory(),
diff --git a/external/vulkancts/framework/vulkan/vkNullDriver.cpp b/external/vulkancts/framework/vulkan/vkNullDriver.cpp
index 6f587b7..c000704 100644
--- a/external/vulkancts/framework/vulkan/vkNullDriver.cpp
+++ b/external/vulkancts/framework/vulkan/vkNullDriver.cpp
@@ -545,6 +545,20 @@
 						{}
 };
 
+class VideoSessionKHR
+{
+public:
+						VideoSessionKHR				(VkDevice, const VkVideoSessionCreateInfoKHR*)
+						{}
+};
+
+class VideoSessionParametersKHR
+{
+public:
+						VideoSessionParametersKHR	(VkDevice, const VkVideoSessionParametersCreateInfoKHR*)
+						{}
+};
+
 class ValidationCacheEXT
 {
 public:
@@ -1243,7 +1257,7 @@
 #if defined(USE_ANDROID_O_HARDWARE_BUFFER)
 		VK_NULL_RETURN((*pMemory = allocateNonDispHandle<ExternalDeviceMemoryAndroid, DeviceMemory, VkDeviceMemory>(device, pAllocateInfo, pAllocator)));
 #else
-		return VK_ERROR_INVALID_EXTERNAL_HANDLE_KHR;
+		return VK_ERROR_INVALID_EXTERNAL_HANDLE;
 #endif
 	}
 	else
@@ -1391,7 +1405,7 @@
 
 	if (pExternalBufferInfo->handleType == VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID)
 	{
-		pExternalBufferProperties->externalMemoryProperties.externalMemoryFeatures = VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT_KHR | VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT_KHR;
+		pExternalBufferProperties->externalMemoryProperties.externalMemoryFeatures = VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT | VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT;
 		pExternalBufferProperties->externalMemoryProperties.exportFromImportedHandleTypes = VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID;
 		pExternalBufferProperties->externalMemoryProperties.compatibleHandleTypes = VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID;
 	}
@@ -1434,8 +1448,8 @@
 		}
 
 		if ((pImageFormatInfo->flags & ~(VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT
-										/*| VK_IMAGE_CREATE_PROTECTED_BIT_KHR*/
-										/*| VK_IMAGE_CREATE_EXTENDED_USAGE_BIT_KHR*/))
+										/*| VK_IMAGE_CREATE_PROTECTED_BIT*/
+										/*| VK_IMAGE_CREATE_EXTENDED_USAGE_BIT*/))
 			!= 0)
 		{
 			return VK_ERROR_FORMAT_NOT_SUPPORTED;
@@ -1443,9 +1457,9 @@
 
 		if (externalProperties)
 		{
-			externalProperties->externalMemoryProperties.externalMemoryFeatures			= VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT_KHR
-																						| VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT_KHR
-																						| VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT_KHR;
+			externalProperties->externalMemoryProperties.externalMemoryFeatures			= VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT
+																						| VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT
+																						| VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT;
 			externalProperties->externalMemoryProperties.exportFromImportedHandleTypes	= VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID;
 			externalProperties->externalMemoryProperties.compatibleHandleTypes			= VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID;
 		}
diff --git a/external/vulkancts/framework/vulkan/vkNullDriverImpl.inl b/external/vulkancts/framework/vulkan/vkNullDriverImpl.inl
index 98b768a..34e2676 100644
--- a/external/vulkancts/framework/vulkan/vkNullDriverImpl.inl
+++ b/external/vulkancts/framework/vulkan/vkNullDriverImpl.inl
@@ -206,6 +206,18 @@
 	VK_NULL_RETURN((*pSurface = allocateNonDispHandle<SurfaceKHR, VkSurfaceKHR>(instance, pCreateInfo, pAllocator)));
 }
 
+VKAPI_ATTR VkResult VKAPI_CALL createVideoSessionKHR (VkDevice device, const VkVideoSessionCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkVideoSessionKHR* pVideoSession)
+{
+	DE_UNREF(pAllocator);
+	VK_NULL_RETURN((*pVideoSession = allocateNonDispHandle<VideoSessionKHR, VkVideoSessionKHR>(device, pCreateInfo, pAllocator)));
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL createVideoSessionParametersKHR (VkDevice device, const VkVideoSessionParametersCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkVideoSessionParametersKHR* pVideoSessionParameters)
+{
+	DE_UNREF(pAllocator);
+	VK_NULL_RETURN((*pVideoSessionParameters = allocateNonDispHandle<VideoSessionParametersKHR, VkVideoSessionParametersKHR>(device, pCreateInfo, pAllocator)));
+}
+
 VKAPI_ATTR VkResult VKAPI_CALL createImagePipeSurfaceFUCHSIA (VkInstance instance, const VkImagePipeSurfaceCreateInfoFUCHSIA* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface)
 {
 	DE_UNREF(pAllocator);
@@ -462,6 +474,18 @@
 	freeNonDispHandle<AccelerationStructureKHR, VkAccelerationStructureKHR>(accelerationStructure, pAllocator);
 }
 
+VKAPI_ATTR void VKAPI_CALL destroyVideoSessionKHR (VkDevice device, VkVideoSessionKHR videoSession, const VkAllocationCallbacks* pAllocator)
+{
+	DE_UNREF(device);
+	freeNonDispHandle<VideoSessionKHR, VkVideoSessionKHR>(videoSession, pAllocator);
+}
+
+VKAPI_ATTR void VKAPI_CALL destroyVideoSessionParametersKHR (VkDevice device, VkVideoSessionParametersKHR videoSessionParameters, const VkAllocationCallbacks* pAllocator)
+{
+	DE_UNREF(device);
+	freeNonDispHandle<VideoSessionParametersKHR, VkVideoSessionParametersKHR>(videoSessionParameters, pAllocator);
+}
+
 VKAPI_ATTR VkResult VKAPI_CALL enumerateInstanceLayerProperties (deUint32* pPropertyCount, VkLayerProperties* pProperties)
 {
 	DE_UNREF(pPropertyCount);
@@ -2628,6 +2652,52 @@
 	return VK_SUCCESS;
 }
 
+VKAPI_ATTR void VKAPI_CALL cmdSetVertexInputEXT (VkCommandBuffer commandBuffer, deUint32 vertexBindingDescriptionCount, const VkVertexInputBindingDescription2EXT* pVertexBindingDescriptions, deUint32 vertexAttributeDescriptionCount, const VkVertexInputAttributeDescription2EXT* pVertexAttributeDescriptions)
+{
+	DE_UNREF(commandBuffer);
+	DE_UNREF(vertexBindingDescriptionCount);
+	DE_UNREF(pVertexBindingDescriptions);
+	DE_UNREF(vertexAttributeDescriptionCount);
+	DE_UNREF(pVertexAttributeDescriptions);
+}
+
+VKAPI_ATTR void VKAPI_CALL cmdSetPatchControlPointsEXT (VkCommandBuffer commandBuffer, deUint32 patchControlPoints)
+{
+	DE_UNREF(commandBuffer);
+	DE_UNREF(patchControlPoints);
+}
+
+VKAPI_ATTR void VKAPI_CALL cmdSetRasterizerDiscardEnableEXT (VkCommandBuffer commandBuffer, VkBool32 rasterizerDiscardEnable)
+{
+	DE_UNREF(commandBuffer);
+	DE_UNREF(rasterizerDiscardEnable);
+}
+
+VKAPI_ATTR void VKAPI_CALL cmdSetDepthBiasEnableEXT (VkCommandBuffer commandBuffer, VkBool32 depthBiasEnable)
+{
+	DE_UNREF(commandBuffer);
+	DE_UNREF(depthBiasEnable);
+}
+
+VKAPI_ATTR void VKAPI_CALL cmdSetLogicOpEXT (VkCommandBuffer commandBuffer, VkLogicOp logicOp)
+{
+	DE_UNREF(commandBuffer);
+	DE_UNREF(logicOp);
+}
+
+VKAPI_ATTR void VKAPI_CALL cmdSetPrimitiveRestartEnableEXT (VkCommandBuffer commandBuffer, VkBool32 primitiveRestartEnable)
+{
+	DE_UNREF(commandBuffer);
+	DE_UNREF(primitiveRestartEnable);
+}
+
+VKAPI_ATTR void VKAPI_CALL cmdSetColorWriteEnableEXT (VkCommandBuffer commandBuffer, deUint32 attachmentCount, const VkBool32* pColorWriteEnables)
+{
+	DE_UNREF(commandBuffer);
+	DE_UNREF(attachmentCount);
+	DE_UNREF(pColorWriteEnables);
+}
+
 VKAPI_ATTR void VKAPI_CALL cmdBuildAccelerationStructuresKHR (VkCommandBuffer commandBuffer, deUint32 infoCount, const VkAccelerationStructureBuildGeometryInfoKHR* pInfos, const VkAccelerationStructureBuildRangeInfoKHR* const* ppBuildRangeInfos)
 {
 	DE_UNREF(commandBuffer);
@@ -2799,6 +2869,111 @@
 	return VK_SUCCESS;
 }
 
+VKAPI_ATTR VkResult VKAPI_CALL getPhysicalDeviceVideoCapabilitiesKHR (VkPhysicalDevice physicalDevice, const VkVideoProfileKHR* pVideoProfile, VkVideoCapabilitiesKHR* pCapabilities)
+{
+	DE_UNREF(physicalDevice);
+	DE_UNREF(pVideoProfile);
+	DE_UNREF(pCapabilities);
+	return VK_SUCCESS;
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL getPhysicalDeviceVideoFormatPropertiesKHR (VkPhysicalDevice physicalDevice, const VkPhysicalDeviceVideoFormatInfoKHR* pVideoFormatInfo, deUint32* pVideoFormatPropertyCount, VkVideoFormatPropertiesKHR* pVideoFormatProperties)
+{
+	DE_UNREF(physicalDevice);
+	DE_UNREF(pVideoFormatInfo);
+	DE_UNREF(pVideoFormatPropertyCount);
+	DE_UNREF(pVideoFormatProperties);
+	return VK_SUCCESS;
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL getVideoSessionMemoryRequirementsKHR (VkDevice device, VkVideoSessionKHR videoSession, deUint32* pVideoSessionMemoryRequirementsCount, VkVideoGetMemoryPropertiesKHR* pVideoSessionMemoryRequirements)
+{
+	DE_UNREF(device);
+	DE_UNREF(videoSession);
+	DE_UNREF(pVideoSessionMemoryRequirementsCount);
+	DE_UNREF(pVideoSessionMemoryRequirements);
+	return VK_SUCCESS;
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL bindVideoSessionMemoryKHR (VkDevice device, VkVideoSessionKHR videoSession, deUint32 videoSessionBindMemoryCount, const VkVideoBindMemoryKHR* pVideoSessionBindMemories)
+{
+	DE_UNREF(device);
+	DE_UNREF(videoSession);
+	DE_UNREF(videoSessionBindMemoryCount);
+	DE_UNREF(pVideoSessionBindMemories);
+	return VK_SUCCESS;
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL updateVideoSessionParametersKHR (VkDevice device, VkVideoSessionParametersKHR videoSessionParameters, const VkVideoSessionParametersUpdateInfoKHR* pUpdateInfo)
+{
+	DE_UNREF(device);
+	DE_UNREF(videoSessionParameters);
+	DE_UNREF(pUpdateInfo);
+	return VK_SUCCESS;
+}
+
+VKAPI_ATTR void VKAPI_CALL cmdBeginVideoCodingKHR (VkCommandBuffer commandBuffer, const VkVideoBeginCodingInfoKHR* pBeginInfo)
+{
+	DE_UNREF(commandBuffer);
+	DE_UNREF(pBeginInfo);
+}
+
+VKAPI_ATTR void VKAPI_CALL cmdEndVideoCodingKHR (VkCommandBuffer commandBuffer, const VkVideoEndCodingInfoKHR* pEndCodingInfo)
+{
+	DE_UNREF(commandBuffer);
+	DE_UNREF(pEndCodingInfo);
+}
+
+VKAPI_ATTR void VKAPI_CALL cmdControlVideoCodingKHR (VkCommandBuffer commandBuffer, const VkVideoCodingControlInfoKHR* pCodingControlInfo)
+{
+	DE_UNREF(commandBuffer);
+	DE_UNREF(pCodingControlInfo);
+}
+
+VKAPI_ATTR void VKAPI_CALL cmdDecodeVideoKHR (VkCommandBuffer commandBuffer, const VkVideoDecodeInfoKHR* pFrameInfo)
+{
+	DE_UNREF(commandBuffer);
+	DE_UNREF(pFrameInfo);
+}
+
+VKAPI_ATTR void VKAPI_CALL cmdEncodeVideoKHR (VkCommandBuffer commandBuffer, const VkVideoEncodeInfoKHR* pEncodeInfo)
+{
+	DE_UNREF(commandBuffer);
+	DE_UNREF(pEncodeInfo);
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL getMemoryZirconHandleFUCHSIA (VkDevice device, const VkMemoryGetZirconHandleInfoFUCHSIA* pGetZirconHandleInfo, pt::zx_handle_t* pZirconHandle)
+{
+	DE_UNREF(device);
+	DE_UNREF(pGetZirconHandleInfo);
+	DE_UNREF(pZirconHandle);
+	return VK_SUCCESS;
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL getMemoryZirconHandlePropertiesFUCHSIA (VkDevice device, VkExternalMemoryHandleTypeFlagBits handleType, pt::zx_handle_t zirconHandle, VkMemoryZirconHandlePropertiesFUCHSIA* pMemoryZirconHandleProperties)
+{
+	DE_UNREF(device);
+	DE_UNREF(handleType);
+	DE_UNREF(zirconHandle);
+	DE_UNREF(pMemoryZirconHandleProperties);
+	return VK_SUCCESS;
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL importSemaphoreZirconHandleFUCHSIA (VkDevice device, const VkImportSemaphoreZirconHandleInfoFUCHSIA* pImportSemaphoreZirconHandleInfo)
+{
+	DE_UNREF(device);
+	DE_UNREF(pImportSemaphoreZirconHandleInfo);
+	return VK_SUCCESS;
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL getSemaphoreZirconHandleFUCHSIA (VkDevice device, const VkSemaphoreGetZirconHandleInfoFUCHSIA* pGetZirconHandleInfo, pt::zx_handle_t* pZirconHandle)
+{
+	DE_UNREF(device);
+	DE_UNREF(pGetZirconHandleInfo);
+	DE_UNREF(pZirconHandle);
+	return VK_SUCCESS;
+}
+
 VKAPI_ATTR VkBool32 VKAPI_CALL getPhysicalDeviceWaylandPresentationSupportKHR (VkPhysicalDevice physicalDevice, deUint32 queueFamilyIndex, pt::WaylandDisplayPtr display)
 {
 	DE_UNREF(physicalDevice);
@@ -3021,6 +3196,8 @@
 	VK_NULL_FUNC_ENTRY(vkAcquireWinrtDisplayNV,												acquireWinrtDisplayNV),
 	VK_NULL_FUNC_ENTRY(vkGetWinrtDisplayNV,													getWinrtDisplayNV),
 	VK_NULL_FUNC_ENTRY(vkCreateAndroidSurfaceKHR,											createAndroidSurfaceKHR),
+	VK_NULL_FUNC_ENTRY(vkGetPhysicalDeviceVideoCapabilitiesKHR,								getPhysicalDeviceVideoCapabilitiesKHR),
+	VK_NULL_FUNC_ENTRY(vkGetPhysicalDeviceVideoFormatPropertiesKHR,							getPhysicalDeviceVideoFormatPropertiesKHR),
 	VK_NULL_FUNC_ENTRY(vkCreateImagePipeSurfaceFUCHSIA,										createImagePipeSurfaceFUCHSIA),
 	VK_NULL_FUNC_ENTRY(vkCreateStreamDescriptorSurfaceGGP,									createStreamDescriptorSurfaceGGP),
 	VK_NULL_FUNC_ENTRY(vkCreateIOSSurfaceMVK,												createIOSSurfaceMVK),
@@ -3364,6 +3541,13 @@
 	VK_NULL_FUNC_ENTRY(vkSetPrivateDataEXT,									setPrivateDataEXT),
 	VK_NULL_FUNC_ENTRY(vkGetPrivateDataEXT,									getPrivateDataEXT),
 	VK_NULL_FUNC_ENTRY(vkCmdSetFragmentShadingRateEnumNV,					cmdSetFragmentShadingRateEnumNV),
+	VK_NULL_FUNC_ENTRY(vkCmdSetVertexInputEXT,								cmdSetVertexInputEXT),
+	VK_NULL_FUNC_ENTRY(vkCmdSetPatchControlPointsEXT,						cmdSetPatchControlPointsEXT),
+	VK_NULL_FUNC_ENTRY(vkCmdSetRasterizerDiscardEnableEXT,					cmdSetRasterizerDiscardEnableEXT),
+	VK_NULL_FUNC_ENTRY(vkCmdSetDepthBiasEnableEXT,							cmdSetDepthBiasEnableEXT),
+	VK_NULL_FUNC_ENTRY(vkCmdSetLogicOpEXT,									cmdSetLogicOpEXT),
+	VK_NULL_FUNC_ENTRY(vkCmdSetPrimitiveRestartEnableEXT,					cmdSetPrimitiveRestartEnableEXT),
+	VK_NULL_FUNC_ENTRY(vkCmdSetColorWriteEnableEXT,							cmdSetColorWriteEnableEXT),
 	VK_NULL_FUNC_ENTRY(vkCreateAccelerationStructureKHR,					createAccelerationStructureKHR),
 	VK_NULL_FUNC_ENTRY(vkDestroyAccelerationStructureKHR,					destroyAccelerationStructureKHR),
 	VK_NULL_FUNC_ENTRY(vkCmdBuildAccelerationStructuresKHR,					cmdBuildAccelerationStructuresKHR),
@@ -3388,6 +3572,22 @@
 	VK_NULL_FUNC_ENTRY(vkCmdSetRayTracingPipelineStackSizeKHR,				cmdSetRayTracingPipelineStackSizeKHR),
 	VK_NULL_FUNC_ENTRY(vkGetAndroidHardwareBufferPropertiesANDROID,			getAndroidHardwareBufferPropertiesANDROID),
 	VK_NULL_FUNC_ENTRY(vkGetMemoryAndroidHardwareBufferANDROID,				getMemoryAndroidHardwareBufferANDROID),
+	VK_NULL_FUNC_ENTRY(vkCreateVideoSessionKHR,								createVideoSessionKHR),
+	VK_NULL_FUNC_ENTRY(vkDestroyVideoSessionKHR,							destroyVideoSessionKHR),
+	VK_NULL_FUNC_ENTRY(vkGetVideoSessionMemoryRequirementsKHR,				getVideoSessionMemoryRequirementsKHR),
+	VK_NULL_FUNC_ENTRY(vkBindVideoSessionMemoryKHR,							bindVideoSessionMemoryKHR),
+	VK_NULL_FUNC_ENTRY(vkCreateVideoSessionParametersKHR,					createVideoSessionParametersKHR),
+	VK_NULL_FUNC_ENTRY(vkUpdateVideoSessionParametersKHR,					updateVideoSessionParametersKHR),
+	VK_NULL_FUNC_ENTRY(vkDestroyVideoSessionParametersKHR,					destroyVideoSessionParametersKHR),
+	VK_NULL_FUNC_ENTRY(vkCmdBeginVideoCodingKHR,							cmdBeginVideoCodingKHR),
+	VK_NULL_FUNC_ENTRY(vkCmdEndVideoCodingKHR,								cmdEndVideoCodingKHR),
+	VK_NULL_FUNC_ENTRY(vkCmdControlVideoCodingKHR,							cmdControlVideoCodingKHR),
+	VK_NULL_FUNC_ENTRY(vkCmdDecodeVideoKHR,									cmdDecodeVideoKHR),
+	VK_NULL_FUNC_ENTRY(vkCmdEncodeVideoKHR,									cmdEncodeVideoKHR),
+	VK_NULL_FUNC_ENTRY(vkGetMemoryZirconHandleFUCHSIA,						getMemoryZirconHandleFUCHSIA),
+	VK_NULL_FUNC_ENTRY(vkGetMemoryZirconHandlePropertiesFUCHSIA,			getMemoryZirconHandlePropertiesFUCHSIA),
+	VK_NULL_FUNC_ENTRY(vkImportSemaphoreZirconHandleFUCHSIA,				importSemaphoreZirconHandleFUCHSIA),
+	VK_NULL_FUNC_ENTRY(vkGetSemaphoreZirconHandleFUCHSIA,					getSemaphoreZirconHandleFUCHSIA),
 	VK_NULL_FUNC_ENTRY(vkGetMemoryWin32HandleKHR,							getMemoryWin32HandleKHR),
 	VK_NULL_FUNC_ENTRY(vkGetMemoryWin32HandlePropertiesKHR,					getMemoryWin32HandlePropertiesKHR),
 	VK_NULL_FUNC_ENTRY(vkImportSemaphoreWin32HandleKHR,						importSemaphoreWin32HandleKHR),
diff --git a/external/vulkancts/framework/vulkan/vkObjTypeImpl.inl b/external/vulkancts/framework/vulkan/vkObjTypeImpl.inl
index f705547..c905228 100644
--- a/external/vulkancts/framework/vulkan/vkObjTypeImpl.inl
+++ b/external/vulkancts/framework/vulkan/vkObjTypeImpl.inl
@@ -45,4 +45,6 @@
 template<> inline VkObjectType	getObjectType<VkIndirectCommandsLayoutNV>		(void) { return VK_OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NV;		}
 template<> inline VkObjectType	getObjectType<VkPrivateDataSlotEXT>				(void) { return VK_OBJECT_TYPE_PRIVATE_DATA_SLOT_EXT;			}
 template<> inline VkObjectType	getObjectType<VkAccelerationStructureKHR>		(void) { return VK_OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR;		}
+template<> inline VkObjectType	getObjectType<VkVideoSessionKHR>				(void) { return VK_OBJECT_TYPE_VIDEO_SESSION_KHR;				}
+template<> inline VkObjectType	getObjectType<VkVideoSessionParametersKHR>		(void) { return VK_OBJECT_TYPE_VIDEO_SESSION_PARAMETERS_KHR;	}
 }
diff --git a/external/vulkancts/framework/vulkan/vkObjUtil.cpp b/external/vulkancts/framework/vulkan/vkObjUtil.cpp
index 3c14334..6203a31 100644
--- a/external/vulkancts/framework/vulkan/vkObjUtil.cpp
+++ b/external/vulkancts/framework/vulkan/vkObjUtil.cpp
@@ -29,9 +29,42 @@
 
 #include "tcuVector.hpp"
 
+#include "deSTLUtil.hpp"
+
 namespace vk
 {
 
+Move<VkPipeline> makeComputePipeline (const DeviceInterface&					vk,
+									  const VkDevice							device,
+									  const VkPipelineLayout					pipelineLayout,
+									  const VkPipelineCreateFlags				pipelineFlags,
+									  const VkShaderModule						shaderModule,
+									  const VkPipelineShaderStageCreateFlags	shaderFlags,
+									  const VkSpecializationInfo*				specializationInfo)
+{
+	const VkPipelineShaderStageCreateInfo pipelineShaderStageParams =
+	{
+		VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO,	// VkStructureType						sType;
+		nullptr,												// const void*							pNext;
+		shaderFlags,											// VkPipelineShaderStageCreateFlags		flags;
+		VK_SHADER_STAGE_COMPUTE_BIT,							// VkShaderStageFlagBits				stage;
+		shaderModule,											// VkShaderModule						module;
+		"main",													// const char*							pName;
+		specializationInfo,										// const VkSpecializationInfo*			pSpecializationInfo;
+	};
+	const VkComputePipelineCreateInfo pipelineCreateInfo =
+	{
+		VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO,		// VkStructureType					sType;
+		nullptr,											// const void*						pNext;
+		pipelineFlags,										// VkPipelineCreateFlags			flags;
+		pipelineShaderStageParams,							// VkPipelineShaderStageCreateInfo	stage;
+		pipelineLayout,										// VkPipelineLayout					layout;
+		DE_NULL,											// VkPipeline						basePipelineHandle;
+		0,													// deInt32							basePipelineIndex;
+	};
+	return createComputePipeline(vk, device, DE_NULL , &pipelineCreateInfo);
+}
+
 Move<VkPipeline> makeGraphicsPipeline(const DeviceInterface&						vk,
 									  const VkDevice								device,
 									  const VkPipelineLayout						pipelineLayout,
@@ -545,6 +578,28 @@
 	return bufferCreateInfo;
 }
 
+VkBufferCreateInfo makeBufferCreateInfo (const VkDeviceSize				size,
+										 const VkBufferUsageFlags		usage,
+										 const std::vector<deUint32>&	queueFamilyIndices)
+{
+	const deUint32				queueFamilyIndexCount	= static_cast<deUint32>(queueFamilyIndices.size());
+	const deUint32*				pQueueFamilyIndices		= de::dataSafe(queueFamilyIndices);
+	const VkBufferCreateInfo	bufferCreateInfo		=
+	{
+		VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO,	// VkStructureType		sType;
+		DE_NULL,								// const void*			pNext;
+		(VkBufferCreateFlags)0,					// VkBufferCreateFlags	flags;
+		size,									// VkDeviceSize			size;
+		usage,									// VkBufferUsageFlags	usage;
+		VK_SHARING_MODE_EXCLUSIVE,				// VkSharingMode		sharingMode;
+		queueFamilyIndexCount,					// deUint32				queueFamilyIndexCount;
+		pQueueFamilyIndices,					// const deUint32*		pQueueFamilyIndices;
+	};
+
+	return bufferCreateInfo;
+}
+
+
 Move<VkPipelineLayout> makePipelineLayout (const DeviceInterface&		vk,
 										   const VkDevice				device,
 										   const VkDescriptorSetLayout	descriptorSetLayout)
@@ -552,6 +607,19 @@
 	return makePipelineLayout(vk, device, (descriptorSetLayout == DE_NULL) ? 0u : 1u, &descriptorSetLayout);
 }
 
+Move<VkPipelineLayout> makePipelineLayout (const DeviceInterface&								vk,
+										   const VkDevice										device,
+										   const std::vector<vk::Move<VkDescriptorSetLayout>>	&descriptorSetLayouts)
+{
+	// Create a list of descriptor sets without move pointers.
+	std::vector<vk::VkDescriptorSetLayout> descriptorSetLayoutsUnWrapped;
+	for (const auto& descriptorSetLayout : descriptorSetLayouts)
+	{
+		descriptorSetLayoutsUnWrapped.push_back(descriptorSetLayout.get());
+	}
+	return vk::makePipelineLayout(vk, device, static_cast<deUint32>(descriptorSetLayoutsUnWrapped.size()), descriptorSetLayoutsUnWrapped.data());
+}
+
 Move<VkPipelineLayout> makePipelineLayout (const DeviceInterface&		vk,
 										   const VkDevice				device,
 										   const deUint32				setLayoutCount,
diff --git a/external/vulkancts/framework/vulkan/vkObjUtil.hpp b/external/vulkancts/framework/vulkan/vkObjUtil.hpp
index ac6396c..19b51ef 100644
--- a/external/vulkancts/framework/vulkan/vkObjUtil.hpp
+++ b/external/vulkancts/framework/vulkan/vkObjUtil.hpp
@@ -29,6 +29,13 @@
 
 namespace vk
 {
+Move<VkPipeline> makeComputePipeline (const DeviceInterface&					vk,
+									  const VkDevice							device,
+									  const VkPipelineLayout					pipelineLayout,
+									  const VkPipelineCreateFlags				pipelineFlags,
+									  const VkShaderModule						shaderModule,
+									  const VkPipelineShaderStageCreateFlags	shaderFlags,
+									  const VkSpecializationInfo*				specializationInfo);
 
 Move<VkPipeline> makeGraphicsPipeline (const DeviceInterface&							vk,
 									   const VkDevice									device,
@@ -88,7 +95,7 @@
 								 const VkImageViewType					imageViewType,
 								 const VkFormat							format,
 								 const VkImageSubresourceRange			subresourceRange,
-								 const vk::VkImageViewUsageCreateInfo*	imageUsageCreateInfoKHR = DE_NULL);
+								 const vk::VkImageViewUsageCreateInfo*	imageUsageCreateInfo = DE_NULL);
 
 Move<VkBufferView> makeBufferView (const DeviceInterface&	vk,
 								   const VkDevice			vkDevice,
@@ -106,10 +113,18 @@
 VkBufferCreateInfo makeBufferCreateInfo (const VkDeviceSize			size,
 										 const VkBufferUsageFlags	usage);
 
+VkBufferCreateInfo makeBufferCreateInfo (const VkDeviceSize				size,
+										 const VkBufferUsageFlags		usage,
+										 const std::vector<deUint32>&	queueFamilyIndices);
+
 Move<VkPipelineLayout> makePipelineLayout (const DeviceInterface&		vk,
 										   const VkDevice				device,
 										   const VkDescriptorSetLayout	descriptorSetLayout = DE_NULL);
 
+Move<VkPipelineLayout> makePipelineLayout (const DeviceInterface&								vk,
+										   const VkDevice										device,
+										   const std::vector<vk::Move<VkDescriptorSetLayout>>	&descriptorSetLayouts);
+
 Move<VkPipelineLayout> makePipelineLayout (const DeviceInterface&		vk,
 										   const VkDevice				device,
 										   const deUint32				setLayoutCount,
diff --git a/external/vulkancts/framework/vulkan/vkPrograms.cpp b/external/vulkancts/framework/vulkan/vkPrograms.cpp
index 6444570..2e41282 100644
--- a/external/vulkancts/framework/vulkan/vkPrograms.cpp
+++ b/external/vulkancts/framework/vulkan/vkPrograms.cpp
@@ -60,6 +60,7 @@
 ProgramBinary::ProgramBinary (ProgramFormat format, size_t binarySize, const deUint8* binary)
 	: m_format	(format)
 	, m_binary	(binary, binary+binarySize)
+	, m_used	(false)
 {
 }
 
@@ -697,6 +698,8 @@
 			(const deUint32*)binary.getBinary(),
 		};
 
+		binary.setUsed();
+
 		return createShaderModule(deviceInterface, device, &shaderModuleInfo);
 	}
 	else
@@ -751,7 +754,7 @@
 {
 	vk::SpirvVersion	result			= vk::SPIRV_VERSION_LAST;
 
-	deUint32 vulkanVersionMajorMinor = VK_MAKE_VERSION(VK_VERSION_MAJOR(vulkanVersion), VK_VERSION_MINOR(vulkanVersion), 0);
+	deUint32 vulkanVersionMajorMinor = VK_MAKE_VERSION(VK_API_VERSION_MAJOR(vulkanVersion), VK_API_VERSION_MINOR(vulkanVersion), 0);
 	if (vulkanVersionMajorMinor == VK_API_VERSION_1_0)
 		result = vk::SPIRV_VERSION_1_0;
 	else if (vulkanVersionMajorMinor == VK_API_VERSION_1_1)
diff --git a/external/vulkancts/framework/vulkan/vkPrograms.hpp b/external/vulkancts/framework/vulkan/vkPrograms.hpp
index fe43469..9b8f344 100644
--- a/external/vulkancts/framework/vulkan/vkPrograms.hpp
+++ b/external/vulkancts/framework/vulkan/vkPrograms.hpp
@@ -53,9 +53,13 @@
 	size_t						getSize			(void) const { return m_binary.size();								}
 	const deUint8*				getBinary		(void) const { return m_binary.empty() ? DE_NULL : &m_binary[0];	}
 
+	inline void					setUsed			(void) const { m_used = true;										}
+	inline bool					getUsed			(void) const { return m_used;										}
+
 private:
 	const ProgramFormat			m_format;
 	const std::vector<deUint8>	m_binary;
+	mutable bool				m_used;
 };
 
 struct BinaryBuildOptions
diff --git a/external/vulkancts/framework/vulkan/vkQueryUtil.cpp b/external/vulkancts/framework/vulkan/vkQueryUtil.cpp
index 957b6af..3926e5a 100644
--- a/external/vulkancts/framework/vulkan/vkQueryUtil.cpp
+++ b/external/vulkancts/framework/vulkan/vkQueryUtil.cpp
@@ -104,7 +104,7 @@
 		properties.resize(numDeviceGroups);
 		for (deUint32 i = 0; i < numDeviceGroups; i++)
 		{
-			properties[i].sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES_KHR;
+			properties[i].sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES;
 			properties[i].pNext = DE_NULL;
 		}
 		VK_CHECK(vk.enumeratePhysicalDeviceGroups(instance, &numDeviceGroups, &properties[0]));
@@ -331,14 +331,14 @@
 	deMemset(&planeInfo,	0, sizeof(planeInfo));
 	deMemset(&reqs,			0, sizeof(reqs));
 
-	coreInfo.sType			= VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2_KHR;
+	coreInfo.sType			= VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2;
 	coreInfo.pNext			= &planeInfo;
 	coreInfo.image			= image;
 
-	planeInfo.sType			= VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO_KHR;
+	planeInfo.sType			= VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO;
 	planeInfo.planeAspect	= planeAspect;
 
-	reqs.sType				= VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2_KHR;
+	reqs.sType				= VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2;
 
 	vkd.getImageMemoryRequirements2(device, &coreInfo, &reqs);
 
@@ -525,6 +525,24 @@
 	return const_cast<void*>(findStructureInChain(const_cast<const void*>(first), type));
 }
 
+void appendStructurePtrToVulkanChain (const void**	chainHead, const void*	structurePtr)
+{
+	struct StructureBase
+	{
+		VkStructureType		sType;
+		const void*			pNext;
+	};
+
+	while (*chainHead != DE_NULL)
+	{
+		StructureBase* ptr = (StructureBase*)(*chainHead);
+
+		chainHead = &(ptr->pNext);
+	}
+
+	(*chainHead) = structurePtr;
+}
+
 // getStructureType<T> implementations
 #include "vkGetStructureTypeImpl.inl"
 
diff --git a/external/vulkancts/framework/vulkan/vkQueryUtil.hpp b/external/vulkancts/framework/vulkan/vkQueryUtil.hpp
index 0a3ffeb..28bb56d 100644
--- a/external/vulkancts/framework/vulkan/vkQueryUtil.hpp
+++ b/external/vulkancts/framework/vulkan/vkQueryUtil.hpp
@@ -232,6 +232,9 @@
 	const VkPhysicalDevice		m_physicalDevice;
 };
 
+// Walks through chain to find empty pNext and assigns what to found pNext
+void appendStructurePtrToVulkanChain (const void**	chainHead, const void*	structurePtr);
+
 namespace ValidateQueryBits
 {
 
diff --git a/external/vulkancts/framework/vulkan/vkRayTracingUtil.cpp b/external/vulkancts/framework/vulkan/vkRayTracingUtil.cpp
index 041fd89..997744b 100644
--- a/external/vulkancts/framework/vulkan/vkRayTracingUtil.cpp
+++ b/external/vulkancts/framework/vulkan/vkRayTracingUtil.cpp
@@ -37,6 +37,7 @@
 
 namespace vk
 {
+
 struct DeferredThreadParams
 {
 	const DeviceInterface&	vk;
@@ -573,6 +574,18 @@
 	return m_storageSize;
 }
 
+deUint64 SerialStorage::getDeserializedSize ()
+{
+	deUint64		result		= 0;
+	const deUint8*	startPtr	= static_cast<deUint8*>(m_buffer->getAllocation().getHostPtr());
+
+	DE_ASSERT(sizeof(result) == DESERIALIZED_SIZE_SIZE);
+
+	deMemcpy(&result, startPtr + DESERIALIZED_SIZE_OFFSET, sizeof(result));
+
+	return result;
+}
+
 BottomLevelAccelerationStructure::~BottomLevelAccelerationStructure ()
 {
 }
@@ -598,7 +611,8 @@
 	addGeometry(geometryData, triangles, geometryFlags);
 }
 
-void BottomLevelAccelerationStructure::setDefaultGeometryData (const VkShaderStageFlagBits	testStage)
+void BottomLevelAccelerationStructure::setDefaultGeometryData (const VkShaderStageFlagBits	testStage,
+															   const VkGeometryFlagsKHR		geometryFlags)
 {
 	bool					trianglesData	= false;
 	float					z				= 0.0f;
@@ -636,7 +650,7 @@
 
 	setGeometryCount(1u);
 
-	addGeometry(geometryData, trianglesData);
+	addGeometry(geometryData, trianglesData, geometryFlags);
 }
 
 void BottomLevelAccelerationStructure::setGeometryCount (const size_t geometryCount)
@@ -1392,8 +1406,8 @@
 																 VkDeviceAddress							deviceAddress )
 {
 	DE_ASSERT(storage != NULL);
-	DE_ASSERT(storage->getStorageSize() != 0u);
-	create(vk, device, allocator, storage->getStorageSize(), deviceAddress);
+	DE_ASSERT(storage->getStorageSize() >= SerialStorage::SERIAL_STORAGE_SIZE_MIN);
+	create(vk, device, allocator, storage->getDeserializedSize(), deviceAddress);
 	deserialize(vk, device, cmdBuffer, storage);
 }
 
@@ -1469,8 +1483,8 @@
 															  VkDeviceAddress							deviceAddress)
 {
 	DE_ASSERT(storage != NULL);
-	DE_ASSERT(storage->getStorageSize() != 0u);
-	create(vk, device, allocator, storage->getStorageSize(), deviceAddress);
+	DE_ASSERT(storage->getStorageSize() >= SerialStorage::SERIAL_STORAGE_SIZE_MIN);
+	create(vk, device, allocator, storage->getDeserializedSize(), deviceAddress);
 	deserialize(vk, device, cmdBuffer, storage);
 }
 
diff --git a/external/vulkancts/framework/vulkan/vkRayTracingUtil.hpp b/external/vulkancts/framework/vulkan/vkRayTracingUtil.hpp
index d8e92fd..2470c15 100644
--- a/external/vulkancts/framework/vulkan/vkRayTracingUtil.hpp
+++ b/external/vulkancts/framework/vulkan/vkRayTracingUtil.hpp
@@ -459,6 +459,16 @@
 class SerialStorage
 {
 public:
+	enum
+	{
+		DE_SERIALIZED_FIELD(DRIVER_UUID,		VK_UUID_SIZE),		// VK_UUID_SIZE bytes of data matching VkPhysicalDeviceIDProperties::driverUUID
+		DE_SERIALIZED_FIELD(COMPAT_UUID,		VK_UUID_SIZE),		// VK_UUID_SIZE bytes of data identifying the compatibility for comparison using vkGetDeviceAccelerationStructureCompatibilityKHR
+		DE_SERIALIZED_FIELD(SERIALIZED_SIZE,	sizeof(deUint64)),	// A 64-bit integer of the total size matching the value queried using VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR
+		DE_SERIALIZED_FIELD(DESERIALIZED_SIZE,	sizeof(deUint64)),	// A 64-bit integer of the deserialized size to be passed in to VkAccelerationStructureCreateInfoKHR::size
+		DE_SERIALIZED_FIELD(HANDLES_COUNT,		sizeof(deUint64)),	// A 64-bit integer of the count of the number of acceleration structure handles following. This will be zero for a bottom-level acceleration structure.
+		SERIAL_STORAGE_SIZE_MIN
+	};
+
 											SerialStorage		() = delete;
 											SerialStorage		(const DeviceInterface&						vk,
 																 const VkDevice								device,
@@ -471,6 +481,8 @@
 	VkDeviceOrHostAddressConstKHR			getAddressConst		(const DeviceInterface&	vk,
 																 const VkDevice			device);
 	VkDeviceSize							getStorageSize		();
+	deUint64								getDeserializedSize	();
+
 protected:
 	VkAccelerationStructureBuildTypeKHR		m_buildType;
 	de::MovePtr<BufferWithMemory>			m_buffer;
@@ -490,7 +502,8 @@
 	virtual void										setGeometryData							(const std::vector<tcu::Vec3>&					geometryData,
 																								 const bool										triangles,
 																								 const VkGeometryFlagsKHR						geometryFlags			= 0u );
-	virtual void										setDefaultGeometryData					(const VkShaderStageFlagBits					testStage);
+	virtual void										setDefaultGeometryData					(const VkShaderStageFlagBits					testStage,
+																								 const VkGeometryFlagsKHR						geometryFlags			= 0u );
 	virtual void										setGeometryCount						(const size_t									geometryCount);
 	virtual void										addGeometry								(de::SharedPtr<RaytracedGeometryBase>&			raytracedGeometry);
 	virtual void										addGeometry								(const std::vector<tcu::Vec3>&					geometryData,
diff --git a/external/vulkancts/framework/vulkan/vkRefUtil.inl b/external/vulkancts/framework/vulkan/vkRefUtil.inl
index a77ff7f..a577895 100644
--- a/external/vulkancts/framework/vulkan/vkRefUtil.inl
+++ b/external/vulkancts/framework/vulkan/vkRefUtil.inl
@@ -38,6 +38,8 @@
 Move<VkPrivateDataSlotEXT>			createPrivateDataSlotEXT			(const DeviceInterface& vk, VkDevice device, const VkPrivateDataSlotCreateInfoEXT* pCreateInfo, const VkAllocationCallbacks* pAllocator = DE_NULL);
 Move<VkAccelerationStructureKHR>	createAccelerationStructureKHR		(const DeviceInterface& vk, VkDevice device, const VkAccelerationStructureCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator = DE_NULL);
 Move<VkSurfaceKHR>					createAndroidSurfaceKHR				(const InstanceInterface& vk, VkInstance instance, const VkAndroidSurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator = DE_NULL);
+Move<VkVideoSessionKHR>				createVideoSessionKHR				(const DeviceInterface& vk, VkDevice device, const VkVideoSessionCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator = DE_NULL);
+Move<VkVideoSessionParametersKHR>	createVideoSessionParametersKHR		(const DeviceInterface& vk, VkDevice device, const VkVideoSessionParametersCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator = DE_NULL);
 Move<VkSurfaceKHR>					createImagePipeSurfaceFUCHSIA		(const InstanceInterface& vk, VkInstance instance, const VkImagePipeSurfaceCreateInfoFUCHSIA* pCreateInfo, const VkAllocationCallbacks* pAllocator = DE_NULL);
 Move<VkSurfaceKHR>					createStreamDescriptorSurfaceGGP	(const InstanceInterface& vk, VkInstance instance, const VkStreamDescriptorSurfaceCreateInfoGGP* pCreateInfo, const VkAllocationCallbacks* pAllocator = DE_NULL);
 Move<VkSurfaceKHR>					createIOSSurfaceMVK					(const InstanceInterface& vk, VkInstance instance, const VkIOSSurfaceCreateInfoMVK* pCreateInfo, const VkAllocationCallbacks* pAllocator = DE_NULL);
diff --git a/external/vulkancts/framework/vulkan/vkRefUtilImpl.inl b/external/vulkancts/framework/vulkan/vkRefUtilImpl.inl
index 7a52a8c..db8a005 100644
--- a/external/vulkancts/framework/vulkan/vkRefUtilImpl.inl
+++ b/external/vulkancts/framework/vulkan/vkRefUtilImpl.inl
@@ -173,6 +173,18 @@
 	m_deviceIface->destroyAccelerationStructureKHR(m_device, obj, m_allocator);
 }
 
+template<>
+void Deleter<VkVideoSessionKHR>::operator() (VkVideoSessionKHR obj) const
+{
+	m_deviceIface->destroyVideoSessionKHR(m_device, obj, m_allocator);
+}
+
+template<>
+void Deleter<VkVideoSessionParametersKHR>::operator() (VkVideoSessionParametersKHR obj) const
+{
+	m_deviceIface->destroyVideoSessionParametersKHR(m_device, obj, m_allocator);
+}
+
 } // refdetails
 
 Move<VkInstance> createInstance (const PlatformInterface& vk, const VkInstanceCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator)
@@ -427,6 +439,20 @@
 	return Move<VkSurfaceKHR>(check<VkSurfaceKHR>(object), Deleter<VkSurfaceKHR>(vk, instance, pAllocator));
 }
 
+Move<VkVideoSessionKHR> createVideoSessionKHR (const DeviceInterface& vk, VkDevice device, const VkVideoSessionCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator)
+{
+	VkVideoSessionKHR object = 0;
+	VK_CHECK(vk.createVideoSessionKHR(device, pCreateInfo, pAllocator, &object));
+	return Move<VkVideoSessionKHR>(check<VkVideoSessionKHR>(object), Deleter<VkVideoSessionKHR>(vk, device, pAllocator));
+}
+
+Move<VkVideoSessionParametersKHR> createVideoSessionParametersKHR (const DeviceInterface& vk, VkDevice device, const VkVideoSessionParametersCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator)
+{
+	VkVideoSessionParametersKHR object = 0;
+	VK_CHECK(vk.createVideoSessionParametersKHR(device, pCreateInfo, pAllocator, &object));
+	return Move<VkVideoSessionParametersKHR>(check<VkVideoSessionParametersKHR>(object), Deleter<VkVideoSessionParametersKHR>(vk, device, pAllocator));
+}
+
 Move<VkSurfaceKHR> createImagePipeSurfaceFUCHSIA (const InstanceInterface& vk, VkInstance instance, const VkImagePipeSurfaceCreateInfoFUCHSIA* pCreateInfo, const VkAllocationCallbacks* pAllocator)
 {
 	VkSurfaceKHR object = 0;
diff --git a/external/vulkancts/framework/vulkan/vkRenderDocUtil.cpp b/external/vulkancts/framework/vulkan/vkRenderDocUtil.cpp
index 8830a02..f6ba0a5 100644
--- a/external/vulkancts/framework/vulkan/vkRenderDocUtil.cpp
+++ b/external/vulkancts/framework/vulkan/vkRenderDocUtil.cpp
@@ -28,7 +28,9 @@
 #include "deUniquePtr.hpp"
 #include "tcuDefs.hpp"
 
+#if defined(DEQP_HAVE_RENDERDOC_HEADER)
 #include "renderdoc_app.h"
+#endif
 #include <stdexcept>
 
 #if (DE_OS == DE_OS_WIN32)
@@ -44,16 +46,19 @@
 
 struct RenderDocPrivate
 {
+#if defined(DEQP_HAVE_RENDERDOC_HEADER)
 										RenderDocPrivate	(void)	: m_api(DE_NULL), m_valid(false) {}
 
 	de::MovePtr<de::DynamicLibrary>		m_library;
 	::RENDERDOC_API_1_1_2*				m_api;
 	bool								m_valid;
+#endif
 };
 
 RenderDocUtil::RenderDocUtil (void)
 	: m_priv	(new RenderDocPrivate)
 {
+#if defined(DEQP_HAVE_RENDERDOC_HEADER)
 	try
 	{
 		m_priv->m_library	 = de::MovePtr<de::DynamicLibrary>(new de::DynamicLibrary(RENDERDOC_LIBRARY_NAME));
@@ -79,6 +84,7 @@
 			tcu::print("RENDERDOC_GetAPI returned %d status, RenderDoc API not available", ret);
 		}
 	}
+#endif
 }
 
 RenderDocUtil::~RenderDocUtil (void)
@@ -91,21 +97,31 @@
 
 bool RenderDocUtil::isValid (void)
 {
+#if defined(DEQP_HAVE_RENDERDOC_HEADER)
 	return m_priv != DE_NULL && m_priv->m_valid;
+#else
+        return false;
+#endif
 }
 
 void RenderDocUtil::startFrame (vk::VkInstance instance)
 {
 	if (!isValid()) return;
-
+#if defined(DEQP_HAVE_RENDERDOC_HEADER)
 	m_priv->m_api->StartFrameCapture(RENDERDOC_DEVICEPOINTER_FROM_VKINSTANCE(instance), DE_NULL);
+#else
+	(void) instance;
+#endif
 }
 
 void RenderDocUtil::endFrame (vk::VkInstance instance)
 {
 	if (!isValid()) return;
-
+#if defined(DEQP_HAVE_RENDERDOC_HEADER)
 	m_priv->m_api->EndFrameCapture(RENDERDOC_DEVICEPOINTER_FROM_VKINSTANCE(instance), DE_NULL);
+#else
+	(void) instance;
+#endif
 }
 
 } // vk
diff --git a/external/vulkancts/framework/vulkan/vkStrUtil.inl b/external/vulkancts/framework/vulkan/vkStrUtil.inl
index 5471ed4..a22df16 100644
--- a/external/vulkancts/framework/vulkan/vkStrUtil.inl
+++ b/external/vulkancts/framework/vulkan/vkStrUtil.inl
@@ -98,6 +98,23 @@
 const char*	getAccelerationStructureBuildTypeKHRName				(VkAccelerationStructureBuildTypeKHR value);
 const char*	getAccelerationStructureCompatibilityKHRName			(VkAccelerationStructureCompatibilityKHR value);
 const char*	getShaderGroupShaderKHRName								(VkShaderGroupShaderKHR value);
+const char*	getQueryResultStatusKHRName								(VkQueryResultStatusKHR value);
+const char*	getdVideoH264ChromaFormatIdcName						(StdVideoH264ChromaFormatIdc value);
+const char*	getdVideoH264ProfileIdcName								(StdVideoH264ProfileIdc value);
+const char*	getdVideoH264LevelName									(StdVideoH264Level value);
+const char*	getdVideoH264PocTypeName								(StdVideoH264PocType value);
+const char*	getdVideoH264AspectRatioIdcName							(StdVideoH264AspectRatioIdc value);
+const char*	getdVideoH264WeightedBiPredIdcName						(StdVideoH264WeightedBiPredIdc value);
+const char*	getdVideoH264ModificationOfPicNumsIdcName				(StdVideoH264ModificationOfPicNumsIdc value);
+const char*	getdVideoH264MemMgmtControlOpName						(StdVideoH264MemMgmtControlOp value);
+const char*	getdVideoH264CabacInitIdcName							(StdVideoH264CabacInitIdc value);
+const char*	getdVideoH264DisableDeblockingFilterIdcName				(StdVideoH264DisableDeblockingFilterIdc value);
+const char*	getdVideoH264PictureTypeName							(StdVideoH264PictureType value);
+const char*	getdVideoH264SliceTypeName								(StdVideoH264SliceType value);
+const char*	getdVideoH264NonVclNaluTypeName							(StdVideoH264NonVclNaluType value);
+const char*	getdVideoH265ChromaFormatIdcName						(StdVideoH265ChromaFormatIdc value);
+const char*	getdVideoH265ProfileIdcName								(StdVideoH265ProfileIdc value);
+const char*	getdVideoH265LevelName									(StdVideoH265Level value);
 const char*	getFullScreenExclusiveEXTName							(VkFullScreenExclusiveEXT value);
 
 inline tcu::Format::Enum<VkResult>											getResultStr										(VkResult value)										{ return tcu::Format::Enum<VkResult>(getResultName, value);																					}
@@ -196,6 +213,23 @@
 inline tcu::Format::Enum<VkAccelerationStructureBuildTypeKHR>				getAccelerationStructureBuildTypeKHRStr				(VkAccelerationStructureBuildTypeKHR value)				{ return tcu::Format::Enum<VkAccelerationStructureBuildTypeKHR>(getAccelerationStructureBuildTypeKHRName, value);							}
 inline tcu::Format::Enum<VkAccelerationStructureCompatibilityKHR>			getAccelerationStructureCompatibilityKHRStr			(VkAccelerationStructureCompatibilityKHR value)			{ return tcu::Format::Enum<VkAccelerationStructureCompatibilityKHR>(getAccelerationStructureCompatibilityKHRName, value);					}
 inline tcu::Format::Enum<VkShaderGroupShaderKHR>							getShaderGroupShaderKHRStr							(VkShaderGroupShaderKHR value)							{ return tcu::Format::Enum<VkShaderGroupShaderKHR>(getShaderGroupShaderKHRName, value);														}
+inline tcu::Format::Enum<VkQueryResultStatusKHR>							getQueryResultStatusKHRStr							(VkQueryResultStatusKHR value)							{ return tcu::Format::Enum<VkQueryResultStatusKHR>(getQueryResultStatusKHRName, value);														}
+inline tcu::Format::Enum<StdVideoH264ChromaFormatIdc>						getdVideoH264ChromaFormatIdcStr						(StdVideoH264ChromaFormatIdc value)						{ return tcu::Format::Enum<StdVideoH264ChromaFormatIdc>(getdVideoH264ChromaFormatIdcName, value);											}
+inline tcu::Format::Enum<StdVideoH264ProfileIdc>							getdVideoH264ProfileIdcStr							(StdVideoH264ProfileIdc value)							{ return tcu::Format::Enum<StdVideoH264ProfileIdc>(getdVideoH264ProfileIdcName, value);														}
+inline tcu::Format::Enum<StdVideoH264Level>									getdVideoH264LevelStr								(StdVideoH264Level value)								{ return tcu::Format::Enum<StdVideoH264Level>(getdVideoH264LevelName, value);																}
+inline tcu::Format::Enum<StdVideoH264PocType>								getdVideoH264PocTypeStr								(StdVideoH264PocType value)								{ return tcu::Format::Enum<StdVideoH264PocType>(getdVideoH264PocTypeName, value);															}
+inline tcu::Format::Enum<StdVideoH264AspectRatioIdc>						getdVideoH264AspectRatioIdcStr						(StdVideoH264AspectRatioIdc value)						{ return tcu::Format::Enum<StdVideoH264AspectRatioIdc>(getdVideoH264AspectRatioIdcName, value);												}
+inline tcu::Format::Enum<StdVideoH264WeightedBiPredIdc>						getdVideoH264WeightedBiPredIdcStr					(StdVideoH264WeightedBiPredIdc value)					{ return tcu::Format::Enum<StdVideoH264WeightedBiPredIdc>(getdVideoH264WeightedBiPredIdcName, value);										}
+inline tcu::Format::Enum<StdVideoH264ModificationOfPicNumsIdc>				getdVideoH264ModificationOfPicNumsIdcStr			(StdVideoH264ModificationOfPicNumsIdc value)			{ return tcu::Format::Enum<StdVideoH264ModificationOfPicNumsIdc>(getdVideoH264ModificationOfPicNumsIdcName, value);							}
+inline tcu::Format::Enum<StdVideoH264MemMgmtControlOp>						getdVideoH264MemMgmtControlOpStr					(StdVideoH264MemMgmtControlOp value)					{ return tcu::Format::Enum<StdVideoH264MemMgmtControlOp>(getdVideoH264MemMgmtControlOpName, value);											}
+inline tcu::Format::Enum<StdVideoH264CabacInitIdc>							getdVideoH264CabacInitIdcStr						(StdVideoH264CabacInitIdc value)						{ return tcu::Format::Enum<StdVideoH264CabacInitIdc>(getdVideoH264CabacInitIdcName, value);													}
+inline tcu::Format::Enum<StdVideoH264DisableDeblockingFilterIdc>			getdVideoH264DisableDeblockingFilterIdcStr			(StdVideoH264DisableDeblockingFilterIdc value)			{ return tcu::Format::Enum<StdVideoH264DisableDeblockingFilterIdc>(getdVideoH264DisableDeblockingFilterIdcName, value);						}
+inline tcu::Format::Enum<StdVideoH264PictureType>							getdVideoH264PictureTypeStr							(StdVideoH264PictureType value)							{ return tcu::Format::Enum<StdVideoH264PictureType>(getdVideoH264PictureTypeName, value);													}
+inline tcu::Format::Enum<StdVideoH264SliceType>								getdVideoH264SliceTypeStr							(StdVideoH264SliceType value)							{ return tcu::Format::Enum<StdVideoH264SliceType>(getdVideoH264SliceTypeName, value);														}
+inline tcu::Format::Enum<StdVideoH264NonVclNaluType>						getdVideoH264NonVclNaluTypeStr						(StdVideoH264NonVclNaluType value)						{ return tcu::Format::Enum<StdVideoH264NonVclNaluType>(getdVideoH264NonVclNaluTypeName, value);												}
+inline tcu::Format::Enum<StdVideoH265ChromaFormatIdc>						getdVideoH265ChromaFormatIdcStr						(StdVideoH265ChromaFormatIdc value)						{ return tcu::Format::Enum<StdVideoH265ChromaFormatIdc>(getdVideoH265ChromaFormatIdcName, value);											}
+inline tcu::Format::Enum<StdVideoH265ProfileIdc>							getdVideoH265ProfileIdcStr							(StdVideoH265ProfileIdc value)							{ return tcu::Format::Enum<StdVideoH265ProfileIdc>(getdVideoH265ProfileIdcName, value);														}
+inline tcu::Format::Enum<StdVideoH265Level>									getdVideoH265LevelStr								(StdVideoH265Level value)								{ return tcu::Format::Enum<StdVideoH265Level>(getdVideoH265LevelName, value);																}
 inline tcu::Format::Enum<VkFullScreenExclusiveEXT>							getFullScreenExclusiveEXTStr						(VkFullScreenExclusiveEXT value)						{ return tcu::Format::Enum<VkFullScreenExclusiveEXT>(getFullScreenExclusiveEXTName, value);													}
 
 inline std::ostream&	operator<<	(std::ostream& s, VkResult value)											{ return s << getResultStr(value);											}
@@ -294,6 +328,23 @@
 inline std::ostream&	operator<<	(std::ostream& s, VkAccelerationStructureBuildTypeKHR value)				{ return s << getAccelerationStructureBuildTypeKHRStr(value);				}
 inline std::ostream&	operator<<	(std::ostream& s, VkAccelerationStructureCompatibilityKHR value)			{ return s << getAccelerationStructureCompatibilityKHRStr(value);			}
 inline std::ostream&	operator<<	(std::ostream& s, VkShaderGroupShaderKHR value)								{ return s << getShaderGroupShaderKHRStr(value);							}
+inline std::ostream&	operator<<	(std::ostream& s, VkQueryResultStatusKHR value)								{ return s << getQueryResultStatusKHRStr(value);							}
+inline std::ostream&	operator<<	(std::ostream& s, StdVideoH264ChromaFormatIdc value)						{ return s << getdVideoH264ChromaFormatIdcStr(value);						}
+inline std::ostream&	operator<<	(std::ostream& s, StdVideoH264ProfileIdc value)								{ return s << getdVideoH264ProfileIdcStr(value);							}
+inline std::ostream&	operator<<	(std::ostream& s, StdVideoH264Level value)									{ return s << getdVideoH264LevelStr(value);									}
+inline std::ostream&	operator<<	(std::ostream& s, StdVideoH264PocType value)								{ return s << getdVideoH264PocTypeStr(value);								}
+inline std::ostream&	operator<<	(std::ostream& s, StdVideoH264AspectRatioIdc value)							{ return s << getdVideoH264AspectRatioIdcStr(value);						}
+inline std::ostream&	operator<<	(std::ostream& s, StdVideoH264WeightedBiPredIdc value)						{ return s << getdVideoH264WeightedBiPredIdcStr(value);						}
+inline std::ostream&	operator<<	(std::ostream& s, StdVideoH264ModificationOfPicNumsIdc value)				{ return s << getdVideoH264ModificationOfPicNumsIdcStr(value);				}
+inline std::ostream&	operator<<	(std::ostream& s, StdVideoH264MemMgmtControlOp value)						{ return s << getdVideoH264MemMgmtControlOpStr(value);						}
+inline std::ostream&	operator<<	(std::ostream& s, StdVideoH264CabacInitIdc value)							{ return s << getdVideoH264CabacInitIdcStr(value);							}
+inline std::ostream&	operator<<	(std::ostream& s, StdVideoH264DisableDeblockingFilterIdc value)				{ return s << getdVideoH264DisableDeblockingFilterIdcStr(value);			}
+inline std::ostream&	operator<<	(std::ostream& s, StdVideoH264PictureType value)							{ return s << getdVideoH264PictureTypeStr(value);							}
+inline std::ostream&	operator<<	(std::ostream& s, StdVideoH264SliceType value)								{ return s << getdVideoH264SliceTypeStr(value);								}
+inline std::ostream&	operator<<	(std::ostream& s, StdVideoH264NonVclNaluType value)							{ return s << getdVideoH264NonVclNaluTypeStr(value);						}
+inline std::ostream&	operator<<	(std::ostream& s, StdVideoH265ChromaFormatIdc value)						{ return s << getdVideoH265ChromaFormatIdcStr(value);						}
+inline std::ostream&	operator<<	(std::ostream& s, StdVideoH265ProfileIdc value)								{ return s << getdVideoH265ProfileIdcStr(value);							}
+inline std::ostream&	operator<<	(std::ostream& s, StdVideoH265Level value)									{ return s << getdVideoH265LevelStr(value);									}
 inline std::ostream&	operator<<	(std::ostream& s, VkFullScreenExclusiveEXT value)							{ return s << getFullScreenExclusiveEXTStr(value);							}
 
 tcu::Format::Bitfield<32>	getAccessFlagsStr											(VkAccessFlags value);
@@ -378,6 +429,22 @@
 tcu::Format::Bitfield<32>	getPrivateDataSlotCreateFlagsEXTStr							(VkPrivateDataSlotCreateFlagsEXT value);
 tcu::Format::Bitfield<32>	getDeviceDiagnosticsConfigFlagsNVStr						(VkDeviceDiagnosticsConfigFlagsNV value);
 tcu::Format::Bitfield<32>	getAccelerationStructureCreateFlagsKHRStr					(VkAccelerationStructureCreateFlagsKHR value);
+tcu::Format::Bitfield<32>	getVideoCodecOperationFlagsKHRStr							(VkVideoCodecOperationFlagsKHR value);
+tcu::Format::Bitfield<32>	getVideoChromaSubsamplingFlagsKHRStr						(VkVideoChromaSubsamplingFlagsKHR value);
+tcu::Format::Bitfield<32>	getVideoComponentBitDepthFlagsKHRStr						(VkVideoComponentBitDepthFlagsKHR value);
+tcu::Format::Bitfield<32>	getVideoCapabilitiesFlagsKHRStr								(VkVideoCapabilitiesFlagsKHR value);
+tcu::Format::Bitfield<32>	getVideoSessionCreateFlagsKHRStr							(VkVideoSessionCreateFlagsKHR value);
+tcu::Format::Bitfield<32>	getVideoCodingControlFlagsKHRStr							(VkVideoCodingControlFlagsKHR value);
+tcu::Format::Bitfield<32>	getVideoCodingQualityPresetFlagsKHRStr						(VkVideoCodingQualityPresetFlagsKHR value);
+tcu::Format::Bitfield<32>	getVideoDecodeFlagsKHRStr									(VkVideoDecodeFlagsKHR value);
+tcu::Format::Bitfield<32>	getVideoEncodeFlagsKHRStr									(VkVideoEncodeFlagsKHR value);
+tcu::Format::Bitfield<32>	getVideoEncodeRateControlFlagsKHRStr						(VkVideoEncodeRateControlFlagsKHR value);
+tcu::Format::Bitfield<32>	getVideoEncodeRateControlModeFlagsKHRStr					(VkVideoEncodeRateControlModeFlagsKHR value);
+tcu::Format::Bitfield<32>	getVideoEncodeH264CapabilitiesFlagsEXTStr					(VkVideoEncodeH264CapabilitiesFlagsEXT value);
+tcu::Format::Bitfield<32>	getVideoEncodeH264InputModeFlagsEXTStr						(VkVideoEncodeH264InputModeFlagsEXT value);
+tcu::Format::Bitfield<32>	getVideoEncodeH264OutputModeFlagsEXTStr						(VkVideoEncodeH264OutputModeFlagsEXT value);
+tcu::Format::Bitfield<32>	getVideoEncodeH264CreateFlagsEXTStr							(VkVideoEncodeH264CreateFlagsEXT value);
+tcu::Format::Bitfield<32>	getVideoDecodeH264FieldLayoutFlagsEXTStr					(VkVideoDecodeH264FieldLayoutFlagsEXT value);
 tcu::Format::Bitfield<32>	getInstanceCreateFlagsStr									(VkInstanceCreateFlags value);
 tcu::Format::Bitfield<32>	getDeviceCreateFlagsStr										(VkDeviceCreateFlags value);
 tcu::Format::Bitfield<32>	getMemoryMapFlagsStr										(VkMemoryMapFlags value);
@@ -413,6 +480,10 @@
 tcu::Format::Bitfield<32>	getHeadlessSurfaceCreateFlagsEXTStr							(VkHeadlessSurfaceCreateFlagsEXT value);
 tcu::Format::Bitfield<32>	getDeviceMemoryReportFlagsEXTStr							(VkDeviceMemoryReportFlagsEXT value);
 tcu::Format::Bitfield<32>	getAndroidSurfaceCreateFlagsKHRStr							(VkAndroidSurfaceCreateFlagsKHR value);
+tcu::Format::Bitfield<32>	getVideoBeginCodingFlagsKHRStr								(VkVideoBeginCodingFlagsKHR value);
+tcu::Format::Bitfield<32>	getVideoEndCodingFlagsKHRStr								(VkVideoEndCodingFlagsKHR value);
+tcu::Format::Bitfield<32>	getVideoDecodeH264CreateFlagsEXTStr							(VkVideoDecodeH264CreateFlagsEXT value);
+tcu::Format::Bitfield<32>	getVideoDecodeH265CreateFlagsEXTStr							(VkVideoDecodeH265CreateFlagsEXT value);
 tcu::Format::Bitfield<32>	getImagePipeSurfaceCreateFlagsFUCHSIAStr					(VkImagePipeSurfaceCreateFlagsFUCHSIA value);
 tcu::Format::Bitfield<32>	getStreamDescriptorSurfaceCreateFlagsGGPStr					(VkStreamDescriptorSurfaceCreateFlagsGGP value);
 tcu::Format::Bitfield<32>	getIOSSurfaceCreateFlagsMVKStr								(VkIOSSurfaceCreateFlagsMVK value);
@@ -714,6 +785,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);
@@ -927,6 +1000,8 @@
 std::ostream&	operator<<	(std::ostream& s, const VkIndirectCommandsLayoutCreateInfoNV& value);
 std::ostream&	operator<<	(std::ostream& s, const VkGeneratedCommandsInfoNV& value);
 std::ostream&	operator<<	(std::ostream& s, const VkGeneratedCommandsMemoryRequirementsInfoNV& value);
+std::ostream&	operator<<	(std::ostream& s, const VkPhysicalDeviceInheritedViewportScissorFeaturesNV& value);
+std::ostream&	operator<<	(std::ostream& s, const VkCommandBufferInheritanceViewportScissorInfoNV& value);
 std::ostream&	operator<<	(std::ostream& s, const VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT& value);
 std::ostream&	operator<<	(std::ostream& s, const VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT& value);
 std::ostream&	operator<<	(std::ostream& s, const VkRenderPassTransformBeginInfoQCOM& value);
@@ -948,6 +1023,7 @@
 std::ostream&	operator<<	(std::ostream& s, const VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV& value);
 std::ostream&	operator<<	(std::ostream& s, const VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV& value);
 std::ostream&	operator<<	(std::ostream& s, const VkPipelineFragmentShadingRateEnumStateCreateInfoNV& value);
+std::ostream&	operator<<	(std::ostream& s, const VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT& value);
 std::ostream&	operator<<	(std::ostream& s, const VkPhysicalDeviceFragmentDensityMap2FeaturesEXT& value);
 std::ostream&	operator<<	(std::ostream& s, const VkPhysicalDeviceFragmentDensityMap2PropertiesEXT& value);
 std::ostream&	operator<<	(std::ostream& s, const VkCopyCommandTransformInfoQCOM& value);
@@ -956,6 +1032,12 @@
 std::ostream&	operator<<	(std::ostream& s, const VkPhysicalDeviceMutableDescriptorTypeFeaturesVALVE& value);
 std::ostream&	operator<<	(std::ostream& s, const VkMutableDescriptorTypeListVALVE& value);
 std::ostream&	operator<<	(std::ostream& s, const VkMutableDescriptorTypeCreateInfoVALVE& value);
+std::ostream&	operator<<	(std::ostream& s, const VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT& value);
+std::ostream&	operator<<	(std::ostream& s, const VkVertexInputBindingDescription2EXT& value);
+std::ostream&	operator<<	(std::ostream& s, const VkVertexInputAttributeDescription2EXT& value);
+std::ostream&	operator<<	(std::ostream& s, const VkPhysicalDeviceExtendedDynamicState2FeaturesEXT& value);
+std::ostream&	operator<<	(std::ostream& s, const VkPhysicalDeviceColorWriteEnableFeaturesEXT& value);
+std::ostream&	operator<<	(std::ostream& s, const VkPipelineColorWriteCreateInfoEXT& value);
 std::ostream&	operator<<	(std::ostream& s, const VkDeviceOrHostAddressKHR& value);
 std::ostream&	operator<<	(std::ostream& s, const VkDeviceOrHostAddressConstKHR& value);
 std::ostream&	operator<<	(std::ostream& s, const VkAccelerationStructureBuildRangeInfoKHR& value);
@@ -990,9 +1072,98 @@
 std::ostream&	operator<<	(std::ostream& s, const VkImportAndroidHardwareBufferInfoANDROID& value);
 std::ostream&	operator<<	(std::ostream& s, const VkMemoryGetAndroidHardwareBufferInfoANDROID& value);
 std::ostream&	operator<<	(std::ostream& s, const VkExternalFormatANDROID& value);
+std::ostream&	operator<<	(std::ostream& s, const VkVideoQueueFamilyProperties2KHR& value);
+std::ostream&	operator<<	(std::ostream& s, const VkVideoProfileKHR& value);
+std::ostream&	operator<<	(std::ostream& s, const VkVideoProfilesKHR& value);
+std::ostream&	operator<<	(std::ostream& s, const VkVideoCapabilitiesKHR& value);
+std::ostream&	operator<<	(std::ostream& s, const VkPhysicalDeviceVideoFormatInfoKHR& value);
+std::ostream&	operator<<	(std::ostream& s, const VkVideoFormatPropertiesKHR& value);
+std::ostream&	operator<<	(std::ostream& s, const VkVideoPictureResourceKHR& value);
+std::ostream&	operator<<	(std::ostream& s, const VkVideoReferenceSlotKHR& value);
+std::ostream&	operator<<	(std::ostream& s, const VkVideoGetMemoryPropertiesKHR& value);
+std::ostream&	operator<<	(std::ostream& s, const VkVideoBindMemoryKHR& value);
+std::ostream&	operator<<	(std::ostream& s, const VkVideoSessionCreateInfoKHR& value);
+std::ostream&	operator<<	(std::ostream& s, const VkVideoSessionParametersCreateInfoKHR& value);
+std::ostream&	operator<<	(std::ostream& s, const VkVideoSessionParametersUpdateInfoKHR& value);
+std::ostream&	operator<<	(std::ostream& s, const VkVideoBeginCodingInfoKHR& value);
+std::ostream&	operator<<	(std::ostream& s, const VkVideoEndCodingInfoKHR& value);
+std::ostream&	operator<<	(std::ostream& s, const VkVideoCodingControlInfoKHR& value);
+std::ostream&	operator<<	(std::ostream& s, const VkVideoDecodeInfoKHR& value);
 std::ostream&	operator<<	(std::ostream& s, const VkPhysicalDevicePortabilitySubsetFeaturesKHR& value);
 std::ostream&	operator<<	(std::ostream& s, const VkPhysicalDevicePortabilitySubsetPropertiesKHR& value);
+std::ostream&	operator<<	(std::ostream& s, const VkVideoEncodeInfoKHR& value);
+std::ostream&	operator<<	(std::ostream& s, const VkVideoEncodeRateControlInfoKHR& value);
+std::ostream&	operator<<	(std::ostream& s, const StdVideoH264SpsVuiFlags& value);
+std::ostream&	operator<<	(std::ostream& s, const StdVideoH264HrdParameters& value);
+std::ostream&	operator<<	(std::ostream& s, const StdVideoH264SequenceParameterSetVui& value);
+std::ostream&	operator<<	(std::ostream& s, const StdVideoH264SpsFlags& value);
+std::ostream&	operator<<	(std::ostream& s, const StdVideoH264ScalingLists& value);
+std::ostream&	operator<<	(std::ostream& s, const StdVideoH264SequenceParameterSet& value);
+std::ostream&	operator<<	(std::ostream& s, const StdVideoH264PpsFlags& value);
+std::ostream&	operator<<	(std::ostream& s, const StdVideoH264PictureParameterSet& value);
+std::ostream&	operator<<	(std::ostream& s, const StdVideoEncodeH264SliceHeaderFlags& value);
+std::ostream&	operator<<	(std::ostream& s, const StdVideoEncodeH264PictureInfoFlags& value);
+std::ostream&	operator<<	(std::ostream& s, const StdVideoEncodeH264RefMgmtFlags& value);
+std::ostream&	operator<<	(std::ostream& s, const StdVideoEncodeH264RefListModEntry& value);
+std::ostream&	operator<<	(std::ostream& s, const StdVideoEncodeH264RefPicMarkingEntry& value);
+std::ostream&	operator<<	(std::ostream& s, const StdVideoEncodeH264RefMemMgmtCtrlOperations& value);
+std::ostream&	operator<<	(std::ostream& s, const StdVideoEncodeH264PictureInfo& value);
+std::ostream&	operator<<	(std::ostream& s, const StdVideoEncodeH264SliceHeader& value);
+std::ostream&	operator<<	(std::ostream& s, const VkVideoEncodeH264CapabilitiesEXT& value);
+std::ostream&	operator<<	(std::ostream& s, const VkVideoEncodeH264SessionCreateInfoEXT& value);
+std::ostream&	operator<<	(std::ostream& s, const VkVideoEncodeH264SessionParametersAddInfoEXT& value);
+std::ostream&	operator<<	(std::ostream& s, const VkVideoEncodeH264SessionParametersCreateInfoEXT& value);
+std::ostream&	operator<<	(std::ostream& s, const VkVideoEncodeH264DpbSlotInfoEXT& value);
+std::ostream&	operator<<	(std::ostream& s, const VkVideoEncodeH264NaluSliceEXT& value);
+std::ostream&	operator<<	(std::ostream& s, const VkVideoEncodeH264VclFrameInfoEXT& value);
+std::ostream&	operator<<	(std::ostream& s, const VkVideoEncodeH264EmitPictureParametersEXT& value);
+std::ostream&	operator<<	(std::ostream& s, const VkVideoEncodeH264ProfileEXT& value);
+std::ostream&	operator<<	(std::ostream& s, const StdVideoDecodeH264PictureInfoFlags& value);
+std::ostream&	operator<<	(std::ostream& s, const StdVideoDecodeH264PictureInfo& value);
+std::ostream&	operator<<	(std::ostream& s, const StdVideoDecodeH264ReferenceInfoFlags& value);
+std::ostream&	operator<<	(std::ostream& s, const StdVideoDecodeH264ReferenceInfo& value);
+std::ostream&	operator<<	(std::ostream& s, const StdVideoDecodeH264MvcElementFlags& value);
+std::ostream&	operator<<	(std::ostream& s, const StdVideoDecodeH264MvcElement& value);
+std::ostream&	operator<<	(std::ostream& s, const StdVideoDecodeH264Mvc& value);
+std::ostream&	operator<<	(std::ostream& s, const VkVideoDecodeH264ProfileEXT& value);
+std::ostream&	operator<<	(std::ostream& s, const VkVideoDecodeH264CapabilitiesEXT& value);
+std::ostream&	operator<<	(std::ostream& s, const VkVideoDecodeH264SessionCreateInfoEXT& value);
+std::ostream&	operator<<	(std::ostream& s, const VkVideoDecodeH264SessionParametersAddInfoEXT& value);
+std::ostream&	operator<<	(std::ostream& s, const VkVideoDecodeH264SessionParametersCreateInfoEXT& value);
+std::ostream&	operator<<	(std::ostream& s, const VkVideoDecodeH264PictureInfoEXT& value);
+std::ostream&	operator<<	(std::ostream& s, const VkVideoDecodeH264MvcEXT& value);
+std::ostream&	operator<<	(std::ostream& s, const VkVideoDecodeH264DpbSlotInfoEXT& value);
+std::ostream&	operator<<	(std::ostream& s, const StdVideoH265DecPicBufMgr& value);
+std::ostream&	operator<<	(std::ostream& s, const StdVideoH265SubLayerHrdParameters& value);
+std::ostream&	operator<<	(std::ostream& s, const StdVideoH265HrdFlags& value);
+std::ostream&	operator<<	(std::ostream& s, const StdVideoH265HrdParameters& value);
+std::ostream&	operator<<	(std::ostream& s, const StdVideoH265VpsFlags& value);
+std::ostream&	operator<<	(std::ostream& s, const StdVideoH265VideoParameterSet& value);
+std::ostream&	operator<<	(std::ostream& s, const StdVideoH265ScalingLists& value);
+std::ostream&	operator<<	(std::ostream& s, const StdVideoH265SpsVuiFlags& value);
+std::ostream&	operator<<	(std::ostream& s, const StdVideoH265SequenceParameterSetVui& value);
+std::ostream&	operator<<	(std::ostream& s, const StdVideoH265PredictorPaletteEntries& value);
+std::ostream&	operator<<	(std::ostream& s, const StdVideoH265SpsFlags& value);
+std::ostream&	operator<<	(std::ostream& s, const StdVideoH265SequenceParameterSet& value);
+std::ostream&	operator<<	(std::ostream& s, const StdVideoH265PpsFlags& value);
+std::ostream&	operator<<	(std::ostream& s, const StdVideoH265PictureParameterSet& value);
+std::ostream&	operator<<	(std::ostream& s, const StdVideoDecodeH265PictureInfoFlags& value);
+std::ostream&	operator<<	(std::ostream& s, const StdVideoDecodeH265PictureInfo& value);
+std::ostream&	operator<<	(std::ostream& s, const StdVideoDecodeH265ReferenceInfoFlags& value);
+std::ostream&	operator<<	(std::ostream& s, const StdVideoDecodeH265ReferenceInfo& value);
+std::ostream&	operator<<	(std::ostream& s, const VkVideoDecodeH265ProfileEXT& value);
+std::ostream&	operator<<	(std::ostream& s, const VkVideoDecodeH265CapabilitiesEXT& value);
+std::ostream&	operator<<	(std::ostream& s, const VkVideoDecodeH265SessionCreateInfoEXT& value);
+std::ostream&	operator<<	(std::ostream& s, const VkVideoDecodeH265SessionParametersAddInfoEXT& value);
+std::ostream&	operator<<	(std::ostream& s, const VkVideoDecodeH265SessionParametersCreateInfoEXT& value);
+std::ostream&	operator<<	(std::ostream& s, const VkVideoDecodeH265PictureInfoEXT& value);
+std::ostream&	operator<<	(std::ostream& s, const VkVideoDecodeH265DpbSlotInfoEXT& value);
 std::ostream&	operator<<	(std::ostream& s, const VkImagePipeSurfaceCreateInfoFUCHSIA& value);
+std::ostream&	operator<<	(std::ostream& s, const VkImportMemoryZirconHandleInfoFUCHSIA& value);
+std::ostream&	operator<<	(std::ostream& s, const VkMemoryZirconHandlePropertiesFUCHSIA& value);
+std::ostream&	operator<<	(std::ostream& s, const VkMemoryGetZirconHandleInfoFUCHSIA& value);
+std::ostream&	operator<<	(std::ostream& s, const VkImportSemaphoreZirconHandleInfoFUCHSIA& value);
+std::ostream&	operator<<	(std::ostream& s, const VkSemaphoreGetZirconHandleInfoFUCHSIA& value);
 std::ostream&	operator<<	(std::ostream& s, const VkStreamDescriptorSurfaceCreateInfoGGP& value);
 std::ostream&	operator<<	(std::ostream& s, const VkPresentFrameTokenGGP& value);
 std::ostream&	operator<<	(std::ostream& s, const VkIOSSurfaceCreateInfoMVK& value);
diff --git a/external/vulkancts/framework/vulkan/vkStrUtilImpl.inl b/external/vulkancts/framework/vulkan/vkStrUtilImpl.inl
index ef2d5f7..4cef19a 100644
--- a/external/vulkancts/framework/vulkan/vkStrUtilImpl.inl
+++ b/external/vulkancts/framework/vulkan/vkStrUtilImpl.inl
@@ -42,6 +42,8 @@
 template<> const char*	getTypeName<VkIndirectCommandsLayoutNV>			(void) { return "VkIndirectCommandsLayoutNV";		}
 template<> const char*	getTypeName<VkPrivateDataSlotEXT>				(void) { return "VkPrivateDataSlotEXT";				}
 template<> const char*	getTypeName<VkAccelerationStructureKHR>			(void) { return "VkAccelerationStructureKHR";		}
+template<> const char*	getTypeName<VkVideoSessionKHR>					(void) { return "VkVideoSessionKHR";				}
+template<> const char*	getTypeName<VkVideoSessionParametersKHR>		(void) { return "VkVideoSessionParametersKHR";		}
 
 namespace pt
 {
@@ -306,6 +308,25 @@
 		case VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_NAME_INFO_EXT:								return "VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_NAME_INFO_EXT";
 		case VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_TAG_INFO_EXT:								return "VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_TAG_INFO_EXT";
 		case VK_STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT:									return "VK_STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT";
+		case VK_STRUCTURE_TYPE_VIDEO_PROFILE_KHR:												return "VK_STRUCTURE_TYPE_VIDEO_PROFILE_KHR";
+		case VK_STRUCTURE_TYPE_VIDEO_CAPABILITIES_KHR:											return "VK_STRUCTURE_TYPE_VIDEO_CAPABILITIES_KHR";
+		case VK_STRUCTURE_TYPE_VIDEO_PICTURE_RESOURCE_KHR:										return "VK_STRUCTURE_TYPE_VIDEO_PICTURE_RESOURCE_KHR";
+		case VK_STRUCTURE_TYPE_VIDEO_GET_MEMORY_PROPERTIES_KHR:									return "VK_STRUCTURE_TYPE_VIDEO_GET_MEMORY_PROPERTIES_KHR";
+		case VK_STRUCTURE_TYPE_VIDEO_BIND_MEMORY_KHR:											return "VK_STRUCTURE_TYPE_VIDEO_BIND_MEMORY_KHR";
+		case VK_STRUCTURE_TYPE_VIDEO_SESSION_CREATE_INFO_KHR:									return "VK_STRUCTURE_TYPE_VIDEO_SESSION_CREATE_INFO_KHR";
+		case VK_STRUCTURE_TYPE_VIDEO_SESSION_PARAMETERS_CREATE_INFO_KHR:						return "VK_STRUCTURE_TYPE_VIDEO_SESSION_PARAMETERS_CREATE_INFO_KHR";
+		case VK_STRUCTURE_TYPE_VIDEO_SESSION_PARAMETERS_UPDATE_INFO_KHR:						return "VK_STRUCTURE_TYPE_VIDEO_SESSION_PARAMETERS_UPDATE_INFO_KHR";
+		case VK_STRUCTURE_TYPE_VIDEO_BEGIN_CODING_INFO_KHR:										return "VK_STRUCTURE_TYPE_VIDEO_BEGIN_CODING_INFO_KHR";
+		case VK_STRUCTURE_TYPE_VIDEO_END_CODING_INFO_KHR:										return "VK_STRUCTURE_TYPE_VIDEO_END_CODING_INFO_KHR";
+		case VK_STRUCTURE_TYPE_VIDEO_CODING_CONTROL_INFO_KHR:									return "VK_STRUCTURE_TYPE_VIDEO_CODING_CONTROL_INFO_KHR";
+		case VK_STRUCTURE_TYPE_VIDEO_REFERENCE_SLOT_KHR:										return "VK_STRUCTURE_TYPE_VIDEO_REFERENCE_SLOT_KHR";
+		case VK_STRUCTURE_TYPE_VIDEO_QUEUE_FAMILY_PROPERTIES_2_KHR:								return "VK_STRUCTURE_TYPE_VIDEO_QUEUE_FAMILY_PROPERTIES_2_KHR";
+		case VK_STRUCTURE_TYPE_VIDEO_PROFILES_KHR:												return "VK_STRUCTURE_TYPE_VIDEO_PROFILES_KHR";
+		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_FORMAT_INFO_KHR:							return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_FORMAT_INFO_KHR";
+		case VK_STRUCTURE_TYPE_VIDEO_FORMAT_PROPERTIES_KHR:										return "VK_STRUCTURE_TYPE_VIDEO_FORMAT_PROPERTIES_KHR";
+		case VK_STRUCTURE_TYPE_VIDEO_DECODE_INFO_KHR:											return "VK_STRUCTURE_TYPE_VIDEO_DECODE_INFO_KHR";
+		case VK_STRUCTURE_TYPE_VIDEO_ENCODE_INFO_KHR:											return "VK_STRUCTURE_TYPE_VIDEO_ENCODE_INFO_KHR";
+		case VK_STRUCTURE_TYPE_VIDEO_ENCODE_RATE_CONTROL_INFO_KHR:								return "VK_STRUCTURE_TYPE_VIDEO_ENCODE_RATE_CONTROL_INFO_KHR";
 		case VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV:						return "VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV";
 		case VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_BUFFER_CREATE_INFO_NV:						return "VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_BUFFER_CREATE_INFO_NV";
 		case VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV:					return "VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV";
@@ -314,6 +335,23 @@
 		case VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_STREAM_CREATE_INFO_EXT:				return "VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_STREAM_CREATE_INFO_EXT";
 		case VK_STRUCTURE_TYPE_IMAGE_VIEW_HANDLE_INFO_NVX:										return "VK_STRUCTURE_TYPE_IMAGE_VIEW_HANDLE_INFO_NVX";
 		case VK_STRUCTURE_TYPE_IMAGE_VIEW_ADDRESS_PROPERTIES_NVX:								return "VK_STRUCTURE_TYPE_IMAGE_VIEW_ADDRESS_PROPERTIES_NVX";
+		case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_CAPABILITIES_EXT:								return "VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_CAPABILITIES_EXT";
+		case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_SESSION_CREATE_INFO_EXT:						return "VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_SESSION_CREATE_INFO_EXT";
+		case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_SESSION_PARAMETERS_CREATE_INFO_EXT:			return "VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_SESSION_PARAMETERS_CREATE_INFO_EXT";
+		case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_SESSION_PARAMETERS_ADD_INFO_EXT:				return "VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_SESSION_PARAMETERS_ADD_INFO_EXT";
+		case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_VCL_FRAME_INFO_EXT:							return "VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_VCL_FRAME_INFO_EXT";
+		case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_DPB_SLOT_INFO_EXT:								return "VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_DPB_SLOT_INFO_EXT";
+		case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_NALU_SLICE_EXT:								return "VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_NALU_SLICE_EXT";
+		case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_EMIT_PICTURE_PARAMETERS_EXT:					return "VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_EMIT_PICTURE_PARAMETERS_EXT";
+		case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_PROFILE_EXT:									return "VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_PROFILE_EXT";
+		case VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_CAPABILITIES_EXT:								return "VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_CAPABILITIES_EXT";
+		case VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_SESSION_CREATE_INFO_EXT:						return "VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_SESSION_CREATE_INFO_EXT";
+		case VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_PICTURE_INFO_EXT:								return "VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_PICTURE_INFO_EXT";
+		case VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_MVC_EXT:										return "VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_MVC_EXT";
+		case VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_PROFILE_EXT:									return "VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_PROFILE_EXT";
+		case VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_SESSION_PARAMETERS_CREATE_INFO_EXT:			return "VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_SESSION_PARAMETERS_CREATE_INFO_EXT";
+		case VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_SESSION_PARAMETERS_ADD_INFO_EXT:				return "VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_SESSION_PARAMETERS_ADD_INFO_EXT";
+		case VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_DPB_SLOT_INFO_EXT:								return "VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_DPB_SLOT_INFO_EXT";
 		case VK_STRUCTURE_TYPE_TEXTURE_LOD_GATHER_FORMAT_PROPERTIES_AMD:						return "VK_STRUCTURE_TYPE_TEXTURE_LOD_GATHER_FORMAT_PROPERTIES_AMD";
 		case VK_STRUCTURE_TYPE_STREAM_DESCRIPTOR_SURFACE_CREATE_INFO_GGP:						return "VK_STRUCTURE_TYPE_STREAM_DESCRIPTOR_SURFACE_CREATE_INFO_GGP";
 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CORNER_SAMPLED_IMAGE_FEATURES_NV:				return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CORNER_SAMPLED_IMAGE_FEATURES_NV";
@@ -469,6 +507,13 @@
 		case VK_STRUCTURE_TYPE_PIPELINE_COMPILER_CONTROL_CREATE_INFO_AMD:						return "VK_STRUCTURE_TYPE_PIPELINE_COMPILER_CONTROL_CREATE_INFO_AMD";
 		case VK_STRUCTURE_TYPE_CALIBRATED_TIMESTAMP_INFO_EXT:									return "VK_STRUCTURE_TYPE_CALIBRATED_TIMESTAMP_INFO_EXT";
 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_AMD:						return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_AMD";
+		case VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_CAPABILITIES_EXT:								return "VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_CAPABILITIES_EXT";
+		case VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_SESSION_CREATE_INFO_EXT:						return "VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_SESSION_CREATE_INFO_EXT";
+		case VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_SESSION_PARAMETERS_CREATE_INFO_EXT:			return "VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_SESSION_PARAMETERS_CREATE_INFO_EXT";
+		case VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_SESSION_PARAMETERS_ADD_INFO_EXT:				return "VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_SESSION_PARAMETERS_ADD_INFO_EXT";
+		case VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_PROFILE_EXT:									return "VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_PROFILE_EXT";
+		case VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_PICTURE_INFO_EXT:								return "VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_PICTURE_INFO_EXT";
+		case VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_DPB_SLOT_INFO_EXT:								return "VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_DPB_SLOT_INFO_EXT";
 		case VK_STRUCTURE_TYPE_DEVICE_MEMORY_OVERALLOCATION_CREATE_INFO_AMD:					return "VK_STRUCTURE_TYPE_DEVICE_MEMORY_OVERALLOCATION_CREATE_INFO_AMD";
 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT:			return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT";
 		case VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_EXT:				return "VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_EXT";
@@ -553,6 +598,10 @@
 		case VK_STRUCTURE_TYPE_GENERATED_COMMANDS_INFO_NV:										return "VK_STRUCTURE_TYPE_GENERATED_COMMANDS_INFO_NV";
 		case VK_STRUCTURE_TYPE_GENERATED_COMMANDS_MEMORY_REQUIREMENTS_INFO_NV:					return "VK_STRUCTURE_TYPE_GENERATED_COMMANDS_MEMORY_REQUIREMENTS_INFO_NV";
 		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";
@@ -586,6 +635,7 @@
 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_PROPERTIES_NV:		return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_PROPERTIES_NV";
 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_FEATURES_NV:			return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_FEATURES_NV";
 		case VK_STRUCTURE_TYPE_PIPELINE_FRAGMENT_SHADING_RATE_ENUM_STATE_CREATE_INFO_NV:		return "VK_STRUCTURE_TYPE_PIPELINE_FRAGMENT_SHADING_RATE_ENUM_STATE_CREATE_INFO_NV";
+		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_2_PLANE_444_FORMATS_FEATURES_EXT:			return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_2_PLANE_444_FORMATS_FEATURES_EXT";
 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_FEATURES_EXT:				return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_FEATURES_EXT";
 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_PROPERTIES_EXT:			return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_PROPERTIES_EXT";
 		case VK_STRUCTURE_TYPE_COPY_COMMAND_TRANSFORM_INFO_QCOM:								return "VK_STRUCTURE_TYPE_COPY_COMMAND_TRANSFORM_INFO_QCOM";
@@ -606,6 +656,18 @@
 		case VK_STRUCTURE_TYPE_DIRECTFB_SURFACE_CREATE_INFO_EXT:								return "VK_STRUCTURE_TYPE_DIRECTFB_SURFACE_CREATE_INFO_EXT";
 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MUTABLE_DESCRIPTOR_TYPE_FEATURES_VALVE:			return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MUTABLE_DESCRIPTOR_TYPE_FEATURES_VALVE";
 		case VK_STRUCTURE_TYPE_MUTABLE_DESCRIPTOR_TYPE_CREATE_INFO_VALVE:						return "VK_STRUCTURE_TYPE_MUTABLE_DESCRIPTOR_TYPE_CREATE_INFO_VALVE";
+		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_INPUT_DYNAMIC_STATE_FEATURES_EXT:			return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_INPUT_DYNAMIC_STATE_FEATURES_EXT";
+		case VK_STRUCTURE_TYPE_VERTEX_INPUT_BINDING_DESCRIPTION_2_EXT:							return "VK_STRUCTURE_TYPE_VERTEX_INPUT_BINDING_DESCRIPTION_2_EXT";
+		case VK_STRUCTURE_TYPE_VERTEX_INPUT_ATTRIBUTE_DESCRIPTION_2_EXT:						return "VK_STRUCTURE_TYPE_VERTEX_INPUT_ATTRIBUTE_DESCRIPTION_2_EXT";
+		case VK_STRUCTURE_TYPE_IMPORT_MEMORY_ZIRCON_HANDLE_INFO_FUCHSIA:						return "VK_STRUCTURE_TYPE_IMPORT_MEMORY_ZIRCON_HANDLE_INFO_FUCHSIA";
+		case VK_STRUCTURE_TYPE_MEMORY_ZIRCON_HANDLE_PROPERTIES_FUCHSIA:							return "VK_STRUCTURE_TYPE_MEMORY_ZIRCON_HANDLE_PROPERTIES_FUCHSIA";
+		case VK_STRUCTURE_TYPE_MEMORY_GET_ZIRCON_HANDLE_INFO_FUCHSIA:							return "VK_STRUCTURE_TYPE_MEMORY_GET_ZIRCON_HANDLE_INFO_FUCHSIA";
+		case VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_ZIRCON_HANDLE_INFO_FUCHSIA:						return "VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_ZIRCON_HANDLE_INFO_FUCHSIA";
+		case VK_STRUCTURE_TYPE_SEMAPHORE_GET_ZIRCON_HANDLE_INFO_FUCHSIA:						return "VK_STRUCTURE_TYPE_SEMAPHORE_GET_ZIRCON_HANDLE_INFO_FUCHSIA";
+		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_2_FEATURES_EXT:			return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_2_FEATURES_EXT";
+		case VK_STRUCTURE_TYPE_SCREEN_SURFACE_CREATE_INFO_QNX:									return "VK_STRUCTURE_TYPE_SCREEN_SURFACE_CREATE_INFO_QNX";
+		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COLOR_WRITE_ENABLE_FEATURES_EXT:					return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COLOR_WRITE_ENABLE_FEATURES_EXT";
+		case VK_STRUCTURE_TYPE_PIPELINE_COLOR_WRITE_CREATE_INFO_EXT:							return "VK_STRUCTURE_TYPE_PIPELINE_COLOR_WRITE_CREATE_INFO_EXT";
 		case VK_STRUCTURE_TYPE_MAX_ENUM:														return "VK_STRUCTURE_TYPE_MAX_ENUM";
 		default:																				return DE_NULL;
 	}
@@ -631,6 +693,12 @@
 		case VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL:					return "VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL";
 		case VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL:						return "VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL";
 		case VK_IMAGE_LAYOUT_PRESENT_SRC_KHR:								return "VK_IMAGE_LAYOUT_PRESENT_SRC_KHR";
+		case VK_IMAGE_LAYOUT_VIDEO_DECODE_DST_KHR:							return "VK_IMAGE_LAYOUT_VIDEO_DECODE_DST_KHR";
+		case VK_IMAGE_LAYOUT_VIDEO_DECODE_SRC_KHR:							return "VK_IMAGE_LAYOUT_VIDEO_DECODE_SRC_KHR";
+		case VK_IMAGE_LAYOUT_VIDEO_DECODE_DPB_KHR:							return "VK_IMAGE_LAYOUT_VIDEO_DECODE_DPB_KHR";
+		case VK_IMAGE_LAYOUT_VIDEO_ENCODE_DST_KHR:							return "VK_IMAGE_LAYOUT_VIDEO_ENCODE_DST_KHR";
+		case VK_IMAGE_LAYOUT_VIDEO_ENCODE_SRC_KHR:							return "VK_IMAGE_LAYOUT_VIDEO_ENCODE_SRC_KHR";
+		case VK_IMAGE_LAYOUT_VIDEO_ENCODE_DPB_KHR:							return "VK_IMAGE_LAYOUT_VIDEO_ENCODE_DPB_KHR";
 		case VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR:							return "VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR";
 		case VK_IMAGE_LAYOUT_SHADING_RATE_OPTIMAL_NV:						return "VK_IMAGE_LAYOUT_SHADING_RATE_OPTIMAL_NV";
 		case VK_IMAGE_LAYOUT_FRAGMENT_DENSITY_MAP_OPTIMAL_EXT:				return "VK_IMAGE_LAYOUT_FRAGMENT_DENSITY_MAP_OPTIMAL_EXT";
@@ -678,6 +746,8 @@
 		case VK_OBJECT_TYPE_DISPLAY_KHR:						return "VK_OBJECT_TYPE_DISPLAY_KHR";
 		case VK_OBJECT_TYPE_DISPLAY_MODE_KHR:					return "VK_OBJECT_TYPE_DISPLAY_MODE_KHR";
 		case VK_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT:			return "VK_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT";
+		case VK_OBJECT_TYPE_VIDEO_SESSION_KHR:					return "VK_OBJECT_TYPE_VIDEO_SESSION_KHR";
+		case VK_OBJECT_TYPE_VIDEO_SESSION_PARAMETERS_KHR:		return "VK_OBJECT_TYPE_VIDEO_SESSION_PARAMETERS_KHR";
 		case VK_OBJECT_TYPE_DEBUG_UTILS_MESSENGER_EXT:			return "VK_OBJECT_TYPE_DEBUG_UTILS_MESSENGER_EXT";
 		case VK_OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR:			return "VK_OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR";
 		case VK_OBJECT_TYPE_VALIDATION_CACHE_EXT:				return "VK_OBJECT_TYPE_VALIDATION_CACHE_EXT";
@@ -744,251 +814,255 @@
 {
 	switch (value)
 	{
-		case VK_FORMAT_UNDEFINED:									return "VK_FORMAT_UNDEFINED";
-		case VK_FORMAT_R4G4_UNORM_PACK8:							return "VK_FORMAT_R4G4_UNORM_PACK8";
-		case VK_FORMAT_R4G4B4A4_UNORM_PACK16:						return "VK_FORMAT_R4G4B4A4_UNORM_PACK16";
-		case VK_FORMAT_B4G4R4A4_UNORM_PACK16:						return "VK_FORMAT_B4G4R4A4_UNORM_PACK16";
-		case VK_FORMAT_R5G6B5_UNORM_PACK16:							return "VK_FORMAT_R5G6B5_UNORM_PACK16";
-		case VK_FORMAT_B5G6R5_UNORM_PACK16:							return "VK_FORMAT_B5G6R5_UNORM_PACK16";
-		case VK_FORMAT_R5G5B5A1_UNORM_PACK16:						return "VK_FORMAT_R5G5B5A1_UNORM_PACK16";
-		case VK_FORMAT_B5G5R5A1_UNORM_PACK16:						return "VK_FORMAT_B5G5R5A1_UNORM_PACK16";
-		case VK_FORMAT_A1R5G5B5_UNORM_PACK16:						return "VK_FORMAT_A1R5G5B5_UNORM_PACK16";
-		case VK_FORMAT_R8_UNORM:									return "VK_FORMAT_R8_UNORM";
-		case VK_FORMAT_R8_SNORM:									return "VK_FORMAT_R8_SNORM";
-		case VK_FORMAT_R8_USCALED:									return "VK_FORMAT_R8_USCALED";
-		case VK_FORMAT_R8_SSCALED:									return "VK_FORMAT_R8_SSCALED";
-		case VK_FORMAT_R8_UINT:										return "VK_FORMAT_R8_UINT";
-		case VK_FORMAT_R8_SINT:										return "VK_FORMAT_R8_SINT";
-		case VK_FORMAT_R8_SRGB:										return "VK_FORMAT_R8_SRGB";
-		case VK_FORMAT_R8G8_UNORM:									return "VK_FORMAT_R8G8_UNORM";
-		case VK_FORMAT_R8G8_SNORM:									return "VK_FORMAT_R8G8_SNORM";
-		case VK_FORMAT_R8G8_USCALED:								return "VK_FORMAT_R8G8_USCALED";
-		case VK_FORMAT_R8G8_SSCALED:								return "VK_FORMAT_R8G8_SSCALED";
-		case VK_FORMAT_R8G8_UINT:									return "VK_FORMAT_R8G8_UINT";
-		case VK_FORMAT_R8G8_SINT:									return "VK_FORMAT_R8G8_SINT";
-		case VK_FORMAT_R8G8_SRGB:									return "VK_FORMAT_R8G8_SRGB";
-		case VK_FORMAT_R8G8B8_UNORM:								return "VK_FORMAT_R8G8B8_UNORM";
-		case VK_FORMAT_R8G8B8_SNORM:								return "VK_FORMAT_R8G8B8_SNORM";
-		case VK_FORMAT_R8G8B8_USCALED:								return "VK_FORMAT_R8G8B8_USCALED";
-		case VK_FORMAT_R8G8B8_SSCALED:								return "VK_FORMAT_R8G8B8_SSCALED";
-		case VK_FORMAT_R8G8B8_UINT:									return "VK_FORMAT_R8G8B8_UINT";
-		case VK_FORMAT_R8G8B8_SINT:									return "VK_FORMAT_R8G8B8_SINT";
-		case VK_FORMAT_R8G8B8_SRGB:									return "VK_FORMAT_R8G8B8_SRGB";
-		case VK_FORMAT_B8G8R8_UNORM:								return "VK_FORMAT_B8G8R8_UNORM";
-		case VK_FORMAT_B8G8R8_SNORM:								return "VK_FORMAT_B8G8R8_SNORM";
-		case VK_FORMAT_B8G8R8_USCALED:								return "VK_FORMAT_B8G8R8_USCALED";
-		case VK_FORMAT_B8G8R8_SSCALED:								return "VK_FORMAT_B8G8R8_SSCALED";
-		case VK_FORMAT_B8G8R8_UINT:									return "VK_FORMAT_B8G8R8_UINT";
-		case VK_FORMAT_B8G8R8_SINT:									return "VK_FORMAT_B8G8R8_SINT";
-		case VK_FORMAT_B8G8R8_SRGB:									return "VK_FORMAT_B8G8R8_SRGB";
-		case VK_FORMAT_R8G8B8A8_UNORM:								return "VK_FORMAT_R8G8B8A8_UNORM";
-		case VK_FORMAT_R8G8B8A8_SNORM:								return "VK_FORMAT_R8G8B8A8_SNORM";
-		case VK_FORMAT_R8G8B8A8_USCALED:							return "VK_FORMAT_R8G8B8A8_USCALED";
-		case VK_FORMAT_R8G8B8A8_SSCALED:							return "VK_FORMAT_R8G8B8A8_SSCALED";
-		case VK_FORMAT_R8G8B8A8_UINT:								return "VK_FORMAT_R8G8B8A8_UINT";
-		case VK_FORMAT_R8G8B8A8_SINT:								return "VK_FORMAT_R8G8B8A8_SINT";
-		case VK_FORMAT_R8G8B8A8_SRGB:								return "VK_FORMAT_R8G8B8A8_SRGB";
-		case VK_FORMAT_B8G8R8A8_UNORM:								return "VK_FORMAT_B8G8R8A8_UNORM";
-		case VK_FORMAT_B8G8R8A8_SNORM:								return "VK_FORMAT_B8G8R8A8_SNORM";
-		case VK_FORMAT_B8G8R8A8_USCALED:							return "VK_FORMAT_B8G8R8A8_USCALED";
-		case VK_FORMAT_B8G8R8A8_SSCALED:							return "VK_FORMAT_B8G8R8A8_SSCALED";
-		case VK_FORMAT_B8G8R8A8_UINT:								return "VK_FORMAT_B8G8R8A8_UINT";
-		case VK_FORMAT_B8G8R8A8_SINT:								return "VK_FORMAT_B8G8R8A8_SINT";
-		case VK_FORMAT_B8G8R8A8_SRGB:								return "VK_FORMAT_B8G8R8A8_SRGB";
-		case VK_FORMAT_A8B8G8R8_UNORM_PACK32:						return "VK_FORMAT_A8B8G8R8_UNORM_PACK32";
-		case VK_FORMAT_A8B8G8R8_SNORM_PACK32:						return "VK_FORMAT_A8B8G8R8_SNORM_PACK32";
-		case VK_FORMAT_A8B8G8R8_USCALED_PACK32:						return "VK_FORMAT_A8B8G8R8_USCALED_PACK32";
-		case VK_FORMAT_A8B8G8R8_SSCALED_PACK32:						return "VK_FORMAT_A8B8G8R8_SSCALED_PACK32";
-		case VK_FORMAT_A8B8G8R8_UINT_PACK32:						return "VK_FORMAT_A8B8G8R8_UINT_PACK32";
-		case VK_FORMAT_A8B8G8R8_SINT_PACK32:						return "VK_FORMAT_A8B8G8R8_SINT_PACK32";
-		case VK_FORMAT_A8B8G8R8_SRGB_PACK32:						return "VK_FORMAT_A8B8G8R8_SRGB_PACK32";
-		case VK_FORMAT_A2R10G10B10_UNORM_PACK32:					return "VK_FORMAT_A2R10G10B10_UNORM_PACK32";
-		case VK_FORMAT_A2R10G10B10_SNORM_PACK32:					return "VK_FORMAT_A2R10G10B10_SNORM_PACK32";
-		case VK_FORMAT_A2R10G10B10_USCALED_PACK32:					return "VK_FORMAT_A2R10G10B10_USCALED_PACK32";
-		case VK_FORMAT_A2R10G10B10_SSCALED_PACK32:					return "VK_FORMAT_A2R10G10B10_SSCALED_PACK32";
-		case VK_FORMAT_A2R10G10B10_UINT_PACK32:						return "VK_FORMAT_A2R10G10B10_UINT_PACK32";
-		case VK_FORMAT_A2R10G10B10_SINT_PACK32:						return "VK_FORMAT_A2R10G10B10_SINT_PACK32";
-		case VK_FORMAT_A2B10G10R10_UNORM_PACK32:					return "VK_FORMAT_A2B10G10R10_UNORM_PACK32";
-		case VK_FORMAT_A2B10G10R10_SNORM_PACK32:					return "VK_FORMAT_A2B10G10R10_SNORM_PACK32";
-		case VK_FORMAT_A2B10G10R10_USCALED_PACK32:					return "VK_FORMAT_A2B10G10R10_USCALED_PACK32";
-		case VK_FORMAT_A2B10G10R10_SSCALED_PACK32:					return "VK_FORMAT_A2B10G10R10_SSCALED_PACK32";
-		case VK_FORMAT_A2B10G10R10_UINT_PACK32:						return "VK_FORMAT_A2B10G10R10_UINT_PACK32";
-		case VK_FORMAT_A2B10G10R10_SINT_PACK32:						return "VK_FORMAT_A2B10G10R10_SINT_PACK32";
-		case VK_FORMAT_R16_UNORM:									return "VK_FORMAT_R16_UNORM";
-		case VK_FORMAT_R16_SNORM:									return "VK_FORMAT_R16_SNORM";
-		case VK_FORMAT_R16_USCALED:									return "VK_FORMAT_R16_USCALED";
-		case VK_FORMAT_R16_SSCALED:									return "VK_FORMAT_R16_SSCALED";
-		case VK_FORMAT_R16_UINT:									return "VK_FORMAT_R16_UINT";
-		case VK_FORMAT_R16_SINT:									return "VK_FORMAT_R16_SINT";
-		case VK_FORMAT_R16_SFLOAT:									return "VK_FORMAT_R16_SFLOAT";
-		case VK_FORMAT_R16G16_UNORM:								return "VK_FORMAT_R16G16_UNORM";
-		case VK_FORMAT_R16G16_SNORM:								return "VK_FORMAT_R16G16_SNORM";
-		case VK_FORMAT_R16G16_USCALED:								return "VK_FORMAT_R16G16_USCALED";
-		case VK_FORMAT_R16G16_SSCALED:								return "VK_FORMAT_R16G16_SSCALED";
-		case VK_FORMAT_R16G16_UINT:									return "VK_FORMAT_R16G16_UINT";
-		case VK_FORMAT_R16G16_SINT:									return "VK_FORMAT_R16G16_SINT";
-		case VK_FORMAT_R16G16_SFLOAT:								return "VK_FORMAT_R16G16_SFLOAT";
-		case VK_FORMAT_R16G16B16_UNORM:								return "VK_FORMAT_R16G16B16_UNORM";
-		case VK_FORMAT_R16G16B16_SNORM:								return "VK_FORMAT_R16G16B16_SNORM";
-		case VK_FORMAT_R16G16B16_USCALED:							return "VK_FORMAT_R16G16B16_USCALED";
-		case VK_FORMAT_R16G16B16_SSCALED:							return "VK_FORMAT_R16G16B16_SSCALED";
-		case VK_FORMAT_R16G16B16_UINT:								return "VK_FORMAT_R16G16B16_UINT";
-		case VK_FORMAT_R16G16B16_SINT:								return "VK_FORMAT_R16G16B16_SINT";
-		case VK_FORMAT_R16G16B16_SFLOAT:							return "VK_FORMAT_R16G16B16_SFLOAT";
-		case VK_FORMAT_R16G16B16A16_UNORM:							return "VK_FORMAT_R16G16B16A16_UNORM";
-		case VK_FORMAT_R16G16B16A16_SNORM:							return "VK_FORMAT_R16G16B16A16_SNORM";
-		case VK_FORMAT_R16G16B16A16_USCALED:						return "VK_FORMAT_R16G16B16A16_USCALED";
-		case VK_FORMAT_R16G16B16A16_SSCALED:						return "VK_FORMAT_R16G16B16A16_SSCALED";
-		case VK_FORMAT_R16G16B16A16_UINT:							return "VK_FORMAT_R16G16B16A16_UINT";
-		case VK_FORMAT_R16G16B16A16_SINT:							return "VK_FORMAT_R16G16B16A16_SINT";
-		case VK_FORMAT_R16G16B16A16_SFLOAT:							return "VK_FORMAT_R16G16B16A16_SFLOAT";
-		case VK_FORMAT_R32_UINT:									return "VK_FORMAT_R32_UINT";
-		case VK_FORMAT_R32_SINT:									return "VK_FORMAT_R32_SINT";
-		case VK_FORMAT_R32_SFLOAT:									return "VK_FORMAT_R32_SFLOAT";
-		case VK_FORMAT_R32G32_UINT:									return "VK_FORMAT_R32G32_UINT";
-		case VK_FORMAT_R32G32_SINT:									return "VK_FORMAT_R32G32_SINT";
-		case VK_FORMAT_R32G32_SFLOAT:								return "VK_FORMAT_R32G32_SFLOAT";
-		case VK_FORMAT_R32G32B32_UINT:								return "VK_FORMAT_R32G32B32_UINT";
-		case VK_FORMAT_R32G32B32_SINT:								return "VK_FORMAT_R32G32B32_SINT";
-		case VK_FORMAT_R32G32B32_SFLOAT:							return "VK_FORMAT_R32G32B32_SFLOAT";
-		case VK_FORMAT_R32G32B32A32_UINT:							return "VK_FORMAT_R32G32B32A32_UINT";
-		case VK_FORMAT_R32G32B32A32_SINT:							return "VK_FORMAT_R32G32B32A32_SINT";
-		case VK_FORMAT_R32G32B32A32_SFLOAT:							return "VK_FORMAT_R32G32B32A32_SFLOAT";
-		case VK_FORMAT_R64_UINT:									return "VK_FORMAT_R64_UINT";
-		case VK_FORMAT_R64_SINT:									return "VK_FORMAT_R64_SINT";
-		case VK_FORMAT_R64_SFLOAT:									return "VK_FORMAT_R64_SFLOAT";
-		case VK_FORMAT_R64G64_UINT:									return "VK_FORMAT_R64G64_UINT";
-		case VK_FORMAT_R64G64_SINT:									return "VK_FORMAT_R64G64_SINT";
-		case VK_FORMAT_R64G64_SFLOAT:								return "VK_FORMAT_R64G64_SFLOAT";
-		case VK_FORMAT_R64G64B64_UINT:								return "VK_FORMAT_R64G64B64_UINT";
-		case VK_FORMAT_R64G64B64_SINT:								return "VK_FORMAT_R64G64B64_SINT";
-		case VK_FORMAT_R64G64B64_SFLOAT:							return "VK_FORMAT_R64G64B64_SFLOAT";
-		case VK_FORMAT_R64G64B64A64_UINT:							return "VK_FORMAT_R64G64B64A64_UINT";
-		case VK_FORMAT_R64G64B64A64_SINT:							return "VK_FORMAT_R64G64B64A64_SINT";
-		case VK_FORMAT_R64G64B64A64_SFLOAT:							return "VK_FORMAT_R64G64B64A64_SFLOAT";
-		case VK_FORMAT_B10G11R11_UFLOAT_PACK32:						return "VK_FORMAT_B10G11R11_UFLOAT_PACK32";
-		case VK_FORMAT_E5B9G9R9_UFLOAT_PACK32:						return "VK_FORMAT_E5B9G9R9_UFLOAT_PACK32";
-		case VK_FORMAT_D16_UNORM:									return "VK_FORMAT_D16_UNORM";
-		case VK_FORMAT_X8_D24_UNORM_PACK32:							return "VK_FORMAT_X8_D24_UNORM_PACK32";
-		case VK_FORMAT_D32_SFLOAT:									return "VK_FORMAT_D32_SFLOAT";
-		case VK_FORMAT_S8_UINT:										return "VK_FORMAT_S8_UINT";
-		case VK_FORMAT_D16_UNORM_S8_UINT:							return "VK_FORMAT_D16_UNORM_S8_UINT";
-		case VK_FORMAT_D24_UNORM_S8_UINT:							return "VK_FORMAT_D24_UNORM_S8_UINT";
-		case VK_FORMAT_D32_SFLOAT_S8_UINT:							return "VK_FORMAT_D32_SFLOAT_S8_UINT";
-		case VK_FORMAT_BC1_RGB_UNORM_BLOCK:							return "VK_FORMAT_BC1_RGB_UNORM_BLOCK";
-		case VK_FORMAT_BC1_RGB_SRGB_BLOCK:							return "VK_FORMAT_BC1_RGB_SRGB_BLOCK";
-		case VK_FORMAT_BC1_RGBA_UNORM_BLOCK:						return "VK_FORMAT_BC1_RGBA_UNORM_BLOCK";
-		case VK_FORMAT_BC1_RGBA_SRGB_BLOCK:							return "VK_FORMAT_BC1_RGBA_SRGB_BLOCK";
-		case VK_FORMAT_BC2_UNORM_BLOCK:								return "VK_FORMAT_BC2_UNORM_BLOCK";
-		case VK_FORMAT_BC2_SRGB_BLOCK:								return "VK_FORMAT_BC2_SRGB_BLOCK";
-		case VK_FORMAT_BC3_UNORM_BLOCK:								return "VK_FORMAT_BC3_UNORM_BLOCK";
-		case VK_FORMAT_BC3_SRGB_BLOCK:								return "VK_FORMAT_BC3_SRGB_BLOCK";
-		case VK_FORMAT_BC4_UNORM_BLOCK:								return "VK_FORMAT_BC4_UNORM_BLOCK";
-		case VK_FORMAT_BC4_SNORM_BLOCK:								return "VK_FORMAT_BC4_SNORM_BLOCK";
-		case VK_FORMAT_BC5_UNORM_BLOCK:								return "VK_FORMAT_BC5_UNORM_BLOCK";
-		case VK_FORMAT_BC5_SNORM_BLOCK:								return "VK_FORMAT_BC5_SNORM_BLOCK";
-		case VK_FORMAT_BC6H_UFLOAT_BLOCK:							return "VK_FORMAT_BC6H_UFLOAT_BLOCK";
-		case VK_FORMAT_BC6H_SFLOAT_BLOCK:							return "VK_FORMAT_BC6H_SFLOAT_BLOCK";
-		case VK_FORMAT_BC7_UNORM_BLOCK:								return "VK_FORMAT_BC7_UNORM_BLOCK";
-		case VK_FORMAT_BC7_SRGB_BLOCK:								return "VK_FORMAT_BC7_SRGB_BLOCK";
-		case VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK:						return "VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK";
-		case VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK:						return "VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK";
-		case VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK:					return "VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK";
-		case VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK:					return "VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK";
-		case VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK:					return "VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK";
-		case VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK:					return "VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK";
-		case VK_FORMAT_EAC_R11_UNORM_BLOCK:							return "VK_FORMAT_EAC_R11_UNORM_BLOCK";
-		case VK_FORMAT_EAC_R11_SNORM_BLOCK:							return "VK_FORMAT_EAC_R11_SNORM_BLOCK";
-		case VK_FORMAT_EAC_R11G11_UNORM_BLOCK:						return "VK_FORMAT_EAC_R11G11_UNORM_BLOCK";
-		case VK_FORMAT_EAC_R11G11_SNORM_BLOCK:						return "VK_FORMAT_EAC_R11G11_SNORM_BLOCK";
-		case VK_FORMAT_ASTC_4x4_UNORM_BLOCK:						return "VK_FORMAT_ASTC_4x4_UNORM_BLOCK";
-		case VK_FORMAT_ASTC_4x4_SRGB_BLOCK:							return "VK_FORMAT_ASTC_4x4_SRGB_BLOCK";
-		case VK_FORMAT_ASTC_5x4_UNORM_BLOCK:						return "VK_FORMAT_ASTC_5x4_UNORM_BLOCK";
-		case VK_FORMAT_ASTC_5x4_SRGB_BLOCK:							return "VK_FORMAT_ASTC_5x4_SRGB_BLOCK";
-		case VK_FORMAT_ASTC_5x5_UNORM_BLOCK:						return "VK_FORMAT_ASTC_5x5_UNORM_BLOCK";
-		case VK_FORMAT_ASTC_5x5_SRGB_BLOCK:							return "VK_FORMAT_ASTC_5x5_SRGB_BLOCK";
-		case VK_FORMAT_ASTC_6x5_UNORM_BLOCK:						return "VK_FORMAT_ASTC_6x5_UNORM_BLOCK";
-		case VK_FORMAT_ASTC_6x5_SRGB_BLOCK:							return "VK_FORMAT_ASTC_6x5_SRGB_BLOCK";
-		case VK_FORMAT_ASTC_6x6_UNORM_BLOCK:						return "VK_FORMAT_ASTC_6x6_UNORM_BLOCK";
-		case VK_FORMAT_ASTC_6x6_SRGB_BLOCK:							return "VK_FORMAT_ASTC_6x6_SRGB_BLOCK";
-		case VK_FORMAT_ASTC_8x5_UNORM_BLOCK:						return "VK_FORMAT_ASTC_8x5_UNORM_BLOCK";
-		case VK_FORMAT_ASTC_8x5_SRGB_BLOCK:							return "VK_FORMAT_ASTC_8x5_SRGB_BLOCK";
-		case VK_FORMAT_ASTC_8x6_UNORM_BLOCK:						return "VK_FORMAT_ASTC_8x6_UNORM_BLOCK";
-		case VK_FORMAT_ASTC_8x6_SRGB_BLOCK:							return "VK_FORMAT_ASTC_8x6_SRGB_BLOCK";
-		case VK_FORMAT_ASTC_8x8_UNORM_BLOCK:						return "VK_FORMAT_ASTC_8x8_UNORM_BLOCK";
-		case VK_FORMAT_ASTC_8x8_SRGB_BLOCK:							return "VK_FORMAT_ASTC_8x8_SRGB_BLOCK";
-		case VK_FORMAT_ASTC_10x5_UNORM_BLOCK:						return "VK_FORMAT_ASTC_10x5_UNORM_BLOCK";
-		case VK_FORMAT_ASTC_10x5_SRGB_BLOCK:						return "VK_FORMAT_ASTC_10x5_SRGB_BLOCK";
-		case VK_FORMAT_ASTC_10x6_UNORM_BLOCK:						return "VK_FORMAT_ASTC_10x6_UNORM_BLOCK";
-		case VK_FORMAT_ASTC_10x6_SRGB_BLOCK:						return "VK_FORMAT_ASTC_10x6_SRGB_BLOCK";
-		case VK_FORMAT_ASTC_10x8_UNORM_BLOCK:						return "VK_FORMAT_ASTC_10x8_UNORM_BLOCK";
-		case VK_FORMAT_ASTC_10x8_SRGB_BLOCK:						return "VK_FORMAT_ASTC_10x8_SRGB_BLOCK";
-		case VK_FORMAT_ASTC_10x10_UNORM_BLOCK:						return "VK_FORMAT_ASTC_10x10_UNORM_BLOCK";
-		case VK_FORMAT_ASTC_10x10_SRGB_BLOCK:						return "VK_FORMAT_ASTC_10x10_SRGB_BLOCK";
-		case VK_FORMAT_ASTC_12x10_UNORM_BLOCK:						return "VK_FORMAT_ASTC_12x10_UNORM_BLOCK";
-		case VK_FORMAT_ASTC_12x10_SRGB_BLOCK:						return "VK_FORMAT_ASTC_12x10_SRGB_BLOCK";
-		case VK_FORMAT_ASTC_12x12_UNORM_BLOCK:						return "VK_FORMAT_ASTC_12x12_UNORM_BLOCK";
-		case VK_FORMAT_ASTC_12x12_SRGB_BLOCK:						return "VK_FORMAT_ASTC_12x12_SRGB_BLOCK";
-		case VK_FORMAT_G8B8G8R8_422_UNORM:							return "VK_FORMAT_G8B8G8R8_422_UNORM";
-		case VK_FORMAT_B8G8R8G8_422_UNORM:							return "VK_FORMAT_B8G8R8G8_422_UNORM";
-		case VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM:					return "VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM";
-		case VK_FORMAT_G8_B8R8_2PLANE_420_UNORM:					return "VK_FORMAT_G8_B8R8_2PLANE_420_UNORM";
-		case VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM:					return "VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM";
-		case VK_FORMAT_G8_B8R8_2PLANE_422_UNORM:					return "VK_FORMAT_G8_B8R8_2PLANE_422_UNORM";
-		case VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM:					return "VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM";
-		case VK_FORMAT_R10X6_UNORM_PACK16:							return "VK_FORMAT_R10X6_UNORM_PACK16";
-		case VK_FORMAT_R10X6G10X6_UNORM_2PACK16:					return "VK_FORMAT_R10X6G10X6_UNORM_2PACK16";
-		case VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16:			return "VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16";
-		case VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16:		return "VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16";
-		case VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16:		return "VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16";
-		case VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16:	return "VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16";
-		case VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16:	return "VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16";
-		case VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16:	return "VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16";
-		case VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16:	return "VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16";
-		case VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16:	return "VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16";
-		case VK_FORMAT_R12X4_UNORM_PACK16:							return "VK_FORMAT_R12X4_UNORM_PACK16";
-		case VK_FORMAT_R12X4G12X4_UNORM_2PACK16:					return "VK_FORMAT_R12X4G12X4_UNORM_2PACK16";
-		case VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16:			return "VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16";
-		case VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16:		return "VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16";
-		case VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16:		return "VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16";
-		case VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16:	return "VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16";
-		case VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16:	return "VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16";
-		case VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16:	return "VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16";
-		case VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16:	return "VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16";
-		case VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16:	return "VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16";
-		case VK_FORMAT_G16B16G16R16_422_UNORM:						return "VK_FORMAT_G16B16G16R16_422_UNORM";
-		case VK_FORMAT_B16G16R16G16_422_UNORM:						return "VK_FORMAT_B16G16R16G16_422_UNORM";
-		case VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM:				return "VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM";
-		case VK_FORMAT_G16_B16R16_2PLANE_420_UNORM:					return "VK_FORMAT_G16_B16R16_2PLANE_420_UNORM";
-		case VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM:				return "VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM";
-		case VK_FORMAT_G16_B16R16_2PLANE_422_UNORM:					return "VK_FORMAT_G16_B16R16_2PLANE_422_UNORM";
-		case VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM:				return "VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM";
-		case VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG:					return "VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG";
-		case VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG:					return "VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG";
-		case VK_FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG:					return "VK_FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG";
-		case VK_FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG:					return "VK_FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG";
-		case VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG:					return "VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG";
-		case VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG:					return "VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG";
-		case VK_FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG:					return "VK_FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG";
-		case VK_FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG:					return "VK_FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG";
-		case VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK_EXT:					return "VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK_EXT";
-		case VK_FORMAT_ASTC_5x4_SFLOAT_BLOCK_EXT:					return "VK_FORMAT_ASTC_5x4_SFLOAT_BLOCK_EXT";
-		case VK_FORMAT_ASTC_5x5_SFLOAT_BLOCK_EXT:					return "VK_FORMAT_ASTC_5x5_SFLOAT_BLOCK_EXT";
-		case VK_FORMAT_ASTC_6x5_SFLOAT_BLOCK_EXT:					return "VK_FORMAT_ASTC_6x5_SFLOAT_BLOCK_EXT";
-		case VK_FORMAT_ASTC_6x6_SFLOAT_BLOCK_EXT:					return "VK_FORMAT_ASTC_6x6_SFLOAT_BLOCK_EXT";
-		case VK_FORMAT_ASTC_8x5_SFLOAT_BLOCK_EXT:					return "VK_FORMAT_ASTC_8x5_SFLOAT_BLOCK_EXT";
-		case VK_FORMAT_ASTC_8x6_SFLOAT_BLOCK_EXT:					return "VK_FORMAT_ASTC_8x6_SFLOAT_BLOCK_EXT";
-		case VK_FORMAT_ASTC_8x8_SFLOAT_BLOCK_EXT:					return "VK_FORMAT_ASTC_8x8_SFLOAT_BLOCK_EXT";
-		case VK_FORMAT_ASTC_10x5_SFLOAT_BLOCK_EXT:					return "VK_FORMAT_ASTC_10x5_SFLOAT_BLOCK_EXT";
-		case VK_FORMAT_ASTC_10x6_SFLOAT_BLOCK_EXT:					return "VK_FORMAT_ASTC_10x6_SFLOAT_BLOCK_EXT";
-		case VK_FORMAT_ASTC_10x8_SFLOAT_BLOCK_EXT:					return "VK_FORMAT_ASTC_10x8_SFLOAT_BLOCK_EXT";
-		case VK_FORMAT_ASTC_10x10_SFLOAT_BLOCK_EXT:					return "VK_FORMAT_ASTC_10x10_SFLOAT_BLOCK_EXT";
-		case VK_FORMAT_ASTC_12x10_SFLOAT_BLOCK_EXT:					return "VK_FORMAT_ASTC_12x10_SFLOAT_BLOCK_EXT";
-		case VK_FORMAT_ASTC_12x12_SFLOAT_BLOCK_EXT:					return "VK_FORMAT_ASTC_12x12_SFLOAT_BLOCK_EXT";
-		case VK_FORMAT_A4R4G4B4_UNORM_PACK16_EXT:					return "VK_FORMAT_A4R4G4B4_UNORM_PACK16_EXT";
-		case VK_FORMAT_A4B4G4R4_UNORM_PACK16_EXT:					return "VK_FORMAT_A4B4G4R4_UNORM_PACK16_EXT";
-		case VK_FORMAT_MAX_ENUM:									return "VK_FORMAT_MAX_ENUM";
-		default:													return DE_NULL;
+		case VK_FORMAT_UNDEFINED:										return "VK_FORMAT_UNDEFINED";
+		case VK_FORMAT_R4G4_UNORM_PACK8:								return "VK_FORMAT_R4G4_UNORM_PACK8";
+		case VK_FORMAT_R4G4B4A4_UNORM_PACK16:							return "VK_FORMAT_R4G4B4A4_UNORM_PACK16";
+		case VK_FORMAT_B4G4R4A4_UNORM_PACK16:							return "VK_FORMAT_B4G4R4A4_UNORM_PACK16";
+		case VK_FORMAT_R5G6B5_UNORM_PACK16:								return "VK_FORMAT_R5G6B5_UNORM_PACK16";
+		case VK_FORMAT_B5G6R5_UNORM_PACK16:								return "VK_FORMAT_B5G6R5_UNORM_PACK16";
+		case VK_FORMAT_R5G5B5A1_UNORM_PACK16:							return "VK_FORMAT_R5G5B5A1_UNORM_PACK16";
+		case VK_FORMAT_B5G5R5A1_UNORM_PACK16:							return "VK_FORMAT_B5G5R5A1_UNORM_PACK16";
+		case VK_FORMAT_A1R5G5B5_UNORM_PACK16:							return "VK_FORMAT_A1R5G5B5_UNORM_PACK16";
+		case VK_FORMAT_R8_UNORM:										return "VK_FORMAT_R8_UNORM";
+		case VK_FORMAT_R8_SNORM:										return "VK_FORMAT_R8_SNORM";
+		case VK_FORMAT_R8_USCALED:										return "VK_FORMAT_R8_USCALED";
+		case VK_FORMAT_R8_SSCALED:										return "VK_FORMAT_R8_SSCALED";
+		case VK_FORMAT_R8_UINT:											return "VK_FORMAT_R8_UINT";
+		case VK_FORMAT_R8_SINT:											return "VK_FORMAT_R8_SINT";
+		case VK_FORMAT_R8_SRGB:											return "VK_FORMAT_R8_SRGB";
+		case VK_FORMAT_R8G8_UNORM:										return "VK_FORMAT_R8G8_UNORM";
+		case VK_FORMAT_R8G8_SNORM:										return "VK_FORMAT_R8G8_SNORM";
+		case VK_FORMAT_R8G8_USCALED:									return "VK_FORMAT_R8G8_USCALED";
+		case VK_FORMAT_R8G8_SSCALED:									return "VK_FORMAT_R8G8_SSCALED";
+		case VK_FORMAT_R8G8_UINT:										return "VK_FORMAT_R8G8_UINT";
+		case VK_FORMAT_R8G8_SINT:										return "VK_FORMAT_R8G8_SINT";
+		case VK_FORMAT_R8G8_SRGB:										return "VK_FORMAT_R8G8_SRGB";
+		case VK_FORMAT_R8G8B8_UNORM:									return "VK_FORMAT_R8G8B8_UNORM";
+		case VK_FORMAT_R8G8B8_SNORM:									return "VK_FORMAT_R8G8B8_SNORM";
+		case VK_FORMAT_R8G8B8_USCALED:									return "VK_FORMAT_R8G8B8_USCALED";
+		case VK_FORMAT_R8G8B8_SSCALED:									return "VK_FORMAT_R8G8B8_SSCALED";
+		case VK_FORMAT_R8G8B8_UINT:										return "VK_FORMAT_R8G8B8_UINT";
+		case VK_FORMAT_R8G8B8_SINT:										return "VK_FORMAT_R8G8B8_SINT";
+		case VK_FORMAT_R8G8B8_SRGB:										return "VK_FORMAT_R8G8B8_SRGB";
+		case VK_FORMAT_B8G8R8_UNORM:									return "VK_FORMAT_B8G8R8_UNORM";
+		case VK_FORMAT_B8G8R8_SNORM:									return "VK_FORMAT_B8G8R8_SNORM";
+		case VK_FORMAT_B8G8R8_USCALED:									return "VK_FORMAT_B8G8R8_USCALED";
+		case VK_FORMAT_B8G8R8_SSCALED:									return "VK_FORMAT_B8G8R8_SSCALED";
+		case VK_FORMAT_B8G8R8_UINT:										return "VK_FORMAT_B8G8R8_UINT";
+		case VK_FORMAT_B8G8R8_SINT:										return "VK_FORMAT_B8G8R8_SINT";
+		case VK_FORMAT_B8G8R8_SRGB:										return "VK_FORMAT_B8G8R8_SRGB";
+		case VK_FORMAT_R8G8B8A8_UNORM:									return "VK_FORMAT_R8G8B8A8_UNORM";
+		case VK_FORMAT_R8G8B8A8_SNORM:									return "VK_FORMAT_R8G8B8A8_SNORM";
+		case VK_FORMAT_R8G8B8A8_USCALED:								return "VK_FORMAT_R8G8B8A8_USCALED";
+		case VK_FORMAT_R8G8B8A8_SSCALED:								return "VK_FORMAT_R8G8B8A8_SSCALED";
+		case VK_FORMAT_R8G8B8A8_UINT:									return "VK_FORMAT_R8G8B8A8_UINT";
+		case VK_FORMAT_R8G8B8A8_SINT:									return "VK_FORMAT_R8G8B8A8_SINT";
+		case VK_FORMAT_R8G8B8A8_SRGB:									return "VK_FORMAT_R8G8B8A8_SRGB";
+		case VK_FORMAT_B8G8R8A8_UNORM:									return "VK_FORMAT_B8G8R8A8_UNORM";
+		case VK_FORMAT_B8G8R8A8_SNORM:									return "VK_FORMAT_B8G8R8A8_SNORM";
+		case VK_FORMAT_B8G8R8A8_USCALED:								return "VK_FORMAT_B8G8R8A8_USCALED";
+		case VK_FORMAT_B8G8R8A8_SSCALED:								return "VK_FORMAT_B8G8R8A8_SSCALED";
+		case VK_FORMAT_B8G8R8A8_UINT:									return "VK_FORMAT_B8G8R8A8_UINT";
+		case VK_FORMAT_B8G8R8A8_SINT:									return "VK_FORMAT_B8G8R8A8_SINT";
+		case VK_FORMAT_B8G8R8A8_SRGB:									return "VK_FORMAT_B8G8R8A8_SRGB";
+		case VK_FORMAT_A8B8G8R8_UNORM_PACK32:							return "VK_FORMAT_A8B8G8R8_UNORM_PACK32";
+		case VK_FORMAT_A8B8G8R8_SNORM_PACK32:							return "VK_FORMAT_A8B8G8R8_SNORM_PACK32";
+		case VK_FORMAT_A8B8G8R8_USCALED_PACK32:							return "VK_FORMAT_A8B8G8R8_USCALED_PACK32";
+		case VK_FORMAT_A8B8G8R8_SSCALED_PACK32:							return "VK_FORMAT_A8B8G8R8_SSCALED_PACK32";
+		case VK_FORMAT_A8B8G8R8_UINT_PACK32:							return "VK_FORMAT_A8B8G8R8_UINT_PACK32";
+		case VK_FORMAT_A8B8G8R8_SINT_PACK32:							return "VK_FORMAT_A8B8G8R8_SINT_PACK32";
+		case VK_FORMAT_A8B8G8R8_SRGB_PACK32:							return "VK_FORMAT_A8B8G8R8_SRGB_PACK32";
+		case VK_FORMAT_A2R10G10B10_UNORM_PACK32:						return "VK_FORMAT_A2R10G10B10_UNORM_PACK32";
+		case VK_FORMAT_A2R10G10B10_SNORM_PACK32:						return "VK_FORMAT_A2R10G10B10_SNORM_PACK32";
+		case VK_FORMAT_A2R10G10B10_USCALED_PACK32:						return "VK_FORMAT_A2R10G10B10_USCALED_PACK32";
+		case VK_FORMAT_A2R10G10B10_SSCALED_PACK32:						return "VK_FORMAT_A2R10G10B10_SSCALED_PACK32";
+		case VK_FORMAT_A2R10G10B10_UINT_PACK32:							return "VK_FORMAT_A2R10G10B10_UINT_PACK32";
+		case VK_FORMAT_A2R10G10B10_SINT_PACK32:							return "VK_FORMAT_A2R10G10B10_SINT_PACK32";
+		case VK_FORMAT_A2B10G10R10_UNORM_PACK32:						return "VK_FORMAT_A2B10G10R10_UNORM_PACK32";
+		case VK_FORMAT_A2B10G10R10_SNORM_PACK32:						return "VK_FORMAT_A2B10G10R10_SNORM_PACK32";
+		case VK_FORMAT_A2B10G10R10_USCALED_PACK32:						return "VK_FORMAT_A2B10G10R10_USCALED_PACK32";
+		case VK_FORMAT_A2B10G10R10_SSCALED_PACK32:						return "VK_FORMAT_A2B10G10R10_SSCALED_PACK32";
+		case VK_FORMAT_A2B10G10R10_UINT_PACK32:							return "VK_FORMAT_A2B10G10R10_UINT_PACK32";
+		case VK_FORMAT_A2B10G10R10_SINT_PACK32:							return "VK_FORMAT_A2B10G10R10_SINT_PACK32";
+		case VK_FORMAT_R16_UNORM:										return "VK_FORMAT_R16_UNORM";
+		case VK_FORMAT_R16_SNORM:										return "VK_FORMAT_R16_SNORM";
+		case VK_FORMAT_R16_USCALED:										return "VK_FORMAT_R16_USCALED";
+		case VK_FORMAT_R16_SSCALED:										return "VK_FORMAT_R16_SSCALED";
+		case VK_FORMAT_R16_UINT:										return "VK_FORMAT_R16_UINT";
+		case VK_FORMAT_R16_SINT:										return "VK_FORMAT_R16_SINT";
+		case VK_FORMAT_R16_SFLOAT:										return "VK_FORMAT_R16_SFLOAT";
+		case VK_FORMAT_R16G16_UNORM:									return "VK_FORMAT_R16G16_UNORM";
+		case VK_FORMAT_R16G16_SNORM:									return "VK_FORMAT_R16G16_SNORM";
+		case VK_FORMAT_R16G16_USCALED:									return "VK_FORMAT_R16G16_USCALED";
+		case VK_FORMAT_R16G16_SSCALED:									return "VK_FORMAT_R16G16_SSCALED";
+		case VK_FORMAT_R16G16_UINT:										return "VK_FORMAT_R16G16_UINT";
+		case VK_FORMAT_R16G16_SINT:										return "VK_FORMAT_R16G16_SINT";
+		case VK_FORMAT_R16G16_SFLOAT:									return "VK_FORMAT_R16G16_SFLOAT";
+		case VK_FORMAT_R16G16B16_UNORM:									return "VK_FORMAT_R16G16B16_UNORM";
+		case VK_FORMAT_R16G16B16_SNORM:									return "VK_FORMAT_R16G16B16_SNORM";
+		case VK_FORMAT_R16G16B16_USCALED:								return "VK_FORMAT_R16G16B16_USCALED";
+		case VK_FORMAT_R16G16B16_SSCALED:								return "VK_FORMAT_R16G16B16_SSCALED";
+		case VK_FORMAT_R16G16B16_UINT:									return "VK_FORMAT_R16G16B16_UINT";
+		case VK_FORMAT_R16G16B16_SINT:									return "VK_FORMAT_R16G16B16_SINT";
+		case VK_FORMAT_R16G16B16_SFLOAT:								return "VK_FORMAT_R16G16B16_SFLOAT";
+		case VK_FORMAT_R16G16B16A16_UNORM:								return "VK_FORMAT_R16G16B16A16_UNORM";
+		case VK_FORMAT_R16G16B16A16_SNORM:								return "VK_FORMAT_R16G16B16A16_SNORM";
+		case VK_FORMAT_R16G16B16A16_USCALED:							return "VK_FORMAT_R16G16B16A16_USCALED";
+		case VK_FORMAT_R16G16B16A16_SSCALED:							return "VK_FORMAT_R16G16B16A16_SSCALED";
+		case VK_FORMAT_R16G16B16A16_UINT:								return "VK_FORMAT_R16G16B16A16_UINT";
+		case VK_FORMAT_R16G16B16A16_SINT:								return "VK_FORMAT_R16G16B16A16_SINT";
+		case VK_FORMAT_R16G16B16A16_SFLOAT:								return "VK_FORMAT_R16G16B16A16_SFLOAT";
+		case VK_FORMAT_R32_UINT:										return "VK_FORMAT_R32_UINT";
+		case VK_FORMAT_R32_SINT:										return "VK_FORMAT_R32_SINT";
+		case VK_FORMAT_R32_SFLOAT:										return "VK_FORMAT_R32_SFLOAT";
+		case VK_FORMAT_R32G32_UINT:										return "VK_FORMAT_R32G32_UINT";
+		case VK_FORMAT_R32G32_SINT:										return "VK_FORMAT_R32G32_SINT";
+		case VK_FORMAT_R32G32_SFLOAT:									return "VK_FORMAT_R32G32_SFLOAT";
+		case VK_FORMAT_R32G32B32_UINT:									return "VK_FORMAT_R32G32B32_UINT";
+		case VK_FORMAT_R32G32B32_SINT:									return "VK_FORMAT_R32G32B32_SINT";
+		case VK_FORMAT_R32G32B32_SFLOAT:								return "VK_FORMAT_R32G32B32_SFLOAT";
+		case VK_FORMAT_R32G32B32A32_UINT:								return "VK_FORMAT_R32G32B32A32_UINT";
+		case VK_FORMAT_R32G32B32A32_SINT:								return "VK_FORMAT_R32G32B32A32_SINT";
+		case VK_FORMAT_R32G32B32A32_SFLOAT:								return "VK_FORMAT_R32G32B32A32_SFLOAT";
+		case VK_FORMAT_R64_UINT:										return "VK_FORMAT_R64_UINT";
+		case VK_FORMAT_R64_SINT:										return "VK_FORMAT_R64_SINT";
+		case VK_FORMAT_R64_SFLOAT:										return "VK_FORMAT_R64_SFLOAT";
+		case VK_FORMAT_R64G64_UINT:										return "VK_FORMAT_R64G64_UINT";
+		case VK_FORMAT_R64G64_SINT:										return "VK_FORMAT_R64G64_SINT";
+		case VK_FORMAT_R64G64_SFLOAT:									return "VK_FORMAT_R64G64_SFLOAT";
+		case VK_FORMAT_R64G64B64_UINT:									return "VK_FORMAT_R64G64B64_UINT";
+		case VK_FORMAT_R64G64B64_SINT:									return "VK_FORMAT_R64G64B64_SINT";
+		case VK_FORMAT_R64G64B64_SFLOAT:								return "VK_FORMAT_R64G64B64_SFLOAT";
+		case VK_FORMAT_R64G64B64A64_UINT:								return "VK_FORMAT_R64G64B64A64_UINT";
+		case VK_FORMAT_R64G64B64A64_SINT:								return "VK_FORMAT_R64G64B64A64_SINT";
+		case VK_FORMAT_R64G64B64A64_SFLOAT:								return "VK_FORMAT_R64G64B64A64_SFLOAT";
+		case VK_FORMAT_B10G11R11_UFLOAT_PACK32:							return "VK_FORMAT_B10G11R11_UFLOAT_PACK32";
+		case VK_FORMAT_E5B9G9R9_UFLOAT_PACK32:							return "VK_FORMAT_E5B9G9R9_UFLOAT_PACK32";
+		case VK_FORMAT_D16_UNORM:										return "VK_FORMAT_D16_UNORM";
+		case VK_FORMAT_X8_D24_UNORM_PACK32:								return "VK_FORMAT_X8_D24_UNORM_PACK32";
+		case VK_FORMAT_D32_SFLOAT:										return "VK_FORMAT_D32_SFLOAT";
+		case VK_FORMAT_S8_UINT:											return "VK_FORMAT_S8_UINT";
+		case VK_FORMAT_D16_UNORM_S8_UINT:								return "VK_FORMAT_D16_UNORM_S8_UINT";
+		case VK_FORMAT_D24_UNORM_S8_UINT:								return "VK_FORMAT_D24_UNORM_S8_UINT";
+		case VK_FORMAT_D32_SFLOAT_S8_UINT:								return "VK_FORMAT_D32_SFLOAT_S8_UINT";
+		case VK_FORMAT_BC1_RGB_UNORM_BLOCK:								return "VK_FORMAT_BC1_RGB_UNORM_BLOCK";
+		case VK_FORMAT_BC1_RGB_SRGB_BLOCK:								return "VK_FORMAT_BC1_RGB_SRGB_BLOCK";
+		case VK_FORMAT_BC1_RGBA_UNORM_BLOCK:							return "VK_FORMAT_BC1_RGBA_UNORM_BLOCK";
+		case VK_FORMAT_BC1_RGBA_SRGB_BLOCK:								return "VK_FORMAT_BC1_RGBA_SRGB_BLOCK";
+		case VK_FORMAT_BC2_UNORM_BLOCK:									return "VK_FORMAT_BC2_UNORM_BLOCK";
+		case VK_FORMAT_BC2_SRGB_BLOCK:									return "VK_FORMAT_BC2_SRGB_BLOCK";
+		case VK_FORMAT_BC3_UNORM_BLOCK:									return "VK_FORMAT_BC3_UNORM_BLOCK";
+		case VK_FORMAT_BC3_SRGB_BLOCK:									return "VK_FORMAT_BC3_SRGB_BLOCK";
+		case VK_FORMAT_BC4_UNORM_BLOCK:									return "VK_FORMAT_BC4_UNORM_BLOCK";
+		case VK_FORMAT_BC4_SNORM_BLOCK:									return "VK_FORMAT_BC4_SNORM_BLOCK";
+		case VK_FORMAT_BC5_UNORM_BLOCK:									return "VK_FORMAT_BC5_UNORM_BLOCK";
+		case VK_FORMAT_BC5_SNORM_BLOCK:									return "VK_FORMAT_BC5_SNORM_BLOCK";
+		case VK_FORMAT_BC6H_UFLOAT_BLOCK:								return "VK_FORMAT_BC6H_UFLOAT_BLOCK";
+		case VK_FORMAT_BC6H_SFLOAT_BLOCK:								return "VK_FORMAT_BC6H_SFLOAT_BLOCK";
+		case VK_FORMAT_BC7_UNORM_BLOCK:									return "VK_FORMAT_BC7_UNORM_BLOCK";
+		case VK_FORMAT_BC7_SRGB_BLOCK:									return "VK_FORMAT_BC7_SRGB_BLOCK";
+		case VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK:							return "VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK";
+		case VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK:							return "VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK";
+		case VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK:						return "VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK";
+		case VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK:						return "VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK";
+		case VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK:						return "VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK";
+		case VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK:						return "VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK";
+		case VK_FORMAT_EAC_R11_UNORM_BLOCK:								return "VK_FORMAT_EAC_R11_UNORM_BLOCK";
+		case VK_FORMAT_EAC_R11_SNORM_BLOCK:								return "VK_FORMAT_EAC_R11_SNORM_BLOCK";
+		case VK_FORMAT_EAC_R11G11_UNORM_BLOCK:							return "VK_FORMAT_EAC_R11G11_UNORM_BLOCK";
+		case VK_FORMAT_EAC_R11G11_SNORM_BLOCK:							return "VK_FORMAT_EAC_R11G11_SNORM_BLOCK";
+		case VK_FORMAT_ASTC_4x4_UNORM_BLOCK:							return "VK_FORMAT_ASTC_4x4_UNORM_BLOCK";
+		case VK_FORMAT_ASTC_4x4_SRGB_BLOCK:								return "VK_FORMAT_ASTC_4x4_SRGB_BLOCK";
+		case VK_FORMAT_ASTC_5x4_UNORM_BLOCK:							return "VK_FORMAT_ASTC_5x4_UNORM_BLOCK";
+		case VK_FORMAT_ASTC_5x4_SRGB_BLOCK:								return "VK_FORMAT_ASTC_5x4_SRGB_BLOCK";
+		case VK_FORMAT_ASTC_5x5_UNORM_BLOCK:							return "VK_FORMAT_ASTC_5x5_UNORM_BLOCK";
+		case VK_FORMAT_ASTC_5x5_SRGB_BLOCK:								return "VK_FORMAT_ASTC_5x5_SRGB_BLOCK";
+		case VK_FORMAT_ASTC_6x5_UNORM_BLOCK:							return "VK_FORMAT_ASTC_6x5_UNORM_BLOCK";
+		case VK_FORMAT_ASTC_6x5_SRGB_BLOCK:								return "VK_FORMAT_ASTC_6x5_SRGB_BLOCK";
+		case VK_FORMAT_ASTC_6x6_UNORM_BLOCK:							return "VK_FORMAT_ASTC_6x6_UNORM_BLOCK";
+		case VK_FORMAT_ASTC_6x6_SRGB_BLOCK:								return "VK_FORMAT_ASTC_6x6_SRGB_BLOCK";
+		case VK_FORMAT_ASTC_8x5_UNORM_BLOCK:							return "VK_FORMAT_ASTC_8x5_UNORM_BLOCK";
+		case VK_FORMAT_ASTC_8x5_SRGB_BLOCK:								return "VK_FORMAT_ASTC_8x5_SRGB_BLOCK";
+		case VK_FORMAT_ASTC_8x6_UNORM_BLOCK:							return "VK_FORMAT_ASTC_8x6_UNORM_BLOCK";
+		case VK_FORMAT_ASTC_8x6_SRGB_BLOCK:								return "VK_FORMAT_ASTC_8x6_SRGB_BLOCK";
+		case VK_FORMAT_ASTC_8x8_UNORM_BLOCK:							return "VK_FORMAT_ASTC_8x8_UNORM_BLOCK";
+		case VK_FORMAT_ASTC_8x8_SRGB_BLOCK:								return "VK_FORMAT_ASTC_8x8_SRGB_BLOCK";
+		case VK_FORMAT_ASTC_10x5_UNORM_BLOCK:							return "VK_FORMAT_ASTC_10x5_UNORM_BLOCK";
+		case VK_FORMAT_ASTC_10x5_SRGB_BLOCK:							return "VK_FORMAT_ASTC_10x5_SRGB_BLOCK";
+		case VK_FORMAT_ASTC_10x6_UNORM_BLOCK:							return "VK_FORMAT_ASTC_10x6_UNORM_BLOCK";
+		case VK_FORMAT_ASTC_10x6_SRGB_BLOCK:							return "VK_FORMAT_ASTC_10x6_SRGB_BLOCK";
+		case VK_FORMAT_ASTC_10x8_UNORM_BLOCK:							return "VK_FORMAT_ASTC_10x8_UNORM_BLOCK";
+		case VK_FORMAT_ASTC_10x8_SRGB_BLOCK:							return "VK_FORMAT_ASTC_10x8_SRGB_BLOCK";
+		case VK_FORMAT_ASTC_10x10_UNORM_BLOCK:							return "VK_FORMAT_ASTC_10x10_UNORM_BLOCK";
+		case VK_FORMAT_ASTC_10x10_SRGB_BLOCK:							return "VK_FORMAT_ASTC_10x10_SRGB_BLOCK";
+		case VK_FORMAT_ASTC_12x10_UNORM_BLOCK:							return "VK_FORMAT_ASTC_12x10_UNORM_BLOCK";
+		case VK_FORMAT_ASTC_12x10_SRGB_BLOCK:							return "VK_FORMAT_ASTC_12x10_SRGB_BLOCK";
+		case VK_FORMAT_ASTC_12x12_UNORM_BLOCK:							return "VK_FORMAT_ASTC_12x12_UNORM_BLOCK";
+		case VK_FORMAT_ASTC_12x12_SRGB_BLOCK:							return "VK_FORMAT_ASTC_12x12_SRGB_BLOCK";
+		case VK_FORMAT_G8B8G8R8_422_UNORM:								return "VK_FORMAT_G8B8G8R8_422_UNORM";
+		case VK_FORMAT_B8G8R8G8_422_UNORM:								return "VK_FORMAT_B8G8R8G8_422_UNORM";
+		case VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM:						return "VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM";
+		case VK_FORMAT_G8_B8R8_2PLANE_420_UNORM:						return "VK_FORMAT_G8_B8R8_2PLANE_420_UNORM";
+		case VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM:						return "VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM";
+		case VK_FORMAT_G8_B8R8_2PLANE_422_UNORM:						return "VK_FORMAT_G8_B8R8_2PLANE_422_UNORM";
+		case VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM:						return "VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM";
+		case VK_FORMAT_R10X6_UNORM_PACK16:								return "VK_FORMAT_R10X6_UNORM_PACK16";
+		case VK_FORMAT_R10X6G10X6_UNORM_2PACK16:						return "VK_FORMAT_R10X6G10X6_UNORM_2PACK16";
+		case VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16:				return "VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16";
+		case VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16:			return "VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16";
+		case VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16:			return "VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16";
+		case VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16:		return "VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16";
+		case VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16:		return "VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16";
+		case VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16:		return "VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16";
+		case VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16:		return "VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16";
+		case VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16:		return "VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16";
+		case VK_FORMAT_R12X4_UNORM_PACK16:								return "VK_FORMAT_R12X4_UNORM_PACK16";
+		case VK_FORMAT_R12X4G12X4_UNORM_2PACK16:						return "VK_FORMAT_R12X4G12X4_UNORM_2PACK16";
+		case VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16:				return "VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16";
+		case VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16:			return "VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16";
+		case VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16:			return "VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16";
+		case VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16:		return "VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16";
+		case VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16:		return "VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16";
+		case VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16:		return "VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16";
+		case VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16:		return "VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16";
+		case VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16:		return "VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16";
+		case VK_FORMAT_G16B16G16R16_422_UNORM:							return "VK_FORMAT_G16B16G16R16_422_UNORM";
+		case VK_FORMAT_B16G16R16G16_422_UNORM:							return "VK_FORMAT_B16G16R16G16_422_UNORM";
+		case VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM:					return "VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM";
+		case VK_FORMAT_G16_B16R16_2PLANE_420_UNORM:						return "VK_FORMAT_G16_B16R16_2PLANE_420_UNORM";
+		case VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM:					return "VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM";
+		case VK_FORMAT_G16_B16R16_2PLANE_422_UNORM:						return "VK_FORMAT_G16_B16R16_2PLANE_422_UNORM";
+		case VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM:					return "VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM";
+		case VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG:						return "VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG";
+		case VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG:						return "VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG";
+		case VK_FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG:						return "VK_FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG";
+		case VK_FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG:						return "VK_FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG";
+		case VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG:						return "VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG";
+		case VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG:						return "VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG";
+		case VK_FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG:						return "VK_FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG";
+		case VK_FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG:						return "VK_FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG";
+		case VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK_EXT:						return "VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK_EXT";
+		case VK_FORMAT_ASTC_5x4_SFLOAT_BLOCK_EXT:						return "VK_FORMAT_ASTC_5x4_SFLOAT_BLOCK_EXT";
+		case VK_FORMAT_ASTC_5x5_SFLOAT_BLOCK_EXT:						return "VK_FORMAT_ASTC_5x5_SFLOAT_BLOCK_EXT";
+		case VK_FORMAT_ASTC_6x5_SFLOAT_BLOCK_EXT:						return "VK_FORMAT_ASTC_6x5_SFLOAT_BLOCK_EXT";
+		case VK_FORMAT_ASTC_6x6_SFLOAT_BLOCK_EXT:						return "VK_FORMAT_ASTC_6x6_SFLOAT_BLOCK_EXT";
+		case VK_FORMAT_ASTC_8x5_SFLOAT_BLOCK_EXT:						return "VK_FORMAT_ASTC_8x5_SFLOAT_BLOCK_EXT";
+		case VK_FORMAT_ASTC_8x6_SFLOAT_BLOCK_EXT:						return "VK_FORMAT_ASTC_8x6_SFLOAT_BLOCK_EXT";
+		case VK_FORMAT_ASTC_8x8_SFLOAT_BLOCK_EXT:						return "VK_FORMAT_ASTC_8x8_SFLOAT_BLOCK_EXT";
+		case VK_FORMAT_ASTC_10x5_SFLOAT_BLOCK_EXT:						return "VK_FORMAT_ASTC_10x5_SFLOAT_BLOCK_EXT";
+		case VK_FORMAT_ASTC_10x6_SFLOAT_BLOCK_EXT:						return "VK_FORMAT_ASTC_10x6_SFLOAT_BLOCK_EXT";
+		case VK_FORMAT_ASTC_10x8_SFLOAT_BLOCK_EXT:						return "VK_FORMAT_ASTC_10x8_SFLOAT_BLOCK_EXT";
+		case VK_FORMAT_ASTC_10x10_SFLOAT_BLOCK_EXT:						return "VK_FORMAT_ASTC_10x10_SFLOAT_BLOCK_EXT";
+		case VK_FORMAT_ASTC_12x10_SFLOAT_BLOCK_EXT:						return "VK_FORMAT_ASTC_12x10_SFLOAT_BLOCK_EXT";
+		case VK_FORMAT_ASTC_12x12_SFLOAT_BLOCK_EXT:						return "VK_FORMAT_ASTC_12x12_SFLOAT_BLOCK_EXT";
+		case VK_FORMAT_G8_B8R8_2PLANE_444_UNORM_EXT:					return "VK_FORMAT_G8_B8R8_2PLANE_444_UNORM_EXT";
+		case VK_FORMAT_G10X6_B10X6R10X6_2PLANE_444_UNORM_3PACK16_EXT:	return "VK_FORMAT_G10X6_B10X6R10X6_2PLANE_444_UNORM_3PACK16_EXT";
+		case VK_FORMAT_G12X4_B12X4R12X4_2PLANE_444_UNORM_3PACK16_EXT:	return "VK_FORMAT_G12X4_B12X4R12X4_2PLANE_444_UNORM_3PACK16_EXT";
+		case VK_FORMAT_G16_B16R16_2PLANE_444_UNORM_EXT:					return "VK_FORMAT_G16_B16R16_2PLANE_444_UNORM_EXT";
+		case VK_FORMAT_A4R4G4B4_UNORM_PACK16_EXT:						return "VK_FORMAT_A4R4G4B4_UNORM_PACK16_EXT";
+		case VK_FORMAT_A4B4G4R4_UNORM_PACK16_EXT:						return "VK_FORMAT_A4B4G4R4_UNORM_PACK16_EXT";
+		case VK_FORMAT_MAX_ENUM:										return "VK_FORMAT_MAX_ENUM";
+		default:														return DE_NULL;
 	}
 }
 
@@ -1037,6 +1111,8 @@
 		case VK_QUERY_TYPE_OCCLUSION:										return "VK_QUERY_TYPE_OCCLUSION";
 		case VK_QUERY_TYPE_PIPELINE_STATISTICS:								return "VK_QUERY_TYPE_PIPELINE_STATISTICS";
 		case VK_QUERY_TYPE_TIMESTAMP:										return "VK_QUERY_TYPE_TIMESTAMP";
+		case VK_QUERY_TYPE_RESULT_STATUS_ONLY_KHR:							return "VK_QUERY_TYPE_RESULT_STATUS_ONLY_KHR";
+		case VK_QUERY_TYPE_VIDEO_ENCODE_BITSTREAM_BUFFER_RANGE_KHR:			return "VK_QUERY_TYPE_VIDEO_ENCODE_BITSTREAM_BUFFER_RANGE_KHR";
 		case VK_QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT:					return "VK_QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT";
 		case VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR:							return "VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR";
 		case VK_QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR:		return "VK_QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR";
@@ -1230,6 +1306,13 @@
 		case VK_DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE_EXT:			return "VK_DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE_EXT";
 		case VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE_EXT:				return "VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE_EXT";
 		case VK_DYNAMIC_STATE_STENCIL_OP_EXT:						return "VK_DYNAMIC_STATE_STENCIL_OP_EXT";
+		case VK_DYNAMIC_STATE_VERTEX_INPUT_EXT:						return "VK_DYNAMIC_STATE_VERTEX_INPUT_EXT";
+		case VK_DYNAMIC_STATE_PATCH_CONTROL_POINTS_EXT:				return "VK_DYNAMIC_STATE_PATCH_CONTROL_POINTS_EXT";
+		case VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE_EXT:		return "VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE_EXT";
+		case VK_DYNAMIC_STATE_DEPTH_BIAS_ENABLE_EXT:				return "VK_DYNAMIC_STATE_DEPTH_BIAS_ENABLE_EXT";
+		case VK_DYNAMIC_STATE_LOGIC_OP_EXT:							return "VK_DYNAMIC_STATE_LOGIC_OP_EXT";
+		case VK_DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE_EXT:			return "VK_DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE_EXT";
+		case VK_DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXT:				return "VK_DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXT";
 		case VK_DYNAMIC_STATE_MAX_ENUM:								return "VK_DYNAMIC_STATE_MAX_ENUM";
 		default:													return DE_NULL;
 	}
@@ -1568,6 +1651,8 @@
 		case VK_DRIVER_ID_BROADCOM_PROPRIETARY:			return "VK_DRIVER_ID_BROADCOM_PROPRIETARY";
 		case VK_DRIVER_ID_MESA_LLVMPIPE:				return "VK_DRIVER_ID_MESA_LLVMPIPE";
 		case VK_DRIVER_ID_MOLTENVK:						return "VK_DRIVER_ID_MOLTENVK";
+		case VK_DRIVER_ID_COREAVI_PROPRIETARY:			return "VK_DRIVER_ID_COREAVI_PROPRIETARY";
+		case VK_DRIVER_ID_SAMSUNG_PROPRIETARY:			return "VK_DRIVER_ID_SAMSUNG_PROPRIETARY";
 		case VK_DRIVER_ID_MAX_ENUM:						return "VK_DRIVER_ID_MAX_ENUM";
 		default:										return DE_NULL;
 	}
@@ -2294,6 +2379,263 @@
 	}
 }
 
+const char* getQueryResultStatusKHRName (VkQueryResultStatusKHR value)
+{
+	switch (value)
+	{
+		case VK_QUERY_RESULT_STATUS_ERROR_KHR:		return "VK_QUERY_RESULT_STATUS_ERROR_KHR";
+		case VK_QUERY_RESULT_STATUS_NOT_READY_KHR:	return "VK_QUERY_RESULT_STATUS_NOT_READY_KHR";
+		case VK_QUERY_RESULT_STATUS_COMPLETE_KHR:	return "VK_QUERY_RESULT_STATUS_COMPLETE_KHR";
+		case VK_QUERY_RESULT_STATUS_MAX_ENUM_KHR:	return "VK_QUERY_RESULT_STATUS_MAX_ENUM_KHR";
+		default:									return DE_NULL;
+	}
+}
+
+const char* getdVideoH264ChromaFormatIdcName (StdVideoH264ChromaFormatIdc value)
+{
+	switch (value)
+	{
+		case std_video_h264_chroma_format_idc_monochrome:	return "std_video_h264_chroma_format_idc_monochrome";
+		case std_video_h264_chroma_format_idc_420:			return "std_video_h264_chroma_format_idc_420";
+		case std_video_h264_chroma_format_idc_422:			return "std_video_h264_chroma_format_idc_422";
+		case std_video_h264_chroma_format_idc_444:			return "std_video_h264_chroma_format_idc_444";
+		default:											return DE_NULL;
+	}
+}
+
+const char* getdVideoH264ProfileIdcName (StdVideoH264ProfileIdc value)
+{
+	switch (value)
+	{
+		case std_video_h264_profile_idc_baseline:				return "std_video_h264_profile_idc_baseline";
+		case std_video_h264_profile_idc_main:					return "std_video_h264_profile_idc_main";
+		case std_video_h264_profile_idc_high:					return "std_video_h264_profile_idc_high";
+		case std_video_h264_profile_idc_high_444_predictive:	return "std_video_h264_profile_idc_high_444_predictive";
+		case std_video_h264_profile_idc_invalid:				return "std_video_h264_profile_idc_invalid";
+		default:												return DE_NULL;
+	}
+}
+
+const char* getdVideoH264LevelName (StdVideoH264Level value)
+{
+	switch (value)
+	{
+		case std_video_h264_level_1_0:		return "std_video_h264_level_1_0";
+		case std_video_h264_level_1_1:		return "std_video_h264_level_1_1";
+		case std_video_h264_level_1_2:		return "std_video_h264_level_1_2";
+		case std_video_h264_level_1_3:		return "std_video_h264_level_1_3";
+		case std_video_h264_level_2_0:		return "std_video_h264_level_2_0";
+		case std_video_h264_level_2_1:		return "std_video_h264_level_2_1";
+		case std_video_h264_level_2_2:		return "std_video_h264_level_2_2";
+		case std_video_h264_level_3_0:		return "std_video_h264_level_3_0";
+		case std_video_h264_level_3_1:		return "std_video_h264_level_3_1";
+		case std_video_h264_level_3_2:		return "std_video_h264_level_3_2";
+		case std_video_h264_level_4_0:		return "std_video_h264_level_4_0";
+		case std_video_h264_level_4_1:		return "std_video_h264_level_4_1";
+		case std_video_h264_level_4_2:		return "std_video_h264_level_4_2";
+		case std_video_h264_level_5_0:		return "std_video_h264_level_5_0";
+		case std_video_h264_level_5_1:		return "std_video_h264_level_5_1";
+		case std_video_h264_level_5_2:		return "std_video_h264_level_5_2";
+		case std_video_h264_level_6_0:		return "std_video_h264_level_6_0";
+		case std_video_h264_level_6_1:		return "std_video_h264_level_6_1";
+		case std_video_h264_level_6_2:		return "std_video_h264_level_6_2";
+		case std_video_h264_level_invalid:	return "std_video_h264_level_invalid";
+		default:							return DE_NULL;
+	}
+}
+
+const char* getdVideoH264PocTypeName (StdVideoH264PocType value)
+{
+	switch (value)
+	{
+		case std_video_h264_poc_type_0:			return "std_video_h264_poc_type_0";
+		case std_video_h264_poc_type_1:			return "std_video_h264_poc_type_1";
+		case std_video_h264_poc_type_2:			return "std_video_h264_poc_type_2";
+		case std_video_h264_poc_type_invalid:	return "std_video_h264_poc_type_invalid";
+		default:								return DE_NULL;
+	}
+}
+
+const char* getdVideoH264AspectRatioIdcName (StdVideoH264AspectRatioIdc value)
+{
+	switch (value)
+	{
+		case std_video_h264_aspect_ratio_idc_unspecified:	return "std_video_h264_aspect_ratio_idc_unspecified";
+		case std_video_h264_aspect_ratio_idc_square:		return "std_video_h264_aspect_ratio_idc_square";
+		case std_video_h264_aspect_ratio_idc_12_11:			return "std_video_h264_aspect_ratio_idc_12_11";
+		case std_video_h264_aspect_ratio_idc_10_11:			return "std_video_h264_aspect_ratio_idc_10_11";
+		case std_video_h264_aspect_ratio_idc_16_11:			return "std_video_h264_aspect_ratio_idc_16_11";
+		case std_video_h264_aspect_ratio_idc_40_33:			return "std_video_h264_aspect_ratio_idc_40_33";
+		case std_video_h264_aspect_ratio_idc_24_11:			return "std_video_h264_aspect_ratio_idc_24_11";
+		case std_video_h264_aspect_ratio_idc_20_11:			return "std_video_h264_aspect_ratio_idc_20_11";
+		case std_video_h264_aspect_ratio_idc_32_11:			return "std_video_h264_aspect_ratio_idc_32_11";
+		case std_video_h264_aspect_ratio_idc_80_33:			return "std_video_h264_aspect_ratio_idc_80_33";
+		case std_video_h264_aspect_ratio_idc_18_11:			return "std_video_h264_aspect_ratio_idc_18_11";
+		case std_video_h264_aspect_ratio_idc_15_11:			return "std_video_h264_aspect_ratio_idc_15_11";
+		case std_video_h264_aspect_ratio_idc_64_33:			return "std_video_h264_aspect_ratio_idc_64_33";
+		case std_video_h264_aspect_ratio_idc_160_99:		return "std_video_h264_aspect_ratio_idc_160_99";
+		case std_video_h264_aspect_ratio_idc_4_3:			return "std_video_h264_aspect_ratio_idc_4_3";
+		case std_video_h264_aspect_ratio_idc_3_2:			return "std_video_h264_aspect_ratio_idc_3_2";
+		case std_video_h264_aspect_ratio_idc_2_1:			return "std_video_h264_aspect_ratio_idc_2_1";
+		case std_video_h264_aspect_ratio_idc_extended_sar:	return "std_video_h264_aspect_ratio_idc_extended_sar";
+		case std_video_h264_aspect_ratio_idc_invalid:		return "std_video_h264_aspect_ratio_idc_invalid";
+		default:											return DE_NULL;
+	}
+}
+
+const char* getdVideoH264WeightedBiPredIdcName (StdVideoH264WeightedBiPredIdc value)
+{
+	switch (value)
+	{
+		case std_video_h264_default_weighted_b_slices_prediction_idc:	return "std_video_h264_default_weighted_b_slices_prediction_idc";
+		case std_video_h264_explicit_weighted_b_slices_prediction_idc:	return "std_video_h264_explicit_weighted_b_slices_prediction_idc";
+		case std_video_h264_implicit_weighted_b_slices_prediction_idc:	return "std_video_h264_implicit_weighted_b_slices_prediction_idc";
+		case std_video_h264_invalid_weighted_b_slices_prediction_idc:	return "std_video_h264_invalid_weighted_b_slices_prediction_idc";
+		default:														return DE_NULL;
+	}
+}
+
+const char* getdVideoH264ModificationOfPicNumsIdcName (StdVideoH264ModificationOfPicNumsIdc value)
+{
+	switch (value)
+	{
+		case std_video_h264_modification_of_pic_nums_idc_short_term_subtract:	return "std_video_h264_modification_of_pic_nums_idc_short_term_subtract";
+		case std_video_h264_modification_of_pic_nums_idc_short_term_add:		return "std_video_h264_modification_of_pic_nums_idc_short_term_add";
+		case std_video_h264_modification_of_pic_nums_idc_long_term:				return "std_video_h264_modification_of_pic_nums_idc_long_term";
+		case std_video_h264_modification_of_pic_nums_idc_end:					return "std_video_h264_modification_of_pic_nums_idc_end";
+		case std_video_h264_modification_of_pic_nums_idc_invalid:				return "std_video_h264_modification_of_pic_nums_idc_invalid";
+		default:																return DE_NULL;
+	}
+}
+
+const char* getdVideoH264MemMgmtControlOpName (StdVideoH264MemMgmtControlOp value)
+{
+	switch (value)
+	{
+		case std_video_h264_mem_mgmt_control_op_end:						return "std_video_h264_mem_mgmt_control_op_end";
+		case std_video_h264_mem_mgmt_control_op_unmark_short_term:			return "std_video_h264_mem_mgmt_control_op_unmark_short_term";
+		case std_video_h264_mem_mgmt_control_op_unmark_long_term:			return "std_video_h264_mem_mgmt_control_op_unmark_long_term";
+		case std_video_h264_mem_mgmt_control_op_mark_long_term:				return "std_video_h264_mem_mgmt_control_op_mark_long_term";
+		case std_video_h264_mem_mgmt_control_op_set_max_long_term_index:	return "std_video_h264_mem_mgmt_control_op_set_max_long_term_index";
+		case std_video_h264_mem_mgmt_control_op_unmark_all:					return "std_video_h264_mem_mgmt_control_op_unmark_all";
+		case std_video_h264_mem_mgmt_control_op_mark_current_as_long_term:	return "std_video_h264_mem_mgmt_control_op_mark_current_as_long_term";
+		case std_video_h264_mem_mgmt_control_op_invalid:					return "std_video_h264_mem_mgmt_control_op_invalid";
+		default:															return DE_NULL;
+	}
+}
+
+const char* getdVideoH264CabacInitIdcName (StdVideoH264CabacInitIdc value)
+{
+	switch (value)
+	{
+		case std_video_h264_cabac_init_idc_0:		return "std_video_h264_cabac_init_idc_0";
+		case std_video_h264_cabac_init_idc_1:		return "std_video_h264_cabac_init_idc_1";
+		case std_video_h264_cabac_init_idc_2:		return "std_video_h264_cabac_init_idc_2";
+		case std_video_h264_cabac_init_idc_invalid:	return "std_video_h264_cabac_init_idc_invalid";
+		default:									return DE_NULL;
+	}
+}
+
+const char* getdVideoH264DisableDeblockingFilterIdcName (StdVideoH264DisableDeblockingFilterIdc value)
+{
+	switch (value)
+	{
+		case std_video_h264_disable_deblocking_filter_idc_disabled:	return "std_video_h264_disable_deblocking_filter_idc_disabled";
+		case std_video_h264_disable_deblocking_filter_idc_enabled:	return "std_video_h264_disable_deblocking_filter_idc_enabled";
+		case std_video_h264_disable_deblocking_filter_idc_partial:	return "std_video_h264_disable_deblocking_filter_idc_partial";
+		case std_video_h264_disable_deblocking_filter_idc_invalid:	return "std_video_h264_disable_deblocking_filter_idc_invalid";
+		default:													return DE_NULL;
+	}
+}
+
+const char* getdVideoH264PictureTypeName (StdVideoH264PictureType value)
+{
+	switch (value)
+	{
+		case std_video_h264_picture_type_i:			return "std_video_h264_picture_type_i";
+		case std_video_h264_picture_type_p:			return "std_video_h264_picture_type_p";
+		case std_video_h264_picture_type_b:			return "std_video_h264_picture_type_b";
+		case std_video_h264_picture_type_invalid:	return "std_video_h264_picture_type_invalid";
+		default:									return DE_NULL;
+	}
+}
+
+const char* getdVideoH264SliceTypeName (StdVideoH264SliceType value)
+{
+	switch (value)
+	{
+		case std_video_h264_slice_type_i:		return "std_video_h264_slice_type_i";
+		case std_video_h264_slice_type_p:		return "std_video_h264_slice_type_p";
+		case std_video_h264_slice_type_b:		return "std_video_h264_slice_type_b";
+		case std_video_h264_slice_type_invalid:	return "std_video_h264_slice_type_invalid";
+		default:								return DE_NULL;
+	}
+}
+
+const char* getdVideoH264NonVclNaluTypeName (StdVideoH264NonVclNaluType value)
+{
+	switch (value)
+	{
+		case std_video_h264_non_vcl_nalu_type_sps:				return "std_video_h264_non_vcl_nalu_type_sps";
+		case std_video_h264_non_vcl_nalu_type_pps:				return "std_video_h264_non_vcl_nalu_type_pps";
+		case std_video_h264_non_vcl_nalu_type_aud:				return "std_video_h264_non_vcl_nalu_type_aud";
+		case std_video_h264_non_vcl_nalu_type_prefix:			return "std_video_h264_non_vcl_nalu_type_prefix";
+		case std_video_h264_non_vcl_nalu_type_end_of_sequence:	return "std_video_h264_non_vcl_nalu_type_end_of_sequence";
+		case std_video_h264_non_vcl_nalu_type_end_of_stream:	return "std_video_h264_non_vcl_nalu_type_end_of_stream";
+		case std_video_h264_non_vcl_nalu_type_precoded:			return "std_video_h264_non_vcl_nalu_type_precoded";
+		case std_video_h264_non_vcl_nalu_type_invalid:			return "std_video_h264_non_vcl_nalu_type_invalid";
+		default:												return DE_NULL;
+	}
+}
+
+const char* getdVideoH265ChromaFormatIdcName (StdVideoH265ChromaFormatIdc value)
+{
+	switch (value)
+	{
+		case std_video_h265_chroma_format_idc_monochrome:	return "std_video_h265_chroma_format_idc_monochrome";
+		case std_video_h265_chroma_format_idc_420:			return "std_video_h265_chroma_format_idc_420";
+		case std_video_h265_chroma_format_idc_422:			return "std_video_h265_chroma_format_idc_422";
+		case std_video_h265_chroma_format_idc_444:			return "std_video_h265_chroma_format_idc_444";
+		default:											return DE_NULL;
+	}
+}
+
+const char* getdVideoH265ProfileIdcName (StdVideoH265ProfileIdc value)
+{
+	switch (value)
+	{
+		case std_video_h265_profile_idc_main:						return "std_video_h265_profile_idc_main";
+		case std_video_h265_profile_idc_main_10:					return "std_video_h265_profile_idc_main_10";
+		case std_video_h265_profile_idc_main_still_picture:			return "std_video_h265_profile_idc_main_still_picture";
+		case std_video_h265_profile_idc_format_range_extensions:	return "std_video_h265_profile_idc_format_range_extensions";
+		case std_video_h265_profile_idc_scc_extensions:				return "std_video_h265_profile_idc_scc_extensions";
+		case std_video_h265_profile_idc_invalid:					return "std_video_h265_profile_idc_invalid";
+		default:													return DE_NULL;
+	}
+}
+
+const char* getdVideoH265LevelName (StdVideoH265Level value)
+{
+	switch (value)
+	{
+		case std_video_h265_level_1_0:		return "std_video_h265_level_1_0";
+		case std_video_h265_level_2_0:		return "std_video_h265_level_2_0";
+		case std_video_h265_level_2_1:		return "std_video_h265_level_2_1";
+		case std_video_h265_level_3_0:		return "std_video_h265_level_3_0";
+		case std_video_h265_level_3_1:		return "std_video_h265_level_3_1";
+		case std_video_h265_level_4_0:		return "std_video_h265_level_4_0";
+		case std_video_h265_level_4_1:		return "std_video_h265_level_4_1";
+		case std_video_h265_level_5_0:		return "std_video_h265_level_5_0";
+		case std_video_h265_level_5_1:		return "std_video_h265_level_5_1";
+		case std_video_h265_level_5_2:		return "std_video_h265_level_5_2";
+		case std_video_h265_level_6_0:		return "std_video_h265_level_6_0";
+		case std_video_h265_level_6_1:		return "std_video_h265_level_6_1";
+		case std_video_h265_level_6_2:		return "std_video_h265_level_6_2";
+		case std_video_h265_level_invalid:	return "std_video_h265_level_invalid";
+		default:							return DE_NULL;
+	}
+}
+
 const char* getFullScreenExclusiveEXTName (VkFullScreenExclusiveEXT value)
 {
 	switch (value)
@@ -2399,6 +2741,10 @@
 		tcu::Format::BitDesc(VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT,														"VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT"),
 		tcu::Format::BitDesc(VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT,													"VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT"),
 		tcu::Format::BitDesc(VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG,												"VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG"),
+		tcu::Format::BitDesc(VK_FORMAT_FEATURE_VIDEO_DECODE_OUTPUT_BIT_KHR,														"VK_FORMAT_FEATURE_VIDEO_DECODE_OUTPUT_BIT_KHR"),
+		tcu::Format::BitDesc(VK_FORMAT_FEATURE_VIDEO_DECODE_DPB_BIT_KHR,														"VK_FORMAT_FEATURE_VIDEO_DECODE_DPB_BIT_KHR"),
+		tcu::Format::BitDesc(VK_FORMAT_FEATURE_VIDEO_ENCODE_INPUT_BIT_KHR,														"VK_FORMAT_FEATURE_VIDEO_ENCODE_INPUT_BIT_KHR"),
+		tcu::Format::BitDesc(VK_FORMAT_FEATURE_VIDEO_ENCODE_DPB_BIT_KHR,														"VK_FORMAT_FEATURE_VIDEO_ENCODE_DPB_BIT_KHR"),
 		tcu::Format::BitDesc(VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR,									"VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR"),
 		tcu::Format::BitDesc(VK_FORMAT_FEATURE_FRAGMENT_DENSITY_MAP_BIT_EXT,													"VK_FORMAT_FEATURE_FRAGMENT_DENSITY_MAP_BIT_EXT"),
 		tcu::Format::BitDesc(VK_FORMAT_FEATURE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR,										"VK_FORMAT_FEATURE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR"),
@@ -2476,6 +2822,12 @@
 		tcu::Format::BitDesc(VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT,				"VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT"),
 		tcu::Format::BitDesc(VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT,					"VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT"),
 		tcu::Format::BitDesc(VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT,						"VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT"),
+		tcu::Format::BitDesc(VK_IMAGE_USAGE_VIDEO_DECODE_DST_BIT_KHR,					"VK_IMAGE_USAGE_VIDEO_DECODE_DST_BIT_KHR"),
+		tcu::Format::BitDesc(VK_IMAGE_USAGE_VIDEO_DECODE_SRC_BIT_KHR,					"VK_IMAGE_USAGE_VIDEO_DECODE_SRC_BIT_KHR"),
+		tcu::Format::BitDesc(VK_IMAGE_USAGE_VIDEO_DECODE_DPB_BIT_KHR,					"VK_IMAGE_USAGE_VIDEO_DECODE_DPB_BIT_KHR"),
+		tcu::Format::BitDesc(VK_IMAGE_USAGE_VIDEO_ENCODE_DST_BIT_KHR,					"VK_IMAGE_USAGE_VIDEO_ENCODE_DST_BIT_KHR"),
+		tcu::Format::BitDesc(VK_IMAGE_USAGE_VIDEO_ENCODE_SRC_BIT_KHR,					"VK_IMAGE_USAGE_VIDEO_ENCODE_SRC_BIT_KHR"),
+		tcu::Format::BitDesc(VK_IMAGE_USAGE_VIDEO_ENCODE_DPB_BIT_KHR,					"VK_IMAGE_USAGE_VIDEO_ENCODE_DPB_BIT_KHR"),
 		tcu::Format::BitDesc(VK_IMAGE_USAGE_SHADING_RATE_IMAGE_BIT_NV,					"VK_IMAGE_USAGE_SHADING_RATE_IMAGE_BIT_NV"),
 		tcu::Format::BitDesc(VK_IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT,				"VK_IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT"),
 		tcu::Format::BitDesc(VK_IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR,	"VK_IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR"),
@@ -2522,6 +2874,8 @@
 		tcu::Format::BitDesc(VK_QUEUE_TRANSFER_BIT,			"VK_QUEUE_TRANSFER_BIT"),
 		tcu::Format::BitDesc(VK_QUEUE_SPARSE_BINDING_BIT,	"VK_QUEUE_SPARSE_BINDING_BIT"),
 		tcu::Format::BitDesc(VK_QUEUE_PROTECTED_BIT,		"VK_QUEUE_PROTECTED_BIT"),
+		tcu::Format::BitDesc(VK_QUEUE_VIDEO_DECODE_BIT_KHR,	"VK_QUEUE_VIDEO_DECODE_BIT_KHR"),
+		tcu::Format::BitDesc(VK_QUEUE_VIDEO_ENCODE_BIT_KHR,	"VK_QUEUE_VIDEO_ENCODE_BIT_KHR"),
 		tcu::Format::BitDesc(VK_QUEUE_FLAG_BITS_MAX_ENUM,	"VK_QUEUE_FLAG_BITS_MAX_ENUM"),
 	};
 	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
@@ -2646,6 +3000,7 @@
 		tcu::Format::BitDesc(VK_QUERY_RESULT_WAIT_BIT,				"VK_QUERY_RESULT_WAIT_BIT"),
 		tcu::Format::BitDesc(VK_QUERY_RESULT_WITH_AVAILABILITY_BIT,	"VK_QUERY_RESULT_WITH_AVAILABILITY_BIT"),
 		tcu::Format::BitDesc(VK_QUERY_RESULT_PARTIAL_BIT,			"VK_QUERY_RESULT_PARTIAL_BIT"),
+		tcu::Format::BitDesc(VK_QUERY_RESULT_WITH_STATUS_BIT_KHR,	"VK_QUERY_RESULT_WITH_STATUS_BIT_KHR"),
 		tcu::Format::BitDesc(VK_QUERY_RESULT_FLAG_BITS_MAX_ENUM,	"VK_QUERY_RESULT_FLAG_BITS_MAX_ENUM"),
 	};
 	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
@@ -2681,6 +3036,10 @@
 		tcu::Format::BitDesc(VK_BUFFER_USAGE_VERTEX_BUFFER_BIT,										"VK_BUFFER_USAGE_VERTEX_BUFFER_BIT"),
 		tcu::Format::BitDesc(VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT,									"VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT"),
 		tcu::Format::BitDesc(VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT,								"VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT"),
+		tcu::Format::BitDesc(VK_BUFFER_USAGE_VIDEO_DECODE_SRC_BIT_KHR,								"VK_BUFFER_USAGE_VIDEO_DECODE_SRC_BIT_KHR"),
+		tcu::Format::BitDesc(VK_BUFFER_USAGE_VIDEO_DECODE_DST_BIT_KHR,								"VK_BUFFER_USAGE_VIDEO_DECODE_DST_BIT_KHR"),
+		tcu::Format::BitDesc(VK_BUFFER_USAGE_VIDEO_ENCODE_DST_BIT_KHR,								"VK_BUFFER_USAGE_VIDEO_ENCODE_DST_BIT_KHR"),
+		tcu::Format::BitDesc(VK_BUFFER_USAGE_VIDEO_ENCODE_SRC_BIT_KHR,								"VK_BUFFER_USAGE_VIDEO_ENCODE_SRC_BIT_KHR"),
 		tcu::Format::BitDesc(VK_BUFFER_USAGE_TRANSFORM_FEEDBACK_BUFFER_BIT_EXT,						"VK_BUFFER_USAGE_TRANSFORM_FEEDBACK_BUFFER_BIT_EXT"),
 		tcu::Format::BitDesc(VK_BUFFER_USAGE_TRANSFORM_FEEDBACK_COUNTER_BUFFER_BIT_EXT,				"VK_BUFFER_USAGE_TRANSFORM_FEEDBACK_COUNTER_BUFFER_BIT_EXT"),
 		tcu::Format::BitDesc(VK_BUFFER_USAGE_CONDITIONAL_RENDERING_BIT_EXT,							"VK_BUFFER_USAGE_CONDITIONAL_RENDERING_BIT_EXT"),
@@ -3051,6 +3410,7 @@
 		tcu::Format::BitDesc(VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID,	"VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID"),
 		tcu::Format::BitDesc(VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT,				"VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT"),
 		tcu::Format::BitDesc(VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT,		"VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT"),
+		tcu::Format::BitDesc(VK_EXTERNAL_MEMORY_HANDLE_TYPE_ZIRCON_VMO_BIT_FUCHSIA,					"VK_EXTERNAL_MEMORY_HANDLE_TYPE_ZIRCON_VMO_BIT_FUCHSIA"),
 		tcu::Format::BitDesc(VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT_KHR,						"VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT_KHR"),
 		tcu::Format::BitDesc(VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR,					"VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR"),
 		tcu::Format::BitDesc(VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_KHR,				"VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_KHR"),
@@ -3139,6 +3499,7 @@
 		tcu::Format::BitDesc(VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT,		"VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT"),
 		tcu::Format::BitDesc(VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT,				"VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT"),
 		tcu::Format::BitDesc(VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT,					"VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT"),
+		tcu::Format::BitDesc(VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_ZIRCON_EVENT_BIT_FUCHSIA,	"VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_ZIRCON_EVENT_BIT_FUCHSIA"),
 		tcu::Format::BitDesc(VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D11_FENCE_BIT,				"VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D11_FENCE_BIT"),
 		tcu::Format::BitDesc(VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT_KHR,			"VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT_KHR"),
 		tcu::Format::BitDesc(VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR,		"VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR"),
@@ -3544,6 +3905,204 @@
 	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
 }
 
+tcu::Format::Bitfield<32> getVideoCodecOperationFlagsKHRStr (VkVideoCodecOperationFlagsKHR value)
+{
+	static const tcu::Format::BitDesc s_desc[] =
+	{
+		tcu::Format::BitDesc(VK_VIDEO_CODEC_OPERATION_INVALID_BIT_KHR,			"VK_VIDEO_CODEC_OPERATION_INVALID_BIT_KHR"),
+		tcu::Format::BitDesc(VK_VIDEO_CODEC_OPERATION_ENCODE_H264_BIT_EXT,		"VK_VIDEO_CODEC_OPERATION_ENCODE_H264_BIT_EXT"),
+		tcu::Format::BitDesc(VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_EXT,		"VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_EXT"),
+		tcu::Format::BitDesc(VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_EXT,		"VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_EXT"),
+		tcu::Format::BitDesc(VK_VIDEO_CODEC_OPERATION_FLAG_BITS_MAX_ENUM_KHR,	"VK_VIDEO_CODEC_OPERATION_FLAG_BITS_MAX_ENUM_KHR"),
+	};
+	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
+}
+
+tcu::Format::Bitfield<32> getVideoChromaSubsamplingFlagsKHRStr (VkVideoChromaSubsamplingFlagsKHR value)
+{
+	static const tcu::Format::BitDesc s_desc[] =
+	{
+		tcu::Format::BitDesc(VK_VIDEO_CHROMA_SUBSAMPLING_INVALID_BIT_KHR,			"VK_VIDEO_CHROMA_SUBSAMPLING_INVALID_BIT_KHR"),
+		tcu::Format::BitDesc(VK_VIDEO_CHROMA_SUBSAMPLING_MONOCHROME_BIT_KHR,		"VK_VIDEO_CHROMA_SUBSAMPLING_MONOCHROME_BIT_KHR"),
+		tcu::Format::BitDesc(VK_VIDEO_CHROMA_SUBSAMPLING_420_BIT_KHR,				"VK_VIDEO_CHROMA_SUBSAMPLING_420_BIT_KHR"),
+		tcu::Format::BitDesc(VK_VIDEO_CHROMA_SUBSAMPLING_422_BIT_KHR,				"VK_VIDEO_CHROMA_SUBSAMPLING_422_BIT_KHR"),
+		tcu::Format::BitDesc(VK_VIDEO_CHROMA_SUBSAMPLING_444_BIT_KHR,				"VK_VIDEO_CHROMA_SUBSAMPLING_444_BIT_KHR"),
+		tcu::Format::BitDesc(VK_VIDEO_CHROMA_SUBSAMPLING_FLAG_BITS_MAX_ENUM_KHR,	"VK_VIDEO_CHROMA_SUBSAMPLING_FLAG_BITS_MAX_ENUM_KHR"),
+	};
+	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
+}
+
+tcu::Format::Bitfield<32> getVideoComponentBitDepthFlagsKHRStr (VkVideoComponentBitDepthFlagsKHR value)
+{
+	static const tcu::Format::BitDesc s_desc[] =
+	{
+		tcu::Format::BitDesc(VK_VIDEO_COMPONENT_BIT_DEPTH_INVALID_KHR,				"VK_VIDEO_COMPONENT_BIT_DEPTH_INVALID_KHR"),
+		tcu::Format::BitDesc(VK_VIDEO_COMPONENT_BIT_DEPTH_8_BIT_KHR,				"VK_VIDEO_COMPONENT_BIT_DEPTH_8_BIT_KHR"),
+		tcu::Format::BitDesc(VK_VIDEO_COMPONENT_BIT_DEPTH_10_BIT_KHR,				"VK_VIDEO_COMPONENT_BIT_DEPTH_10_BIT_KHR"),
+		tcu::Format::BitDesc(VK_VIDEO_COMPONENT_BIT_DEPTH_12_BIT_KHR,				"VK_VIDEO_COMPONENT_BIT_DEPTH_12_BIT_KHR"),
+		tcu::Format::BitDesc(VK_VIDEO_COMPONENT_BIT_DEPTH_FLAG_BITS_MAX_ENUM_KHR,	"VK_VIDEO_COMPONENT_BIT_DEPTH_FLAG_BITS_MAX_ENUM_KHR"),
+	};
+	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
+}
+
+tcu::Format::Bitfield<32> getVideoCapabilitiesFlagsKHRStr (VkVideoCapabilitiesFlagsKHR value)
+{
+	static const tcu::Format::BitDesc s_desc[] =
+	{
+		tcu::Format::BitDesc(VK_VIDEO_CAPABILITIES_PROTECTED_CONTENT_BIT_KHR,			"VK_VIDEO_CAPABILITIES_PROTECTED_CONTENT_BIT_KHR"),
+		tcu::Format::BitDesc(VK_VIDEO_CAPABILITIES_SEPARATE_REFERENCE_IMAGES_BIT_KHR,	"VK_VIDEO_CAPABILITIES_SEPARATE_REFERENCE_IMAGES_BIT_KHR"),
+		tcu::Format::BitDesc(VK_VIDEO_CAPABILITIES_FLAG_BITS_MAX_ENUM_KHR,				"VK_VIDEO_CAPABILITIES_FLAG_BITS_MAX_ENUM_KHR"),
+	};
+	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
+}
+
+tcu::Format::Bitfield<32> getVideoSessionCreateFlagsKHRStr (VkVideoSessionCreateFlagsKHR value)
+{
+	static const tcu::Format::BitDesc s_desc[] =
+	{
+		tcu::Format::BitDesc(VK_VIDEO_SESSION_CREATE_DEFAULT_KHR,				"VK_VIDEO_SESSION_CREATE_DEFAULT_KHR"),
+		tcu::Format::BitDesc(VK_VIDEO_SESSION_CREATE_PROTECTED_CONTENT_BIT_KHR,	"VK_VIDEO_SESSION_CREATE_PROTECTED_CONTENT_BIT_KHR"),
+		tcu::Format::BitDesc(VK_VIDEO_SESSION_CREATE_FLAG_BITS_MAX_ENUM_KHR,	"VK_VIDEO_SESSION_CREATE_FLAG_BITS_MAX_ENUM_KHR"),
+	};
+	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
+}
+
+tcu::Format::Bitfield<32> getVideoCodingControlFlagsKHRStr (VkVideoCodingControlFlagsKHR value)
+{
+	static const tcu::Format::BitDesc s_desc[] =
+	{
+		tcu::Format::BitDesc(VK_VIDEO_CODING_CONTROL_DEFAULT_KHR,				"VK_VIDEO_CODING_CONTROL_DEFAULT_KHR"),
+		tcu::Format::BitDesc(VK_VIDEO_CODING_CONTROL_RESET_BIT_KHR,				"VK_VIDEO_CODING_CONTROL_RESET_BIT_KHR"),
+		tcu::Format::BitDesc(VK_VIDEO_CODING_CONTROL_FLAG_BITS_MAX_ENUM_KHR,	"VK_VIDEO_CODING_CONTROL_FLAG_BITS_MAX_ENUM_KHR"),
+	};
+	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
+}
+
+tcu::Format::Bitfield<32> getVideoCodingQualityPresetFlagsKHRStr (VkVideoCodingQualityPresetFlagsKHR value)
+{
+	static const tcu::Format::BitDesc s_desc[] =
+	{
+		tcu::Format::BitDesc(VK_VIDEO_CODING_QUALITY_PRESET_DEFAULT_BIT_KHR,		"VK_VIDEO_CODING_QUALITY_PRESET_DEFAULT_BIT_KHR"),
+		tcu::Format::BitDesc(VK_VIDEO_CODING_QUALITY_PRESET_NORMAL_BIT_KHR,			"VK_VIDEO_CODING_QUALITY_PRESET_NORMAL_BIT_KHR"),
+		tcu::Format::BitDesc(VK_VIDEO_CODING_QUALITY_PRESET_POWER_BIT_KHR,			"VK_VIDEO_CODING_QUALITY_PRESET_POWER_BIT_KHR"),
+		tcu::Format::BitDesc(VK_VIDEO_CODING_QUALITY_PRESET_QUALITY_BIT_KHR,		"VK_VIDEO_CODING_QUALITY_PRESET_QUALITY_BIT_KHR"),
+		tcu::Format::BitDesc(VK_VIDEO_CODING_QUALITY_PRESET_FLAG_BITS_MAX_ENUM_KHR,	"VK_VIDEO_CODING_QUALITY_PRESET_FLAG_BITS_MAX_ENUM_KHR"),
+	};
+	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
+}
+
+tcu::Format::Bitfield<32> getVideoDecodeFlagsKHRStr (VkVideoDecodeFlagsKHR value)
+{
+	static const tcu::Format::BitDesc s_desc[] =
+	{
+		tcu::Format::BitDesc(VK_VIDEO_DECODE_DEFAULT_KHR,				"VK_VIDEO_DECODE_DEFAULT_KHR"),
+		tcu::Format::BitDesc(VK_VIDEO_DECODE_RESERVED_0_BIT_KHR,		"VK_VIDEO_DECODE_RESERVED_0_BIT_KHR"),
+		tcu::Format::BitDesc(VK_VIDEO_DECODE_FLAG_BITS_MAX_ENUM_KHR,	"VK_VIDEO_DECODE_FLAG_BITS_MAX_ENUM_KHR"),
+	};
+	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
+}
+
+tcu::Format::Bitfield<32> getVideoEncodeFlagsKHRStr (VkVideoEncodeFlagsKHR value)
+{
+	static const tcu::Format::BitDesc s_desc[] =
+	{
+		tcu::Format::BitDesc(VK_VIDEO_ENCODE_DEFAULT_KHR,				"VK_VIDEO_ENCODE_DEFAULT_KHR"),
+		tcu::Format::BitDesc(VK_VIDEO_ENCODE_RESERVED_0_BIT_KHR,		"VK_VIDEO_ENCODE_RESERVED_0_BIT_KHR"),
+		tcu::Format::BitDesc(VK_VIDEO_ENCODE_FLAG_BITS_MAX_ENUM_KHR,	"VK_VIDEO_ENCODE_FLAG_BITS_MAX_ENUM_KHR"),
+	};
+	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
+}
+
+tcu::Format::Bitfield<32> getVideoEncodeRateControlFlagsKHRStr (VkVideoEncodeRateControlFlagsKHR value)
+{
+	static const tcu::Format::BitDesc s_desc[] =
+	{
+		tcu::Format::BitDesc(VK_VIDEO_ENCODE_RATE_CONTROL_DEFAULT_KHR,				"VK_VIDEO_ENCODE_RATE_CONTROL_DEFAULT_KHR"),
+		tcu::Format::BitDesc(VK_VIDEO_ENCODE_RATE_CONTROL_RESET_BIT_KHR,			"VK_VIDEO_ENCODE_RATE_CONTROL_RESET_BIT_KHR"),
+		tcu::Format::BitDesc(VK_VIDEO_ENCODE_RATE_CONTROL_FLAG_BITS_MAX_ENUM_KHR,	"VK_VIDEO_ENCODE_RATE_CONTROL_FLAG_BITS_MAX_ENUM_KHR"),
+	};
+	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
+}
+
+tcu::Format::Bitfield<32> getVideoEncodeRateControlModeFlagsKHRStr (VkVideoEncodeRateControlModeFlagsKHR value)
+{
+	static const tcu::Format::BitDesc s_desc[] =
+	{
+		tcu::Format::BitDesc(VK_VIDEO_ENCODE_RATE_CONTROL_MODE_NONE_BIT_KHR,			"VK_VIDEO_ENCODE_RATE_CONTROL_MODE_NONE_BIT_KHR"),
+		tcu::Format::BitDesc(VK_VIDEO_ENCODE_RATE_CONTROL_MODE_CBR_BIT_KHR,				"VK_VIDEO_ENCODE_RATE_CONTROL_MODE_CBR_BIT_KHR"),
+		tcu::Format::BitDesc(VK_VIDEO_ENCODE_RATE_CONTROL_MODE_VBR_BIT_KHR,				"VK_VIDEO_ENCODE_RATE_CONTROL_MODE_VBR_BIT_KHR"),
+		tcu::Format::BitDesc(VK_VIDEO_ENCODE_RATE_CONTROL_MODE_FLAG_BITS_MAX_ENUM_KHR,	"VK_VIDEO_ENCODE_RATE_CONTROL_MODE_FLAG_BITS_MAX_ENUM_KHR"),
+	};
+	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
+}
+
+tcu::Format::Bitfield<32> getVideoEncodeH264CapabilitiesFlagsEXTStr (VkVideoEncodeH264CapabilitiesFlagsEXT value)
+{
+	static const tcu::Format::BitDesc s_desc[] =
+	{
+		tcu::Format::BitDesc(VK_VIDEO_ENCODE_H264_CAPABILITY_CABAC_BIT_EXT,							"VK_VIDEO_ENCODE_H264_CAPABILITY_CABAC_BIT_EXT"),
+		tcu::Format::BitDesc(VK_VIDEO_ENCODE_H264_CAPABILITY_CAVLC_BIT_EXT,							"VK_VIDEO_ENCODE_H264_CAPABILITY_CAVLC_BIT_EXT"),
+		tcu::Format::BitDesc(VK_VIDEO_ENCODE_H264_CAPABILITY_WEIGHTED_BI_PRED_IMPLICIT_BIT_EXT,		"VK_VIDEO_ENCODE_H264_CAPABILITY_WEIGHTED_BI_PRED_IMPLICIT_BIT_EXT"),
+		tcu::Format::BitDesc(VK_VIDEO_ENCODE_H264_CAPABILITY_TRANSFORM_8X8_BIT_EXT,					"VK_VIDEO_ENCODE_H264_CAPABILITY_TRANSFORM_8X8_BIT_EXT"),
+		tcu::Format::BitDesc(VK_VIDEO_ENCODE_H264_CAPABILITY_CHROMA_QP_OFFSET_BIT_EXT,				"VK_VIDEO_ENCODE_H264_CAPABILITY_CHROMA_QP_OFFSET_BIT_EXT"),
+		tcu::Format::BitDesc(VK_VIDEO_ENCODE_H264_CAPABILITY_SECOND_CHROMA_QP_OFFSET_BIT_EXT,		"VK_VIDEO_ENCODE_H264_CAPABILITY_SECOND_CHROMA_QP_OFFSET_BIT_EXT"),
+		tcu::Format::BitDesc(VK_VIDEO_ENCODE_H264_CAPABILITY_DEBLOCKING_FILTER_DISABLED_BIT_EXT,	"VK_VIDEO_ENCODE_H264_CAPABILITY_DEBLOCKING_FILTER_DISABLED_BIT_EXT"),
+		tcu::Format::BitDesc(VK_VIDEO_ENCODE_H264_CAPABILITY_DEBLOCKING_FILTER_ENABLED_BIT_EXT,		"VK_VIDEO_ENCODE_H264_CAPABILITY_DEBLOCKING_FILTER_ENABLED_BIT_EXT"),
+		tcu::Format::BitDesc(VK_VIDEO_ENCODE_H264_CAPABILITY_DEBLOCKING_FILTER_PARTIAL_BIT_EXT,		"VK_VIDEO_ENCODE_H264_CAPABILITY_DEBLOCKING_FILTER_PARTIAL_BIT_EXT"),
+		tcu::Format::BitDesc(VK_VIDEO_ENCODE_H264_CAPABILITY_MULTIPLE_SLICE_PER_FRAME_BIT_EXT,		"VK_VIDEO_ENCODE_H264_CAPABILITY_MULTIPLE_SLICE_PER_FRAME_BIT_EXT"),
+		tcu::Format::BitDesc(VK_VIDEO_ENCODE_H264_CAPABILITY_EVENLY_DISTRIBUTED_SLICE_SIZE_BIT_EXT,	"VK_VIDEO_ENCODE_H264_CAPABILITY_EVENLY_DISTRIBUTED_SLICE_SIZE_BIT_EXT"),
+		tcu::Format::BitDesc(VK_VIDEO_ENCODE_H264_CAPABILITIES_FLAG_BITS_MAX_ENUM_EXT,				"VK_VIDEO_ENCODE_H264_CAPABILITIES_FLAG_BITS_MAX_ENUM_EXT"),
+	};
+	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
+}
+
+tcu::Format::Bitfield<32> getVideoEncodeH264InputModeFlagsEXTStr (VkVideoEncodeH264InputModeFlagsEXT value)
+{
+	static const tcu::Format::BitDesc s_desc[] =
+	{
+		tcu::Format::BitDesc(VK_VIDEO_ENCODE_H264_INPUT_MODE_FRAME_BIT_EXT,				"VK_VIDEO_ENCODE_H264_INPUT_MODE_FRAME_BIT_EXT"),
+		tcu::Format::BitDesc(VK_VIDEO_ENCODE_H264_INPUT_MODE_SLICE_BIT_EXT,				"VK_VIDEO_ENCODE_H264_INPUT_MODE_SLICE_BIT_EXT"),
+		tcu::Format::BitDesc(VK_VIDEO_ENCODE_H264_INPUT_MODE_NON_VCL_BIT_EXT,			"VK_VIDEO_ENCODE_H264_INPUT_MODE_NON_VCL_BIT_EXT"),
+		tcu::Format::BitDesc(VK_VIDEO_ENCODE_H264_INPUT_MODE_FLAG_BITS_MAX_ENUM_EXT,	"VK_VIDEO_ENCODE_H264_INPUT_MODE_FLAG_BITS_MAX_ENUM_EXT"),
+	};
+	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
+}
+
+tcu::Format::Bitfield<32> getVideoEncodeH264OutputModeFlagsEXTStr (VkVideoEncodeH264OutputModeFlagsEXT value)
+{
+	static const tcu::Format::BitDesc s_desc[] =
+	{
+		tcu::Format::BitDesc(VK_VIDEO_ENCODE_H264_OUTPUT_MODE_FRAME_BIT_EXT,			"VK_VIDEO_ENCODE_H264_OUTPUT_MODE_FRAME_BIT_EXT"),
+		tcu::Format::BitDesc(VK_VIDEO_ENCODE_H264_OUTPUT_MODE_SLICE_BIT_EXT,			"VK_VIDEO_ENCODE_H264_OUTPUT_MODE_SLICE_BIT_EXT"),
+		tcu::Format::BitDesc(VK_VIDEO_ENCODE_H264_OUTPUT_MODE_NON_VCL_BIT_EXT,			"VK_VIDEO_ENCODE_H264_OUTPUT_MODE_NON_VCL_BIT_EXT"),
+		tcu::Format::BitDesc(VK_VIDEO_ENCODE_H264_OUTPUT_MODE_FLAG_BITS_MAX_ENUM_EXT,	"VK_VIDEO_ENCODE_H264_OUTPUT_MODE_FLAG_BITS_MAX_ENUM_EXT"),
+	};
+	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
+}
+
+tcu::Format::Bitfield<32> getVideoEncodeH264CreateFlagsEXTStr (VkVideoEncodeH264CreateFlagsEXT value)
+{
+	static const tcu::Format::BitDesc s_desc[] =
+	{
+		tcu::Format::BitDesc(VK_VIDEO_ENCODE_H264_CREATE_DEFAULT_EXT,				"VK_VIDEO_ENCODE_H264_CREATE_DEFAULT_EXT"),
+		tcu::Format::BitDesc(VK_VIDEO_ENCODE_H264_CREATE_RESERVED_0_BIT_EXT,		"VK_VIDEO_ENCODE_H264_CREATE_RESERVED_0_BIT_EXT"),
+		tcu::Format::BitDesc(VK_VIDEO_ENCODE_H264_CREATE_FLAG_BITS_MAX_ENUM_EXT,	"VK_VIDEO_ENCODE_H264_CREATE_FLAG_BITS_MAX_ENUM_EXT"),
+	};
+	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
+}
+
+tcu::Format::Bitfield<32> getVideoDecodeH264FieldLayoutFlagsEXTStr (VkVideoDecodeH264FieldLayoutFlagsEXT value)
+{
+	static const tcu::Format::BitDesc s_desc[] =
+	{
+		tcu::Format::BitDesc(VK_VIDEO_DECODE_H264_PROGRESSIVE_PICTURES_ONLY_EXT,					"VK_VIDEO_DECODE_H264_PROGRESSIVE_PICTURES_ONLY_EXT"),
+		tcu::Format::BitDesc(VK_VIDEO_DECODE_H264_FIELD_LAYOUT_LINE_INTERLACED_PLANE_BIT_EXT,		"VK_VIDEO_DECODE_H264_FIELD_LAYOUT_LINE_INTERLACED_PLANE_BIT_EXT"),
+		tcu::Format::BitDesc(VK_VIDEO_DECODE_H264_FIELD_LAYOUT_SEPARATE_INTERLACED_PLANE_BIT_EXT,	"VK_VIDEO_DECODE_H264_FIELD_LAYOUT_SEPARATE_INTERLACED_PLANE_BIT_EXT"),
+		tcu::Format::BitDesc(VK_VIDEO_DECODE_H264_FIELD_LAYOUT_FLAG_BITS_MAX_ENUM_EXT,				"VK_VIDEO_DECODE_H264_FIELD_LAYOUT_FLAG_BITS_MAX_ENUM_EXT"),
+	};
+	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
+}
+
 tcu::Format::Bitfield<32> getInstanceCreateFlagsStr (VkInstanceCreateFlags value)
 {
 	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
@@ -3719,6 +4278,26 @@
 	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
 }
 
+tcu::Format::Bitfield<32> getVideoBeginCodingFlagsKHRStr (VkVideoBeginCodingFlagsKHR value)
+{
+	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
+}
+
+tcu::Format::Bitfield<32> getVideoEndCodingFlagsKHRStr (VkVideoEndCodingFlagsKHR value)
+{
+	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
+}
+
+tcu::Format::Bitfield<32> getVideoDecodeH264CreateFlagsEXTStr (VkVideoDecodeH264CreateFlagsEXT value)
+{
+	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
+}
+
+tcu::Format::Bitfield<32> getVideoDecodeH265CreateFlagsEXTStr (VkVideoDecodeH265CreateFlagsEXT value)
+{
+	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
+}
+
 tcu::Format::Bitfield<32> getImagePipeSurfaceCreateFlagsFUCHSIAStr (VkImagePipeSurfaceCreateFlagsFUCHSIA value)
 {
 	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
@@ -7545,6 +8124,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";
@@ -10074,6 +10702,28 @@
 	return s;
 }
 
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceInheritedViewportScissorFeaturesNV& value)
+{
+	s << "VkPhysicalDeviceInheritedViewportScissorFeaturesNV = {\n";
+	s << "\tsType = " << value.sType << '\n';
+	s << "\tpNext = " << value.pNext << '\n';
+	s << "\tinheritedViewportScissor2D = " << value.inheritedViewportScissor2D << '\n';
+	s << '}';
+	return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkCommandBufferInheritanceViewportScissorInfoNV& value)
+{
+	s << "VkCommandBufferInheritanceViewportScissorInfoNV = {\n";
+	s << "\tsType = " << value.sType << '\n';
+	s << "\tpNext = " << value.pNext << '\n';
+	s << "\tviewportScissor2D = " << value.viewportScissor2D << '\n';
+	s << "\tviewportDepthCount = " << value.viewportDepthCount << '\n';
+	s << "\tpViewportDepths = " << value.pViewportDepths << '\n';
+	s << '}';
+	return s;
+}
+
 std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT& value)
 {
 	s << "VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT = {\n";
@@ -10305,6 +10955,16 @@
 	return s;
 }
 
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT& value)
+{
+	s << "VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT = {\n";
+	s << "\tsType = " << value.sType << '\n';
+	s << "\tpNext = " << value.pNext << '\n';
+	s << "\tycbcr2plane444Formats = " << value.ycbcr2plane444Formats << '\n';
+	s << '}';
+	return s;
+}
+
 std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceFragmentDensityMap2FeaturesEXT& value)
 {
 	s << "VkPhysicalDeviceFragmentDensityMap2FeaturesEXT = {\n";
@@ -10389,6 +11049,75 @@
 	return s;
 }
 
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT& value)
+{
+	s << "VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT = {\n";
+	s << "\tsType = " << value.sType << '\n';
+	s << "\tpNext = " << value.pNext << '\n';
+	s << "\tvertexInputDynamicState = " << value.vertexInputDynamicState << '\n';
+	s << '}';
+	return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkVertexInputBindingDescription2EXT& value)
+{
+	s << "VkVertexInputBindingDescription2EXT = {\n";
+	s << "\tsType = " << value.sType << '\n';
+	s << "\tpNext = " << value.pNext << '\n';
+	s << "\tbinding = " << value.binding << '\n';
+	s << "\tstride = " << value.stride << '\n';
+	s << "\tinputRate = " << value.inputRate << '\n';
+	s << "\tdivisor = " << value.divisor << '\n';
+	s << '}';
+	return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkVertexInputAttributeDescription2EXT& value)
+{
+	s << "VkVertexInputAttributeDescription2EXT = {\n";
+	s << "\tsType = " << value.sType << '\n';
+	s << "\tpNext = " << value.pNext << '\n';
+	s << "\tlocation = " << value.location << '\n';
+	s << "\tbinding = " << value.binding << '\n';
+	s << "\tformat = " << value.format << '\n';
+	s << "\toffset = " << value.offset << '\n';
+	s << '}';
+	return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceExtendedDynamicState2FeaturesEXT& value)
+{
+	s << "VkPhysicalDeviceExtendedDynamicState2FeaturesEXT = {\n";
+	s << "\tsType = " << value.sType << '\n';
+	s << "\tpNext = " << value.pNext << '\n';
+	s << "\textendedDynamicState2 = " << value.extendedDynamicState2 << '\n';
+	s << "\textendedDynamicState2LogicOp = " << value.extendedDynamicState2LogicOp << '\n';
+	s << "\textendedDynamicState2PatchControlPoints = " << value.extendedDynamicState2PatchControlPoints << '\n';
+	s << '}';
+	return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceColorWriteEnableFeaturesEXT& value)
+{
+	s << "VkPhysicalDeviceColorWriteEnableFeaturesEXT = {\n";
+	s << "\tsType = " << value.sType << '\n';
+	s << "\tpNext = " << value.pNext << '\n';
+	s << "\tcolorWriteEnable = " << value.colorWriteEnable << '\n';
+	s << '}';
+	return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPipelineColorWriteCreateInfoEXT& value)
+{
+	s << "VkPipelineColorWriteCreateInfoEXT = {\n";
+	s << "\tsType = " << value.sType << '\n';
+	s << "\tpNext = " << value.pNext << '\n';
+	s << "\tattachmentCount = " << value.attachmentCount << '\n';
+	s << "\tpColorWriteEnables = " << value.pColorWriteEnables << '\n';
+	s << '}';
+	return s;
+}
+
 std::ostream& operator<< (std::ostream& s, const VkDeviceOrHostAddressKHR& value)
 {
 	s << "VkDeviceOrHostAddressKHR = {\n";
@@ -10808,6 +11537,218 @@
 	return s;
 }
 
+std::ostream& operator<< (std::ostream& s, const VkVideoQueueFamilyProperties2KHR& value)
+{
+	s << "VkVideoQueueFamilyProperties2KHR = {\n";
+	s << "\tsType = " << value.sType << '\n';
+	s << "\tpNext = " << value.pNext << '\n';
+	s << "\tvideoCodecOperations = " << getVideoCodecOperationFlagsKHRStr(value.videoCodecOperations) << '\n';
+	s << '}';
+	return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkVideoProfileKHR& value)
+{
+	s << "VkVideoProfileKHR = {\n";
+	s << "\tsType = " << value.sType << '\n';
+	s << "\tpNext = " << value.pNext << '\n';
+	s << "\tvideoCodecOperation = " << value.videoCodecOperation << '\n';
+	s << "\tchromaSubsampling = " << getVideoChromaSubsamplingFlagsKHRStr(value.chromaSubsampling) << '\n';
+	s << "\tlumaBitDepth = " << getVideoComponentBitDepthFlagsKHRStr(value.lumaBitDepth) << '\n';
+	s << "\tchromaBitDepth = " << getVideoComponentBitDepthFlagsKHRStr(value.chromaBitDepth) << '\n';
+	s << '}';
+	return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkVideoProfilesKHR& value)
+{
+	s << "VkVideoProfilesKHR = {\n";
+	s << "\tsType = " << value.sType << '\n';
+	s << "\tpNext = " << value.pNext << '\n';
+	s << "\tprofileCount = " << value.profileCount << '\n';
+	s << "\tpProfiles = " << value.pProfiles << '\n';
+	s << '}';
+	return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkVideoCapabilitiesKHR& value)
+{
+	s << "VkVideoCapabilitiesKHR = {\n";
+	s << "\tsType = " << value.sType << '\n';
+	s << "\tpNext = " << value.pNext << '\n';
+	s << "\tcapabilityFlags = " << getVideoCapabilitiesFlagsKHRStr(value.capabilityFlags) << '\n';
+	s << "\tminBitstreamBufferOffsetAlignment = " << value.minBitstreamBufferOffsetAlignment << '\n';
+	s << "\tminBitstreamBufferSizeAlignment = " << value.minBitstreamBufferSizeAlignment << '\n';
+	s << "\tvideoPictureExtentGranularity = " << value.videoPictureExtentGranularity << '\n';
+	s << "\tminExtent = " << value.minExtent << '\n';
+	s << "\tmaxExtent = " << value.maxExtent << '\n';
+	s << "\tmaxReferencePicturesSlotsCount = " << value.maxReferencePicturesSlotsCount << '\n';
+	s << "\tmaxReferencePicturesActiveCount = " << value.maxReferencePicturesActiveCount << '\n';
+	s << '}';
+	return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceVideoFormatInfoKHR& value)
+{
+	s << "VkPhysicalDeviceVideoFormatInfoKHR = {\n";
+	s << "\tsType = " << value.sType << '\n';
+	s << "\tpNext = " << value.pNext << '\n';
+	s << "\timageUsage = " << getImageUsageFlagsStr(value.imageUsage) << '\n';
+	s << "\tpVideoProfiles = " << value.pVideoProfiles << '\n';
+	s << '}';
+	return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkVideoFormatPropertiesKHR& value)
+{
+	s << "VkVideoFormatPropertiesKHR = {\n";
+	s << "\tsType = " << value.sType << '\n';
+	s << "\tpNext = " << value.pNext << '\n';
+	s << "\tformat = " << value.format << '\n';
+	s << '}';
+	return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkVideoPictureResourceKHR& value)
+{
+	s << "VkVideoPictureResourceKHR = {\n";
+	s << "\tsType = " << value.sType << '\n';
+	s << "\tpNext = " << value.pNext << '\n';
+	s << "\tcodedOffset = " << value.codedOffset << '\n';
+	s << "\tcodedExtent = " << value.codedExtent << '\n';
+	s << "\tbaseArrayLayer = " << value.baseArrayLayer << '\n';
+	s << "\timageViewBinding = " << value.imageViewBinding << '\n';
+	s << '}';
+	return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkVideoReferenceSlotKHR& value)
+{
+	s << "VkVideoReferenceSlotKHR = {\n";
+	s << "\tsType = " << value.sType << '\n';
+	s << "\tpNext = " << value.pNext << '\n';
+	s << "\tslotIndex = " << value.slotIndex << '\n';
+	s << "\tpPictureResource = " << value.pPictureResource << '\n';
+	s << '}';
+	return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkVideoGetMemoryPropertiesKHR& value)
+{
+	s << "VkVideoGetMemoryPropertiesKHR = {\n";
+	s << "\tsType = " << value.sType << '\n';
+	s << "\tpNext = " << value.pNext << '\n';
+	s << "\tmemoryBindIndex = " << value.memoryBindIndex << '\n';
+	s << "\tpMemoryRequirements = " << value.pMemoryRequirements << '\n';
+	s << '}';
+	return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkVideoBindMemoryKHR& value)
+{
+	s << "VkVideoBindMemoryKHR = {\n";
+	s << "\tsType = " << value.sType << '\n';
+	s << "\tpNext = " << value.pNext << '\n';
+	s << "\tmemoryBindIndex = " << value.memoryBindIndex << '\n';
+	s << "\tmemory = " << value.memory << '\n';
+	s << "\tmemoryOffset = " << value.memoryOffset << '\n';
+	s << "\tmemorySize = " << value.memorySize << '\n';
+	s << '}';
+	return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkVideoSessionCreateInfoKHR& value)
+{
+	s << "VkVideoSessionCreateInfoKHR = {\n";
+	s << "\tsType = " << value.sType << '\n';
+	s << "\tpNext = " << value.pNext << '\n';
+	s << "\tqueueFamilyIndex = " << value.queueFamilyIndex << '\n';
+	s << "\tflags = " << getVideoSessionCreateFlagsKHRStr(value.flags) << '\n';
+	s << "\tpVideoProfile = " << value.pVideoProfile << '\n';
+	s << "\tpictureFormat = " << value.pictureFormat << '\n';
+	s << "\tmaxCodedExtent = " << value.maxCodedExtent << '\n';
+	s << "\treferencePicturesFormat = " << value.referencePicturesFormat << '\n';
+	s << "\tmaxReferencePicturesSlotsCount = " << value.maxReferencePicturesSlotsCount << '\n';
+	s << "\tmaxReferencePicturesActiveCount = " << value.maxReferencePicturesActiveCount << '\n';
+	s << '}';
+	return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkVideoSessionParametersCreateInfoKHR& value)
+{
+	s << "VkVideoSessionParametersCreateInfoKHR = {\n";
+	s << "\tsType = " << value.sType << '\n';
+	s << "\tpNext = " << value.pNext << '\n';
+	s << "\tvideoSessionParametersTemplate = " << value.videoSessionParametersTemplate << '\n';
+	s << "\tvideoSession = " << value.videoSession << '\n';
+	s << '}';
+	return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkVideoSessionParametersUpdateInfoKHR& value)
+{
+	s << "VkVideoSessionParametersUpdateInfoKHR = {\n";
+	s << "\tsType = " << value.sType << '\n';
+	s << "\tpNext = " << value.pNext << '\n';
+	s << "\tupdateSequenceCount = " << value.updateSequenceCount << '\n';
+	s << '}';
+	return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkVideoBeginCodingInfoKHR& value)
+{
+	s << "VkVideoBeginCodingInfoKHR = {\n";
+	s << "\tsType = " << value.sType << '\n';
+	s << "\tpNext = " << value.pNext << '\n';
+	s << "\tflags = " << getVideoBeginCodingFlagsKHRStr(value.flags) << '\n';
+	s << "\tcodecQualityPreset = " << getVideoCodingQualityPresetFlagsKHRStr(value.codecQualityPreset) << '\n';
+	s << "\tvideoSession = " << value.videoSession << '\n';
+	s << "\tvideoSessionParameters = " << value.videoSessionParameters << '\n';
+	s << "\treferenceSlotCount = " << value.referenceSlotCount << '\n';
+	s << "\tpReferenceSlots = " << value.pReferenceSlots << '\n';
+	s << '}';
+	return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkVideoEndCodingInfoKHR& value)
+{
+	s << "VkVideoEndCodingInfoKHR = {\n";
+	s << "\tsType = " << value.sType << '\n';
+	s << "\tpNext = " << value.pNext << '\n';
+	s << "\tflags = " << getVideoEndCodingFlagsKHRStr(value.flags) << '\n';
+	s << '}';
+	return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkVideoCodingControlInfoKHR& value)
+{
+	s << "VkVideoCodingControlInfoKHR = {\n";
+	s << "\tsType = " << value.sType << '\n';
+	s << "\tpNext = " << value.pNext << '\n';
+	s << "\tflags = " << getVideoCodingControlFlagsKHRStr(value.flags) << '\n';
+	s << '}';
+	return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkVideoDecodeInfoKHR& value)
+{
+	s << "VkVideoDecodeInfoKHR = {\n";
+	s << "\tsType = " << value.sType << '\n';
+	s << "\tpNext = " << value.pNext << '\n';
+	s << "\tflags = " << getVideoDecodeFlagsKHRStr(value.flags) << '\n';
+	s << "\tcodedOffset = " << value.codedOffset << '\n';
+	s << "\tcodedExtent = " << value.codedExtent << '\n';
+	s << "\tsrcBuffer = " << value.srcBuffer << '\n';
+	s << "\tsrcBufferOffset = " << value.srcBufferOffset << '\n';
+	s << "\tsrcBufferRange = " << value.srcBufferRange << '\n';
+	s << "\tdstPictureResource = " << value.dstPictureResource << '\n';
+	s << "\tpSetupReferenceSlot = " << value.pSetupReferenceSlot << '\n';
+	s << "\treferenceSlotCount = " << value.referenceSlotCount << '\n';
+	s << "\tpReferenceSlots = " << value.pReferenceSlots << '\n';
+	s << '}';
+	return s;
+}
+
 std::ostream& operator<< (std::ostream& s, const VkPhysicalDevicePortabilitySubsetFeaturesKHR& value)
 {
 	s << "VkPhysicalDevicePortabilitySubsetFeaturesKHR = {\n";
@@ -10842,6 +11783,1041 @@
 	return s;
 }
 
+std::ostream& operator<< (std::ostream& s, const VkVideoEncodeInfoKHR& value)
+{
+	s << "VkVideoEncodeInfoKHR = {\n";
+	s << "\tsType = " << value.sType << '\n';
+	s << "\tpNext = " << value.pNext << '\n';
+	s << "\tflags = " << getVideoEncodeFlagsKHRStr(value.flags) << '\n';
+	s << "\tqualityLevel = " << value.qualityLevel << '\n';
+	s << "\tcodedExtent = " << value.codedExtent << '\n';
+	s << "\tdstBitstreamBuffer = " << value.dstBitstreamBuffer << '\n';
+	s << "\tdstBitstreamBufferOffset = " << value.dstBitstreamBufferOffset << '\n';
+	s << "\tdstBitstreamBufferMaxRange = " << value.dstBitstreamBufferMaxRange << '\n';
+	s << "\tsrcPictureResource = " << value.srcPictureResource << '\n';
+	s << "\tpSetupReferenceSlot = " << value.pSetupReferenceSlot << '\n';
+	s << "\treferenceSlotCount = " << value.referenceSlotCount << '\n';
+	s << "\tpReferenceSlots = " << value.pReferenceSlots << '\n';
+	s << '}';
+	return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkVideoEncodeRateControlInfoKHR& value)
+{
+	s << "VkVideoEncodeRateControlInfoKHR = {\n";
+	s << "\tsType = " << value.sType << '\n';
+	s << "\tpNext = " << value.pNext << '\n';
+	s << "\tflags = " << getVideoEncodeRateControlFlagsKHRStr(value.flags) << '\n';
+	s << "\trateControlMode = " << value.rateControlMode << '\n';
+	s << "\taverageBitrate = " << value.averageBitrate << '\n';
+	s << "\tpeakToAverageBitrateRatio = " << value.peakToAverageBitrateRatio << '\n';
+	s << "\tframeRateNumerator = " << value.frameRateNumerator << '\n';
+	s << "\tframeRateDenominator = " << value.frameRateDenominator << '\n';
+	s << "\tvirtualBufferSizeInMs = " << value.virtualBufferSizeInMs << '\n';
+	s << '}';
+	return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const StdVideoH264SpsVuiFlags& value)
+{
+	s << "StdVideoH264SpsVuiFlags = {\n";
+	s << "\taspect_ratio_info_present_flag = " << value.aspect_ratio_info_present_flag << '\n';
+	s << "\toverscan_info_present_flag = " << value.overscan_info_present_flag << '\n';
+	s << "\toverscan_appropriate_flag = " << value.overscan_appropriate_flag << '\n';
+	s << "\tvideo_signal_type_present_flag = " << value.video_signal_type_present_flag << '\n';
+	s << "\tvideo_full_range_flag = " << value.video_full_range_flag << '\n';
+	s << "\tcolor_description_present_flag = " << value.color_description_present_flag << '\n';
+	s << "\tchroma_loc_info_present_flag = " << value.chroma_loc_info_present_flag << '\n';
+	s << "\ttiming_info_present_flag = " << value.timing_info_present_flag << '\n';
+	s << "\tfixed_frame_rate_flag = " << value.fixed_frame_rate_flag << '\n';
+	s << "\tbitstream_restriction_flag = " << value.bitstream_restriction_flag << '\n';
+	s << "\tnal_hrd_parameters_present_flag = " << value.nal_hrd_parameters_present_flag << '\n';
+	s << "\tvcl_hrd_parameters_present_flag = " << value.vcl_hrd_parameters_present_flag << '\n';
+	s << '}';
+	return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const StdVideoH264HrdParameters& value)
+{
+	s << "StdVideoH264HrdParameters = {\n";
+	s << "\tcpb_cnt_minus1 = " << value.cpb_cnt_minus1 << '\n';
+	s << "\tbit_rate_scale = " << value.bit_rate_scale << '\n';
+	s << "\tcpb_size_scale = " << value.cpb_size_scale << '\n';
+	s << "\tbit_rate_value_minus1 = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.bit_rate_value_minus1), DE_ARRAY_END(value.bit_rate_value_minus1)) << '\n';
+	s << "\tcpb_size_value_minus1 = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.cpb_size_value_minus1), DE_ARRAY_END(value.cpb_size_value_minus1)) << '\n';
+	s << "\tcbr_flag = " << '\n' << tcu::formatArray(tcu::Format::HexIterator<deUint8>(DE_ARRAY_BEGIN(value.cbr_flag)), tcu::Format::HexIterator<deUint8>(DE_ARRAY_END(value.cbr_flag))) << '\n';
+	s << "\tinitial_cpb_removal_delay_length_minus1 = " << value.initial_cpb_removal_delay_length_minus1 << '\n';
+	s << "\tcpb_removal_delay_length_minus1 = " << value.cpb_removal_delay_length_minus1 << '\n';
+	s << "\tdpb_output_delay_length_minus1 = " << value.dpb_output_delay_length_minus1 << '\n';
+	s << "\ttime_offset_length = " << value.time_offset_length << '\n';
+	s << '}';
+	return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const StdVideoH264SequenceParameterSetVui& value)
+{
+	s << "StdVideoH264SequenceParameterSetVui = {\n";
+	s << "\taspect_ratio_idc = " << value.aspect_ratio_idc << '\n';
+	s << "\tsar_width = " << value.sar_width << '\n';
+	s << "\tsar_height = " << value.sar_height << '\n';
+	s << "\tvideo_format = " << value.video_format << '\n';
+	s << "\tcolor_primaries = " << value.color_primaries << '\n';
+	s << "\ttransfer_characteristics = " << value.transfer_characteristics << '\n';
+	s << "\tmatrix_coefficients = " << value.matrix_coefficients << '\n';
+	s << "\tnum_units_in_tick = " << value.num_units_in_tick << '\n';
+	s << "\ttime_scale = " << value.time_scale << '\n';
+	s << "\thrd_parameters = " << value.hrd_parameters << '\n';
+	s << "\tnum_reorder_frames = " << value.num_reorder_frames << '\n';
+	s << "\tmax_dec_frame_buffering = " << value.max_dec_frame_buffering << '\n';
+	s << "\tflags = " << value.flags << '\n';
+	s << '}';
+	return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const StdVideoH264SpsFlags& value)
+{
+	s << "StdVideoH264SpsFlags = {\n";
+	s << "\tconstraint_set0_flag = " << value.constraint_set0_flag << '\n';
+	s << "\tconstraint_set1_flag = " << value.constraint_set1_flag << '\n';
+	s << "\tconstraint_set2_flag = " << value.constraint_set2_flag << '\n';
+	s << "\tconstraint_set3_flag = " << value.constraint_set3_flag << '\n';
+	s << "\tconstraint_set4_flag = " << value.constraint_set4_flag << '\n';
+	s << "\tconstraint_set5_flag = " << value.constraint_set5_flag << '\n';
+	s << "\tdirect_8x8_inference_flag = " << value.direct_8x8_inference_flag << '\n';
+	s << "\tmb_adaptive_frame_field_flag = " << value.mb_adaptive_frame_field_flag << '\n';
+	s << "\tframe_mbs_only_flag = " << value.frame_mbs_only_flag << '\n';
+	s << "\tdelta_pic_order_always_zero_flag = " << value.delta_pic_order_always_zero_flag << '\n';
+	s << "\tresidual_colour_transform_flag = " << value.residual_colour_transform_flag << '\n';
+	s << "\tgaps_in_frame_num_value_allowed_flag = " << value.gaps_in_frame_num_value_allowed_flag << '\n';
+	s << "\tfirst_picture_after_seek_flag = " << value.first_picture_after_seek_flag << '\n';
+	s << "\tqpprime_y_zero_transform_bypass_flag = " << value.qpprime_y_zero_transform_bypass_flag << '\n';
+	s << "\tframe_cropping_flag = " << value.frame_cropping_flag << '\n';
+	s << "\tscaling_matrix_present_flag = " << value.scaling_matrix_present_flag << '\n';
+	s << "\tvui_parameters_present_flag = " << value.vui_parameters_present_flag << '\n';
+	s << '}';
+	return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const StdVideoH264ScalingLists& value)
+{
+	s << "StdVideoH264ScalingLists = {\n";
+	s << "\tscaling_list_present_mask = " << value.scaling_list_present_mask << '\n';
+	s << "\tuse_default_scaling_matrix_mask = " << value.use_default_scaling_matrix_mask << '\n';
+	s << "\tScalingList4x4 = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.ScalingList4x4), DE_ARRAY_END(value.ScalingList4x4)) << '\n';
+	s << "\tScalingList8x8 = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.ScalingList8x8), DE_ARRAY_END(value.ScalingList8x8)) << '\n';
+	s << '}';
+	return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const StdVideoH264SequenceParameterSet& value)
+{
+	s << "StdVideoH264SequenceParameterSet = {\n";
+	s << "\tprofile_idc = " << value.profile_idc << '\n';
+	s << "\tlevel_idc = " << value.level_idc << '\n';
+	s << "\tseq_parameter_set_id = " << value.seq_parameter_set_id << '\n';
+	s << "\tchroma_format_idc = " << value.chroma_format_idc << '\n';
+	s << "\tbit_depth_luma_minus8 = " << value.bit_depth_luma_minus8 << '\n';
+	s << "\tbit_depth_chroma_minus8 = " << value.bit_depth_chroma_minus8 << '\n';
+	s << "\tlog2_max_frame_num_minus4 = " << value.log2_max_frame_num_minus4 << '\n';
+	s << "\tpic_order_cnt_type = " << value.pic_order_cnt_type << '\n';
+	s << "\tlog2_max_pic_order_cnt_lsb_minus4 = " << value.log2_max_pic_order_cnt_lsb_minus4 << '\n';
+	s << "\toffset_for_non_ref_pic = " << value.offset_for_non_ref_pic << '\n';
+	s << "\toffset_for_top_to_bottom_field = " << value.offset_for_top_to_bottom_field << '\n';
+	s << "\tnum_ref_frames_in_pic_order_cnt_cycle = " << value.num_ref_frames_in_pic_order_cnt_cycle << '\n';
+	s << "\tmax_num_ref_frames = " << value.max_num_ref_frames << '\n';
+	s << "\tpic_width_in_mbs_minus1 = " << value.pic_width_in_mbs_minus1 << '\n';
+	s << "\tpic_height_in_map_units_minus1 = " << value.pic_height_in_map_units_minus1 << '\n';
+	s << "\tframe_crop_left_offset = " << value.frame_crop_left_offset << '\n';
+	s << "\tframe_crop_right_offset = " << value.frame_crop_right_offset << '\n';
+	s << "\tframe_crop_top_offset = " << value.frame_crop_top_offset << '\n';
+	s << "\tframe_crop_bottom_offset = " << value.frame_crop_bottom_offset << '\n';
+	s << "\tflags = " << value.flags << '\n';
+	s << "\toffset_for_ref_frame = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.offset_for_ref_frame), DE_ARRAY_END(value.offset_for_ref_frame)) << '\n';
+	s << "\tpScalingLists = " << value.pScalingLists << '\n';
+	s << "\tpSequenceParameterSetVui = " << value.pSequenceParameterSetVui << '\n';
+	s << '}';
+	return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const StdVideoH264PpsFlags& value)
+{
+	s << "StdVideoH264PpsFlags = {\n";
+	s << "\ttransform_8x8_mode_flag = " << value.transform_8x8_mode_flag << '\n';
+	s << "\tredundant_pic_cnt_present_flag = " << value.redundant_pic_cnt_present_flag << '\n';
+	s << "\tconstrained_intra_pred_flag = " << value.constrained_intra_pred_flag << '\n';
+	s << "\tdeblocking_filter_control_present_flag = " << value.deblocking_filter_control_present_flag << '\n';
+	s << "\tweighted_bipred_idc_flag = " << value.weighted_bipred_idc_flag << '\n';
+	s << "\tweighted_pred_flag = " << value.weighted_pred_flag << '\n';
+	s << "\tpic_order_present_flag = " << value.pic_order_present_flag << '\n';
+	s << "\tentropy_coding_mode_flag = " << value.entropy_coding_mode_flag << '\n';
+	s << "\tscaling_matrix_present_flag = " << value.scaling_matrix_present_flag << '\n';
+	s << '}';
+	return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const StdVideoH264PictureParameterSet& value)
+{
+	s << "StdVideoH264PictureParameterSet = {\n";
+	s << "\tseq_parameter_set_id = " << value.seq_parameter_set_id << '\n';
+	s << "\tpic_parameter_set_id = " << value.pic_parameter_set_id << '\n';
+	s << "\tnum_ref_idx_l0_default_active_minus1 = " << value.num_ref_idx_l0_default_active_minus1 << '\n';
+	s << "\tnum_ref_idx_l1_default_active_minus1 = " << value.num_ref_idx_l1_default_active_minus1 << '\n';
+	s << "\tweighted_bipred_idc = " << value.weighted_bipred_idc << '\n';
+	s << "\tpic_init_qp_minus26 = " << value.pic_init_qp_minus26 << '\n';
+	s << "\tpic_init_qs_minus26 = " << value.pic_init_qs_minus26 << '\n';
+	s << "\tchroma_qp_index_offset = " << value.chroma_qp_index_offset << '\n';
+	s << "\tsecond_chroma_qp_index_offset = " << value.second_chroma_qp_index_offset << '\n';
+	s << "\tflags = " << value.flags << '\n';
+	s << "\tpScalingLists = " << value.pScalingLists << '\n';
+	s << '}';
+	return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const StdVideoEncodeH264SliceHeaderFlags& value)
+{
+	s << "StdVideoEncodeH264SliceHeaderFlags = {\n";
+	s << "\tidr_flag = " << value.idr_flag << '\n';
+	s << "\tis_reference_flag = " << value.is_reference_flag << '\n';
+	s << "\tnum_ref_idx_active_override_flag = " << value.num_ref_idx_active_override_flag << '\n';
+	s << "\tno_output_of_prior_pics_flag = " << value.no_output_of_prior_pics_flag << '\n';
+	s << "\tlong_term_reference_flag = " << value.long_term_reference_flag << '\n';
+	s << "\tadaptive_ref_pic_marking_mode_flag = " << value.adaptive_ref_pic_marking_mode_flag << '\n';
+	s << "\tno_prior_references_available_flag = " << value.no_prior_references_available_flag << '\n';
+	s << '}';
+	return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const StdVideoEncodeH264PictureInfoFlags& value)
+{
+	s << "StdVideoEncodeH264PictureInfoFlags = {\n";
+	s << "\tidr_flag = " << value.idr_flag << '\n';
+	s << "\tis_reference_flag = " << value.is_reference_flag << '\n';
+	s << "\tlong_term_reference_flag = " << value.long_term_reference_flag << '\n';
+	s << '}';
+	return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const StdVideoEncodeH264RefMgmtFlags& value)
+{
+	s << "StdVideoEncodeH264RefMgmtFlags = {\n";
+	s << "\tref_pic_list_modification_l0_flag = " << value.ref_pic_list_modification_l0_flag << '\n';
+	s << "\tref_pic_list_modification_l1_flag = " << value.ref_pic_list_modification_l1_flag << '\n';
+	s << '}';
+	return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const StdVideoEncodeH264RefListModEntry& value)
+{
+	s << "StdVideoEncodeH264RefListModEntry = {\n";
+	s << "\tmodification_of_pic_nums_idc = " << value.modification_of_pic_nums_idc << '\n';
+	s << "\tabs_diff_pic_num_minus1 = " << value.abs_diff_pic_num_minus1 << '\n';
+	s << "\tlong_term_pic_num = " << value.long_term_pic_num << '\n';
+	s << '}';
+	return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const StdVideoEncodeH264RefPicMarkingEntry& value)
+{
+	s << "StdVideoEncodeH264RefPicMarkingEntry = {\n";
+	s << "\toperation = " << value.operation << '\n';
+	s << "\tdifference_of_pic_nums_minus1 = " << value.difference_of_pic_nums_minus1 << '\n';
+	s << "\tlong_term_pic_num = " << value.long_term_pic_num << '\n';
+	s << "\tlong_term_frame_idx = " << value.long_term_frame_idx << '\n';
+	s << "\tmax_long_term_frame_idx_plus1 = " << value.max_long_term_frame_idx_plus1 << '\n';
+	s << '}';
+	return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const StdVideoEncodeH264RefMemMgmtCtrlOperations& value)
+{
+	s << "StdVideoEncodeH264RefMemMgmtCtrlOperations = {\n";
+	s << "\tflags = " << value.flags << '\n';
+	s << "\trefList0ModOpCount = " << value.refList0ModOpCount << '\n';
+	s << "\tpRefList0ModOperations = " << value.pRefList0ModOperations << '\n';
+	s << "\trefList1ModOpCount = " << value.refList1ModOpCount << '\n';
+	s << "\tpRefList1ModOperations = " << value.pRefList1ModOperations << '\n';
+	s << "\trefPicMarkingOpCount = " << value.refPicMarkingOpCount << '\n';
+	s << "\tpRefPicMarkingOperations = " << value.pRefPicMarkingOperations << '\n';
+	s << '}';
+	return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const StdVideoEncodeH264PictureInfo& value)
+{
+	s << "StdVideoEncodeH264PictureInfo = {\n";
+	s << "\tflags = " << value.flags << '\n';
+	s << "\tpictureType = " << value.pictureType << '\n';
+	s << "\tframeNum = " << value.frameNum << '\n';
+	s << "\tpictureOrderCount = " << value.pictureOrderCount << '\n';
+	s << "\tlong_term_pic_num = " << value.long_term_pic_num << '\n';
+	s << "\tlong_term_frame_idx = " << value.long_term_frame_idx << '\n';
+	s << '}';
+	return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const StdVideoEncodeH264SliceHeader& value)
+{
+	s << "StdVideoEncodeH264SliceHeader = {\n";
+	s << "\tflags = " << value.flags << '\n';
+	s << "\tslice_type = " << value.slice_type << '\n';
+	s << "\tseq_parameter_set_id = " << value.seq_parameter_set_id << '\n';
+	s << "\tpic_parameter_set_id = " << value.pic_parameter_set_id << '\n';
+	s << "\tidr_pic_id = " << value.idr_pic_id << '\n';
+	s << "\tnum_ref_idx_l0_active_minus1 = " << value.num_ref_idx_l0_active_minus1 << '\n';
+	s << "\tnum_ref_idx_l1_active_minus1 = " << value.num_ref_idx_l1_active_minus1 << '\n';
+	s << "\tcabac_init_idc = " << value.cabac_init_idc << '\n';
+	s << "\tdisable_deblocking_filter_idc = " << value.disable_deblocking_filter_idc << '\n';
+	s << "\tslice_alpha_c0_offset_div2 = " << value.slice_alpha_c0_offset_div2 << '\n';
+	s << "\tslice_beta_offset_div2 = " << value.slice_beta_offset_div2 << '\n';
+	s << "\tpMemMgmtCtrlOperations = " << value.pMemMgmtCtrlOperations << '\n';
+	s << '}';
+	return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkVideoEncodeH264CapabilitiesEXT& value)
+{
+	s << "VkVideoEncodeH264CapabilitiesEXT = {\n";
+	s << "\tsType = " << value.sType << '\n';
+	s << "\tpNext = " << value.pNext << '\n';
+	s << "\tflags = " << getVideoEncodeH264CapabilitiesFlagsEXTStr(value.flags) << '\n';
+	s << "\tinputModeFlags = " << getVideoEncodeH264InputModeFlagsEXTStr(value.inputModeFlags) << '\n';
+	s << "\toutputModeFlags = " << getVideoEncodeH264OutputModeFlagsEXTStr(value.outputModeFlags) << '\n';
+	s << "\tminPictureSizeInMbs = " << value.minPictureSizeInMbs << '\n';
+	s << "\tmaxPictureSizeInMbs = " << value.maxPictureSizeInMbs << '\n';
+	s << "\tinputImageDataAlignment = " << value.inputImageDataAlignment << '\n';
+	s << "\tmaxNumL0ReferenceForP = " << value.maxNumL0ReferenceForP << '\n';
+	s << "\tmaxNumL0ReferenceForB = " << value.maxNumL0ReferenceForB << '\n';
+	s << "\tmaxNumL1Reference = " << value.maxNumL1Reference << '\n';
+	s << "\tqualityLevelCount = " << value.qualityLevelCount << '\n';
+	s << "\tstdExtensionVersion = " << value.stdExtensionVersion << '\n';
+	s << '}';
+	return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkVideoEncodeH264SessionCreateInfoEXT& value)
+{
+	s << "VkVideoEncodeH264SessionCreateInfoEXT = {\n";
+	s << "\tsType = " << value.sType << '\n';
+	s << "\tpNext = " << value.pNext << '\n';
+	s << "\tflags = " << getVideoEncodeH264CreateFlagsEXTStr(value.flags) << '\n';
+	s << "\tmaxPictureSizeInMbs = " << value.maxPictureSizeInMbs << '\n';
+	s << "\tpStdExtensionVersion = " << value.pStdExtensionVersion << '\n';
+	s << '}';
+	return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkVideoEncodeH264SessionParametersAddInfoEXT& value)
+{
+	s << "VkVideoEncodeH264SessionParametersAddInfoEXT = {\n";
+	s << "\tsType = " << value.sType << '\n';
+	s << "\tpNext = " << value.pNext << '\n';
+	s << "\tspsStdCount = " << value.spsStdCount << '\n';
+	s << "\tpSpsStd = " << value.pSpsStd << '\n';
+	s << "\tppsStdCount = " << value.ppsStdCount << '\n';
+	s << "\tpPpsStd = " << value.pPpsStd << '\n';
+	s << '}';
+	return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkVideoEncodeH264SessionParametersCreateInfoEXT& value)
+{
+	s << "VkVideoEncodeH264SessionParametersCreateInfoEXT = {\n";
+	s << "\tsType = " << value.sType << '\n';
+	s << "\tpNext = " << value.pNext << '\n';
+	s << "\tmaxSpsStdCount = " << value.maxSpsStdCount << '\n';
+	s << "\tmaxPpsStdCount = " << value.maxPpsStdCount << '\n';
+	s << "\tpParametersAddInfo = " << value.pParametersAddInfo << '\n';
+	s << '}';
+	return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkVideoEncodeH264DpbSlotInfoEXT& value)
+{
+	s << "VkVideoEncodeH264DpbSlotInfoEXT = {\n";
+	s << "\tsType = " << value.sType << '\n';
+	s << "\tpNext = " << value.pNext << '\n';
+	s << "\tslotIndex = " << value.slotIndex << '\n';
+	s << "\tpStdPictureInfo = " << value.pStdPictureInfo << '\n';
+	s << '}';
+	return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkVideoEncodeH264NaluSliceEXT& value)
+{
+	s << "VkVideoEncodeH264NaluSliceEXT = {\n";
+	s << "\tsType = " << value.sType << '\n';
+	s << "\tpNext = " << value.pNext << '\n';
+	s << "\tpSliceHeaderStd = " << value.pSliceHeaderStd << '\n';
+	s << "\tmbCount = " << value.mbCount << '\n';
+	s << "\trefFinalList0EntryCount = " << value.refFinalList0EntryCount << '\n';
+	s << "\tpRefFinalList0Entries = " << value.pRefFinalList0Entries << '\n';
+	s << "\trefFinalList1EntryCount = " << value.refFinalList1EntryCount << '\n';
+	s << "\tpRefFinalList1Entries = " << value.pRefFinalList1Entries << '\n';
+	s << "\tprecedingNaluBytes = " << value.precedingNaluBytes << '\n';
+	s << "\tminQp = " << value.minQp << '\n';
+	s << "\tmaxQp = " << value.maxQp << '\n';
+	s << '}';
+	return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkVideoEncodeH264VclFrameInfoEXT& value)
+{
+	s << "VkVideoEncodeH264VclFrameInfoEXT = {\n";
+	s << "\tsType = " << value.sType << '\n';
+	s << "\tpNext = " << value.pNext << '\n';
+	s << "\trefDefaultFinalList0EntryCount = " << value.refDefaultFinalList0EntryCount << '\n';
+	s << "\tpRefDefaultFinalList0Entries = " << value.pRefDefaultFinalList0Entries << '\n';
+	s << "\trefDefaultFinalList1EntryCount = " << value.refDefaultFinalList1EntryCount << '\n';
+	s << "\tpRefDefaultFinalList1Entries = " << value.pRefDefaultFinalList1Entries << '\n';
+	s << "\tnaluSliceEntryCount = " << value.naluSliceEntryCount << '\n';
+	s << "\tpNaluSliceEntries = " << value.pNaluSliceEntries << '\n';
+	s << "\tpCurrentPictureInfo = " << value.pCurrentPictureInfo << '\n';
+	s << '}';
+	return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkVideoEncodeH264EmitPictureParametersEXT& value)
+{
+	s << "VkVideoEncodeH264EmitPictureParametersEXT = {\n";
+	s << "\tsType = " << value.sType << '\n';
+	s << "\tpNext = " << value.pNext << '\n';
+	s << "\tspsId = " << value.spsId << '\n';
+	s << "\temitSpsEnable = " << value.emitSpsEnable << '\n';
+	s << "\tppsIdEntryCount = " << value.ppsIdEntryCount << '\n';
+	s << "\tppsIdEntries = " << value.ppsIdEntries << '\n';
+	s << '}';
+	return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkVideoEncodeH264ProfileEXT& value)
+{
+	s << "VkVideoEncodeH264ProfileEXT = {\n";
+	s << "\tsType = " << value.sType << '\n';
+	s << "\tpNext = " << value.pNext << '\n';
+	s << "\tstdProfileIdc = " << value.stdProfileIdc << '\n';
+	s << '}';
+	return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const StdVideoDecodeH264PictureInfoFlags& value)
+{
+	s << "StdVideoDecodeH264PictureInfoFlags = {\n";
+	s << "\tfield_pic_flag = " << value.field_pic_flag << '\n';
+	s << "\tis_intra = " << value.is_intra << '\n';
+	s << "\tbottom_field_flag = " << value.bottom_field_flag << '\n';
+	s << "\tis_reference = " << value.is_reference << '\n';
+	s << "\tcomplementary_field_pair = " << value.complementary_field_pair << '\n';
+	s << '}';
+	return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const StdVideoDecodeH264PictureInfo& value)
+{
+	s << "StdVideoDecodeH264PictureInfo = {\n";
+	s << "\tseq_parameter_set_id = " << value.seq_parameter_set_id << '\n';
+	s << "\tpic_parameter_set_id = " << value.pic_parameter_set_id << '\n';
+	s << "\treserved = " << value.reserved << '\n';
+	s << "\tframe_num = " << value.frame_num << '\n';
+	s << "\tidr_pic_id = " << value.idr_pic_id << '\n';
+	s << "\tPicOrderCnt = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.PicOrderCnt), DE_ARRAY_END(value.PicOrderCnt)) << '\n';
+	s << "\tflags = " << value.flags << '\n';
+	s << '}';
+	return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const StdVideoDecodeH264ReferenceInfoFlags& value)
+{
+	s << "StdVideoDecodeH264ReferenceInfoFlags = {\n";
+	s << "\ttop_field_flag = " << value.top_field_flag << '\n';
+	s << "\tbottom_field_flag = " << value.bottom_field_flag << '\n';
+	s << "\tis_long_term = " << value.is_long_term << '\n';
+	s << "\tis_non_existing = " << value.is_non_existing << '\n';
+	s << '}';
+	return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const StdVideoDecodeH264ReferenceInfo& value)
+{
+	s << "StdVideoDecodeH264ReferenceInfo = {\n";
+	s << "\tFrameNum = " << value.FrameNum << '\n';
+	s << "\treserved = " << value.reserved << '\n';
+	s << "\tPicOrderCnt = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.PicOrderCnt), DE_ARRAY_END(value.PicOrderCnt)) << '\n';
+	s << "\tflags = " << value.flags << '\n';
+	s << '}';
+	return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const StdVideoDecodeH264MvcElementFlags& value)
+{
+	s << "StdVideoDecodeH264MvcElementFlags = {\n";
+	s << "\tnon_idr = " << value.non_idr << '\n';
+	s << "\tanchor_pic = " << value.anchor_pic << '\n';
+	s << "\tinter_view = " << value.inter_view << '\n';
+	s << '}';
+	return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const StdVideoDecodeH264MvcElement& value)
+{
+	s << "StdVideoDecodeH264MvcElement = {\n";
+	s << "\tflags = " << value.flags << '\n';
+	s << "\tviewOrderIndex = " << value.viewOrderIndex << '\n';
+	s << "\tviewId = " << value.viewId << '\n';
+	s << "\ttemporalId = " << value.temporalId << '\n';
+	s << "\tpriorityId = " << value.priorityId << '\n';
+	s << "\tnumOfAnchorRefsInL0 = " << value.numOfAnchorRefsInL0 << '\n';
+	s << "\tviewIdOfAnchorRefsInL0 = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.viewIdOfAnchorRefsInL0), DE_ARRAY_END(value.viewIdOfAnchorRefsInL0)) << '\n';
+	s << "\tnumOfAnchorRefsInL1 = " << value.numOfAnchorRefsInL1 << '\n';
+	s << "\tviewIdOfAnchorRefsInL1 = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.viewIdOfAnchorRefsInL1), DE_ARRAY_END(value.viewIdOfAnchorRefsInL1)) << '\n';
+	s << "\tnumOfNonAnchorRefsInL0 = " << value.numOfNonAnchorRefsInL0 << '\n';
+	s << "\tviewIdOfNonAnchorRefsInL0 = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.viewIdOfNonAnchorRefsInL0), DE_ARRAY_END(value.viewIdOfNonAnchorRefsInL0)) << '\n';
+	s << "\tnumOfNonAnchorRefsInL1 = " << value.numOfNonAnchorRefsInL1 << '\n';
+	s << "\tviewIdOfNonAnchorRefsInL1 = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.viewIdOfNonAnchorRefsInL1), DE_ARRAY_END(value.viewIdOfNonAnchorRefsInL1)) << '\n';
+	s << '}';
+	return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const StdVideoDecodeH264Mvc& value)
+{
+	s << "StdVideoDecodeH264Mvc = {\n";
+	s << "\tviewId0 = " << value.viewId0 << '\n';
+	s << "\tmvcElementCount = " << value.mvcElementCount << '\n';
+	s << "\tpMvcElements = " << value.pMvcElements << '\n';
+	s << '}';
+	return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkVideoDecodeH264ProfileEXT& value)
+{
+	s << "VkVideoDecodeH264ProfileEXT = {\n";
+	s << "\tsType = " << value.sType << '\n';
+	s << "\tpNext = " << value.pNext << '\n';
+	s << "\tstdProfileIdc = " << value.stdProfileIdc << '\n';
+	s << "\tfieldLayout = " << getVideoDecodeH264FieldLayoutFlagsEXTStr(value.fieldLayout) << '\n';
+	s << '}';
+	return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkVideoDecodeH264CapabilitiesEXT& value)
+{
+	s << "VkVideoDecodeH264CapabilitiesEXT = {\n";
+	s << "\tsType = " << value.sType << '\n';
+	s << "\tpNext = " << value.pNext << '\n';
+	s << "\tmaxLevel = " << value.maxLevel << '\n';
+	s << "\tfieldOffsetGranularity = " << value.fieldOffsetGranularity << '\n';
+	s << "\tstdExtensionVersion = " << value.stdExtensionVersion << '\n';
+	s << '}';
+	return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkVideoDecodeH264SessionCreateInfoEXT& value)
+{
+	s << "VkVideoDecodeH264SessionCreateInfoEXT = {\n";
+	s << "\tsType = " << value.sType << '\n';
+	s << "\tpNext = " << value.pNext << '\n';
+	s << "\tflags = " << getVideoDecodeH264CreateFlagsEXTStr(value.flags) << '\n';
+	s << "\tpStdExtensionVersion = " << value.pStdExtensionVersion << '\n';
+	s << '}';
+	return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkVideoDecodeH264SessionParametersAddInfoEXT& value)
+{
+	s << "VkVideoDecodeH264SessionParametersAddInfoEXT = {\n";
+	s << "\tsType = " << value.sType << '\n';
+	s << "\tpNext = " << value.pNext << '\n';
+	s << "\tspsStdCount = " << value.spsStdCount << '\n';
+	s << "\tpSpsStd = " << value.pSpsStd << '\n';
+	s << "\tppsStdCount = " << value.ppsStdCount << '\n';
+	s << "\tpPpsStd = " << value.pPpsStd << '\n';
+	s << '}';
+	return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkVideoDecodeH264SessionParametersCreateInfoEXT& value)
+{
+	s << "VkVideoDecodeH264SessionParametersCreateInfoEXT = {\n";
+	s << "\tsType = " << value.sType << '\n';
+	s << "\tpNext = " << value.pNext << '\n';
+	s << "\tmaxSpsStdCount = " << value.maxSpsStdCount << '\n';
+	s << "\tmaxPpsStdCount = " << value.maxPpsStdCount << '\n';
+	s << "\tpParametersAddInfo = " << value.pParametersAddInfo << '\n';
+	s << '}';
+	return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkVideoDecodeH264PictureInfoEXT& value)
+{
+	s << "VkVideoDecodeH264PictureInfoEXT = {\n";
+	s << "\tsType = " << value.sType << '\n';
+	s << "\tpNext = " << value.pNext << '\n';
+	s << "\tpStdPictureInfo = " << value.pStdPictureInfo << '\n';
+	s << "\tslicesCount = " << value.slicesCount << '\n';
+	s << "\tpSlicesDataOffsets = " << value.pSlicesDataOffsets << '\n';
+	s << '}';
+	return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkVideoDecodeH264MvcEXT& value)
+{
+	s << "VkVideoDecodeH264MvcEXT = {\n";
+	s << "\tsType = " << value.sType << '\n';
+	s << "\tpNext = " << value.pNext << '\n';
+	s << "\tpStdMvc = " << value.pStdMvc << '\n';
+	s << '}';
+	return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkVideoDecodeH264DpbSlotInfoEXT& value)
+{
+	s << "VkVideoDecodeH264DpbSlotInfoEXT = {\n";
+	s << "\tsType = " << value.sType << '\n';
+	s << "\tpNext = " << value.pNext << '\n';
+	s << "\tpStdReferenceInfo = " << value.pStdReferenceInfo << '\n';
+	s << '}';
+	return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const StdVideoH265DecPicBufMgr& value)
+{
+	s << "StdVideoH265DecPicBufMgr = {\n";
+	s << "\tmax_latency_increase_plus1 = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.max_latency_increase_plus1), DE_ARRAY_END(value.max_latency_increase_plus1)) << '\n';
+	s << "\tmax_dec_pic_buffering_minus1 = " << '\n' << tcu::formatArray(tcu::Format::HexIterator<deUint8>(DE_ARRAY_BEGIN(value.max_dec_pic_buffering_minus1)), tcu::Format::HexIterator<deUint8>(DE_ARRAY_END(value.max_dec_pic_buffering_minus1))) << '\n';
+	s << "\tmax_num_reorder_pics = " << '\n' << tcu::formatArray(tcu::Format::HexIterator<deUint8>(DE_ARRAY_BEGIN(value.max_num_reorder_pics)), tcu::Format::HexIterator<deUint8>(DE_ARRAY_END(value.max_num_reorder_pics))) << '\n';
+	s << '}';
+	return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const StdVideoH265SubLayerHrdParameters& value)
+{
+	s << "StdVideoH265SubLayerHrdParameters = {\n";
+	s << "\tbit_rate_value_minus1 = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.bit_rate_value_minus1), DE_ARRAY_END(value.bit_rate_value_minus1)) << '\n';
+	s << "\tcpb_size_value_minus1 = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.cpb_size_value_minus1), DE_ARRAY_END(value.cpb_size_value_minus1)) << '\n';
+	s << "\tcpb_size_du_value_minus1 = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.cpb_size_du_value_minus1), DE_ARRAY_END(value.cpb_size_du_value_minus1)) << '\n';
+	s << "\tbit_rate_du_value_minus1 = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.bit_rate_du_value_minus1), DE_ARRAY_END(value.bit_rate_du_value_minus1)) << '\n';
+	s << "\tcbr_flag = " << value.cbr_flag << '\n';
+	s << '}';
+	return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const StdVideoH265HrdFlags& value)
+{
+	s << "StdVideoH265HrdFlags = {\n";
+	s << "\tnal_hrd_parameters_present_flag = " << value.nal_hrd_parameters_present_flag << '\n';
+	s << "\tvcl_hrd_parameters_present_flag = " << value.vcl_hrd_parameters_present_flag << '\n';
+	s << "\tsub_pic_hrd_params_present_flag = " << value.sub_pic_hrd_params_present_flag << '\n';
+	s << "\tsub_pic_cpb_params_in_pic_timing_sei_flag = " << value.sub_pic_cpb_params_in_pic_timing_sei_flag << '\n';
+	s << "\tfixed_pic_rate_general_flag = " << value.fixed_pic_rate_general_flag << '\n';
+	s << "\tfixed_pic_rate_within_cvs_flag = " << value.fixed_pic_rate_within_cvs_flag << '\n';
+	s << "\tlow_delay_hrd_flag = " << value.low_delay_hrd_flag << '\n';
+	s << '}';
+	return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const StdVideoH265HrdParameters& value)
+{
+	s << "StdVideoH265HrdParameters = {\n";
+	s << "\ttick_divisor_minus2 = " << value.tick_divisor_minus2 << '\n';
+	s << "\tdu_cpb_removal_delay_increment_length_minus1 = " << value.du_cpb_removal_delay_increment_length_minus1 << '\n';
+	s << "\tdpb_output_delay_du_length_minus1 = " << value.dpb_output_delay_du_length_minus1 << '\n';
+	s << "\tbit_rate_scale = " << value.bit_rate_scale << '\n';
+	s << "\tcpb_size_scale = " << value.cpb_size_scale << '\n';
+	s << "\tcpb_size_du_scale = " << value.cpb_size_du_scale << '\n';
+	s << "\tinitial_cpb_removal_delay_length_minus1 = " << value.initial_cpb_removal_delay_length_minus1 << '\n';
+	s << "\tau_cpb_removal_delay_length_minus1 = " << value.au_cpb_removal_delay_length_minus1 << '\n';
+	s << "\tdpb_output_delay_length_minus1 = " << value.dpb_output_delay_length_minus1 << '\n';
+	s << "\tcpb_cnt_minus1 = " << '\n' << tcu::formatArray(tcu::Format::HexIterator<deUint8>(DE_ARRAY_BEGIN(value.cpb_cnt_minus1)), tcu::Format::HexIterator<deUint8>(DE_ARRAY_END(value.cpb_cnt_minus1))) << '\n';
+	s << "\telemental_duration_in_tc_minus1 = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.elemental_duration_in_tc_minus1), DE_ARRAY_END(value.elemental_duration_in_tc_minus1)) << '\n';
+	s << "\tSubLayerHrdParametersNal = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.SubLayerHrdParametersNal), DE_ARRAY_END(value.SubLayerHrdParametersNal)) << '\n';
+	s << "\tSubLayerHrdParametersVcl = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.SubLayerHrdParametersVcl), DE_ARRAY_END(value.SubLayerHrdParametersVcl)) << '\n';
+	s << "\tflags = " << value.flags << '\n';
+	s << '}';
+	return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const StdVideoH265VpsFlags& value)
+{
+	s << "StdVideoH265VpsFlags = {\n";
+	s << "\tvps_temporal_id_nesting_flag = " << value.vps_temporal_id_nesting_flag << '\n';
+	s << "\tvps_sub_layer_ordering_info_present_flag = " << value.vps_sub_layer_ordering_info_present_flag << '\n';
+	s << "\tvps_timing_info_present_flag = " << value.vps_timing_info_present_flag << '\n';
+	s << "\tvps_poc_proportional_to_timing_flag = " << value.vps_poc_proportional_to_timing_flag << '\n';
+	s << '}';
+	return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const StdVideoH265VideoParameterSet& value)
+{
+	s << "StdVideoH265VideoParameterSet = {\n";
+	s << "\tvps_video_parameter_set_id = " << value.vps_video_parameter_set_id << '\n';
+	s << "\tvps_max_sub_layers_minus1 = " << value.vps_max_sub_layers_minus1 << '\n';
+	s << "\tvps_num_units_in_tick = " << value.vps_num_units_in_tick << '\n';
+	s << "\tvps_time_scale = " << value.vps_time_scale << '\n';
+	s << "\tvps_num_ticks_poc_diff_one_minus1 = " << value.vps_num_ticks_poc_diff_one_minus1 << '\n';
+	s << "\tpDecPicBufMgr = " << value.pDecPicBufMgr << '\n';
+	s << "\thrd_parameters = " << value.hrd_parameters << '\n';
+	s << "\tflags = " << value.flags << '\n';
+	s << '}';
+	return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const StdVideoH265ScalingLists& value)
+{
+	s << "StdVideoH265ScalingLists = {\n";
+	s << "\tScalingList4x4 = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.ScalingList4x4), DE_ARRAY_END(value.ScalingList4x4)) << '\n';
+	s << "\tScalingList8x8 = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.ScalingList8x8), DE_ARRAY_END(value.ScalingList8x8)) << '\n';
+	s << "\tScalingList16x16 = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.ScalingList16x16), DE_ARRAY_END(value.ScalingList16x16)) << '\n';
+	s << "\tScalingList32x32 = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.ScalingList32x32), DE_ARRAY_END(value.ScalingList32x32)) << '\n';
+	s << "\tScalingListDCCoef16x16 = " << '\n' << tcu::formatArray(tcu::Format::HexIterator<deUint8>(DE_ARRAY_BEGIN(value.ScalingListDCCoef16x16)), tcu::Format::HexIterator<deUint8>(DE_ARRAY_END(value.ScalingListDCCoef16x16))) << '\n';
+	s << "\tScalingListDCCoef32x32 = " << '\n' << tcu::formatArray(tcu::Format::HexIterator<deUint8>(DE_ARRAY_BEGIN(value.ScalingListDCCoef32x32)), tcu::Format::HexIterator<deUint8>(DE_ARRAY_END(value.ScalingListDCCoef32x32))) << '\n';
+	s << '}';
+	return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const StdVideoH265SpsVuiFlags& value)
+{
+	s << "StdVideoH265SpsVuiFlags = {\n";
+	s << "\taspect_ratio_info_present_flag = " << value.aspect_ratio_info_present_flag << '\n';
+	s << "\toverscan_info_present_flag = " << value.overscan_info_present_flag << '\n';
+	s << "\toverscan_appropriate_flag = " << value.overscan_appropriate_flag << '\n';
+	s << "\tvideo_signal_type_present_flag = " << value.video_signal_type_present_flag << '\n';
+	s << "\tvideo_full_range_flag = " << value.video_full_range_flag << '\n';
+	s << "\tcolour_description_present_flag = " << value.colour_description_present_flag << '\n';
+	s << "\tchroma_loc_info_present_flag = " << value.chroma_loc_info_present_flag << '\n';
+	s << "\tneutral_chroma_indication_flag = " << value.neutral_chroma_indication_flag << '\n';
+	s << "\tfield_seq_flag = " << value.field_seq_flag << '\n';
+	s << "\tframe_field_info_present_flag = " << value.frame_field_info_present_flag << '\n';
+	s << "\tdefault_display_window_flag = " << value.default_display_window_flag << '\n';
+	s << "\tvui_timing_info_present_flag = " << value.vui_timing_info_present_flag << '\n';
+	s << "\tvui_poc_proportional_to_timing_flag = " << value.vui_poc_proportional_to_timing_flag << '\n';
+	s << "\tvui_hrd_parameters_present_flag = " << value.vui_hrd_parameters_present_flag << '\n';
+	s << "\tbitstream_restriction_flag = " << value.bitstream_restriction_flag << '\n';
+	s << "\ttiles_fixed_structure_flag = " << value.tiles_fixed_structure_flag << '\n';
+	s << "\tmotion_vectors_over_pic_boundaries_flag = " << value.motion_vectors_over_pic_boundaries_flag << '\n';
+	s << "\trestricted_ref_pic_lists_flag = " << value.restricted_ref_pic_lists_flag << '\n';
+	s << '}';
+	return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const StdVideoH265SequenceParameterSetVui& value)
+{
+	s << "StdVideoH265SequenceParameterSetVui = {\n";
+	s << "\taspect_ratio_idc = " << value.aspect_ratio_idc << '\n';
+	s << "\tsar_width = " << value.sar_width << '\n';
+	s << "\tsar_height = " << value.sar_height << '\n';
+	s << "\tvideo_format = " << value.video_format << '\n';
+	s << "\tcolour_primaries = " << value.colour_primaries << '\n';
+	s << "\ttransfer_characteristics = " << value.transfer_characteristics << '\n';
+	s << "\tmatrix_coeffs = " << value.matrix_coeffs << '\n';
+	s << "\tchroma_sample_loc_type_top_field = " << value.chroma_sample_loc_type_top_field << '\n';
+	s << "\tchroma_sample_loc_type_bottom_field = " << value.chroma_sample_loc_type_bottom_field << '\n';
+	s << "\tdef_disp_win_left_offset = " << value.def_disp_win_left_offset << '\n';
+	s << "\tdef_disp_win_right_offset = " << value.def_disp_win_right_offset << '\n';
+	s << "\tdef_disp_win_top_offset = " << value.def_disp_win_top_offset << '\n';
+	s << "\tdef_disp_win_bottom_offset = " << value.def_disp_win_bottom_offset << '\n';
+	s << "\tvui_num_units_in_tick = " << value.vui_num_units_in_tick << '\n';
+	s << "\tvui_time_scale = " << value.vui_time_scale << '\n';
+	s << "\tvui_num_ticks_poc_diff_one_minus1 = " << value.vui_num_ticks_poc_diff_one_minus1 << '\n';
+	s << "\thrd_parameters = " << value.hrd_parameters << '\n';
+	s << "\tmin_spatial_segmentation_idc = " << value.min_spatial_segmentation_idc << '\n';
+	s << "\tmax_bytes_per_pic_denom = " << value.max_bytes_per_pic_denom << '\n';
+	s << "\tmax_bits_per_min_cu_denom = " << value.max_bits_per_min_cu_denom << '\n';
+	s << "\tlog2_max_mv_length_horizontal = " << value.log2_max_mv_length_horizontal << '\n';
+	s << "\tlog2_max_mv_length_vertical = " << value.log2_max_mv_length_vertical << '\n';
+	s << "\tflags = " << value.flags << '\n';
+	s << '}';
+	return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const StdVideoH265PredictorPaletteEntries& value)
+{
+	s << "StdVideoH265PredictorPaletteEntries = {\n";
+	s << "\tPredictorPaletteEntries = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.PredictorPaletteEntries), DE_ARRAY_END(value.PredictorPaletteEntries)) << '\n';
+	s << '}';
+	return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const StdVideoH265SpsFlags& value)
+{
+	s << "StdVideoH265SpsFlags = {\n";
+	s << "\tsps_temporal_id_nesting_flag = " << value.sps_temporal_id_nesting_flag << '\n';
+	s << "\tseparate_colour_plane_flag = " << value.separate_colour_plane_flag << '\n';
+	s << "\tscaling_list_enabled_flag = " << value.scaling_list_enabled_flag << '\n';
+	s << "\tsps_scaling_list_data_present_flag = " << value.sps_scaling_list_data_present_flag << '\n';
+	s << "\tamp_enabled_flag = " << value.amp_enabled_flag << '\n';
+	s << "\tsample_adaptive_offset_enabled_flag = " << value.sample_adaptive_offset_enabled_flag << '\n';
+	s << "\tpcm_enabled_flag = " << value.pcm_enabled_flag << '\n';
+	s << "\tpcm_loop_filter_disabled_flag = " << value.pcm_loop_filter_disabled_flag << '\n';
+	s << "\tlong_term_ref_pics_present_flag = " << value.long_term_ref_pics_present_flag << '\n';
+	s << "\tsps_temporal_mvp_enabled_flag = " << value.sps_temporal_mvp_enabled_flag << '\n';
+	s << "\tstrong_intra_smoothing_enabled_flag = " << value.strong_intra_smoothing_enabled_flag << '\n';
+	s << "\tvui_parameters_present_flag = " << value.vui_parameters_present_flag << '\n';
+	s << "\tsps_extension_present_flag = " << value.sps_extension_present_flag << '\n';
+	s << "\tsps_range_extension_flag = " << value.sps_range_extension_flag << '\n';
+	s << "\ttransform_skip_rotation_enabled_flag = " << value.transform_skip_rotation_enabled_flag << '\n';
+	s << "\ttransform_skip_context_enabled_flag = " << value.transform_skip_context_enabled_flag << '\n';
+	s << "\timplicit_rdpcm_enabled_flag = " << value.implicit_rdpcm_enabled_flag << '\n';
+	s << "\texplicit_rdpcm_enabled_flag = " << value.explicit_rdpcm_enabled_flag << '\n';
+	s << "\textended_precision_processing_flag = " << value.extended_precision_processing_flag << '\n';
+	s << "\tintra_smoothing_disabled_flag = " << value.intra_smoothing_disabled_flag << '\n';
+	s << "\thigh_precision_offsets_enabled_flag = " << value.high_precision_offsets_enabled_flag << '\n';
+	s << "\tpersistent_rice_adaptation_enabled_flag = " << value.persistent_rice_adaptation_enabled_flag << '\n';
+	s << "\tcabac_bypass_alignment_enabled_flag = " << value.cabac_bypass_alignment_enabled_flag << '\n';
+	s << "\tsps_curr_pic_ref_enabled_flag = " << value.sps_curr_pic_ref_enabled_flag << '\n';
+	s << "\tpalette_mode_enabled_flag = " << value.palette_mode_enabled_flag << '\n';
+	s << "\tsps_palette_predictor_initializer_present_flag = " << value.sps_palette_predictor_initializer_present_flag << '\n';
+	s << "\tintra_boundary_filtering_disabled_flag = " << value.intra_boundary_filtering_disabled_flag << '\n';
+	s << '}';
+	return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const StdVideoH265SequenceParameterSet& value)
+{
+	s << "StdVideoH265SequenceParameterSet = {\n";
+	s << "\tprofile_idc = " << value.profile_idc << '\n';
+	s << "\tlevel_idc = " << value.level_idc << '\n';
+	s << "\tpic_width_in_luma_samples = " << value.pic_width_in_luma_samples << '\n';
+	s << "\tpic_height_in_luma_samples = " << value.pic_height_in_luma_samples << '\n';
+	s << "\tsps_video_parameter_set_id = " << value.sps_video_parameter_set_id << '\n';
+	s << "\tsps_max_sub_layers_minus1 = " << value.sps_max_sub_layers_minus1 << '\n';
+	s << "\tsps_seq_parameter_set_id = " << value.sps_seq_parameter_set_id << '\n';
+	s << "\tchroma_format_idc = " << value.chroma_format_idc << '\n';
+	s << "\tbit_depth_luma_minus8 = " << value.bit_depth_luma_minus8 << '\n';
+	s << "\tbit_depth_chroma_minus8 = " << value.bit_depth_chroma_minus8 << '\n';
+	s << "\tlog2_max_pic_order_cnt_lsb_minus4 = " << value.log2_max_pic_order_cnt_lsb_minus4 << '\n';
+	s << "\tsps_max_dec_pic_buffering_minus1 = " << value.sps_max_dec_pic_buffering_minus1 << '\n';
+	s << "\tlog2_min_luma_coding_block_size_minus3 = " << value.log2_min_luma_coding_block_size_minus3 << '\n';
+	s << "\tlog2_diff_max_min_luma_coding_block_size = " << value.log2_diff_max_min_luma_coding_block_size << '\n';
+	s << "\tlog2_min_luma_transform_block_size_minus2 = " << value.log2_min_luma_transform_block_size_minus2 << '\n';
+	s << "\tlog2_diff_max_min_luma_transform_block_size = " << value.log2_diff_max_min_luma_transform_block_size << '\n';
+	s << "\tmax_transform_hierarchy_depth_inter = " << value.max_transform_hierarchy_depth_inter << '\n';
+	s << "\tmax_transform_hierarchy_depth_intra = " << value.max_transform_hierarchy_depth_intra << '\n';
+	s << "\tnum_short_term_ref_pic_sets = " << value.num_short_term_ref_pic_sets << '\n';
+	s << "\tnum_long_term_ref_pics_sps = " << value.num_long_term_ref_pics_sps << '\n';
+	s << "\tpcm_sample_bit_depth_luma_minus1 = " << value.pcm_sample_bit_depth_luma_minus1 << '\n';
+	s << "\tpcm_sample_bit_depth_chroma_minus1 = " << value.pcm_sample_bit_depth_chroma_minus1 << '\n';
+	s << "\tlog2_min_pcm_luma_coding_block_size_minus3 = " << value.log2_min_pcm_luma_coding_block_size_minus3 << '\n';
+	s << "\tlog2_diff_max_min_pcm_luma_coding_block_size = " << value.log2_diff_max_min_pcm_luma_coding_block_size << '\n';
+	s << "\tconf_win_left_offset = " << value.conf_win_left_offset << '\n';
+	s << "\tconf_win_right_offset = " << value.conf_win_right_offset << '\n';
+	s << "\tconf_win_top_offset = " << value.conf_win_top_offset << '\n';
+	s << "\tconf_win_bottom_offset = " << value.conf_win_bottom_offset << '\n';
+	s << "\tpDecPicBufMgr = " << value.pDecPicBufMgr << '\n';
+	s << "\tflags = " << value.flags << '\n';
+	s << "\tpScalingLists = " << value.pScalingLists << '\n';
+	s << "\tpSequenceParameterSetVui = " << value.pSequenceParameterSetVui << '\n';
+	s << "\tpalette_max_size = " << value.palette_max_size << '\n';
+	s << "\tdelta_palette_max_predictor_size = " << value.delta_palette_max_predictor_size << '\n';
+	s << "\tmotion_vector_resolution_control_idc = " << value.motion_vector_resolution_control_idc << '\n';
+	s << "\tsps_num_palette_predictor_initializer_minus1 = " << value.sps_num_palette_predictor_initializer_minus1 << '\n';
+	s << "\tpPredictorPaletteEntries = " << value.pPredictorPaletteEntries << '\n';
+	s << '}';
+	return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const StdVideoH265PpsFlags& value)
+{
+	s << "StdVideoH265PpsFlags = {\n";
+	s << "\tdependent_slice_segments_enabled_flag = " << value.dependent_slice_segments_enabled_flag << '\n';
+	s << "\toutput_flag_present_flag = " << value.output_flag_present_flag << '\n';
+	s << "\tsign_data_hiding_enabled_flag = " << value.sign_data_hiding_enabled_flag << '\n';
+	s << "\tcabac_init_present_flag = " << value.cabac_init_present_flag << '\n';
+	s << "\tconstrained_intra_pred_flag = " << value.constrained_intra_pred_flag << '\n';
+	s << "\ttransform_skip_enabled_flag = " << value.transform_skip_enabled_flag << '\n';
+	s << "\tcu_qp_delta_enabled_flag = " << value.cu_qp_delta_enabled_flag << '\n';
+	s << "\tpps_slice_chroma_qp_offsets_present_flag = " << value.pps_slice_chroma_qp_offsets_present_flag << '\n';
+	s << "\tweighted_pred_flag = " << value.weighted_pred_flag << '\n';
+	s << "\tweighted_bipred_flag = " << value.weighted_bipred_flag << '\n';
+	s << "\ttransquant_bypass_enabled_flag = " << value.transquant_bypass_enabled_flag << '\n';
+	s << "\ttiles_enabled_flag = " << value.tiles_enabled_flag << '\n';
+	s << "\tentropy_coding_sync_enabled_flag = " << value.entropy_coding_sync_enabled_flag << '\n';
+	s << "\tuniform_spacing_flag = " << value.uniform_spacing_flag << '\n';
+	s << "\tloop_filter_across_tiles_enabled_flag = " << value.loop_filter_across_tiles_enabled_flag << '\n';
+	s << "\tpps_loop_filter_across_slices_enabled_flag = " << value.pps_loop_filter_across_slices_enabled_flag << '\n';
+	s << "\tdeblocking_filter_control_present_flag = " << value.deblocking_filter_control_present_flag << '\n';
+	s << "\tdeblocking_filter_override_enabled_flag = " << value.deblocking_filter_override_enabled_flag << '\n';
+	s << "\tpps_deblocking_filter_disabled_flag = " << value.pps_deblocking_filter_disabled_flag << '\n';
+	s << "\tpps_scaling_list_data_present_flag = " << value.pps_scaling_list_data_present_flag << '\n';
+	s << "\tlists_modification_present_flag = " << value.lists_modification_present_flag << '\n';
+	s << "\tslice_segment_header_extension_present_flag = " << value.slice_segment_header_extension_present_flag << '\n';
+	s << "\tpps_extension_present_flag = " << value.pps_extension_present_flag << '\n';
+	s << "\tcross_component_prediction_enabled_flag = " << value.cross_component_prediction_enabled_flag << '\n';
+	s << "\tchroma_qp_offset_list_enabled_flag = " << value.chroma_qp_offset_list_enabled_flag << '\n';
+	s << "\tpps_curr_pic_ref_enabled_flag = " << value.pps_curr_pic_ref_enabled_flag << '\n';
+	s << "\tresidual_adaptive_colour_transform_enabled_flag = " << value.residual_adaptive_colour_transform_enabled_flag << '\n';
+	s << "\tpps_slice_act_qp_offsets_present_flag = " << value.pps_slice_act_qp_offsets_present_flag << '\n';
+	s << "\tpps_palette_predictor_initializer_present_flag = " << value.pps_palette_predictor_initializer_present_flag << '\n';
+	s << "\tmonochrome_palette_flag = " << value.monochrome_palette_flag << '\n';
+	s << "\tpps_range_extension_flag = " << value.pps_range_extension_flag << '\n';
+	s << '}';
+	return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const StdVideoH265PictureParameterSet& value)
+{
+	s << "StdVideoH265PictureParameterSet = {\n";
+	s << "\tpps_pic_parameter_set_id = " << value.pps_pic_parameter_set_id << '\n';
+	s << "\tpps_seq_parameter_set_id = " << value.pps_seq_parameter_set_id << '\n';
+	s << "\tnum_extra_slice_header_bits = " << value.num_extra_slice_header_bits << '\n';
+	s << "\tnum_ref_idx_l0_default_active_minus1 = " << value.num_ref_idx_l0_default_active_minus1 << '\n';
+	s << "\tnum_ref_idx_l1_default_active_minus1 = " << value.num_ref_idx_l1_default_active_minus1 << '\n';
+	s << "\tinit_qp_minus26 = " << value.init_qp_minus26 << '\n';
+	s << "\tdiff_cu_qp_delta_depth = " << value.diff_cu_qp_delta_depth << '\n';
+	s << "\tpps_cb_qp_offset = " << value.pps_cb_qp_offset << '\n';
+	s << "\tpps_cr_qp_offset = " << value.pps_cr_qp_offset << '\n';
+	s << "\tnum_tile_columns_minus1 = " << value.num_tile_columns_minus1 << '\n';
+	s << "\tnum_tile_rows_minus1 = " << value.num_tile_rows_minus1 << '\n';
+	s << "\tcolumn_width_minus1 = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.column_width_minus1), DE_ARRAY_END(value.column_width_minus1)) << '\n';
+	s << "\trow_height_minus1 = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.row_height_minus1), DE_ARRAY_END(value.row_height_minus1)) << '\n';
+	s << "\tpps_beta_offset_div2 = " << value.pps_beta_offset_div2 << '\n';
+	s << "\tpps_tc_offset_div2 = " << value.pps_tc_offset_div2 << '\n';
+	s << "\tlog2_parallel_merge_level_minus2 = " << value.log2_parallel_merge_level_minus2 << '\n';
+	s << "\tflags = " << value.flags << '\n';
+	s << "\tpScalingLists = " << value.pScalingLists << '\n';
+	s << "\tlog2_max_transform_skip_block_size_minus2 = " << value.log2_max_transform_skip_block_size_minus2 << '\n';
+	s << "\tdiff_cu_chroma_qp_offset_depth = " << value.diff_cu_chroma_qp_offset_depth << '\n';
+	s << "\tchroma_qp_offset_list_len_minus1 = " << value.chroma_qp_offset_list_len_minus1 << '\n';
+	s << "\tcb_qp_offset_list = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.cb_qp_offset_list), DE_ARRAY_END(value.cb_qp_offset_list)) << '\n';
+	s << "\tcr_qp_offset_list = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.cr_qp_offset_list), DE_ARRAY_END(value.cr_qp_offset_list)) << '\n';
+	s << "\tlog2_sao_offset_scale_luma = " << value.log2_sao_offset_scale_luma << '\n';
+	s << "\tlog2_sao_offset_scale_chroma = " << value.log2_sao_offset_scale_chroma << '\n';
+	s << "\tpps_act_y_qp_offset_plus5 = " << value.pps_act_y_qp_offset_plus5 << '\n';
+	s << "\tpps_act_cb_qp_offset_plus5 = " << value.pps_act_cb_qp_offset_plus5 << '\n';
+	s << "\tpps_act_cr_qp_offset_plus5 = " << value.pps_act_cr_qp_offset_plus5 << '\n';
+	s << "\tpps_num_palette_predictor_initializer = " << value.pps_num_palette_predictor_initializer << '\n';
+	s << "\tluma_bit_depth_entry_minus8 = " << value.luma_bit_depth_entry_minus8 << '\n';
+	s << "\tchroma_bit_depth_entry_minus8 = " << value.chroma_bit_depth_entry_minus8 << '\n';
+	s << "\tpPredictorPaletteEntries = " << value.pPredictorPaletteEntries << '\n';
+	s << '}';
+	return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const StdVideoDecodeH265PictureInfoFlags& value)
+{
+	s << "StdVideoDecodeH265PictureInfoFlags = {\n";
+	s << "\tIrapPicFlag = " << value.IrapPicFlag << '\n';
+	s << "\tIdrPicFlag = " << value.IdrPicFlag << '\n';
+	s << "\tIsReference = " << value.IsReference << '\n';
+	s << "\tshort_term_ref_pic_set_sps_flag = " << value.short_term_ref_pic_set_sps_flag << '\n';
+	s << '}';
+	return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const StdVideoDecodeH265PictureInfo& value)
+{
+	s << "StdVideoDecodeH265PictureInfo = {\n";
+	s << "\tvps_video_parameter_set_id = " << value.vps_video_parameter_set_id << '\n';
+	s << "\tsps_seq_parameter_set_id = " << value.sps_seq_parameter_set_id << '\n';
+	s << "\tpps_pic_parameter_set_id = " << value.pps_pic_parameter_set_id << '\n';
+	s << "\tnum_short_term_ref_pic_sets = " << value.num_short_term_ref_pic_sets << '\n';
+	s << "\tPicOrderCntVal = " << value.PicOrderCntVal << '\n';
+	s << "\tNumBitsForSTRefPicSetInSlice = " << value.NumBitsForSTRefPicSetInSlice << '\n';
+	s << "\tNumDeltaPocsOfRefRpsIdx = " << value.NumDeltaPocsOfRefRpsIdx << '\n';
+	s << "\tRefPicSetStCurrBefore = " << '\n' << tcu::formatArray(tcu::Format::HexIterator<deUint8>(DE_ARRAY_BEGIN(value.RefPicSetStCurrBefore)), tcu::Format::HexIterator<deUint8>(DE_ARRAY_END(value.RefPicSetStCurrBefore))) << '\n';
+	s << "\tRefPicSetStCurrAfter = " << '\n' << tcu::formatArray(tcu::Format::HexIterator<deUint8>(DE_ARRAY_BEGIN(value.RefPicSetStCurrAfter)), tcu::Format::HexIterator<deUint8>(DE_ARRAY_END(value.RefPicSetStCurrAfter))) << '\n';
+	s << "\tRefPicSetLtCurr = " << '\n' << tcu::formatArray(tcu::Format::HexIterator<deUint8>(DE_ARRAY_BEGIN(value.RefPicSetLtCurr)), tcu::Format::HexIterator<deUint8>(DE_ARRAY_END(value.RefPicSetLtCurr))) << '\n';
+	s << "\tflags = " << value.flags << '\n';
+	s << '}';
+	return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const StdVideoDecodeH265ReferenceInfoFlags& value)
+{
+	s << "StdVideoDecodeH265ReferenceInfoFlags = {\n";
+	s << "\tis_long_term = " << value.is_long_term << '\n';
+	s << "\tis_non_existing = " << value.is_non_existing << '\n';
+	s << '}';
+	return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const StdVideoDecodeH265ReferenceInfo& value)
+{
+	s << "StdVideoDecodeH265ReferenceInfo = {\n";
+	s << "\tPicOrderCntVal = " << value.PicOrderCntVal << '\n';
+	s << "\tflags = " << value.flags << '\n';
+	s << '}';
+	return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkVideoDecodeH265ProfileEXT& value)
+{
+	s << "VkVideoDecodeH265ProfileEXT = {\n";
+	s << "\tsType = " << value.sType << '\n';
+	s << "\tpNext = " << value.pNext << '\n';
+	s << "\tstdProfileIdc = " << value.stdProfileIdc << '\n';
+	s << '}';
+	return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkVideoDecodeH265CapabilitiesEXT& value)
+{
+	s << "VkVideoDecodeH265CapabilitiesEXT = {\n";
+	s << "\tsType = " << value.sType << '\n';
+	s << "\tpNext = " << value.pNext << '\n';
+	s << "\tmaxLevel = " << value.maxLevel << '\n';
+	s << "\tstdExtensionVersion = " << value.stdExtensionVersion << '\n';
+	s << '}';
+	return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkVideoDecodeH265SessionCreateInfoEXT& value)
+{
+	s << "VkVideoDecodeH265SessionCreateInfoEXT = {\n";
+	s << "\tsType = " << value.sType << '\n';
+	s << "\tpNext = " << value.pNext << '\n';
+	s << "\tflags = " << getVideoDecodeH265CreateFlagsEXTStr(value.flags) << '\n';
+	s << "\tpStdExtensionVersion = " << value.pStdExtensionVersion << '\n';
+	s << '}';
+	return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkVideoDecodeH265SessionParametersAddInfoEXT& value)
+{
+	s << "VkVideoDecodeH265SessionParametersAddInfoEXT = {\n";
+	s << "\tsType = " << value.sType << '\n';
+	s << "\tpNext = " << value.pNext << '\n';
+	s << "\tspsStdCount = " << value.spsStdCount << '\n';
+	s << "\tpSpsStd = " << value.pSpsStd << '\n';
+	s << "\tppsStdCount = " << value.ppsStdCount << '\n';
+	s << "\tpPpsStd = " << value.pPpsStd << '\n';
+	s << '}';
+	return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkVideoDecodeH265SessionParametersCreateInfoEXT& value)
+{
+	s << "VkVideoDecodeH265SessionParametersCreateInfoEXT = {\n";
+	s << "\tsType = " << value.sType << '\n';
+	s << "\tpNext = " << value.pNext << '\n';
+	s << "\tmaxSpsStdCount = " << value.maxSpsStdCount << '\n';
+	s << "\tmaxPpsStdCount = " << value.maxPpsStdCount << '\n';
+	s << "\tpParametersAddInfo = " << value.pParametersAddInfo << '\n';
+	s << '}';
+	return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkVideoDecodeH265PictureInfoEXT& value)
+{
+	s << "VkVideoDecodeH265PictureInfoEXT = {\n";
+	s << "\tsType = " << value.sType << '\n';
+	s << "\tpNext = " << value.pNext << '\n';
+	s << "\tpStdPictureInfo = " << value.pStdPictureInfo << '\n';
+	s << "\tslicesCount = " << value.slicesCount << '\n';
+	s << "\tpSlicesDataOffsets = " << value.pSlicesDataOffsets << '\n';
+	s << '}';
+	return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkVideoDecodeH265DpbSlotInfoEXT& value)
+{
+	s << "VkVideoDecodeH265DpbSlotInfoEXT = {\n";
+	s << "\tsType = " << value.sType << '\n';
+	s << "\tpNext = " << value.pNext << '\n';
+	s << "\tpStdReferenceInfo = " << value.pStdReferenceInfo << '\n';
+	s << '}';
+	return s;
+}
+
 std::ostream& operator<< (std::ostream& s, const VkImagePipeSurfaceCreateInfoFUCHSIA& value)
 {
 	s << "VkImagePipeSurfaceCreateInfoFUCHSIA = {\n";
@@ -10853,6 +12829,62 @@
 	return s;
 }
 
+std::ostream& operator<< (std::ostream& s, const VkImportMemoryZirconHandleInfoFUCHSIA& value)
+{
+	s << "VkImportMemoryZirconHandleInfoFUCHSIA = {\n";
+	s << "\tsType = " << value.sType << '\n';
+	s << "\tpNext = " << value.pNext << '\n';
+	s << "\thandleType = " << value.handleType << '\n';
+	s << "\thandle = " << value.handle << '\n';
+	s << '}';
+	return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkMemoryZirconHandlePropertiesFUCHSIA& value)
+{
+	s << "VkMemoryZirconHandlePropertiesFUCHSIA = {\n";
+	s << "\tsType = " << value.sType << '\n';
+	s << "\tpNext = " << value.pNext << '\n';
+	s << "\tmemoryTypeBits = " << value.memoryTypeBits << '\n';
+	s << '}';
+	return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkMemoryGetZirconHandleInfoFUCHSIA& value)
+{
+	s << "VkMemoryGetZirconHandleInfoFUCHSIA = {\n";
+	s << "\tsType = " << value.sType << '\n';
+	s << "\tpNext = " << value.pNext << '\n';
+	s << "\tmemory = " << value.memory << '\n';
+	s << "\thandleType = " << value.handleType << '\n';
+	s << '}';
+	return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkImportSemaphoreZirconHandleInfoFUCHSIA& value)
+{
+	s << "VkImportSemaphoreZirconHandleInfoFUCHSIA = {\n";
+	s << "\tsType = " << value.sType << '\n';
+	s << "\tpNext = " << value.pNext << '\n';
+	s << "\tsemaphore = " << value.semaphore << '\n';
+	s << "\tflags = " << getSemaphoreImportFlagsStr(value.flags) << '\n';
+	s << "\thandleType = " << value.handleType << '\n';
+	s << "\tzirconHandle = " << value.zirconHandle << '\n';
+	s << '}';
+	return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkSemaphoreGetZirconHandleInfoFUCHSIA& value)
+{
+	s << "VkSemaphoreGetZirconHandleInfoFUCHSIA = {\n";
+	s << "\tsType = " << value.sType << '\n';
+	s << "\tpNext = " << value.pNext << '\n';
+	s << "\tsemaphore = " << value.semaphore << '\n';
+	s << "\thandleType = " << value.handleType << '\n';
+	s << '}';
+	return s;
+}
+
 std::ostream& operator<< (std::ostream& s, const VkStreamDescriptorSurfaceCreateInfoGGP& value)
 {
 	s << "VkStreamDescriptorSurfaceCreateInfoGGP = {\n";
diff --git a/external/vulkancts/framework/vulkan/vkStructTypes.inl b/external/vulkancts/framework/vulkan/vkStructTypes.inl
index 4492b4c..7e5866c 100644
--- a/external/vulkancts/framework/vulkan/vkStructTypes.inl
+++ b/external/vulkancts/framework/vulkan/vkStructTypes.inl
@@ -2892,6 +2892,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;
@@ -4782,6 +4825,22 @@
 	deUint32					maxSequencesCount;
 };
 
+struct VkPhysicalDeviceInheritedViewportScissorFeaturesNV
+{
+	VkStructureType	sType;
+	void*			pNext;
+	VkBool32		inheritedViewportScissor2D;
+};
+
+struct VkCommandBufferInheritanceViewportScissorInfoNV
+{
+	VkStructureType		sType;
+	const void*			pNext;
+	VkBool32			viewportScissor2D;
+	deUint32			viewportDepthCount;
+	const VkViewport*	pViewportDepths;
+};
+
 struct VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT
 {
 	VkStructureType	sType;
@@ -4950,6 +5009,13 @@
 	VkFragmentShadingRateCombinerOpKHR	combinerOps[2];
 };
 
+struct VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT
+{
+	VkStructureType	sType;
+	void*			pNext;
+	VkBool32		ycbcr2plane444Formats;
+};
+
 struct VkPhysicalDeviceFragmentDensityMap2FeaturesEXT
 {
 	VkStructureType	sType;
@@ -5010,6 +5076,57 @@
 	const VkMutableDescriptorTypeListVALVE*	pMutableDescriptorTypeLists;
 };
 
+struct VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT
+{
+	VkStructureType	sType;
+	void*			pNext;
+	VkBool32		vertexInputDynamicState;
+};
+
+struct VkVertexInputBindingDescription2EXT
+{
+	VkStructureType		sType;
+	void*				pNext;
+	deUint32			binding;
+	deUint32			stride;
+	VkVertexInputRate	inputRate;
+	deUint32			divisor;
+};
+
+struct VkVertexInputAttributeDescription2EXT
+{
+	VkStructureType	sType;
+	void*			pNext;
+	deUint32		location;
+	deUint32		binding;
+	VkFormat		format;
+	deUint32		offset;
+};
+
+struct VkPhysicalDeviceExtendedDynamicState2FeaturesEXT
+{
+	VkStructureType	sType;
+	void*			pNext;
+	VkBool32		extendedDynamicState2;
+	VkBool32		extendedDynamicState2LogicOp;
+	VkBool32		extendedDynamicState2PatchControlPoints;
+};
+
+struct VkPhysicalDeviceColorWriteEnableFeaturesEXT
+{
+	VkStructureType	sType;
+	void*			pNext;
+	VkBool32		colorWriteEnable;
+};
+
+struct VkPipelineColorWriteCreateInfoEXT
+{
+	VkStructureType	sType;
+	const void*		pNext;
+	deUint32		attachmentCount;
+	const VkBool32*	pColorWriteEnables;
+};
+
 union VkDeviceOrHostAddressKHR
 {
 	VkDeviceAddress	deviceAddress;
@@ -5327,6 +5444,167 @@
 	deUint64		externalFormat;
 };
 
+struct VkVideoQueueFamilyProperties2KHR
+{
+	VkStructureType					sType;
+	void*							pNext;
+	VkVideoCodecOperationFlagsKHR	videoCodecOperations;
+};
+
+struct VkVideoProfileKHR
+{
+	VkStructureType						sType;
+	void*								pNext;
+	VkVideoCodecOperationFlagBitsKHR	videoCodecOperation;
+	VkVideoChromaSubsamplingFlagsKHR	chromaSubsampling;
+	VkVideoComponentBitDepthFlagsKHR	lumaBitDepth;
+	VkVideoComponentBitDepthFlagsKHR	chromaBitDepth;
+};
+
+struct VkVideoProfilesKHR
+{
+	VkStructureType				sType;
+	void*						pNext;
+	deUint32					profileCount;
+	const VkVideoProfileKHR*	pProfiles;
+};
+
+struct VkVideoCapabilitiesKHR
+{
+	VkStructureType				sType;
+	void*						pNext;
+	VkVideoCapabilitiesFlagsKHR	capabilityFlags;
+	VkDeviceSize				minBitstreamBufferOffsetAlignment;
+	VkDeviceSize				minBitstreamBufferSizeAlignment;
+	VkExtent2D					videoPictureExtentGranularity;
+	VkExtent2D					minExtent;
+	VkExtent2D					maxExtent;
+	deUint32					maxReferencePicturesSlotsCount;
+	deUint32					maxReferencePicturesActiveCount;
+};
+
+struct VkPhysicalDeviceVideoFormatInfoKHR
+{
+	VkStructureType				sType;
+	const void*					pNext;
+	VkImageUsageFlags			imageUsage;
+	const VkVideoProfilesKHR*	pVideoProfiles;
+};
+
+struct VkVideoFormatPropertiesKHR
+{
+	VkStructureType	sType;
+	void*			pNext;
+	VkFormat		format;
+};
+
+struct VkVideoPictureResourceKHR
+{
+	VkStructureType	sType;
+	const void*		pNext;
+	VkOffset2D		codedOffset;
+	VkExtent2D		codedExtent;
+	deUint32		baseArrayLayer;
+	VkImageView		imageViewBinding;
+};
+
+struct VkVideoReferenceSlotKHR
+{
+	VkStructureType						sType;
+	const void*							pNext;
+	deInt8								slotIndex;
+	const VkVideoPictureResourceKHR*	pPictureResource;
+};
+
+struct VkVideoGetMemoryPropertiesKHR
+{
+	VkStructureType			sType;
+	const void*				pNext;
+	deUint32				memoryBindIndex;
+	VkMemoryRequirements2*	pMemoryRequirements;
+};
+
+struct VkVideoBindMemoryKHR
+{
+	VkStructureType	sType;
+	const void*		pNext;
+	deUint32		memoryBindIndex;
+	VkDeviceMemory	memory;
+	VkDeviceSize	memoryOffset;
+	VkDeviceSize	memorySize;
+};
+
+struct VkVideoSessionCreateInfoKHR
+{
+	VkStructureType					sType;
+	const void*						pNext;
+	deUint32						queueFamilyIndex;
+	VkVideoSessionCreateFlagsKHR	flags;
+	const VkVideoProfileKHR*		pVideoProfile;
+	VkFormat						pictureFormat;
+	VkExtent2D						maxCodedExtent;
+	VkFormat						referencePicturesFormat;
+	deUint32						maxReferencePicturesSlotsCount;
+	deUint32						maxReferencePicturesActiveCount;
+};
+
+struct VkVideoSessionParametersCreateInfoKHR
+{
+	VkStructureType				sType;
+	const void*					pNext;
+	VkVideoSessionParametersKHR	videoSessionParametersTemplate;
+	VkVideoSessionKHR			videoSession;
+};
+
+struct VkVideoSessionParametersUpdateInfoKHR
+{
+	VkStructureType	sType;
+	const void*		pNext;
+	deUint32		updateSequenceCount;
+};
+
+struct VkVideoBeginCodingInfoKHR
+{
+	VkStructureType						sType;
+	const void*							pNext;
+	VkVideoBeginCodingFlagsKHR			flags;
+	VkVideoCodingQualityPresetFlagsKHR	codecQualityPreset;
+	VkVideoSessionKHR					videoSession;
+	VkVideoSessionParametersKHR			videoSessionParameters;
+	deUint32							referenceSlotCount;
+	const VkVideoReferenceSlotKHR*		pReferenceSlots;
+};
+
+struct VkVideoEndCodingInfoKHR
+{
+	VkStructureType				sType;
+	const void*					pNext;
+	VkVideoEndCodingFlagsKHR	flags;
+};
+
+struct VkVideoCodingControlInfoKHR
+{
+	VkStructureType					sType;
+	const void*						pNext;
+	VkVideoCodingControlFlagsKHR	flags;
+};
+
+struct VkVideoDecodeInfoKHR
+{
+	VkStructureType					sType;
+	const void*						pNext;
+	VkVideoDecodeFlagsKHR			flags;
+	VkOffset2D						codedOffset;
+	VkExtent2D						codedExtent;
+	VkBuffer						srcBuffer;
+	VkDeviceSize					srcBufferOffset;
+	VkDeviceSize					srcBufferRange;
+	VkVideoPictureResourceKHR		dstPictureResource;
+	const VkVideoReferenceSlotKHR*	pSetupReferenceSlot;
+	deUint32						referenceSlotCount;
+	const VkVideoReferenceSlotKHR*	pReferenceSlots;
+};
+
 struct VkPhysicalDevicePortabilitySubsetFeaturesKHR
 {
 	VkStructureType	sType;
@@ -5355,6 +5633,840 @@
 	deUint32		minVertexInputBindingStrideAlignment;
 };
 
+struct VkVideoEncodeInfoKHR
+{
+	VkStructureType					sType;
+	const void*						pNext;
+	VkVideoEncodeFlagsKHR			flags;
+	deUint32						qualityLevel;
+	VkExtent2D						codedExtent;
+	VkBuffer						dstBitstreamBuffer;
+	VkDeviceSize					dstBitstreamBufferOffset;
+	VkDeviceSize					dstBitstreamBufferMaxRange;
+	VkVideoPictureResourceKHR		srcPictureResource;
+	const VkVideoReferenceSlotKHR*	pSetupReferenceSlot;
+	deUint32						referenceSlotCount;
+	const VkVideoReferenceSlotKHR*	pReferenceSlots;
+};
+
+struct VkVideoEncodeRateControlInfoKHR
+{
+	VkStructureType							sType;
+	const void*								pNext;
+	VkVideoEncodeRateControlFlagsKHR		flags;
+	VkVideoEncodeRateControlModeFlagBitsKHR	rateControlMode;
+	deUint32								averageBitrate;
+	deUint16								peakToAverageBitrateRatio;
+	deUint16								frameRateNumerator;
+	deUint16								frameRateDenominator;
+	deUint32								virtualBufferSizeInMs;
+};
+
+struct StdVideoH264SpsVuiFlags
+{
+	deUint32	aspect_ratio_info_present_flag:1;
+	deUint32	overscan_info_present_flag:1;
+	deUint32	overscan_appropriate_flag:1;
+	deUint32	video_signal_type_present_flag:1;
+	deUint32	video_full_range_flag:1;
+	deUint32	color_description_present_flag:1;
+	deUint32	chroma_loc_info_present_flag:1;
+	deUint32	timing_info_present_flag:1;
+	deUint32	fixed_frame_rate_flag:1;
+	deUint32	bitstream_restriction_flag:1;
+	deUint32	nal_hrd_parameters_present_flag:1;
+	deUint32	vcl_hrd_parameters_present_flag:1;
+};
+
+struct StdVideoH264HrdParameters
+{
+	deUint8		cpb_cnt_minus1;
+	deUint8		bit_rate_scale;
+	deUint8		cpb_size_scale;
+	deUint32	bit_rate_value_minus1[32];
+	deUint32	cpb_size_value_minus1[32];
+	deUint8		cbr_flag[32];
+	deUint32	initial_cpb_removal_delay_length_minus1;
+	deUint32	cpb_removal_delay_length_minus1;
+	deUint32	dpb_output_delay_length_minus1;
+	deUint32	time_offset_length;
+};
+
+struct StdVideoH264SequenceParameterSetVui
+{
+	StdVideoH264AspectRatioIdc	aspect_ratio_idc;
+	deUint16					sar_width;
+	deUint16					sar_height;
+	deUint8						video_format;
+	deUint8						color_primaries;
+	deUint8						transfer_characteristics;
+	deUint8						matrix_coefficients;
+	deUint32					num_units_in_tick;
+	deUint32					time_scale;
+	StdVideoH264HrdParameters	hrd_parameters;
+	deUint8						num_reorder_frames;
+	deUint8						max_dec_frame_buffering;
+	StdVideoH264SpsVuiFlags		flags;
+};
+
+struct StdVideoH264SpsFlags
+{
+	deUint32	constraint_set0_flag:1;
+	deUint32	constraint_set1_flag:1;
+	deUint32	constraint_set2_flag:1;
+	deUint32	constraint_set3_flag:1;
+	deUint32	constraint_set4_flag:1;
+	deUint32	constraint_set5_flag:1;
+	deUint32	direct_8x8_inference_flag:1;
+	deUint32	mb_adaptive_frame_field_flag:1;
+	deUint32	frame_mbs_only_flag:1;
+	deUint32	delta_pic_order_always_zero_flag:1;
+	deUint32	residual_colour_transform_flag:1;
+	deUint32	gaps_in_frame_num_value_allowed_flag:1;
+	deUint32	first_picture_after_seek_flag:1;
+	deUint32	qpprime_y_zero_transform_bypass_flag:1;
+	deUint32	frame_cropping_flag:1;
+	deUint32	scaling_matrix_present_flag:1;
+	deUint32	vui_parameters_present_flag:1;
+};
+
+struct StdVideoH264ScalingLists
+{
+	deUint8	scaling_list_present_mask;
+	deUint8	use_default_scaling_matrix_mask;
+	deUint8	ScalingList4x4[6][16];
+	deUint8	ScalingList8x8[2][64];
+};
+
+struct StdVideoH264SequenceParameterSet
+{
+	StdVideoH264ProfileIdc					profile_idc;
+	StdVideoH264Level						level_idc;
+	deUint8									seq_parameter_set_id;
+	StdVideoH264ChromaFormatIdc				chroma_format_idc;
+	deUint8									bit_depth_luma_minus8;
+	deUint8									bit_depth_chroma_minus8;
+	deUint8									log2_max_frame_num_minus4;
+	StdVideoH264PocType						pic_order_cnt_type;
+	deUint8									log2_max_pic_order_cnt_lsb_minus4;
+	deInt32									offset_for_non_ref_pic;
+	deInt32									offset_for_top_to_bottom_field;
+	deUint8									num_ref_frames_in_pic_order_cnt_cycle;
+	deUint8									max_num_ref_frames;
+	deUint32								pic_width_in_mbs_minus1;
+	deUint32								pic_height_in_map_units_minus1;
+	deUint32								frame_crop_left_offset;
+	deUint32								frame_crop_right_offset;
+	deUint32								frame_crop_top_offset;
+	deUint32								frame_crop_bottom_offset;
+	StdVideoH264SpsFlags					flags;
+	deInt32									offset_for_ref_frame[255];
+	StdVideoH264ScalingLists*				pScalingLists;
+	StdVideoH264SequenceParameterSetVui*	pSequenceParameterSetVui;
+};
+
+struct StdVideoH264PpsFlags
+{
+	deUint32	transform_8x8_mode_flag:1;
+	deUint32	redundant_pic_cnt_present_flag:1;
+	deUint32	constrained_intra_pred_flag:1;
+	deUint32	deblocking_filter_control_present_flag:1;
+	deUint32	weighted_bipred_idc_flag:1;
+	deUint32	weighted_pred_flag:1;
+	deUint32	pic_order_present_flag:1;
+	deUint32	entropy_coding_mode_flag:1;
+	deUint32	scaling_matrix_present_flag:1;
+};
+
+struct StdVideoH264PictureParameterSet
+{
+	deUint8							seq_parameter_set_id;
+	deUint8							pic_parameter_set_id;
+	deUint8							num_ref_idx_l0_default_active_minus1;
+	deUint8							num_ref_idx_l1_default_active_minus1;
+	StdVideoH264WeightedBiPredIdc	weighted_bipred_idc;
+	deInt8							pic_init_qp_minus26;
+	deInt8							pic_init_qs_minus26;
+	deInt8							chroma_qp_index_offset;
+	deInt8							second_chroma_qp_index_offset;
+	StdVideoH264PpsFlags			flags;
+	StdVideoH264ScalingLists*		pScalingLists;
+};
+
+struct StdVideoEncodeH264SliceHeaderFlags
+{
+	deUint32	idr_flag:1;
+	deUint32	is_reference_flag:1;
+	deUint32	num_ref_idx_active_override_flag:1;
+	deUint32	no_output_of_prior_pics_flag:1;
+	deUint32	long_term_reference_flag:1;
+	deUint32	adaptive_ref_pic_marking_mode_flag:1;
+	deUint32	no_prior_references_available_flag:1;
+};
+
+struct StdVideoEncodeH264PictureInfoFlags
+{
+	deUint32	idr_flag:1;
+	deUint32	is_reference_flag:1;
+	deUint32	long_term_reference_flag:1;
+};
+
+struct StdVideoEncodeH264RefMgmtFlags
+{
+	deUint32	ref_pic_list_modification_l0_flag:1;
+	deUint32	ref_pic_list_modification_l1_flag:1;
+};
+
+struct StdVideoEncodeH264RefListModEntry
+{
+	StdVideoH264ModificationOfPicNumsIdc	modification_of_pic_nums_idc;
+	deUint16								abs_diff_pic_num_minus1;
+	deUint16								long_term_pic_num;
+};
+
+struct StdVideoEncodeH264RefPicMarkingEntry
+{
+	StdVideoH264MemMgmtControlOp	operation;
+	deUint16						difference_of_pic_nums_minus1;
+	deUint16						long_term_pic_num;
+	deUint16						long_term_frame_idx;
+	deUint16						max_long_term_frame_idx_plus1;
+};
+
+struct StdVideoEncodeH264RefMemMgmtCtrlOperations
+{
+	StdVideoEncodeH264RefMgmtFlags			flags;
+	deUint8									refList0ModOpCount;
+	StdVideoEncodeH264RefListModEntry*		pRefList0ModOperations;
+	deUint8									refList1ModOpCount;
+	StdVideoEncodeH264RefListModEntry*		pRefList1ModOperations;
+	deUint8									refPicMarkingOpCount;
+	StdVideoEncodeH264RefPicMarkingEntry*	pRefPicMarkingOperations;
+};
+
+struct StdVideoEncodeH264PictureInfo
+{
+	StdVideoEncodeH264PictureInfoFlags	flags;
+	StdVideoH264PictureType				pictureType;
+	deUint32							frameNum;
+	deUint32							pictureOrderCount;
+	deUint16							long_term_pic_num;
+	deUint16							long_term_frame_idx;
+};
+
+struct StdVideoEncodeH264SliceHeader
+{
+	StdVideoEncodeH264SliceHeaderFlags			flags;
+	StdVideoH264SliceType						slice_type;
+	deUint8										seq_parameter_set_id;
+	deUint8										pic_parameter_set_id;
+	deUint16									idr_pic_id;
+	deUint8										num_ref_idx_l0_active_minus1;
+	deUint8										num_ref_idx_l1_active_minus1;
+	StdVideoH264CabacInitIdc					cabac_init_idc;
+	StdVideoH264DisableDeblockingFilterIdc		disable_deblocking_filter_idc;
+	deInt8										slice_alpha_c0_offset_div2;
+	deInt8										slice_beta_offset_div2;
+	StdVideoEncodeH264RefMemMgmtCtrlOperations*	pMemMgmtCtrlOperations;
+};
+
+struct VkVideoEncodeH264CapabilitiesEXT
+{
+	VkStructureType							sType;
+	const void*								pNext;
+	VkVideoEncodeH264CapabilitiesFlagsEXT	flags;
+	VkVideoEncodeH264InputModeFlagsEXT		inputModeFlags;
+	VkVideoEncodeH264OutputModeFlagsEXT		outputModeFlags;
+	VkExtent2D								minPictureSizeInMbs;
+	VkExtent2D								maxPictureSizeInMbs;
+	VkExtent2D								inputImageDataAlignment;
+	deUint8									maxNumL0ReferenceForP;
+	deUint8									maxNumL0ReferenceForB;
+	deUint8									maxNumL1Reference;
+	deUint8									qualityLevelCount;
+	VkExtensionProperties					stdExtensionVersion;
+};
+
+struct VkVideoEncodeH264SessionCreateInfoEXT
+{
+	VkStructureType					sType;
+	const void*						pNext;
+	VkVideoEncodeH264CreateFlagsEXT	flags;
+	VkExtent2D						maxPictureSizeInMbs;
+	const VkExtensionProperties*	pStdExtensionVersion;
+};
+
+struct VkVideoEncodeH264SessionParametersAddInfoEXT
+{
+	VkStructureType							sType;
+	const void*								pNext;
+	deUint32								spsStdCount;
+	const StdVideoH264SequenceParameterSet*	pSpsStd;
+	deUint32								ppsStdCount;
+	const StdVideoH264PictureParameterSet*	pPpsStd;
+};
+
+struct VkVideoEncodeH264SessionParametersCreateInfoEXT
+{
+	VkStructureType										sType;
+	const void*											pNext;
+	deUint32											maxSpsStdCount;
+	deUint32											maxPpsStdCount;
+	const VkVideoEncodeH264SessionParametersAddInfoEXT*	pParametersAddInfo;
+};
+
+struct VkVideoEncodeH264DpbSlotInfoEXT
+{
+	VkStructureType							sType;
+	const void*								pNext;
+	deInt8									slotIndex;
+	const StdVideoEncodeH264PictureInfo*	pStdPictureInfo;
+};
+
+struct VkVideoEncodeH264NaluSliceEXT
+{
+	VkStructureType							sType;
+	const void*								pNext;
+	const StdVideoEncodeH264SliceHeader*	pSliceHeaderStd;
+	deUint32								mbCount;
+	deUint8									refFinalList0EntryCount;
+	const VkVideoEncodeH264DpbSlotInfoEXT*	pRefFinalList0Entries;
+	deUint8									refFinalList1EntryCount;
+	const VkVideoEncodeH264DpbSlotInfoEXT*	pRefFinalList1Entries;
+	deUint32								precedingNaluBytes;
+	deUint8									minQp;
+	deUint8									maxQp;
+};
+
+struct VkVideoEncodeH264VclFrameInfoEXT
+{
+	VkStructureType							sType;
+	const void*								pNext;
+	deUint8									refDefaultFinalList0EntryCount;
+	const VkVideoEncodeH264DpbSlotInfoEXT*	pRefDefaultFinalList0Entries;
+	deUint8									refDefaultFinalList1EntryCount;
+	const VkVideoEncodeH264DpbSlotInfoEXT*	pRefDefaultFinalList1Entries;
+	deUint32								naluSliceEntryCount;
+	const VkVideoEncodeH264NaluSliceEXT*	pNaluSliceEntries;
+	const VkVideoEncodeH264DpbSlotInfoEXT*	pCurrentPictureInfo;
+};
+
+struct VkVideoEncodeH264EmitPictureParametersEXT
+{
+	VkStructureType	sType;
+	const void*		pNext;
+	deUint8			spsId;
+	VkBool32		emitSpsEnable;
+	deUint32		ppsIdEntryCount;
+	const deUint8*	ppsIdEntries;
+};
+
+struct VkVideoEncodeH264ProfileEXT
+{
+	VkStructureType			sType;
+	const void*				pNext;
+	StdVideoH264ProfileIdc	stdProfileIdc;
+};
+
+struct StdVideoDecodeH264PictureInfoFlags
+{
+	deUint32	field_pic_flag:1;
+	deUint32	is_intra:1;
+	deUint32	bottom_field_flag:1;
+	deUint32	is_reference:1;
+	deUint32	complementary_field_pair:1;
+};
+
+struct StdVideoDecodeH264PictureInfo
+{
+	deUint8								seq_parameter_set_id;
+	deUint8								pic_parameter_set_id;
+	deUint16							reserved;
+	deUint16							frame_num;
+	deUint16							idr_pic_id;
+	deInt32								PicOrderCnt[2];
+	StdVideoDecodeH264PictureInfoFlags	flags;
+};
+
+struct StdVideoDecodeH264ReferenceInfoFlags
+{
+	deUint32	top_field_flag:1;
+	deUint32	bottom_field_flag:1;
+	deUint32	is_long_term:1;
+	deUint32	is_non_existing:1;
+};
+
+struct StdVideoDecodeH264ReferenceInfo
+{
+	deUint16								FrameNum;
+	deUint16								reserved;
+	deInt32									PicOrderCnt[2];
+	StdVideoDecodeH264ReferenceInfoFlags	flags;
+};
+
+struct StdVideoDecodeH264MvcElementFlags
+{
+	deUint32	non_idr:1;
+	deUint32	anchor_pic:1;
+	deUint32	inter_view:1;
+};
+
+struct StdVideoDecodeH264MvcElement
+{
+	StdVideoDecodeH264MvcElementFlags	flags;
+	deUint16							viewOrderIndex;
+	deUint16							viewId;
+	deUint16							temporalId;
+	deUint16							priorityId;
+	deUint16							numOfAnchorRefsInL0;
+	deUint16							viewIdOfAnchorRefsInL0[15];
+	deUint16							numOfAnchorRefsInL1;
+	deUint16							viewIdOfAnchorRefsInL1[15];
+	deUint16							numOfNonAnchorRefsInL0;
+	deUint16							viewIdOfNonAnchorRefsInL0[15];
+	deUint16							numOfNonAnchorRefsInL1;
+	deUint16							viewIdOfNonAnchorRefsInL1[15];
+};
+
+struct StdVideoDecodeH264Mvc
+{
+	deUint32						viewId0;
+	deUint32						mvcElementCount;
+	StdVideoDecodeH264MvcElement*	pMvcElements;
+};
+
+struct VkVideoDecodeH264ProfileEXT
+{
+	VkStructureType							sType;
+	const void*								pNext;
+	StdVideoH264ProfileIdc					stdProfileIdc;
+	VkVideoDecodeH264FieldLayoutFlagsEXT	fieldLayout;
+};
+
+struct VkVideoDecodeH264CapabilitiesEXT
+{
+	VkStructureType			sType;
+	void*					pNext;
+	deUint32				maxLevel;
+	VkOffset2D				fieldOffsetGranularity;
+	VkExtensionProperties	stdExtensionVersion;
+};
+
+struct VkVideoDecodeH264SessionCreateInfoEXT
+{
+	VkStructureType					sType;
+	const void*						pNext;
+	VkVideoDecodeH264CreateFlagsEXT	flags;
+	const VkExtensionProperties*	pStdExtensionVersion;
+};
+
+struct VkVideoDecodeH264SessionParametersAddInfoEXT
+{
+	VkStructureType							sType;
+	const void*								pNext;
+	deUint32								spsStdCount;
+	const StdVideoH264SequenceParameterSet*	pSpsStd;
+	deUint32								ppsStdCount;
+	const StdVideoH264PictureParameterSet*	pPpsStd;
+};
+
+struct VkVideoDecodeH264SessionParametersCreateInfoEXT
+{
+	VkStructureType										sType;
+	const void*											pNext;
+	deUint32											maxSpsStdCount;
+	deUint32											maxPpsStdCount;
+	const VkVideoDecodeH264SessionParametersAddInfoEXT*	pParametersAddInfo;
+};
+
+struct VkVideoDecodeH264PictureInfoEXT
+{
+	VkStructureType							sType;
+	const void*								pNext;
+	const StdVideoDecodeH264PictureInfo*	pStdPictureInfo;
+	deUint32								slicesCount;
+	const deUint32*							pSlicesDataOffsets;
+};
+
+struct VkVideoDecodeH264MvcEXT
+{
+	VkStructureType					sType;
+	const void*						pNext;
+	const StdVideoDecodeH264Mvc*	pStdMvc;
+};
+
+struct VkVideoDecodeH264DpbSlotInfoEXT
+{
+	VkStructureType							sType;
+	const void*								pNext;
+	const StdVideoDecodeH264ReferenceInfo*	pStdReferenceInfo;
+};
+
+struct StdVideoH265DecPicBufMgr
+{
+	deUint32	max_latency_increase_plus1[7];
+	deUint8		max_dec_pic_buffering_minus1[7];
+	deUint8		max_num_reorder_pics[7];
+};
+
+struct StdVideoH265SubLayerHrdParameters
+{
+	deUint32	bit_rate_value_minus1[32];
+	deUint32	cpb_size_value_minus1[32];
+	deUint32	cpb_size_du_value_minus1[32];
+	deUint32	bit_rate_du_value_minus1[32];
+	deUint32	cbr_flag;
+};
+
+struct StdVideoH265HrdFlags
+{
+	deUint32	nal_hrd_parameters_present_flag:1;
+	deUint32	vcl_hrd_parameters_present_flag:1;
+	deUint32	sub_pic_hrd_params_present_flag:1;
+	deUint32	sub_pic_cpb_params_in_pic_timing_sei_flag:1;
+	deUint8		fixed_pic_rate_general_flag;
+	deUint8		fixed_pic_rate_within_cvs_flag;
+	deUint8		low_delay_hrd_flag;
+};
+
+struct StdVideoH265HrdParameters
+{
+	deUint8								tick_divisor_minus2;
+	deUint8								du_cpb_removal_delay_increment_length_minus1;
+	deUint8								dpb_output_delay_du_length_minus1;
+	deUint8								bit_rate_scale;
+	deUint8								cpb_size_scale;
+	deUint8								cpb_size_du_scale;
+	deUint8								initial_cpb_removal_delay_length_minus1;
+	deUint8								au_cpb_removal_delay_length_minus1;
+	deUint8								dpb_output_delay_length_minus1;
+	deUint8								cpb_cnt_minus1[7];
+	deUint16							elemental_duration_in_tc_minus1[7];
+	StdVideoH265SubLayerHrdParameters*	SubLayerHrdParametersNal[7];
+	StdVideoH265SubLayerHrdParameters*	SubLayerHrdParametersVcl[7];
+	StdVideoH265HrdFlags				flags;
+};
+
+struct StdVideoH265VpsFlags
+{
+	deUint32	vps_temporal_id_nesting_flag:1;
+	deUint32	vps_sub_layer_ordering_info_present_flag:1;
+	deUint32	vps_timing_info_present_flag:1;
+	deUint32	vps_poc_proportional_to_timing_flag:1;
+};
+
+struct StdVideoH265VideoParameterSet
+{
+	deUint8						vps_video_parameter_set_id;
+	deUint8						vps_max_sub_layers_minus1;
+	deUint32					vps_num_units_in_tick;
+	deUint32					vps_time_scale;
+	deUint32					vps_num_ticks_poc_diff_one_minus1;
+	StdVideoH265DecPicBufMgr*	pDecPicBufMgr;
+	StdVideoH265HrdParameters*	hrd_parameters;
+	StdVideoH265VpsFlags		flags;
+};
+
+struct StdVideoH265ScalingLists
+{
+	deUint8	ScalingList4x4[6][16];
+	deUint8	ScalingList8x8[6][64];
+	deUint8	ScalingList16x16[6][64];
+	deUint8	ScalingList32x32[2][64];
+	deUint8	ScalingListDCCoef16x16[6];
+	deUint8	ScalingListDCCoef32x32[2];
+};
+
+struct StdVideoH265SpsVuiFlags
+{
+	deUint32	aspect_ratio_info_present_flag:1;
+	deUint32	overscan_info_present_flag:1;
+	deUint32	overscan_appropriate_flag:1;
+	deUint32	video_signal_type_present_flag:1;
+	deUint32	video_full_range_flag:1;
+	deUint32	colour_description_present_flag:1;
+	deUint32	chroma_loc_info_present_flag:1;
+	deUint32	neutral_chroma_indication_flag:1;
+	deUint32	field_seq_flag:1;
+	deUint32	frame_field_info_present_flag:1;
+	deUint32	default_display_window_flag:1;
+	deUint32	vui_timing_info_present_flag:1;
+	deUint32	vui_poc_proportional_to_timing_flag:1;
+	deUint32	vui_hrd_parameters_present_flag:1;
+	deUint32	bitstream_restriction_flag:1;
+	deUint32	tiles_fixed_structure_flag:1;
+	deUint32	motion_vectors_over_pic_boundaries_flag:1;
+	deUint32	restricted_ref_pic_lists_flag:1;
+};
+
+struct StdVideoH265SequenceParameterSetVui
+{
+	deUint8						aspect_ratio_idc;
+	deUint16					sar_width;
+	deUint16					sar_height;
+	deUint8						video_format;
+	deUint8						colour_primaries;
+	deUint8						transfer_characteristics;
+	deUint8						matrix_coeffs;
+	deUint8						chroma_sample_loc_type_top_field;
+	deUint8						chroma_sample_loc_type_bottom_field;
+	deUint16					def_disp_win_left_offset;
+	deUint16					def_disp_win_right_offset;
+	deUint16					def_disp_win_top_offset;
+	deUint16					def_disp_win_bottom_offset;
+	deUint32					vui_num_units_in_tick;
+	deUint32					vui_time_scale;
+	deUint32					vui_num_ticks_poc_diff_one_minus1;
+	StdVideoH265HrdParameters*	hrd_parameters;
+	deUint16					min_spatial_segmentation_idc;
+	deUint8						max_bytes_per_pic_denom;
+	deUint8						max_bits_per_min_cu_denom;
+	deUint8						log2_max_mv_length_horizontal;
+	deUint8						log2_max_mv_length_vertical;
+	StdVideoH265SpsVuiFlags		flags;
+};
+
+struct StdVideoH265PredictorPaletteEntries
+{
+	deUint16	PredictorPaletteEntries[3][128];
+};
+
+struct StdVideoH265SpsFlags
+{
+	deUint32	sps_temporal_id_nesting_flag:1;
+	deUint32	separate_colour_plane_flag:1;
+	deUint32	scaling_list_enabled_flag:1;
+	deUint32	sps_scaling_list_data_present_flag:1;
+	deUint32	amp_enabled_flag:1;
+	deUint32	sample_adaptive_offset_enabled_flag:1;
+	deUint32	pcm_enabled_flag:1;
+	deUint32	pcm_loop_filter_disabled_flag:1;
+	deUint32	long_term_ref_pics_present_flag:1;
+	deUint32	sps_temporal_mvp_enabled_flag:1;
+	deUint32	strong_intra_smoothing_enabled_flag:1;
+	deUint32	vui_parameters_present_flag:1;
+	deUint32	sps_extension_present_flag:1;
+	deUint32	sps_range_extension_flag:1;
+	deUint32	transform_skip_rotation_enabled_flag:1;
+	deUint32	transform_skip_context_enabled_flag:1;
+	deUint32	implicit_rdpcm_enabled_flag:1;
+	deUint32	explicit_rdpcm_enabled_flag:1;
+	deUint32	extended_precision_processing_flag:1;
+	deUint32	intra_smoothing_disabled_flag:1;
+	deUint32	high_precision_offsets_enabled_flag:1;
+	deUint32	persistent_rice_adaptation_enabled_flag:1;
+	deUint32	cabac_bypass_alignment_enabled_flag:1;
+	deUint32	sps_curr_pic_ref_enabled_flag:1;
+	deUint32	palette_mode_enabled_flag:1;
+	deUint32	sps_palette_predictor_initializer_present_flag:1;
+	deUint32	intra_boundary_filtering_disabled_flag:1;
+};
+
+struct StdVideoH265SequenceParameterSet
+{
+	StdVideoH265ProfileIdc					profile_idc;
+	StdVideoH265Level						level_idc;
+	deUint32								pic_width_in_luma_samples;
+	deUint32								pic_height_in_luma_samples;
+	deUint8									sps_video_parameter_set_id;
+	deUint8									sps_max_sub_layers_minus1;
+	deUint8									sps_seq_parameter_set_id;
+	deUint8									chroma_format_idc;
+	deUint8									bit_depth_luma_minus8;
+	deUint8									bit_depth_chroma_minus8;
+	deUint8									log2_max_pic_order_cnt_lsb_minus4;
+	deUint8									sps_max_dec_pic_buffering_minus1;
+	deUint8									log2_min_luma_coding_block_size_minus3;
+	deUint8									log2_diff_max_min_luma_coding_block_size;
+	deUint8									log2_min_luma_transform_block_size_minus2;
+	deUint8									log2_diff_max_min_luma_transform_block_size;
+	deUint8									max_transform_hierarchy_depth_inter;
+	deUint8									max_transform_hierarchy_depth_intra;
+	deUint8									num_short_term_ref_pic_sets;
+	deUint8									num_long_term_ref_pics_sps;
+	deUint8									pcm_sample_bit_depth_luma_minus1;
+	deUint8									pcm_sample_bit_depth_chroma_minus1;
+	deUint8									log2_min_pcm_luma_coding_block_size_minus3;
+	deUint8									log2_diff_max_min_pcm_luma_coding_block_size;
+	deUint32								conf_win_left_offset;
+	deUint32								conf_win_right_offset;
+	deUint32								conf_win_top_offset;
+	deUint32								conf_win_bottom_offset;
+	StdVideoH265DecPicBufMgr*				pDecPicBufMgr;
+	StdVideoH265SpsFlags					flags;
+	StdVideoH265ScalingLists*				pScalingLists;
+	StdVideoH265SequenceParameterSetVui*	pSequenceParameterSetVui;
+	deUint8									palette_max_size;
+	deUint8									delta_palette_max_predictor_size;
+	deUint8									motion_vector_resolution_control_idc;
+	deUint8									sps_num_palette_predictor_initializer_minus1;
+	StdVideoH265PredictorPaletteEntries*	pPredictorPaletteEntries;
+};
+
+struct StdVideoH265PpsFlags
+{
+	deUint32	dependent_slice_segments_enabled_flag:1;
+	deUint32	output_flag_present_flag:1;
+	deUint32	sign_data_hiding_enabled_flag:1;
+	deUint32	cabac_init_present_flag:1;
+	deUint32	constrained_intra_pred_flag:1;
+	deUint32	transform_skip_enabled_flag:1;
+	deUint32	cu_qp_delta_enabled_flag:1;
+	deUint32	pps_slice_chroma_qp_offsets_present_flag:1;
+	deUint32	weighted_pred_flag:1;
+	deUint32	weighted_bipred_flag:1;
+	deUint32	transquant_bypass_enabled_flag:1;
+	deUint32	tiles_enabled_flag:1;
+	deUint32	entropy_coding_sync_enabled_flag:1;
+	deUint32	uniform_spacing_flag:1;
+	deUint32	loop_filter_across_tiles_enabled_flag:1;
+	deUint32	pps_loop_filter_across_slices_enabled_flag:1;
+	deUint32	deblocking_filter_control_present_flag:1;
+	deUint32	deblocking_filter_override_enabled_flag:1;
+	deUint32	pps_deblocking_filter_disabled_flag:1;
+	deUint32	pps_scaling_list_data_present_flag:1;
+	deUint32	lists_modification_present_flag:1;
+	deUint32	slice_segment_header_extension_present_flag:1;
+	deUint32	pps_extension_present_flag:1;
+	deUint32	cross_component_prediction_enabled_flag:1;
+	deUint32	chroma_qp_offset_list_enabled_flag:1;
+	deUint32	pps_curr_pic_ref_enabled_flag:1;
+	deUint32	residual_adaptive_colour_transform_enabled_flag:1;
+	deUint32	pps_slice_act_qp_offsets_present_flag:1;
+	deUint32	pps_palette_predictor_initializer_present_flag:1;
+	deUint32	monochrome_palette_flag:1;
+	deUint32	pps_range_extension_flag:1;
+};
+
+struct StdVideoH265PictureParameterSet
+{
+	deUint8									pps_pic_parameter_set_id;
+	deUint8									pps_seq_parameter_set_id;
+	deUint8									num_extra_slice_header_bits;
+	deUint8									num_ref_idx_l0_default_active_minus1;
+	deUint8									num_ref_idx_l1_default_active_minus1;
+	deInt8									init_qp_minus26;
+	deUint8									diff_cu_qp_delta_depth;
+	deInt8									pps_cb_qp_offset;
+	deInt8									pps_cr_qp_offset;
+	deUint8									num_tile_columns_minus1;
+	deUint8									num_tile_rows_minus1;
+	deUint16								column_width_minus1[19];
+	deUint16								row_height_minus1[21];
+	deInt8									pps_beta_offset_div2;
+	deInt8									pps_tc_offset_div2;
+	deUint8									log2_parallel_merge_level_minus2;
+	StdVideoH265PpsFlags					flags;
+	StdVideoH265ScalingLists*				pScalingLists;
+	deUint8									log2_max_transform_skip_block_size_minus2;
+	deUint8									diff_cu_chroma_qp_offset_depth;
+	deUint8									chroma_qp_offset_list_len_minus1;
+	deInt8									cb_qp_offset_list[6];
+	deInt8									cr_qp_offset_list[6];
+	deUint8									log2_sao_offset_scale_luma;
+	deUint8									log2_sao_offset_scale_chroma;
+	deInt8									pps_act_y_qp_offset_plus5;
+	deInt8									pps_act_cb_qp_offset_plus5;
+	deInt8									pps_act_cr_qp_offset_plus5;
+	deUint8									pps_num_palette_predictor_initializer;
+	deUint8									luma_bit_depth_entry_minus8;
+	deUint8									chroma_bit_depth_entry_minus8;
+	StdVideoH265PredictorPaletteEntries*	pPredictorPaletteEntries;
+};
+
+struct StdVideoDecodeH265PictureInfoFlags
+{
+	deUint32	IrapPicFlag:1;
+	deUint32	IdrPicFlag:1;
+	deUint32	IsReference:1;
+	deUint32	short_term_ref_pic_set_sps_flag:1;
+};
+
+struct StdVideoDecodeH265PictureInfo
+{
+	deUint8								vps_video_parameter_set_id;
+	deUint8								sps_seq_parameter_set_id;
+	deUint8								pps_pic_parameter_set_id;
+	deUint8								num_short_term_ref_pic_sets;
+	deInt32								PicOrderCntVal;
+	deUint16							NumBitsForSTRefPicSetInSlice;
+	deUint8								NumDeltaPocsOfRefRpsIdx;
+	deUint8								RefPicSetStCurrBefore[8];
+	deUint8								RefPicSetStCurrAfter[8];
+	deUint8								RefPicSetLtCurr[8];
+	StdVideoDecodeH265PictureInfoFlags	flags;
+};
+
+struct StdVideoDecodeH265ReferenceInfoFlags
+{
+	deUint32	is_long_term:1;
+	deUint32	is_non_existing:1;
+};
+
+struct StdVideoDecodeH265ReferenceInfo
+{
+	deInt32									PicOrderCntVal;
+	StdVideoDecodeH265ReferenceInfoFlags	flags;
+};
+
+struct VkVideoDecodeH265ProfileEXT
+{
+	VkStructureType			sType;
+	const void*				pNext;
+	StdVideoH265ProfileIdc	stdProfileIdc;
+};
+
+struct VkVideoDecodeH265CapabilitiesEXT
+{
+	VkStructureType			sType;
+	void*					pNext;
+	deUint32				maxLevel;
+	VkExtensionProperties	stdExtensionVersion;
+};
+
+struct VkVideoDecodeH265SessionCreateInfoEXT
+{
+	VkStructureType					sType;
+	const void*						pNext;
+	VkVideoDecodeH265CreateFlagsEXT	flags;
+	const VkExtensionProperties*	pStdExtensionVersion;
+};
+
+struct VkVideoDecodeH265SessionParametersAddInfoEXT
+{
+	VkStructureType							sType;
+	const void*								pNext;
+	deUint32								spsStdCount;
+	const StdVideoH265SequenceParameterSet*	pSpsStd;
+	deUint32								ppsStdCount;
+	const StdVideoH265PictureParameterSet*	pPpsStd;
+};
+
+struct VkVideoDecodeH265SessionParametersCreateInfoEXT
+{
+	VkStructureType										sType;
+	const void*											pNext;
+	deUint32											maxSpsStdCount;
+	deUint32											maxPpsStdCount;
+	const VkVideoDecodeH265SessionParametersAddInfoEXT*	pParametersAddInfo;
+};
+
+struct VkVideoDecodeH265PictureInfoEXT
+{
+	VkStructureType					sType;
+	const void*						pNext;
+	StdVideoDecodeH265PictureInfo*	pStdPictureInfo;
+	deUint32						slicesCount;
+	const deUint32*					pSlicesDataOffsets;
+};
+
+struct VkVideoDecodeH265DpbSlotInfoEXT
+{
+	VkStructureType							sType;
+	const void*								pNext;
+	const StdVideoDecodeH265ReferenceInfo*	pStdReferenceInfo;
+};
+
 struct VkImagePipeSurfaceCreateInfoFUCHSIA
 {
 	VkStructureType							sType;
@@ -5363,6 +6475,47 @@
 	pt::zx_handle_t							imagePipeHandle;
 };
 
+struct VkImportMemoryZirconHandleInfoFUCHSIA
+{
+	VkStructureType						sType;
+	const void*							pNext;
+	VkExternalMemoryHandleTypeFlagBits	handleType;
+	pt::zx_handle_t						handle;
+};
+
+struct VkMemoryZirconHandlePropertiesFUCHSIA
+{
+	VkStructureType	sType;
+	void*			pNext;
+	deUint32		memoryTypeBits;
+};
+
+struct VkMemoryGetZirconHandleInfoFUCHSIA
+{
+	VkStructureType						sType;
+	const void*							pNext;
+	VkDeviceMemory						memory;
+	VkExternalMemoryHandleTypeFlagBits	handleType;
+};
+
+struct VkImportSemaphoreZirconHandleInfoFUCHSIA
+{
+	VkStructureType							sType;
+	const void*								pNext;
+	VkSemaphore								semaphore;
+	VkSemaphoreImportFlags					flags;
+	VkExternalSemaphoreHandleTypeFlagBits	handleType;
+	pt::zx_handle_t							zirconHandle;
+};
+
+struct VkSemaphoreGetZirconHandleInfoFUCHSIA
+{
+	VkStructureType							sType;
+	const void*								pNext;
+	VkSemaphore								semaphore;
+	VkExternalSemaphoreHandleTypeFlagBits	handleType;
+};
+
 struct VkStreamDescriptorSurfaceCreateInfoGGP
 {
 	VkStructureType							sType;
diff --git a/external/vulkancts/framework/vulkan/vkTypeUtil.hpp b/external/vulkancts/framework/vulkan/vkTypeUtil.hpp
index b3ae6c0..e982ce9 100644
--- a/external/vulkancts/framework/vulkan/vkTypeUtil.hpp
+++ b/external/vulkancts/framework/vulkan/vkTypeUtil.hpp
@@ -180,6 +180,47 @@
 	return makeViewport(0.0f, 0.0f, (float)width, (float)height, 0.0f, 1.0f);
 }
 
+inline VkPrimitiveTopology primitiveTopologyCastToList (const VkPrimitiveTopology primitiveTopology)
+{
+	DE_STATIC_ASSERT(static_cast<deUint64>(VK_PRIMITIVE_TOPOLOGY_PATCH_LIST) + 1 == static_cast<deUint64>(VK_PRIMITIVE_TOPOLOGY_LAST));
+
+	switch (primitiveTopology)
+	{
+		case VK_PRIMITIVE_TOPOLOGY_POINT_LIST:						return VK_PRIMITIVE_TOPOLOGY_POINT_LIST;
+		case VK_PRIMITIVE_TOPOLOGY_LINE_LIST:						return VK_PRIMITIVE_TOPOLOGY_LINE_LIST;
+		case VK_PRIMITIVE_TOPOLOGY_LINE_STRIP:						return VK_PRIMITIVE_TOPOLOGY_LINE_LIST;
+		case VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST:					return VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST;
+		case VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP:					return VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST;
+		case VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN:					return VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST;
+		case VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY:		return VK_PRIMITIVE_TOPOLOGY_LINE_LIST;
+		case VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY:		return VK_PRIMITIVE_TOPOLOGY_LINE_LIST;
+		case VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY:	return VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST;
+		case VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY:	return VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST;
+		case VK_PRIMITIVE_TOPOLOGY_PATCH_LIST:						return VK_PRIMITIVE_TOPOLOGY_PATCH_LIST;
+		default: TCU_THROW(InternalError, "Unknown primitive topology.");
+	}
+}
+
+inline bool isPrimitiveTopologyPoint (const VkPrimitiveTopology primitiveTopology)
+{
+	return primitiveTopologyCastToList(primitiveTopology) == VK_PRIMITIVE_TOPOLOGY_POINT_LIST;
+}
+
+inline bool isPrimitiveTopologyLine (const VkPrimitiveTopology primitiveTopology)
+{
+	return primitiveTopologyCastToList(primitiveTopology) == VK_PRIMITIVE_TOPOLOGY_LINE_LIST;
+}
+
+inline bool isPrimitiveTopologyTriangle (const VkPrimitiveTopology primitiveTopology)
+{
+	return primitiveTopologyCastToList(primitiveTopology) == VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST;
+}
+
+inline bool isPrimitiveTopologyPatch (const VkPrimitiveTopology primitiveTopology)
+{
+	return primitiveTopologyCastToList(primitiveTopology) == VK_PRIMITIVE_TOPOLOGY_PATCH_LIST;
+}
+
 } // vk
 
 #endif // _VKTYPEUTIL_HPP
diff --git a/external/vulkancts/framework/vulkan/vkTypeUtil.inl b/external/vulkancts/framework/vulkan/vkTypeUtil.inl
index 394240c..9484ce8 100644
--- a/external/vulkancts/framework/vulkan/vkTypeUtil.inl
+++ b/external/vulkancts/framework/vulkan/vkTypeUtil.inl
@@ -651,3 +651,32 @@
 	res.depth	= depth;
 	return res;
 }
+
+inline StdVideoEncodeH264RefListModEntry makeStdVideoEncodeH264RefListModEntry (StdVideoH264ModificationOfPicNumsIdc modification_of_pic_nums_idc, deUint16 abs_diff_pic_num_minus1, deUint16 long_term_pic_num)
+{
+	StdVideoEncodeH264RefListModEntry res;
+	res.modification_of_pic_nums_idc	= modification_of_pic_nums_idc;
+	res.abs_diff_pic_num_minus1			= abs_diff_pic_num_minus1;
+	res.long_term_pic_num				= long_term_pic_num;
+	return res;
+}
+
+inline StdVideoEncodeH264RefPicMarkingEntry makeStdVideoEncodeH264RefPicMarkingEntry (StdVideoH264MemMgmtControlOp operation, deUint16 difference_of_pic_nums_minus1, deUint16 long_term_pic_num, deUint16 long_term_frame_idx, deUint16 max_long_term_frame_idx_plus1)
+{
+	StdVideoEncodeH264RefPicMarkingEntry res;
+	res.operation						= operation;
+	res.difference_of_pic_nums_minus1	= difference_of_pic_nums_minus1;
+	res.long_term_pic_num				= long_term_pic_num;
+	res.long_term_frame_idx				= long_term_frame_idx;
+	res.max_long_term_frame_idx_plus1	= max_long_term_frame_idx_plus1;
+	return res;
+}
+
+inline StdVideoDecodeH264Mvc makeStdVideoDecodeH264Mvc (deUint32 viewId0, deUint32 mvcElementCount, StdVideoDecodeH264MvcElement* pMvcElements)
+{
+	StdVideoDecodeH264Mvc res;
+	res.viewId0			= viewId0;
+	res.mvcElementCount	= mvcElementCount;
+	res.pMvcElements	= pMvcElements;
+	return res;
+}
diff --git a/external/vulkancts/framework/vulkan/vkVirtualDeviceInterface.inl b/external/vulkancts/framework/vulkan/vkVirtualDeviceInterface.inl
index 5c988f9..73fbb51 100644
--- a/external/vulkancts/framework/vulkan/vkVirtualDeviceInterface.inl
+++ b/external/vulkancts/framework/vulkan/vkVirtualDeviceInterface.inl
@@ -296,6 +296,13 @@
 virtual VkResult			setPrivateDataEXT								(VkDevice device, VkObjectType objectType, deUint64 objectHandle, VkPrivateDataSlotEXT privateDataSlot, deUint64 data) const = 0;
 virtual void				getPrivateDataEXT								(VkDevice device, VkObjectType objectType, deUint64 objectHandle, VkPrivateDataSlotEXT privateDataSlot, deUint64* pData) const = 0;
 virtual void				cmdSetFragmentShadingRateEnumNV					(VkCommandBuffer commandBuffer, VkFragmentShadingRateNV shadingRate, const VkFragmentShadingRateCombinerOpKHR combinerOps[2]) const = 0;
+virtual void				cmdSetVertexInputEXT							(VkCommandBuffer commandBuffer, deUint32 vertexBindingDescriptionCount, const VkVertexInputBindingDescription2EXT* pVertexBindingDescriptions, deUint32 vertexAttributeDescriptionCount, const VkVertexInputAttributeDescription2EXT* pVertexAttributeDescriptions) const = 0;
+virtual void				cmdSetPatchControlPointsEXT						(VkCommandBuffer commandBuffer, deUint32 patchControlPoints) const = 0;
+virtual void				cmdSetRasterizerDiscardEnableEXT				(VkCommandBuffer commandBuffer, VkBool32 rasterizerDiscardEnable) const = 0;
+virtual void				cmdSetDepthBiasEnableEXT						(VkCommandBuffer commandBuffer, VkBool32 depthBiasEnable) const = 0;
+virtual void				cmdSetLogicOpEXT								(VkCommandBuffer commandBuffer, VkLogicOp logicOp) const = 0;
+virtual void				cmdSetPrimitiveRestartEnableEXT					(VkCommandBuffer commandBuffer, VkBool32 primitiveRestartEnable) const = 0;
+virtual void				cmdSetColorWriteEnableEXT						(VkCommandBuffer commandBuffer, deUint32 attachmentCount, const VkBool32* pColorWriteEnables) const = 0;
 virtual VkResult			createAccelerationStructureKHR					(VkDevice device, const VkAccelerationStructureCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkAccelerationStructureKHR* pAccelerationStructure) const = 0;
 virtual void				destroyAccelerationStructureKHR					(VkDevice device, VkAccelerationStructureKHR accelerationStructure, const VkAllocationCallbacks* pAllocator) const = 0;
 virtual void				cmdBuildAccelerationStructuresKHR				(VkCommandBuffer commandBuffer, deUint32 infoCount, const VkAccelerationStructureBuildGeometryInfoKHR* pInfos, const VkAccelerationStructureBuildRangeInfoKHR* const* ppBuildRangeInfos) const = 0;
@@ -320,6 +327,22 @@
 virtual void				cmdSetRayTracingPipelineStackSizeKHR			(VkCommandBuffer commandBuffer, deUint32 pipelineStackSize) const = 0;
 virtual VkResult			getAndroidHardwareBufferPropertiesANDROID		(VkDevice device, const struct pt::AndroidHardwareBufferPtr buffer, VkAndroidHardwareBufferPropertiesANDROID* pProperties) const = 0;
 virtual VkResult			getMemoryAndroidHardwareBufferANDROID			(VkDevice device, const VkMemoryGetAndroidHardwareBufferInfoANDROID* pInfo, struct pt::AndroidHardwareBufferPtr* pBuffer) const = 0;
+virtual VkResult			createVideoSessionKHR							(VkDevice device, const VkVideoSessionCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkVideoSessionKHR* pVideoSession) const = 0;
+virtual void				destroyVideoSessionKHR							(VkDevice device, VkVideoSessionKHR videoSession, const VkAllocationCallbacks* pAllocator) const = 0;
+virtual VkResult			getVideoSessionMemoryRequirementsKHR			(VkDevice device, VkVideoSessionKHR videoSession, deUint32* pVideoSessionMemoryRequirementsCount, VkVideoGetMemoryPropertiesKHR* pVideoSessionMemoryRequirements) const = 0;
+virtual VkResult			bindVideoSessionMemoryKHR						(VkDevice device, VkVideoSessionKHR videoSession, deUint32 videoSessionBindMemoryCount, const VkVideoBindMemoryKHR* pVideoSessionBindMemories) const = 0;
+virtual VkResult			createVideoSessionParametersKHR					(VkDevice device, const VkVideoSessionParametersCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkVideoSessionParametersKHR* pVideoSessionParameters) const = 0;
+virtual VkResult			updateVideoSessionParametersKHR					(VkDevice device, VkVideoSessionParametersKHR videoSessionParameters, const VkVideoSessionParametersUpdateInfoKHR* pUpdateInfo) const = 0;
+virtual void				destroyVideoSessionParametersKHR				(VkDevice device, VkVideoSessionParametersKHR videoSessionParameters, const VkAllocationCallbacks* pAllocator) const = 0;
+virtual void				cmdBeginVideoCodingKHR							(VkCommandBuffer commandBuffer, const VkVideoBeginCodingInfoKHR* pBeginInfo) const = 0;
+virtual void				cmdEndVideoCodingKHR							(VkCommandBuffer commandBuffer, const VkVideoEndCodingInfoKHR* pEndCodingInfo) const = 0;
+virtual void				cmdControlVideoCodingKHR						(VkCommandBuffer commandBuffer, const VkVideoCodingControlInfoKHR* pCodingControlInfo) const = 0;
+virtual void				cmdDecodeVideoKHR								(VkCommandBuffer commandBuffer, const VkVideoDecodeInfoKHR* pFrameInfo) const = 0;
+virtual void				cmdEncodeVideoKHR								(VkCommandBuffer commandBuffer, const VkVideoEncodeInfoKHR* pEncodeInfo) const = 0;
+virtual VkResult			getMemoryZirconHandleFUCHSIA					(VkDevice device, const VkMemoryGetZirconHandleInfoFUCHSIA* pGetZirconHandleInfo, pt::zx_handle_t* pZirconHandle) const = 0;
+virtual VkResult			getMemoryZirconHandlePropertiesFUCHSIA			(VkDevice device, VkExternalMemoryHandleTypeFlagBits handleType, pt::zx_handle_t zirconHandle, VkMemoryZirconHandlePropertiesFUCHSIA* pMemoryZirconHandleProperties) const = 0;
+virtual VkResult			importSemaphoreZirconHandleFUCHSIA				(VkDevice device, const VkImportSemaphoreZirconHandleInfoFUCHSIA* pImportSemaphoreZirconHandleInfo) const = 0;
+virtual VkResult			getSemaphoreZirconHandleFUCHSIA					(VkDevice device, const VkSemaphoreGetZirconHandleInfoFUCHSIA* pGetZirconHandleInfo, pt::zx_handle_t* pZirconHandle) const = 0;
 virtual VkResult			getMemoryWin32HandleKHR							(VkDevice device, const VkMemoryGetWin32HandleInfoKHR* pGetWin32HandleInfo, pt::Win32Handle* pHandle) const = 0;
 virtual VkResult			getMemoryWin32HandlePropertiesKHR				(VkDevice device, VkExternalMemoryHandleTypeFlagBits handleType, pt::Win32Handle handle, VkMemoryWin32HandlePropertiesKHR* pMemoryWin32HandleProperties) const = 0;
 virtual VkResult			importSemaphoreWin32HandleKHR					(VkDevice device, const VkImportSemaphoreWin32HandleInfoKHR* pImportSemaphoreWin32HandleInfo) const = 0;
diff --git a/external/vulkancts/framework/vulkan/vkVirtualInstanceInterface.inl b/external/vulkancts/framework/vulkan/vkVirtualInstanceInterface.inl
index b32340b..3c4030b 100644
--- a/external/vulkancts/framework/vulkan/vkVirtualInstanceInterface.inl
+++ b/external/vulkancts/framework/vulkan/vkVirtualInstanceInterface.inl
@@ -65,6 +65,8 @@
 virtual VkResult	acquireWinrtDisplayNV											(VkPhysicalDevice physicalDevice, VkDisplayKHR display) const = 0;
 virtual VkResult	getWinrtDisplayNV												(VkPhysicalDevice physicalDevice, deUint32 deviceRelativeId, VkDisplayKHR* pDisplay) const = 0;
 virtual VkResult	createAndroidSurfaceKHR											(VkInstance instance, const VkAndroidSurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface) const = 0;
+virtual VkResult	getPhysicalDeviceVideoCapabilitiesKHR							(VkPhysicalDevice physicalDevice, const VkVideoProfileKHR* pVideoProfile, VkVideoCapabilitiesKHR* pCapabilities) const = 0;
+virtual VkResult	getPhysicalDeviceVideoFormatPropertiesKHR						(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceVideoFormatInfoKHR* pVideoFormatInfo, deUint32* pVideoFormatPropertyCount, VkVideoFormatPropertiesKHR* pVideoFormatProperties) const = 0;
 virtual VkResult	createImagePipeSurfaceFUCHSIA									(VkInstance instance, const VkImagePipeSurfaceCreateInfoFUCHSIA* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface) const = 0;
 virtual VkResult	createStreamDescriptorSurfaceGGP								(VkInstance instance, const VkStreamDescriptorSurfaceCreateInfoGGP* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface) const = 0;
 virtual VkResult	createIOSSurfaceMVK												(VkInstance instance, const VkIOSSurfaceCreateInfoMVK* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface) const = 0;
diff --git a/external/vulkancts/framework/vulkan/vkVulkan_c.inl b/external/vulkancts/framework/vulkan/vkVulkan_c.inl
index 3e64082..c1f3dab 100644
--- a/external/vulkancts/framework/vulkan/vkVulkan_c.inl
+++ b/external/vulkancts/framework/vulkan/vkVulkan_c.inl
@@ -1,6 +1,907 @@
 /* WARNING: This is auto-generated file. Do not modify, since changes will
  * be lost! Modify the generating script instead.
  */
+/*
+** Copyright (c) 2019-2021 The Khronos Group Inc.
+**
+** SPDX-License-Identifier: Apache-2.0
+*/
+
+#ifndef VULKAN_VIDEO_CODEC_COMMON_H_
+#define VULKAN_VIDEO_CODEC_COMMON_H_ 1
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define VK_MAKE_VIDEO_STD_VERSION(major, minor, patch) \
+    ((((deUint32)(major)) << 22) | (((deUint32)(minor)) << 12) | ((deUint32)(patch)))
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // VULKAN_VIDEO_CODEC_COMMON_H_
+/*
+** Copyright (c) 2019-2021 The Khronos Group Inc.
+**
+** SPDX-License-Identifier: Apache-2.0
+*/
+
+#ifndef VULKAN_VIDEO_CODEC_H264STD_H_
+#define VULKAN_VIDEO_CODEC_H264STD_H_ 1
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+
+// Vulkan 0.9 provisional Vulkan video H.264 encode and decode std specification version number
+#define VK_STD_VULKAN_VIDEO_CODEC_H264_API_VERSION_0_9 VK_MAKE_VIDEO_STD_VERSION(0, 9, 0) // Patch version should always be set to 0
+
+// Format must be in the form XX.XX where the first two digits are the major and the second two, the minor.
+#define VK_STD_VULKAN_VIDEO_CODEC_H264_SPEC_VERSION   VK_STD_VULKAN_VIDEO_CODEC_H264_API_VERSION_0_9
+#define VK_STD_VULKAN_VIDEO_CODEC_H264_EXTENSION_NAME "VK_STD_vulkan_video_codec_h264"
+
+// *************************************************
+// Video H.264 common definitions:
+// *************************************************
+
+typedef enum StdVideoH264ChromaFormatIdc {
+    std_video_h264_chroma_format_idc_monochrome  = 0,
+    std_video_h264_chroma_format_idc_420         = 1,
+    std_video_h264_chroma_format_idc_422         = 2,
+    std_video_h264_chroma_format_idc_444         = 3,
+} StdVideoH264ChromaFormatIdc;
+
+typedef enum StdVideoH264ProfileIdc {
+    std_video_h264_profile_idc_baseline             = 66, /* Only constrained baseline is supported */
+    std_video_h264_profile_idc_main                 = 77,
+    std_video_h264_profile_idc_high                 = 100,
+    std_video_h264_profile_idc_high_444_predictive  = 244,
+    std_video_h264_profile_idc_invalid              = 0x7FFFFFFF
+} StdVideoH264ProfileIdc;
+
+typedef enum StdVideoH264Level {
+    std_video_h264_level_1_0 = 0,
+    std_video_h264_level_1_1 = 1,
+    std_video_h264_level_1_2 = 2,
+    std_video_h264_level_1_3 = 3,
+    std_video_h264_level_2_0 = 4,
+    std_video_h264_level_2_1 = 5,
+    std_video_h264_level_2_2 = 6,
+    std_video_h264_level_3_0 = 7,
+    std_video_h264_level_3_1 = 8,
+    std_video_h264_level_3_2 = 9,
+    std_video_h264_level_4_0 = 10,
+    std_video_h264_level_4_1 = 11,
+    std_video_h264_level_4_2 = 12,
+    std_video_h264_level_5_0 = 13,
+    std_video_h264_level_5_1 = 14,
+    std_video_h264_level_5_2 = 15,
+    std_video_h264_level_6_0 = 16,
+    std_video_h264_level_6_1 = 17,
+    std_video_h264_level_6_2 = 18,
+    std_video_h264_level_invalid = 0x7FFFFFFF
+} StdVideoH264Level;
+
+typedef enum StdVideoH264PocType {
+    std_video_h264_poc_type_0 = 0,
+    std_video_h264_poc_type_1 = 1,
+    std_video_h264_poc_type_2 = 2,
+    std_video_h264_poc_type_invalid = 0x7FFFFFFF
+} StdVideoH264PocType;
+
+typedef enum StdVideoH264AspectRatioIdc {
+    std_video_h264_aspect_ratio_idc_unspecified = 0,
+    std_video_h264_aspect_ratio_idc_square = 1,
+    std_video_h264_aspect_ratio_idc_12_11 = 2,
+    std_video_h264_aspect_ratio_idc_10_11 = 3,
+    std_video_h264_aspect_ratio_idc_16_11 = 4,
+    std_video_h264_aspect_ratio_idc_40_33 = 5,
+    std_video_h264_aspect_ratio_idc_24_11 = 6,
+    std_video_h264_aspect_ratio_idc_20_11 = 7,
+    std_video_h264_aspect_ratio_idc_32_11 = 8,
+    std_video_h264_aspect_ratio_idc_80_33 = 9,
+    std_video_h264_aspect_ratio_idc_18_11 = 10,
+    std_video_h264_aspect_ratio_idc_15_11 = 11,
+    std_video_h264_aspect_ratio_idc_64_33 = 12,
+    std_video_h264_aspect_ratio_idc_160_99 = 13,
+    std_video_h264_aspect_ratio_idc_4_3 = 14,
+    std_video_h264_aspect_ratio_idc_3_2 = 15,
+    std_video_h264_aspect_ratio_idc_2_1 = 16,
+    std_video_h264_aspect_ratio_idc_extended_sar = 255,
+    std_video_h264_aspect_ratio_idc_invalid = 0x7FFFFFFF
+} StdVideoH264AspectRatioIdc;
+
+typedef enum StdVideoH264WeightedBiPredIdc {
+    std_video_h264_default_weighted_b_slices_prediction_idc = 0,
+    std_video_h264_explicit_weighted_b_slices_prediction_idc = 1,
+    std_video_h264_implicit_weighted_b_slices_prediction_idc = 2,
+    std_video_h264_invalid_weighted_b_slices_prediction_idc = 0x7FFFFFFF
+} StdVideoH264WeightedBiPredIdc;
+
+typedef enum StdVideoH264ModificationOfPicNumsIdc {
+    std_video_h264_modification_of_pic_nums_idc_short_term_subtract = 0,
+    std_video_h264_modification_of_pic_nums_idc_short_term_add = 1,
+    std_video_h264_modification_of_pic_nums_idc_long_term = 2,
+    std_video_h264_modification_of_pic_nums_idc_end = 3,
+    std_video_h264_modification_of_pic_nums_idc_invalid = 0x7FFFFFFF
+} StdVideoH264ModificationOfPicNumsIdc;
+
+typedef enum StdVideoH264MemMgmtControlOp {
+    std_video_h264_mem_mgmt_control_op_end = 0,
+    std_video_h264_mem_mgmt_control_op_unmark_short_term = 1,
+    std_video_h264_mem_mgmt_control_op_unmark_long_term = 2,
+    std_video_h264_mem_mgmt_control_op_mark_long_term = 3,
+    std_video_h264_mem_mgmt_control_op_set_max_long_term_index = 4,
+    std_video_h264_mem_mgmt_control_op_unmark_all = 5,
+    std_video_h264_mem_mgmt_control_op_mark_current_as_long_term = 6,
+    std_video_h264_mem_mgmt_control_op_invalid = 0x7FFFFFFF
+} StdVideoH264MemMgmtControlOp;
+
+typedef enum StdVideoH264CabacInitIdc {
+    std_video_h264_cabac_init_idc_0 = 0,
+    std_video_h264_cabac_init_idc_1 = 1,
+    std_video_h264_cabac_init_idc_2 = 2,
+    std_video_h264_cabac_init_idc_invalid = 0x7FFFFFFF
+} StdVideoH264CabacInitIdc;
+
+typedef enum StdVideoH264DisableDeblockingFilterIdc {
+    std_video_h264_disable_deblocking_filter_idc_disabled = 0,
+    std_video_h264_disable_deblocking_filter_idc_enabled = 1,
+    std_video_h264_disable_deblocking_filter_idc_partial = 2,
+    std_video_h264_disable_deblocking_filter_idc_invalid = 0x7FFFFFFF
+} StdVideoH264DisableDeblockingFilterIdc;
+
+typedef enum StdVideoH264PictureType {
+    std_video_h264_picture_type_i = 0,
+    std_video_h264_picture_type_p = 1,
+    std_video_h264_picture_type_b = 2,
+    std_video_h264_picture_type_invalid = 0x7FFFFFFF
+} StdVideoH264PictureType;
+
+typedef enum StdVideoH264SliceType {
+    std_video_h264_slice_type_i = 0,
+    std_video_h264_slice_type_p = 1,
+    std_video_h264_slice_type_b = 2,
+    std_video_h264_slice_type_invalid = 0x7FFFFFFF
+} StdVideoH264SliceType;
+
+typedef enum StdVideoH264NonVclNaluType {
+    std_video_h264_non_vcl_nalu_type_sps = 0,
+    std_video_h264_non_vcl_nalu_type_pps = 1,
+    std_video_h264_non_vcl_nalu_type_aud = 2,
+    std_video_h264_non_vcl_nalu_type_prefix = 3,
+    std_video_h264_non_vcl_nalu_type_end_of_sequence = 4,
+    std_video_h264_non_vcl_nalu_type_end_of_stream = 5,
+    std_video_h264_non_vcl_nalu_type_precoded = 6,
+    std_video_h264_non_vcl_nalu_type_invalid = 0x7FFFFFFF
+} StdVideoH264NonVclNaluType;
+
+typedef struct StdVideoH264SpsVuiFlags {
+    deUint32 aspect_ratio_info_present_flag:1;
+    deUint32 overscan_info_present_flag:1;
+    deUint32 overscan_appropriate_flag:1;
+    deUint32 video_signal_type_present_flag:1;
+    deUint32 video_full_range_flag:1;
+    deUint32 color_description_present_flag:1;
+    deUint32 chroma_loc_info_present_flag:1;
+    deUint32 timing_info_present_flag:1;
+    deUint32 fixed_frame_rate_flag:1;
+    deUint32 bitstream_restriction_flag:1;
+    deUint32 nal_hrd_parameters_present_flag:1;
+    deUint32 vcl_hrd_parameters_present_flag:1;
+} StdVideoH264SpsVuiFlags;
+
+typedef struct StdVideoH264HrdParameters {
+    deUint8                    cpb_cnt_minus1;
+    deUint8                    bit_rate_scale;
+    deUint8                    cpb_size_scale;
+    deUint32                   bit_rate_value_minus1[32];
+    deUint32                   cpb_size_value_minus1[32];
+    deUint8                    cbr_flag[32];
+    deUint32                   initial_cpb_removal_delay_length_minus1;
+    deUint32                   cpb_removal_delay_length_minus1;
+    deUint32                   dpb_output_delay_length_minus1;
+    deUint32                   time_offset_length;
+} StdVideoH264HrdParameters;
+
+typedef struct StdVideoH264SequenceParameterSetVui {
+    StdVideoH264AspectRatioIdc  aspect_ratio_idc;
+    deUint16                    sar_width;
+    deUint16                    sar_height;
+    deUint8                     video_format;
+    deUint8                     color_primaries;
+    deUint8                     transfer_characteristics;
+    deUint8                     matrix_coefficients;
+    deUint32                    num_units_in_tick;
+    deUint32                    time_scale;
+    StdVideoH264HrdParameters   hrd_parameters;
+    deUint8                     num_reorder_frames;
+    deUint8                     max_dec_frame_buffering;
+    StdVideoH264SpsVuiFlags     flags;
+} StdVideoH264SequenceParameterSetVui;
+
+typedef struct StdVideoH264SpsFlags {
+    deUint32 constraint_set0_flag:1;
+    deUint32 constraint_set1_flag:1;
+    deUint32 constraint_set2_flag:1;
+    deUint32 constraint_set3_flag:1;
+    deUint32 constraint_set4_flag:1;
+    deUint32 constraint_set5_flag:1;
+    deUint32 direct_8x8_inference_flag:1;
+    deUint32 mb_adaptive_frame_field_flag:1;
+    deUint32 frame_mbs_only_flag:1;
+    deUint32 delta_pic_order_always_zero_flag:1;
+    deUint32 residual_colour_transform_flag:1;
+    deUint32 gaps_in_frame_num_value_allowed_flag:1;
+    deUint32 first_picture_after_seek_flag:1; // where is this being documented?
+    deUint32 qpprime_y_zero_transform_bypass_flag:1;
+    deUint32 frame_cropping_flag:1;
+    deUint32 scaling_matrix_present_flag:1;
+    deUint32 vui_parameters_present_flag:1;
+} StdVideoH264SpsFlags;
+
+typedef struct StdVideoH264ScalingLists
+{
+    // scaling_list_present_mask has one bit for each
+    // seq_scaling_list_present_flag[i] for SPS OR
+    // pic_scaling_list_present_flag[i] for PPS,
+    // bit 0 - 5 are for each entry of ScalingList4x4
+    // bit 6 - 7 are for each entry plus 6 for ScalingList8x8
+    deUint8 scaling_list_present_mask;
+    // use_default_scaling_matrix_mask has one bit for each
+    // UseDefaultScalingMatrix4x4Flag[ i ] and
+    // UseDefaultScalingMatrix8x8Flag[ i - 6 ] for SPS OR PPS
+    // bit 0 - 5 are for each entry of ScalingList4x4
+    // bit 6 - 7 are for each entry plus 6 for ScalingList8x8
+    deUint8 use_default_scaling_matrix_mask;
+    deUint8 ScalingList4x4[6][16];
+    deUint8 ScalingList8x8[2][64];
+} StdVideoH264ScalingLists;
+
+typedef struct StdVideoH264SequenceParameterSet
+{
+    StdVideoH264ProfileIdc               profile_idc;
+    StdVideoH264Level                    level_idc;
+    deUint8                              seq_parameter_set_id;
+    StdVideoH264ChromaFormatIdc          chroma_format_idc;
+    deUint8                              bit_depth_luma_minus8;
+    deUint8                              bit_depth_chroma_minus8;
+    deUint8                              log2_max_frame_num_minus4;
+    StdVideoH264PocType                  pic_order_cnt_type;
+    deUint8                              log2_max_pic_order_cnt_lsb_minus4;
+    deInt32                              offset_for_non_ref_pic;
+    deInt32                              offset_for_top_to_bottom_field;
+    deUint8                              num_ref_frames_in_pic_order_cnt_cycle;
+    deUint8                              max_num_ref_frames;
+    deUint32                             pic_width_in_mbs_minus1;
+    deUint32                             pic_height_in_map_units_minus1;
+    deUint32                             frame_crop_left_offset;
+    deUint32                             frame_crop_right_offset;
+    deUint32                             frame_crop_top_offset;
+    deUint32                             frame_crop_bottom_offset;
+    StdVideoH264SpsFlags                 flags;
+    deInt32                              offset_for_ref_frame[255]; // The number of valid values are defined by the num_ref_frames_in_pic_order_cnt_cycle
+    StdVideoH264ScalingLists*            pScalingLists;             // Must be a valid pointer if scaling_matrix_present_flag is set
+    StdVideoH264SequenceParameterSetVui* pSequenceParameterSetVui;  // Must be a valid pointer if StdVideoH264SpsFlags:vui_parameters_present_flag is set
+} StdVideoH264SequenceParameterSet;
+
+typedef struct StdVideoH264PpsFlags {
+    deUint32 transform_8x8_mode_flag:1;
+    deUint32 redundant_pic_cnt_present_flag:1;
+    deUint32 constrained_intra_pred_flag:1;
+    deUint32 deblocking_filter_control_present_flag:1;
+    deUint32 weighted_bipred_idc_flag:1;
+    deUint32 weighted_pred_flag:1;
+    deUint32 pic_order_present_flag:1;
+    deUint32 entropy_coding_mode_flag:1;
+    deUint32 scaling_matrix_present_flag:1;
+} StdVideoH264PpsFlags;
+
+typedef struct StdVideoH264PictureParameterSet
+{
+    deUint8                       seq_parameter_set_id;
+    deUint8                       pic_parameter_set_id;
+    deUint8                       num_ref_idx_l0_default_active_minus1;
+    deUint8                       num_ref_idx_l1_default_active_minus1;
+    StdVideoH264WeightedBiPredIdc weighted_bipred_idc;
+    deInt8                        pic_init_qp_minus26;
+    deInt8                        pic_init_qs_minus26;
+    deInt8                        chroma_qp_index_offset;
+    deInt8                        second_chroma_qp_index_offset;
+    StdVideoH264PpsFlags          flags;
+    StdVideoH264ScalingLists*     pScalingLists; // Must be a valid pointer if  StdVideoH264PpsFlags::scaling_matrix_present_flag is set.
+} StdVideoH264PictureParameterSet;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // VULKAN_VIDEO_CODEC_H264STD_H_
+/*
+** Copyright (c) 2019-2021 The Khronos Group Inc.
+**
+** SPDX-License-Identifier: Apache-2.0
+*/
+
+#ifndef VULKAN_VIDEO_CODEC_H264STD_ENCODE_H_
+#define VULKAN_VIDEO_CODEC_H264STD_ENCODE_H_ 1
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+
+// *************************************************
+// Video H.264 Encode related parameters:
+// *************************************************
+
+typedef struct StdVideoEncodeH264SliceHeaderFlags {
+    deUint32 idr_flag:1;
+    deUint32 is_reference_flag:1;
+    deUint32 num_ref_idx_active_override_flag:1;
+    deUint32 no_output_of_prior_pics_flag:1;
+    deUint32 long_term_reference_flag:1;
+    deUint32 adaptive_ref_pic_marking_mode_flag:1;
+    deUint32 no_prior_references_available_flag:1;
+} StdVideoEncodeH264SliceHeaderFlags;
+
+typedef struct StdVideoEncodeH264PictureInfoFlags {
+    deUint32 idr_flag:1;
+    deUint32 is_reference_flag:1;
+    deUint32 long_term_reference_flag:1;
+} StdVideoEncodeH264PictureInfoFlags;
+
+typedef struct StdVideoEncodeH264RefMgmtFlags {
+    deUint32 ref_pic_list_modification_l0_flag:1;
+    deUint32 ref_pic_list_modification_l1_flag:1;
+} StdVideoEncodeH264RefMgmtFlags;
+
+typedef struct StdVideoEncodeH264RefListModEntry {
+    StdVideoH264ModificationOfPicNumsIdc modification_of_pic_nums_idc;
+    deUint16                             abs_diff_pic_num_minus1;
+    deUint16                             long_term_pic_num;
+} StdVideoEncodeH264RefListModEntry;
+
+typedef struct StdVideoEncodeH264RefPicMarkingEntry {
+    StdVideoH264MemMgmtControlOp  operation;
+    deUint16                      difference_of_pic_nums_minus1;
+    deUint16                      long_term_pic_num;
+    deUint16                      long_term_frame_idx;
+    deUint16                      max_long_term_frame_idx_plus1;
+} StdVideoEncodeH264RefPicMarkingEntry;
+
+typedef struct StdVideoEncodeH264RefMemMgmtCtrlOperations {
+    StdVideoEncodeH264RefMgmtFlags        flags;
+    deUint8                               refList0ModOpCount;
+    StdVideoEncodeH264RefListModEntry*    pRefList0ModOperations;
+    deUint8                               refList1ModOpCount;
+    StdVideoEncodeH264RefListModEntry*    pRefList1ModOperations;
+    deUint8                               refPicMarkingOpCount;
+    StdVideoEncodeH264RefPicMarkingEntry* pRefPicMarkingOperations;
+} StdVideoEncodeH264RefMemMgmtCtrlOperations;
+
+typedef struct StdVideoEncodeH264PictureInfo {
+    StdVideoEncodeH264PictureInfoFlags   flags;
+    StdVideoH264PictureType              pictureType;
+    deUint32                             frameNum;
+    deUint32                             pictureOrderCount;
+    deUint16                             long_term_pic_num;
+    deUint16                             long_term_frame_idx;
+} StdVideoEncodeH264PictureInfo;
+
+typedef struct StdVideoEncodeH264SliceHeader {
+    StdVideoEncodeH264SliceHeaderFlags          flags;
+    StdVideoH264SliceType                       slice_type;
+    deUint8                                     seq_parameter_set_id;
+    deUint8                                     pic_parameter_set_id;
+    deUint16                                    idr_pic_id;
+    deUint8                                     num_ref_idx_l0_active_minus1;
+    deUint8                                     num_ref_idx_l1_active_minus1;
+    StdVideoH264CabacInitIdc                    cabac_init_idc;
+    StdVideoH264DisableDeblockingFilterIdc      disable_deblocking_filter_idc;
+    deInt8                                      slice_alpha_c0_offset_div2;
+    deInt8                                      slice_beta_offset_div2;
+    StdVideoEncodeH264RefMemMgmtCtrlOperations* pMemMgmtCtrlOperations;
+} StdVideoEncodeH264SliceHeader;
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // VULKAN_VIDEO_CODEC_H264STD_ENCODE_H_
+/*
+** Copyright (c) 2019-2021 The Khronos Group Inc.
+**
+** SPDX-License-Identifier: Apache-2.0
+*/
+
+#ifndef VULKAN_VIDEO_CODEC_H265STD_H_
+#define VULKAN_VIDEO_CODEC_H265STD_H_ 1
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+
+// Vulkan 0.5 version number WIP
+#define VK_STD_VULKAN_VIDEO_CODEC_H265_API_VERSION_0_5 VK_MAKE_VIDEO_STD_VERSION(0, 5, 0) // Patch version should always be set to 0
+
+// Format must be in the form XX.XX where the first two digits are the major and the second two, the minor.
+#define VK_STD_VULKAN_VIDEO_CODEC_H265_SPEC_VERSION   VK_STD_VULKAN_VIDEO_CODEC_H265_API_VERSION_0_5
+#define VK_STD_VULKAN_VIDEO_CODEC_H265_EXTENSION_NAME "VK_STD_vulkan_video_codec_h265"
+
+typedef enum StdVideoH265ChromaFormatIdc {
+    std_video_h265_chroma_format_idc_monochrome  = 0,
+    std_video_h265_chroma_format_idc_420         = 1,
+    std_video_h265_chroma_format_idc_422         = 2,
+    std_video_h265_chroma_format_idc_444         = 3,
+} StdVideoH265ChromaFormatIdc;
+
+typedef enum StdVideoH265ProfileIdc {
+    std_video_h265_profile_idc_main                     = 1,
+    std_video_h265_profile_idc_main_10                  = 2,
+    std_video_h265_profile_idc_main_still_picture       = 3,
+    std_video_h265_profile_idc_format_range_extensions  = 4,
+    std_video_h265_profile_idc_scc_extensions           = 9,
+    std_video_h265_profile_idc_invalid                  = 0x7FFFFFFF
+} StdVideoH265ProfileIdc;
+
+typedef enum StdVideoH265Level {
+    std_video_h265_level_1_0 = 0,
+    std_video_h265_level_2_0 = 1,
+    std_video_h265_level_2_1 = 2,
+    std_video_h265_level_3_0 = 3,
+    std_video_h265_level_3_1 = 4,
+    std_video_h265_level_4_0 = 5,
+    std_video_h265_level_4_1 = 6,
+    std_video_h265_level_5_0 = 7,
+    std_video_h265_level_5_1 = 8,
+    std_video_h265_level_5_2 = 9,
+    std_video_h265_level_6_0 = 10,
+    std_video_h265_level_6_1 = 11,
+    std_video_h265_level_6_2 = 12,
+    std_video_h265_level_invalid = 0x7FFFFFFF
+} StdVideoH265Level;
+
+
+typedef struct StdVideoH265DecPicBufMgr
+{
+    deUint32 max_latency_increase_plus1[7];
+    deUint8  max_dec_pic_buffering_minus1[7];
+    deUint8  max_num_reorder_pics[7];
+} StdVideoH265DecPicBufMgr;
+
+typedef struct StdVideoH265SubLayerHrdParameters {
+    deUint32 bit_rate_value_minus1[32];
+    deUint32 cpb_size_value_minus1[32];
+    deUint32 cpb_size_du_value_minus1[32];
+    deUint32 bit_rate_du_value_minus1[32];
+    deUint32 cbr_flag; // each bit represents a range of CpbCounts (bit 0 - cpb_cnt_minus1) per sub-layer
+} StdVideoH265SubLayerHrdParameters;
+
+typedef struct StdVideoH265HrdFlags {
+    deUint32 nal_hrd_parameters_present_flag : 1;
+    deUint32 vcl_hrd_parameters_present_flag : 1;
+    deUint32 sub_pic_hrd_params_present_flag : 1;
+    deUint32 sub_pic_cpb_params_in_pic_timing_sei_flag : 1;
+    deUint8  fixed_pic_rate_general_flag; // each bit represents a sublayer, bit 0 - vps_max_sub_layers_minus1
+    deUint8  fixed_pic_rate_within_cvs_flag; // each bit represents a sublayer, bit 0 - vps_max_sub_layers_minus1
+    deUint8  low_delay_hrd_flag; // each bit represents a sublayer, bit 0 - vps_max_sub_layers_minus1
+} StdVideoH265HrdFlags;
+
+typedef struct StdVideoH265HrdParameters {
+    deUint8                            tick_divisor_minus2;
+    deUint8                            du_cpb_removal_delay_increment_length_minus1;
+    deUint8                            dpb_output_delay_du_length_minus1;
+    deUint8                            bit_rate_scale;
+    deUint8                            cpb_size_scale;
+    deUint8                            cpb_size_du_scale;
+    deUint8                            initial_cpb_removal_delay_length_minus1;
+    deUint8                            au_cpb_removal_delay_length_minus1;
+    deUint8                            dpb_output_delay_length_minus1;
+    deUint8                            cpb_cnt_minus1[7];
+    deUint16                           elemental_duration_in_tc_minus1[7];
+    StdVideoH265SubLayerHrdParameters* SubLayerHrdParametersNal[7];
+    StdVideoH265SubLayerHrdParameters* SubLayerHrdParametersVcl[7];
+    StdVideoH265HrdFlags               flags;
+} StdVideoH265HrdParameters;
+
+typedef struct StdVideoH265VpsFlags {
+    deUint32 vps_temporal_id_nesting_flag : 1;
+    deUint32 vps_sub_layer_ordering_info_present_flag : 1;
+    deUint32 vps_timing_info_present_flag : 1;
+    deUint32 vps_poc_proportional_to_timing_flag : 1;
+} StdVideoH265VpsFlags;
+
+typedef struct StdVideoH265VideoParameterSet
+{
+    deUint8                      vps_video_parameter_set_id;
+    deUint8                      vps_max_sub_layers_minus1;
+    deUint32                     vps_num_units_in_tick;
+    deUint32                     vps_time_scale;
+    deUint32                     vps_num_ticks_poc_diff_one_minus1;
+    StdVideoH265DecPicBufMgr*    pDecPicBufMgr;
+    StdVideoH265HrdParameters*   hrd_parameters;
+    StdVideoH265VpsFlags         flags;
+} StdVideoH265VideoParameterSet;
+
+typedef struct StdVideoH265ScalingLists
+{
+    deUint8 ScalingList4x4[6][16];       // ScalingList[ 0 ][ MatrixID ][ i ] (sizeID = 0)
+    deUint8 ScalingList8x8[6][64];       // ScalingList[ 1 ][ MatrixID ][ i ] (sizeID = 1)
+    deUint8 ScalingList16x16[6][64];     // ScalingList[ 2 ][ MatrixID ][ i ] (sizeID = 2)
+    deUint8 ScalingList32x32[2][64];     // ScalingList[ 3 ][ MatrixID ][ i ] (sizeID = 3)
+    deUint8 ScalingListDCCoef16x16[6];   // scaling_list_dc_coef_minus8[ sizeID - 2 ][ matrixID ] + 8, sizeID = 2
+    deUint8 ScalingListDCCoef32x32[2];   // scaling_list_dc_coef_minus8[ sizeID - 2 ][ matrixID ] + 8. sizeID = 3
+} StdVideoH265ScalingLists;
+
+typedef struct StdVideoH265SpsVuiFlags {
+    deUint32 aspect_ratio_info_present_flag : 1;
+    deUint32 overscan_info_present_flag : 1;
+    deUint32 overscan_appropriate_flag : 1;
+    deUint32 video_signal_type_present_flag : 1;
+    deUint32 video_full_range_flag : 1;
+    deUint32 colour_description_present_flag : 1;
+    deUint32 chroma_loc_info_present_flag : 1;
+    deUint32 neutral_chroma_indication_flag : 1;
+    deUint32 field_seq_flag : 1;
+    deUint32 frame_field_info_present_flag : 1;
+    deUint32 default_display_window_flag : 1;
+    deUint32 vui_timing_info_present_flag : 1;
+    deUint32 vui_poc_proportional_to_timing_flag : 1;
+    deUint32 vui_hrd_parameters_present_flag : 1;
+    deUint32 bitstream_restriction_flag : 1;
+    deUint32 tiles_fixed_structure_flag : 1;
+    deUint32 motion_vectors_over_pic_boundaries_flag : 1;
+    deUint32 restricted_ref_pic_lists_flag : 1;
+} StdVideoH265SpsVuiFlags;
+
+typedef struct StdVideoH265SequenceParameterSetVui {
+    deUint8                     aspect_ratio_idc;
+    deUint16                    sar_width;
+    deUint16                    sar_height;
+    deUint8                     video_format;
+    deUint8                     colour_primaries;
+    deUint8                     transfer_characteristics;
+    deUint8                     matrix_coeffs;
+    deUint8                     chroma_sample_loc_type_top_field;
+    deUint8                     chroma_sample_loc_type_bottom_field;
+    deUint16                    def_disp_win_left_offset;
+    deUint16                    def_disp_win_right_offset;
+    deUint16                    def_disp_win_top_offset;
+    deUint16                    def_disp_win_bottom_offset;
+    deUint32                    vui_num_units_in_tick;
+    deUint32                    vui_time_scale;
+    deUint32                    vui_num_ticks_poc_diff_one_minus1;
+    StdVideoH265HrdParameters*  hrd_parameters;
+    deUint16                    min_spatial_segmentation_idc;
+    deUint8                     max_bytes_per_pic_denom;
+    deUint8                     max_bits_per_min_cu_denom;
+    deUint8                     log2_max_mv_length_horizontal;
+    deUint8                     log2_max_mv_length_vertical;
+    StdVideoH265SpsVuiFlags     flags;
+} StdVideoH265SequenceParameterSetVui;
+
+typedef struct StdVideoH265PredictorPaletteEntries
+{
+    deUint16 PredictorPaletteEntries[3][128];
+} StdVideoH265PredictorPaletteEntries;
+
+
+typedef struct StdVideoH265SpsFlags {
+    deUint32 sps_temporal_id_nesting_flag : 1;
+    deUint32 separate_colour_plane_flag : 1;
+    deUint32 scaling_list_enabled_flag : 1;
+    deUint32 sps_scaling_list_data_present_flag : 1;
+    deUint32 amp_enabled_flag : 1;
+    deUint32 sample_adaptive_offset_enabled_flag : 1;
+    deUint32 pcm_enabled_flag : 1;
+    deUint32 pcm_loop_filter_disabled_flag : 1;
+    deUint32 long_term_ref_pics_present_flag : 1;
+    deUint32 sps_temporal_mvp_enabled_flag : 1;
+    deUint32 strong_intra_smoothing_enabled_flag : 1;
+    deUint32 vui_parameters_present_flag : 1;
+    deUint32 sps_extension_present_flag : 1;
+    deUint32 sps_range_extension_flag : 1;
+
+    // extension SPS flags, valid when std_video_h265_profile_idc_format_range_extensions is set
+    deUint32 transform_skip_rotation_enabled_flag : 1;
+    deUint32 transform_skip_context_enabled_flag : 1;
+    deUint32 implicit_rdpcm_enabled_flag : 1;
+    deUint32 explicit_rdpcm_enabled_flag : 1;
+    deUint32 extended_precision_processing_flag : 1;
+    deUint32 intra_smoothing_disabled_flag : 1;
+    deUint32 high_precision_offsets_enabled_flag : 1;
+    deUint32 persistent_rice_adaptation_enabled_flag : 1;
+    deUint32 cabac_bypass_alignment_enabled_flag : 1;
+
+    // extension SPS flags, valid when std_video_h265_profile_idc_scc_extensions is set
+    deUint32 sps_curr_pic_ref_enabled_flag : 1;
+    deUint32 palette_mode_enabled_flag : 1;
+    deUint32 sps_palette_predictor_initializer_present_flag : 1;
+    deUint32 intra_boundary_filtering_disabled_flag : 1;
+} StdVideoH265SpsFlags;
+
+typedef struct StdVideoH265SequenceParameterSet
+{
+    StdVideoH265ProfileIdc               profile_idc;
+    StdVideoH265Level                    level_idc;
+    deUint32                             pic_width_in_luma_samples;
+    deUint32                             pic_height_in_luma_samples;
+    deUint8                              sps_video_parameter_set_id;
+    deUint8                              sps_max_sub_layers_minus1;
+    deUint8                              sps_seq_parameter_set_id;
+    deUint8                              chroma_format_idc;
+    deUint8                              bit_depth_luma_minus8;
+    deUint8                              bit_depth_chroma_minus8;
+    deUint8                              log2_max_pic_order_cnt_lsb_minus4;
+    deUint8                              sps_max_dec_pic_buffering_minus1;
+    deUint8                              log2_min_luma_coding_block_size_minus3;
+    deUint8                              log2_diff_max_min_luma_coding_block_size;
+    deUint8                              log2_min_luma_transform_block_size_minus2;
+    deUint8                              log2_diff_max_min_luma_transform_block_size;
+    deUint8                              max_transform_hierarchy_depth_inter;
+    deUint8                              max_transform_hierarchy_depth_intra;
+    deUint8                              num_short_term_ref_pic_sets;
+    deUint8                              num_long_term_ref_pics_sps;
+    deUint8                              pcm_sample_bit_depth_luma_minus1;
+    deUint8                              pcm_sample_bit_depth_chroma_minus1;
+    deUint8                              log2_min_pcm_luma_coding_block_size_minus3;
+    deUint8                              log2_diff_max_min_pcm_luma_coding_block_size;
+    deUint32                             conf_win_left_offset;
+    deUint32                             conf_win_right_offset;
+    deUint32                             conf_win_top_offset;
+    deUint32                             conf_win_bottom_offset;
+    StdVideoH265DecPicBufMgr*            pDecPicBufMgr;
+    StdVideoH265SpsFlags                 flags;
+    StdVideoH265ScalingLists*            pScalingLists;             // Must be a valid pointer if sps_scaling_list_data_present_flag is set
+    StdVideoH265SequenceParameterSetVui* pSequenceParameterSetVui;  // Must be a valid pointer if StdVideoH265SpsFlags:vui_parameters_present_flag is set palette_max_size;
+
+    // extension SPS flags, valid when std_video_h265_profile_idc_scc_extensions is set
+    deUint8                              palette_max_size;
+    deUint8                              delta_palette_max_predictor_size;
+    deUint8                              motion_vector_resolution_control_idc;
+    deUint8                              sps_num_palette_predictor_initializer_minus1;
+    StdVideoH265PredictorPaletteEntries* pPredictorPaletteEntries;  // Must be a valid pointer if sps_palette_predictor_initializer_present_flag is set
+} StdVideoH265SequenceParameterSet;
+
+
+typedef struct StdVideoH265PpsFlags {
+    deUint32 dependent_slice_segments_enabled_flag : 1;
+    deUint32 output_flag_present_flag : 1;
+    deUint32 sign_data_hiding_enabled_flag : 1;
+    deUint32 cabac_init_present_flag : 1;
+    deUint32 constrained_intra_pred_flag : 1;
+    deUint32 transform_skip_enabled_flag : 1;
+    deUint32 cu_qp_delta_enabled_flag : 1;
+    deUint32 pps_slice_chroma_qp_offsets_present_flag : 1;
+    deUint32 weighted_pred_flag : 1;
+    deUint32 weighted_bipred_flag : 1;
+    deUint32 transquant_bypass_enabled_flag : 1;
+    deUint32 tiles_enabled_flag : 1;
+    deUint32 entropy_coding_sync_enabled_flag : 1;
+    deUint32 uniform_spacing_flag : 1;
+    deUint32 loop_filter_across_tiles_enabled_flag : 1;
+    deUint32 pps_loop_filter_across_slices_enabled_flag : 1;
+    deUint32 deblocking_filter_control_present_flag : 1;
+    deUint32 deblocking_filter_override_enabled_flag : 1;
+    deUint32 pps_deblocking_filter_disabled_flag : 1;
+    deUint32 pps_scaling_list_data_present_flag : 1;
+    deUint32 lists_modification_present_flag : 1;
+    deUint32 slice_segment_header_extension_present_flag : 1;
+    deUint32 pps_extension_present_flag : 1;
+
+    // extension PPS flags, valid when std_video_h265_profile_idc_format_range_extensions is set
+    deUint32 cross_component_prediction_enabled_flag : 1;
+    deUint32 chroma_qp_offset_list_enabled_flag : 1;
+
+    // extension PPS flags, valid when std_video_h265_profile_idc_scc_extensions is set
+    deUint32 pps_curr_pic_ref_enabled_flag : 1;
+    deUint32 residual_adaptive_colour_transform_enabled_flag : 1;
+    deUint32 pps_slice_act_qp_offsets_present_flag : 1;
+    deUint32 pps_palette_predictor_initializer_present_flag : 1;
+    deUint32 monochrome_palette_flag : 1;
+    deUint32 pps_range_extension_flag : 1;
+} StdVideoH265PpsFlags;
+
+typedef struct StdVideoH265PictureParameterSet
+{
+    deUint8                              pps_pic_parameter_set_id;
+    deUint8                              pps_seq_parameter_set_id;
+    deUint8                              num_extra_slice_header_bits;
+    deUint8                              num_ref_idx_l0_default_active_minus1;
+    deUint8                              num_ref_idx_l1_default_active_minus1;
+    deInt8                               init_qp_minus26;
+    deUint8                              diff_cu_qp_delta_depth;
+    deInt8                               pps_cb_qp_offset;
+    deInt8                               pps_cr_qp_offset;
+    deUint8                              num_tile_columns_minus1;
+    deUint8                              num_tile_rows_minus1;
+    deUint16                             column_width_minus1[19];
+    deUint16                             row_height_minus1[21];
+    deInt8                               pps_beta_offset_div2;
+    deInt8                               pps_tc_offset_div2;
+    deUint8                              log2_parallel_merge_level_minus2;
+    StdVideoH265PpsFlags                 flags;
+    StdVideoH265ScalingLists*            pScalingLists; // Must be a valid pointer if pps_scaling_list_data_present_flag is set
+
+    // extension PPS, valid when std_video_h265_profile_idc_format_range_extensions is set
+    deUint8                              log2_max_transform_skip_block_size_minus2;
+    deUint8                              diff_cu_chroma_qp_offset_depth;
+    deUint8                              chroma_qp_offset_list_len_minus1;
+    deInt8                               cb_qp_offset_list[6];
+    deInt8                               cr_qp_offset_list[6];
+    deUint8                              log2_sao_offset_scale_luma;
+    deUint8                              log2_sao_offset_scale_chroma;
+
+    // extension PPS, valid when std_video_h265_profile_idc_scc_extensions is set
+    deInt8                               pps_act_y_qp_offset_plus5;
+    deInt8                               pps_act_cb_qp_offset_plus5;
+    deInt8                               pps_act_cr_qp_offset_plus5;
+    deUint8                              pps_num_palette_predictor_initializer;
+    deUint8                              luma_bit_depth_entry_minus8;
+    deUint8                              chroma_bit_depth_entry_minus8;
+    StdVideoH265PredictorPaletteEntries* pPredictorPaletteEntries;  // Must be a valid pointer if pps_palette_predictor_initializer_present_flag is set
+} StdVideoH265PictureParameterSet;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // VULKAN_VIDEO_CODEC_H265STD_H_
+/*
+** Copyright (c) 2019-2020 The Khronos Group Inc.
+**
+** SPDX-License-Identifier: Apache-2.0
+*/
+
+#ifndef VULKAN_VIDEO_CODEC_H264STD_DECODE_H_
+#define VULKAN_VIDEO_CODEC_H264STD_DECODE_H_ 1
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+
+// *************************************************
+// Video H.264 Decode related parameters:
+// *************************************************
+
+typedef struct StdVideoDecodeH264PictureInfoFlags {
+    deUint32 field_pic_flag:1;             // Is field picture
+    deUint32 is_intra:1;                   // Is intra picture
+    deUint32 bottom_field_flag:1;          // bottom (true) or top (false) field if field_pic_flag is set.
+    deUint32 is_reference:1;               // This only applies to picture info, and not to the DPB lists.
+    deUint32 complementary_field_pair:1;   // complementary field pair, complementary non-reference field pair, complementary reference field pair
+} StdVideoDecodeH264PictureInfoFlags;
+
+typedef struct StdVideoDecodeH264PictureInfo {
+    deUint8  seq_parameter_set_id;          // Selecting SPS from the Picture Parameters
+    deUint8  pic_parameter_set_id;          // Selecting PPS from the Picture Parameters and the SPS
+    deUint16 reserved;                      // for structure members 32-bit packing/alignment
+    deUint16 frame_num;                     // 7.4.3 Slice header semantics
+    deUint16 idr_pic_id;                    // 7.4.3 Slice header semantics
+    // PicOrderCnt is based on TopFieldOrderCnt and BottomFieldOrderCnt. See 8.2.1 Decoding process for picture order count type 0 - 2
+    deInt32  PicOrderCnt[2];                // TopFieldOrderCnt and BottomFieldOrderCnt fields.
+    StdVideoDecodeH264PictureInfoFlags flags;
+} StdVideoDecodeH264PictureInfo;
+
+typedef struct StdVideoDecodeH264ReferenceInfoFlags {
+    deUint32 top_field_flag:1;             // Reference is used for top field reference.
+    deUint32 bottom_field_flag:1;          // Reference is used for bottom field reference.
+    deUint32 is_long_term:1;               // this is a long term reference
+    deUint32 is_non_existing:1;            // Must be handled in accordance with 8.2.5.2: Decoding process for gaps in frame_num
+} StdVideoDecodeH264ReferenceInfoFlags;
+
+typedef struct StdVideoDecodeH264ReferenceInfo {
+    // FrameNum = is_long_term ?  long_term_frame_idx : frame_num
+    deUint16 FrameNum;                     // 7.4.3.3 Decoded reference picture marking semantics
+    deUint16 reserved;                     // for structure members 32-bit packing/alignment
+    deInt32  PicOrderCnt[2];               // TopFieldOrderCnt and BottomFieldOrderCnt fields.
+    StdVideoDecodeH264ReferenceInfoFlags flags;
+} StdVideoDecodeH264ReferenceInfo;
+
+typedef struct StdVideoDecodeH264MvcElementFlags {
+    deUint32 non_idr:1;
+    deUint32 anchor_pic:1;
+    deUint32 inter_view:1;
+} StdVideoDecodeH264MvcElementFlags;
+
+typedef struct StdVideoDecodeH264MvcElement {
+    StdVideoDecodeH264MvcElementFlags flags;
+    deUint16 viewOrderIndex;
+    deUint16 viewId;
+    deUint16 temporalId; // move out?
+    deUint16 priorityId; // move out?
+    deUint16 numOfAnchorRefsInL0;
+    deUint16 viewIdOfAnchorRefsInL0[15];
+    deUint16 numOfAnchorRefsInL1;
+    deUint16 viewIdOfAnchorRefsInL1[15];
+    deUint16 numOfNonAnchorRefsInL0;
+    deUint16 viewIdOfNonAnchorRefsInL0[15];
+    deUint16 numOfNonAnchorRefsInL1;
+    deUint16 viewIdOfNonAnchorRefsInL1[15];
+} StdVideoDecodeH264MvcElement;
+
+typedef struct StdVideoDecodeH264Mvc {
+    deUint32 viewId0;
+    deUint32 mvcElementCount;
+    StdVideoDecodeH264MvcElement* pMvcElements;
+} StdVideoDecodeH264Mvc;
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // VULKAN_VIDEO_CODEC_H264STD_DECODE_H_
+/*
+** Copyright (c) 2019-2021 The Khronos Group Inc.
+**
+** SPDX-License-Identifier: Apache-2.0
+*/
+
+#ifndef VULKAN_VIDEO_CODEC_H265STD_DECODE_H_
+#define VULKAN_VIDEO_CODEC_H265STD_DECODE_H_ 1
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+
+// *************************************************
+// Video h265 Decode related parameters:
+// *************************************************
+
+typedef struct StdVideoDecodeH265PictureInfoFlags {
+    deUint32 IrapPicFlag : 1;
+    deUint32 IdrPicFlag  : 1;
+    deUint32 IsReference : 1;
+    deUint32 short_term_ref_pic_set_sps_flag : 1;
+} StdVideoDecodeH265PictureInfoFlags;
+
+typedef struct StdVideoDecodeH265PictureInfo {
+    deUint8                            vps_video_parameter_set_id;
+    deUint8                            sps_seq_parameter_set_id;
+    deUint8                            pps_pic_parameter_set_id;
+    deUint8                            num_short_term_ref_pic_sets;
+    deInt32                            PicOrderCntVal;
+    deUint16                           NumBitsForSTRefPicSetInSlice; // number of bits used in st_ref_pic_set()
+                                                                     //when short_term_ref_pic_set_sps_flag is 0; otherwise set to 0.
+    deUint8                            NumDeltaPocsOfRefRpsIdx;      // NumDeltaPocs[ RefRpsIdx ] when short_term_ref_pic_set_sps_flag = 1, otherwise 0
+    deUint8                            RefPicSetStCurrBefore[8];     // slotIndex as used in VkVideoReferenceSlotKHR structures representing
+                                                                     //pReferenceSlots in VkVideoDecodeInfoKHR, 0xff for invalid slotIndex
+    deUint8                            RefPicSetStCurrAfter[8];      // slotIndex as used in VkVideoReferenceSlotKHR structures representing
+                                                                     //pReferenceSlots in VkVideoDecodeInfoKHR, 0xff for invalid slotIndex
+    deUint8                            RefPicSetLtCurr[8];           // slotIndex as used in VkVideoReferenceSlotKHR structures representing
+                                                                     //pReferenceSlots in VkVideoDecodeInfoKHR, 0xff for invalid slotIndex
+    StdVideoDecodeH265PictureInfoFlags flags;
+} StdVideoDecodeH265PictureInfo;
+
+typedef struct StdVideoDecodeH265ReferenceInfoFlags {
+    deUint32 is_long_term : 1;
+    deUint32 is_non_existing : 1;
+} StdVideoDecodeH265ReferenceInfoFlags;
+
+typedef struct StdVideoDecodeH265ReferenceInfo {
+    deInt32                              PicOrderCntVal;
+    StdVideoDecodeH265ReferenceInfoFlags flags;
+} StdVideoDecodeH265ReferenceInfo;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // VULKAN_VIDEO_CODEC_H265STD_DECODE_H_
 #ifndef VULKAN_CORE_H_
 #define VULKAN_CORE_H_ 1
 
@@ -28,35 +929,71 @@
 #define VK_DEFINE_HANDLE(object) typedef struct object##_T* object;
 
 
-#if !defined(VK_DEFINE_NON_DISPATCHABLE_HANDLE)
-#if defined(__LP64__) || defined(_WIN64) || (defined(__x86_64__) && !defined(__ILP32__) ) || defined(_M_X64) || defined(__ia64) || defined (_M_IA64) || defined(__aarch64__) || defined(__powerpc64__)
-        #define VK_DEFINE_NON_DISPATCHABLE_HANDLE(object) typedef struct object##_T *object;
-#else
-        #define VK_DEFINE_NON_DISPATCHABLE_HANDLE(object) typedef deUint64 object;
-#endif
+#ifndef VK_USE_64_BIT_PTR_DEFINES
+    #if defined(__LP64__) || defined(_WIN64) || (defined(__x86_64__) && !defined(__ILP32__) ) || defined(_M_X64) || defined(__ia64) || defined (_M_IA64) || defined(__aarch64__) || defined(__powerpc64__)
+        #define VK_USE_64_BIT_PTR_DEFINES 1
+    #else
+        #define VK_USE_64_BIT_PTR_DEFINES 0
+    #endif
 #endif
 
+
+#ifndef VK_DEFINE_NON_DISPATCHABLE_HANDLE
+    #if (VK_USE_64_BIT_PTR_DEFINES==1)
+        #if __cplusplus >= 201103L || (defined(_MSVC_LANG) && (_MSVC_LANG >= 201103L))
+            #define VK_NULL_HANDLE nullptr
+        #else
+            #define VK_NULL_HANDLE ((void*)0)
+        #endif
+    #else
+        #define VK_NULL_HANDLE 0ULL
+    #endif
+#endif
+#ifndef VK_NULL_HANDLE
+    #define VK_NULL_HANDLE 0
+#endif
+
+
+#ifndef VK_DEFINE_NON_DISPATCHABLE_HANDLE
+    #if (VK_USE_64_BIT_PTR_DEFINES==1)
+        #define VK_DEFINE_NON_DISPATCHABLE_HANDLE(object) typedef struct object##_T *object;
+    #else
+        #define VK_DEFINE_NON_DISPATCHABLE_HANDLE(object) typedef deUint64 object;
+    #endif
+#endif
+
+// DEPRECATED: This define is deprecated. VK_MAKE_API_VERSION should be used instead.
 #define VK_MAKE_VERSION(major, minor, patch) \
     ((((deUint32)(major)) << 22) | (((deUint32)(minor)) << 12) | ((deUint32)(patch)))
 
 // DEPRECATED: This define has been removed. Specific version defines (e.g. VK_API_VERSION_1_0), or the VK_MAKE_VERSION macro, should be used instead.
 //#define VK_API_VERSION VK_MAKE_VERSION(1, 0, 0) // Patch version should always be set to 0
 
+#define VK_MAKE_API_VERSION(variant, major, minor, patch) \
+    ((((deUint32)(variant)) << 29) | (((deUint32)(major)) << 22) | (((deUint32)(minor)) << 12) | ((deUint32)(patch)))
+
 // Vulkan 1.0 version number
-#define VK_API_VERSION_1_0 VK_MAKE_VERSION(1, 0, 0)// Patch version should always be set to 0
+#define VK_API_VERSION_1_0 VK_MAKE_API_VERSION(0, 1, 0, 0)// Patch version should always be set to 0
 
 // Version of this file
-#define VK_HEADER_VERSION 170
+#define VK_HEADER_VERSION 176
 
 // Complete version of this file
-#define VK_HEADER_VERSION_COMPLETE VK_MAKE_VERSION(1, 2, VK_HEADER_VERSION)
+#define VK_HEADER_VERSION_COMPLETE VK_MAKE_API_VERSION(0, 1, 2, VK_HEADER_VERSION)
 
+// DEPRECATED: This define is deprecated. VK_API_VERSION_MAJOR should be used instead.
 #define VK_VERSION_MAJOR(version) ((deUint32)(version) >> 22)
-#define VK_VERSION_MINOR(version) (((deUint32)(version) >> 12) & 0x3ff)
-#define VK_VERSION_PATCH(version) ((deUint32)(version) & 0xfff)
 
-#define VK_NULL_HANDLE 0
+// DEPRECATED: This define is deprecated. VK_API_VERSION_MINOR should be used instead.
+#define VK_VERSION_MINOR(version) (((deUint32)(version) >> 12) & 0x3FFU)
 
+// DEPRECATED: This define is deprecated. VK_API_VERSION_PATCH should be used instead.
+#define VK_VERSION_PATCH(version) ((deUint32)(version) & 0xFFFU)
+
+#define VK_API_VERSION_VARIANT(version) ((deUint32)(version) >> 29)
+#define VK_API_VERSION_MAJOR(version) (((deUint32)(version) >> 22) & 0x7FU)
+#define VK_API_VERSION_MINOR(version) (((deUint32)(version) >> 12) & 0x3FFU)
+#define VK_API_VERSION_PATCH(version) ((deUint32)(version) & 0xFFFU)
 typedef deUint32 VkBool32;
 typedef deUint64 VkDeviceAddress;
 typedef deUint64 VkDeviceSize;
@@ -88,20 +1025,20 @@
 VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkFramebuffer)
 VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkCommandPool)
 #define VK_ATTACHMENT_UNUSED              (~0U)
-#define VK_FALSE                          0
-#define VK_LOD_CLAMP_NONE                 1000.0f
+#define VK_FALSE                          0U
+#define VK_LOD_CLAMP_NONE                 1000.0F
 #define VK_QUEUE_FAMILY_IGNORED           (~0U)
 #define VK_REMAINING_ARRAY_LAYERS         (~0U)
 #define VK_REMAINING_MIP_LEVELS           (~0U)
 #define VK_SUBPASS_EXTERNAL               (~0U)
-#define VK_TRUE                           1
+#define VK_TRUE                           1U
 #define VK_WHOLE_SIZE                     (~0ULL)
-#define VK_MAX_MEMORY_TYPES               32
-#define VK_MAX_MEMORY_HEAPS               16
-#define VK_MAX_PHYSICAL_DEVICE_NAME_SIZE  256
-#define VK_UUID_SIZE                      16
-#define VK_MAX_EXTENSION_NAME_SIZE        256
-#define VK_MAX_DESCRIPTION_SIZE           256
+#define VK_MAX_MEMORY_TYPES               32U
+#define VK_MAX_MEMORY_HEAPS               16U
+#define VK_MAX_PHYSICAL_DEVICE_NAME_SIZE  256U
+#define VK_UUID_SIZE                      16U
+#define VK_MAX_EXTENSION_NAME_SIZE        256U
+#define VK_MAX_DESCRIPTION_SIZE           256U
 
 typedef enum VkResult {
     VK_SUCCESS = 0,
@@ -337,6 +1274,63 @@
     VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_NAME_INFO_EXT = 1000022000,
     VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_TAG_INFO_EXT = 1000022001,
     VK_STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT = 1000022002,
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_STRUCTURE_TYPE_VIDEO_PROFILE_KHR = 1000023000,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_STRUCTURE_TYPE_VIDEO_CAPABILITIES_KHR = 1000023001,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_STRUCTURE_TYPE_VIDEO_PICTURE_RESOURCE_KHR = 1000023002,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_STRUCTURE_TYPE_VIDEO_GET_MEMORY_PROPERTIES_KHR = 1000023003,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_STRUCTURE_TYPE_VIDEO_BIND_MEMORY_KHR = 1000023004,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_STRUCTURE_TYPE_VIDEO_SESSION_CREATE_INFO_KHR = 1000023005,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_STRUCTURE_TYPE_VIDEO_SESSION_PARAMETERS_CREATE_INFO_KHR = 1000023006,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_STRUCTURE_TYPE_VIDEO_SESSION_PARAMETERS_UPDATE_INFO_KHR = 1000023007,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_STRUCTURE_TYPE_VIDEO_BEGIN_CODING_INFO_KHR = 1000023008,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_STRUCTURE_TYPE_VIDEO_END_CODING_INFO_KHR = 1000023009,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_STRUCTURE_TYPE_VIDEO_CODING_CONTROL_INFO_KHR = 1000023010,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_STRUCTURE_TYPE_VIDEO_REFERENCE_SLOT_KHR = 1000023011,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_STRUCTURE_TYPE_VIDEO_QUEUE_FAMILY_PROPERTIES_2_KHR = 1000023012,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_STRUCTURE_TYPE_VIDEO_PROFILES_KHR = 1000023013,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_FORMAT_INFO_KHR = 1000023014,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_STRUCTURE_TYPE_VIDEO_FORMAT_PROPERTIES_KHR = 1000023015,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_STRUCTURE_TYPE_VIDEO_DECODE_INFO_KHR = 1000024000,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_STRUCTURE_TYPE_VIDEO_ENCODE_INFO_KHR = 1000299000,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_STRUCTURE_TYPE_VIDEO_ENCODE_RATE_CONTROL_INFO_KHR = 1000299001,
+#endif
     VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV = 1000026000,
     VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_BUFFER_CREATE_INFO_NV = 1000026001,
     VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV = 1000026002,
@@ -345,6 +1339,57 @@
     VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_STREAM_CREATE_INFO_EXT = 1000028002,
     VK_STRUCTURE_TYPE_IMAGE_VIEW_HANDLE_INFO_NVX = 1000030000,
     VK_STRUCTURE_TYPE_IMAGE_VIEW_ADDRESS_PROPERTIES_NVX = 1000030001,
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_CAPABILITIES_EXT = 1000038000,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_SESSION_CREATE_INFO_EXT = 1000038001,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_SESSION_PARAMETERS_CREATE_INFO_EXT = 1000038002,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_SESSION_PARAMETERS_ADD_INFO_EXT = 1000038003,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_VCL_FRAME_INFO_EXT = 1000038004,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_DPB_SLOT_INFO_EXT = 1000038005,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_NALU_SLICE_EXT = 1000038006,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_EMIT_PICTURE_PARAMETERS_EXT = 1000038007,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_PROFILE_EXT = 1000038008,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_CAPABILITIES_EXT = 1000040000,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_SESSION_CREATE_INFO_EXT = 1000040001,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_PICTURE_INFO_EXT = 1000040002,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_MVC_EXT = 1000040003,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_PROFILE_EXT = 1000040004,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_SESSION_PARAMETERS_CREATE_INFO_EXT = 1000040005,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_SESSION_PARAMETERS_ADD_INFO_EXT = 1000040006,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_DPB_SLOT_INFO_EXT = 1000040007,
+#endif
     VK_STRUCTURE_TYPE_TEXTURE_LOD_GATHER_FORMAT_PROPERTIES_AMD = 1000041000,
     VK_STRUCTURE_TYPE_STREAM_DESCRIPTOR_SURFACE_CREATE_INFO_GGP = 1000049000,
     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CORNER_SAMPLED_IMAGE_FEATURES_NV = 1000050000,
@@ -471,8 +1516,12 @@
     VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_PROPERTIES_EXT = 1000158005,
     VK_STRUCTURE_TYPE_VALIDATION_CACHE_CREATE_INFO_EXT = 1000160000,
     VK_STRUCTURE_TYPE_SHADER_MODULE_VALIDATION_CACHE_CREATE_INFO_EXT = 1000160001,
+#ifdef VK_ENABLE_BETA_EXTENSIONS
     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PORTABILITY_SUBSET_FEATURES_KHR = 1000163000,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PORTABILITY_SUBSET_PROPERTIES_KHR = 1000163001,
+#endif
     VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_SHADING_RATE_IMAGE_STATE_CREATE_INFO_NV = 1000164000,
     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_FEATURES_NV = 1000164001,
     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_PROPERTIES_NV = 1000164002,
@@ -500,6 +1549,27 @@
     VK_STRUCTURE_TYPE_PIPELINE_COMPILER_CONTROL_CREATE_INFO_AMD = 1000183000,
     VK_STRUCTURE_TYPE_CALIBRATED_TIMESTAMP_INFO_EXT = 1000184000,
     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_AMD = 1000185000,
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_CAPABILITIES_EXT = 1000187000,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_SESSION_CREATE_INFO_EXT = 1000187001,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_SESSION_PARAMETERS_CREATE_INFO_EXT = 1000187002,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_SESSION_PARAMETERS_ADD_INFO_EXT = 1000187003,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_PROFILE_EXT = 1000187004,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_PICTURE_INFO_EXT = 1000187005,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_DPB_SLOT_INFO_EXT = 1000187006,
+#endif
     VK_STRUCTURE_TYPE_DEVICE_MEMORY_OVERALLOCATION_CREATE_INFO_AMD = 1000189000,
     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT = 1000190000,
     VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_EXT = 1000190001,
@@ -584,6 +1654,10 @@
     VK_STRUCTURE_TYPE_GENERATED_COMMANDS_INFO_NV = 1000277005,
     VK_STRUCTURE_TYPE_GENERATED_COMMANDS_MEMORY_REQUIREMENTS_INFO_NV = 1000277006,
     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,
@@ -617,6 +1691,7 @@
     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_PROPERTIES_NV = 1000326000,
     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_FEATURES_NV = 1000326001,
     VK_STRUCTURE_TYPE_PIPELINE_FRAGMENT_SHADING_RATE_ENUM_STATE_CREATE_INFO_NV = 1000326002,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_2_PLANE_444_FORMATS_FEATURES_EXT = 1000330000,
     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_FEATURES_EXT = 1000332000,
     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_PROPERTIES_EXT = 1000332001,
     VK_STRUCTURE_TYPE_COPY_COMMAND_TRANSFORM_INFO_QCOM = 1000333000,
@@ -637,6 +1712,18 @@
     VK_STRUCTURE_TYPE_DIRECTFB_SURFACE_CREATE_INFO_EXT = 1000346000,
     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MUTABLE_DESCRIPTOR_TYPE_FEATURES_VALVE = 1000351000,
     VK_STRUCTURE_TYPE_MUTABLE_DESCRIPTOR_TYPE_CREATE_INFO_VALVE = 1000351002,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_INPUT_DYNAMIC_STATE_FEATURES_EXT = 1000352000,
+    VK_STRUCTURE_TYPE_VERTEX_INPUT_BINDING_DESCRIPTION_2_EXT = 1000352001,
+    VK_STRUCTURE_TYPE_VERTEX_INPUT_ATTRIBUTE_DESCRIPTION_2_EXT = 1000352002,
+    VK_STRUCTURE_TYPE_IMPORT_MEMORY_ZIRCON_HANDLE_INFO_FUCHSIA = 1000364000,
+    VK_STRUCTURE_TYPE_MEMORY_ZIRCON_HANDLE_PROPERTIES_FUCHSIA = 1000364001,
+    VK_STRUCTURE_TYPE_MEMORY_GET_ZIRCON_HANDLE_INFO_FUCHSIA = 1000364002,
+    VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_ZIRCON_HANDLE_INFO_FUCHSIA = 1000365000,
+    VK_STRUCTURE_TYPE_SEMAPHORE_GET_ZIRCON_HANDLE_INFO_FUCHSIA = 1000365001,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_2_FEATURES_EXT = 1000377000,
+    VK_STRUCTURE_TYPE_SCREEN_SURFACE_CREATE_INFO_QNX = 1000378000,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COLOR_WRITE_ENABLE_FEATURES_EXT = 1000381000,
+    VK_STRUCTURE_TYPE_PIPELINE_COLOR_WRITE_CREATE_INFO_EXT = 1000381001,
     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES,
     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETER_FEATURES = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES,
     VK_STRUCTURE_TYPE_DEBUG_REPORT_CREATE_INFO_EXT = VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT,
@@ -771,6 +1858,24 @@
     VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL = 1000241002,
     VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL = 1000241003,
     VK_IMAGE_LAYOUT_PRESENT_SRC_KHR = 1000001002,
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_IMAGE_LAYOUT_VIDEO_DECODE_DST_KHR = 1000024000,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_IMAGE_LAYOUT_VIDEO_DECODE_SRC_KHR = 1000024001,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_IMAGE_LAYOUT_VIDEO_DECODE_DPB_KHR = 1000024002,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_IMAGE_LAYOUT_VIDEO_ENCODE_DST_KHR = 1000299000,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_IMAGE_LAYOUT_VIDEO_ENCODE_SRC_KHR = 1000299001,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_IMAGE_LAYOUT_VIDEO_ENCODE_DPB_KHR = 1000299002,
+#endif
     VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR = 1000111000,
     VK_IMAGE_LAYOUT_SHADING_RATE_OPTIMAL_NV = 1000164003,
     VK_IMAGE_LAYOUT_FRAGMENT_DENSITY_MAP_OPTIMAL_EXT = 1000218000,
@@ -820,6 +1925,12 @@
     VK_OBJECT_TYPE_DISPLAY_KHR = 1000002000,
     VK_OBJECT_TYPE_DISPLAY_MODE_KHR = 1000002001,
     VK_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT = 1000011000,
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_OBJECT_TYPE_VIDEO_SESSION_KHR = 1000023000,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_OBJECT_TYPE_VIDEO_SESSION_PARAMETERS_KHR = 1000023001,
+#endif
     VK_OBJECT_TYPE_DEBUG_UTILS_MESSENGER_EXT = 1000128000,
     VK_OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR = 1000150000,
     VK_OBJECT_TYPE_VALIDATION_CACHE_EXT = 1000160000,
@@ -1104,6 +2215,10 @@
     VK_FORMAT_ASTC_10x10_SFLOAT_BLOCK_EXT = 1000066011,
     VK_FORMAT_ASTC_12x10_SFLOAT_BLOCK_EXT = 1000066012,
     VK_FORMAT_ASTC_12x12_SFLOAT_BLOCK_EXT = 1000066013,
+    VK_FORMAT_G8_B8R8_2PLANE_444_UNORM_EXT = 1000330000,
+    VK_FORMAT_G10X6_B10X6R10X6_2PLANE_444_UNORM_3PACK16_EXT = 1000330001,
+    VK_FORMAT_G12X4_B12X4R12X4_2PLANE_444_UNORM_3PACK16_EXT = 1000330002,
+    VK_FORMAT_G16_B16R16_2PLANE_444_UNORM_EXT = 1000330003,
     VK_FORMAT_A4R4G4B4_UNORM_PACK16_EXT = 1000340000,
     VK_FORMAT_A4B4G4R4_UNORM_PACK16_EXT = 1000340001,
     VK_FORMAT_G8B8G8R8_422_UNORM_KHR = VK_FORMAT_G8B8G8R8_422_UNORM,
@@ -1170,6 +2285,12 @@
     VK_QUERY_TYPE_OCCLUSION = 0,
     VK_QUERY_TYPE_PIPELINE_STATISTICS = 1,
     VK_QUERY_TYPE_TIMESTAMP = 2,
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_QUERY_TYPE_RESULT_STATUS_ONLY_KHR = 1000023000,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_QUERY_TYPE_VIDEO_ENCODE_BITSTREAM_BUFFER_RANGE_KHR = 1000299000,
+#endif
     VK_QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT = 1000028004,
     VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR = 1000116000,
     VK_QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR = 1000150000,
@@ -1328,6 +2449,13 @@
     VK_DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE_EXT = 1000267009,
     VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE_EXT = 1000267010,
     VK_DYNAMIC_STATE_STENCIL_OP_EXT = 1000267011,
+    VK_DYNAMIC_STATE_VERTEX_INPUT_EXT = 1000352000,
+    VK_DYNAMIC_STATE_PATCH_CONTROL_POINTS_EXT = 1000377000,
+    VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE_EXT = 1000377001,
+    VK_DYNAMIC_STATE_DEPTH_BIAS_ENABLE_EXT = 1000377002,
+    VK_DYNAMIC_STATE_LOGIC_OP_EXT = 1000377003,
+    VK_DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE_EXT = 1000377004,
+    VK_DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXT = 1000381000,
     VK_DYNAMIC_STATE_MAX_ENUM = 0x7FFFFFFF
 } VkDynamicState;
 
@@ -1577,6 +2705,18 @@
     VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT = 0x00800000,
     VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT = 0x00010000,
     VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG = 0x00002000,
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_FORMAT_FEATURE_VIDEO_DECODE_OUTPUT_BIT_KHR = 0x02000000,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_FORMAT_FEATURE_VIDEO_DECODE_DPB_BIT_KHR = 0x04000000,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_FORMAT_FEATURE_VIDEO_ENCODE_INPUT_BIT_KHR = 0x08000000,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_FORMAT_FEATURE_VIDEO_ENCODE_DPB_BIT_KHR = 0x10000000,
+#endif
     VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR = 0x20000000,
     VK_FORMAT_FEATURE_FRAGMENT_DENSITY_MAP_BIT_EXT = 0x01000000,
     VK_FORMAT_FEATURE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR = 0x40000000,
@@ -1642,6 +2782,24 @@
     VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT = 0x00000020,
     VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT = 0x00000040,
     VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT = 0x00000080,
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_IMAGE_USAGE_VIDEO_DECODE_DST_BIT_KHR = 0x00000400,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_IMAGE_USAGE_VIDEO_DECODE_SRC_BIT_KHR = 0x00000800,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_IMAGE_USAGE_VIDEO_DECODE_DPB_BIT_KHR = 0x00001000,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_IMAGE_USAGE_VIDEO_ENCODE_DST_BIT_KHR = 0x00002000,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_IMAGE_USAGE_VIDEO_ENCODE_SRC_BIT_KHR = 0x00004000,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_IMAGE_USAGE_VIDEO_ENCODE_DPB_BIT_KHR = 0x00008000,
+#endif
     VK_IMAGE_USAGE_SHADING_RATE_IMAGE_BIT_NV = 0x00000100,
     VK_IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT = 0x00000200,
     VK_IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR = VK_IMAGE_USAGE_SHADING_RATE_IMAGE_BIT_NV,
@@ -1677,6 +2835,12 @@
     VK_QUEUE_TRANSFER_BIT = 0x00000004,
     VK_QUEUE_SPARSE_BINDING_BIT = 0x00000008,
     VK_QUEUE_PROTECTED_BIT = 0x00000010,
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_QUEUE_VIDEO_DECODE_BIT_KHR = 0x00000020,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_QUEUE_VIDEO_ENCODE_BIT_KHR = 0x00000040,
+#endif
     VK_QUEUE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
 } VkQueueFlagBits;
 typedef VkFlags VkQueueFlags;
@@ -1773,6 +2937,9 @@
     VK_QUERY_RESULT_WAIT_BIT = 0x00000002,
     VK_QUERY_RESULT_WITH_AVAILABILITY_BIT = 0x00000004,
     VK_QUERY_RESULT_PARTIAL_BIT = 0x00000008,
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_QUERY_RESULT_WITH_STATUS_BIT_KHR = 0x00000010,
+#endif
     VK_QUERY_RESULT_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
 } VkQueryResultFlagBits;
 typedef VkFlags VkQueryResultFlags;
@@ -1800,6 +2967,18 @@
     VK_BUFFER_USAGE_VERTEX_BUFFER_BIT = 0x00000080,
     VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT = 0x00000100,
     VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT = 0x00020000,
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_BUFFER_USAGE_VIDEO_DECODE_SRC_BIT_KHR = 0x00002000,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_BUFFER_USAGE_VIDEO_DECODE_DST_BIT_KHR = 0x00004000,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_BUFFER_USAGE_VIDEO_ENCODE_DST_BIT_KHR = 0x00008000,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_BUFFER_USAGE_VIDEO_ENCODE_SRC_BIT_KHR = 0x00010000,
+#endif
     VK_BUFFER_USAGE_TRANSFORM_FEEDBACK_BUFFER_BIT_EXT = 0x00000800,
     VK_BUFFER_USAGE_TRANSFORM_FEEDBACK_COUNTER_BUFFER_BIT_EXT = 0x00001000,
     VK_BUFFER_USAGE_CONDITIONAL_RENDERING_BIT_EXT = 0x00000200,
@@ -4082,13 +5261,13 @@
 
 #define VK_VERSION_1_1 1
 // Vulkan 1.1 version number
-#define VK_API_VERSION_1_1 VK_MAKE_VERSION(1, 1, 0)// Patch version should always be set to 0
+#define VK_API_VERSION_1_1 VK_MAKE_API_VERSION(0, 1, 1, 0)// Patch version should always be set to 0
 
 VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSamplerYcbcrConversion)
 VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDescriptorUpdateTemplate)
-#define VK_MAX_DEVICE_GROUP_SIZE          32
-#define VK_LUID_SIZE                      8
-#define VK_QUEUE_FAMILY_EXTERNAL          (~0U-1)
+#define VK_MAX_DEVICE_GROUP_SIZE          32U
+#define VK_LUID_SIZE                      8U
+#define VK_QUEUE_FAMILY_EXTERNAL          (~1U)
 
 typedef enum VkPointClippingBehavior {
     VK_POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES = 0,
@@ -4195,6 +5374,7 @@
     VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID = 0x00000400,
     VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT = 0x00000080,
     VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT = 0x00000100,
+    VK_EXTERNAL_MEMORY_HANDLE_TYPE_ZIRCON_VMO_BIT_FUCHSIA = 0x00000800,
     VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT_KHR = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT,
     VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT,
     VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_KHR = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT,
@@ -4259,6 +5439,7 @@
     VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT = 0x00000004,
     VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT = 0x00000008,
     VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT = 0x00000010,
+    VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_ZIRCON_EVENT_BIT_FUCHSIA = 0x00000080,
     VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D11_FENCE_BIT = VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT,
     VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT_KHR = VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT,
     VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR = VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT,
@@ -4944,10 +6125,10 @@
 
 #define VK_VERSION_1_2 1
 // Vulkan 1.2 version number
-#define VK_API_VERSION_1_2 VK_MAKE_VERSION(1, 2, 0)// Patch version should always be set to 0
+#define VK_API_VERSION_1_2 VK_MAKE_API_VERSION(0, 1, 2, 0)// Patch version should always be set to 0
 
-#define VK_MAX_DRIVER_NAME_SIZE           256
-#define VK_MAX_DRIVER_INFO_SIZE           256
+#define VK_MAX_DRIVER_NAME_SIZE           256U
+#define VK_MAX_DRIVER_INFO_SIZE           256U
 
 typedef enum VkDriverId {
     VK_DRIVER_ID_AMD_PROPRIETARY = 1,
@@ -4964,6 +6145,8 @@
     VK_DRIVER_ID_BROADCOM_PROPRIETARY = 12,
     VK_DRIVER_ID_MESA_LLVMPIPE = 13,
     VK_DRIVER_ID_MOLTENVK = 14,
+    VK_DRIVER_ID_COREAVI_PROPRIETARY = 15,
+    VK_DRIVER_ID_SAMSUNG_PROPRIETARY = 21,
     VK_DRIVER_ID_AMD_PROPRIETARY_KHR = VK_DRIVER_ID_AMD_PROPRIETARY,
     VK_DRIVER_ID_AMD_OPEN_SOURCE_KHR = VK_DRIVER_ID_AMD_OPEN_SOURCE,
     VK_DRIVER_ID_MESA_RADV_KHR = VK_DRIVER_ID_MESA_RADV,
@@ -6480,7 +7663,7 @@
 
 
 #define VK_KHR_incremental_present 1
-#define VK_KHR_INCREMENTAL_PRESENT_SPEC_VERSION 1
+#define VK_KHR_INCREMENTAL_PRESENT_SPEC_VERSION 2
 #define VK_KHR_INCREMENTAL_PRESENT_EXTENSION_NAME "VK_KHR_incremental_present"
 typedef struct VkRectLayerKHR {
     VkOffset2D    offset;
@@ -7526,6 +8709,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"
@@ -7549,84 +8778,106 @@
 #define VK_KHR_SYNCHRONIZATION_2_EXTENSION_NAME "VK_KHR_synchronization2"
 typedef VkFlags64 VkPipelineStageFlags2KHR;
 
-// Flag bits for VkPipelineStageFlags2KHR
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_NONE_KHR = 0;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_TOP_OF_PIPE_BIT_KHR = 0x00000001;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_DRAW_INDIRECT_BIT_KHR = 0x00000002;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_VERTEX_INPUT_BIT_KHR = 0x00000004;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_VERTEX_SHADER_BIT_KHR = 0x00000008;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_TESSELLATION_CONTROL_SHADER_BIT_KHR = 0x00000010;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_TESSELLATION_EVALUATION_SHADER_BIT_KHR = 0x00000020;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_GEOMETRY_SHADER_BIT_KHR = 0x00000040;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT_KHR = 0x00000080;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT_KHR = 0x00000100;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT_KHR = 0x00000200;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT_KHR = 0x00000400;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT_KHR = 0x00000800;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_ALL_TRANSFER_BIT_KHR = 0x00001000;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_TRANSFER_BIT_KHR = 0x00001000;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_BOTTOM_OF_PIPE_BIT_KHR = 0x00002000;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_HOST_BIT_KHR = 0x00004000;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR = 0x00008000;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR = 0x00010000;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_COPY_BIT_KHR = 0x100000000ULL;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_RESOLVE_BIT_KHR = 0x200000000ULL;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_BLIT_BIT_KHR = 0x400000000ULL;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_CLEAR_BIT_KHR = 0x800000000ULL;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_INDEX_INPUT_BIT_KHR = 0x1000000000ULL;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_VERTEX_ATTRIBUTE_INPUT_BIT_KHR = 0x2000000000ULL;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_PRE_RASTERIZATION_SHADERS_BIT_KHR = 0x4000000000ULL;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT = 0x01000000;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_CONDITIONAL_RENDERING_BIT_EXT = 0x00040000;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_COMMAND_PREPROCESS_BIT_NV = 0x00020000;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR = 0x00400000;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_SHADING_RATE_IMAGE_BIT_NV = 0x00400000;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR = 0x02000000;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_KHR = 0x00200000;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_NV = 0x00200000;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_NV = 0x02000000;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_FRAGMENT_DENSITY_PROCESS_BIT_EXT = 0x00800000;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_TASK_SHADER_BIT_NV = 0x00080000;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_MESH_SHADER_BIT_NV = 0x00100000;
+// Flag bits for VkPipelineStageFlagBits2KHR
+typedef VkFlags64 VkPipelineStageFlagBits2KHR;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_NONE_KHR = 0ULL;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_TOP_OF_PIPE_BIT_KHR = 0x00000001ULL;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_DRAW_INDIRECT_BIT_KHR = 0x00000002ULL;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_VERTEX_INPUT_BIT_KHR = 0x00000004ULL;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_VERTEX_SHADER_BIT_KHR = 0x00000008ULL;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_TESSELLATION_CONTROL_SHADER_BIT_KHR = 0x00000010ULL;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_TESSELLATION_EVALUATION_SHADER_BIT_KHR = 0x00000020ULL;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_GEOMETRY_SHADER_BIT_KHR = 0x00000040ULL;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT_KHR = 0x00000080ULL;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT_KHR = 0x00000100ULL;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT_KHR = 0x00000200ULL;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT_KHR = 0x00000400ULL;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT_KHR = 0x00000800ULL;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_ALL_TRANSFER_BIT_KHR = 0x00001000ULL;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_TRANSFER_BIT_KHR = 0x00001000;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_BOTTOM_OF_PIPE_BIT_KHR = 0x00002000ULL;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_HOST_BIT_KHR = 0x00004000ULL;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR = 0x00008000ULL;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR = 0x00010000ULL;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_COPY_BIT_KHR = 0x100000000ULL;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_RESOLVE_BIT_KHR = 0x200000000ULL;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_BLIT_BIT_KHR = 0x400000000ULL;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_CLEAR_BIT_KHR = 0x800000000ULL;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_INDEX_INPUT_BIT_KHR = 0x1000000000ULL;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_VERTEX_ATTRIBUTE_INPUT_BIT_KHR = 0x2000000000ULL;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_PRE_RASTERIZATION_SHADERS_BIT_KHR = 0x4000000000ULL;
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_VIDEO_DECODE_BIT_KHR = 0x04000000ULL;
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_VIDEO_ENCODE_BIT_KHR = 0x08000000ULL;
+#endif
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT = 0x01000000ULL;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_CONDITIONAL_RENDERING_BIT_EXT = 0x00040000ULL;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_COMMAND_PREPROCESS_BIT_NV = 0x00020000ULL;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR = 0x00400000ULL;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_SHADING_RATE_IMAGE_BIT_NV = 0x00400000;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR = 0x02000000ULL;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_KHR = 0x00200000ULL;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_NV = 0x00200000;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_NV = 0x02000000;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_FRAGMENT_DENSITY_PROCESS_BIT_EXT = 0x00800000ULL;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_TASK_SHADER_BIT_NV = 0x00080000ULL;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_MESH_SHADER_BIT_NV = 0x00100000ULL;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_FLAG_BITS_2KHR_MAX_ENUM_KHR = 0x7FFFFFFFFFFFFFFFULL;
 
 typedef VkFlags64 VkAccessFlags2KHR;
 
-// Flag bits for VkAccessFlags2KHR
-static const VkAccessFlags2KHR VK_ACCESS_2_NONE_KHR = 0;
-static const VkAccessFlags2KHR VK_ACCESS_2_INDIRECT_COMMAND_READ_BIT_KHR = 0x00000001;
-static const VkAccessFlags2KHR VK_ACCESS_2_INDEX_READ_BIT_KHR = 0x00000002;
-static const VkAccessFlags2KHR VK_ACCESS_2_VERTEX_ATTRIBUTE_READ_BIT_KHR = 0x00000004;
-static const VkAccessFlags2KHR VK_ACCESS_2_UNIFORM_READ_BIT_KHR = 0x00000008;
-static const VkAccessFlags2KHR VK_ACCESS_2_INPUT_ATTACHMENT_READ_BIT_KHR = 0x00000010;
-static const VkAccessFlags2KHR VK_ACCESS_2_SHADER_READ_BIT_KHR = 0x00000020;
-static const VkAccessFlags2KHR VK_ACCESS_2_SHADER_WRITE_BIT_KHR = 0x00000040;
-static const VkAccessFlags2KHR VK_ACCESS_2_COLOR_ATTACHMENT_READ_BIT_KHR = 0x00000080;
-static const VkAccessFlags2KHR VK_ACCESS_2_COLOR_ATTACHMENT_WRITE_BIT_KHR = 0x00000100;
-static const VkAccessFlags2KHR VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_READ_BIT_KHR = 0x00000200;
-static const VkAccessFlags2KHR VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT_KHR = 0x00000400;
-static const VkAccessFlags2KHR VK_ACCESS_2_TRANSFER_READ_BIT_KHR = 0x00000800;
-static const VkAccessFlags2KHR VK_ACCESS_2_TRANSFER_WRITE_BIT_KHR = 0x00001000;
-static const VkAccessFlags2KHR VK_ACCESS_2_HOST_READ_BIT_KHR = 0x00002000;
-static const VkAccessFlags2KHR VK_ACCESS_2_HOST_WRITE_BIT_KHR = 0x00004000;
-static const VkAccessFlags2KHR VK_ACCESS_2_MEMORY_READ_BIT_KHR = 0x00008000;
-static const VkAccessFlags2KHR VK_ACCESS_2_MEMORY_WRITE_BIT_KHR = 0x00010000;
-static const VkAccessFlags2KHR VK_ACCESS_2_SHADER_SAMPLED_READ_BIT_KHR = 0x100000000ULL;
-static const VkAccessFlags2KHR VK_ACCESS_2_SHADER_STORAGE_READ_BIT_KHR = 0x200000000ULL;
-static const VkAccessFlags2KHR VK_ACCESS_2_SHADER_STORAGE_WRITE_BIT_KHR = 0x400000000ULL;
-static const VkAccessFlags2KHR VK_ACCESS_2_TRANSFORM_FEEDBACK_WRITE_BIT_EXT = 0x02000000;
-static const VkAccessFlags2KHR VK_ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT = 0x04000000;
-static const VkAccessFlags2KHR VK_ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT = 0x08000000;
-static const VkAccessFlags2KHR VK_ACCESS_2_CONDITIONAL_RENDERING_READ_BIT_EXT = 0x00100000;
-static const VkAccessFlags2KHR VK_ACCESS_2_COMMAND_PREPROCESS_READ_BIT_NV = 0x00020000;
-static const VkAccessFlags2KHR VK_ACCESS_2_COMMAND_PREPROCESS_WRITE_BIT_NV = 0x00040000;
-static const VkAccessFlags2KHR VK_ACCESS_2_FRAGMENT_SHADING_RATE_ATTACHMENT_READ_BIT_KHR = 0x00800000;
-static const VkAccessFlags2KHR VK_ACCESS_2_SHADING_RATE_IMAGE_READ_BIT_NV = 0x00800000;
-static const VkAccessFlags2KHR VK_ACCESS_2_ACCELERATION_STRUCTURE_READ_BIT_KHR = 0x00200000;
-static const VkAccessFlags2KHR VK_ACCESS_2_ACCELERATION_STRUCTURE_WRITE_BIT_KHR = 0x00400000;
-static const VkAccessFlags2KHR VK_ACCESS_2_ACCELERATION_STRUCTURE_READ_BIT_NV = 0x00200000;
-static const VkAccessFlags2KHR VK_ACCESS_2_ACCELERATION_STRUCTURE_WRITE_BIT_NV = 0x00400000;
-static const VkAccessFlags2KHR VK_ACCESS_2_FRAGMENT_DENSITY_MAP_READ_BIT_EXT = 0x01000000;
-static const VkAccessFlags2KHR VK_ACCESS_2_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT = 0x00080000;
+// Flag bits for VkAccessFlagBits2KHR
+typedef VkFlags64 VkAccessFlagBits2KHR;
+static const VkAccessFlagBits2KHR VK_ACCESS_2_NONE_KHR = 0ULL;
+static const VkAccessFlagBits2KHR VK_ACCESS_2_INDIRECT_COMMAND_READ_BIT_KHR = 0x00000001ULL;
+static const VkAccessFlagBits2KHR VK_ACCESS_2_INDEX_READ_BIT_KHR = 0x00000002ULL;
+static const VkAccessFlagBits2KHR VK_ACCESS_2_VERTEX_ATTRIBUTE_READ_BIT_KHR = 0x00000004ULL;
+static const VkAccessFlagBits2KHR VK_ACCESS_2_UNIFORM_READ_BIT_KHR = 0x00000008ULL;
+static const VkAccessFlagBits2KHR VK_ACCESS_2_INPUT_ATTACHMENT_READ_BIT_KHR = 0x00000010ULL;
+static const VkAccessFlagBits2KHR VK_ACCESS_2_SHADER_READ_BIT_KHR = 0x00000020ULL;
+static const VkAccessFlagBits2KHR VK_ACCESS_2_SHADER_WRITE_BIT_KHR = 0x00000040ULL;
+static const VkAccessFlagBits2KHR VK_ACCESS_2_COLOR_ATTACHMENT_READ_BIT_KHR = 0x00000080ULL;
+static const VkAccessFlagBits2KHR VK_ACCESS_2_COLOR_ATTACHMENT_WRITE_BIT_KHR = 0x00000100ULL;
+static const VkAccessFlagBits2KHR VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_READ_BIT_KHR = 0x00000200ULL;
+static const VkAccessFlagBits2KHR VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT_KHR = 0x00000400ULL;
+static const VkAccessFlagBits2KHR VK_ACCESS_2_TRANSFER_READ_BIT_KHR = 0x00000800ULL;
+static const VkAccessFlagBits2KHR VK_ACCESS_2_TRANSFER_WRITE_BIT_KHR = 0x00001000ULL;
+static const VkAccessFlagBits2KHR VK_ACCESS_2_HOST_READ_BIT_KHR = 0x00002000ULL;
+static const VkAccessFlagBits2KHR VK_ACCESS_2_HOST_WRITE_BIT_KHR = 0x00004000ULL;
+static const VkAccessFlagBits2KHR VK_ACCESS_2_MEMORY_READ_BIT_KHR = 0x00008000ULL;
+static const VkAccessFlagBits2KHR VK_ACCESS_2_MEMORY_WRITE_BIT_KHR = 0x00010000ULL;
+static const VkAccessFlagBits2KHR VK_ACCESS_2_SHADER_SAMPLED_READ_BIT_KHR = 0x100000000ULL;
+static const VkAccessFlagBits2KHR VK_ACCESS_2_SHADER_STORAGE_READ_BIT_KHR = 0x200000000ULL;
+static const VkAccessFlagBits2KHR VK_ACCESS_2_SHADER_STORAGE_WRITE_BIT_KHR = 0x400000000ULL;
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+static const VkAccessFlagBits2KHR VK_ACCESS_2_VIDEO_DECODE_READ_BIT_KHR = 0x800000000ULL;
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+static const VkAccessFlagBits2KHR VK_ACCESS_2_VIDEO_DECODE_WRITE_BIT_KHR = 0x1000000000ULL;
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+static const VkAccessFlagBits2KHR VK_ACCESS_2_VIDEO_ENCODE_READ_BIT_KHR = 0x2000000000ULL;
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+static const VkAccessFlagBits2KHR VK_ACCESS_2_VIDEO_ENCODE_WRITE_BIT_KHR = 0x4000000000ULL;
+#endif
+static const VkAccessFlagBits2KHR VK_ACCESS_2_TRANSFORM_FEEDBACK_WRITE_BIT_EXT = 0x02000000ULL;
+static const VkAccessFlagBits2KHR VK_ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT = 0x04000000ULL;
+static const VkAccessFlagBits2KHR VK_ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT = 0x08000000ULL;
+static const VkAccessFlagBits2KHR VK_ACCESS_2_CONDITIONAL_RENDERING_READ_BIT_EXT = 0x00100000ULL;
+static const VkAccessFlagBits2KHR VK_ACCESS_2_COMMAND_PREPROCESS_READ_BIT_NV = 0x00020000ULL;
+static const VkAccessFlagBits2KHR VK_ACCESS_2_COMMAND_PREPROCESS_WRITE_BIT_NV = 0x00040000ULL;
+static const VkAccessFlagBits2KHR VK_ACCESS_2_FRAGMENT_SHADING_RATE_ATTACHMENT_READ_BIT_KHR = 0x00800000ULL;
+static const VkAccessFlagBits2KHR VK_ACCESS_2_SHADING_RATE_IMAGE_READ_BIT_NV = 0x00800000;
+static const VkAccessFlagBits2KHR VK_ACCESS_2_ACCELERATION_STRUCTURE_READ_BIT_KHR = 0x00200000ULL;
+static const VkAccessFlagBits2KHR VK_ACCESS_2_ACCELERATION_STRUCTURE_WRITE_BIT_KHR = 0x00400000ULL;
+static const VkAccessFlagBits2KHR VK_ACCESS_2_ACCELERATION_STRUCTURE_READ_BIT_NV = 0x00200000;
+static const VkAccessFlagBits2KHR VK_ACCESS_2_ACCELERATION_STRUCTURE_WRITE_BIT_NV = 0x00400000;
+static const VkAccessFlagBits2KHR VK_ACCESS_2_FRAGMENT_DENSITY_MAP_READ_BIT_EXT = 0x01000000ULL;
+static const VkAccessFlagBits2KHR VK_ACCESS_2_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT = 0x00080000ULL;
+static const VkAccessFlagBits2KHR VK_ACCESS_FLAG_BITS_2KHR_MAX_ENUM_KHR = 0x7FFFFFFFFFFFFFFFULL;
 
 
 typedef enum VkSubmitFlagBitsKHR {
@@ -7959,9 +9210,10 @@
     const VkResolveImageInfo2KHR*               pResolveImageInfo);
 #endif
 
+
 #define VK_EXT_debug_report 1
 VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDebugReportCallbackEXT)
-#define VK_EXT_DEBUG_REPORT_SPEC_VERSION  9
+#define VK_EXT_DEBUG_REPORT_SPEC_VERSION  10
 #define VK_EXT_DEBUG_REPORT_EXTENSION_NAME "VK_EXT_debug_report"
 
 typedef enum VkDebugReportObjectTypeEXT {
@@ -8972,7 +10224,7 @@
 #define VK_EXT_queue_family_foreign 1
 #define VK_EXT_QUEUE_FAMILY_FOREIGN_SPEC_VERSION 1
 #define VK_EXT_QUEUE_FAMILY_FOREIGN_EXTENSION_NAME "VK_EXT_queue_family_foreign"
-#define VK_QUEUE_FAMILY_FOREIGN_EXT       (~0U-2)
+#define VK_QUEUE_FAMILY_FOREIGN_EXT       (~2U)
 
 
 #define VK_EXT_debug_utils 1
@@ -10085,7 +11337,7 @@
 
 
 #define VK_EXT_calibrated_timestamps 1
-#define VK_EXT_CALIBRATED_TIMESTAMPS_SPEC_VERSION 1
+#define VK_EXT_CALIBRATED_TIMESTAMPS_SPEC_VERSION 2
 #define VK_EXT_CALIBRATED_TIMESTAMPS_EXTENSION_NAME "VK_EXT_calibrated_timestamps"
 
 typedef enum VkTimeDomainEXT {
@@ -11350,6 +12602,25 @@
 #endif
 
 
+#define VK_NV_inherited_viewport_scissor 1
+#define VK_NV_INHERITED_VIEWPORT_SCISSOR_SPEC_VERSION 1
+#define VK_NV_INHERITED_VIEWPORT_SCISSOR_EXTENSION_NAME "VK_NV_inherited_viewport_scissor"
+typedef struct VkPhysicalDeviceInheritedViewportScissorFeaturesNV {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           inheritedViewportScissor2D;
+} VkPhysicalDeviceInheritedViewportScissorFeaturesNV;
+
+typedef struct VkCommandBufferInheritanceViewportScissorInfoNV {
+    VkStructureType      sType;
+    const void*          pNext;
+    VkBool32             viewportScissor2D;
+    deUint32             viewportDepthCount;
+    const VkViewport*    pViewportDepths;
+} VkCommandBufferInheritanceViewportScissorInfoNV;
+
+
+
 #define VK_EXT_texel_buffer_alignment 1
 #define VK_EXT_TEXEL_BUFFER_ALIGNMENT_SPEC_VERSION 1
 #define VK_EXT_TEXEL_BUFFER_ALIGNMENT_EXTENSION_NAME "VK_EXT_texel_buffer_alignment"
@@ -11371,7 +12642,7 @@
 
 
 #define VK_QCOM_render_pass_transform 1
-#define VK_QCOM_RENDER_PASS_TRANSFORM_SPEC_VERSION 1
+#define VK_QCOM_RENDER_PASS_TRANSFORM_SPEC_VERSION 2
 #define VK_QCOM_RENDER_PASS_TRANSFORM_EXTENSION_NAME "VK_QCOM_render_pass_transform"
 typedef struct VkRenderPassTransformBeginInfoQCOM {
     VkStructureType                  sType;
@@ -11641,6 +12912,17 @@
 #endif
 
 
+#define VK_EXT_ycbcr_2plane_444_formats 1
+#define VK_EXT_YCBCR_2PLANE_444_FORMATS_SPEC_VERSION 1
+#define VK_EXT_YCBCR_2PLANE_444_FORMATS_EXTENSION_NAME "VK_EXT_ycbcr_2plane_444_formats"
+typedef struct VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           ycbcr2plane444Formats;
+} VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT;
+
+
+
 #define VK_EXT_fragment_density_map2 1
 #define VK_EXT_FRAGMENT_DENSITY_MAP_2_SPEC_VERSION 1
 #define VK_EXT_FRAGMENT_DENSITY_MAP_2_EXTENSION_NAME "VK_EXT_fragment_density_map2"
@@ -11662,7 +12944,7 @@
 
 
 #define VK_QCOM_rotated_copy_commands 1
-#define VK_QCOM_ROTATED_COPY_COMMANDS_SPEC_VERSION 0
+#define VK_QCOM_ROTATED_COPY_COMMANDS_SPEC_VERSION 1
 #define VK_QCOM_ROTATED_COPY_COMMANDS_EXTENSION_NAME "VK_QCOM_rotated_copy_commands"
 typedef struct VkCopyCommandTransformInfoQCOM {
     VkStructureType                  sType;
@@ -11736,6 +13018,111 @@
 
 
 
+#define VK_EXT_vertex_input_dynamic_state 1
+#define VK_EXT_VERTEX_INPUT_DYNAMIC_STATE_SPEC_VERSION 2
+#define VK_EXT_VERTEX_INPUT_DYNAMIC_STATE_EXTENSION_NAME "VK_EXT_vertex_input_dynamic_state"
+typedef struct VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           vertexInputDynamicState;
+} VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT;
+
+typedef struct VkVertexInputBindingDescription2EXT {
+    VkStructureType      sType;
+    void*                pNext;
+    deUint32             binding;
+    deUint32             stride;
+    VkVertexInputRate    inputRate;
+    deUint32             divisor;
+} VkVertexInputBindingDescription2EXT;
+
+typedef struct VkVertexInputAttributeDescription2EXT {
+    VkStructureType    sType;
+    void*              pNext;
+    deUint32           location;
+    deUint32           binding;
+    VkFormat           format;
+    deUint32           offset;
+} VkVertexInputAttributeDescription2EXT;
+
+typedef void (VKAPI_PTR *PFN_vkCmdSetVertexInputEXT)(VkCommandBuffer commandBuffer, deUint32 vertexBindingDescriptionCount, const VkVertexInputBindingDescription2EXT* pVertexBindingDescriptions, deUint32 vertexAttributeDescriptionCount, const VkVertexInputAttributeDescription2EXT* pVertexAttributeDescriptions);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR void VKAPI_CALL vkCmdSetVertexInputEXT(
+    VkCommandBuffer                             commandBuffer,
+    deUint32                                    vertexBindingDescriptionCount,
+    const VkVertexInputBindingDescription2EXT*  pVertexBindingDescriptions,
+    deUint32                                    vertexAttributeDescriptionCount,
+    const VkVertexInputAttributeDescription2EXT* pVertexAttributeDescriptions);
+#endif
+
+
+#define VK_EXT_extended_dynamic_state2 1
+#define VK_EXT_EXTENDED_DYNAMIC_STATE_2_SPEC_VERSION 1
+#define VK_EXT_EXTENDED_DYNAMIC_STATE_2_EXTENSION_NAME "VK_EXT_extended_dynamic_state2"
+typedef struct VkPhysicalDeviceExtendedDynamicState2FeaturesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           extendedDynamicState2;
+    VkBool32           extendedDynamicState2LogicOp;
+    VkBool32           extendedDynamicState2PatchControlPoints;
+} VkPhysicalDeviceExtendedDynamicState2FeaturesEXT;
+
+typedef void (VKAPI_PTR *PFN_vkCmdSetPatchControlPointsEXT)(VkCommandBuffer commandBuffer, deUint32 patchControlPoints);
+typedef void (VKAPI_PTR *PFN_vkCmdSetRasterizerDiscardEnableEXT)(VkCommandBuffer commandBuffer, VkBool32 rasterizerDiscardEnable);
+typedef void (VKAPI_PTR *PFN_vkCmdSetDepthBiasEnableEXT)(VkCommandBuffer commandBuffer, VkBool32 depthBiasEnable);
+typedef void (VKAPI_PTR *PFN_vkCmdSetLogicOpEXT)(VkCommandBuffer commandBuffer, VkLogicOp logicOp);
+typedef void (VKAPI_PTR *PFN_vkCmdSetPrimitiveRestartEnableEXT)(VkCommandBuffer commandBuffer, VkBool32 primitiveRestartEnable);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR void VKAPI_CALL vkCmdSetPatchControlPointsEXT(
+    VkCommandBuffer                             commandBuffer,
+    deUint32                                    patchControlPoints);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdSetRasterizerDiscardEnableEXT(
+    VkCommandBuffer                             commandBuffer,
+    VkBool32                                    rasterizerDiscardEnable);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthBiasEnableEXT(
+    VkCommandBuffer                             commandBuffer,
+    VkBool32                                    depthBiasEnable);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdSetLogicOpEXT(
+    VkCommandBuffer                             commandBuffer,
+    VkLogicOp                                   logicOp);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdSetPrimitiveRestartEnableEXT(
+    VkCommandBuffer                             commandBuffer,
+    VkBool32                                    primitiveRestartEnable);
+#endif
+
+
+#define VK_EXT_color_write_enable 1
+#define VK_EXT_COLOR_WRITE_ENABLE_SPEC_VERSION 1
+#define VK_EXT_COLOR_WRITE_ENABLE_EXTENSION_NAME "VK_EXT_color_write_enable"
+typedef struct VkPhysicalDeviceColorWriteEnableFeaturesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           colorWriteEnable;
+} VkPhysicalDeviceColorWriteEnableFeaturesEXT;
+
+typedef struct VkPipelineColorWriteCreateInfoEXT {
+    VkStructureType    sType;
+    const void*        pNext;
+    deUint32           attachmentCount;
+    const VkBool32*    pColorWriteEnables;
+} VkPipelineColorWriteCreateInfoEXT;
+
+typedef void                                    (VKAPI_PTR *PFN_vkCmdSetColorWriteEnableEXT)(VkCommandBuffer       commandBuffer, deUint32                                attachmentCount, const VkBool32*   pColorWriteEnables);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR void                                    VKAPI_CALL vkCmdSetColorWriteEnableEXT(
+    VkCommandBuffer                             commandBuffer,
+    deUint32                                    attachmentCount,
+    const VkBool32*                             pColorWriteEnables);
+#endif
+
+
 #define VK_KHR_acceleration_structure 1
 VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkAccelerationStructureKHR)
 #define VK_KHR_ACCELERATION_STRUCTURE_SPEC_VERSION 11
diff --git a/external/vulkancts/framework/vulkan/vkWsiUtil.cpp b/external/vulkancts/framework/vulkan/vkWsiUtil.cpp
index 097af2d..0f3b966 100644
--- a/external/vulkancts/framework/vulkan/vkWsiUtil.cpp
+++ b/external/vulkancts/framework/vulkan/vkWsiUtil.cpp
@@ -71,6 +71,7 @@
 		"android",
 		"win32",
 		"macos",
+		"headless"
 	};
 	return de::getSizedArrayElement<TYPE_LAST>(s_names, wsiType);
 }
@@ -84,7 +85,8 @@
 		"VK_KHR_wayland_surface",
 		"VK_KHR_android_surface",
 		"VK_KHR_win32_surface",
-		"VK_MVK_macos_surface"
+		"VK_MVK_macos_surface",
+		"VK_EXT_headless_surface"
 	};
 	return de::getSizedArrayElement<TYPE_LAST>(s_extNames, wsiType);
 }
@@ -143,6 +145,13 @@
 			noDisplayLimit,
 			noWindowLimit,
 		},
+		// VK_EXT_headless_surface
+		{
+			0u,
+			PlatformProperties::SWAPCHAIN_EXTENT_SETS_WINDOW_SIZE,
+			noDisplayLimit,
+			noWindowLimit,
+		},
 	};
 
 	return de::getSizedArrayElement<TYPE_LAST>(s_properties, wsiType);
@@ -157,7 +166,7 @@
 						VkSurfaceKHR*					pSurface)
 {
 	// Update this function if you add more WSI implementations
-	DE_STATIC_ASSERT(TYPE_LAST == 6);
+	DE_STATIC_ASSERT(TYPE_LAST == 7);
 
 	switch (wsiType)
 	{
@@ -253,6 +262,18 @@
 			return vki.createMacOSSurfaceMVK(instance, &createInfo, pAllocator, pSurface);
 		}
 
+		case TYPE_HEADLESS:
+		{
+			const VkHeadlessSurfaceCreateInfoEXT	createInfo		=
+			{
+				VK_STRUCTURE_TYPE_HEADLESS_SURFACE_CREATE_INFO_EXT,
+				DE_NULL,
+				(VkHeadlessSurfaceCreateFlagsEXT)0
+			};
+
+			return vki.createHeadlessSurfaceEXT(instance, &createInfo, pAllocator, pSurface);
+		}
+
 		default:
 			DE_FATAL("Unknown WSI type");
 			return VK_ERROR_SURFACE_LOST_KHR;
@@ -321,6 +342,7 @@
 		{
 			return vki.getPhysicalDeviceWin32PresentationSupportKHR(physicalDevice, queueFamilyIndex);
 		}
+		case TYPE_HEADLESS:
 		case TYPE_ANDROID:
 		case TYPE_MACOS:
 		{
diff --git a/external/vulkancts/framework/vulkan/vkYCbCrImageWithMemory.cpp b/external/vulkancts/framework/vulkan/vkYCbCrImageWithMemory.cpp
index a9f50a2..007c838 100644
--- a/external/vulkancts/framework/vulkan/vkYCbCrImageWithMemory.cpp
+++ b/external/vulkancts/framework/vulkan/vkYCbCrImageWithMemory.cpp
@@ -38,7 +38,7 @@
 											const vk::MemoryRequirement		requirement)
 	: m_image	(createImage(vk, device, &imageCreateInfo))
 {
-	if ((imageCreateInfo.flags & VK_IMAGE_CREATE_DISJOINT_BIT_KHR) != 0)
+	if ((imageCreateInfo.flags & VK_IMAGE_CREATE_DISJOINT_BIT) != 0)
 	{
 		const deUint32	numPlanes	= getPlaneCount(imageCreateInfo.format);
 
diff --git a/external/vulkancts/modules/vulkan/amber/vktAmberTestCase.cpp b/external/vulkancts/modules/vulkan/amber/vktAmberTestCase.cpp
index 7dba48f..4e9bdcb 100644
--- a/external/vulkancts/modules/vulkan/amber/vktAmberTestCase.cpp
+++ b/external/vulkancts/modules/vulkan/amber/vktAmberTestCase.cpp
@@ -185,6 +185,13 @@
 			TCU_THROW(NotSupportedError, "Buffer format doesn't support required feature flags");
 		}
 	}
+
+	if (m_name == "triangle_fan" &&
+		ctx.isDeviceFunctionalitySupported("VK_KHR_portability_subset") &&
+		!ctx.getPortabilitySubsetFeatures().triangleFans)
+	{
+		TCU_THROW(NotSupportedError, "VK_KHR_portability_subset: Triangle fans are not supported by this implementation");
+	}
 }
 
 class Delegate : public amber::Delegate
@@ -294,6 +301,19 @@
 	{
 		const amber::ShaderInfo& shader = shaders[i];
 
+		vk::SpirvVersion spirvVersion = vk::SPIRV_VERSION_1_0;
+		DE_STATIC_ASSERT(vk::SPIRV_VERSION_LAST == vk::SPIRV_VERSION_1_5 + 1);
+		if (shader.target_env == "spv1.5")
+			spirvVersion = vk::SPIRV_VERSION_1_5;
+		else if (shader.target_env == "spv1.4")
+			spirvVersion = vk::SPIRV_VERSION_1_4;
+		else if (shader.target_env == "spv1.3")
+			spirvVersion = vk::SPIRV_VERSION_1_3;
+		else if (shader.target_env == "spv1.2")
+			spirvVersion = vk::SPIRV_VERSION_1_2;
+		else if (shader.target_env == "spv1.1")
+			spirvVersion = vk::SPIRV_VERSION_1_1;
+
 		/* Hex encoded shaders do not need to be pre-compiled */
 		if (shader.format == amber::kShaderFormatSpirvHex)
 			continue;
@@ -304,40 +324,39 @@
 		}
 		else if (shader.format == amber::kShaderFormatGlsl)
 		{
-			vk::SpirvVersion target = m_asm_options.targetVersion;
-			bool allowSpirv14 = (target == vk::SpirvVersion::SPIRV_VERSION_1_4);
+			bool allowSpirv14 = (spirvVersion == vk::SPIRV_VERSION_1_4);
 
 			switch (shader.type)
 			{
 				case amber::kShaderTypeCompute:
 					programCollection.glslSources.add(shader.shader_name)
 						<< glu::ComputeSource(shader.shader_source)
-						<< vk::ShaderBuildOptions(programCollection.usedVulkanVersion, target, 0u, allowSpirv14);
+						<< vk::ShaderBuildOptions(programCollection.usedVulkanVersion, spirvVersion, 0u, allowSpirv14);
 					break;
 				case amber::kShaderTypeGeometry:
 					programCollection.glslSources.add(shader.shader_name)
 						<< glu::GeometrySource(shader.shader_source)
-						<< vk::ShaderBuildOptions(programCollection.usedVulkanVersion, target, 0u, allowSpirv14);
+						<< vk::ShaderBuildOptions(programCollection.usedVulkanVersion, spirvVersion, 0u, allowSpirv14);
 					break;
 				case amber::kShaderTypeFragment:
 					programCollection.glslSources.add(shader.shader_name)
 						<< glu::FragmentSource(shader.shader_source)
-						<< vk::ShaderBuildOptions(programCollection.usedVulkanVersion, target, 0u, allowSpirv14);
+						<< vk::ShaderBuildOptions(programCollection.usedVulkanVersion, spirvVersion, 0u, allowSpirv14);
 					break;
 				case amber::kShaderTypeVertex:
 					programCollection.glslSources.add(shader.shader_name)
 						<< glu::VertexSource(shader.shader_source)
-						<< vk::ShaderBuildOptions(programCollection.usedVulkanVersion, target, 0u, allowSpirv14);
+						<< vk::ShaderBuildOptions(programCollection.usedVulkanVersion, spirvVersion, 0u, allowSpirv14);
 					break;
 				case amber::kShaderTypeTessellationControl:
 					programCollection.glslSources.add(shader.shader_name)
 						<< glu::TessellationControlSource(shader.shader_source)
-						<< vk::ShaderBuildOptions(programCollection.usedVulkanVersion, target, 0u, allowSpirv14);
+						<< vk::ShaderBuildOptions(programCollection.usedVulkanVersion, spirvVersion, 0u, allowSpirv14);
 					break;
 				case amber::kShaderTypeTessellationEvaluation:
 					programCollection.glslSources.add(shader.shader_name)
 						<< glu::TessellationEvaluationSource(shader.shader_source)
-						<< vk::ShaderBuildOptions(programCollection.usedVulkanVersion, target, 0u, allowSpirv14);
+						<< vk::ShaderBuildOptions(programCollection.usedVulkanVersion, spirvVersion, 0u, allowSpirv14);
 					break;
 				case amber::kShaderTypeMulti:
 					DE_ASSERT(false && "Multi shaders not supported");
diff --git a/external/vulkancts/modules/vulkan/amber/vktAmberTestCase.hpp b/external/vulkancts/modules/vulkan/amber/vktAmberTestCase.hpp
index ef8bd02..55d7a88 100644
--- a/external/vulkancts/modules/vulkan/amber/vktAmberTestCase.hpp
+++ b/external/vulkancts/modules/vulkan/amber/vktAmberTestCase.hpp
@@ -69,7 +69,7 @@
 
 	virtual ~AmberTestCase (void);
 
-	virtual TestInstance* createInstance (Context& ctx) const;
+	TestInstance* createInstance (Context& ctx) const override;
 
 	// Check that the Vulkan implementation supports this test.
 	// We have the principle that client code in dEQP should independently
@@ -79,13 +79,13 @@
 	//  - Otherwise, we do a secondary sanity check depending on code inside
 	//    Amber itself: if the Amber test says it is not supported, then
 	//    throw an internal error exception.
-	virtual void checkSupport (Context& ctx) const; // override
+	void checkSupport (Context& ctx) const override;
 
 	// If the test case uses SPIR-V Assembly, use these build options.
 	// Otherwise, defaults to target Vulkan 1.0, SPIR-V 1.0.
 	void setSpirVAsmBuildOptions(const vk::SpirVAsmBuildOptions& asm_options);
-	virtual void delayedInit (void);
-	virtual void initPrograms (vk::SourceCollections& programCollection) const;
+	void delayedInit (void) override;
+	void initPrograms (vk::SourceCollections& programCollection) const override;
 
 	// Add a required instance extension, device extension, or feature bit.
 	// A feature bit is represented by a string of form "<structure>.<feature>", where
@@ -97,6 +97,8 @@
 	void addImageRequirement(vk::VkImageCreateInfo info);
 	void addBufferRequirement(BufferRequirement req);
 
+	tcu::TestRunnerType getRunnerType (void) const override { return tcu::RUNNERTYPE_AMBER; }
+
 private:
 	bool parse (const std::string& readFilename);
 
diff --git a/external/vulkancts/modules/vulkan/api/vktApiBufferMarkerTests.cpp b/external/vulkancts/modules/vulkan/api/vktApiBufferMarkerTests.cpp
index 69d6466..7ffd2fa 100644
--- a/external/vulkancts/modules/vulkan/api/vktApiBufferMarkerTests.cpp
+++ b/external/vulkancts/modules/vulkan/api/vktApiBufferMarkerTests.cpp
@@ -27,6 +27,7 @@
 #include "vktTestCaseUtil.hpp"
 #include "vktTestGroupUtil.hpp"
 #include "vktExternalMemoryUtil.hpp"
+#include "vktCustomInstancesDevices.hpp"
 #include "vkPlatform.hpp"
 #include "vkCmdUtil.hpp"
 #include "vkObjUtil.hpp"
@@ -34,6 +35,7 @@
 #include "vkQueryUtil.hpp"
 #include "vkRefUtil.hpp"
 #include "vkBuilderUtil.hpp"
+#include "tcuCommandLine.hpp"
 #include "deUniquePtr.hpp"
 #include "deSharedPtr.hpp"
 #include "deRandom.hpp"
@@ -106,6 +108,7 @@
 	const VkInstance			instance		= context.getInstance();
 	const InstanceInterface&	instanceDriver	= context.getInstanceInterface();
 	const VkPhysicalDevice		physicalDevice	= context.getPhysicalDevice();
+	const auto					useValidation	= context.getTestContext().getCommandLine().isValidationEnabled();
 
 	// Create a device with extension enabled and a queue with a family which supports the buffer marker extension
 	const std::vector<VkQueueFamilyProperties>	queueFamilyProperties	= getPhysicalDeviceQueueFamilyProperties(instanceDriver, physicalDevice);
@@ -154,7 +157,7 @@
 		&context.getDeviceFeatures(),						// const VkPhysicalDeviceFeatures*	pEnabledFeatures;
 	};
 
-	wd.logicalDevice	= createDevice(vkp, instance, instanceDriver, physicalDevice, &deviceInfo);
+	wd.logicalDevice	= createCustomDevice(useValidation, vkp, instance, instanceDriver, physicalDevice, &deviceInfo);
 	wd.deviceDriver		= MovePtr<DeviceDriver>(new DeviceDriver(vkp, instance, *wd.logicalDevice));
 	wd.allocator		= MovePtr<Allocator>(new SimpleAllocator(*wd.deviceDriver, *wd.logicalDevice, getPhysicalDeviceMemoryProperties(instanceDriver, physicalDevice)));
 	wd.queueFamilyIdx	= queueCreateInfo.queueFamilyIndex;
diff --git a/external/vulkancts/modules/vulkan/api/vktApiCommandBuffersTests.cpp b/external/vulkancts/modules/vulkan/api/vktApiCommandBuffersTests.cpp
index afc76b1..c0dc424 100644
--- a/external/vulkancts/modules/vulkan/api/vktApiCommandBuffersTests.cpp
+++ b/external/vulkancts/modules/vulkan/api/vktApiCommandBuffersTests.cpp
@@ -36,12 +36,16 @@
 #include "vkTypeUtil.hpp"
 #include "vkAllocationCallbackUtil.hpp"
 #include "vkCmdUtil.hpp"
+#include "vkBarrierUtil.hpp"
+#include "vkBufferWithMemory.hpp"
+#include "vkImageWithMemory.hpp"
 #include "vktApiCommandBuffersTests.hpp"
 #include "vktApiBufferComputeInstance.hpp"
 #include "vktApiComputeInstanceResultBuffer.hpp"
 #include "deSharedPtr.hpp"
 #include "deRandom.hpp"
 #include <sstream>
+#include <limits>
 
 namespace vkt
 {
@@ -4139,12 +4143,612 @@
 	programCollection.glslSources.add("compute_increment") << glu::ComputeSource(bufIncrement.str());
 }
 
-void genComputeIncrementSourceBadInheritance (SourceCollections& programCollection, BadInheritanceInfoCase testCase)
+void genComputeIncrementSourceBadInheritance(SourceCollections& programCollection, BadInheritanceInfoCase testCase)
 {
 	DE_UNREF(testCase);
 	return genComputeIncrementSource(programCollection);
 }
 
+void checkEventSupport (Context& context)
+{
+	if (context.isDeviceFunctionalitySupported("VK_KHR_portability_subset") && !context.getPortabilitySubsetFeatures().events)
+		TCU_THROW(NotSupportedError, "VK_KHR_portability_subset: Events are not supported by this implementation");
+}
+
+void checkEventSupport (Context& context, const VkCommandBufferLevel)
+{
+	checkEventSupport(context);
+}
+
+struct ManyDrawsParams
+{
+	VkCommandBufferLevel	level;
+	VkExtent3D				imageExtent;
+	deUint32				seed;
+
+	ManyDrawsParams(VkCommandBufferLevel level_, const VkExtent3D& extent_, deUint32 seed_)
+		: level			(level_)
+		, imageExtent	(extent_)
+		, seed			(seed_)
+	{}
+};
+
+struct ManyDrawsVertex
+{
+	using Color = tcu::Vector<deUint8, 4>;
+
+	tcu::Vec2	coords;
+	Color		color;
+
+	ManyDrawsVertex (const tcu::Vec2& coords_, const Color& color_) : coords(coords_), color(color_) {}
+};
+
+VkFormat getSupportedDepthStencilFormat (const InstanceInterface& vki, VkPhysicalDevice physDev)
+{
+	const VkFormat				formatList[]	= { VK_FORMAT_D24_UNORM_S8_UINT, VK_FORMAT_D32_SFLOAT_S8_UINT };
+	const VkFormatFeatureFlags	requirements	= (VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT);
+
+	for (int i = 0; i < DE_LENGTH_OF_ARRAY(formatList); ++i)
+	{
+		const auto properties = getPhysicalDeviceFormatProperties(vki, physDev, formatList[i]);
+		if ((properties.optimalTilingFeatures & requirements) == requirements)
+			return formatList[i];
+	}
+
+	TCU_THROW(NotSupportedError, "No suitable depth/stencil format support");
+	return VK_FORMAT_UNDEFINED;
+}
+
+class ManyDrawsCase : public TestCase
+{
+public:
+							ManyDrawsCase			(tcu::TestContext& testCtx, const std::string& name, const std::string& description, const ManyDrawsParams& params);
+	virtual					~ManyDrawsCase			(void) {}
+
+	virtual void			checkSupport			(Context& context) const;
+	virtual void			initPrograms			(vk::SourceCollections& programCollection) const;
+	virtual TestInstance*	createInstance			(Context& context) const;
+
+	static VkFormat			getColorFormat			(void) { return VK_FORMAT_R8G8B8A8_UINT; }
+
+protected:
+	ManyDrawsParams			m_params;
+};
+
+class ManyDrawsInstance : public TestInstance
+{
+public:
+								ManyDrawsInstance	(Context& context, const ManyDrawsParams& params);
+	virtual						~ManyDrawsInstance	(void) {}
+
+	virtual tcu::TestStatus		iterate				(void);
+
+protected:
+	ManyDrawsParams				m_params;
+};
+
+using BufferPtr = de::MovePtr<BufferWithMemory>;
+using ImagePtr = de::MovePtr<ImageWithMemory>;
+
+struct ManyDrawsVertexBuffers
+{
+	BufferPtr stagingBuffer;
+	BufferPtr vertexBuffer;
+};
+
+struct ManyDrawsAllocatedData
+{
+	ManyDrawsVertexBuffers	frontBuffers;
+	ManyDrawsVertexBuffers	backBuffers;
+	ImagePtr				colorAttachment;
+	ImagePtr				dsAttachment;
+	BufferPtr				colorCheckBuffer;
+	BufferPtr				stencilCheckBuffer;
+
+	static deUint32 calcNumPixels (const VkExtent3D& extent)
+	{
+		DE_ASSERT(extent.depth == 1u);
+		return (extent.width * extent.height);
+	}
+	static deUint32 calcNumVertices (const VkExtent3D& extent)
+	{
+		// One triangle (3 vertices) per output image pixel.
+		return (calcNumPixels(extent) * 3u);
+	}
+
+	static VkDeviceSize calcVertexBufferSize (const VkExtent3D& extent)
+	{
+		return calcNumVertices(extent) * sizeof(ManyDrawsVertex);
+	}
+
+	static void makeVertexBuffers (const DeviceInterface& vkd, VkDevice device, Allocator& alloc, VkDeviceSize size, ManyDrawsVertexBuffers& buffers)
+	{
+		const auto stagingBufferInfo	= makeBufferCreateInfo(size, VK_BUFFER_USAGE_TRANSFER_SRC_BIT);
+		const auto vertexBufferInfo		= makeBufferCreateInfo(size, (VK_BUFFER_USAGE_TRANSFER_DST_BIT | VK_BUFFER_USAGE_VERTEX_BUFFER_BIT));
+
+		buffers.stagingBuffer	= BufferPtr(new BufferWithMemory(vkd, device, alloc, stagingBufferInfo, MemoryRequirement::HostVisible));
+		buffers.vertexBuffer	= BufferPtr(new BufferWithMemory(vkd, device, alloc, vertexBufferInfo, MemoryRequirement::Any));
+	}
+
+	ManyDrawsAllocatedData (const DeviceInterface &vkd, VkDevice device, Allocator &alloc, const VkExtent3D& imageExtent, VkFormat colorFormat, VkFormat dsFormat)
+	{
+		const auto numPixels		= calcNumPixels(imageExtent);
+		const auto vertexBufferSize	= calcVertexBufferSize(imageExtent);
+
+		makeVertexBuffers(vkd, device, alloc, vertexBufferSize, frontBuffers);
+		makeVertexBuffers(vkd, device, alloc, vertexBufferSize, backBuffers);
+
+		const auto colorUsage	= (VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | VK_IMAGE_USAGE_TRANSFER_SRC_BIT);
+		const auto dsUsage		= VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT | VK_IMAGE_USAGE_TRANSFER_SRC_BIT;
+
+		const VkImageCreateInfo colorAttachmentInfo =
+		{
+			VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO,	//	VkStructureType			sType;
+			nullptr,								//	const void*				pNext;
+			0u,										//	VkImageCreateFlags		flags;
+			VK_IMAGE_TYPE_2D,						//	VkImageType				imageType;
+			colorFormat,							//	VkFormat				format;
+			imageExtent,							//	VkExtent3D				extent;
+			1u,										//	deUint32				mipLevels;
+			1u,										//	deUint32				arrayLayers;
+			VK_SAMPLE_COUNT_1_BIT,					//	VkSampleCountFlagBits	samples;
+			VK_IMAGE_TILING_OPTIMAL,				//	VkImageTiling			tiling;
+			colorUsage,								//	VkImageUsageFlags		usage;
+			VK_SHARING_MODE_EXCLUSIVE,				//	VkSharingMode			sharingMode;
+			0u,										//	deUint32				queueFamilyIndexCount;
+			nullptr,								//	const deUint32*			pQueueFamilyIndices;
+			VK_IMAGE_LAYOUT_UNDEFINED,				//	VkImageLayout			initialLayout;
+		};
+		colorAttachment = ImagePtr(new ImageWithMemory(vkd, device, alloc, colorAttachmentInfo, MemoryRequirement::Any));
+
+		const VkImageCreateInfo dsAttachmentInfo =
+		{
+			VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO,	//	VkStructureType			sType;
+			nullptr,								//	const void*				pNext;
+			0u,										//	VkImageCreateFlags		flags;
+			VK_IMAGE_TYPE_2D,						//	VkImageType				imageType;
+			dsFormat,								//	VkFormat				format;
+			imageExtent,							//	VkExtent3D				extent;
+			1u,										//	deUint32				mipLevels;
+			1u,										//	deUint32				arrayLayers;
+			VK_SAMPLE_COUNT_1_BIT,					//	VkSampleCountFlagBits	samples;
+			VK_IMAGE_TILING_OPTIMAL,				//	VkImageTiling			tiling;
+			dsUsage,								//	VkImageUsageFlags		usage;
+			VK_SHARING_MODE_EXCLUSIVE,				//	VkSharingMode			sharingMode;
+			0u,										//	deUint32				queueFamilyIndexCount;
+			nullptr,								//	const deUint32*			pQueueFamilyIndices;
+			VK_IMAGE_LAYOUT_UNDEFINED,				//	VkImageLayout			initialLayout;
+		};
+		dsAttachment = ImagePtr(new ImageWithMemory(vkd, device, alloc, dsAttachmentInfo, MemoryRequirement::Any));
+
+		const auto colorCheckBufferSize		= static_cast<VkDeviceSize>(numPixels * tcu::getPixelSize(mapVkFormat(colorFormat)));
+		const auto colorCheckBufferInfo		= makeBufferCreateInfo(colorCheckBufferSize, VK_BUFFER_USAGE_TRANSFER_DST_BIT);
+
+		colorCheckBuffer = BufferPtr(new BufferWithMemory(vkd, device, alloc, colorCheckBufferInfo, MemoryRequirement::HostVisible));
+
+		const auto stencilFormat			= tcu::TextureFormat(tcu::TextureFormat::S, tcu::TextureFormat::UNSIGNED_INT8);
+		const auto stencilCheckBufferSize	= static_cast<VkDeviceSize>(numPixels * tcu::getPixelSize(stencilFormat));
+		const auto stencilCheckBufferInfo	= makeBufferCreateInfo(stencilCheckBufferSize, VK_BUFFER_USAGE_TRANSFER_DST_BIT);
+
+		stencilCheckBuffer = BufferPtr(new BufferWithMemory(vkd, device, alloc, stencilCheckBufferInfo, MemoryRequirement::HostVisible));
+	}
+};
+
+ManyDrawsCase::ManyDrawsCase (tcu::TestContext& testCtx, const std::string& name, const std::string& description, const ManyDrawsParams& params)
+	: TestCase	(testCtx, name, description)
+	, m_params	(params)
+{}
+
+void ManyDrawsCase::checkSupport (Context& context) const
+{
+	const auto& vki			= context.getInstanceInterface();
+	const auto	physDev		= context.getPhysicalDevice();
+	const auto&	vkd			= context.getDeviceInterface();
+	const auto	device		= context.getDevice();
+	auto&		alloc		= context.getDefaultAllocator();
+	const auto	dsFormat	= getSupportedDepthStencilFormat(vki, physDev);
+
+	try
+	{
+		ManyDrawsAllocatedData allocatedData(vkd, device, alloc, m_params.imageExtent, getColorFormat(), dsFormat);
+	}
+	catch (const vk::Error& err)
+	{
+		const auto result = err.getError();
+		if (result == VK_ERROR_OUT_OF_HOST_MEMORY || result == VK_ERROR_OUT_OF_DEVICE_MEMORY)
+			TCU_THROW(NotSupportedError, "Not enough memory to run this test");
+		throw;
+	}
+}
+
+void ManyDrawsCase::initPrograms (vk::SourceCollections& programCollection) const
+{
+	std::ostringstream vert;
+	vert
+		<< "#version 450\n"
+		<< "\n"
+		<< "layout(location=0) in vec2 inCoords;\n"
+		<< "layout(location=1) in uvec4 inColor;\n"
+		<< "\n"
+		<< "layout(location=0) out flat uvec4 outColor;\n"
+		<< "\n"
+		<< "void main()\n"
+		<< "{\n"
+		<< "    gl_Position = vec4(inCoords, 0.0, 1.0);\n"
+		<< "    outColor = inColor;\n"
+		<< "}\n"
+		;
+
+	std::ostringstream frag;
+	frag
+		<< "#version 450\n"
+		<< "\n"
+		<< "layout(location=0) in flat uvec4 inColor;\n"
+		<< "layout(location=0) out uvec4 outColor;\n"
+		<< "\n"
+		<< "void main()\n"
+		<< "{\n"
+		<< "	outColor = inColor;\n"
+		<< "}\n"
+		;
+
+	programCollection.glslSources.add("vert") << glu::VertexSource(vert.str());
+	programCollection.glslSources.add("frag") << glu::FragmentSource(frag.str());
+}
+
+TestInstance* ManyDrawsCase::createInstance (Context& context) const
+{
+	return new ManyDrawsInstance(context, m_params);
+}
+
+ManyDrawsInstance::ManyDrawsInstance (Context& context, const ManyDrawsParams& params)
+	: TestInstance	(context)
+	, m_params		(params)
+{}
+
+void copyAndFlush (const DeviceInterface& vkd, VkDevice device, BufferWithMemory& buffer, const std::vector<ManyDrawsVertex>& vertices)
+{
+	auto& alloc		= buffer.getAllocation();
+	void* hostPtr	= alloc.getHostPtr();
+
+	deMemcpy(hostPtr, vertices.data(), de::dataSize(vertices));
+	flushAlloc(vkd, device, alloc);
+}
+
+tcu::TestStatus ManyDrawsInstance::iterate (void)
+{
+	const auto&	vki					= m_context.getInstanceInterface();
+	const auto	physDev				= m_context.getPhysicalDevice();
+	const auto&	vkd					= m_context.getDeviceInterface();
+	const auto	device				= m_context.getDevice();
+	auto&		alloc				= m_context.getDefaultAllocator();
+	const auto	qIndex				= m_context.getUniversalQueueFamilyIndex();
+	const auto	queue				= m_context.getUniversalQueue();
+
+	const auto	colorFormat			= ManyDrawsCase::getColorFormat();
+	const auto	dsFormat			= getSupportedDepthStencilFormat(vki, physDev);
+	const auto	vertexBufferSize	= ManyDrawsAllocatedData::calcVertexBufferSize(m_params.imageExtent);
+	const auto	vertexBufferOffset	= static_cast<VkDeviceSize>(0);
+	const auto	numPixels			= ManyDrawsAllocatedData::calcNumPixels(m_params.imageExtent);
+	const auto	numVertices			= ManyDrawsAllocatedData::calcNumVertices(m_params.imageExtent);
+	const auto	alphaValue			= std::numeric_limits<deUint8>::max();
+	const auto	pixelWidth			= 2.0f / static_cast<float>(m_params.imageExtent.width);	// Normalized size.
+	const auto	pixelWidthHalf		= pixelWidth / 2.0f;										// Normalized size.
+	const auto	pixelHeight			= 2.0f / static_cast<float>(m_params.imageExtent.height);	// Normalized size.
+	const auto	useSecondary		= (m_params.level == VK_COMMAND_BUFFER_LEVEL_SECONDARY);
+
+	// Allocate all needed data up front.
+	ManyDrawsAllocatedData testData(vkd, device, alloc, m_params.imageExtent, colorFormat, dsFormat);
+
+	// Generate random colors.
+	de::Random							rnd(m_params.seed);
+	std::vector<ManyDrawsVertex::Color>	colors;
+
+	colors.reserve(numPixels);
+	for (deUint32 i = 0; i < numPixels; ++i)
+	{
+#if 0
+		const deUint8 red	= ((i      ) & 0xFFu);
+		const deUint8 green	= ((i >>  8) & 0xFFu);
+		const deUint8 blue	= ((i >> 16) & 0xFFu);
+		colors.push_back(ManyDrawsVertex::Color(red, green, blue, alphaValue));
+#else
+		colors.push_back(ManyDrawsVertex::Color(rnd.getUint8(), rnd.getUint8(), rnd.getUint8(), alphaValue));
+#endif
+	}
+
+	// Fill vertex data. One triangle per pixel, front and back.
+	std::vector<ManyDrawsVertex> frontVector;
+	std::vector<ManyDrawsVertex> backVector;
+	frontVector.reserve(numVertices);
+	backVector.reserve(numVertices);
+
+	for (deUint32 y = 0; y < m_params.imageExtent.height; ++y)
+	for (deUint32 x = 0; x < m_params.imageExtent.width; ++x)
+	{
+		float x_left	= static_cast<float>(x) * pixelWidth - 1.0f;
+		float x_mid		= x_left + pixelWidthHalf;
+		float x_right	= x_left + pixelWidth;
+		float y_top		= static_cast<float>(y) * pixelHeight - 1.0f;
+		float y_bottom	= y_top + pixelHeight;
+
+		// Triangles in the "back" mesh will have different colors.
+		const auto		colorIdx		= y * m_params.imageExtent.width + x;
+		const auto&		frontColor		= colors[colorIdx];
+		const auto&		backColor		= colors[colors.size() - 1u - colorIdx];
+
+		const tcu::Vec2	triangle[3u]	=
+		{
+			tcu::Vec2(x_left, y_top),
+			tcu::Vec2(x_right, y_top),
+			tcu::Vec2(x_mid, y_bottom),
+		};
+
+		frontVector.emplace_back(triangle[0], frontColor);
+		frontVector.emplace_back(triangle[1], frontColor);
+		frontVector.emplace_back(triangle[2], frontColor);
+
+		backVector.emplace_back(triangle[0], backColor);
+		backVector.emplace_back(triangle[1], backColor);
+		backVector.emplace_back(triangle[2], backColor);
+	}
+
+	// Copy vertex data to staging buffers.
+	copyAndFlush(vkd, device, *testData.frontBuffers.stagingBuffer, frontVector);
+	copyAndFlush(vkd, device, *testData.backBuffers.stagingBuffer, backVector);
+
+	// Color attachment view.
+	const auto		colorResourceRange	= makeImageSubresourceRange(VK_IMAGE_ASPECT_COLOR_BIT, 0u, 1u, 0u, 1u);
+	const auto		colorAttachmentView	= makeImageView(vkd, device, testData.colorAttachment->get(), VK_IMAGE_VIEW_TYPE_2D, colorFormat, colorResourceRange);
+
+	// Depth/stencil attachment view.
+	const auto		dsResourceRange		= makeImageSubresourceRange((VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT), 0u, 1u, 0u, 1u);
+	const auto		dsAttachmentView	= makeImageView(vkd, device, testData.dsAttachment->get(), VK_IMAGE_VIEW_TYPE_2D, dsFormat, dsResourceRange);
+
+	const VkImageView	attachmentArray[]	= { colorAttachmentView.get(), dsAttachmentView.get() };
+	const auto			numAttachments		= static_cast<deUint32>(DE_LENGTH_OF_ARRAY(attachmentArray));
+
+	const auto renderPass	= makeRenderPass(vkd, device, colorFormat, dsFormat);
+	const auto framebuffer	= makeFramebuffer(vkd, device, renderPass.get(), numAttachments, attachmentArray, m_params.imageExtent.width, m_params.imageExtent.height);
+
+	const auto vertModule	= createShaderModule(vkd, device, m_context.getBinaryCollection().get("vert"), 0u);
+	const auto fragModule	= createShaderModule(vkd, device, m_context.getBinaryCollection().get("frag"), 0u);
+
+	const std::vector<VkViewport>	viewports	(1u, makeViewport(m_params.imageExtent));
+	const std::vector<VkRect2D>		scissors	(1u, makeRect2D(m_params.imageExtent));
+
+	const auto descriptorSetLayout	= DescriptorSetLayoutBuilder().build(vkd, device);
+	const auto pipelineLayout		= makePipelineLayout(vkd, device, descriptorSetLayout.get());
+
+	const VkVertexInputBindingDescription bindings[] =
+	{
+		makeVertexInputBindingDescription(0u, static_cast<deUint32>(sizeof(ManyDrawsVertex)), VK_VERTEX_INPUT_RATE_VERTEX),
+	};
+
+	const VkVertexInputAttributeDescription attributes[] =
+	{
+		makeVertexInputAttributeDescription(0u, 0u, VK_FORMAT_R32G32_SFLOAT, static_cast<deUint32>(offsetof(ManyDrawsVertex, coords))),
+		makeVertexInputAttributeDescription(1u, 0u, VK_FORMAT_R8G8B8A8_UINT, static_cast<deUint32>(offsetof(ManyDrawsVertex, color))),
+	};
+
+	const VkPipelineVertexInputStateCreateInfo inputState =
+	{
+		VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO,	//	VkStructureType								sType;
+		nullptr,													//	const void*									pNext;
+		0u,															//	VkPipelineVertexInputStateCreateFlags		flags;
+		static_cast<deUint32>(DE_LENGTH_OF_ARRAY(bindings)),		//	deUint32									vertexBindingDescriptionCount;
+		bindings,													//	const VkVertexInputBindingDescription*		pVertexBindingDescriptions;
+		static_cast<deUint32>(DE_LENGTH_OF_ARRAY(attributes)),		//	deUint32									vertexAttributeDescriptionCount;
+		attributes,													//	const VkVertexInputAttributeDescription*	pVertexAttributeDescriptions;
+	};
+
+	// Stencil state: this is key for checking and obtaining the right results. The stencil buffer will be cleared to 0. The first
+	// set of draws ("front" set of triangles) will pass the test and increment the stencil value to 1. The second set of draws
+	// ("back" set of triangles, not really in the back because all of them have depth 0.0) will not pass the stencil test then, but
+	// still increment the stencil value to 2.
+	//
+	// At the end of the test, if every draw command was executed correctly in the expected order, the color buffer will have the
+	// colors of the front set, and the stencil buffer will be full of 2s.
+	const auto stencilOpState = makeStencilOpState(VK_STENCIL_OP_INCREMENT_AND_CLAMP, VK_STENCIL_OP_INCREMENT_AND_CLAMP, VK_STENCIL_OP_KEEP,
+		VK_COMPARE_OP_EQUAL, 0xFFu, 0xFFu, 0u);
+
+	const VkPipelineDepthStencilStateCreateInfo dsState =
+	{
+		VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO,	// VkStructureType                          sType
+		nullptr,													// const void*                              pNext
+		0u,															// VkPipelineDepthStencilStateCreateFlags   flags
+		VK_FALSE,													// VkBool32                                 depthTestEnable
+		VK_FALSE,													// VkBool32                                 depthWriteEnable
+		VK_COMPARE_OP_NEVER,										// VkCompareOp                              depthCompareOp
+		VK_FALSE,													// VkBool32                                 depthBoundsTestEnable
+		VK_TRUE,													// VkBool32                                 stencilTestEnable
+		stencilOpState,												// VkStencilOpState                         front
+		stencilOpState,												// VkStencilOpState                         back
+		0.0f,														// float                                    minDepthBounds
+		1.0f,														// float                                    maxDepthBounds
+	};
+
+	const auto pipeline = makeGraphicsPipeline(vkd, device, pipelineLayout.get(),
+			vertModule.get(), DE_NULL, DE_NULL, DE_NULL, fragModule.get(),
+			renderPass.get(), viewports, scissors, VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST, 0u, 0u,
+			&inputState, nullptr, nullptr, &dsState);
+
+	// Command pool and buffers.
+	using CmdBufferPtr = Move<VkCommandBuffer>;
+	const auto cmdPool = makeCommandPool(vkd, device, qIndex);
+
+	CmdBufferPtr	primaryCmdBufferPtr;
+	CmdBufferPtr	secondaryCmdBufferPtr;
+	VkCommandBuffer	primaryCmdBuffer;
+	VkCommandBuffer	secondaryCmdBuffer;
+	VkCommandBuffer	drawsCmdBuffer;
+
+	primaryCmdBufferPtr		= allocateCommandBuffer(vkd, device, cmdPool.get(), VK_COMMAND_BUFFER_LEVEL_PRIMARY);
+	primaryCmdBuffer		= primaryCmdBufferPtr.get();
+	drawsCmdBuffer			= primaryCmdBuffer;
+	beginCommandBuffer(vkd, primaryCmdBuffer);
+
+	// Clear values.
+	std::vector<VkClearValue> clearValues(2u);
+	clearValues[0] = makeClearValueColorU32(0u, 0u, 0u, 0u);
+	clearValues[1] = makeClearValueDepthStencil(1.0f, 0u);
+
+	// Copy staging buffers to vertex buffers.
+	const auto copyRegion = makeBufferCopy(0ull, 0ull, vertexBufferSize);
+	vkd.cmdCopyBuffer(primaryCmdBuffer, testData.frontBuffers.stagingBuffer->get(), testData.frontBuffers.vertexBuffer->get(), 1u, &copyRegion);
+	vkd.cmdCopyBuffer(primaryCmdBuffer, testData.backBuffers.stagingBuffer->get(), testData.backBuffers.vertexBuffer->get(), 1u, &copyRegion);
+
+	// Use barrier for vertex reads.
+	const auto vertexBarier = makeMemoryBarrier(VK_ACCESS_TRANSFER_WRITE_BIT, VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT);
+	vkd.cmdPipelineBarrier(primaryCmdBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_VERTEX_INPUT_BIT, 0u, 1u, &vertexBarier, 0u, nullptr, 0u, nullptr);
+
+	// Change depth/stencil attachment layout.
+	const auto dsBarrier = makeImageMemoryBarrier(0, (VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT | VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT), VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL, testData.dsAttachment->get(), dsResourceRange);
+	vkd.cmdPipelineBarrier(primaryCmdBuffer, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, (VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT | VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT), 0u, 0u, nullptr, 0u, nullptr, 1u, &dsBarrier);
+
+	beginRenderPass(vkd, primaryCmdBuffer, renderPass.get(), framebuffer.get(),
+		scissors[0], static_cast<deUint32>(clearValues.size()), clearValues.data(),
+		(useSecondary ? VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS : VK_SUBPASS_CONTENTS_INLINE));
+
+	if (useSecondary)
+	{
+		secondaryCmdBufferPtr	= allocateCommandBuffer(vkd, device, cmdPool.get(), VK_COMMAND_BUFFER_LEVEL_SECONDARY);
+		secondaryCmdBuffer		= secondaryCmdBufferPtr.get();
+		drawsCmdBuffer			= secondaryCmdBuffer;
+
+		const VkCommandBufferInheritanceInfo inheritanceInfo =
+		{
+			VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO,	//	VkStructureType					sType;
+			nullptr,											//	const void*						pNext;
+			renderPass.get(),									//	VkRenderPass					renderPass;
+			0u,													//	deUint32						subpass;
+			framebuffer.get(),									//	VkFramebuffer					framebuffer;
+			0u,													//	VkBool32						occlusionQueryEnable;
+			0u,													//	VkQueryControlFlags				queryFlags;
+			0u,													//	VkQueryPipelineStatisticFlags	pipelineStatistics;
+		};
+
+		const VkCommandBufferUsageFlags	usageFlags	= (VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT | VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT);
+		const VkCommandBufferBeginInfo	beginInfo	=
+		{
+			VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,
+			nullptr,
+			usageFlags,										//	VkCommandBufferUsageFlags				flags;
+			&inheritanceInfo,								//	const VkCommandBufferInheritanceInfo*	pInheritanceInfo;
+		};
+
+		VK_CHECK(vkd.beginCommandBuffer(secondaryCmdBuffer, &beginInfo));
+	}
+
+	// Bind pipeline.
+	vkd.cmdBindPipeline(drawsCmdBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, pipeline.get());
+
+	// Draw triangles in front.
+	vkd.cmdBindVertexBuffers(drawsCmdBuffer, 0u, 1u, &testData.frontBuffers.vertexBuffer->get(), &vertexBufferOffset);
+	for (deUint32 i = 0; i < numPixels; ++i)
+		vkd.cmdDraw(drawsCmdBuffer, 3u, 1u, i*3u, 0u);
+
+	// Draw triangles in the "back". This should have no effect due to the stencil test.
+	vkd.cmdBindVertexBuffers(drawsCmdBuffer, 0u, 1u, &testData.backBuffers.vertexBuffer->get(), &vertexBufferOffset);
+	for (deUint32 i = 0; i < numPixels; ++i)
+		vkd.cmdDraw(drawsCmdBuffer, 3u, 1u, i*3u, 0u);
+
+	if (useSecondary)
+	{
+		endCommandBuffer(vkd, secondaryCmdBuffer);
+		vkd.cmdExecuteCommands(primaryCmdBuffer, 1u, &secondaryCmdBuffer);
+	}
+
+	endRenderPass(vkd, primaryCmdBuffer);
+
+	// Copy color and depth/stencil attachments to verification buffers.
+	const auto colorAttachmentBarrier = makeImageMemoryBarrier(VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, VK_ACCESS_TRANSFER_READ_BIT, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, testData.colorAttachment->get(), colorResourceRange);
+	vkd.cmdPipelineBarrier(primaryCmdBuffer, VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, 0u, 0u, nullptr, 0u, nullptr, 1u, &colorAttachmentBarrier);
+
+	const auto colorResourceLayers	= makeImageSubresourceLayers(VK_IMAGE_ASPECT_COLOR_BIT, 0u, 0u, 1u);
+	const auto colorCopyRegion		= makeBufferImageCopy(m_params.imageExtent, colorResourceLayers);
+	vkd.cmdCopyImageToBuffer(primaryCmdBuffer, testData.colorAttachment->get(), VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, testData.colorCheckBuffer->get(), 1u, &colorCopyRegion);
+
+	const auto stencilAttachmentBarrier = makeImageMemoryBarrier(VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT, VK_ACCESS_TRANSFER_READ_BIT, VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, testData.dsAttachment->get(), dsResourceRange);
+	vkd.cmdPipelineBarrier(primaryCmdBuffer, (VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT | VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT), VK_PIPELINE_STAGE_TRANSFER_BIT, 0u, 0u, nullptr, 0u, nullptr, 1u, &stencilAttachmentBarrier);
+
+	const auto stencilResourceLayers	= makeImageSubresourceLayers(VK_IMAGE_ASPECT_STENCIL_BIT, 0u, 0u, 1u);
+	const auto stencilCopyRegion		= makeBufferImageCopy(m_params.imageExtent, stencilResourceLayers);
+	vkd.cmdCopyImageToBuffer(primaryCmdBuffer, testData.dsAttachment->get(), VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, testData.stencilCheckBuffer->get(), 1u, &stencilCopyRegion);
+
+	const auto verificationBuffersBarrier = makeMemoryBarrier(VK_ACCESS_TRANSFER_WRITE_BIT, VK_ACCESS_HOST_READ_BIT);
+	vkd.cmdPipelineBarrier(primaryCmdBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_HOST_BIT, 0u, 1u, &verificationBuffersBarrier, 0u, nullptr, 0u, nullptr);
+
+	endCommandBuffer(vkd, primaryCmdBuffer);
+	submitCommandsAndWait(vkd, device, queue, primaryCmdBuffer);
+
+	// Check buffer contents.
+	auto& colorCheckBufferAlloc	= testData.colorCheckBuffer->getAllocation();
+	void* colorCheckBufferData	= colorCheckBufferAlloc.getHostPtr();
+	invalidateAlloc(vkd, device, colorCheckBufferAlloc);
+
+	auto& stencilCheckBufferAlloc	= testData.stencilCheckBuffer->getAllocation();
+	void* stencilCheckBufferData	= stencilCheckBufferAlloc.getHostPtr();
+	invalidateAlloc(vkd, device, stencilCheckBufferAlloc);
+
+	const auto iWidth			= static_cast<int>(m_params.imageExtent.width);
+	const auto iHeight			= static_cast<int>(m_params.imageExtent.height);
+	const auto colorTcuFormat	= mapVkFormat(colorFormat);
+	const auto stencilTcuFormat	= tcu::TextureFormat(tcu::TextureFormat::S, tcu::TextureFormat::UNSIGNED_INT8);
+
+	tcu::TextureLevel			referenceLevel		(colorTcuFormat, iWidth, iHeight);
+	tcu::PixelBufferAccess		referenceAccess		= referenceLevel.getAccess();
+	tcu::TextureLevel			colorErrorLevel		(mapVkFormat(VK_FORMAT_R8G8B8A8_UNORM), iWidth, iHeight);
+	tcu::PixelBufferAccess		colorErrorAccess	= colorErrorLevel.getAccess();
+	tcu::TextureLevel			stencilErrorLevel	(mapVkFormat(VK_FORMAT_R8G8B8A8_UNORM), iWidth, iHeight);
+	tcu::PixelBufferAccess		stencilErrorAccess	= stencilErrorLevel.getAccess();
+	tcu::ConstPixelBufferAccess	colorAccess			(colorTcuFormat, iWidth, iHeight, 1, colorCheckBufferData);
+	tcu::ConstPixelBufferAccess	stencilAccess		(stencilTcuFormat, iWidth, iHeight, 1, stencilCheckBufferData);
+	const tcu::Vec4				green				(0.0f, 1.0f, 0.0f, 1.0f);
+	const tcu::Vec4				red					(1.0f, 0.0f, 0.0f, 1.0f);
+	const int					expectedStencil		= 2;
+	bool						colorFail			= false;
+	bool						stencilFail			= false;
+
+	for (int y = 0; y < iHeight; ++y)
+	for (int x = 0; x < iWidth; ++x)
+	{
+		const tcu::UVec4	colorValue		= colorAccess.getPixelUint(x, y);
+		const auto			expectedPixel	= colors[y * iWidth + x];
+		const tcu::UVec4	expectedValue	(expectedPixel.x(), expectedPixel.y(), expectedPixel.z(), expectedPixel.w());
+		const bool			colorMismatch	= (colorValue != expectedValue);
+
+		const auto			stencilValue	= stencilAccess.getPixStencil(x, y);
+		const bool			stencilMismatch	= (stencilValue != expectedStencil);
+
+		referenceAccess.setPixel(expectedValue, x, y);
+		colorErrorAccess.setPixel((colorMismatch ? red : green), x, y);
+		stencilErrorAccess.setPixel((stencilMismatch ? red : green), x, y);
+
+		if (stencilMismatch)
+			stencilFail = true;
+
+		if (colorMismatch)
+			colorFail = true;
+	}
+
+	if (colorFail || stencilFail)
+	{
+		auto& log = m_context.getTestContext().getLog();
+		log
+			<< tcu::TestLog::ImageSet("Result", "")
+			<< tcu::TestLog::Image("ColorOutput", "", colorAccess)
+			<< tcu::TestLog::Image("ColorReference", "", referenceAccess)
+			<< tcu::TestLog::Image("ColorError", "", colorErrorAccess)
+			<< tcu::TestLog::Image("StencilError", "", stencilErrorAccess)
+			<< tcu::TestLog::EndImageSet
+			;
+		TCU_FAIL("Mismatched output and reference color or stencil; please check test log --");
+	}
+
+	return tcu::TestStatus::pass("Pass");
+}
+
 } // anonymous
 
 tcu::TestCaseGroup* createCommandBuffersTests (tcu::TestContext& testCtx)
@@ -4158,30 +4762,40 @@
 	addFunctionCase				(commandBuffersTests.get(), "pool_create_reset_bit",			"",	createPoolResetBitTest);
 	addFunctionCase				(commandBuffersTests.get(), "pool_reset_release_res",			"",	resetPoolReleaseResourcesBitTest);
 	addFunctionCase				(commandBuffersTests.get(), "pool_reset_no_flags_res",			"",	resetPoolNoFlagsTest);
-	addFunctionCase				(commandBuffersTests.get(), "pool_reset_reuse",					"",	resetPoolReuseTest);
+	addFunctionCase				(commandBuffersTests.get(), "pool_reset_reuse",					"",	checkEventSupport, resetPoolReuseTest);
 	/* 19.2. Command Buffer Lifetime (5.2 in VK 1.0 Spec) */
 	addFunctionCase				(commandBuffersTests.get(), "allocate_single_primary",			"", allocatePrimaryBufferTest);
 	addFunctionCase				(commandBuffersTests.get(), "allocate_many_primary",			"",	allocateManyPrimaryBuffersTest);
 	addFunctionCase				(commandBuffersTests.get(), "allocate_single_secondary",		"", allocateSecondaryBufferTest);
 	addFunctionCase				(commandBuffersTests.get(), "allocate_many_secondary",			"", allocateManySecondaryBuffersTest);
-	addFunctionCase				(commandBuffersTests.get(), "execute_small_primary",			"",	executePrimaryBufferTest);
-	addFunctionCase				(commandBuffersTests.get(), "execute_large_primary",			"",	executeLargePrimaryBufferTest);
-	addFunctionCase				(commandBuffersTests.get(), "reset_implicit",					"", resetBufferImplicitlyTest);
-	addFunctionCase				(commandBuffersTests.get(), "trim_command_pool",				"", trimCommandPoolTest, VK_COMMAND_BUFFER_LEVEL_PRIMARY);
-	addFunctionCase				(commandBuffersTests.get(), "trim_command_pool_secondary",		"", trimCommandPoolTest, VK_COMMAND_BUFFER_LEVEL_SECONDARY);
+	addFunctionCase				(commandBuffersTests.get(), "execute_small_primary",			"",	checkEventSupport, executePrimaryBufferTest);
+	addFunctionCase				(commandBuffersTests.get(), "execute_large_primary",			"",	checkEventSupport, executeLargePrimaryBufferTest);
+	addFunctionCase				(commandBuffersTests.get(), "reset_implicit",					"", checkEventSupport, resetBufferImplicitlyTest);
+	addFunctionCase				(commandBuffersTests.get(), "trim_command_pool",				"", checkEventSupport, trimCommandPoolTest, VK_COMMAND_BUFFER_LEVEL_PRIMARY);
+	addFunctionCase				(commandBuffersTests.get(), "trim_command_pool_secondary",		"", checkEventSupport, trimCommandPoolTest, VK_COMMAND_BUFFER_LEVEL_SECONDARY);
 	/* 19.3. Command Buffer Recording (5.3 in VK 1.0 Spec) */
-	addFunctionCase				(commandBuffersTests.get(), "record_single_primary",			"",	recordSinglePrimaryBufferTest);
-	addFunctionCase				(commandBuffersTests.get(), "record_many_primary",				"", recordLargePrimaryBufferTest);
-	addFunctionCase				(commandBuffersTests.get(), "record_single_secondary",			"",	recordSingleSecondaryBufferTest);
-	addFunctionCase				(commandBuffersTests.get(), "record_many_secondary",			"", recordLargeSecondaryBufferTest);
-	addFunctionCase				(commandBuffersTests.get(), "submit_twice_primary",				"",	submitPrimaryBufferTwiceTest);
-	addFunctionCase				(commandBuffersTests.get(), "submit_twice_secondary",			"",	submitSecondaryBufferTwiceTest);
-	addFunctionCase				(commandBuffersTests.get(), "record_one_time_submit_primary",	"",	oneTimeSubmitFlagPrimaryBufferTest);
-	addFunctionCase				(commandBuffersTests.get(), "record_one_time_submit_secondary",	"",	oneTimeSubmitFlagSecondaryBufferTest);
+	addFunctionCase				(commandBuffersTests.get(), "record_single_primary",			"",	checkEventSupport, recordSinglePrimaryBufferTest);
+	addFunctionCase				(commandBuffersTests.get(), "record_many_primary",				"", checkEventSupport, recordLargePrimaryBufferTest);
+	addFunctionCase				(commandBuffersTests.get(), "record_single_secondary",			"",	checkEventSupport, recordSingleSecondaryBufferTest);
+	addFunctionCase				(commandBuffersTests.get(), "record_many_secondary",			"", checkEventSupport, recordLargeSecondaryBufferTest);
+	{
+		deUint32	seed		= 1614182419u;
+		const auto	smallExtent	= makeExtent3D(128u, 128u, 1u);
+		const auto	largeExtent	= makeExtent3D(512u, 512u, 1u);
+
+		commandBuffersTests->addChild(new ManyDrawsCase(testCtx, "record_many_draws_primary_1",		"", ManyDrawsParams(VK_COMMAND_BUFFER_LEVEL_PRIMARY,	smallExtent,	seed++)));
+		commandBuffersTests->addChild(new ManyDrawsCase(testCtx, "record_many_draws_primary_2",		"", ManyDrawsParams(VK_COMMAND_BUFFER_LEVEL_PRIMARY,	largeExtent,	seed++)));
+		commandBuffersTests->addChild(new ManyDrawsCase(testCtx, "record_many_draws_secondary_1",	"", ManyDrawsParams(VK_COMMAND_BUFFER_LEVEL_SECONDARY,	smallExtent,	seed++)));
+		commandBuffersTests->addChild(new ManyDrawsCase(testCtx, "record_many_draws_secondary_2",	"", ManyDrawsParams(VK_COMMAND_BUFFER_LEVEL_SECONDARY,	largeExtent,	seed++)));
+	}
+	addFunctionCase				(commandBuffersTests.get(), "submit_twice_primary",				"",	checkEventSupport, submitPrimaryBufferTwiceTest);
+	addFunctionCase				(commandBuffersTests.get(), "submit_twice_secondary",			"",	checkEventSupport, submitSecondaryBufferTwiceTest);
+	addFunctionCase				(commandBuffersTests.get(), "record_one_time_submit_primary",	"",	checkEventSupport, oneTimeSubmitFlagPrimaryBufferTest);
+	addFunctionCase				(commandBuffersTests.get(), "record_one_time_submit_secondary",	"",	checkEventSupport, oneTimeSubmitFlagSecondaryBufferTest);
 	addFunctionCase				(commandBuffersTests.get(), "render_pass_continue",				"",	renderPassContinueTest, true);
 	addFunctionCase				(commandBuffersTests.get(), "render_pass_continue_no_fb",		"",	renderPassContinueTest, false);
-	addFunctionCase				(commandBuffersTests.get(), "record_simul_use_primary",			"",	simultaneousUsePrimaryBufferTest);
-	addFunctionCase				(commandBuffersTests.get(), "record_simul_use_secondary",		"",	simultaneousUseSecondaryBufferTest);
+	addFunctionCase				(commandBuffersTests.get(), "record_simul_use_primary",			"",	checkEventSupport, simultaneousUsePrimaryBufferTest);
+	addFunctionCase				(commandBuffersTests.get(), "record_simul_use_secondary",		"",	checkEventSupport, simultaneousUseSecondaryBufferTest);
 	addFunctionCaseWithPrograms (commandBuffersTests.get(), "record_simul_use_secondary_one_primary", "", genComputeIncrementSource, simultaneousUseSecondaryBufferOnePrimaryBufferTest);
 	addFunctionCaseWithPrograms (commandBuffersTests.get(), "record_simul_use_secondary_two_primary", "", genComputeIncrementSource, simultaneousUseSecondaryBufferTwoPrimaryBuffersTest);
 	addFunctionCase				(commandBuffersTests.get(), "record_query_precise_w_flag",		"",	recordBufferQueryPreciseWithFlagTest);
@@ -4193,15 +4807,15 @@
 	addFunctionCaseWithPrograms (commandBuffersTests.get(), "bad_inheritance_info_invalid_type", "", genComputeIncrementSourceBadInheritance, badInheritanceInfoTest, BadInheritanceInfoCase::INVALID_STRUCTURE_TYPE);
 	addFunctionCaseWithPrograms (commandBuffersTests.get(), "bad_inheritance_info_valid_nonsense_type", "", genComputeIncrementSourceBadInheritance, badInheritanceInfoTest, BadInheritanceInfoCase::VALID_NONSENSE_TYPE);
 	/* 19.4. Command Buffer Submission (5.4 in VK 1.0 Spec) */
-	addFunctionCase				(commandBuffersTests.get(), "submit_count_non_zero",			"", submitBufferCountNonZero);
-	addFunctionCase				(commandBuffersTests.get(), "submit_count_equal_zero",			"", submitBufferCountEqualZero);
-	addFunctionCase				(commandBuffersTests.get(), "submit_wait_single_semaphore",		"", submitBufferWaitSingleSemaphore);
-	addFunctionCase				(commandBuffersTests.get(), "submit_wait_many_semaphores",		"", submitBufferWaitManySemaphores);
-	addFunctionCase				(commandBuffersTests.get(), "submit_null_fence",				"", submitBufferNullFence);
-	addFunctionCase				(commandBuffersTests.get(), "submit_two_buffers_one_buffer_null_with_fence", "", submitTwoBuffersOneBufferNullWithFence);
+	addFunctionCase				(commandBuffersTests.get(), "submit_count_non_zero",			"", checkEventSupport, submitBufferCountNonZero);
+	addFunctionCase				(commandBuffersTests.get(), "submit_count_equal_zero",			"", checkEventSupport, submitBufferCountEqualZero);
+	addFunctionCase				(commandBuffersTests.get(), "submit_wait_single_semaphore",		"", checkEventSupport, submitBufferWaitSingleSemaphore);
+	addFunctionCase				(commandBuffersTests.get(), "submit_wait_many_semaphores",		"", checkEventSupport, submitBufferWaitManySemaphores);
+	addFunctionCase				(commandBuffersTests.get(), "submit_null_fence",				"", checkEventSupport, submitBufferNullFence);
+	addFunctionCase				(commandBuffersTests.get(), "submit_two_buffers_one_buffer_null_with_fence", "", checkEventSupport, submitTwoBuffersOneBufferNullWithFence);
 	/* 19.5. Secondary Command Buffer Execution (5.6 in VK 1.0 Spec) */
-	addFunctionCase				(commandBuffersTests.get(), "secondary_execute",				"",	executeSecondaryBufferTest);
-	addFunctionCase				(commandBuffersTests.get(), "secondary_execute_twice",			"",	executeSecondaryBufferTwiceTest);
+	addFunctionCase				(commandBuffersTests.get(), "secondary_execute",				"",	checkEventSupport, executeSecondaryBufferTest);
+	addFunctionCase				(commandBuffersTests.get(), "secondary_execute_twice",			"",	checkEventSupport, executeSecondaryBufferTwiceTest);
 	/* 19.6. Commands Allowed Inside Command Buffers (? in VK 1.0 Spec) */
 	addFunctionCaseWithPrograms (commandBuffersTests.get(), "order_bind_pipeline",				"", genComputeSource, orderBindPipelineTest);
 	/* Verify untested transitions between command buffer states */
diff --git a/external/vulkancts/modules/vulkan/api/vktApiCopiesAndBlittingTests.cpp b/external/vulkancts/modules/vulkan/api/vktApiCopiesAndBlittingTests.cpp
index 25540a9..6fc04a1 100644
--- a/external/vulkancts/modules/vulkan/api/vktApiCopiesAndBlittingTests.cpp
+++ b/external/vulkancts/modules/vulkan/api/vktApiCopiesAndBlittingTests.cpp
@@ -66,6 +66,19 @@
 namespace
 {
 
+enum FillMode
+{
+	FILL_MODE_GRADIENT = 0,
+	FILL_MODE_WHITE,
+	FILL_MODE_RED,
+	FILL_MODE_MULTISAMPLE,
+	FILL_MODE_BLUE_RED_X,
+	FILL_MODE_BLUE_RED_Y,
+	FILL_MODE_BLUE_RED_Z,
+
+	FILL_MODE_LAST
+};
+
 enum MirrorModeBits
 {
 	MIRROR_MODE_X		= (1<<0),
@@ -254,6 +267,7 @@
 	VkImageTiling		tiling;
 	VkImageLayout		operationLayout;
 	VkImageCreateFlags	createFlags;
+	FillMode			fillMode;
 };
 
 struct TestParams
@@ -282,6 +296,7 @@
 	deBool			singleCommand;
 	deUint32		barrierCount;
 	deBool			separateDepthStencilLayouts;
+	deBool			clearDestination;
 
 	TestParams (void)
 	{
@@ -291,6 +306,9 @@
 		separateDepthStencilLayouts	= DE_FALSE;
 		src.image.createFlags		= VK_IMAGE_CREATE_FLAG_BITS_MAX_ENUM;
 		dst.image.createFlags		= VK_IMAGE_CREATE_FLAG_BITS_MAX_ENUM;
+		src.image.fillMode			= FILL_MODE_GRADIENT;
+		dst.image.fillMode			= FILL_MODE_WHITE;
+		clearDestination			= DE_FALSE;
 	}
 };
 
@@ -416,16 +434,6 @@
 																			 TestParams	testParams);
 	virtual tcu::TestStatus				iterate								(void) = 0;
 
-	enum FillMode
-	{
-		FILL_MODE_GRADIENT = 0,
-		FILL_MODE_WHITE,
-		FILL_MODE_RED,
-		FILL_MODE_MULTISAMPLE,
-
-		FILL_MODE_LAST
-	};
-
 protected:
 	const TestParams					m_params;
 
@@ -549,6 +557,27 @@
 					buffer.setPixel(redColor, x, y, z);
 				break;
 
+			case FILL_MODE_BLUE_RED_X:
+			case FILL_MODE_BLUE_RED_Y:
+			case FILL_MODE_BLUE_RED_Z:
+				bool useBlue;
+				switch (mode)
+				{
+					case FILL_MODE_BLUE_RED_X: useBlue = (x & 1); break;
+					case FILL_MODE_BLUE_RED_Y: useBlue = (y & 1); break;
+					case FILL_MODE_BLUE_RED_Z: useBlue = (z & 1); break;
+					default: DE_ASSERT(false); break;
+				}
+				if (tcu::isCombinedDepthStencilType(buffer.getFormat().type))
+				{
+					buffer.setPixDepth((useBlue ? blueColor[0] : redColor[0]), x, y, z);
+					if (tcu::hasStencilComponent(buffer.getFormat().order))
+						buffer.setPixStencil((useBlue ? (int) blueColor[3] : (int)redColor[3]), x, y, z);
+				}
+				else
+					buffer.setPixel((useBlue ? blueColor : redColor), x, y, z);
+				break;
+
 			case FILL_MODE_MULTISAMPLE:
 			{
 				float xScaled = static_cast<float>(x) / static_cast<float>(width);
@@ -1040,7 +1069,7 @@
 																				(int)m_params.dst.image.extent.width,
 																				(int)m_params.dst.image.extent.height,
 																				(int)m_params.dst.image.extent.depth));
-	generateBuffer(m_destinationTextureLevel->getAccess(), m_params.dst.image.extent.width, m_params.dst.image.extent.height, m_params.dst.image.extent.depth, FILL_MODE_GRADIENT);
+	generateBuffer(m_destinationTextureLevel->getAccess(), m_params.dst.image.extent.width, m_params.dst.image.extent.height, m_params.dst.image.extent.depth, m_params.clearDestination ? FILL_MODE_WHITE : FILL_MODE_GRADIENT);
 	generateExpectedResult();
 
 	uploadImage(m_sourceTextureLevel->getAccess(), m_source.get(), m_params.src.image);
@@ -1134,6 +1163,19 @@
 	beginCommandBuffer(vk, *m_cmdBuffer);
 	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.clearDestination)
+	{
+		VkImageSubresourceRange	range		= { VK_IMAGE_ASPECT_COLOR_BIT, 0u, 1u, 0u, 1u };
+		VkClearColorValue		clearColor;
+
+		clearColor.float32[0] = 1.0f;
+		clearColor.float32[1] = 1.0f;
+		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)
 	{
 		vk.cmdCopyImage(*m_cmdBuffer, m_source.get(), m_params.src.image.operationLayout, m_destination.get(), m_params.dst.image.operationLayout, (deUint32)imageCopies.size(), imageCopies.data());
@@ -2568,12 +2610,12 @@
 																				m_params.src.image.extent.width,
 																				m_params.src.image.extent.height,
 																				m_params.src.image.extent.depth));
-	generateBuffer(m_sourceTextureLevel->getAccess(), m_params.src.image.extent.width, m_params.src.image.extent.height, m_params.src.image.extent.depth, FILL_MODE_GRADIENT);
+	generateBuffer(m_sourceTextureLevel->getAccess(), m_params.src.image.extent.width, m_params.src.image.extent.height, m_params.src.image.extent.depth, m_params.src.image.fillMode);
 	m_destinationTextureLevel = de::MovePtr<tcu::TextureLevel>(new tcu::TextureLevel(dstTcuFormat,
 																					 (int)m_params.dst.image.extent.width,
 																					 (int)m_params.dst.image.extent.height,
 																					 (int)m_params.dst.image.extent.depth));
-	generateBuffer(m_destinationTextureLevel->getAccess(), m_params.dst.image.extent.width, m_params.dst.image.extent.height, m_params.dst.image.extent.depth, FILL_MODE_WHITE);
+	generateBuffer(m_destinationTextureLevel->getAccess(), m_params.dst.image.extent.width, m_params.dst.image.extent.height, m_params.dst.image.extent.depth, m_params.dst.image.fillMode);
 	generateExpectedResult();
 
 	uploadImage(m_sourceTextureLevel->getAccess(), m_source.get(), m_params.src.image);
@@ -2660,7 +2702,7 @@
 			m_params.dst.image.operationLayout,			// VkImageLayout				dstImageLayout;
 			(deUint32)m_params.regions.size(),			// uint32_t						regionCount;
 			&regions2KHR[0],							// const VkImageBlit2KHR*		pRegions;
-			m_params.filter								// VkFilter						filter;
+			m_params.filter,							// VkFilter						filter;
 		};
 		vk.cmdBlitImage2KHR(*m_cmdBuffer, &BlitImageInfo2KHR);
 	}
@@ -3526,12 +3568,12 @@
 																				m_params.src.image.extent.width,
 																				m_params.src.image.extent.height,
 																				m_params.src.image.extent.depth));
-	generateBuffer(m_sourceTextureLevel->getAccess(), m_params.src.image.extent.width, m_params.src.image.extent.height, m_params.src.image.extent.depth, FILL_MODE_GRADIENT);
+	generateBuffer(m_sourceTextureLevel->getAccess(), m_params.src.image.extent.width, m_params.src.image.extent.height, m_params.src.image.extent.depth, m_params.src.image.fillMode);
 	m_destinationTextureLevel = de::MovePtr<tcu::TextureLevel>(new tcu::TextureLevel(dstTcuFormat,
 																						(int)m_params.dst.image.extent.width,
 																						(int)m_params.dst.image.extent.height,
 																						(int)m_params.dst.image.extent.depth));
-	generateBuffer(m_destinationTextureLevel->getAccess(), m_params.dst.image.extent.width, m_params.dst.image.extent.height, m_params.dst.image.extent.depth, FILL_MODE_WHITE);
+	generateBuffer(m_destinationTextureLevel->getAccess(), m_params.dst.image.extent.width, m_params.dst.image.extent.height, m_params.dst.image.extent.depth, m_params.dst.image.fillMode);
 	generateExpectedResult();
 
 	uploadImage(m_sourceTextureLevel->getAccess(), m_source.get(), m_params.src.image);
@@ -5465,6 +5507,43 @@
 	}
 
 	{
+		VkExtent3D	extent					= { 65u, 63u, 1u };
+
+		TestParams	params;
+		params.src.image.imageType			= VK_IMAGE_TYPE_2D;
+		params.src.image.format				= VK_FORMAT_R32_UINT;
+		params.src.image.extent				= extent;
+		params.src.image.tiling				= VK_IMAGE_TILING_OPTIMAL;
+		params.src.image.operationLayout	= VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL;
+		params.dst.image.imageType			= VK_IMAGE_TYPE_2D;
+		params.dst.image.format				= VK_FORMAT_R8G8B8A8_UNORM;
+		params.dst.image.extent				= extent;
+		params.dst.image.tiling				= VK_IMAGE_TILING_OPTIMAL;
+		params.dst.image.operationLayout	= VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL;
+		params.allocationKind				= allocationKind;
+		params.extensionUse					= extensionUse;
+		params.clearDestination				= VK_TRUE;
+
+		{
+			const VkImageCopy	testCopy	=
+			{
+				defaultSourceLayer,	// VkImageSubresourceLayers	srcSubresource;
+				{34, 34, 0},		// VkOffset3D				srcOffset;
+				defaultSourceLayer,	// VkImageSubresourceLayers	dstSubresource;
+				{0, 0, 0},			// VkOffset3D				dstOffset;
+				{31, 29, 1}			// VkExtent3D				extent;
+			};
+
+			CopyRegion			imageCopy;
+
+			imageCopy.imageCopy = testCopy;
+			params.regions.push_back(imageCopy);
+		}
+
+		group->addChild(new CopyImageToImageTestCase(testCtx, "partial_image_npot_diff_format_clear", "Partial image with npot dimensions, different format, and clearing of the destination image", params));
+	}
+
+	{
 		TestParams	params;
 		params.src.image.imageType			= VK_IMAGE_TYPE_2D;
 		params.src.image.format				= VK_FORMAT_D32_SFLOAT;
@@ -8804,6 +8883,34 @@
 						testParams.params.filter = VK_FILTER_CUBIC_EXT;
 						group->addChild(new BlitImageTestCase(testCtx, testName + "_cubic", description, testParams.params));
 					}
+
+					if (testParams.params.src.image.imageType == VK_IMAGE_TYPE_3D)
+					{
+						const struct
+						{
+							FillMode	mode;
+							const char*	name;
+						} modeList[] =
+						{
+							{ FILL_MODE_BLUE_RED_X, "x" },
+							{ FILL_MODE_BLUE_RED_Y, "y" },
+							{ FILL_MODE_BLUE_RED_Z, "z" },
+						};
+
+						auto otherParams = testParams;
+						otherParams.params.dst.image.fillMode = FILL_MODE_WHITE;
+
+						for (int i = 0; i < DE_LENGTH_OF_ARRAY(modeList); ++i)
+						{
+							otherParams.params.src.image.fillMode = modeList[i].mode;
+
+							otherParams.params.filter = VK_FILTER_LINEAR;
+							group->addChild(new BlitImageTestCase(testCtx, testName + "_linear_stripes_" + modeList[i].name, description, otherParams.params));
+
+							otherParams.params.filter = VK_FILTER_NEAREST;
+							group->addChild(new BlitImageTestCase(testCtx, testName + "_nearest_stripes_" + modeList[i].name, description, otherParams.params));
+						}
+					}
 				}
 			}
 		}
diff --git a/external/vulkancts/modules/vulkan/api/vktApiDescriptorPoolTests.cpp b/external/vulkancts/modules/vulkan/api/vktApiDescriptorPoolTests.cpp
index 96518db..c72254e 100644
--- a/external/vulkancts/modules/vulkan/api/vktApiDescriptorPoolTests.cpp
+++ b/external/vulkancts/modules/vulkan/api/vktApiDescriptorPoolTests.cpp
@@ -144,6 +144,7 @@
 
 			for (deUint32 ndx = 0; ndx < params.m_numIterations; ++ndx)
 			{
+				if (ndx % 1024 == 0) context.getTestContext().touchWatchdog();
 				// The test should crash in this loop at some point if there is a memory leak
 				VK_CHECK(vkd.allocateDescriptorSets(device, &descriptorSetInfo, &testSets[0]));
 				if (params.m_freeDescriptorSets)
diff --git a/external/vulkancts/modules/vulkan/api/vktApiDescriptorSetTests.cpp b/external/vulkancts/modules/vulkan/api/vktApiDescriptorSetTests.cpp
index 14c4ab8..ab9b977 100644
--- a/external/vulkancts/modules/vulkan/api/vktApiDescriptorSetTests.cpp
+++ b/external/vulkancts/modules/vulkan/api/vktApiDescriptorSetTests.cpp
@@ -21,12 +21,15 @@
  * \brief Descriptor set tests
  *//*--------------------------------------------------------------------*/
 
+#include "amber/vktAmberTestCase.hpp"
 #include "vktApiDescriptorSetTests.hpp"
 #include "vktTestCaseUtil.hpp"
 #include "vkCmdUtil.hpp"
 #include "vkMemUtil.hpp"
 #include "vktApiBufferComputeInstance.hpp"
 #include "vktApiComputeInstanceResultBuffer.hpp"
+#include "vkBufferWithMemory.hpp"
+#include "vkObjUtil.hpp"
 
 #include "vkQueryUtil.hpp"
 #include "vkRefUtil.hpp"
@@ -353,6 +356,246 @@
 	return tcu::TestStatus::pass("Pass");
 }
 
+tcu::TestStatus descriptorSetLayoutBindingOrderingTest (Context& context)
+{
+	/*
+		This test tests that if dstBinding has fewer than
+		descriptorCount array elements remaining starting from dstArrayElement,
+		then the remainder will be used to update the subsequent binding.
+	*/
+
+	const DeviceInterface&		vk					= context.getDeviceInterface();
+	const VkDevice				device				= context.getDevice();
+	deUint32					queueFamilyIndex	= context.getUniversalQueueFamilyIndex();
+	const VkQueue				queue				= context.getUniversalQueue();
+
+	const Unique<VkShaderModule> computeShaderModule (createShaderModule(vk, device, context.getBinaryCollection().get("compute"), 0));
+
+	de::MovePtr<BufferWithMemory> buffer;
+	buffer			= de::MovePtr<BufferWithMemory>(new BufferWithMemory(vk,
+																		device,
+																		context.getDefaultAllocator(),
+																		makeBufferCreateInfo(4u, VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT),
+																		MemoryRequirement::HostVisible));
+	deUint32 *bufferPtr = (deUint32 *)buffer->getAllocation().getHostPtr();
+	*bufferPtr = 5;
+
+	de::MovePtr<BufferWithMemory> resultBuffer;
+	resultBuffer	= de::MovePtr<BufferWithMemory>(new BufferWithMemory(vk,
+																		device,
+																		context.getDefaultAllocator(),
+																		makeBufferCreateInfo(4u * 3, VK_BUFFER_USAGE_STORAGE_BUFFER_BIT),
+																		MemoryRequirement::HostVisible));
+
+	const VkDescriptorBufferInfo	descriptorBufferInfos[]		=
+	{
+		{
+			buffer->get(),		// VkBuffer			buffer
+			0u,					// VkDeviceSize		offset
+			VK_WHOLE_SIZE		// VkDeviceSize		range
+		},
+		{
+			buffer->get(),		// VkBuffer			buffer
+			0u,					// VkDeviceSize		offset
+			VK_WHOLE_SIZE		// VkDeviceSize		range
+		},
+		{
+			buffer->get(),		// VkBuffer			buffer
+			0u,					// VkDeviceSize		offset
+			VK_WHOLE_SIZE		// VkDeviceSize		range
+		},
+	};
+
+	const VkDescriptorBufferInfo	descriptorBufferInfoResult	=
+	{
+		resultBuffer->get(),	// VkBuffer			buffer
+		0u,						// VkDeviceSize		offset
+		VK_WHOLE_SIZE			// VkDeviceSize		range
+	};
+
+	const VkDescriptorSetLayoutBinding layoutBindings[] =
+	{
+		{
+			0u,										// deUint32				binding;
+			VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER,		// VkDescriptorType		descriptorType;
+			2u,										// deUint32				descriptorCount;
+			VK_SHADER_STAGE_ALL,					// VkShaderStageFlags	stageFlags;
+			DE_NULL									// const VkSampler*		pImmutableSamplers;
+		},
+		{
+			1u,										// deUint32				binding;
+			VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER,		// VkDescriptorType		descriptorType;
+			1u,										// deUint32				descriptorCount;
+			VK_SHADER_STAGE_ALL,					// VkShaderStageFlags	stageFlags;
+			DE_NULL									// const VkSampler*		pImmutableSamplers;
+		},
+		{
+			2u,										// deUint32				binding;
+			VK_DESCRIPTOR_TYPE_STORAGE_BUFFER,		// VkDescriptorType		descriptorType;
+			1u,										// deUint32				descriptorCount;
+			VK_SHADER_STAGE_ALL,					// VkShaderStageFlags	stageFlags;
+			DE_NULL									// const VkSampler*		pImmutableSamplers;
+		}
+	};
+
+	const VkDescriptorSetLayoutCreateInfo	descriptorSetLayoutCreateInfo	=
+	{
+		VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO,	// VkStructureType							sType;
+		DE_NULL,												// const void*								pNext;
+		0u,														// VkDescriptorSetLayoutCreateFlags			flags;
+		DE_LENGTH_OF_ARRAY(layoutBindings),						// deUint32									bindingCount;
+		layoutBindings											// const VkDescriptorSetLayoutBinding*		pBindings;
+	};
+
+	Move<VkDescriptorSetLayout> descriptorSetLayout(createDescriptorSetLayout(vk, device, &descriptorSetLayoutCreateInfo));
+
+	const VkDescriptorPoolSize				poolSize[]						=
+	{
+		{
+			VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER,			// VkDescriptorType				type
+			3u											// uint32_t						descriptorCount
+		},
+		{
+			VK_DESCRIPTOR_TYPE_STORAGE_BUFFER,			// VkDescriptorType				type
+			1u											// uint32_t						descriptorCount
+		}
+	};
+
+	const VkDescriptorPoolCreateInfo		descriptorPoolCreateInfo		=
+	{
+		VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO,	// VkStructureType				sType
+		DE_NULL,										// const void*					pNext
+		0u,												// VkDescriptorPoolCreateFlags	flags
+		1u,												// uint32_t						maxSets
+		2u,												// uint32_t						poolSizeCount
+		poolSize										// const VkDescriptorPoolSize*	pPoolSizes
+	};
+
+	Move<VkDescriptorPool> descriptorPool(createDescriptorPool(vk, device, &descriptorPoolCreateInfo));
+
+	VkDescriptorSet descriptorSet;
+	{
+		const VkDescriptorSetAllocateInfo allocInfo =
+		{
+			VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO,		// VkStructure						sType
+			DE_NULL,											// const void*						pNext
+			*descriptorPool,									// VkDescriptorPool					descriptorPool
+			1u,													// uint32_t							descriptorSetCount
+			&*descriptorSetLayout								// const VkDescriptorSetLayout*		pSetLayouts
+		};
+
+		VK_CHECK(vk.allocateDescriptorSets(device, &allocInfo, &descriptorSet));
+	}
+
+	const VkWriteDescriptorSet				descriptorWrite			=
+	{
+		VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,					// VkStructureType					sType
+		DE_NULL,												// const void*						pNext
+		descriptorSet,											// VkDescriptorSet					dstSet
+		0u,														// deUint32							dstBinding
+		0u,														// deUint32							dstArrayElement
+		3u,														// deUint32							descriptorCount
+		VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER,						// VkDescriptorType					descriptorType
+		DE_NULL,												// const VkDescriptorImageInfo		pImageInfo
+		descriptorBufferInfos,									// const VkDescriptorBufferInfo*	pBufferInfo
+		DE_NULL													// const VkBufferView*				pTexelBufferView
+	};
+
+	const VkWriteDescriptorSet				descriptorWriteResult	=
+	{
+		VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,					// VkStructureType					sType
+		DE_NULL,												// const void*						pNext
+		descriptorSet,											// VkDescriptorSet					dstSet
+		2u,														// deUint32							dstBinding
+		0u,														// deUint32							dstArrayElement
+		1u,														// deUint32							descriptorCount
+		VK_DESCRIPTOR_TYPE_STORAGE_BUFFER,						// VkDescriptorType					descriptorType
+		DE_NULL,												// const VkDescriptorImageInfo		pImageInfo
+		&descriptorBufferInfoResult,							// const VkDescriptorBufferInfo*	pBufferInfo
+		DE_NULL													// const VkBufferView*				pTexelBufferView
+	};
+
+	const VkCommandPoolCreateInfo			cmdPoolInfo				=
+	{
+		VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO,				// VkStructureType					Stype
+		DE_NULL,												// const void*						PNext
+		DE_NULL,												// VkCommandPoolCreateFlags			flags
+		queueFamilyIndex,										// uint32_t							queuefamilyindex
+	};
+
+	const Unique<VkCommandPool>				cmdPool(createCommandPool(vk, device, &cmdPoolInfo));
+
+	const VkCommandBufferAllocateInfo		cmdBufParams			=
+	{
+		VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO,			// VkStructureType					sType;
+		DE_NULL,												// const void*						pNext;
+		*cmdPool,												// VkCommandPool					pool;
+		VK_COMMAND_BUFFER_LEVEL_PRIMARY,						// VkCommandBufferLevel				level;
+		1u,														// uint32_t							bufferCount;
+	};
+
+	const Unique<VkCommandBuffer>			cmdBuf(allocateCommandBuffer(vk, device, &cmdBufParams));
+
+	const VkPipelineLayoutCreateInfo pipelineLayoutCreateInfo =
+	{
+		VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO,			// VkStructureType					sType
+		DE_NULL,												// const void*						pNext
+		0,														// VkPipelineLayoutCreateFlags		flags
+		1u,														// uint32_t							setLayoutCount
+		&*descriptorSetLayout,									// const VkDescriptorSetLayout*		pSetLayouts
+		0u,														// uint32_t							pushConstantRangeCount
+		nullptr													// const VkPushConstantRange*		pPushConstantRanges
+	};
+
+	Move<VkPipelineLayout> pipelineLayout(createPipelineLayout(vk, device, &pipelineLayoutCreateInfo));
+
+	const VkPipelineShaderStageCreateInfo	shaderStageCreateInfo		=
+	{
+		VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO,	// VkStructureType					sType;
+		DE_NULL,												// const void*						pNext;
+		(VkPipelineShaderStageCreateFlags)0,					// VkPipelineShaderStageCreateFlags	flags;
+		VK_SHADER_STAGE_COMPUTE_BIT,							// VkShaderStageFlagBits			stage;
+		computeShaderModule.get(),								// VkShaderModule					shader;
+		"main",													// const char*						pName;
+		DE_NULL													// const VkSpecializationInfo*		pSpecializationInfo;
+	};
+
+	const VkComputePipelineCreateInfo		computePipelineCreateInfo	=
+	{
+		VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO,			// VkStructureType					sType
+		DE_NULL,												// const void*						pNext
+		(VkPipelineCreateFlags)0,								// VkPipelineCreateFlags			flags
+		shaderStageCreateInfo,									// VkPipelineShaderStageCreateInfo	stage
+		*pipelineLayout,										// VkPipelineLayout					layout
+		DE_NULL,												// VkPipeline						basePipelineHandle
+		0														// int								basePipelineIndex
+	};
+
+	Unique<VkPipeline> computePipeline(createComputePipeline(vk, device, DE_NULL, &computePipelineCreateInfo));
+
+	beginCommandBuffer(vk, *cmdBuf, 0u);
+	{
+		vk.cmdBindPipeline(*cmdBuf, VK_PIPELINE_BIND_POINT_COMPUTE, *computePipeline);
+		vk.updateDescriptorSets(device, 1u, &descriptorWrite, 0u, DE_NULL);
+		vk.updateDescriptorSets(device, 1u, &descriptorWriteResult, 0u, DE_NULL);
+		vk.cmdBindDescriptorSets(*cmdBuf, VK_PIPELINE_BIND_POINT_COMPUTE, *pipelineLayout, 0, 1u, &descriptorSet, 0, nullptr);
+		flushAlloc(vk, device, buffer->getAllocation());
+		vk.cmdDispatch(*cmdBuf, 1u, 1u, 1u);
+	}
+
+	endCommandBuffer(vk, *cmdBuf);
+	submitCommandsAndWait(vk, device, queue, *cmdBuf);
+
+	const Allocation& bufferAllocationResult = resultBuffer->getAllocation();
+	invalidateAlloc(vk, device, bufferAllocationResult);
+
+	const deUint32* resultPtr = static_cast<deUint32*>(bufferAllocationResult.getHostPtr());
+
+	if (resultPtr[0] == 5 && resultPtr[1] == 5 && resultPtr[2] == 5)
+		return tcu::TestStatus::pass("Pass");
+	else
+		return tcu::TestStatus::fail("Fail");
+}
 } // anonymous
 
 void createDescriptorSetLayoutLifetimeGraphicsSource (SourceCollections& dst)
@@ -375,6 +618,31 @@
 		"}\n");
 }
 
+void createDescriptorSetLayoutBindingOrderingSource (SourceCollections& dst)
+{
+	dst.glslSources.add("compute") << glu::ComputeSource(
+		"#version 310 es\n"
+		"layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;\n"
+		"layout (set = 0, binding = 0) uniform UniformBuffer0 {\n"
+		"	int data;\n"
+		"} uniformbufferarray[2];\n"
+		"layout (set = 0, binding = 1) uniform UniformBuffer2 {\n"
+		"	int data;\n"
+		"} uniformbuffer2;\n"
+		"layout (set = 0, binding = 2) buffer StorageBuffer {\n"
+		"	int result0;\n"
+		"	int result1;\n"
+		"	int result2;\n"
+		"} results;\n"
+		"\n"
+		"void main (void)\n"
+		"{\n"
+		"	results.result0 = uniformbufferarray[0].data;\n"
+		"	results.result1 = uniformbufferarray[1].data;\n"
+		"	results.result2 = uniformbuffer2.data;\n"
+		"}\n");
+}
+
 tcu::TestCaseGroup* createDescriptorSetLayoutLifetimeTests (tcu::TestContext& testCtx)
 {
 	de::MovePtr<tcu::TestCaseGroup> descriptorSetLayoutLifetimeTests(new tcu::TestCaseGroup(testCtx, "descriptor_set_layout_lifetime", "Descriptor set layout lifetime tests"));
@@ -395,6 +663,17 @@
 	return emptyDescriptorSetLayoutTests.release();
 }
 
+tcu::TestCaseGroup* createDescriptorSetLayoutBindingOrderingTests (tcu::TestContext& testCtx)
+{
+	de::MovePtr<tcu::TestCaseGroup> descriptorSetLayoutBindingOrderingTests(new tcu::TestCaseGroup(testCtx, "descriptor_set_layout_binding", "Create descriptor set layout ordering tests"));
+	addFunctionCaseWithPrograms(descriptorSetLayoutBindingOrderingTests.get(), "update_subsequent_binding", "Test subsequent binding update with remaining elements", createDescriptorSetLayoutBindingOrderingSource, descriptorSetLayoutBindingOrderingTest);
+
+	static const char dataDir[] = "api/descriptor_set/descriptor_set_layout_binding";
+	descriptorSetLayoutBindingOrderingTests->addChild(cts_amber::createAmberTestCase(testCtx, "layout_binding_order", "Test descriptor set layout binding order", dataDir, "layout_binding_order.amber"));
+
+	return descriptorSetLayoutBindingOrderingTests.release();
+}
+
 tcu::TestCaseGroup* createDescriptorSetLayoutTests (tcu::TestContext& testCtx)
 {
 	de::MovePtr<tcu::TestCaseGroup> descriptorSetLayoutTests(new tcu::TestCaseGroup(testCtx, "descriptor_set_layout", "Descriptor set layout tests"));
@@ -410,6 +689,7 @@
 
 	descriptorSetTests->addChild(createDescriptorSetLayoutLifetimeTests(testCtx));
 	descriptorSetTests->addChild(createDescriptorSetLayoutTests(testCtx));
+	descriptorSetTests->addChild(createDescriptorSetLayoutBindingOrderingTests(testCtx));
 
 	return descriptorSetTests.release();
 }
diff --git a/external/vulkancts/modules/vulkan/api/vktApiDriverPropertiesTests.cpp b/external/vulkancts/modules/vulkan/api/vktApiDriverPropertiesTests.cpp
index 0149a22..c180ed5 100644
--- a/external/vulkancts/modules/vulkan/api/vktApiDriverPropertiesTests.cpp
+++ b/external/vulkancts/modules/vulkan/api/vktApiDriverPropertiesTests.cpp
@@ -49,6 +49,9 @@
 
 static const VkConformanceVersionKHR knownConformanceVersions[] =
 {
+	makeConformanceVersion(1, 2, 6, 2),
+	makeConformanceVersion(1, 2, 6, 1),
+	makeConformanceVersion(1, 2, 6, 0),
 	makeConformanceVersion(1, 2, 5, 2),
 	makeConformanceVersion(1, 2, 5, 1),
 	makeConformanceVersion(1, 2, 5, 0),
@@ -134,8 +137,8 @@
 
 void testVersion (const VkPhysicalDeviceDriverPropertiesKHR& deviceDriverProperties, deUint32 usedApiVersion)
 {
-	const deUint32 apiMajorVersion = VK_VERSION_MAJOR(usedApiVersion);
-	const deUint32 apiMinorVersion = VK_VERSION_MINOR(usedApiVersion);
+	const deUint32 apiMajorVersion = VK_API_VERSION_MAJOR(usedApiVersion);
+	const deUint32 apiMinorVersion = VK_API_VERSION_MINOR(usedApiVersion);
 
 	if (deviceDriverProperties.conformanceVersion.major < apiMajorVersion ||
 		(deviceDriverProperties.conformanceVersion.major == apiMajorVersion &&
diff --git a/external/vulkancts/modules/vulkan/api/vktApiExternalMemoryTests.cpp b/external/vulkancts/modules/vulkan/api/vktApiExternalMemoryTests.cpp
index 61c566c..ec295e4 100644
--- a/external/vulkancts/modules/vulkan/api/vktApiExternalMemoryTests.cpp
+++ b/external/vulkancts/modules/vulkan/api/vktApiExternalMemoryTests.cpp
@@ -3926,6 +3926,20 @@
 
 	return tcu::TestStatus::pass("Pass");
 }
+
+template<class TestConfig> void checkEvent (Context& context, const TestConfig)
+{
+	if (context.isDeviceFunctionalitySupported("VK_KHR_portability_subset") && !context.getPortabilitySubsetFeatures().events)
+		TCU_THROW(NotSupportedError, "VK_KHR_portability_subset: Events are not supported by this implementation");
+}
+
+template<class TestConfig> void checkSupport (Context& context, const TestConfig config)
+{
+	const Transference transference (getHandelTypeTransferences(config.externalType));
+	if (transference == TRANSFERENCE_COPY)
+		checkEvent(context, config);
+}
+
 de::MovePtr<tcu::TestCaseGroup> createFenceTests (tcu::TestContext& testCtx, vk::VkExternalFenceHandleTypeFlagBits externalType)
 {
 	const struct
@@ -3957,13 +3971,13 @@
 			addFunctionCase(fenceGroup.get(), std::string("create_win32_") + permanenceName,	"Test creating fence with win32 properties.",	testFenceWin32Create,	config);
 		}
 
-		addFunctionCase(fenceGroup.get(), std::string("import_twice_") + permanenceName,				"Test importing fence twice.",											testFenceImportTwice,				config);
-		addFunctionCase(fenceGroup.get(), std::string("reimport_") + permanenceName,					"Test importing again over previously imported fence.",					testFenceImportReimport,			config);
-		addFunctionCase(fenceGroup.get(), std::string("import_multiple_times_") + permanenceName,		"Test importing fence multiple times.",									testFenceMultipleImports,			config);
-		addFunctionCase(fenceGroup.get(), std::string("signal_export_import_wait_") + permanenceName,	"Test signaling, exporting, importing and waiting for the sempahore.",	testFenceSignalExportImportWait,	config);
-		addFunctionCase(fenceGroup.get(), std::string("signal_import_") + permanenceName,				"Test signaling and importing the fence.",								testFenceSignalImport,				config);
-		addFunctionCase(fenceGroup.get(), std::string("reset_") + permanenceName,						"Test resetting the fence.",											testFenceReset,						config);
-		addFunctionCase(fenceGroup.get(), std::string("transference_") + permanenceName,				"Test fences transference.",											testFenceTransference,				config);
+		addFunctionCase(fenceGroup.get(), std::string("import_twice_") + permanenceName,				"Test importing fence twice.",											checkSupport,	testFenceImportTwice,				config);
+		addFunctionCase(fenceGroup.get(), std::string("reimport_") + permanenceName,					"Test importing again over previously imported fence.",					checkSupport,	testFenceImportReimport,			config);
+		addFunctionCase(fenceGroup.get(), std::string("import_multiple_times_") + permanenceName,		"Test importing fence multiple times.",									checkSupport,	testFenceMultipleImports,			config);
+		addFunctionCase(fenceGroup.get(), std::string("signal_export_import_wait_") + permanenceName,	"Test signaling, exporting, importing and waiting for the sempahore.",	checkEvent,		testFenceSignalExportImportWait,	config);
+		addFunctionCase(fenceGroup.get(), std::string("signal_import_") + permanenceName,				"Test signaling and importing the fence.",								checkSupport,	testFenceSignalImport,				config);
+		addFunctionCase(fenceGroup.get(), std::string("reset_") + permanenceName,						"Test resetting the fence.",											checkEvent,		testFenceReset,						config);
+		addFunctionCase(fenceGroup.get(), std::string("transference_") + permanenceName,				"Test fences transference.",											checkEvent,		testFenceTransference,				config);
 
 		if (externalType == vk::VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT)
 		{
@@ -3974,12 +3988,12 @@
 			|| externalType == vk::VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT)
 		{
 			// \note Not supported on WIN32 handles
-			addFunctionCase(fenceGroup.get(), std::string("export_multiple_times_") + permanenceName,	"Test exporting fence multiple times.",		testFenceMultipleExports,	config);
+			addFunctionCase(fenceGroup.get(), std::string("export_multiple_times_") + permanenceName,	"Test exporting fence multiple times.",		checkSupport,	testFenceMultipleExports,	config);
 
-			addFunctionCase(fenceGroup.get(), std::string("dup_") + permanenceName,						"Test calling dup() on exported fence.",	testFenceFdDup,				config);
-			addFunctionCase(fenceGroup.get(), std::string("dup2_") + permanenceName,					"Test calling dup2() on exported fence.",	testFenceFdDup2,			config);
-			addFunctionCase(fenceGroup.get(), std::string("dup3_") + permanenceName,					"Test calling dup3() on exported fence.",	testFenceFdDup3,			config);
-			addFunctionCase(fenceGroup.get(), std::string("send_over_socket_") + permanenceName,		"Test sending fence fd over socket.",		testFenceFdSendOverSocket,	config);
+			addFunctionCase(fenceGroup.get(), std::string("dup_") + permanenceName,						"Test calling dup() on exported fence.",	checkSupport,	testFenceFdDup,				config);
+			addFunctionCase(fenceGroup.get(), std::string("dup2_") + permanenceName,					"Test calling dup2() on exported fence.",	checkSupport,	testFenceFdDup2,			config);
+			addFunctionCase(fenceGroup.get(), std::string("dup3_") + permanenceName,					"Test calling dup3() on exported fence.",	checkSupport,	testFenceFdDup3,			config);
+			addFunctionCase(fenceGroup.get(), std::string("send_over_socket_") + permanenceName,		"Test sending fence fd over socket.",		checkSupport,	testFenceFdSendOverSocket,	config);
 		}
 
 		if (getHandelTypeTransferences(externalType) == TRANSFERENCE_REFERENCE)
@@ -4327,12 +4341,12 @@
 			addFunctionCase(semaphoreGroup.get(), std::string("create_win32_") + permanenceName,	"Test creating semaphore with win32 properties.",	testSemaphoreWin32Create,	config);
 		}
 
-		addFunctionCase(semaphoreGroup.get(), std::string("import_twice_") + permanenceName,				"Test importing semaphore twice.",										testSemaphoreImportTwice,				config);
-		addFunctionCase(semaphoreGroup.get(), std::string("reimport_") + permanenceName,					"Test importing again over previously imported semaphore.",				testSemaphoreImportReimport,			config);
-		addFunctionCase(semaphoreGroup.get(), std::string("import_multiple_times_") + permanenceName,		"Test importing semaphore multiple times.",								testSemaphoreMultipleImports,			config);
-		addFunctionCase(semaphoreGroup.get(), std::string("signal_export_import_wait_") + permanenceName,	"Test signaling, exporting, importing and waiting for the sempahore.",	testSemaphoreSignalExportImportWait,	config);
-		addFunctionCase(semaphoreGroup.get(), std::string("signal_import_") + permanenceName,				"Test signaling and importing the semaphore.",							testSemaphoreSignalImport,				config);
-		addFunctionCase(semaphoreGroup.get(), std::string("transference_") + permanenceName,				"Test semaphores transference.",										testSemaphoreTransference,				config);
+		addFunctionCase(semaphoreGroup.get(), std::string("import_twice_") + permanenceName,				"Test importing semaphore twice.",										checkSupport,	testSemaphoreImportTwice,				config);
+		addFunctionCase(semaphoreGroup.get(), std::string("reimport_") + permanenceName,					"Test importing again over previously imported semaphore.",				checkSupport,	testSemaphoreImportReimport,			config);
+		addFunctionCase(semaphoreGroup.get(), std::string("import_multiple_times_") + permanenceName,		"Test importing semaphore multiple times.",								checkSupport,	testSemaphoreMultipleImports,			config);
+		addFunctionCase(semaphoreGroup.get(), std::string("signal_export_import_wait_") + permanenceName,	"Test signaling, exporting, importing and waiting for the sempahore.",	checkEvent,		testSemaphoreSignalExportImportWait,	config);
+		addFunctionCase(semaphoreGroup.get(), std::string("signal_import_") + permanenceName,				"Test signaling and importing the semaphore.",							checkSupport,	testSemaphoreSignalImport,				config);
+		addFunctionCase(semaphoreGroup.get(), std::string("transference_") + permanenceName,				"Test semaphores transference.",										checkEvent,		testSemaphoreTransference,				config);
 
 		if (externalType == vk::VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT)
 		{
@@ -4344,19 +4358,19 @@
 			|| externalType == vk::VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT)
 		{
 			// \note Not supported on WIN32 handles
-			addFunctionCase(semaphoreGroup.get(), std::string("export_multiple_times_") + permanenceName,	"Test exporting semaphore multiple times.",		testSemaphoreMultipleExports,	config);
+			addFunctionCase(semaphoreGroup.get(), std::string("export_multiple_times_") + permanenceName,	"Test exporting semaphore multiple times.",		checkSupport,	testSemaphoreMultipleExports,	config);
 
-			addFunctionCase(semaphoreGroup.get(), std::string("dup_") + permanenceName,						"Test calling dup() on exported semaphore.",	testSemaphoreFdDup,				config);
-			addFunctionCase(semaphoreGroup.get(), std::string("dup2_") + permanenceName,					"Test calling dup2() on exported semaphore.",	testSemaphoreFdDup2,			config);
-			addFunctionCase(semaphoreGroup.get(), std::string("dup3_") + permanenceName,					"Test calling dup3() on exported semaphore.",	testSemaphoreFdDup3,			config);
-			addFunctionCase(semaphoreGroup.get(), std::string("send_over_socket_") + permanenceName,		"Test sending semaphore fd over socket.",		testSemaphoreFdSendOverSocket,	config);
+			addFunctionCase(semaphoreGroup.get(), std::string("dup_") + permanenceName,						"Test calling dup() on exported semaphore.",	checkSupport,	testSemaphoreFdDup,				config);
+			addFunctionCase(semaphoreGroup.get(), std::string("dup2_") + permanenceName,					"Test calling dup2() on exported semaphore.",	checkSupport,	testSemaphoreFdDup2,			config);
+			addFunctionCase(semaphoreGroup.get(), std::string("dup3_") + permanenceName,					"Test calling dup3() on exported semaphore.",	checkSupport,	testSemaphoreFdDup3,			config);
+			addFunctionCase(semaphoreGroup.get(), std::string("send_over_socket_") + permanenceName,		"Test sending semaphore fd over socket.",		checkSupport,	testSemaphoreFdSendOverSocket,	config);
 		}
 
 		if (getHandelTypeTransferences(externalType) == TRANSFERENCE_REFERENCE)
 		{
 			addFunctionCase(semaphoreGroup.get(), std::string("signal_wait_import_") + permanenceName,			"Test signaling and then waiting for the the sepmahore.",				testSemaphoreSignalWaitImport,			config);
 			addFunctionCase(semaphoreGroup.get(), std::string("export_signal_import_wait_") + permanenceName,	"Test exporting, signaling, importing and waiting for the semaphore.",	testSemaphoreExportSignalImportWait,	config);
-			addFunctionCase(semaphoreGroup.get(), std::string("export_import_signal_wait_") + permanenceName,	"Test exporting, importing, signaling and waiting for the semaphore.",	testSemaphoreExportImportSignalWait,	config);
+			addFunctionCase(semaphoreGroup.get(), std::string("export_import_signal_wait_") + permanenceName,	"Test exporting, importing, signaling and waiting for the semaphore.",	checkEvent,		testSemaphoreExportImportSignalWait,	config);
 		}
 	}
 
diff --git a/external/vulkancts/modules/vulkan/api/vktApiFeatureInfo.cpp b/external/vulkancts/modules/vulkan/api/vktApiFeatureInfo.cpp
index 9343a70..bc5e011 100644
--- a/external/vulkancts/modules/vulkan/api/vktApiFeatureInfo.cpp
+++ b/external/vulkancts/modules/vulkan/api/vktApiFeatureInfo.cpp
@@ -1510,9 +1510,10 @@
 		TCU_THROW(NotSupportedError, "At least Vulkan 1.2 required to run test");
 }
 
-void createDevice (Context& context, void* pNext, const char* const* ppEnabledExtensionNames, deUint32 enabledExtensionCount)
+void createTestDevice (Context& context, void* pNext, const char* const* ppEnabledExtensionNames, deUint32 enabledExtensionCount)
 {
 	const PlatformInterface&				platformInterface		= context.getPlatformInterface();
+	const auto								validationEnabled		= context.getTestContext().getCommandLine().isValidationEnabled();
 	const Unique<VkInstance>				instance				(createDefaultInstance(platformInterface, context.getUsedApiVersion()));
 	const InstanceDriver					instanceDriver			(platformInterface, instance.get());
 	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance.get(), context.getTestContext().getCommandLine());
@@ -1543,7 +1544,7 @@
 		ppEnabledExtensionNames,					//  const char* const*				ppEnabledExtensionNames;
 		DE_NULL,									//  const VkPhysicalDeviceFeatures*	pEnabledFeatures;
 	};
-	const Unique<VkDevice>					device					(createDevice(platformInterface, *instance, instanceDriver, physicalDevice, &deviceCreateInfo));
+	const Unique<VkDevice>					device					(createCustomDevice(validationEnabled, platformInterface, *instance, instanceDriver, physicalDevice, &deviceCreateInfo));
 	const DeviceDriver						deviceDriver			(platformInterface, instance.get(), device.get());
 	const VkQueue							queue					= getDeviceQueue(deviceDriver, *device,  queueFamilyIndex, queueIndex);
 
@@ -1747,7 +1748,7 @@
 					if (featureDependencyTable[featureDependencyTableNdx].featurePtr == featurePtr)
 						featureDependencyTable[featureDependencyTableNdx].dependOnPtr[0] = DE_TRUE;
 
-				createDevice(context, &features2, DE_NULL, 0u);
+				createTestDevice(context, &features2, DE_NULL, 0u);
 			}
 		}
 
@@ -1782,7 +1783,7 @@
 						if (featureDependencyTable[featureDependencyTableNdx].featurePtr == featurePtr)
 							featureDependencyTable[featureDependencyTableNdx].dependOnPtr[0] = DE_TRUE;
 
-					createDevice(context, &features2, &extStringPtr, (extStringPtr == DE_NULL) ? 0u : 1u );
+					createTestDevice(context, &features2, &extStringPtr, (extStringPtr == DE_NULL) ? 0u : 1u );
 				}
 			}
 		}
@@ -3555,10 +3556,13 @@
 	} s_formatRanges[] =
 	{
 		// core formats
-		{ (VkFormat)(VK_FORMAT_UNDEFINED+1),	VK_CORE_FORMAT_LAST										},
+		{ (VkFormat)(VK_FORMAT_UNDEFINED+1),		VK_CORE_FORMAT_LAST										},
 
 		// YCbCr formats
-		{ VK_FORMAT_G8B8G8R8_422_UNORM,			(VkFormat)(VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM+1)	},
+		{ VK_FORMAT_G8B8G8R8_422_UNORM,				(VkFormat)(VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM+1)	},
+
+		// YCbCr extended formats
+		{ VK_FORMAT_G8_B8R8_2PLANE_444_UNORM_EXT,	(VkFormat)(VK_FORMAT_G16_B16R16_2PLANE_444_UNORM_EXT+1)	},
 	};
 
 	for (int rangeNdx = 0; rangeNdx < DE_LENGTH_OF_ARRAY(s_formatRanges); ++rangeNdx)
@@ -4085,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)
 	{
@@ -4111,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];
@@ -4143,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];
 
@@ -4172,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 )
 	{
@@ -4307,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];
@@ -5450,10 +5497,13 @@
 	} s_formatRanges[] =
 	{
 		// core formats
-		{ (VkFormat)(VK_FORMAT_UNDEFINED + 1),	VK_CORE_FORMAT_LAST,										params },
+		{ (VkFormat)(VK_FORMAT_UNDEFINED + 1),		VK_CORE_FORMAT_LAST,										params },
 
 		// YCbCr formats
-		{ VK_FORMAT_G8B8G8R8_422_UNORM_KHR,		(VkFormat)(VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM_KHR + 1),	params }
+		{ VK_FORMAT_G8B8G8R8_422_UNORM_KHR,			(VkFormat)(VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM_KHR + 1),	params },
+
+		// YCbCr extended formats
+		{ VK_FORMAT_G8_B8R8_2PLANE_444_UNORM_EXT,	(VkFormat)(VK_FORMAT_G16_B16R16_2PLANE_444_UNORM_EXT+1),	params },
 	};
 
 	for (int rangeNdx = 0; rangeNdx < DE_LENGTH_OF_ARRAY(s_formatRanges); ++rangeNdx)
diff --git a/external/vulkancts/modules/vulkan/api/vktApiImageClearingTests.cpp b/external/vulkancts/modules/vulkan/api/vktApiImageClearingTests.cpp
index 55d2d5c..005a895 100644
--- a/external/vulkancts/modules/vulkan/api/vktApiImageClearingTests.cpp
+++ b/external/vulkancts/modules/vulkan/api/vktApiImageClearingTests.cpp
@@ -1548,8 +1548,16 @@
 
 	m_vkd.cmdClearDepthStencilImage(*m_commandBuffer, *m_image, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, &m_params.clearValue[0].depthStencil, 1, &subresourceRange);
 
-	if (m_twoStep)
+	if (m_twoStep) {
+		pipelineImageBarrier(VK_PIPELINE_STAGE_TRANSFER_BIT,				// VkPipelineStageFlags		srcStageMask
+							 VK_PIPELINE_STAGE_TRANSFER_BIT,				// VkPipelineStageFlags		dstStageMask
+							 VK_ACCESS_TRANSFER_WRITE_BIT,					// VkAccessFlags			srcAccessMask
+							 VK_ACCESS_TRANSFER_WRITE_BIT,					// VkAccessFlags			dstAccessMask
+							 VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,			// VkImageLayout			oldLayout;
+							 VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL);			// VkImageLayout			newLayout;
+
 		m_vkd.cmdClearDepthStencilImage(*m_commandBuffer, *m_image, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, &m_params.clearValue[0].depthStencil, 1, &steptwoRange);
+    }
 
 	pipelineImageBarrier(VK_PIPELINE_STAGE_TRANSFER_BIT,					// VkPipelineStageFlags		srcStageMask
 						 VK_PIPELINE_STAGE_TRANSFER_BIT,					// VkPipelineStageFlags		dstStageMask
diff --git a/external/vulkancts/modules/vulkan/api/vktApiMemoryRequirementInvarianceTests.cpp b/external/vulkancts/modules/vulkan/api/vktApiMemoryRequirementInvarianceTests.cpp
index 36c3fff..479e28a 100644
--- a/external/vulkancts/modules/vulkan/api/vktApiMemoryRequirementInvarianceTests.cpp
+++ b/external/vulkancts/modules/vulkan/api/vktApiMemoryRequirementInvarianceTests.cpp
@@ -256,6 +256,7 @@
 	bool									success							= true;
 	const deBool							isDedicatedAllocationSupported	= m_context.isDeviceFunctionalitySupported("VK_KHR_dedicated_allocation");
 	const deBool							isYcbcrSupported				= m_context.isDeviceFunctionalitySupported("VK_KHR_sampler_ycbcr_conversion");
+	const deBool							isYcbcrExtensionSupported		= m_context.isDeviceFunctionalitySupported("VK_EXT_ycbcr_2plane_444_formats");
 	std::vector<int>						optimalFormats;
 	std::vector<int>						linearFormats;
 	std::vector<int>						memoryTypes;
@@ -492,16 +493,22 @@
 		VK_FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG,
 		VK_FORMAT_A4R4G4B4_UNORM_PACK16_EXT,
 		VK_FORMAT_A4B4G4R4_UNORM_PACK16_EXT,
+		VK_FORMAT_G8_B8R8_2PLANE_444_UNORM_EXT,
+		VK_FORMAT_G10X6_B10X6R10X6_2PLANE_444_UNORM_3PACK16_EXT,
+		VK_FORMAT_G12X4_B12X4R12X4_2PLANE_444_UNORM_3PACK16_EXT,
+		VK_FORMAT_G16_B16R16_2PLANE_444_UNORM_EXT,
 	};
 	int										formatCount						= (int)(sizeof(formatlist) / sizeof(unsigned int));
 
-	// If ycbcr is not supported, only use the standard texture formats
-	if (!isYcbcrSupported)
-		formatCount = 184;
-
 	// Find supported image formats
 	for (int i = 0; i < formatCount; i++)
 	{
+		if (isYCbCrFormat((VkFormat)formatlist[i]) && !isYcbcrSupported)
+			continue;
+
+		if (isYCbCrExtensionFormat((VkFormat)formatlist[i]) && !isYcbcrExtensionSupported)
+			continue;
+
 		vk::VkImageFormatProperties imageformatprops;
 
 		// Check for support in linear tiling mode
diff --git a/external/vulkancts/modules/vulkan/api/vktApiNullHandleTests.cpp b/external/vulkancts/modules/vulkan/api/vktApiNullHandleTests.cpp
index 609106e..99d5b7d 100644
--- a/external/vulkancts/modules/vulkan/api/vktApiNullHandleTests.cpp
+++ b/external/vulkancts/modules/vulkan/api/vktApiNullHandleTests.cpp
@@ -265,6 +265,12 @@
 	}
 }
 
+void checkEventSupport (Context& context)
+{
+	if (context.isDeviceFunctionalitySupported("VK_KHR_portability_subset") && !context.getPortabilitySubsetFeatures().events)
+		TCU_THROW(NotSupportedError, "VK_KHR_portability_subset: Events are not supported by this implementation");
+}
+
 void addTestsToGroup (tcu::TestCaseGroup* group)
 {
 	addFunctionCase(group,	"destroy_buffer",					"",		test<VkBuffer>);
@@ -273,7 +279,7 @@
 	addFunctionCase(group,	"destroy_descriptor_pool",			"",		test<VkDescriptorPool>);
 	addFunctionCase(group,	"destroy_descriptor_set_layout",	"",		test<VkDescriptorSetLayout>);
 	addFunctionCase(group,	"destroy_device",					"",		test<VkDevice>);
-	addFunctionCase(group,	"destroy_event",					"",		test<VkEvent>);
+	addFunctionCase(group,	"destroy_event",					"",		checkEventSupport, test<VkEvent>);
 	addFunctionCase(group,	"destroy_fence",					"",		test<VkFence>);
 	addFunctionCase(group,	"destroy_framebuffer",				"",		test<VkFramebuffer>);
 	addFunctionCase(group,	"destroy_image",					"",		test<VkImage>);
diff --git a/external/vulkancts/modules/vulkan/api/vktApiObjectManagementTests.cpp b/external/vulkancts/modules/vulkan/api/vktApiObjectManagementTests.cpp
index fdd6bb8..0f5a6d7 100644
--- a/external/vulkancts/modules/vulkan/api/vktApiObjectManagementTests.cpp
+++ b/external/vulkancts/modules/vulkan/api/vktApiObjectManagementTests.cpp
@@ -3090,6 +3090,20 @@
 		addFunctionCase(group, cur->name, "", cases.function, cur->parameters);
 }
 
+void checkEventSupport (Context& context, const Event::Parameters)
+{
+	if (context.isDeviceFunctionalitySupported("VK_KHR_portability_subset") && !context.getPortabilitySubsetFeatures().events)
+		TCU_THROW(NotSupportedError, "VK_KHR_portability_subset: Events are not supported by this implementation");
+}
+
+// specialization for Event
+template<>
+void addCases (tcu::TestCaseGroup* group, const CaseDescription<Event>& cases)
+{
+	for (const NamedParameters<Event>* cur = cases.paramsBegin; cur != cases.paramsEnd; ++cur)
+		addFunctionCase(group, cur->name, "", checkEventSupport, cases.function, cur->parameters);
+}
+
 template<typename Object>
 void addCasesWithProgs (tcu::TestCaseGroup *group, const CaseDescription<Object>& cases)
 {
diff --git a/external/vulkancts/modules/vulkan/binding_model/vktBindingDescriptorSetRandomTests.cpp b/external/vulkancts/modules/vulkan/binding_model/vktBindingDescriptorSetRandomTests.cpp
index 819b836..6893334 100644
--- a/external/vulkancts/modules/vulkan/binding_model/vktBindingDescriptorSetRandomTests.cpp
+++ b/external/vulkancts/modules/vulkan/binding_model/vktBindingDescriptorSetRandomTests.cpp
@@ -397,12 +397,16 @@
 
 void chooseWritesRandomly(vk::VkDescriptorType type, RandomLayout& randomLayout, deRandom& rnd, deUint32 set, deUint32 binding, deUint32 count)
 {
+	// Make sure the type supports writes.
 	switch (type)
 	{
+	case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER:
+	case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC:
 	case VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER:
-		// Disable writes for these descriptor types.
-		return;
+	case VK_DESCRIPTOR_TYPE_STORAGE_IMAGE:
+		break;
 	default:
+		DE_ASSERT(false);
 		break;
 	}
 
@@ -894,16 +898,9 @@
 								break;
 							default: DE_ASSERT(0);
 							}
-							if (m_data.indexType == INDEX_TYPE_DEPENDENT || m_data.indexType == INDEX_TYPE_RUNTIME_SIZE)
-							{
-								// Set accum to zero, it is added to the next index.
-								checks << "  accum = temp - " << descriptor << ";\n";
-							}
-							else
-							{
-								// Accumulate any incorrect values.
-								checks << "  accum |= temp - " << descriptor << ";\n";
-							}
+
+							// Accumulate any incorrect values.
+							checks << "  accum |= temp - " << descriptor << ";\n";
 						}
 						else
 						{
@@ -1777,7 +1774,7 @@
 
 					vk.cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, (VkDependencyFlags)0, 0, (const VkMemoryBarrier*)DE_NULL, 0, (const VkBufferMemoryBarrier*)DE_NULL, 1, &preStorageImageBarrier);
 					vk.cmdClearColorImage(*cmdBuffer, img, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, &clearValue, 1, &clearRange);
-					vk.cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, m_data.allShaderStages, (VkDependencyFlags)0, 0, (const VkMemoryBarrier*)DE_NULL, 0, (const VkBufferMemoryBarrier*)DE_NULL, 1, &postStorageImageBarrier);
+					vk.cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, m_data.allPipelineStages, (VkDependencyFlags)0, 0, (const VkMemoryBarrier*)DE_NULL, 0, (const VkBufferMemoryBarrier*)DE_NULL, 1, &postStorageImageBarrier);
 
 					++storageImgIndex;
 				}
@@ -2449,9 +2446,9 @@
 			VK_SUBPASS_EXTERNAL,							// deUint32				srcSubpass
 			0,												// deUint32				dstSubpass
 			VK_PIPELINE_STAGE_TRANSFER_BIT,					// VkPipelineStageFlags	srcStageMask
-			VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT,			// VkPipelineStageFlags	dstStageMask
+			VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT | VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, // dstStageMask
 			VK_ACCESS_TRANSFER_WRITE_BIT,					// VkAccessFlags		srcAccessMask
-			VK_ACCESS_INPUT_ATTACHMENT_READ_BIT | VK_ACCESS_SHADER_READ_BIT,	//	dstAccessMask
+			VK_ACCESS_INPUT_ATTACHMENT_READ_BIT | VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_COLOR_ATTACHMENT_READ_BIT  | VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,	//	dstAccessMask
 			VK_DEPENDENCY_BY_REGION_BIT						// VkDependencyFlags	dependencyFlags
 		};
 
diff --git a/external/vulkancts/modules/vulkan/binding_model/vktBindingDescriptorUpdateTests.cpp b/external/vulkancts/modules/vulkan/binding_model/vktBindingDescriptorUpdateTests.cpp
index e74eda3..b470490 100644
--- a/external/vulkancts/modules/vulkan/binding_model/vktBindingDescriptorUpdateTests.cpp
+++ b/external/vulkancts/modules/vulkan/binding_model/vktBindingDescriptorUpdateTests.cpp
@@ -41,9 +41,13 @@
 #include "tcuTexture.hpp"
 #include "tcuTestLog.hpp"
 
+#include "deRandom.hpp"
+
 #include <string>
 #include <vector>
 #include <utility>
+#include <memory>
+#include <math.h>
 
 namespace vkt
 {
@@ -151,6 +155,7 @@
 {
 	vk::VkDescriptorType	type;
 	PointerCase				pointer;
+	deUint32				descriptorSet;
 };
 
 class SamplerlessDescriptorWriteTestCase : public vkt::TestCase
@@ -218,15 +223,15 @@
 	{
 	case vk::VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE:
 		extensions		= "#extension GL_EXT_samplerless_texture_functions : require\n";
-		descriptorDecl	= "layout(set=0, binding=0) uniform texture2D img;";
+		descriptorDecl	= "layout(set=" + std::to_string(m_params.descriptorSet) + ", binding=0) uniform texture2D img;";
 		readOp			= "texelFetch(img, ivec2(0, 0), 0)";
 		break;
 	case vk::VK_DESCRIPTOR_TYPE_STORAGE_IMAGE:
-		descriptorDecl	= "layout(rgba8, set=0, binding=0) uniform image2D img;";
+		descriptorDecl	= "layout(rgba8, set=" + std::to_string(m_params.descriptorSet) + ", binding=0) uniform image2D img;";
 		readOp			= "imageLoad(img, ivec2(0, 0))";
 		break;
 	case vk::VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT:
-		descriptorDecl	= "layout(input_attachment_index=0, set=0, binding=0) uniform subpassInput img;";
+		descriptorDecl	= "layout(input_attachment_index=0, set=" + std::to_string(m_params.descriptorSet) + ", binding=0) uniform subpassInput img;";
 		readOp			= "subpassLoad(img)";
 		break;
 	default:
@@ -473,24 +478,36 @@
 	deMemcpy(vertexDataPtr, fullScreenQuad.data(), static_cast<size_t>(vertexBufferSize));
 	vk::flushAlloc(vkd, device, vertexAlloc);
 
-	// Descriptor set layout.
+	// Descriptor set layouts.
 	vk::DescriptorSetLayoutBuilder layoutBuilder;
-	layoutBuilder.addSingleBinding(m_params.type, vk::VK_SHADER_STAGE_ALL_GRAPHICS);
-	const auto descriptorSetLayout = layoutBuilder.build(vkd, device);
+	std::vector<vk::Move<vk::VkDescriptorSetLayout>> descriptorSetLayouts;
+	// Create layouts for required amount of empty descriptor sets before the one that is actually used.
+	for (deUint32 descIdx = 0u; descIdx < m_params.descriptorSet; descIdx++)
+	{
+		descriptorSetLayouts.push_back(layoutBuilder.build(vkd, device));
+	}
+	// Create a layout for the descriptor set that is actually used.
+	layoutBuilder.addSingleBinding(m_params.type, vk::VK_SHADER_STAGE_FRAGMENT_BIT);
+	descriptorSetLayouts.push_back(layoutBuilder.build(vkd, device));
 
 	// Descriptor pool.
 	vk::DescriptorPoolBuilder poolBuilder;
 	poolBuilder.addType(m_params.type);
-	const auto descriptorPool = poolBuilder.build(vkd, device, vk::VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT, 1u);
+	const auto descriptorPool = poolBuilder.build(vkd, device, vk::VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT, m_params.descriptorSet + 1);
 
-	// Descriptor set.
-	const auto descriptorSet = vk::makeDescriptorSet(vkd, device, descriptorPool.get(), descriptorSetLayout.get());
+	// Descriptor sets.
+	std::vector<vk::Move<vk::VkDescriptorSet>> descriptorSets;
+	for (deUint32 descIdx = 0u; descIdx < m_params.descriptorSet; descIdx++)
+	{
+		descriptorSets.push_back(vk::makeDescriptorSet(vkd, device, descriptorPool.get(), descriptorSetLayouts[descIdx].get()));
+	}
+	descriptorSets.push_back(vk::makeDescriptorSet(vkd, device, descriptorPool.get(), descriptorSetLayouts[m_params.descriptorSet].get()));
 
 	// Update descriptor set with the descriptor.
 	// IMPORTANT: the chosen sampler handle is used here.
 	vk::DescriptorSetUpdateBuilder updateBuilder;
 	const auto descriptorImageInfo = vk::makeDescriptorImageInfo(getSamplerHandle(), mainView.get(), getMainImageShaderLayout());
-	updateBuilder.writeSingle(descriptorSet.get(), vk::DescriptorSetUpdateBuilder::Location::binding(0u), m_params.type, &descriptorImageInfo);
+	updateBuilder.writeSingle(descriptorSets[m_params.descriptorSet].get(), vk::DescriptorSetUpdateBuilder::Location::binding(0u), m_params.type, &descriptorImageInfo);
 	updateBuilder.update(vkd, device);
 
 	// Shader modules.
@@ -589,7 +606,7 @@
 	const auto framebuffer = vk::makeFramebuffer(vkd, device, renderPass.get(), static_cast<deUint32>(attachments.size()), attachments.data(), kFramebufferExtent.width, kFramebufferExtent.height, kFramebufferExtent.depth);
 
 	// Pipeline layout.
-	const auto pipelineLayout = vk::makePipelineLayout(vkd, device, descriptorSetLayout.get());
+	const auto pipelineLayout = vk::makePipelineLayout(vkd, device, descriptorSetLayouts);
 
 	// Graphics pipeline.
 	const std::vector<vk::VkViewport>	viewports(1u, vk::makeViewport(kFramebufferExtent));
@@ -612,7 +629,8 @@
 
 	const auto vtxBufferBarrier	= vk::makeBufferMemoryBarrier(vk::VK_ACCESS_HOST_WRITE_BIT, vk::VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT, vertexBuffer.get(), 0ull, vertexBufferSize);
 	const auto preClearBarrier	= vk::makeImageMemoryBarrier(0u, vk::VK_ACCESS_TRANSFER_WRITE_BIT, vk::VK_IMAGE_LAYOUT_UNDEFINED, vk::VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, mainImage.get(), colorSubresourceRange);
-	const auto postClearBarrier	= vk::makeImageMemoryBarrier(vk::VK_ACCESS_TRANSFER_WRITE_BIT, vk::VK_ACCESS_SHADER_READ_BIT, vk::VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, getMainImageShaderLayout(), mainImage.get(), colorSubresourceRange);
+	const auto postClearBarrier	= vk::makeImageMemoryBarrier(vk::VK_ACCESS_TRANSFER_WRITE_BIT, vk::VK_ACCESS_SHADER_READ_BIT | vk::VK_ACCESS_COLOR_ATTACHMENT_READ_BIT,
+						vk::VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, getMainImageShaderLayout(), mainImage.get(), colorSubresourceRange);
 	const auto clearDescColor	= vk::makeClearValueColor(kDescriptorColor);
 
 	vk::beginCommandBuffer(vkd, cmdBuffer);
@@ -620,11 +638,11 @@
 	vkd.cmdPipelineBarrier(cmdBuffer, vk::VK_PIPELINE_STAGE_HOST_BIT, vk::VK_PIPELINE_STAGE_VERTEX_INPUT_BIT, 0u, 0u, nullptr, 1u, &vtxBufferBarrier, 0u, nullptr);
 	vkd.cmdPipelineBarrier(cmdBuffer, vk::VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, vk::VK_PIPELINE_STAGE_TRANSFER_BIT, 0u, 0u, nullptr, 0u, nullptr, 1u, &preClearBarrier);
 	vkd.cmdClearColorImage(cmdBuffer, mainImage.get(), vk::VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, &clearDescColor.color, 1u, &colorSubresourceRange);
-	vkd.cmdPipelineBarrier(cmdBuffer, vk::VK_PIPELINE_STAGE_TRANSFER_BIT, vk::VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT, 0u, 0u, nullptr, 0u, nullptr, 1u, &postClearBarrier);
+	vkd.cmdPipelineBarrier(cmdBuffer, vk::VK_PIPELINE_STAGE_TRANSFER_BIT, vk::VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT | vk::VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, 0u, 0u, nullptr, 0u, nullptr, 1u, &postClearBarrier);
 
 	vk::beginRenderPass(vkd, cmdBuffer, renderPass.get(), framebuffer.get(), renderArea, clearFbColor);
 	vkd.cmdBindPipeline(cmdBuffer, vk::VK_PIPELINE_BIND_POINT_GRAPHICS, pipeline.get());
-	vkd.cmdBindDescriptorSets(cmdBuffer, vk::VK_PIPELINE_BIND_POINT_GRAPHICS, pipelineLayout.get(), 0u, 1u, &descriptorSet.get(), 0u, nullptr);
+	vkd.cmdBindDescriptorSets(cmdBuffer, vk::VK_PIPELINE_BIND_POINT_GRAPHICS, pipelineLayout.get(), m_params.descriptorSet, 1u, &descriptorSets[m_params.descriptorSet].get(), 0u, nullptr);
 	vkd.cmdBindVertexBuffers(cmdBuffer, 0u, 1u, &vertexBuffer.get(), &vertexBufferOffset);
 	vkd.cmdDraw(cmdBuffer, static_cast<deUint32>(fullScreenQuad.size()), 1u, 0u, 0u);
 	vk::endRenderPass(vkd, cmdBuffer);
@@ -682,9 +700,14 @@
 
 	for (const auto& typeCase		: descriptorTypes)
 	for (const auto& pointerCase	: pointerCases)
+	for (deUint32 descriptorSet = 0u; descriptorSet < 2u; descriptorSet++)
 	{
-		const std::string		caseName	= typeCase.second + "_" + pointerCase.second;
-		const SamplerlessParams	params		{typeCase.first, pointerCase.first};
+		std::string			caseName	= typeCase.second + "_" + pointerCase.second;
+		SamplerlessParams	params		{typeCase.first, pointerCase.first, descriptorSet};
+		if (descriptorSet > 0u)
+		{
+			caseName += "_set_" + std::to_string(descriptorSet);
+		}
 
 		group->addChild(new SamplerlessDescriptorWriteTestCase(testCtx, caseName, "", params));
 	}
@@ -692,8 +715,585 @@
 	return group.release();
 }
 
-} // anonymous
+class RandomDescriptorUpdateTestCase : public vkt::TestCase
+{
+public:
+	RandomDescriptorUpdateTestCase				(tcu::TestContext& testCtx, const std::string& name, const std::string& description);
+	virtual	~RandomDescriptorUpdateTestCase		(void) {}
 
+	virtual void				initPrograms	(vk::SourceCollections& programCollection) const;
+	virtual vkt::TestInstance*	createInstance	(Context& context) const;
+
+private:
+};
+
+class RandomDescriptorUpdateTestInstance : public vkt::TestInstance
+{
+public:
+	RandomDescriptorUpdateTestInstance			(Context& context);
+	virtual	~RandomDescriptorUpdateTestInstance	(void) {}
+
+	virtual tcu::TestStatus		iterate			(void);
+
+	static const vk::VkExtent3D	kFramebufferExtent;
+	static const vk::VkFormat	kImageFormat;
+	static const deUint32		kNumBuffers;
+	static const deUint32		kNumOffsets;
+	static const deUint32		kNumIterations;
+
+private:
+	deRandom					m_random;
+};
+
+const vk::VkExtent3D	RandomDescriptorUpdateTestInstance::kFramebufferExtent	= vk::makeExtent3D(64u, 64u, 1u);
+const vk::VkFormat		RandomDescriptorUpdateTestInstance::kImageFormat		= vk::VK_FORMAT_R16G16B16A16_SFLOAT;
+const deUint32			RandomDescriptorUpdateTestInstance::kNumBuffers			= 3u;
+const deUint32			RandomDescriptorUpdateTestInstance::kNumOffsets			= 5u;
+const deUint32			RandomDescriptorUpdateTestInstance::kNumIterations		= 1000u;
+
+RandomDescriptorUpdateTestCase::RandomDescriptorUpdateTestCase (tcu::TestContext& testCtx, const std::string& name, const std::string& description)
+: vkt::TestCase(testCtx, name, description)
+{
+}
+
+void RandomDescriptorUpdateTestCase::initPrograms (vk::SourceCollections& programCollection) const
+{
+	const std::string vertexShader =
+			"#version 450\n"
+			"layout(location=0) in vec4 position;\n"
+			"void main() { gl_Position = position; }\n";
+
+	programCollection.glslSources.add("vert") << glu::VertexSource(vertexShader);
+
+	std::ostringstream fragmentShader;
+
+	fragmentShader
+			<< "#version 450\n"
+			<< "layout(location = 0) out vec4 color_out;\n"
+			<< "layout(set = 0, binding = 0) uniform buf\n"
+			<< "{\n"
+			<< "    vec4 data0;\n"
+			<< "    vec4 data1;\n"
+			<< "};\n"
+			<< "void main()\n"
+			<< "{\n"
+			<< "    color_out = data0 + data1;\n"
+			<< "}\n"
+			;
+
+	programCollection.glslSources.add("frag") << glu::FragmentSource(fragmentShader.str());
+}
+
+vkt::TestInstance* RandomDescriptorUpdateTestCase::createInstance (Context& context) const
+{
+	return new RandomDescriptorUpdateTestInstance(context);
+}
+
+RandomDescriptorUpdateTestInstance::RandomDescriptorUpdateTestInstance(Context &context)
+: vkt::TestInstance(context)
+{
+	deRandom_init(&m_random, 0);
+}
+
+tcu::TestStatus RandomDescriptorUpdateTestInstance::iterate()
+{
+	const auto&								vkd						= m_context.getDeviceInterface();
+	const auto								device					= m_context.getDevice();
+	auto&									allocator				= m_context.getDefaultAllocator();
+	const auto								queue					= m_context.getUniversalQueue();
+	const auto								queueIndex				= m_context.getUniversalQueueFamilyIndex();
+	const auto								tcuFormat				= vk::mapVkFormat(kImageFormat);
+	vk::DescriptorSetLayoutBuilder			builder;
+
+	builder.addSingleBinding(vk::VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, vk::VK_SHADER_STAGE_FRAGMENT_BIT);
+
+	vk::Unique<vk::VkDescriptorSetLayout>	layout					(builder.build(vkd, device, (vk::VkDescriptorSetLayoutCreateFlags)0));
+
+	// Create descriptor pool
+	vk::Unique<vk::VkDescriptorPool>		descriptorPool			(vk::DescriptorPoolBuilder().addType(vk::VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, 1).build(vkd, device, vk::VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT, 1));
+
+	// Create descriptor set
+	const vk::VkDescriptorSetAllocateInfo	setAllocateInfo			=
+	{
+		vk::VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO,	// VkStructureType				sType
+		DE_NULL,											// const void*					pNext
+		*descriptorPool,									// VkDescriptorPool				descriptorPool
+		1u,													// deUint32						descriptorSetCount
+		&layout.get()										// const VkDescriptorSetLayout*	pSetLayouts
+	};
+
+	vk::Unique<vk::VkDescriptorSet>			descriptorSet			(allocateDescriptorSet(vkd, device, &setAllocateInfo));
+
+	// The maximum allowed buffer offset alignment is 256 bytes. Meaningful data is placed at these offsets.
+	const deUint32	bufferSize = 256u * kNumOffsets;
+
+	float									bufferContents[kNumBuffers][bufferSize / 4];
+	float									counter				= 1.0f;
+	float									sign				= 1.0f;
+	deUint32								offset				= 0;
+	deUint32								channelSelector		= 0;
+
+	// The buffers are filled with a running counter in one of the channels.
+	// Both signed and unsigned values are used for each counter. Two vec4s
+	// are initialized at offsets of 256 bytes (the maximum allowed alignment).
+	// Everythin else is left as zero.
+	for (deUint32 b = 0; b < kNumBuffers; b++)
+	{
+		deMemset(bufferContents[b], 0, bufferSize);
+
+		for (deUint32 o = 0; o < kNumOffsets; o++)
+		{
+			offset = o * 64;
+
+			// Two vectors at every offset.
+			for (deUint32 v = 0; v < 2; v++)
+			{
+				// Only RGB channels are being tested.
+				for (deUint32 c = 0; c < 3; c++)
+				{
+					if (c == channelSelector)
+					{
+						bufferContents[b][offset++] = sign * counter;
+					}
+					else
+					{
+						bufferContents[b][offset++] = 0.0f;
+					}
+				}
+				// Keep alpha at one.
+				bufferContents[b][offset++] = 1.0f;
+
+				channelSelector = channelSelector + 1;
+
+				// All three channels have been filled in. Switch a sign or increase the counter.
+				if (channelSelector == 3)
+				{
+					channelSelector = 0;
+					if (sign == 1.0f)
+					{
+						sign = -1.0f;
+					}
+					else
+					{
+						sign = 1.0f;
+						counter += 1.0f;
+					}
+				}
+			}
+		}
+	}
+
+	const auto								bufferInfo				= vk::makeBufferCreateInfo(bufferSize, vk::VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT);
+	std::vector<std::shared_ptr<vk::BufferWithMemory>>	buffers;
+
+	for (const auto& contents : bufferContents)
+	{
+		buffers.emplace_back(std::make_shared<vk::BufferWithMemory>(vkd, device, allocator, bufferInfo, vk::MemoryRequirement::HostVisible));
+		const auto&	bufferAlloc	= buffers.back()->getAllocation();
+		const auto	bufferPtr	= reinterpret_cast<char*>(bufferAlloc.getHostPtr()) + bufferAlloc.getOffset();
+		deMemcpy(bufferPtr, contents, bufferSize);
+		vk::flushAlloc(vkd, device, bufferAlloc);
+	}
+
+	// Create framebuffer image and view.
+	const vk::VkImageCreateInfo				fbImgCreateInfo			=
+	{
+		vk::VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO,	// VkStructureType			sType
+		DE_NULL,									// const void*				pNext
+		0u,											// VkImageCreateFlags		flags
+		vk::VK_IMAGE_TYPE_2D,						// VkImageType				imageType
+		kImageFormat,								// VkFormat					format
+		kFramebufferExtent,							// VkExtent3D				extent
+		1u,											// deUint32					mipLevels
+		1u,											// deUint32					arrayLayers
+		vk::VK_SAMPLE_COUNT_1_BIT,					// VkSampleCountFlagBits	samples
+		vk::VK_IMAGE_TILING_OPTIMAL,				// VkImageTiling			tiling
+		(vk::VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT |	// VkImageUsageFlags		usage
+		 vk::VK_IMAGE_USAGE_TRANSFER_SRC_BIT),
+		vk::VK_SHARING_MODE_EXCLUSIVE,				// VkSharingMode			sharingMode
+		1u,											// deUint32					queueFamilyIndexCount
+		&queueIndex,								// const deUint32*			pQueueFamilyIndices
+		vk::VK_IMAGE_LAYOUT_UNDEFINED				// VkImageLayout			initialLayout
+	};
+
+	const vk::ImageWithMemory				fbImage					(vkd, device, allocator, fbImgCreateInfo,	vk::MemoryRequirement::Any);
+	const auto								colorSubresourceRange	= vk::makeImageSubresourceRange(vk::VK_IMAGE_ASPECT_COLOR_BIT, 0u, 1u, 0u, 1u);
+	const auto								fbView					= vk::makeImageView(vkd, device, fbImage.get(),		vk::VK_IMAGE_VIEW_TYPE_2D, kImageFormat, colorSubresourceRange);
+
+	// Buffer to copy rendering result to.
+	const vk::VkDeviceSize					resultsBufferSize		= static_cast<vk::VkDeviceSize>(static_cast<deUint32>(tcu::getPixelSize(tcuFormat)) * kFramebufferExtent.width * kFramebufferExtent.height * kFramebufferExtent.depth);
+	const auto								resultsBufferInfo		= vk::makeBufferCreateInfo(resultsBufferSize, vk::VK_BUFFER_USAGE_TRANSFER_DST_BIT);
+	const vk::BufferWithMemory				resultsBuffer			(vkd, device, allocator, resultsBufferInfo, vk::MemoryRequirement::HostVisible);
+
+	const std::vector<tcu::Vec4>			fullScreenQuad			=
+	{
+		{ -1.f, -1.f,	0.f, 1.f },
+		{  1.f, -1.f,	0.f, 1.f },
+		{ -1.f,  1.f,	0.f, 1.f },
+		{ -1.f,  1.f,	0.f, 1.f },
+		{  1.f, -1.f,	0.f, 1.f },
+		{  1.f,  1.f,	0.f, 1.f }
+	};
+
+	// Vertex buffer.
+	const vk::VkDeviceSize					vertexBufferSize		= static_cast<vk::VkDeviceSize>(fullScreenQuad.size() * sizeof(decltype(fullScreenQuad)::value_type));
+	const auto								vertexBufferInfo		= vk::makeBufferCreateInfo(vertexBufferSize, vk::VK_BUFFER_USAGE_VERTEX_BUFFER_BIT);
+	const vk::BufferWithMemory				vertexBuffer			(vkd, device, allocator, vertexBufferInfo, vk::MemoryRequirement::HostVisible | vk::MemoryRequirement::Coherent);
+
+	// Copy data to vertex buffer.
+	const auto&								vertexAlloc				= vertexBuffer.getAllocation();
+	const auto								vertexDataPtr			= reinterpret_cast<char*>(vertexAlloc.getHostPtr()) + vertexAlloc.getOffset();
+	deMemcpy(vertexDataPtr, fullScreenQuad.data(), static_cast<size_t>(vertexBufferSize));
+	vk::flushAlloc(vkd, device, vertexAlloc);
+
+	// Shader modules.
+	const auto								vertexModule			= vk::createShaderModule(vkd, device, m_context.getBinaryCollection().get("vert"), 0u);
+	const auto								fragModule				= vk::createShaderModule(vkd, device, m_context.getBinaryCollection().get("frag"), 0u);
+
+	// Render pass.
+	const vk::VkAttachmentDescription		fbAttachment			=
+	{
+		0u,												// VkAttachmentDescriptionFlags		flags
+		kImageFormat,									// VkFormat							format
+		vk::VK_SAMPLE_COUNT_1_BIT,						// VkSampleCountFlagBits			samples
+		vk::VK_ATTACHMENT_LOAD_OP_LOAD,					// VkAttachmentLoadOp				loadOp
+		vk::VK_ATTACHMENT_STORE_OP_STORE,				// VkAttachmentStoreOp				storeOp
+		vk::VK_ATTACHMENT_LOAD_OP_DONT_CARE,			// VkAttachmentLoadOp				stencilLoadOp
+		vk::VK_ATTACHMENT_STORE_OP_DONT_CARE,			// VkAttachmentStoreOp				stencilStoreOp
+		vk::VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,	// VkImageLayout					initialLayout
+		vk::VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL	// VkImageLayout					finalLayout
+	};
+
+	std::vector<vk::VkAttachmentDescription>	attachmentDescs;
+	attachmentDescs.push_back(fbAttachment);
+
+	const vk::VkAttachmentReference			colorRef				=
+	{
+		0u,												// deUint32			attachment
+		vk::VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,	// VkImageLayout	layout
+	};
+	const std::vector<vk::VkAttachmentReference> colorAttachments(1u, colorRef);
+
+	const vk::VkSubpassDescription				subpass				=
+	{
+		0u,												// VkSubpassDescriptionFlags		flags
+		vk::VK_PIPELINE_BIND_POINT_GRAPHICS,			// VkPipelineBindPoint				pipelineBindPoint
+		0u,												// deUint32							inputAttachmentCount
+		DE_NULL,										// const VkAttachmentReference*		pInputAttachments
+		static_cast<deUint32>(colorAttachments.size()),	// deUint32							colorAttachmentCount
+		colorAttachments.data(),						// const VkAttachmentReference*		pColorAttachments
+		0u,												// const VkAttachmentReference*		pResolveAttachments
+		DE_NULL,										// const VkAttachmentReference*		pDepthStencilAttachment
+		0u,												// deUint32							preserveAttachmentCount
+		DE_NULL											// const deUint32*					pPreserveAttachments
+	};
+	const std::vector<vk::VkSubpassDescription>	subpasses			(1u, subpass);
+
+	const vk::VkRenderPassCreateInfo renderPassInfo =
+	{
+		vk::VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO,	// VkStructureType					sType
+		DE_NULL,										// const void*						pNext
+		0u,												// VkRenderPassCreateFlags			flags
+		static_cast<deUint32>(attachmentDescs.size()),	// deUint32							attachmentCount
+		attachmentDescs.data(),							// const VkAttachmentDescription*	pAttachments
+		static_cast<deUint32>(subpasses.size()),		// deUint32							subpassCount
+		subpasses.data(),								// const VkSubpassDescription*		pSubpasses
+		0u,												// deUint32							dependencyCount
+		DE_NULL,										// const VkSubpassDependency*		pDependencies
+	};
+	const auto									renderPass			= vk::createRenderPass(vkd, device, &renderPassInfo);
+
+	// Framebuffer.
+	std::vector<vk::VkImageView>				attachments;
+	attachments.push_back(fbView.get());
+	const auto									framebuffer			= vk::makeFramebuffer(vkd, device, renderPass.get(), static_cast<deUint32>(attachments.size()), attachments.data(), kFramebufferExtent.width, kFramebufferExtent.height, kFramebufferExtent.depth);
+
+	// Pipeline layout.
+	const auto									pipelineLayout		= vk::makePipelineLayout(vkd, device, layout.get());
+
+	// Graphics pipeline.
+	const std::vector<vk::VkViewport>			viewports			(1u, vk::makeViewport(kFramebufferExtent));
+	const std::vector<vk::VkRect2D>				scissors			(1u, vk::makeRect2D(kFramebufferExtent));
+
+	// Use additive alpha blending to accumulate results from all iterations.
+	const vk::VkPipelineColorBlendAttachmentState	colorBlendAttachmentState	=
+	{
+		VK_TRUE,						// VkBool32					blendEnable
+		vk::VK_BLEND_FACTOR_ONE,		// VkBlendFactor			srcColorBlendFactor
+		vk::VK_BLEND_FACTOR_ONE,		// VkBlendFactor			dstColorBlendFactor
+		vk::VK_BLEND_OP_ADD,			// VkBlendOp				colorBlendOp
+		vk::VK_BLEND_FACTOR_ONE,		// VkBlendFactor			srcAlphaBlendFactor
+		vk::VK_BLEND_FACTOR_ZERO,		// VkBlendFactor			dstAlphaBlendFactor
+		vk::VK_BLEND_OP_ADD,			// VkBlendOp				alphaBlendOp
+		vk::VK_COLOR_COMPONENT_R_BIT	// VkColorComponentFlags	colorWriteMask
+		| vk::VK_COLOR_COMPONENT_G_BIT
+		| vk::VK_COLOR_COMPONENT_B_BIT
+		| vk::VK_COLOR_COMPONENT_A_BIT
+	};
+
+	const vk::VkPipelineColorBlendStateCreateInfo	colorBlendState	=
+	{
+		vk::VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO,	// VkStructureType								sType
+		DE_NULL,														// const void*									pNext
+		0u,																// VkPipelineColorBlendStateCreateFlags			flags
+		VK_FALSE,														// VkBool32										logicOpEnable
+		vk::VK_LOGIC_OP_CLEAR,											// VkLogicOp									logicOp
+		1u,																// deUint32										attachmentCount
+		&colorBlendAttachmentState,										// const VkPipelineColorBlendAttachmentState*	pAttachments
+		{ 1.0f, 1.0f, 1.0f, 1.0f }										// float										blendConstants[4]
+	};
+
+	const auto									pipeline			= vk::makeGraphicsPipeline(vkd, device, pipelineLayout.get(),
+																							   vertexModule.get(), DE_NULL, DE_NULL, DE_NULL, fragModule.get(),
+																							   renderPass.get(), viewports, scissors, vk::VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST,
+																							   0u, 0u, DE_NULL, DE_NULL, DE_NULL, DE_NULL, &colorBlendState);
+
+	// Command pool and command buffer.
+	const auto									cmdPool				= vk::createCommandPool(vkd, device, vk::VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT, queueIndex);
+	const auto									cmdBufferPtr		= vk::allocateCommandBuffer(vkd, device, cmdPool.get(), vk::VK_COMMAND_BUFFER_LEVEL_PRIMARY);
+	const auto									cmdBuffer			= cmdBufferPtr.get();
+
+	const vk::VkRect2D							renderArea			= vk::makeRect2D(kFramebufferExtent);
+	const vk::VkDeviceSize						vertexBufferOffset	= 0ull;
+
+	const auto									vtxBufferBarrier	= vk::makeBufferMemoryBarrier(vk::VK_ACCESS_HOST_WRITE_BIT, vk::VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT, vertexBuffer.get(), 0ull, vertexBufferSize);
+	const auto									fbBarrier			= vk::makeImageMemoryBarrier(0u, vk::VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, vk::VK_IMAGE_LAYOUT_UNDEFINED, vk::VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, fbImage.get(), colorSubresourceRange);
+
+	vk::VkClearValue							clearValue;
+	clearValue.color.float32[0] = 0.0f;
+	clearValue.color.float32[1] = 0.0f;
+	clearValue.color.float32[2] = 0.0f;
+	clearValue.color.float32[3] = 1.0f;
+
+	const vk::VkClearAttachment					clearAttachment		=
+	{
+		vk::VK_IMAGE_ASPECT_COLOR_BIT,	// VkImageAspectFlags	aspectMask
+		0u,								// uint32_t				colorAttachment
+		clearValue						// VkClearValue			clearValue
+	};
+
+	const vk::VkClearRect						clearRect			=
+	{
+		vk::makeRect2D(kFramebufferExtent),	// VkRect2D	rect
+		0u,									// uint32_t	baseArrayLayer
+		1u									// uint32_t	layerCount
+	};
+
+	vk::beginCommandBuffer(vkd, cmdBuffer);
+	vkd.cmdPipelineBarrier(cmdBuffer, vk::VK_PIPELINE_STAGE_HOST_BIT, vk::VK_PIPELINE_STAGE_VERTEX_INPUT_BIT, 0u,
+						   0u, DE_NULL, 1u, &vtxBufferBarrier, 0u, DE_NULL);
+	vkd.cmdPipelineBarrier(cmdBuffer, vk::VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, vk::VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, 0u,
+						   0u, DE_NULL, 0u, DE_NULL, 1u, &fbBarrier);
+	vk::endCommandBuffer(vkd, cmdBuffer);
+	vk::submitCommandsAndWait(vkd, device, queue, cmdBuffer);
+
+	struct DescriptorWrite
+	{
+		deUint32			bufferId;	// Which buffer to use for the descriptor update.
+		vk::VkDeviceSize	offset;		// The offset for the descriptor update.
+		vk::VkDeviceSize	range;		// The range for the descriptor update.
+	};
+
+	// Each iteration operates on a descriptor mutation which decides the source of the descriptor update.
+	struct DescriptorMutation
+	{
+		deBool							update;		// Determines if a descriptor update is performed.
+		deUint32						numDraws;	// The number of consecutive draw calls in a loop.
+		std::vector<DescriptorWrite>	writes;		// Multiple redundant writes can be performed.
+		// Other ideas to implement:
+		// - Sometimes also update the buffer contents.
+		// - Multiple descriptor sets.
+	};
+
+	std::vector<DescriptorMutation>				descriptorMutations;
+
+	// Keep track of the expected result while generating the mutations.
+	tcu::Vec4									uboValue0;
+	tcu::Vec4									uboValue1;
+	tcu::Vec4									expectedColor		(0.0f, 0.0f, 0.0f, 1.0f);
+	DescriptorWrite								descWrite			= { 0u, 0u, 32u };
+
+	for (deUint32 i = 0; i < kNumIterations; i++)
+	{
+		while (true)
+		{
+			tcu::Vec4						val0		= uboValue0;
+			tcu::Vec4						val1		= uboValue1;
+
+			deUint32						numWrites	= 1u;
+
+			// Sometimes do redundant descriptor writes.
+			if (deRandom_getUint32(&m_random) % 10 == 0)
+				numWrites = deRandom_getUint32(&m_random) % 20 + 1;
+
+			std::vector<DescriptorWrite>	writes;
+
+			for (deUint32 w = 0; w < numWrites; w++)
+			{
+				// The first half: Most of the times change the offset but sometimes the buffer.
+				// The second half: Most of the times change the buffer but sometimes change the offset.
+				bool	firstHalf	= i < kNumIterations / 2;
+				bool	rare		= (deRandom_getUint32(&m_random) % 100u >= (firstHalf ? 98u : 80u));
+
+				// firstHalf     rare      change
+				// --------------------------------
+				//     1          0        Offset
+				//     1          1        Buffer
+				//     0          0        Buffer
+				//     0          1        Offset
+				//
+				// This has a XOR pattern
+
+				if (firstHalf ^ rare)
+					descWrite.offset = (deRandom_getUint32(&m_random) % kNumOffsets) * 256u;
+				else
+					descWrite.bufferId = deRandom_getUint32(&m_random) % kNumBuffers;
+
+				writes.push_back(descWrite);
+			}
+
+			DescriptorMutation				mutation	= {i == 0 ? true : deRandom_getBool(&m_random),
+										deRandom_getUint32(&m_random) % 10u, writes};
+
+			const auto&						lastWrite	= mutation.writes.back();
+			if (mutation.update)
+			{
+				for (int c = 0; c < 3; c++)
+				{
+					val0[c] = bufferContents[lastWrite.bufferId][lastWrite.offset / 4 + c];
+					val1[c] = bufferContents[lastWrite.bufferId][lastWrite.offset / 4 + 4 + c];
+
+					// Sanity check we are reading expected values.
+					DE_ASSERT(val0[c] >= -counter && val0[c] <= counter);
+					DE_ASSERT(val1[c] >= -counter && val1[c] <= counter);
+				}
+			}
+
+			tcu::Vec4						color		= expectedColor + (val0 + val1) * tcu::Vec4(static_cast<float>(mutation.numDraws));
+
+			// 16-bit float can precisely present integers from -2048..2048. Continue randomizing the mutation
+			// until we stay in this range.
+			if (color[0] >= -2048.0f && color[0] <= 2048.0f && color[1] >= -2048.0f && color[1] <= 2048.0f
+				&& color[2] >= -2048.0f && color[2] <= 2048.0f)
+			{
+				descriptorMutations.push_back(mutation);
+				uboValue0		= val0;
+				uboValue1		= val1;
+				expectedColor	= color;
+				break;
+			}
+			else
+			{
+				// Randomize both buffer and offset for a better chance to hit a
+				// mutation that pushes the values back to the desired range.
+				descWrite.offset = (deRandom_getUint32(&m_random) % kNumOffsets) * 256u;
+				descWrite.bufferId = deRandom_getUint32(&m_random) % kNumBuffers;
+			}
+		}
+	}
+
+	bool first = true;
+
+	for (auto mutation : descriptorMutations)
+	{
+		if (mutation.update)
+		{
+			for (const auto &write : mutation.writes)
+			{
+				const vk::VkDescriptorBufferInfo descriptorInfo =
+				{
+					buffers[write.bufferId]->get(),	// VkBuffer		buffer
+					write.offset,					// VkDeviceSize	offset
+					write.range						// VkDeviceSize	range
+				};
+
+				const vk::VkWriteDescriptorSet descriptorWrite =
+				{
+					vk::VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,	// VkStructureTypes					Type
+					DE_NULL,									// const void*						pNext
+					*descriptorSet,								// VkDescriptorSet					dstSet
+					0,											// deUint32							dstBinding
+					0,											// deUint32							dstArrayElement
+					1u,											// deUint32							descriptorCount
+					vk::VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER,		// VkDescriptorType					descriptorType
+					DE_NULL,									// const VkDescriptorImageInfo*		pImageInfo
+					&descriptorInfo,							// const VkDescriptorBufferInfo*	pBufferInfo
+					DE_NULL										// const VkBufferView*				pTexelBufferView
+				};
+
+				vkd.updateDescriptorSets(device, 1, &descriptorWrite, 0, DE_NULL);
+			}
+		}
+
+		vk::beginCommandBuffer(vkd, cmdBuffer);
+
+		vk::beginRenderPass(vkd, cmdBuffer, renderPass.get(), framebuffer.get(), renderArea);
+		vkd.cmdBindPipeline(cmdBuffer, vk::VK_PIPELINE_BIND_POINT_GRAPHICS, pipeline.get());
+		// Clear the frame buffer during the first iteration.
+		if (first)
+		{
+			vkd.cmdClearAttachments(cmdBuffer, 1u, &clearAttachment, 1u, &clearRect);
+			first = false;
+		}
+		vkd.cmdBindDescriptorSets(cmdBuffer, vk::VK_PIPELINE_BIND_POINT_GRAPHICS, pipelineLayout.get(), 0u, 1u,
+								  &descriptorSet.get(), 0u, nullptr);
+		vkd.cmdBindVertexBuffers(cmdBuffer, 0u, 1u, &vertexBuffer.get(), &vertexBufferOffset);
+
+		for (deUint32 i = 0u; i < mutation.numDraws; i++)
+			vkd.cmdDraw(cmdBuffer, static_cast<deUint32>(fullScreenQuad.size()), 1u, 0u, 0u);
+
+		vk::endRenderPass(vkd, cmdBuffer);
+		vk::endCommandBuffer(vkd, cmdBuffer);
+		vk::submitCommandsAndWait(vkd, device, queue, cmdBuffer);
+	}
+
+	vk::beginCommandBuffer(vkd, cmdBuffer);
+	const tcu::IVec2 copySize{static_cast<int>(kFramebufferExtent.width),
+							  static_cast<int>(kFramebufferExtent.height)};
+	vk::copyImageToBuffer(vkd, cmdBuffer, fbImage.get(), resultsBuffer.get(), copySize);
+	vk::endCommandBuffer(vkd, cmdBuffer);
+	vk::submitCommandsAndWait(vkd, device, queue, cmdBuffer);
+
+	// Check results.
+	const auto& resultsBufferAlloc = resultsBuffer.getAllocation();
+	vk::invalidateAlloc(vkd, device, resultsBufferAlloc);
+
+	const auto							resultsBufferPtr	= reinterpret_cast<const char*>(resultsBufferAlloc.getHostPtr()) + resultsBufferAlloc.getOffset();
+	const tcu::ConstPixelBufferAccess	resultPixels		{tcuFormat, copySize[0], copySize[1], 1, resultsBufferPtr};
+
+	// The test only operates on integers, so a tolerance of 0.5 should work.
+	const float							tolerance			= 0.5f;
+
+	bool pass = true;
+	for (int x = 0; pass && x < resultPixels.getWidth(); ++x)
+		for (int y = 0; pass && y < resultPixels.getHeight(); ++y)
+			for (int z = 0; pass && z < resultPixels.getDepth(); ++z)
+			{
+				const auto pixel = resultPixels.getPixel(x, y, z);
+				for (int c = 0; c < 3; c++)
+					if (fabs(pixel[c] - expectedColor[c]) > tolerance)
+						pass = false;
+			}
+
+	tcu::TestStatus status = tcu::TestStatus::pass("Pass");
+	if (!pass)
+	{
+		m_context.getTestContext().getLog() << tcu::TestLog::Image("color", "Rendered image", resultPixels);
+		status = tcu::TestStatus::fail("Pixel mismatch; please check the rendered image");
+	}
+
+	return status;
+}
+
+tcu::TestCaseGroup* createRandomDescriptorUpdateTests (tcu::TestContext& testCtx)
+{
+	de::MovePtr<tcu::TestCaseGroup> group(new tcu::TestCaseGroup(testCtx, "random", "Update descriptors randomly between draws"));
+
+	group->addChild(new RandomDescriptorUpdateTestCase(testCtx, "uniform_buffer", ""));
+	return group.release();
+}
+
+} // anonymous
 
 tcu::TestCaseGroup* createDescriptorUpdateTests (tcu::TestContext& testCtx)
 {
@@ -701,6 +1301,7 @@
 
 	group->addChild(createEmptyDescriptorUpdateTests(testCtx));
 	group->addChild(createSamplerlessWriteTests(testCtx));
+	group->addChild(createRandomDescriptorUpdateTests(testCtx));
 
 	return group.release();
 }
diff --git a/external/vulkancts/modules/vulkan/clipping/vktClippingTests.cpp b/external/vulkancts/modules/vulkan/clipping/vktClippingTests.cpp
index d797377..56f0c24 100644
--- a/external/vulkancts/modules/vulkan/clipping/vktClippingTests.cpp
+++ b/external/vulkancts/modules/vulkan/clipping/vktClippingTests.cpp
@@ -1477,6 +1477,16 @@
 
 } // ClipDistanceComplementarity ns
 
+void checkTopologySupport(Context& context, const VkPrimitiveTopology topology)
+{
+	if (topology == VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN &&
+		context.isDeviceFunctionalitySupported("VK_KHR_portability_subset") &&
+		!context.getPortabilitySubsetFeatures().triangleFans)
+	{
+		TCU_THROW(NotSupportedError, "VK_KHR_portability_subset: Triangle fans are not supported by this implementation");
+	}
+}
+
 void addClippingTests (tcu::TestCaseGroup* clippingTestsGroup)
 {
 	tcu::TestContext& testCtx = clippingTestsGroup->getTestContext();
@@ -1507,7 +1517,7 @@
 
 			for (int caseNdx = 0; caseNdx < DE_LENGTH_OF_ARRAY(cases); ++caseNdx)
 				addFunctionCaseWithPrograms<VkPrimitiveTopology>(
-					group.get(), getPrimitiveTopologyShortName(cases[caseNdx]), "", initPrograms, testPrimitivesInside, cases[caseNdx]);
+					group.get(), getPrimitiveTopologyShortName(cases[caseNdx]), "", checkTopologySupport, initPrograms, testPrimitivesInside, cases[caseNdx]);
 
 			clipVolumeGroup->addChild(group.release());
 		}
@@ -1518,7 +1528,7 @@
 
 			for (int caseNdx = 0; caseNdx < DE_LENGTH_OF_ARRAY(cases); ++caseNdx)
 				addFunctionCaseWithPrograms<VkPrimitiveTopology>(
-					group.get(), getPrimitiveTopologyShortName(cases[caseNdx]), "", initPrograms, testPrimitivesOutside, cases[caseNdx]);
+					group.get(), getPrimitiveTopologyShortName(cases[caseNdx]), "", checkTopologySupport, initPrograms, testPrimitivesOutside, cases[caseNdx]);
 
 			clipVolumeGroup->addChild(group.release());
 		}
@@ -1529,7 +1539,7 @@
 
 			for (int caseNdx = 0; caseNdx < DE_LENGTH_OF_ARRAY(cases); ++caseNdx)
 				addFunctionCaseWithPrograms<VkPrimitiveTopology>(
-					group.get(), getPrimitiveTopologyShortName(cases[caseNdx]), "", initPrograms, testPrimitivesDepthClamp, cases[caseNdx]);
+					group.get(), getPrimitiveTopologyShortName(cases[caseNdx]), "", checkTopologySupport, initPrograms, testPrimitivesDepthClamp, cases[caseNdx]);
 
 			clipVolumeGroup->addChild(group.release());
 		}
@@ -1540,7 +1550,7 @@
 
 			for (int caseNdx = 0; caseNdx < DE_LENGTH_OF_ARRAY(cases); ++caseNdx)
 				addFunctionCaseWithPrograms<VkPrimitiveTopology>(
-					group.get(), getPrimitiveTopologyShortName(cases[caseNdx]), "", initPrograms, testPrimitivesDepthClip, cases[caseNdx]);
+					group.get(), getPrimitiveTopologyShortName(cases[caseNdx]), "", checkTopologySupport, initPrograms, testPrimitivesDepthClip, cases[caseNdx]);
 
 			clipVolumeGroup->addChild(group.release());
 		}
diff --git a/external/vulkancts/modules/vulkan/conditional_rendering/vktConditionalDispatchTests.cpp b/external/vulkancts/modules/vulkan/conditional_rendering/vktConditionalDispatchTests.cpp
index 0a594af..4287075 100644
--- a/external/vulkancts/modules/vulkan/conditional_rendering/vktConditionalDispatchTests.cpp
+++ b/external/vulkancts/modules/vulkan/conditional_rendering/vktConditionalDispatchTests.cpp
@@ -73,13 +73,14 @@
 class ConditionalDispatchTest : public vkt::TestCase
 {
 public:
-						ConditionalDispatchTest	(tcu::TestContext&	testCtx,
-												 const std::string& name,
-												 const std::string&	description,
-												 const ConditionalTestSpec& testSpec);
+						ConditionalDispatchTest	(tcu::TestContext&			testCtx,
+												 const std::string&			name,
+												 const std::string&			description,
+												 const ConditionalTestSpec&	testSpec);
 
-	void				initPrograms			(vk::SourceCollections& sourceCollections) const;
-	TestInstance*		createInstance			(Context&			    context) const;
+	void				initPrograms			(vk::SourceCollections&	sourceCollections) const;
+	void				checkSupport			(Context&				context) const;
+	TestInstance*		createInstance			(Context&				context) const;
 
 private:
 	const ConditionalTestSpec m_testSpec;
@@ -90,7 +91,7 @@
 public:
 								ConditionalDispatchTestInstance	(Context &context, ConditionalTestSpec testSpec);
 
-	virtual		tcu::TestStatus iterate					        (void);
+	virtual		tcu::TestStatus iterate							(void);
 	void						recordDispatch					(const vk::DeviceInterface&	vk,
 																 vk::VkCommandBuffer cmdBuffer,
 																 compute::Buffer& indirectBuffer);
@@ -101,10 +102,10 @@
 	const ConditionalData			m_conditionalData;
 };
 
-ConditionalDispatchTest::ConditionalDispatchTest(tcu::TestContext&	testCtx,
-												 const std::string&	name,
-												 const std::string&	description,
-												 const ConditionalTestSpec& testSpec)
+ConditionalDispatchTest::ConditionalDispatchTest(tcu::TestContext&			testCtx,
+												 const std::string&			name,
+												 const std::string&			description,
+												 const ConditionalTestSpec&	testSpec)
 	: TestCase		(testCtx, name, description)
 	, m_testSpec	(testSpec)
 {
@@ -127,6 +128,14 @@
 	sourceCollections.glslSources.add("comp") << glu::ComputeSource(src.str());
 }
 
+void ConditionalDispatchTest::checkSupport(Context& context) const
+{
+	checkConditionalRenderingCapabilities(context, m_testSpec.conditionalData);
+
+	if (m_testSpec.command == DISPATCH_COMMAND_TYPE_DISPATCH_BASE)
+		context.requireDeviceFunctionality("VK_KHR_device_group");
+}
+
 TestInstance* ConditionalDispatchTest::createInstance (Context& context) const
 {
 	return new ConditionalDispatchTestInstance(context, m_testSpec);
@@ -138,7 +147,6 @@
 	, m_numCalls(testSpec.numCalls)
 	, m_conditionalData(testSpec.conditionalData)
 {
-	checkConditionalRenderingCapabilities(context, m_conditionalData);
 };
 
 void ConditionalDispatchTestInstance::recordDispatch (const vk::DeviceInterface& vk,
@@ -364,7 +372,7 @@
 	{
 		const ConditionalData& conditionData = conditional::s_testsData[conditionNdx];
 
-		tcu::TestCaseGroup* conditionalDrawRootGroup = new tcu::TestCaseGroup(m_testCtx, de::toString(conditionData).c_str(), "Conditionaly execute dispatch calls");
+		de::MovePtr<tcu::TestCaseGroup> conditionalDrawRootGroup(new tcu::TestCaseGroup(m_testCtx, de::toString(conditionData).c_str(), "Conditionaly execute dispatch calls"));
 
 		for (deUint32 commandTypeIdx = 0; commandTypeIdx < DISPATCH_COMMAND_TYPE_DISPATCH_LAST; ++commandTypeIdx)
 		{
@@ -378,7 +386,112 @@
 			conditionalDrawRootGroup->addChild(new ConditionalDispatchTest(m_testCtx, getDispatchCommandTypeName(command), "", testSpec));
 		}
 
-		addChild(conditionalDrawRootGroup);
+		addChild(conditionalDrawRootGroup.release());
+	}
+
+	// Tests verifying the condition is interpreted as a 32-bit value.
+	{
+		de::MovePtr<tcu::TestCaseGroup> conditionSizeGroup(new tcu::TestCaseGroup(m_testCtx, "condition_size", "Tests verifying the condition is being read as a 32-bit value"));
+
+		struct ValuePaddingExecution
+		{
+			deUint32	value;
+			bool		padding;
+			bool		execution;
+			const char*	name;
+		};
+
+		const ValuePaddingExecution kConditionValueResults[] =
+		{
+			{	0x00000001u,	false,	true,	"first_byte"	},
+			{	0x00000100u,	false,	true,	"second_byte"	},
+			{	0x00010000u,	false,	true,	"third_byte"	},
+			{	0x01000000u,	false,	true,	"fourth_byte"	},
+			{	0u,				true,	false,	"padded_zero"	},
+		};
+
+		enum class ConditionSizeSubcaseType
+		{
+			PRIMARY_FLAT = 0,
+			PRIMARY_WITH_SECONDARY,
+			SECONDARY_NORMAL,
+			SECONDARY_INHERITED,
+		};
+
+		struct ConditionSizeSubcase
+		{
+			ConditionSizeSubcaseType	type;
+			const char*					name;
+		};
+
+		const ConditionSizeSubcase kConditionSizeSubcase[] =
+		{
+			{ ConditionSizeSubcaseType::PRIMARY_FLAT,				"primary"				},
+			{ ConditionSizeSubcaseType::PRIMARY_WITH_SECONDARY,		"inherited"				},
+			{ ConditionSizeSubcaseType::SECONDARY_NORMAL,			"secondary"				},
+			{ ConditionSizeSubcaseType::SECONDARY_INHERITED,		"secondary_inherited"	},
+		};
+
+		for (int subcaseNdx = 0; subcaseNdx < DE_LENGTH_OF_ARRAY(kConditionSizeSubcase); ++subcaseNdx)
+		{
+			const auto& subcase = kConditionSizeSubcase[subcaseNdx];
+
+			de::MovePtr<tcu::TestCaseGroup> subcaseGroup(new tcu::TestCaseGroup(m_testCtx, subcase.name, ""));
+
+			ConditionalData conditionalData		= {};
+			conditionalData.conditionInverted	= false;
+
+			switch (subcase.type)
+			{
+				case ConditionSizeSubcaseType::PRIMARY_FLAT:
+					conditionalData.conditionInPrimaryCommandBuffer		= true;
+					conditionalData.conditionInSecondaryCommandBuffer	= false;
+					conditionalData.conditionInherited					= false;
+					break;
+
+				case ConditionSizeSubcaseType::PRIMARY_WITH_SECONDARY:
+					conditionalData.conditionInPrimaryCommandBuffer		= true;
+					conditionalData.conditionInSecondaryCommandBuffer	= false;
+					conditionalData.conditionInherited					= true;
+					break;
+
+				case ConditionSizeSubcaseType::SECONDARY_NORMAL:
+					conditionalData.conditionInPrimaryCommandBuffer		= false;
+					conditionalData.conditionInSecondaryCommandBuffer	= true;
+					conditionalData.conditionInherited					= false;
+					break;
+
+				case ConditionSizeSubcaseType::SECONDARY_INHERITED:
+					conditionalData.conditionInPrimaryCommandBuffer		= false;
+					conditionalData.conditionInSecondaryCommandBuffer	= true;
+					conditionalData.conditionInherited					= true;
+					break;
+
+				default:
+					DE_ASSERT(false);
+					break;
+			}
+
+			for (int valueNdx = 0; valueNdx < DE_LENGTH_OF_ARRAY(kConditionValueResults); ++valueNdx)
+			{
+				const auto& valueResults = kConditionValueResults[valueNdx];
+
+				conditionalData.conditionValue			= valueResults.value;
+				conditionalData.padConditionValue		= valueResults.padding;
+				conditionalData.expectCommandExecution	= valueResults.execution;
+
+				ConditionalTestSpec spec;
+				spec.command			= DISPATCH_COMMAND_TYPE_DISPATCH;
+				spec.numCalls			= 1;
+				spec.conditionalData	= conditionalData;
+
+				subcaseGroup->addChild(new ConditionalDispatchTest(m_testCtx, valueResults.name, "", spec));
+			}
+
+			conditionSizeGroup->addChild(subcaseGroup.release());
+		}
+
+		addChild(conditionSizeGroup.release());
 	}
 }
 
diff --git a/external/vulkancts/modules/vulkan/conditional_rendering/vktConditionalDrawAndClearTests.cpp b/external/vulkancts/modules/vulkan/conditional_rendering/vktConditionalDrawAndClearTests.cpp
index 40124dd..9113482 100644
--- a/external/vulkancts/modules/vulkan/conditional_rendering/vktConditionalDrawAndClearTests.cpp
+++ b/external/vulkancts/modules/vulkan/conditional_rendering/vktConditionalDrawAndClearTests.cpp
@@ -726,7 +726,8 @@
 
 	imageMemoryBarrier(m_testParams.m_testDepth ? m_depthTargetImage->object() : m_colorTargetImage->object(),										//VkImage							image
 					   VK_ACCESS_TRANSFER_WRITE_BIT,																								//VkAccessFlags						srcAccessMask
-					   m_testParams.m_testDepth ? VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT : VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,				//VkAccessFlags						dstAccessMask
+					   m_testParams.m_testDepth ? (VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT | VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT)
+												: (VK_ACCESS_COLOR_ATTACHMENT_READ_BIT | VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT),						//VkAccessFlags						dstAccessMask
 					   VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,																						//VkImageLayout						oldLayout
 					   m_testParams.m_testDepth ? VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL: VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,		//VkImageLayout						newLayout
 					   VK_PIPELINE_STAGE_TRANSFER_BIT,																								//VkPipelineStageFlags				srcStageMask
@@ -763,7 +764,8 @@
 	}
 
 	imageMemoryBarrier(m_testParams.m_testDepth ? m_depthTargetImage->object() : m_colorTargetImage->object(),										//VkImage							image
-					   m_testParams.m_testDepth ? VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT : VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,				//VkAccessFlags						srcAccessMask
+					   m_testParams.m_testDepth ? (VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT | VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT)
+												: (VK_ACCESS_COLOR_ATTACHMENT_READ_BIT | VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT),						//VkAccessFlags						dstAccessMask
 					   VK_ACCESS_TRANSFER_READ_BIT,																									//VkAccessFlags						dstAccessMask
 					   m_testParams.m_testDepth ? VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL : VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,		//VkImageLayout						oldLayout
 					   VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,																						//VkImageLayout						newLayout
@@ -792,6 +794,8 @@
 
 	submitCommandsAndWait(m_vkd, m_device, m_queue, *m_cmdBufferPrimary);
 
+	invalidateMappedMemoryRange(m_vkd, m_device, m_resultBuffer->getBoundMemory().getMemory(), m_resultBuffer->getBoundMemory().getOffset(), VK_WHOLE_SIZE);
+
 	tcu::ConstPixelBufferAccess					result(mapVkFormat(m_testParams.m_testDepth ? VK_FORMAT_D32_SFLOAT : VK_FORMAT_R8G8B8A8_UNORM), tcu::IVec3(WIDTH, HEIGHT, 1), m_resultBuffer->getBoundMemory().getHostPtr());
 
 	std::vector<float>							referenceData((m_testParams.m_testDepth ? 1 : 4) * WIDTH * HEIGHT, 0);
@@ -891,7 +895,7 @@
 
 	imageMemoryBarrier(m_colorTargetImage->object(),																				//VkImage							image
 					   VK_ACCESS_TRANSFER_WRITE_BIT,																				//VkAccessFlags						srcAccessMask
-					   VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,																		//VkAccessFlags						dstAccessMask
+					   VK_ACCESS_COLOR_ATTACHMENT_READ_BIT | VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,									//VkAccessFlags						dstAccessMask
 					   VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,																		//VkImageLayout						oldLayout
 					   VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,																	//VkImageLayout						newLayout
 					   VK_PIPELINE_STAGE_TRANSFER_BIT,																				//VkPipelineStageFlags				srcStageMask
@@ -976,6 +980,8 @@
 
 	submitCommandsAndWait(m_vkd, m_device, m_queue, *m_cmdBufferPrimary);
 
+	invalidateMappedMemoryRange(m_vkd, m_device, m_resultBuffer->getBoundMemory().getMemory(), m_resultBuffer->getBoundMemory().getOffset(), VK_WHOLE_SIZE);
+
 	tcu::ConstPixelBufferAccess			result(mapVkFormat(VK_FORMAT_R8G8B8A8_UNORM), tcu::IVec3(WIDTH, HEIGHT, 1), m_resultBuffer->getBoundMemory().getHostPtr());
 
 	std::vector<float>					referenceData(4 * WIDTH * HEIGHT, 0.5f);
@@ -1214,7 +1220,7 @@
 
 	imageMemoryBarrier(m_colorTargetImage->object(),																				//VkImage							image
 					   VK_ACCESS_TRANSFER_WRITE_BIT,																				//VkAccessFlags						srcAccessMask
-					   VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,																		//VkAccessFlags						dstAccessMask
+					   VK_ACCESS_COLOR_ATTACHMENT_READ_BIT | VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,									//VkAccessFlags						dstAccessMask
 					   VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,																		//VkImageLayout						oldLayout
 					   VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,																	//VkImageLayout						newLayout
 					   VK_PIPELINE_STAGE_TRANSFER_BIT,																				//VkPipelineStageFlags				srcStageMask
@@ -1228,9 +1234,13 @@
 
 	draw();
 
+	endRenderPass(m_vkd, *m_cmdBufferPrimary);
+
 	bufferMemoryBarrier(m_conditionalRenderingBuffer->object(), m_conditionalRenderingBufferOffset, sizeof(deUint32), VK_ACCESS_SHADER_WRITE_BIT, VK_ACCESS_CONDITIONAL_RENDERING_READ_BIT_EXT,
 						VK_PIPELINE_STAGE_VERTEX_SHADER_BIT, VK_PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT);
 
+	beginRenderPass(m_vkd, *m_cmdBufferPrimary, *m_renderPass, *m_framebuffer, makeRect2D(0, 0, WIDTH, HEIGHT));
+
 	m_vkd.cmdBindPipeline(*m_cmdBufferPrimary, VK_PIPELINE_BIND_POINT_GRAPHICS, *m_pipelineDraw);
 	m_vkd.cmdBindDescriptorSets(*m_cmdBufferPrimary, VK_PIPELINE_BIND_POINT_GRAPHICS, *m_pipelineLayout, 0, 1, &(*m_descriptorSet), 0, DE_NULL);
 
@@ -1241,7 +1251,7 @@
 	endRenderPass(m_vkd, *m_cmdBufferPrimary);
 
 	imageMemoryBarrier(m_colorTargetImage->object(),																				//VkImage							image
-					   VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,																		//VkAccessFlags						srcAccessMask
+					   VK_ACCESS_COLOR_ATTACHMENT_READ_BIT | VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,																		//VkAccessFlags						srcAccessMask
 					   VK_ACCESS_TRANSFER_READ_BIT,																					//VkAccessFlags						dstAccessMask
 					   VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,																	//VkImageLayout						oldLayout
 					   VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,																		//VkImageLayout						newLayout
@@ -1259,7 +1269,7 @@
 		vk::VK_ACCESS_HOST_READ_BIT,
 		VK_QUEUE_FAMILY_IGNORED,
 		VK_QUEUE_FAMILY_IGNORED,
-		m_conditionalRenderingBuffer->object(),
+		m_resultBuffer->object(),
 		0u,
 		VK_WHOLE_SIZE
 	};
@@ -1270,6 +1280,8 @@
 
 	submitCommandsAndWait(m_vkd, m_device, m_queue, *m_cmdBufferPrimary);
 
+	invalidateMappedMemoryRange(m_vkd, m_device, m_resultBuffer->getBoundMemory().getMemory(), m_resultBuffer->getBoundMemory().getOffset(), VK_WHOLE_SIZE);
+
 	tcu::ConstPixelBufferAccess			result(mapVkFormat(VK_FORMAT_R8G8B8A8_UNORM), tcu::IVec3(WIDTH, HEIGHT, 1), m_resultBuffer->getBoundMemory().getHostPtr());
 
 	std::vector<float>					referenceData(4 * WIDTH * HEIGHT, 0.0f);
@@ -1277,8 +1289,6 @@
 
 	m_testParams ? prepareReferenceImageOneColor(reference, tcu::Vec4(0,1,0,1)) : prepareReferenceImageOneColor(reference, clearColorInitial);
 
-	invalidateMappedMemoryRange(m_vkd, m_device, m_conditionalRenderingBuffer->getBoundMemory().getMemory(), m_conditionalRenderingBuffer->getBoundMemory().getOffset(), VK_WHOLE_SIZE);
-
 	if (!tcu::floatThresholdCompare(m_context.getTestContext().getLog(), "Comparison", "Comparison", reference, result, tcu::Vec4(0.01f), tcu::COMPARE_LOG_ON_ERROR))
 		return tcu::TestStatus::fail("Fail");
 
@@ -1400,6 +1410,26 @@
 	context.requireDeviceFunctionality("VK_EXT_conditional_rendering");
 }
 
+void checkFan (Context& context)
+{
+	checkSupport(context);
+
+	if (context.isDeviceFunctionalitySupported("VK_KHR_portability_subset") &&
+		!context.getPortabilitySubsetFeatures().triangleFans)
+	{
+		TCU_THROW(NotSupportedError, "VK_KHR_portability_subset: Triangle fans are not supported by this implementation");
+	}
+}
+
+void checkFanAndVertexStores (Context& context)
+{
+	checkFan(context);
+
+	const auto& features = context.getDeviceFeatures();
+	if (!features.vertexPipelineStoresAndAtomics)
+		TCU_THROW(NotSupportedError, "Vertex pipeline stores and atomics not supported");
+}
+
 } // unnamed namespace
 
 ConditionalRenderingDrawAndClearTests::ConditionalRenderingDrawAndClearTests (tcu::TestContext &testCtx)
@@ -1428,10 +1458,10 @@
 		depth->addChild(new InstanceFactory1WithSupport<ConditionalRenderingClearAttachmentsTestInstance, ClearTestParams, FunctionSupport0>(m_testCtx, tcu::NODETYPE_SELF_VALIDATE, "clear_attachment_twice_" + generateClearTestName(clearDepthTwiceGrid[testNdx]), "Depth clear test.", clearDepthTwiceGrid[testNdx], checkSupport));
 
 	for (int testNdx = 0; testNdx < DE_LENGTH_OF_ARRAY(drawTestGrid); testNdx++)
-		draw->addChild(new InstanceFactory1WithSupport<ConditionalRenderingDrawTestInstance, DrawTestParams, FunctionSupport0, AddProgramsDraw>(m_testCtx, tcu::NODETYPE_SELF_VALIDATE, "case_" + de::toString(testNdx), "Draw test.", AddProgramsDraw(), drawTestGrid[testNdx], checkSupport));
+		draw->addChild(new InstanceFactory1WithSupport<ConditionalRenderingDrawTestInstance, DrawTestParams, FunctionSupport0, AddProgramsDraw>(m_testCtx, tcu::NODETYPE_SELF_VALIDATE, "case_" + de::toString(testNdx), "Draw test.", AddProgramsDraw(), drawTestGrid[testNdx], checkFan));
 
-	draw->addChild(new InstanceFactory1WithSupport<ConditionalRenderingUpdateBufferWithDrawTestInstance, bool, FunctionSupport0, AddProgramsUpdateBufferUsingRendering>(m_testCtx, tcu::NODETYPE_SELF_VALIDATE, "update_with_rendering_no_discard", "Draw test.", AddProgramsUpdateBufferUsingRendering(), true, checkSupport));
-	draw->addChild(new InstanceFactory1WithSupport<ConditionalRenderingUpdateBufferWithDrawTestInstance, bool, FunctionSupport0, AddProgramsUpdateBufferUsingRendering>(m_testCtx, tcu::NODETYPE_SELF_VALIDATE, "update_with_rendering_discard", "Draw test.", AddProgramsUpdateBufferUsingRendering(), false, checkSupport));
+	draw->addChild(new InstanceFactory1WithSupport<ConditionalRenderingUpdateBufferWithDrawTestInstance, bool, FunctionSupport0, AddProgramsUpdateBufferUsingRendering>(m_testCtx, tcu::NODETYPE_SELF_VALIDATE, "update_with_rendering_no_discard", "Draw test.", AddProgramsUpdateBufferUsingRendering(), true, checkFanAndVertexStores));
+	draw->addChild(new InstanceFactory1WithSupport<ConditionalRenderingUpdateBufferWithDrawTestInstance, bool, FunctionSupport0, AddProgramsUpdateBufferUsingRendering>(m_testCtx, tcu::NODETYPE_SELF_VALIDATE, "update_with_rendering_discard", "Draw test.", AddProgramsUpdateBufferUsingRendering(), false, checkFanAndVertexStores));
 
 	clear->addChild(color);
 	clear->addChild(depth);
diff --git a/external/vulkancts/modules/vulkan/conditional_rendering/vktConditionalRenderingTestUtil.cpp b/external/vulkancts/modules/vulkan/conditional_rendering/vktConditionalRenderingTestUtil.cpp
index 4afc648..8f8d8c6 100644
--- a/external/vulkancts/modules/vulkan/conditional_rendering/vktConditionalRenderingTestUtil.cpp
+++ b/external/vulkancts/modules/vulkan/conditional_rendering/vktConditionalRenderingTestUtil.cpp
@@ -33,30 +33,32 @@
 
 void checkConditionalRenderingCapabilities (vkt::Context& context, const ConditionalData& data)
 {
-	if (!context.isDeviceFunctionalitySupported("VK_EXT_conditional_rendering"))
-		TCU_THROW(NotSupportedError, "Missing extension: VK_EXT_conditional_rendering");
+	context.requireDeviceFunctionality("VK_EXT_conditional_rendering");
 
-	if (data.conditionInherited)
-	{
-		const vk::VkPhysicalDeviceConditionalRenderingFeaturesEXT& conditionalRenderingFeatures = context.getConditionalRenderingFeaturesEXT();
-		if (!conditionalRenderingFeatures.inheritedConditionalRendering)
-		{
-			TCU_THROW(NotSupportedError, "Device does not support inherited conditional rendering");
-		}
-	}
+	const auto& conditionalRenderingFeatures = context.getConditionalRenderingFeaturesEXT();
+
+	if (conditionalRenderingFeatures.conditionalRendering == VK_FALSE)
+		TCU_FAIL("conditionalRendering feature not supported but VK_EXT_conditional_rendering present");
+
+	if (data.conditionInherited && !conditionalRenderingFeatures.inheritedConditionalRendering)
+		TCU_THROW(NotSupportedError, "Device does not support inherited conditional rendering");
 }
 
 de::SharedPtr<Draw::Buffer>	createConditionalRenderingBuffer (vkt::Context& context, const ConditionalData& data)
 {
-	const vk::DeviceInterface& vk = context.getDeviceInterface();
-	de::SharedPtr<Draw::Buffer> buffer = Draw::Buffer::createAndAlloc(vk, context.getDevice(),
-											Draw::BufferCreateInfo(sizeof(deUint32),
-															 vk::VK_BUFFER_USAGE_CONDITIONAL_RENDERING_BIT_EXT),
-											context.getDefaultAllocator(),
-											vk::MemoryRequirement::HostVisible);
+	// When padding the condition value, it will be surounded by two additional values with nonzero bytes in them.
+	const auto					bufferSize	= static_cast<vk::VkDeviceSize>(sizeof(data.conditionValue)) * (data.padConditionValue ? 3ull : 1ull);
+	const auto					dataOffset	= static_cast<vk::VkDeviceSize>(data.padConditionValue ? sizeof(data.conditionValue) : 0);
+	const vk::DeviceInterface&	vk			= context.getDeviceInterface();
+	de::SharedPtr<Draw::Buffer>	buffer		= Draw::Buffer::createAndAlloc(vk, context.getDevice(),
+												Draw::BufferCreateInfo(bufferSize,
+																 vk::VK_BUFFER_USAGE_CONDITIONAL_RENDERING_BIT_EXT),
+												context.getDefaultAllocator(),
+												vk::MemoryRequirement::HostVisible);
 
-	deUint8* conditionBufferPtr = reinterpret_cast<deUint8*>(buffer->getBoundMemory().getHostPtr());
-	*(deUint32*)(conditionBufferPtr) = data.conditionValue;
+	deUint8* conditionBufferPtr = reinterpret_cast<deUint8*>(buffer->getBoundMemory().getHostPtr()) + buffer->getBoundMemory().getOffset();
+	deMemset(conditionBufferPtr, 1, static_cast<size_t>(bufferSize));
+	deMemcpy(conditionBufferPtr + dataOffset, &data.conditionValue, sizeof(data.conditionValue));
 
 	vk::flushMappedMemoryRange(	vk,
 								context.getDevice(),
@@ -69,11 +71,11 @@
 void beginConditionalRendering (const vk::DeviceInterface& vk, vk::VkCommandBuffer cmdBuffer, Draw::Buffer& buffer, const ConditionalData& data)
 {
 	vk::VkConditionalRenderingBeginInfoEXT conditionalRenderingBeginInfo;
-	conditionalRenderingBeginInfo.sType = vk::VK_STRUCTURE_TYPE_CONDITIONAL_RENDERING_BEGIN_INFO_EXT;
-	conditionalRenderingBeginInfo.pNext = DE_NULL;
-	conditionalRenderingBeginInfo.buffer = buffer.object();
-	conditionalRenderingBeginInfo.offset = 0;
-	conditionalRenderingBeginInfo.flags = data.conditionInverted ? vk::VK_CONDITIONAL_RENDERING_INVERTED_BIT_EXT : 0;
+	conditionalRenderingBeginInfo.sType		= vk::VK_STRUCTURE_TYPE_CONDITIONAL_RENDERING_BEGIN_INFO_EXT;
+	conditionalRenderingBeginInfo.pNext		= nullptr;
+	conditionalRenderingBeginInfo.buffer	= buffer.object();
+	conditionalRenderingBeginInfo.offset	= static_cast<vk::VkDeviceSize>(data.padConditionValue ? sizeof(data.conditionValue) : 0u);
+	conditionalRenderingBeginInfo.flags		= data.conditionInverted ? vk::VK_CONDITIONAL_RENDERING_INVERTED_BIT_EXT : 0;
 
 	vk.cmdBeginConditionalRenderingEXT(cmdBuffer, &conditionalRenderingBeginInfo);
 }
@@ -87,7 +89,8 @@
 	{
 		str << "_secondary_buffer";
 	}
-	else if (c.conditionInherited)
+
+	if (c.conditionInherited)
 	{
 		str << "_inherited";
 	}
@@ -99,8 +102,13 @@
 		str << "_inverted";
 	}
 
+	if (c.padConditionValue)
+	{
+		str << "_padded";
+	}
+
 	return str;
 }
 
 }   // conditional
-}	// vkt
\ No newline at end of file
+}	// vkt
diff --git a/external/vulkancts/modules/vulkan/conditional_rendering/vktConditionalRenderingTestUtil.hpp b/external/vulkancts/modules/vulkan/conditional_rendering/vktConditionalRenderingTestUtil.hpp
index 45e3739..da159aa 100644
--- a/external/vulkancts/modules/vulkan/conditional_rendering/vktConditionalRenderingTestUtil.hpp
+++ b/external/vulkancts/modules/vulkan/conditional_rendering/vktConditionalRenderingTestUtil.hpp
@@ -42,32 +42,35 @@
 	bool		conditionInverted;
 	bool		conditionInherited;
 	deUint32	conditionValue;
+	bool		padConditionValue;
 
 	bool		expectCommandExecution;
 };
 
 static const ConditionalData s_testsData[] =
 {
-//  Primary	Secondary Inverted Inherited Val  Result
-	{ true,		false,	false,	false,	1,	true },
-	{ true,		false,	false,	false,	0,	false },
-	{ true,		false,	true,	false,	0,	true},
-	{ true,		false,	true,	false,	1,	false },
-	{ true,		false,	false,	true,	1,	true },
-	{ true,		false,	false,	true,	0,	false },
-	{ true,		false,	true,	true,	0,	true },
-	{ true,		false,	true,	true,	1,	false },
+	//	CONDPRI	CONDSEC	INV		INH		V	PAD		RES
+	{	true,	false,	false,	false,	1,	false,	true	},
+	{	true,	false,	false,	false,	0,	false,	false	},
+	{	true,	false,	true,	false,	0,	false,	true	},
+	{	true,	false,	true,	false,	1,	false,	false	},
+	{	true,	false,	false,	true,	1,	false,	true	},
+	{	true,	false,	false,	true,	0,	false,	false	},
+	{	true,	false,	true,	true,	0,	false,	true	},
+	{	true,	false,	true,	true,	1,	false,	false	},
 
-	{ false,	true,	false,	false,	1,	true },
-	{ false,	true,	false,	false,	0,	false },
-	{ false,	true,	true,	false,	0,	true},
-	{ false,	true,	true,	false,	1,	false },
+	{	false,	true,	false,	false,	1,	false,	true	},
+	{	false,	true,	false,	false,	0,	false,	false	},
+	{	false,	true,	true,	false,	0,	false,	true	},
+	{	false,	true,	true,	false,	1,	false,	false	},
 
-	/* Test that commands are executed correctly when secondary command buffer is constructed
-	 * with conditional rendering enabled but conditional rendering is not enabled when
-	 * executing it in the primary command buffer.
-	 */
-	{ false,	false,	false,	true,	1,	true },
+	// Test that inheritance does not affect outcome of secondary command buffer with conditional rendering or not.
+	{	false,	false,	false,	true,	0,	false,	true	},
+
+	{	false,	true,	false,	true,	1,	false,	true	},
+	{	false,	true,	false,	true,	0,	false,	false	},
+	{	false,	true,	true,	true,	1,	false,	false	},
+	{	false,	true,	true,	true,	0,	false,	true	},
 };
 
 std::ostream&				operator<< (std::ostream& str, ConditionalData const& c);
diff --git a/external/vulkancts/modules/vulkan/descriptor_indexing/vktDescriptorSetsIndexingTests.cpp b/external/vulkancts/modules/vulkan/descriptor_indexing/vktDescriptorSetsIndexingTests.cpp
index edb884e..dab2c5e 100644
--- a/external/vulkancts/modules/vulkan/descriptor_indexing/vktDescriptorSetsIndexingTests.cpp
+++ b/external/vulkancts/modules/vulkan/descriptor_indexing/vktDescriptorSetsIndexingTests.cpp
@@ -122,6 +122,7 @@
 	bool				updateAfterBind;	// whether a test will use update after bind feature
 	bool				calculateInLoop;	// perform calculation in a loop
 	bool				usesMipMaps;		// this makes a sense and affects in image test cases only
+	bool				minNonUniform;		// whether a test will use the minimum nonUniform decorations
 	deBool				fuzzyComparison;	// if true then a test will use fuzzy comparison, otherwise float threshold
 	float				thresholdValue;		// a threshold that will be used for both, float and fuzzy comparisons
 };
@@ -139,6 +140,7 @@
 	bool				updateAfterBind;
 	bool				calculateInLoop;
 	bool				usesMipMaps;
+	bool				minNonUniform;
 	deBool				fuzzyComparison;
 	float				thresholdValue;
 
@@ -161,6 +163,7 @@
 		, updateAfterBind						(caseParams.updateAfterBind)
 		, calculateInLoop						(caseParams.calculateInLoop)
 		, usesMipMaps							(caseParams.usesMipMaps)
+		, minNonUniform							(caseParams.minNonUniform)
 		, fuzzyComparison						(caseParams.fuzzyComparison ? true : false)
 		, thresholdValue						(caseParams.thresholdValue)
 	{
@@ -266,11 +269,16 @@
 	static bool					performWritesInVertex			(VkDescriptorType							descriptorType);
 
 	static bool					performWritesInVertex			(VkDescriptorType							descriptorType,
-																 const Context&						context);
-	static std::string			getShaderSource					(VkShaderStageFlagBits						shaderType,
+																 const Context&						        context);
+
+	static std::string			getShaderAsm					(VkShaderStageFlagBits						shaderType,
 																 const TestCaseParams&						testCaseParams,
 																 bool										allowVertexStoring);
 
+	static std::string			getShaderSource                 (VkShaderStageFlagBits						shaderType,
+		                                                         const TestCaseParams&						testCaseParams,
+		                                                         bool										allowVertexStoring);
+
 	static std::string			getColorAccess					(VkDescriptorType							descriptorType,
 																 const char*								indexVariableName,
 																 bool										usesMipMaps);
@@ -736,20 +744,20 @@
 	if (m_testParams.stageFlags & VK_SHADER_STAGE_COMPUTE_BIT)
 	{
 		++result;
-		const std::string name = ut::buildShaderName(VK_SHADER_STAGE_COMPUTE_BIT, m_testParams.descriptorType, m_testParams.updateAfterBind, m_testParams.calculateInLoop, false);
+		const std::string name = ut::buildShaderName(VK_SHADER_STAGE_COMPUTE_BIT, m_testParams.descriptorType, m_testParams.updateAfterBind, m_testParams.calculateInLoop, m_testParams.minNonUniform, false);
 		m_computeModule = vk::createShaderModule(m_vki, m_vkd, m_context.getBinaryCollection().get(name), (VkShaderModuleCreateFlags)0);
 	}
 	if (m_testParams.stageFlags & VK_SHADER_STAGE_FRAGMENT_BIT)
 	{
 		++result;
-		const std::string name = ut::buildShaderName(VK_SHADER_STAGE_FRAGMENT_BIT, m_testParams.descriptorType, m_testParams.updateAfterBind, m_testParams.calculateInLoop, m_testParams.allowVertexStoring);
+		const std::string name = ut::buildShaderName(VK_SHADER_STAGE_FRAGMENT_BIT, m_testParams.descriptorType, m_testParams.updateAfterBind, m_testParams.calculateInLoop, m_testParams.minNonUniform, m_testParams.allowVertexStoring);
 		m_fragmentModule = vk::createShaderModule(m_vki, m_vkd, m_context.getBinaryCollection().get(name), (VkShaderModuleCreateFlags)0);
 		log << tcu::TestLog::Message << "Finally used fragment shader: " << name << '\n' << tcu::TestLog::EndMessage;
 	}
 	if (m_testParams.stageFlags & VK_SHADER_STAGE_VERTEX_BIT)
 	{
 		++result;
-		const std::string name = ut::buildShaderName(VK_SHADER_STAGE_VERTEX_BIT, m_testParams.descriptorType, m_testParams.updateAfterBind, m_testParams.calculateInLoop, m_testParams.allowVertexStoring);
+		const std::string name = ut::buildShaderName(VK_SHADER_STAGE_VERTEX_BIT, m_testParams.descriptorType, m_testParams.updateAfterBind, m_testParams.calculateInLoop, m_testParams.minNonUniform, m_testParams.allowVertexStoring);
 		m_vertexModule = vk::createShaderModule(m_vki, m_vkd, m_context.getBinaryCollection().get(name), (VkShaderModuleCreateFlags)0);
 		log << tcu::TestLog::Message << "Finally used vertex shader: " << name << '\n' << tcu::TestLog::EndMessage;
 	}
@@ -1275,7 +1283,7 @@
 				VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER,				// VkStructureType		sType
 				DE_NULL,											// const void*			pNext
 				VK_ACCESS_TRANSFER_WRITE_BIT,						// VkAccessFlags		srcAccessMask
-				VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,				// VkAccessFlags		dstAccessMask
+				VK_ACCESS_COLOR_ATTACHMENT_READ_BIT | VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, // VkAccessFlags		dstAccessMask
 				VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,				// VkImageLayout		oldLayout
 				VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,			// VkImageLayout		newLayout
 				VK_QUEUE_FAMILY_IGNORED,							// uint32_t				srcQueueFamilyIndex
@@ -1759,6 +1767,984 @@
 	return result;
 }
 
+std::string CommonDescriptorInstance::getShaderAsm					(VkShaderStageFlagBits						shaderType,
+																	 const TestCaseParams&						testCaseParams,
+																	 bool										allowVertexStoring)
+{
+	std::stringstream	s;
+	switch (shaderType)
+	{
+		case VK_SHADER_STAGE_VERTEX_BIT:
+			switch (testCaseParams.descriptorType)
+			{
+				case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER:
+				case VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER:
+				case VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER:
+					s << "               OpCapability Shader\n";
+					s << "               OpCapability SampledBuffer\n";
+					s << "          %1 = OpExtInstImport \"GLSL.std.450\"\n";
+					s << "               OpMemoryModel Logical GLSL450\n";
+					s << "               OpEntryPoint Vertex %main \"main\" %_ %position %in_position %normalpos %in_normalpos %vIndex %gl_VertexIndex %rIndex %index %gIndex %bIndex %aIndex\n";
+					s << "               OpSource GLSL 450\n";
+					s << "               OpSourceExtension \"GL_EXT_nonuniform_qualifier\"\n";
+					s << "               OpSourceExtension \"GL_EXT_texture_buffer\"\n";
+					s << "               OpName %main \"main\"\n";
+					s << "               OpName %gl_PerVertex \"gl_PerVertex\"\n";
+					s << "               OpMemberName %gl_PerVertex 0 \"gl_Position\"\n";
+					s << "               OpMemberName %gl_PerVertex 1 \"gl_PointSize\"\n";
+					s << "               OpMemberName %gl_PerVertex 2 \"gl_ClipDistance\"\n";
+					s << "               OpMemberName %gl_PerVertex 3 \"gl_CullDistance\"\n";
+					s << "               OpName %_ \"\"\n";
+					s << "               OpName %position \"position\"\n";
+					s << "               OpName %in_position \"in_position\"\n";
+					s << "               OpName %normalpos \"normalpos\"\n";
+					s << "               OpName %in_normalpos \"in_normalpos\"\n";
+					s << "               OpName %vIndex \"vIndex\"\n";
+					s << "               OpName %gl_VertexIndex \"gl_VertexIndex\"\n";
+					s << "               OpName %rIndex \"rIndex\"\n";
+					s << "               OpName %index \"index\"\n";
+					s << "               OpName %gIndex \"gIndex\"\n";
+					s << "               OpName %bIndex \"bIndex\"\n";
+					s << "               OpName %aIndex \"aIndex\"\n";
+					s << "               OpMemberDecorate %gl_PerVertex 0 BuiltIn Position\n";
+					s << "               OpMemberDecorate %gl_PerVertex 1 BuiltIn PointSize\n";
+					s << "               OpMemberDecorate %gl_PerVertex 2 BuiltIn ClipDistance\n";
+					s << "               OpMemberDecorate %gl_PerVertex 3 BuiltIn CullDistance\n";
+					s << "               OpDecorate %gl_PerVertex Block\n";
+					s << "               OpDecorate %position Location 0\n";
+					s << "               OpDecorate %in_position Location 0\n";
+					s << "               OpDecorate %normalpos Location 1\n";
+					s << "               OpDecorate %in_normalpos Location 1\n";
+					s << "               OpDecorate %vIndex Location 2\n";
+					s << "               OpDecorate %gl_VertexIndex BuiltIn VertexIndex\n";
+					s << "               OpDecorate %rIndex Location 3\n";
+					s << "               OpDecorate %index Location 2\n";
+					s << "               OpDecorate %gIndex Location 4\n";
+					s << "               OpDecorate %bIndex Location 5\n";
+					s << "               OpDecorate %aIndex Location 6\n";
+					s << "       %void = OpTypeVoid\n";
+					s << "          %3 = OpTypeFunction %void\n";
+					s << "      %float = OpTypeFloat 32\n";
+					s << "    %v4float = OpTypeVector %float 4\n";
+					s << "       %uint = OpTypeInt 32 0\n";
+					s << "     %uint_1 = OpConstant %uint 1\n";
+					s << "%_arr_float_uint_1 = OpTypeArray %float %uint_1\n";
+					s << "%gl_PerVertex = OpTypeStruct %v4float %float %_arr_float_uint_1 %_arr_float_uint_1\n";
+					s << "%_ptr_Output_gl_PerVertex = OpTypePointer Output %gl_PerVertex\n";
+					s << "          %_ = OpVariable %_ptr_Output_gl_PerVertex Output\n";
+					s << "        %int = OpTypeInt 32 1\n";
+					s << "      %int_1 = OpConstant %int 1\n";
+					s << "%float_0_200000003 = OpConstant %float 0.200000003\n";
+					s << "%_ptr_Output_float = OpTypePointer Output %float\n";
+					s << "%_ptr_Output_v4float = OpTypePointer Output %v4float\n";
+					s << "   %position = OpVariable %_ptr_Output_v4float Output\n";
+					s << "%_ptr_Input_v4float = OpTypePointer Input %v4float\n";
+					s << "%in_position = OpVariable %_ptr_Input_v4float Input\n";
+					s << "    %v2float = OpTypeVector %float 2\n";
+					s << "%_ptr_Output_v2float = OpTypePointer Output %v2float\n";
+					s << "  %normalpos = OpVariable %_ptr_Output_v2float Output\n";
+					s << "%_ptr_Input_v2float = OpTypePointer Input %v2float\n";
+					s << "%in_normalpos = OpVariable %_ptr_Input_v2float Input\n";
+					s << "      %int_0 = OpConstant %int 0\n";
+					s << "%_ptr_Output_int = OpTypePointer Output %int\n";
+					s << "     %vIndex = OpVariable %_ptr_Output_int Output\n";
+					s << "%_ptr_Input_int = OpTypePointer Input %int\n";
+					s << "%gl_VertexIndex = OpVariable %_ptr_Input_int Input\n";
+					s << "     %rIndex = OpVariable %_ptr_Output_int Output\n";
+					s << "      %v4int = OpTypeVector %int 4\n";
+					s << "%_ptr_Input_v4int = OpTypePointer Input %v4int\n";
+					s << "      %index = OpVariable %_ptr_Input_v4int Input\n";
+					s << "     %uint_0 = OpConstant %uint 0\n";
+					s << "     %gIndex = OpVariable %_ptr_Output_int Output\n";
+					s << "     %bIndex = OpVariable %_ptr_Output_int Output\n";
+					s << "     %uint_2 = OpConstant %uint 2\n";
+					s << "     %aIndex = OpVariable %_ptr_Output_int Output\n";
+					s << "     %uint_3 = OpConstant %uint 3\n";
+					s << "       %main = OpFunction %void None %3\n";
+					s << "          %5 = OpLabel\n";
+					s << "         %18 = OpAccessChain %_ptr_Output_float %_ %int_1\n";
+					s << "               OpStore %18 %float_0_200000003\n";
+					s << "         %23 = OpLoad %v4float %in_position\n";
+					s << "               OpStore %position %23\n";
+					s << "         %29 = OpLoad %v2float %in_normalpos\n";
+					s << "               OpStore %normalpos %29\n";
+					s << "         %31 = OpLoad %v4float %position\n";
+					s << "         %32 = OpAccessChain %_ptr_Output_v4float %_ %int_0\n";
+					s << "               OpStore %32 %31\n";
+					s << "         %37 = OpLoad %int %gl_VertexIndex\n";
+					s << "               OpStore %vIndex %37\n";
+					s << "         %43 = OpAccessChain %_ptr_Input_int %index %uint_0\n";
+					s << "         %44 = OpLoad %int %43\n";
+					s << "               OpStore %rIndex %44\n";
+					s << "         %46 = OpAccessChain %_ptr_Input_int %index %uint_1\n";
+					s << "         %47 = OpLoad %int %46\n";
+					s << "               OpStore %gIndex %47\n";
+					s << "         %50 = OpAccessChain %_ptr_Input_int %index %uint_2\n";
+					s << "         %51 = OpLoad %int %50\n";
+					s << "               OpStore %bIndex %51\n";
+					s << "         %54 = OpAccessChain %_ptr_Input_int %index %uint_3\n";
+					s << "         %55 = OpLoad %int %54\n";
+					s << "               OpStore %aIndex %55\n";
+					s << "               OpReturn\n";
+					s << "               OpFunctionEnd\n";
+					break;
+				case VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER:
+					s << "               OpCapability Shader\n";
+					s << "               OpCapability ImageBuffer\n";
+					if (allowVertexStoring)
+					{
+						s << "               OpCapability ShaderNonUniform\n";
+						s << "               OpCapability RuntimeDescriptorArray\n";
+						s << "               OpCapability StorageTexelBufferArrayNonUniformIndexing\n";
+						s << "               OpExtension \"SPV_EXT_descriptor_indexing\"\n";
+					}
+					s << "          %1 = OpExtInstImport \"GLSL.std.450\"\n";
+					s << "               OpMemoryModel Logical GLSL450\n";
+					s << "               OpEntryPoint Vertex %main \"main\" %_ %position %in_position %normalpos %in_normalpos %vIndex %gl_VertexIndex %rIndex %index %gIndex %bIndex %aIndex %data\n";
+					s << "               OpSource GLSL 450\n";
+					s << "               OpSourceExtension \"GL_EXT_nonuniform_qualifier\"\n";
+					s << "               OpName %main \"main\"\n";
+					s << "               OpName %gl_PerVertex \"gl_PerVertex\"\n";
+					s << "               OpMemberName %gl_PerVertex 0 \"gl_Position\"\n";
+					s << "               OpMemberName %gl_PerVertex 1 \"gl_PointSize\"\n";
+					s << "               OpMemberName %gl_PerVertex 2 \"gl_ClipDistance\"\n";
+					s << "               OpMemberName %gl_PerVertex 3 \"gl_CullDistance\"\n";
+					s << "               OpName %_ \"\"\n";
+					s << "               OpName %position \"position\"\n";
+					s << "               OpName %in_position \"in_position\"\n";
+					s << "               OpName %normalpos \"normalpos\"\n";
+					s << "               OpName %in_normalpos \"in_normalpos\"\n";
+					s << "               OpName %vIndex \"vIndex\"\n";
+					s << "               OpName %gl_VertexIndex \"gl_VertexIndex\"\n";
+					s << "               OpName %rIndex \"rIndex\"\n";
+					s << "               OpName %index \"index\"\n";
+					s << "               OpName %gIndex \"gIndex\"\n";
+					s << "               OpName %bIndex \"bIndex\"\n";
+					s << "               OpName %aIndex \"aIndex\"\n";
+					s << "               OpName %data \"data\"\n";
+					s << "               OpMemberDecorate %gl_PerVertex 0 BuiltIn Position\n";
+					s << "               OpMemberDecorate %gl_PerVertex 1 BuiltIn PointSize\n";
+					s << "               OpMemberDecorate %gl_PerVertex 2 BuiltIn ClipDistance\n";
+					s << "               OpMemberDecorate %gl_PerVertex 3 BuiltIn CullDistance\n";
+					s << "               OpDecorate %gl_PerVertex Block\n";
+					s << "               OpDecorate %position Location 0\n";
+					s << "               OpDecorate %in_position Location 0\n";
+					s << "               OpDecorate %normalpos Location 1\n";
+					s << "               OpDecorate %in_normalpos Location 1\n";
+					s << "               OpDecorate %vIndex Location 2\n";
+					s << "               OpDecorate %gl_VertexIndex BuiltIn VertexIndex\n";
+					s << "               OpDecorate %rIndex Location 3\n";
+					s << "               OpDecorate %index Location 2\n";
+					s << "               OpDecorate %gIndex Location 4\n";
+					s << "               OpDecorate %bIndex Location 5\n";
+					s << "               OpDecorate %aIndex Location 6\n";
+					s << "               OpDecorate %data DescriptorSet 0\n";
+					s << "               OpDecorate %data Binding 4\n";
+					if (allowVertexStoring)
+					{
+						// s << "               OpDecorate %66 NonUniform\n";
+						// s << "               OpDecorate %68 NonUniform\n";
+						s << "               OpDecorate %69 NonUniform\n";
+						// s << "               OpDecorate %71 NonUniform\n";
+						// s << "               OpDecorate %72 NonUniform\n";
+						s << "               OpDecorate %73 NonUniform\n";
+					}
+					s << "       %void = OpTypeVoid\n";
+					s << "          %3 = OpTypeFunction %void\n";
+					s << "      %float = OpTypeFloat 32\n";
+					s << "    %v4float = OpTypeVector %float 4\n";
+					s << "       %uint = OpTypeInt 32 0\n";
+					s << "     %uint_1 = OpConstant %uint 1\n";
+					s << "%_arr_float_uint_1 = OpTypeArray %float %uint_1\n";
+					s << "%gl_PerVertex = OpTypeStruct %v4float %float %_arr_float_uint_1 %_arr_float_uint_1\n";
+					s << "%_ptr_Output_gl_PerVertex = OpTypePointer Output %gl_PerVertex\n";
+					s << "          %_ = OpVariable %_ptr_Output_gl_PerVertex Output\n";
+					s << "        %int = OpTypeInt 32 1\n";
+					s << "      %int_1 = OpConstant %int 1\n";
+					s << "%float_0_200000003 = OpConstant %float 0.200000003\n";
+					s << "%_ptr_Output_float = OpTypePointer Output %float\n";
+					s << "%_ptr_Output_v4float = OpTypePointer Output %v4float\n";
+					s << "   %position = OpVariable %_ptr_Output_v4float Output\n";
+					s << "%_ptr_Input_v4float = OpTypePointer Input %v4float\n";
+					s << "%in_position = OpVariable %_ptr_Input_v4float Input\n";
+					s << "    %v2float = OpTypeVector %float 2\n";
+					s << "%_ptr_Output_v2float = OpTypePointer Output %v2float\n";
+					s << "  %normalpos = OpVariable %_ptr_Output_v2float Output\n";
+					s << "%_ptr_Input_v2float = OpTypePointer Input %v2float\n";
+					s << "%in_normalpos = OpVariable %_ptr_Input_v2float Input\n";
+					s << "      %int_0 = OpConstant %int 0\n";
+					s << "%_ptr_Output_int = OpTypePointer Output %int\n";
+					s << "     %vIndex = OpVariable %_ptr_Output_int Output\n";
+					s << "%_ptr_Input_int = OpTypePointer Input %int\n";
+					s << "%gl_VertexIndex = OpVariable %_ptr_Input_int Input\n";
+					s << "     %rIndex = OpVariable %_ptr_Output_int Output\n";
+					s << "      %v4int = OpTypeVector %int 4\n";
+					s << "%_ptr_Input_v4int = OpTypePointer Input %v4int\n";
+					s << "      %index = OpVariable %_ptr_Input_v4int Input\n";
+					s << "     %uint_0 = OpConstant %uint 0\n";
+					s << "     %gIndex = OpVariable %_ptr_Output_int Output\n";
+					s << "     %bIndex = OpVariable %_ptr_Output_int Output\n";
+					s << "     %uint_2 = OpConstant %uint 2\n";
+					s << "     %aIndex = OpVariable %_ptr_Output_int Output\n";
+					s << "     %uint_3 = OpConstant %uint 3\n";
+					if (allowVertexStoring)
+					{
+						s << "        %bool = OpTypeBool\n";
+						s << "          %61 = OpTypeImage %float Buffer 0 0 0 2 Rgba32f\n";
+						s << " %_runtimearr_61 = OpTypeRuntimeArray %61\n";
+						s << " %_ptr_UniformConstant__runtimearr_61 = OpTypePointer UniformConstant %_runtimearr_61\n";
+						s << "        %data = OpVariable %_ptr_UniformConstant__runtimearr_61 UniformConstant\n";
+						s << " %_ptr_UniformConstant_61 = OpTypePointer UniformConstant %61\n";
+					}
+					else
+					{
+						s << "         %56 = OpTypeImage %float Buffer 0 0 0 2 Rgba32f\n";
+						s << "%_arr_56_uint_1 = OpTypeArray %56 %uint_1\n";
+						s << "%_ptr_UniformConstant__arr_56_uint_1 = OpTypePointer UniformConstant %_arr_56_uint_1\n";
+						s << "       %data = OpVariable %_ptr_UniformConstant__arr_56_uint_1 UniformConstant\n";
+					}
+					s << "       %main = OpFunction %void None %3\n";
+					s << "          %5 = OpLabel\n";
+					s << "         %18 = OpAccessChain %_ptr_Output_float %_ %int_1\n";
+					s << "               OpStore %18 %float_0_200000003\n";
+					s << "         %23 = OpLoad %v4float %in_position\n";
+					s << "               OpStore %position %23\n";
+					s << "         %29 = OpLoad %v2float %in_normalpos\n";
+					s << "               OpStore %normalpos %29\n";
+					s << "         %31 = OpLoad %v4float %position\n";
+					s << "         %32 = OpAccessChain %_ptr_Output_v4float %_ %int_0\n";
+					s << "               OpStore %32 %31\n";
+					s << "         %37 = OpLoad %int %gl_VertexIndex\n";
+					s << "               OpStore %vIndex %37\n";
+					s << "         %43 = OpAccessChain %_ptr_Input_int %index %uint_0\n";
+					s << "         %44 = OpLoad %int %43\n";
+					s << "               OpStore %rIndex %44\n";
+					s << "         %46 = OpAccessChain %_ptr_Input_int %index %uint_1\n";
+					s << "         %47 = OpLoad %int %46\n";
+					s << "               OpStore %gIndex %47\n";
+					s << "         %50 = OpAccessChain %_ptr_Input_int %index %uint_2\n";
+					s << "         %51 = OpLoad %int %50\n";
+					s << "               OpStore %bIndex %51\n";
+					s << "         %54 = OpAccessChain %_ptr_Input_int %index %uint_3\n";
+					s << "         %55 = OpLoad %int %54\n";
+					s << "               OpStore %aIndex %55\n";
+					if (allowVertexStoring)
+					{
+						s << "          %56 = OpLoad %int %gIndex\n";
+						s << "          %58 = OpINotEqual %bool %56 %int_0\n";
+						s << "                OpSelectionMerge %60 None\n";
+						s << "                OpBranchConditional %58 %59 %60\n";
+						s << "          %59 = OpLabel\n";
+						s << "          %65 = OpLoad %int %gIndex\n";
+						s << "          %66 = OpCopyObject %int %65\n";
+						s << "          %68 = OpAccessChain %_ptr_UniformConstant_61 %data %66\n";
+						s << "          %69 = OpLoad %61 %68\n";
+						s << "          %70 = OpLoad %int %rIndex\n";
+						s << "          %71 = OpCopyObject %int %70\n";
+						s << "          %72 = OpAccessChain %_ptr_UniformConstant_61 %data %71\n";
+						s << "          %73 = OpLoad %61 %72\n";
+						s << "          %74 = OpImageRead %v4float %73 %int_0\n";
+						s << "                OpImageWrite %69 %int_1 %74\n";
+						s << "                OpBranch %60\n";
+						s << "          %60 = OpLabel\n";
+					}
+					s << "               OpReturn\n";
+					s << "               OpFunctionEnd\n";
+					break;
+				case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER:
+					s << "               OpCapability Shader\n";
+					if (allowVertexStoring)
+					{
+						s << "               OpCapability ShaderNonUniform\n";
+						s << "               OpCapability RuntimeDescriptorArray\n";
+						s << "               OpCapability StorageBufferArrayNonUniformIndexing\n";
+						s << "               OpExtension \"SPV_EXT_descriptor_indexing\"\n";
+					}
+					s << "          %1 = OpExtInstImport \"GLSL.std.450\"\n";
+					s << "               OpMemoryModel Logical GLSL450\n";
+					s << "               OpEntryPoint Vertex %main \"main\" %_ %position %in_position %normalpos %in_normalpos %vIndex %gl_VertexIndex %rIndex %index %gIndex %bIndex %aIndex %data\n";
+					s << "               OpSource GLSL 450\n";
+					s << "               OpSourceExtension \"GL_EXT_nonuniform_qualifier\"\n";
+					s << "               OpName %main \"main\"\n";
+					s << "               OpName %gl_PerVertex \"gl_PerVertex\"\n";
+					s << "               OpMemberName %gl_PerVertex 0 \"gl_Position\"\n";
+					s << "               OpMemberName %gl_PerVertex 1 \"gl_PointSize\"\n";
+					s << "               OpMemberName %gl_PerVertex 2 \"gl_ClipDistance\"\n";
+					s << "               OpMemberName %gl_PerVertex 3 \"gl_CullDistance\"\n";
+					s << "               OpName %_ \"\"\n";
+					s << "               OpName %position \"position\"\n";
+					s << "               OpName %in_position \"in_position\"\n";
+					s << "               OpName %normalpos \"normalpos\"\n";
+					s << "               OpName %in_normalpos \"in_normalpos\"\n";
+					s << "               OpName %vIndex \"vIndex\"\n";
+					s << "               OpName %gl_VertexIndex \"gl_VertexIndex\"\n";
+					s << "               OpName %rIndex \"rIndex\"\n";
+					s << "               OpName %index \"index\"\n";
+					s << "               OpName %gIndex \"gIndex\"\n";
+					s << "               OpName %bIndex \"bIndex\"\n";
+					s << "               OpName %aIndex \"aIndex\"\n";
+					s << "               OpName %Data \"Data\"\n";
+					s << "               OpMemberName %Data 0 \"cnew\"\n";
+					s << "               OpMemberName %Data 1 \"cold\"\n";
+					s << "               OpName %data \"data\"\n";
+					s << "               OpMemberDecorate %gl_PerVertex 0 BuiltIn Position\n";
+					s << "               OpMemberDecorate %gl_PerVertex 1 BuiltIn PointSize\n";
+					s << "               OpMemberDecorate %gl_PerVertex 2 BuiltIn ClipDistance\n";
+					s << "               OpMemberDecorate %gl_PerVertex 3 BuiltIn CullDistance\n";
+					s << "               OpDecorate %gl_PerVertex Block\n";
+					s << "               OpDecorate %position Location 0\n";
+					s << "               OpDecorate %in_position Location 0\n";
+					s << "               OpDecorate %normalpos Location 1\n";
+					s << "               OpDecorate %in_normalpos Location 1\n";
+					s << "               OpDecorate %vIndex Location 2\n";
+					s << "               OpDecorate %gl_VertexIndex BuiltIn VertexIndex\n";
+					s << "               OpDecorate %rIndex Location 3\n";
+					s << "               OpDecorate %index Location 2\n";
+					s << "               OpDecorate %gIndex Location 4\n";
+					s << "               OpDecorate %bIndex Location 5\n";
+					s << "               OpDecorate %aIndex Location 6\n";
+					s << "               OpMemberDecorate %Data 0 Offset 0\n";
+					s << "               OpMemberDecorate %Data 1 Offset 16\n";
+					s << "               OpDecorate %Data Block\n";
+					s << "               OpDecorate %data DescriptorSet 0\n";
+					s << "               OpDecorate %data Binding 2\n";
+					if (allowVertexStoring)
+					{
+						// s << "               OpDecorate %66 NonUniform\n";
+						// s << "               OpDecorate %68 NonUniform\n";
+						s << "               OpDecorate %70 NonUniform\n";
+						// s << "               OpDecorate %71 NonUniform\n";
+						s << "               OpDecorate %72 NonUniform\n";
+					}
+					s << "       %void = OpTypeVoid\n";
+					s << "          %3 = OpTypeFunction %void\n";
+					s << "      %float = OpTypeFloat 32\n";
+					s << "    %v4float = OpTypeVector %float 4\n";
+					s << "       %uint = OpTypeInt 32 0\n";
+					s << "     %uint_1 = OpConstant %uint 1\n";
+					s << "%_arr_float_uint_1 = OpTypeArray %float %uint_1\n";
+					s << "%gl_PerVertex = OpTypeStruct %v4float %float %_arr_float_uint_1 %_arr_float_uint_1\n";
+					s << "%_ptr_Output_gl_PerVertex = OpTypePointer Output %gl_PerVertex\n";
+					s << "          %_ = OpVariable %_ptr_Output_gl_PerVertex Output\n";
+					s << "        %int = OpTypeInt 32 1\n";
+					s << "      %int_1 = OpConstant %int 1\n";
+					s << "%float_0_200000003 = OpConstant %float 0.200000003\n";
+					s << "%_ptr_Output_float = OpTypePointer Output %float\n";
+					s << "%_ptr_Output_v4float = OpTypePointer Output %v4float\n";
+					s << "   %position = OpVariable %_ptr_Output_v4float Output\n";
+					s << "%_ptr_Input_v4float = OpTypePointer Input %v4float\n";
+					s << "%in_position = OpVariable %_ptr_Input_v4float Input\n";
+					s << "    %v2float = OpTypeVector %float 2\n";
+					s << "%_ptr_Output_v2float = OpTypePointer Output %v2float\n";
+					s << "  %normalpos = OpVariable %_ptr_Output_v2float Output\n";
+					s << "%_ptr_Input_v2float = OpTypePointer Input %v2float\n";
+					s << "%in_normalpos = OpVariable %_ptr_Input_v2float Input\n";
+					s << "      %int_0 = OpConstant %int 0\n";
+					s << "%_ptr_Output_int = OpTypePointer Output %int\n";
+					s << "     %vIndex = OpVariable %_ptr_Output_int Output\n";
+					s << "%_ptr_Input_int = OpTypePointer Input %int\n";
+					s << "%gl_VertexIndex = OpVariable %_ptr_Input_int Input\n";
+					s << "     %rIndex = OpVariable %_ptr_Output_int Output\n";
+					s << "      %v4int = OpTypeVector %int 4\n";
+					s << "%_ptr_Input_v4int = OpTypePointer Input %v4int\n";
+					s << "      %index = OpVariable %_ptr_Input_v4int Input\n";
+					s << "     %uint_0 = OpConstant %uint 0\n";
+					s << "     %gIndex = OpVariable %_ptr_Output_int Output\n";
+					s << "     %bIndex = OpVariable %_ptr_Output_int Output\n";
+					s << "     %uint_2 = OpConstant %uint 2\n";
+					s << "     %aIndex = OpVariable %_ptr_Output_int Output\n";
+					s << "     %uint_3 = OpConstant %uint 3\n";
+					s << "       %Data = OpTypeStruct %v4float %v4float\n";
+					if (allowVertexStoring)
+					{
+						s << "       %bool = OpTypeBool\n";
+						s << "%_runtimearr_Data = OpTypeRuntimeArray %Data\n";
+						s << "%_ptr_StorageBuffer__runtimearr_Data = OpTypePointer StorageBuffer %_runtimearr_Data\n";
+						s << "       %data = OpVariable  %_ptr_StorageBuffer__runtimearr_Data StorageBuffer\n";
+						s << "%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float\n";
+					}
+					else
+					{
+						s << "%_arr_Data_uint_1 = OpTypeArray %Data %uint_1\n";
+						s << "%_ptr_StorageBuffer__arr_Data_uint_1 = OpTypePointer StorageBuffer %_arr_Data_uint_1\n";
+						s << "       %data = OpVariable %_ptr_StorageBuffer__arr_Data_uint_1 StorageBuffer\n";
+					}
+					s << "       %main = OpFunction %void None %3\n";
+					s << "          %5 = OpLabel\n";
+					s << "         %18 = OpAccessChain %_ptr_Output_float %_ %int_1\n";
+					s << "               OpStore %18 %float_0_200000003\n";
+					s << "         %23 = OpLoad %v4float %in_position\n";
+					s << "               OpStore %position %23\n";
+					s << "         %29 = OpLoad %v2float %in_normalpos\n";
+					s << "               OpStore %normalpos %29\n";
+					s << "         %31 = OpLoad %v4float %position\n";
+					s << "         %32 = OpAccessChain %_ptr_Output_v4float %_ %int_0\n";
+					s << "               OpStore %32 %31\n";
+					s << "         %37 = OpLoad %int %gl_VertexIndex\n";
+					s << "               OpStore %vIndex %37\n";
+					s << "         %43 = OpAccessChain %_ptr_Input_int %index %uint_0\n";
+					s << "         %44 = OpLoad %int %43\n";
+					s << "               OpStore %rIndex %44\n";
+					s << "         %46 = OpAccessChain %_ptr_Input_int %index %uint_1\n";
+					s << "         %47 = OpLoad %int %46\n";
+					s << "               OpStore %gIndex %47\n";
+					s << "         %50 = OpAccessChain %_ptr_Input_int %index %uint_2\n";
+					s << "         %51 = OpLoad %int %50\n";
+					s << "               OpStore %bIndex %51\n";
+					s << "         %54 = OpAccessChain %_ptr_Input_int %index %uint_3\n";
+					s << "         %55 = OpLoad %int %54\n";
+					s << "               OpStore %aIndex %55\n";
+					if (allowVertexStoring)
+					{
+						s << "          %56 = OpLoad %int %gIndex\n";
+						s << "          %58 = OpINotEqual %bool %56 %int_0\n";
+						s << "                OpSelectionMerge %60 None\n";
+						s << "                OpBranchConditional %58 %59 %60\n";
+						s << "          %59 = OpLabel\n";
+						s << "          %65 = OpLoad %int %gIndex\n";
+						s << "          %66 = OpCopyObject %int %65\n";
+						s << "          %67 = OpLoad %int %rIndex\n";
+						s << "          %68 = OpCopyObject %int %67\n";
+						s << "          %70 = OpAccessChain %_ptr_StorageBuffer_v4float %data %68 %int_1\n";
+						s << "          %71 = OpLoad %v4float %70\n";
+						s << "          %72 = OpAccessChain %_ptr_StorageBuffer_v4float %data %66 %int_0\n";
+						s << "                OpStore %72 %71\n";
+						s << "                OpBranch %60\n";
+						s << "          %60 = OpLabel\n";
+					}
+					s << "               OpReturn\n";
+					s << "               OpFunctionEnd\n";
+					break;
+				default:
+					TCU_THROW(InternalError, "Unexpected descriptor type");
+					break;
+			}
+			break;
+		case VK_SHADER_STAGE_FRAGMENT_BIT:
+			switch (testCaseParams.descriptorType)
+			{
+				case VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER:
+					s << "               OpCapability Shader\n";
+					if (testCaseParams.usesMipMaps)
+					{
+						s << "               OpCapability ImageQuery\n";
+					}
+					s << "               OpCapability ShaderNonUniform\n";
+					s << "               OpCapability RuntimeDescriptorArray\n";
+					s << "               OpCapability SampledImageArrayNonUniformIndexing\n";
+					s << "               OpExtension \"SPV_EXT_descriptor_indexing\"\n";
+					s << "          %1 = OpExtInstImport \"GLSL.std.450\"\n";
+					s << "               OpMemoryModel Logical GLSL450\n";
+					s << "               OpEntryPoint Fragment %main \"main\" %FragColor %data %rIndex %position %normalpos %vIndex %gIndex %bIndex %aIndex\n";
+					s << "               OpExecutionMode %main OriginUpperLeft\n";
+					s << "               OpSource GLSL 450\n";
+					s << "               OpSourceExtension \"GL_EXT_nonuniform_qualifier\"\n";
+					s << "               OpSourceExtension \"GL_EXT_texture_buffer\"\n";
+					s << "               OpName %main \"main\"\n";
+					s << "               OpName %FragColor \"FragColor\"\n";
+					s << "               OpName %data \"data\"\n";
+					s << "               OpName %rIndex \"rIndex\"\n";
+					s << "               OpName %position \"position\"\n";
+					s << "               OpName %normalpos \"normalpos\"\n";
+					s << "               OpName %vIndex \"vIndex\"\n";
+					s << "               OpName %gIndex \"gIndex\"\n";
+					s << "               OpName %bIndex \"bIndex\"\n";
+					s << "               OpName %aIndex \"aIndex\"\n";
+					s << "               OpDecorate %FragColor Location 0\n";
+					s << "               OpDecorate %data DescriptorSet 0\n";
+					s << "               OpDecorate %data Binding 7\n";
+					s << "               OpDecorate %rIndex Flat\n";
+					s << "               OpDecorate %rIndex Location 3\n";
+					// s << "               OpDecorate %19 NonUniform\n";
+					// s << "               OpDecorate %21 NonUniform\n";
+					s << "               OpDecorate %22 NonUniform\n";
+					if (testCaseParams.usesMipMaps)
+					{
+						// s << "               OpDecorate %27 NonUniform\n";
+						// s << "               OpDecorate %28 NonUniform\n";
+						// s << "               OpDecorate %29 NonUniform\n";
+						s << "               OpDecorate %30 NonUniform\n";
+					}
+					s << "               OpDecorate %position Flat\n";
+					s << "               OpDecorate %position Location 0\n";
+					s << "               OpDecorate %normalpos Flat\n";
+					s << "               OpDecorate %normalpos Location 1\n";
+					s << "               OpDecorate %vIndex Flat\n";
+					s << "               OpDecorate %vIndex Location 2\n";
+					s << "               OpDecorate %gIndex Flat\n";
+					s << "               OpDecorate %gIndex Location 4\n";
+					s << "               OpDecorate %bIndex Flat\n";
+					s << "               OpDecorate %bIndex Location 5\n";
+					s << "               OpDecorate %aIndex Flat\n";
+					s << "               OpDecorate %aIndex Location 6\n";
+					s << "       %void = OpTypeVoid\n";
+					s << "          %3 = OpTypeFunction %void\n";
+					s << "      %float = OpTypeFloat 32\n";
+					s << "    %v4float = OpTypeVector %float 4\n";
+					s << "%_ptr_Output_v4float = OpTypePointer Output %v4float\n";
+					s << "  %FragColor = OpVariable %_ptr_Output_v4float Output\n";
+					s << "         %10 = OpTypeImage %float 2D 0 0 0 1 Unknown\n";
+					s << "         %11 = OpTypeSampledImage %10\n";
+					s << "%_runtimearr_11 = OpTypeRuntimeArray %11\n";
+					s << "%_ptr_UniformConstant__runtimearr_11 = OpTypePointer UniformConstant %_runtimearr_11\n";
+					s << "       %data = OpVariable %_ptr_UniformConstant__runtimearr_11 UniformConstant\n";
+					s << "        %int = OpTypeInt 32 1\n";
+					s << "%_ptr_Input_int = OpTypePointer Input %int\n";
+					s << "     %rIndex = OpVariable %_ptr_Input_int Input\n";
+					s << "%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11\n";
+					s << "    %v2float = OpTypeVector %float 2\n";
+					s << "    %float_0 = OpConstant %float 0\n";
+					s << "      %int_1 = OpConstant %int 1\n";
+					s << "         %25 = OpConstantComposite %v2float %float_0 %float_0\n";
+					s << "%_ptr_Input_v4float = OpTypePointer Input %v4float\n";
+					s << "   %position = OpVariable %_ptr_Input_v4float Input\n";
+					s << "%_ptr_Input_v2float = OpTypePointer Input %v2float\n";
+					s << "  %normalpos = OpVariable %_ptr_Input_v2float Input\n";
+					s << "     %vIndex = OpVariable %_ptr_Input_int Input\n";
+					s << "     %gIndex = OpVariable %_ptr_Input_int Input\n";
+					s << "     %bIndex = OpVariable %_ptr_Input_int Input\n";
+					s << "     %aIndex = OpVariable %_ptr_Input_int Input\n";
+					s << "       %main = OpFunction %void None %3\n";
+					s << "          %5 = OpLabel\n";
+					s << "         %18 = OpLoad %int %rIndex\n";
+					s << "         %19 = OpCopyObject %int %18\n";
+					s << "         %21 = OpAccessChain %_ptr_UniformConstant_11 %data %19\n";
+					s << "         %22 = OpLoad %11 %21\n";
+					if (testCaseParams.usesMipMaps)
+					{
+						s << "          %26 = OpLoad %int %rIndex\n";
+						s << "          %27 = OpCopyObject %int %26\n";
+						s << "          %28 = OpAccessChain %_ptr_UniformConstant_11 %data %27\n";
+						s << "          %29 = OpLoad %11 %28\n";
+						s << "          %30 = OpImage %10 %29\n";
+						s << "          %31 = OpImageQueryLevels %int %30\n";
+						s << "          %33 = OpISub %int %31 %int_1\n";
+						s << "          %34 = OpConvertSToF %float %33\n";
+						s << "          %35 = OpImageSampleExplicitLod %v4float %22 %25 Lod %34\n";
+						s << "                OpStore %FragColor %35\n";
+					}
+					else
+					{
+						s << "         %26 = OpImageSampleImplicitLod %v4float %22 %25\n";
+						s << "               OpStore %FragColor %26\n";
+					}
+					s << "               OpReturn\n";
+					s << "               OpFunctionEnd\n";
+					break;
+				case VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER:
+					s << "               OpCapability Shader\n";
+					s << "               OpCapability SampledBuffer\n";
+					s << "               OpCapability ShaderNonUniform\n";
+					s << "               OpCapability RuntimeDescriptorArray\n";
+					s << "               OpCapability UniformTexelBufferArrayNonUniformIndexing\n";
+					s << "               OpExtension \"SPV_EXT_descriptor_indexing\"\n";
+					s << "          %1 = OpExtInstImport \"GLSL.std.450\"\n";
+					s << "               OpMemoryModel Logical GLSL450\n";
+					s << "               OpEntryPoint Fragment %main \"main\" %FragColor %data %rIndex %position %normalpos %vIndex %gIndex %bIndex %aIndex\n";
+					s << "               OpExecutionMode %main OriginUpperLeft\n";
+					s << "               OpSource GLSL 450\n";
+					s << "               OpSourceExtension \"GL_EXT_nonuniform_qualifier\"\n";
+					s << "               OpSourceExtension \"GL_EXT_texture_buffer\"\n";
+					s << "               OpName %main \"main\"\n";
+					s << "               OpName %FragColor \"FragColor\"\n";
+					s << "               OpName %data \"data\"\n";
+					s << "               OpName %rIndex \"rIndex\"\n";
+					s << "               OpName %position \"position\"\n";
+					s << "               OpName %normalpos \"normalpos\"\n";
+					s << "               OpName %vIndex \"vIndex\"\n";
+					s << "               OpName %gIndex \"gIndex\"\n";
+					s << "               OpName %bIndex \"bIndex\"\n";
+					s << "               OpName %aIndex \"aIndex\"\n";
+					s << "               OpDecorate %FragColor Location 0\n";
+					s << "               OpDecorate %data DescriptorSet 0\n";
+					s << "               OpDecorate %data Binding 3\n";
+					s << "               OpDecorate %rIndex Flat\n";
+					s << "               OpDecorate %rIndex Location 3\n";
+					// s << "               OpDecorate %19 NonUniform\n";
+					// s << "               OpDecorate %21 NonUniform\n";
+					// s << "               OpDecorate %22 NonUniform\n";
+					s << "               OpDecorate %24 NonUniform\n";
+					s << "               OpDecorate %position Flat\n";
+					s << "               OpDecorate %position Location 0\n";
+					s << "               OpDecorate %normalpos Flat\n";
+					s << "               OpDecorate %normalpos Location 1\n";
+					s << "               OpDecorate %vIndex Flat\n";
+					s << "               OpDecorate %vIndex Location 2\n";
+					s << "               OpDecorate %gIndex Flat\n";
+					s << "               OpDecorate %gIndex Location 4\n";
+					s << "               OpDecorate %bIndex Flat\n";
+					s << "               OpDecorate %bIndex Location 5\n";
+					s << "               OpDecorate %aIndex Flat\n";
+					s << "               OpDecorate %aIndex Location 6\n";
+					s << "       %void = OpTypeVoid\n";
+					s << "          %3 = OpTypeFunction %void\n";
+					s << "      %float = OpTypeFloat 32\n";
+					s << "    %v4float = OpTypeVector %float 4\n";
+					s << "%_ptr_Output_v4float = OpTypePointer Output %v4float\n";
+					s << "  %FragColor = OpVariable %_ptr_Output_v4float Output\n";
+					s << "         %10 = OpTypeImage %float Buffer 0 0 0 1 Unknown\n";
+					s << "         %11 = OpTypeSampledImage %10\n";
+					s << "%_runtimearr_11 = OpTypeRuntimeArray %11\n";
+					s << "%_ptr_UniformConstant__runtimearr_11 = OpTypePointer UniformConstant %_runtimearr_11\n";
+					s << "       %data = OpVariable %_ptr_UniformConstant__runtimearr_11 UniformConstant\n";
+					s << "        %int = OpTypeInt 32 1\n";
+					s << "%_ptr_Input_int = OpTypePointer Input %int\n";
+					s << "     %rIndex = OpVariable %_ptr_Input_int Input\n";
+					s << "%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11\n";
+					s << "      %int_0 = OpConstant %int 0\n";
+					s << "%_ptr_Input_v4float = OpTypePointer Input %v4float\n";
+					s << "   %position = OpVariable %_ptr_Input_v4float Input\n";
+					s << "    %v2float = OpTypeVector %float 2\n";
+					s << "%_ptr_Input_v2float = OpTypePointer Input %v2float\n";
+					s << "  %normalpos = OpVariable %_ptr_Input_v2float Input\n";
+					s << "     %vIndex = OpVariable %_ptr_Input_int Input\n";
+					s << "     %gIndex = OpVariable %_ptr_Input_int Input\n";
+					s << "     %bIndex = OpVariable %_ptr_Input_int Input\n";
+					s << "     %aIndex = OpVariable %_ptr_Input_int Input\n";
+					s << "       %main = OpFunction %void None %3\n";
+					s << "          %5 = OpLabel\n";
+					s << "         %18 = OpLoad %int %rIndex\n";
+					s << "         %19 = OpCopyObject %int %18\n";
+					s << "         %21 = OpAccessChain %_ptr_UniformConstant_11 %data %19\n";
+					s << "         %22 = OpLoad %11 %21\n";
+					s << "         %24 = OpImage %10 %22\n";
+					s << "         %25 = OpImageFetch %v4float %24 %int_0\n";
+					s << "               OpStore %FragColor %25\n";
+					s << "               OpReturn\n";
+					s << "               OpFunctionEnd\n";
+					break;
+				case VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER:
+					s << "               OpCapability Shader\n";
+					s << "               OpCapability ImageBuffer\n";
+					s << "               OpCapability ShaderNonUniform\n";
+					s << "               OpCapability RuntimeDescriptorArray\n";
+					s << "               OpCapability StorageTexelBufferArrayNonUniformIndexing\n";
+					s << "               OpExtension \"SPV_EXT_descriptor_indexing\"\n";
+					s << "          %1 = OpExtInstImport \"GLSL.std.450\"\n";
+					s << "               OpMemoryModel Logical GLSL450\n";
+					s << "               OpEntryPoint Fragment %main \"main\" %FragColor %data %rIndex %position %normalpos %vIndex %gIndex %bIndex %aIndex\n";
+					s << "               OpExecutionMode %main OriginUpperLeft\n";
+					s << "               OpSource GLSL 450\n";
+					s << "               OpSourceExtension \"GL_EXT_nonuniform_qualifier\"\n";
+					s << "               OpName %main \"main\"\n";
+					s << "               OpName %FragColor \"FragColor\"\n";
+					s << "               OpName %data \"data\"\n";
+					s << "               OpName %rIndex \"rIndex\"\n";
+					s << "               OpName %position \"position\"\n";
+					s << "               OpName %normalpos \"normalpos\"\n";
+					s << "               OpName %vIndex \"vIndex\"\n";
+					s << "               OpName %gIndex \"gIndex\"\n";
+					s << "               OpName %bIndex \"bIndex\"\n";
+					s << "               OpName %aIndex \"aIndex\"\n";
+					s << "               OpDecorate %FragColor Location 0\n";
+					s << "               OpDecorate %data DescriptorSet 0\n";
+					s << "               OpDecorate %data Binding 4\n";
+					s << "               OpDecorate %rIndex Flat\n";
+					s << "               OpDecorate %rIndex Location 3\n";
+					// s << "               OpDecorate %18 NonUniform\n";
+					// s << "               OpDecorate %20 NonUniform\n";
+					s << "               OpDecorate %21 NonUniform\n";
+					s << "               OpDecorate %position Flat\n";
+					s << "               OpDecorate %position Location 0\n";
+					s << "               OpDecorate %normalpos Flat\n";
+					s << "               OpDecorate %normalpos Location 1\n";
+					s << "               OpDecorate %vIndex Flat\n";
+					s << "               OpDecorate %vIndex Location 2\n";
+					s << "               OpDecorate %gIndex Flat\n";
+					s << "               OpDecorate %gIndex Location 4\n";
+					s << "               OpDecorate %bIndex Flat\n";
+					s << "               OpDecorate %bIndex Location 5\n";
+					s << "               OpDecorate %aIndex Flat\n";
+					s << "               OpDecorate %aIndex Location 6\n";
+					s << "       %void = OpTypeVoid\n";
+					s << "          %3 = OpTypeFunction %void\n";
+					s << "      %float = OpTypeFloat 32\n";
+					s << "    %v4float = OpTypeVector %float 4\n";
+					s << "%_ptr_Output_v4float = OpTypePointer Output %v4float\n";
+					s << "  %FragColor = OpVariable %_ptr_Output_v4float Output\n";
+					s << "         %10 = OpTypeImage %float Buffer 0 0 0 2 Rgba32f\n";
+					s << "%_runtimearr_10 = OpTypeRuntimeArray %10\n";
+					s << "%_ptr_UniformConstant__runtimearr_10 = OpTypePointer UniformConstant %_runtimearr_10\n";
+					s << "       %data = OpVariable %_ptr_UniformConstant__runtimearr_10 UniformConstant\n";
+					s << "        %int = OpTypeInt 32 1\n";
+					s << "%_ptr_Input_int = OpTypePointer Input %int\n";
+					s << "     %rIndex = OpVariable %_ptr_Input_int Input\n";
+					s << "%_ptr_UniformConstant_10 = OpTypePointer UniformConstant %10\n";
+					s << "      %int_0 = OpConstant %int 0\n";
+					s << "%_ptr_Input_v4float = OpTypePointer Input %v4float\n";
+					s << "   %position = OpVariable %_ptr_Input_v4float Input\n";
+					s << "    %v2float = OpTypeVector %float 2\n";
+					s << "%_ptr_Input_v2float = OpTypePointer Input %v2float\n";
+					s << "  %normalpos = OpVariable %_ptr_Input_v2float Input\n";
+					s << "     %vIndex = OpVariable %_ptr_Input_int Input\n";
+					s << "     %gIndex = OpVariable %_ptr_Input_int Input\n";
+					s << "     %bIndex = OpVariable %_ptr_Input_int Input\n";
+					s << "     %aIndex = OpVariable %_ptr_Input_int Input\n";
+					s << "       %main = OpFunction %void None %3\n";
+					s << "          %5 = OpLabel\n";
+					s << "         %17 = OpLoad %int %rIndex\n";
+					s << "         %18 = OpCopyObject %int %17\n";
+					s << "         %20 = OpAccessChain %_ptr_UniformConstant_10 %data %18\n";
+					s << "         %21 = OpLoad %10 %20\n";
+					s << "         %23 = OpImageRead %v4float %21 %int_0\n";
+					s << "               OpStore %FragColor %23\n";
+					s << "               OpReturn\n";
+					s << "               OpFunctionEnd\n";
+					break;
+				case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER:
+					s << "               OpCapability Shader\n";
+					s << "               OpCapability ShaderNonUniform\n";
+					s << "               OpCapability RuntimeDescriptorArray\n";
+					s << "               OpCapability StorageBufferArrayNonUniformIndexing\n";
+					s << "               OpExtension \"SPV_EXT_descriptor_indexing\"\n";
+					s << "          %1 = OpExtInstImport \"GLSL.std.450\"\n";
+					s << "               OpMemoryModel Logical GLSL450\n";
+					s << "               OpEntryPoint Fragment %main \"main\" %FragColor %data %rIndex %position %normalpos %vIndex %gIndex %bIndex %aIndex\n";
+					s << "               OpExecutionMode %main OriginUpperLeft\n";
+					s << "               OpSource GLSL 450\n";
+					s << "               OpSourceExtension \"GL_EXT_nonuniform_qualifier\"\n";
+					s << "               OpName %main \"main\"\n";
+					s << "               OpName %FragColor \"FragColor\"\n";
+					s << "               OpName %Data \"Data\"\n";
+					s << "               OpMemberName %Data 0 \"cnew\"\n";
+					s << "               OpMemberName %Data 1 \"cold\"\n";
+					s << "               OpName %data \"data\"\n";
+					s << "               OpName %rIndex \"rIndex\"\n";
+					s << "               OpName %position \"position\"\n";
+					s << "               OpName %normalpos \"normalpos\"\n";
+					s << "               OpName %vIndex \"vIndex\"\n";
+					s << "               OpName %gIndex \"gIndex\"\n";
+					s << "               OpName %bIndex \"bIndex\"\n";
+					s << "               OpName %aIndex \"aIndex\"\n";
+					s << "               OpDecorate %FragColor Location 0\n";
+					s << "               OpMemberDecorate %Data 0 Offset 0\n";
+					s << "               OpMemberDecorate %Data 1 Offset 16\n";
+					s << "               OpDecorate %Data Block\n";
+					s << "               OpDecorate %data DescriptorSet 0\n";
+					s << "               OpDecorate %data Binding 2\n";
+					s << "               OpDecorate %rIndex Flat\n";
+					s << "               OpDecorate %rIndex Location 3\n";
+					// s << "               OpDecorate %18 NonUniform\n";
+					s << "               OpDecorate %21 NonUniform\n";
+					// s << "               OpDecorate %22 NonUniform\n";
+					s << "               OpDecorate %position Flat\n";
+					s << "               OpDecorate %position Location 0\n";
+					s << "               OpDecorate %normalpos Flat               OpDecorate %normalpos Location 1\n";
+					s << "               OpDecorate %vIndex Flat\n";
+					s << "               OpDecorate %vIndex Location 2\n";
+					s << "               OpDecorate %gIndex Flat\n";
+					s << "               OpDecorate %gIndex Location 4\n";
+					s << "               OpDecorate %bIndex Flat\n";
+					s << "               OpDecorate %bIndex Location 5\n";
+					s << "               OpDecorate %aIndex Flat\n";
+					s << "               OpDecorate %aIndex Location 6\n";
+					s << "       %void = OpTypeVoid\n";
+					s << "          %3 = OpTypeFunction %void\n";
+					s << "      %float = OpTypeFloat 32\n";
+					s << "    %v4float = OpTypeVector %float 4\n";
+					s << "%_ptr_Output_v4float = OpTypePointer Output %v4float\n";
+					s << "  %FragColor = OpVariable %_ptr_Output_v4float Output\n";
+					s << "       %Data = OpTypeStruct %v4float %v4float\n";
+					s << "%_runtimearr_Data = OpTypeRuntimeArray %Data\n";
+					s << "%_ptr_StorageBuffer__runtimearr_Data = OpTypePointer StorageBuffer %_runtimearr_Data\n";
+					s << "       %data = OpVariable %_ptr_StorageBuffer__runtimearr_Data StorageBuffer\n";
+					s << "        %int = OpTypeInt 32 1\n";
+					s << "%_ptr_Input_int = OpTypePointer Input %int\n";
+					s << "     %rIndex = OpVariable %_ptr_Input_int Input\n";
+					s << "      %int_1 = OpConstant %int 1\n";
+					s << "%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float\n";
+					s << "%_ptr_Input_v4float = OpTypePointer Input %v4float\n";
+					s << "   %position = OpVariable %_ptr_Input_v4float Input\n";
+					s << "    %v2float = OpTypeVector %float 2\n";
+					s << "%_ptr_Input_v2float = OpTypePointer Input %v2float\n";
+					s << "  %normalpos = OpVariable %_ptr_Input_v2float Input\n";
+					s << "     %vIndex = OpVariable %_ptr_Input_int Input\n";
+					s << "     %gIndex = OpVariable %_ptr_Input_int Input\n";
+					s << "     %bIndex = OpVariable %_ptr_Input_int Input\n";
+					s << "     %aIndex = OpVariable %_ptr_Input_int Input\n";
+					s << "       %main = OpFunction %void None %3\n";
+					s << "          %5 = OpLabel\n";
+					s << "         %17 = OpLoad %int %rIndex\n";
+					s << "         %18 = OpCopyObject %int %17\n";
+					s << "         %21 = OpAccessChain %_ptr_StorageBuffer_v4float %data %18 %int_1\n";
+					s << "         %22 = OpLoad %v4float %21\n";
+					s << "               OpStore %FragColor %22\n";
+					s << "               OpReturn\n";
+					s << "               OpFunctionEnd\n";
+					break;
+				case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER:
+					s << "               OpCapability Shader\n";
+					s << "               OpCapability ShaderNonUniform\n";
+					s << "               OpCapability RuntimeDescriptorArray\n";
+					s << "               OpCapability UniformBufferArrayNonUniformIndexing\n";
+					s << "               OpExtension \"SPV_EXT_descriptor_indexing\"\n";
+					s << "          %1 = OpExtInstImport \"GLSL.std.450\"\n";
+					s << "               OpMemoryModel Logical GLSL450\n";
+					s << "               OpEntryPoint Fragment %main \"main\" %FragColor %data %rIndex %position %normalpos %vIndex %gIndex %bIndex %aIndex\n";
+					s << "               OpExecutionMode %main OriginUpperLeft\n";
+					s << "               OpSource GLSL 450\n";
+					s << "               OpSourceExtension \"GL_EXT_nonuniform_qualifier\"\n";
+					s << "               OpName %main \"main\"\n";
+					s << "               OpName %FragColor \"FragColor\"\n";
+					s << "               OpName %Data \"Data\"\n";
+					s << "               OpMemberName %Data 0 \"c\"\n";
+					s << "               OpName %data \"data\"\n";
+					s << "               OpName %rIndex \"rIndex\"\n";
+					s << "               OpName %position \"position\"\n";
+					s << "               OpName %normalpos \"normalpos\"\n";
+					s << "               OpName %vIndex \"vIndex\"\n";
+					s << "               OpName %gIndex \"gIndex\"\n";
+					s << "               OpName %bIndex \"bIndex\"\n";
+					s << "               OpName %aIndex \"aIndex\"\n";
+					s << "               OpDecorate %FragColor Location 0\n";
+					s << "               OpMemberDecorate %Data 0 Offset 0\n";
+					s << "               OpDecorate %Data Block\n";
+					s << "               OpDecorate %data DescriptorSet 0\n";
+					s << "               OpDecorate %data Binding 1\n";
+					s << "               OpDecorate %rIndex Flat\n";
+					s << "               OpDecorate %rIndex Location 3\n";
+					// s << "               OpDecorate %18 NonUniform\n";
+					s << "               OpDecorate %21 NonUniform\n";
+					// s << "               OpDecorate %22 NonUniform\n";
+					s << "               OpDecorate %position Flat\n";
+					s << "               OpDecorate %position Location 0\n";
+					s << "               OpDecorate %normalpos Flat\n";
+					s << "               OpDecorate %normalpos Location 1\n";
+					s << "               OpDecorate %vIndex Flat\n";
+					s << "               OpDecorate %vIndex Location 2\n";
+					s << "               OpDecorate %gIndex Flat\n";
+					s << "               OpDecorate %gIndex Location 4\n";
+					s << "               OpDecorate %bIndex Flat\n";
+					s << "               OpDecorate %bIndex Location 5\n";
+					s << "               OpDecorate %aIndex Flat\n";
+					s << "               OpDecorate %aIndex Location 6\n";
+					s << "       %void = OpTypeVoid\n";
+					s << "          %3 = OpTypeFunction %void\n";
+					s << "      %float = OpTypeFloat 32\n";
+					s << "    %v4float = OpTypeVector %float 4\n";
+					s << "%_ptr_Output_v4float = OpTypePointer Output %v4float\n";
+					s << "  %FragColor = OpVariable %_ptr_Output_v4float Output\n";
+					s << "       %Data = OpTypeStruct %v4float\n";
+					s << "%_runtimearr_Data = OpTypeRuntimeArray %Data\n";
+					s << "%_ptr_Uniform__runtimearr_Data = OpTypePointer Uniform %_runtimearr_Data\n";
+					s << "       %data = OpVariable %_ptr_Uniform__runtimearr_Data Uniform\n";
+					s << "        %int = OpTypeInt 32 1\n";
+					s << "%_ptr_Input_int = OpTypePointer Input %int\n";
+					s << "     %rIndex = OpVariable %_ptr_Input_int Input\n";
+					s << "      %int_0 = OpConstant %int 0\n";
+					s << "%_ptr_Uniform_v4float = OpTypePointer Uniform %v4float\n";
+					s << "%_ptr_Input_v4float = OpTypePointer Input %v4float\n";
+					s << "   %position = OpVariable %_ptr_Input_v4float Input\n";
+					s << "    %v2float = OpTypeVector %float 2\n";
+					s << "%_ptr_Input_v2float = OpTypePointer Input %v2float\n";
+					s << "  %normalpos = OpVariable %_ptr_Input_v2float Input\n";
+					s << "     %vIndex = OpVariable %_ptr_Input_int Input\n";
+					s << "     %gIndex = OpVariable %_ptr_Input_int Input\n";
+					s << "     %bIndex = OpVariable %_ptr_Input_int Input\n";
+					s << "     %aIndex = OpVariable %_ptr_Input_int Input\n";
+					s << "       %main = OpFunction %void None %3\n";
+					s << "          %5 = OpLabel\n";
+					s << "         %17 = OpLoad %int %rIndex\n";
+					s << "         %18 = OpCopyObject %int %17\n";
+					s << "         %21 = OpAccessChain %_ptr_Uniform_v4float %data %18 %int_0\n";
+					s << "         %22 = OpLoad %v4float %21\n";
+					s << "               OpStore %FragColor %22\n";
+					s << "               OpReturn\n";
+					s << "               OpFunctionEnd\n";
+					break;
+				default:
+					TCU_THROW(InternalError, "Unexpected descriptor type");
+					break;
+			}
+		    break;
+		case VK_SHADER_STAGE_COMPUTE_BIT:
+			switch (testCaseParams.descriptorType)
+			{
+				case VK_DESCRIPTOR_TYPE_STORAGE_IMAGE:
+					s << "               OpCapability Shader\n";
+					s << "               OpCapability ShaderNonUniform\n";
+					s << "               OpCapability RuntimeDescriptorArray\n";
+					s << "               OpCapability StorageImageArrayNonUniformIndexing\n";
+					s << "               OpExtension \"SPV_EXT_descriptor_indexing\"\n";
+					s << "          %1 = OpExtInstImport \"GLSL.std.450\"\n";
+					s << "               OpMemoryModel Logical GLSL450\n";
+					s << "               OpEntryPoint GLCompute %main \"main\" %idxs %gl_WorkGroupID %data\n";
+					s << "               OpExecutionMode %main LocalSize 1 1 1\n";
+					s << "               OpSource GLSL 450\n";
+					s << "               OpSourceExtension \"GL_EXT_nonuniform_qualifier\"\n";
+					s << "               OpName %main \"main\"\n";
+					s << "               OpName %c \"c\"\n";
+					s << "               OpName %idxs \"idxs\"\n";
+					s << "               OpName %gl_WorkGroupID \"gl_WorkGroupID\"\n";
+					s << "               OpName %data \"data\"\n";
+					s << "               OpDecorate %idxs DescriptorSet 0\n";
+					s << "               OpDecorate %idxs Binding 12\n";
+					s << "               OpDecorate %gl_WorkGroupID BuiltIn WorkgroupId\n";
+					s << "               OpDecorate %data DescriptorSet 0\n";
+					s << "               OpDecorate %data Binding 11\n";
+					// s << "               OpDecorate %36 NonUniform\n";
+					// s << "               OpDecorate %37 NonUniform\n";
+					s << "               OpDecorate %41 NonUniform\n";
+					s << "               OpDecorate %gl_WorkGroupSize BuiltIn WorkgroupSize\n";
+					s << "       %void = OpTypeVoid\n";
+					s << "          %3 = OpTypeFunction %void\n";
+					s << "       %uint = OpTypeInt 32 0\n";
+					s << "     %v4uint = OpTypeVector %uint 4\n";
+					s << "%_ptr_Function_v4uint = OpTypePointer Function %v4uint\n";
+					s << "         %10 = OpTypeImage %uint 2D 0 0 0 2 R32ui\n";
+					s << "%_ptr_UniformConstant_10 = OpTypePointer UniformConstant %10\n";
+					s << "       %idxs = OpVariable %_ptr_UniformConstant_10 UniformConstant\n";
+					s << "     %v3uint = OpTypeVector %uint 3\n";
+					s << "%_ptr_Input_v3uint = OpTypePointer Input %v3uint\n";
+					s << "%gl_WorkGroupID = OpVariable %_ptr_Input_v3uint Input\n";
+					s << "     %uint_0 = OpConstant %uint 0\n";
+					s << "%_ptr_Input_uint = OpTypePointer Input %uint\n";
+					s << "        %int = OpTypeInt 32 1\n";
+					s << "     %uint_1 = OpConstant %uint 1\n";
+					s << "      %v2int = OpTypeVector %int 2\n";
+					s << "%_runtimearr_10 = OpTypeRuntimeArray %10\n";
+					s << "%_ptr_UniformConstant__runtimearr_10 = OpTypePointer UniformConstant %_runtimearr_10\n";
+					s << "       %data = OpVariable %_ptr_UniformConstant__runtimearr_10 UniformConstant\n";
+					s << "%_ptr_Function_uint = OpTypePointer Function %uint\n";
+					s << "      %int_0 = OpConstant %int 0\n";
+					s << "         %39 = OpConstantComposite %v2int %int_0 %int_0\n";
+					s << "%_ptr_Image_uint = OpTypePointer Image %uint\n";
+					s << "%gl_WorkGroupSize = OpConstantComposite %v3uint %uint_1 %uint_1 %uint_1\n";
+					s << "       %main = OpFunction %void None %3\n";
+					s << "          %5 = OpLabel\n";
+					s << "          %c = OpVariable %_ptr_Function_v4uint Function\n";
+					s << "         %13 = OpLoad %10 %idxs\n";
+					s << "         %19 = OpAccessChain %_ptr_Input_uint %gl_WorkGroupID %uint_0\n";
+					s << "         %20 = OpLoad %uint %19\n";
+					s << "         %22 = OpBitcast %int %20\n";
+					s << "         %24 = OpAccessChain %_ptr_Input_uint %gl_WorkGroupID %uint_1\n";
+					s << "         %25 = OpLoad %uint %24\n";
+					s << "         %26 = OpBitcast %int %25\n";
+					s << "         %28 = OpCompositeConstruct %v2int %22 %26\n";
+					s << "         %29 = OpImageRead %v4uint %13 %28 ZeroExtend\n";
+					s << "               OpStore %c %29\n";
+					s << "         %34 = OpAccessChain %_ptr_Function_uint %c %uint_0\n";
+					s << "         %35 = OpLoad %uint %34\n";
+					s << "         %36 = OpCopyObject %uint %35\n";
+					s << "         %37 = OpAccessChain %_ptr_UniformConstant_10 %data %36\n";
+					s << "         %41 = OpImageTexelPointer %_ptr_Image_uint %37 %39 %uint_0\n";
+					s << "         %42 = OpAtomicIAdd %uint %41 %uint_1 %uint_0 %uint_1\n";
+					s << "               OpReturn\n";
+					s << "               OpFunctionEnd\n";
+					break;
+				default:
+					TCU_THROW(InternalError, "Unexpected descriptor type");
+					break;
+			}
+			break;
+		default:
+			TCU_THROW(InternalError, "Unexpected stage");
+			break;
+	}
+
+	return s.str();
+}
+
 std::string CommonDescriptorInstance::getShaderSource				(VkShaderStageFlagBits						shaderType,
 																	 const TestCaseParams&						testCaseParams,
 																	 bool										allowVertexStoring)
@@ -3192,40 +4178,88 @@
 		}
 	}
 
+	void initAsmPrograms(SourceCollections&	programCollection) const
+	{
+
+		std::string(*genShaderSource)(VkShaderStageFlagBits, const TestCaseParams&, bool) = &CommonDescriptorInstance::getShaderAsm;
+
+		deUint32 vulkan_version = VK_MAKE_VERSION(1, 2, 0);
+		vk::SpirvVersion spirv_version = vk::SPIRV_VERSION_1_4;
+		vk::SpirVAsmBuildOptions asm_options(vulkan_version, spirv_version);
+
+		if (VK_SHADER_STAGE_VERTEX_BIT & m_testCaseParams.stageFlags)
+		{
+			programCollection.spirvAsmSources.add(
+				ut::buildShaderName(VK_SHADER_STAGE_VERTEX_BIT, m_testCaseParams.descriptorType, m_testCaseParams.updateAfterBind, m_testCaseParams.calculateInLoop, m_testCaseParams.minNonUniform, false), &asm_options)
+				<< (*genShaderSource)(VK_SHADER_STAGE_VERTEX_BIT, m_testCaseParams, false);
+
+			if (CommonDescriptorInstance::performWritesInVertex(m_testCaseParams.descriptorType))
+			{
+				programCollection.spirvAsmSources.add(
+					ut::buildShaderName(VK_SHADER_STAGE_VERTEX_BIT, m_testCaseParams.descriptorType, m_testCaseParams.updateAfterBind, m_testCaseParams.calculateInLoop, m_testCaseParams.minNonUniform, true), &asm_options)
+					<< (*genShaderSource)(VK_SHADER_STAGE_VERTEX_BIT, m_testCaseParams, true);
+			}
+		}
+		if (VK_SHADER_STAGE_FRAGMENT_BIT & m_testCaseParams.stageFlags)
+		{
+			programCollection.spirvAsmSources.add(
+				ut::buildShaderName(VK_SHADER_STAGE_FRAGMENT_BIT, m_testCaseParams.descriptorType, m_testCaseParams.updateAfterBind, m_testCaseParams.calculateInLoop, m_testCaseParams.minNonUniform, false), &asm_options)
+				<< (*genShaderSource)(VK_SHADER_STAGE_FRAGMENT_BIT, m_testCaseParams, false);
+
+			if (CommonDescriptorInstance::performWritesInVertex(m_testCaseParams.descriptorType))
+			{
+				programCollection.spirvAsmSources.add(
+					ut::buildShaderName(VK_SHADER_STAGE_FRAGMENT_BIT, m_testCaseParams.descriptorType, m_testCaseParams.updateAfterBind, m_testCaseParams.calculateInLoop, m_testCaseParams.minNonUniform, true), &asm_options)
+					<< (*genShaderSource)(VK_SHADER_STAGE_FRAGMENT_BIT, m_testCaseParams, true);
+			}
+		}
+		if (VK_SHADER_STAGE_COMPUTE_BIT & m_testCaseParams.stageFlags)
+		{
+			programCollection.spirvAsmSources.add(
+				ut::buildShaderName(VK_SHADER_STAGE_COMPUTE_BIT, m_testCaseParams.descriptorType, m_testCaseParams.updateAfterBind, m_testCaseParams.calculateInLoop, m_testCaseParams.minNonUniform, false), &asm_options)
+				<< (*genShaderSource)(VK_SHADER_STAGE_COMPUTE_BIT, m_testCaseParams, false);
+		}
+	}
+
 	virtual void initPrograms (SourceCollections& programCollection) const
 	{
+		if (m_testCaseParams.minNonUniform) {
+			initAsmPrograms(programCollection);
+			return;
+		}
+
 		std::string(*genShaderSource)(VkShaderStageFlagBits, const TestCaseParams&, bool) = &CommonDescriptorInstance::getShaderSource;
 
 		if (VK_SHADER_STAGE_VERTEX_BIT & m_testCaseParams.stageFlags)
 		{
 			programCollection.glslSources.add(
-				ut::buildShaderName(VK_SHADER_STAGE_VERTEX_BIT, m_testCaseParams.descriptorType, m_testCaseParams.updateAfterBind, m_testCaseParams.calculateInLoop, false))
+				ut::buildShaderName(VK_SHADER_STAGE_VERTEX_BIT, m_testCaseParams.descriptorType, m_testCaseParams.updateAfterBind, m_testCaseParams.calculateInLoop, m_testCaseParams.minNonUniform, false))
 				<< glu::VertexSource((*genShaderSource)(VK_SHADER_STAGE_VERTEX_BIT, m_testCaseParams, false));
 
 			if (CommonDescriptorInstance::performWritesInVertex(m_testCaseParams.descriptorType))
 			{
 				programCollection.glslSources.add(
-					ut::buildShaderName(VK_SHADER_STAGE_VERTEX_BIT, m_testCaseParams.descriptorType, m_testCaseParams.updateAfterBind, m_testCaseParams.calculateInLoop, true))
+					ut::buildShaderName(VK_SHADER_STAGE_VERTEX_BIT, m_testCaseParams.descriptorType, m_testCaseParams.updateAfterBind, m_testCaseParams.calculateInLoop, m_testCaseParams.minNonUniform, true))
 					<< glu::VertexSource((*genShaderSource)(VK_SHADER_STAGE_VERTEX_BIT, m_testCaseParams, true));
 			}
 		}
 		if (VK_SHADER_STAGE_FRAGMENT_BIT & m_testCaseParams.stageFlags)
 		{
 			programCollection.glslSources.add(
-				ut::buildShaderName(VK_SHADER_STAGE_FRAGMENT_BIT, m_testCaseParams.descriptorType, m_testCaseParams.updateAfterBind, m_testCaseParams.calculateInLoop, false))
+				ut::buildShaderName(VK_SHADER_STAGE_FRAGMENT_BIT, m_testCaseParams.descriptorType, m_testCaseParams.updateAfterBind, m_testCaseParams.calculateInLoop, m_testCaseParams.minNonUniform, false))
 				<< glu::FragmentSource((*genShaderSource)(VK_SHADER_STAGE_FRAGMENT_BIT, m_testCaseParams, false));
 
 			if (CommonDescriptorInstance::performWritesInVertex(m_testCaseParams.descriptorType))
 			{
 				programCollection.glslSources.add(
-					ut::buildShaderName(VK_SHADER_STAGE_FRAGMENT_BIT, m_testCaseParams.descriptorType, m_testCaseParams.updateAfterBind, m_testCaseParams.calculateInLoop, true))
+					ut::buildShaderName(VK_SHADER_STAGE_FRAGMENT_BIT, m_testCaseParams.descriptorType, m_testCaseParams.updateAfterBind, m_testCaseParams.calculateInLoop, m_testCaseParams.minNonUniform, true))
 					<< glu::FragmentSource((*genShaderSource)(VK_SHADER_STAGE_FRAGMENT_BIT, m_testCaseParams, true));
 			}
 		}
 		if (VK_SHADER_STAGE_COMPUTE_BIT & m_testCaseParams.stageFlags)
 		{
 			programCollection.glslSources.add(
-				ut::buildShaderName(VK_SHADER_STAGE_COMPUTE_BIT, m_testCaseParams.descriptorType, m_testCaseParams.updateAfterBind, m_testCaseParams.calculateInLoop, false))
+				ut::buildShaderName(VK_SHADER_STAGE_COMPUTE_BIT, m_testCaseParams.descriptorType, m_testCaseParams.updateAfterBind, m_testCaseParams.calculateInLoop, m_testCaseParams.minNonUniform, false))
 				<< glu::ComputeSource((*genShaderSource)(VK_SHADER_STAGE_COMPUTE_BIT, m_testCaseParams, false));
 		}
 	}
@@ -3255,6 +4289,7 @@
 				false,	// updateAfterBind
 				false,	// calculateInLoop
 				false,	// useMipMaps
+				false,	// minNonUniform
 				FUZZY_COMPARE, CMP_THRESHOLD
 			}
 		},
@@ -3267,6 +4302,7 @@
 				false,	// updateAfterBind
 				false,	// calculateInLoop
 				false,	// useMipMaps
+				false,	// minNonUniform
 				FUZZY_COMPARE, CMP_THRESHOLD
 			}
 		},
@@ -3279,6 +4315,7 @@
 				false,	// updateAfterBind,
 				false,	// calculateInLoop
 				false,	// usesMipMaps
+				false,	// minNonUniform
 				FUZZY_COMPARE, CMP_THRESHOLD
 			}
 		},
@@ -3291,6 +4328,7 @@
 				false,	// updateAfterBind
 				false,	// calculateInLoop
 				false,	// useMipMaps
+				false,	// minNonUniform
 				FUZZY_COMPARE, CMP_THRESHOLD
 			}
 		},
@@ -3332,6 +4370,7 @@
 				false,	// updateAfterBind
 				false,	// calculateInLoop
 				false,	// usesMipMaps
+				false,	// minNonUniform
 				FUZZY_COMPARE, CMP_THRESHOLD
 			}
 		},
@@ -3344,6 +4383,7 @@
 				false,	// updateAfterBind
 				false,	// calculateInLoop
 				false,	// usesMipMaps
+				false,	// minNonUniform
 				FUZZY_COMPARE, CMP_THRESHOLD
 			}
 		},
@@ -3356,6 +4396,7 @@
 				false,	// updateAfterBind
 				false,	// calculateInLoop
 				false,	// usesMipMaps
+				false,	// minNonUniform
 				FUZZY_COMPARE, CMP_THRESHOLD
 			}
 		},
@@ -3403,6 +4444,7 @@
 				false,	// updateAfterBind
 				false,	// calculateInLoop
 				false,	// usesMipMaps
+				false,	// minNonUniform
 				FUZZY_COMPARE, CMP_THRESHOLD
 			}
 		},
@@ -3415,6 +4457,7 @@
 				false,	// updateAfterBind
 				false,	// calculateInLoop
 				false,	// useMipMaps
+				false,	// minNonUniform
 				FUZZY_COMPARE, CMP_THRESHOLD
 			}
 		},
@@ -3427,6 +4470,7 @@
 				false,	// updateAfterBind
 				false,	// calculateInLoop
 				false,	// useMipMaps
+				false,	// minNonUniform
 				FUZZY_COMPARE, CMP_THRESHOLD
 			}
 		},
@@ -3439,6 +4483,7 @@
 				false,	// updateAfterBind
 				false,	// calculateInLoop
 				false,	// useMipMaps
+				false,	// minNonUniform
 				FUZZY_COMPARE, CMP_THRESHOLD
 			}
 		},
@@ -3462,6 +4507,124 @@
 			group->addChild(new DescriptorIndexingTestCase(context, caseName.c_str(), caseDescription.c_str(), params));
 		}
 	}
+
+	// SPIR-V Asm Tests
+	// Tests that have the minimum necessary NonUniform decorations.
+	// sampler and sampled_image GLSL already have minimum NonUniform decorations.
+
+	TestCaseInfo casesMinNonUniform[] =
+	{
+		{
+			"storage_buffer", "Regular Storage Buffer Descriptors",
+			{
+				VK_DESCRIPTOR_TYPE_STORAGE_BUFFER,
+				(VK_SHADER_STAGE_VERTEX_BIT | VK_SHADER_STAGE_FRAGMENT_BIT),
+				RESOLUTION,
+				false,	// updateAfterBind
+				false,	// calculateInLoop
+				false,	// useMipMaps
+				true,	// minNonUniform
+				FUZZY_COMPARE, CMP_THRESHOLD
+			}
+		},
+		{
+			"storage_texel_buffer", "Storage Texel Buffer Descriptors",
+			{
+				VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER,
+				(VK_SHADER_STAGE_VERTEX_BIT | VK_SHADER_STAGE_FRAGMENT_BIT),
+				RESOLUTION,
+				false,	// updateAfterBind
+				false,	// calculateInLoop
+				false,	// useMipMaps
+				true,	// minNonUniform
+				FUZZY_COMPARE, CMP_THRESHOLD
+			}
+		},
+		{
+			"uniform_texel_buffer", "Uniform Texel Buffer Descriptors",
+			{
+				VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER,
+				(VK_SHADER_STAGE_VERTEX_BIT | VK_SHADER_STAGE_FRAGMENT_BIT),
+				RESOLUTION,
+				false,	// updateAfterBind,
+				false,	// calculateInLoop
+				false,	// usesMipMaps
+				true,	// minNonUniform
+				FUZZY_COMPARE, CMP_THRESHOLD
+			}
+		},
+		{
+			"uniform_buffer", "Regular Uniform Buffer Descriptors",
+			{
+				VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER,
+				(VK_SHADER_STAGE_VERTEX_BIT | VK_SHADER_STAGE_FRAGMENT_BIT),
+				RESOLUTION,
+				false,	// updateAfterBind
+				false,	// calculateInLoop
+				false,	// usesMipMaps
+				true,	// minNonUniform
+				FUZZY_COMPARE, CMP_THRESHOLD
+			}
+		},
+		{
+			"combined_image_sampler", "Combined Image Sampler Descriptors",
+			{
+				VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
+				(VK_SHADER_STAGE_VERTEX_BIT | VK_SHADER_STAGE_FRAGMENT_BIT),
+				RESOLUTION,
+				false,	// updateAfterBind
+				false,	// calculateInLoop
+				false,	// usesMipMaps
+				true,	// minNonUniform
+				FUZZY_COMPARE, CMP_THRESHOLD
+			}
+		},
+		{
+			"combined_image_sampler", "Combined Image Sampler Descriptors",
+			{
+				VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
+				(VK_SHADER_STAGE_VERTEX_BIT | VK_SHADER_STAGE_FRAGMENT_BIT),
+				RESOLUTION,
+				false,	// updateAfterBind
+				false,	// calculateInLoop
+				true,	// usesMipMaps
+				true,	// minNonUniform
+				FUZZY_COMPARE, CMP_THRESHOLD
+			}
+		},
+		{
+			"storage_image", "Storage Image Descriptors",
+			{
+				VK_DESCRIPTOR_TYPE_STORAGE_IMAGE,
+				VK_SHADER_STAGE_COMPUTE_BIT,
+				RESOLUTION,
+				false,	// updateAfterBind
+				false,	// calculateInLoop
+				false,	// useMipMaps
+				true,	// minNonUniform
+				FUZZY_COMPARE, CMP_THRESHOLD
+			}
+		},
+	};
+
+	for (deUint32 caseIdx = 0; caseIdx < DE_LENGTH_OF_ARRAY(casesMinNonUniform); ++caseIdx)
+	{
+		TestCaseInfo&	info(casesMinNonUniform[caseIdx]);
+		std::string		caseName(info.name);
+		std::string		caseDescription(info.description);
+		TestCaseParams	params(info.params);
+
+		if (params.usesMipMaps) {
+			caseName += "_with_lod";
+		}
+		caseName += "_minNonUniform";
+
+		caseDescription += " With Minimum NonUniform Decorations";
+
+		TestCase* tc = new DescriptorIndexingTestCase(context, caseName.c_str(), caseDescription.c_str(), params);
+		group->addChild(tc);
+		// group->addChild(new DescriptorIndexingTestCase(context, caseName.c_str(), caseDescription.c_str(), params));
+	}
 }
 
 } // - DescriptorIndexing
diff --git a/external/vulkancts/modules/vulkan/descriptor_indexing/vktDescriptorSetsIndexingTests.hpp b/external/vulkancts/modules/vulkan/descriptor_indexing/vktDescriptorSetsIndexingTests.hpp
index 27b7e82..aa92e0e 100644
--- a/external/vulkancts/modules/vulkan/descriptor_indexing/vktDescriptorSetsIndexingTests.hpp
+++ b/external/vulkancts/modules/vulkan/descriptor_indexing/vktDescriptorSetsIndexingTests.hpp
@@ -120,6 +120,7 @@
 												VkDescriptorType				descriptorType,
 												deBool							updateAfterBind,
 												bool							calculateInLoop,
+												bool							minNonUniform,
 												bool							performWritesInVertex);
 
 std::vector<deUint32>	generatePrimes			(deUint32						limit);
diff --git a/external/vulkancts/modules/vulkan/descriptor_indexing/vktDescriptorSetsIndexingTestsUtils.cpp b/external/vulkancts/modules/vulkan/descriptor_indexing/vktDescriptorSetsIndexingTestsUtils.cpp
index c8c459c..1af4103 100644
--- a/external/vulkancts/modules/vulkan/descriptor_indexing/vktDescriptorSetsIndexingTestsUtils.cpp
+++ b/external/vulkancts/modules/vulkan/descriptor_indexing/vktDescriptorSetsIndexingTestsUtils.cpp
@@ -75,6 +75,7 @@
 									 VkDescriptorType				descriptorType,
 									 deBool							updateAfterBind,
 									 bool							calculateInLoop,
+									 bool							minNonUniform,
 									 bool							performWritesInVertex)
 {
 	const char* stageName = DE_NULL;
@@ -95,9 +96,10 @@
 	m["DESC"]	= de::toString(deUint32(descriptorType));
 	m["ABIND"]	= updateAfterBind		? "_afterBind"		: "";
 	m["LOOP"]	= calculateInLoop		? "_inLoop"			: "";
+	m["MINNU"]	= minNonUniform			? "_minNonUniform"	: "";
 	m["SHWR"]	= performWritesInVertex	? "_shaderWrites"	: "";
 
-	return tcu::StringTemplate("descriptorIndexing_${STAGE}${DESC}${ABIND}${LOOP}${SHWR}").specialize(m);
+	return tcu::StringTemplate("descriptorIndexing_${STAGE}${DESC}${ABIND}${LOOP}${MINNU}${SHWR}").specialize(m);
 }
 
 std::vector<deUint32> generatePrimes (deUint32						limit)
diff --git a/external/vulkancts/modules/vulkan/draw/CMakeLists.txt b/external/vulkancts/modules/vulkan/draw/CMakeLists.txt
index 7061f5c..baeda9b 100644
--- a/external/vulkancts/modules/vulkan/draw/CMakeLists.txt
+++ b/external/vulkancts/modules/vulkan/draw/CMakeLists.txt
@@ -48,6 +48,10 @@
 	vktDrawOutputLocationTests.hpp
 	vktDrawDepthClampTests.cpp
 	vktDrawDepthClampTests.hpp
+	vktDrawAhbTests.cpp
+	vktDrawAhbTests.hpp
+	vktDrawMultipleClearsWithinRenderPass.cpp
+	vktDrawMultipleClearsWithinRenderPass.hpp
 )
 
 set(DEQP_VK_DRAW_LIBS
diff --git a/external/vulkancts/modules/vulkan/draw/vktBasicDrawTests.cpp b/external/vulkancts/modules/vulkan/draw/vktBasicDrawTests.cpp
index 120235d..a894ab2 100644
--- a/external/vulkancts/modules/vulkan/draw/vktBasicDrawTests.cpp
+++ b/external/vulkancts/modules/vulkan/draw/vktBasicDrawTests.cpp
@@ -578,6 +578,13 @@
 	{
 		context.requireDeviceCoreFeature(DEVICE_CORE_FEATURE_GEOMETRY_SHADER);
 	}
+
+	if (m_data.topology == vk::VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN &&
+		context.isDeviceFunctionalitySupported("VK_KHR_portability_subset") &&
+		!context.getPortabilitySubsetFeatures().triangleFans)
+	{
+		TCU_THROW(NotSupportedError, "VK_KHR_portability_subset: Triangle fans are not supported by this implementation");
+	}
 }
 
 template<typename T>
diff --git a/external/vulkancts/modules/vulkan/draw/vktDrawAhbTests.cpp b/external/vulkancts/modules/vulkan/draw/vktDrawAhbTests.cpp
new file mode 100644
index 0000000..47752a3
--- /dev/null
+++ b/external/vulkancts/modules/vulkan/draw/vktDrawAhbTests.cpp
@@ -0,0 +1,663 @@
+/*------------------------------------------------------------------------
+ * Vulkan Conformance Tests
+ * ------------------------
+ *
+ * Copyright (c) 2020 The Khronos Group Inc.
+ * Copyright (c) 2020 Google LLC
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd.
+ *
+ * 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 Android Hardware Buffer Draw Tests
+ *//*--------------------------------------------------------------------*/
+
+#include "vktDrawAhbTests.hpp"
+
+#include "vktDrawBaseClass.hpp"
+#include "vkQueryUtil.hpp"
+#include "vkCmdUtil.hpp"
+#include "vkTypeUtil.hpp"
+#include "vktTestGroupUtil.hpp"
+
+#include "../util/vktExternalMemoryUtil.hpp"
+
+#include "deDefs.h"
+#include "deRandom.hpp"
+
+#include "tcuTestCase.hpp"
+#include "tcuTextureUtil.hpp"
+#include "tcuImageCompare.hpp"
+#include "tcuVectorUtil.hpp"
+#include "tcuTestLog.hpp"
+
+#include "rrRenderer.hpp"
+
+#include <string>
+
+using namespace vkt::ExternalMemoryUtil;
+using namespace vk;
+using std::vector;
+
+namespace vkt
+{
+namespace Draw
+{
+namespace
+{
+
+const deUint32 SEED = 0xc2a39fu;
+
+struct DrawParams
+{
+	DrawParams (deUint32 numVertices, deUint32 numLayers)
+	: m_numVertices(numVertices), m_numLayers(numLayers) {}
+
+	deUint32					m_numVertices;
+	deUint32					m_numLayers;
+	vector<PositionColorVertex>	m_vertices;
+};
+
+// Reference renderer shaders
+class PassthruVertShader : public rr::VertexShader
+{
+public:
+	PassthruVertShader (void)
+	: rr::VertexShader (2, 1)
+	{
+		m_inputs[0].type	= rr::GENERICVECTYPE_FLOAT;
+		m_inputs[1].type	= rr::GENERICVECTYPE_FLOAT;
+		m_outputs[0].type	= rr::GENERICVECTYPE_FLOAT;
+	}
+
+	void shadeVertices (const rr::VertexAttrib* inputs, rr::VertexPacket* const* packets, const int numPackets) const
+	{
+		for (int packetNdx = 0; packetNdx < numPackets; ++packetNdx)
+		{
+			packets[packetNdx]->position = rr::readVertexAttribFloat(inputs[0],
+																	 packets[packetNdx]->instanceNdx,
+																	 packets[packetNdx]->vertexNdx);
+
+			tcu::Vec4 color = rr::readVertexAttribFloat(inputs[1],
+														packets[packetNdx]->instanceNdx,
+														packets[packetNdx]->vertexNdx);
+
+			packets[packetNdx]->outputs[0] = color;
+		}
+	}
+};
+
+class PassthruFragShader : public rr::FragmentShader
+{
+public:
+	PassthruFragShader (void)
+		: rr::FragmentShader(1, 1)
+	{
+		m_inputs[0].type	= rr::GENERICVECTYPE_FLOAT;
+		m_outputs[0].type	= rr::GENERICVECTYPE_FLOAT;
+	}
+
+	void shadeFragments (rr::FragmentPacket* packets, const int numPackets, const rr::FragmentShadingContext& context) const
+	{
+		for (int packetNdx = 0; packetNdx < numPackets; ++packetNdx)
+		{
+			rr::FragmentPacket& packet = packets[packetNdx];
+			for (deUint32 fragNdx = 0; fragNdx < rr::NUM_FRAGMENTS_PER_PACKET; ++fragNdx)
+			{
+				tcu::Vec4 color = rr::readVarying<float>(packet, context, 0, fragNdx);
+				rr::writeFragmentOutput(context, packetNdx, fragNdx, 0, color);
+			}
+		}
+	}
+};
+
+class AhbTestInstance : public TestInstance
+{
+public:
+					AhbTestInstance		(Context& context, DrawParams data);
+					~AhbTestInstance	(void);
+
+	tcu::TestStatus	iterate				(void);
+
+private:
+	void			generateDrawData	(void);
+	void			generateRefImage	(const tcu::PixelBufferAccess& access, const vector<tcu::Vec4>& vertices, const vector<tcu::Vec4>& colors) const;
+
+	DrawParams							m_data;
+
+	enum
+	{
+		WIDTH = 256,
+		HEIGHT = 256
+	};
+};
+
+AhbTestInstance::AhbTestInstance (Context& context, DrawParams data)
+	: vkt::TestInstance			(context)
+	, m_data					(data)
+{
+	generateDrawData();
+}
+
+AhbTestInstance::~AhbTestInstance (void)
+{
+}
+
+void AhbTestInstance::generateRefImage (const tcu::PixelBufferAccess& access, const vector<tcu::Vec4>& vertices, const vector<tcu::Vec4>& colors) const
+{
+	const PassthruVertShader				vertShader;
+	const PassthruFragShader				fragShader;
+	const rr::Program						program			(&vertShader, &fragShader);
+	const rr::MultisamplePixelBufferAccess	colorBuffer		= rr::MultisamplePixelBufferAccess::fromSinglesampleAccess(access);
+	const rr::RenderTarget					renderTarget	(colorBuffer);
+	const rr::RenderState					renderState		((rr::ViewportState(colorBuffer)), m_context.getDeviceProperties().limits.subPixelPrecisionBits);
+	const rr::Renderer						renderer;
+
+	const rr::VertexAttrib	vertexAttribs[] =
+	{
+		rr::VertexAttrib(rr::VERTEXATTRIBTYPE_FLOAT, 4, sizeof(tcu::Vec4), 0, &vertices[0]),
+		rr::VertexAttrib(rr::VERTEXATTRIBTYPE_FLOAT, 4, sizeof(tcu::Vec4), 0, &colors[0])
+	};
+
+	renderer.draw(rr::DrawCommand(renderState, renderTarget, program, DE_LENGTH_OF_ARRAY(vertexAttribs),
+								  &vertexAttribs[0], rr::PrimitiveList(rr::PRIMITIVETYPE_TRIANGLES, (deUint32)vertices.size(), 0)));
+}
+
+class AhbTestCase : public TestCase
+{
+	public:
+									AhbTestCase			(tcu::TestContext& context, const char* name, const char* desc, const DrawParams data);
+									~AhbTestCase		(void);
+	virtual	void					initPrograms		(SourceCollections& programCollection) const;
+	virtual void					initShaderSources	(void);
+	virtual void					checkSupport		(Context& context) const;
+	virtual TestInstance*			createInstance		(Context& context) const;
+
+private:
+	DrawParams											m_data;
+	std::string											m_vertShaderSource;
+	std::string											m_fragShaderSource;
+};
+
+AhbTestCase::AhbTestCase (tcu::TestContext& context, const char* name, const char* desc, const DrawParams data)
+	: vkt::TestCase	(context, name, desc)
+	, m_data		(data)
+{
+	initShaderSources();
+}
+
+AhbTestCase::~AhbTestCase	(void)
+{
+}
+
+void AhbTestCase::initPrograms (SourceCollections& programCollection) const
+{
+	programCollection.glslSources.add("vert") << glu::VertexSource(m_vertShaderSource);
+	programCollection.glslSources.add("frag") << glu::FragmentSource(m_fragShaderSource);
+}
+
+void AhbTestCase::checkSupport (Context& context) const
+{
+	const InstanceInterface&				vki				= context.getInstanceInterface();
+	vk::VkPhysicalDevice					physicalDevice	= context.getPhysicalDevice();
+	const vk::VkPhysicalDeviceProperties	properties		= vk::getPhysicalDeviceProperties(vki, physicalDevice);
+
+	// Each layer is exposed as its own color attachment.
+	if (m_data.m_numLayers > properties.limits.maxColorAttachments)
+		TCU_THROW(NotSupportedError, "Required number of color attachments not supported.");
+}
+
+void AhbTestCase::initShaderSources (void)
+{
+	std::stringstream vertShader;
+	vertShader	<< "#version 430\n"
+				<< "layout(location = 0) in vec4 in_position;\n"
+				<< "layout(location = 1) in vec4 in_color;\n"
+				<< "layout(location = 0) out vec4 out_color;\n"
+
+				<< "void main() {\n"
+				<< "    gl_Position  = in_position;\n"
+				<< "    out_color    = in_color;\n"
+				<< "}\n";
+
+	m_vertShaderSource = vertShader.str();
+
+	std::stringstream fragShader;
+	fragShader	<< "#version 430\n"
+				<< "layout(location = 0) in vec4 in_color;\n"
+				<< "layout(location = 0) out vec4 out_color;\n"
+
+				<< "void main()\n"
+				<< "{\n"
+				<< "    out_color = in_color;\n"
+				<< "}\n";
+
+	m_fragShaderSource = fragShader.str();
+}
+
+TestInstance* AhbTestCase::createInstance (Context& context) const
+{
+	return new AhbTestInstance(context, m_data);
+}
+
+void AhbTestInstance::generateDrawData (void)
+{
+	de::Random rnd (SEED ^ m_data.m_numLayers ^ m_data.m_numVertices);
+
+	for (deUint32 i = 0; i < m_data.m_numVertices; i++)
+	{
+		const float f0 = rnd.getFloat(-1.0f, 1.0f);
+		const float f1 = rnd.getFloat(-1.0f, 1.0f);
+
+		m_data.m_vertices.push_back(PositionColorVertex(
+			tcu::Vec4(f0, f1, 1.0f, 1.0f),	// Coord
+			tcu::randomVec4(rnd)));			// Color
+	}
+}
+
+tcu::TestStatus AhbTestInstance::iterate (void)
+{
+	const DeviceInterface&						vk						= m_context.getDeviceInterface();
+	const VkFormat								colorAttachmentFormat	= VK_FORMAT_R8G8B8A8_UNORM;
+	tcu::TestLog								&log					= m_context.getTestContext().getLog();
+	const VkQueue								queue					= m_context.getUniversalQueue();
+	const VkDevice								device					= m_context.getDevice();
+	const deUint32								queueFamilyIndex		= m_context.getUniversalQueueFamilyIndex();
+	const PipelineLayoutCreateInfo				pipelineLayoutCreateInfo;
+	const Unique<VkPipelineLayout>				pipelineLayout			(createPipelineLayout(vk, device, &pipelineLayoutCreateInfo));
+	vector<Move<VkBuffer>>						resultBuffers;
+	vector<de::MovePtr<Allocation>>				resultBufferAllocations;
+
+	for (deUint32 i = 0u; i < m_data.m_numLayers; i++)
+	{
+		const VkBufferUsageFlags	bufferUsage	(VK_BUFFER_USAGE_TRANSFER_SRC_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT);
+		const VkDeviceSize			pixelSize	= mapVkFormat(colorAttachmentFormat).getPixelSize();
+		const VkBufferCreateInfo	createInfo	=
+		{
+			VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO,	// VkStructureType		sType
+			DE_NULL,								// const void*			pNext
+			0u,										// VkBufferCreateFlags	flags
+			WIDTH * HEIGHT * pixelSize,				// VkDeviceSize			size
+			bufferUsage,							// VkBufferUsageFlags	usage
+			VK_SHARING_MODE_EXCLUSIVE,				// VkSharingMode		sharingMode
+			0u,										// uint32_t				queueFamilyIndexCount
+			DE_NULL									// const uint32_t*		pQueueFamilyIndices
+		};
+
+		resultBuffers.push_back(createBuffer(vk, device, &createInfo));
+		resultBufferAllocations.push_back(m_context.getDefaultAllocator().allocate(getBufferMemoryRequirements(vk, device, *resultBuffers.back()), MemoryRequirement::HostVisible));
+		VK_CHECK(vk.bindBufferMemory(device, *resultBuffers.back(), resultBufferAllocations.back()->getMemory(), resultBufferAllocations.back()->getOffset()));
+	}
+
+	const VkExtent3D							targetImageExtent		= { WIDTH, HEIGHT, 1 };
+	const ImageCreateInfo						targetImageCreateInfo	(VK_IMAGE_TYPE_2D, colorAttachmentFormat, targetImageExtent, 1, m_data.m_numLayers, VK_SAMPLE_COUNT_1_BIT,
+																	 VK_IMAGE_TILING_OPTIMAL, VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | VK_IMAGE_USAGE_TRANSFER_SRC_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT);
+
+	// Enable this to use non-AHB images for color output.
+#if 0
+	const Unique<VkImage>						colorTargetImage		(createImage(vk, device, &targetImageCreateInfo, DE_NULL));
+	de::MovePtr<Allocation>						m_colorImageAllocation	= m_context.getDefaultAllocator().allocate(getImageMemoryRequirements(vk, device, *colorTargetImage), MemoryRequirement::Any);
+	VK_CHECK(vk.bindImageMemory(device, *colorTargetImage, m_colorImageAllocation->getMemory(), m_colorImageAllocation->getOffset()));
+#else
+	AndroidHardwareBufferExternalApi*			ahbApi					= AndroidHardwareBufferExternalApi::getInstance();
+
+	if (!ahbApi)
+		TCU_THROW(NotSupportedError, "Android Hardware Buffer not supported");
+
+	m_context.requireDeviceFunctionality("VK_ANDROID_external_memory_android_hardware_buffer");
+
+	deUint64									requiredAhbUsage		= ahbApi->vkUsageToAhbUsage(VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT);
+
+	pt::AndroidHardwareBufferPtr ahb = ahbApi->allocate(WIDTH, HEIGHT, targetImageCreateInfo.arrayLayers, ahbApi->vkFormatToAhbFormat(colorAttachmentFormat), requiredAhbUsage);
+
+	if (ahb.internal == DE_NULL)
+		TCU_THROW(NotSupportedError, "Required number of layers for Android Hardware Buffer not supported");
+
+	NativeHandle								nativeHandle(ahb);
+	const Unique<VkImage>						colorTargetImage	(createExternalImage(vk, device, queueFamilyIndex, VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID,
+																	 colorAttachmentFormat, WIDTH, HEIGHT, VK_IMAGE_TILING_OPTIMAL, 0u,
+																	 targetImageCreateInfo.usage, targetImageCreateInfo.mipLevels, targetImageCreateInfo.arrayLayers));
+
+	deUint32									ahbFormat			= 0;
+	ahbApi->describe(nativeHandle.getAndroidHardwareBuffer(), DE_NULL, DE_NULL, DE_NULL, &ahbFormat, DE_NULL, DE_NULL);
+
+	VkAndroidHardwareBufferPropertiesANDROID	ahbProperties		=
+	{
+		VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_PROPERTIES_ANDROID,	// VkStructureType    sType
+		DE_NULL,														// void*              pNext
+		0u,																// VkDeviceSize       allocationSize
+		0u																// uint32_t           memoryTypeBits
+	};
+
+	vk.getAndroidHardwareBufferPropertiesANDROID(device, nativeHandle.getAndroidHardwareBuffer(), &ahbProperties);
+
+	const VkImportAndroidHardwareBufferInfoANDROID	importInfo		=
+	{
+		VK_STRUCTURE_TYPE_IMPORT_ANDROID_HARDWARE_BUFFER_INFO_ANDROID,	// VkStructureType            sType
+		DE_NULL,														// const void*                pNext
+		nativeHandle.getAndroidHardwareBuffer()							// struct AHardwareBuffer*    buffer
+	};
+
+	const VkMemoryDedicatedAllocateInfo			dedicatedInfo		=
+	{
+		VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO_KHR,	// VkStructureType    sType
+		&importInfo,											// const void*        pNext
+		*colorTargetImage,										// VkImage            image
+		DE_NULL,												// VkBuffer           buffer
+	};
+
+	const VkMemoryAllocateInfo					allocateInfo		=
+	{
+			VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO,			// VkStructureType    sType
+			(const void*)&dedicatedInfo,					// const void*        pNext
+			ahbProperties.allocationSize,					// VkDeviceSize       allocationSize
+			chooseMemoryType(ahbProperties.memoryTypeBits)	// uint32_t           memoryTypeIndex
+	};
+
+	const Unique<VkDeviceMemory>				colorImageMemory	(allocateMemory(vk, device, &allocateInfo));
+	VK_CHECK(vk.bindImageMemory(device, *colorTargetImage, *colorImageMemory, 0u));
+#endif
+
+	vector<Move<VkImageView>>					imageViews;
+	vector<VkImageView>							colorAttachments;
+	RenderPassCreateInfo						renderPassCreateInfo;
+
+	for (deUint32 i = 0u; i < m_data.m_numLayers; i++)
+	{
+		const VkImageSubresourceRange	subresourceRange	=
+		{
+			VK_IMAGE_ASPECT_COLOR_BIT,	// VkImageAspectFlags    aspectMask
+			0u,							// uint32_t              baseMipLevel
+			1u,							// uint32_t              levelCount
+			i,							// uint32_t              baseArrayLayer
+			1u,							// uint32_t              layerCount
+		};
+
+		const VkImageViewCreateInfo		imageViewCreateInfo	=
+		{
+			VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO,	// VkStructureType            sType
+			DE_NULL,									// const void*                pNext
+			0u,											// VkImageViewCreateFlags     flags
+			*colorTargetImage,							// VkImage                    image
+			VK_IMAGE_VIEW_TYPE_2D,						// VkImageViewType            viewType
+			colorAttachmentFormat,						// VkFormat                   format
+			ComponentMapping(),							// VkComponentMapping         components
+			subresourceRange							// VkImageSubresourceRange    subresourceRange
+		};
+
+		imageViews.push_back(createImageView(vk, device, &imageViewCreateInfo));
+		colorAttachments.push_back(*imageViews.back());
+
+		renderPassCreateInfo.addAttachment(AttachmentDescription(colorAttachmentFormat,
+																 VK_SAMPLE_COUNT_1_BIT,
+																 VK_ATTACHMENT_LOAD_OP_CLEAR,
+																 VK_ATTACHMENT_STORE_OP_STORE,
+																 VK_ATTACHMENT_LOAD_OP_DONT_CARE,
+																 VK_ATTACHMENT_STORE_OP_STORE,
+																 VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
+																 VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL));
+
+
+		const VkAttachmentReference		colorAttachmentReference	=
+		{
+			i,
+			VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL
+		};
+
+		renderPassCreateInfo.addSubpass(SubpassDescription(VK_PIPELINE_BIND_POINT_GRAPHICS,
+														   0,
+														   0,
+														   DE_NULL,
+														   1u,
+														   &colorAttachmentReference,
+														   DE_NULL,
+														   AttachmentReference(),
+														   0,
+														   DE_NULL));
+	}
+
+	Unique<VkRenderPass>				renderPass					(createRenderPass(vk, device, &renderPassCreateInfo));
+
+	const FramebufferCreateInfo			framebufferCreateInfo		(*renderPass, colorAttachments, WIDTH, HEIGHT, 1);
+	Unique<VkFramebuffer>				framebuffer					(createFramebuffer(vk, device, &framebufferCreateInfo));
+
+	const VkVertexInputBindingDescription vertexInputBindingDescription =
+	{
+		0,									// uint32_t             binding
+		(deUint32)sizeof(tcu::Vec4) * 2,	// uint32_t             stride
+		VK_VERTEX_INPUT_RATE_VERTEX,		// VkVertexInputRate    inputRate
+	};
+
+	const VkVertexInputAttributeDescription vertexInputAttributeDescriptions[] =
+	{
+
+		{
+			0u,								// uint32_t    location
+			0u,								// uint32_t    binding
+			VK_FORMAT_R32G32B32A32_SFLOAT,	// VkFormat    format
+			0u								// uint32_t    offset
+		},
+		{
+			1u,								// uint32_t    location
+			0u,								// uint32_t    binding
+			VK_FORMAT_R32G32B32A32_SFLOAT,	// VkFormat    format
+			(deUint32)(sizeof(float)* 4),	// uint32_t    offset
+		}
+	};
+
+	PipelineCreateInfo::VertexInputState	vertexInputState		= PipelineCreateInfo::VertexInputState(1, &vertexInputBindingDescription, 2, vertexInputAttributeDescriptions);
+	const VkDeviceSize						dataSize				= m_data.m_vertices.size() * sizeof(PositionColorVertex);
+	de::SharedPtr<Buffer>					vertexBuffer			= Buffer::createAndAlloc(vk, device, BufferCreateInfo(dataSize,
+																	  VK_BUFFER_USAGE_VERTEX_BUFFER_BIT), m_context.getDefaultAllocator(), MemoryRequirement::HostVisible);
+	deUint8*								ptr						= reinterpret_cast<deUint8*>(vertexBuffer->getBoundMemory().getHostPtr());
+
+	deMemcpy(ptr, &(m_data.m_vertices[0]), static_cast<size_t>(dataSize));
+	flushAlloc(vk, device, vertexBuffer->getBoundMemory());
+
+	const CmdPoolCreateInfo					cmdPoolCreateInfo		(queueFamilyIndex);
+	const Unique<VkCommandPool>				cmdPool					(createCommandPool(vk, device, &cmdPoolCreateInfo));
+	const Unique<VkCommandBuffer>			cmdBuffer				(allocateCommandBuffer(vk, device, *cmdPool, VK_COMMAND_BUFFER_LEVEL_PRIMARY));
+	const Unique<VkShaderModule>			vs						(createShaderModule(vk, device, m_context.getBinaryCollection().get("vert"), 0));
+	const Unique<VkShaderModule>			fs						(createShaderModule(vk, device, m_context.getBinaryCollection().get("frag"), 0));
+	VkViewport								viewport				= makeViewport(WIDTH, HEIGHT);
+	VkRect2D								scissor					= makeRect2D(WIDTH, HEIGHT);
+	vector<Move<VkPipeline>>				pipelines;
+
+	PipelineCreateInfo pipelineCreateInfo(*pipelineLayout, *renderPass, 0, 0);
+	pipelineCreateInfo.addShader(PipelineCreateInfo::PipelineShaderStage(*vs, "main", VK_SHADER_STAGE_VERTEX_BIT));
+	pipelineCreateInfo.addShader(PipelineCreateInfo::PipelineShaderStage(*fs, "main", VK_SHADER_STAGE_FRAGMENT_BIT));
+	pipelineCreateInfo.addState(PipelineCreateInfo::VertexInputState(vertexInputState));
+	pipelineCreateInfo.addState(PipelineCreateInfo::InputAssemblerState(VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST));
+	PipelineCreateInfo::ColorBlendState::Attachment	attachment;
+	pipelineCreateInfo.addState(PipelineCreateInfo::ColorBlendState(1u, &attachment));
+	pipelineCreateInfo.addState(PipelineCreateInfo::ViewportState(1, vector<VkViewport>(1, viewport), vector<VkRect2D>(1, scissor)));
+	pipelineCreateInfo.addState(PipelineCreateInfo::DepthStencilState());
+	pipelineCreateInfo.addState(PipelineCreateInfo::RasterizerState());
+	pipelineCreateInfo.addState(PipelineCreateInfo::MultiSampleState());
+
+	for (deUint32 i = 0; i < m_data.m_numLayers; i++)
+	{
+		pipelineCreateInfo.subpass = i;
+		pipelines.push_back(createGraphicsPipeline(vk, device, DE_NULL, &pipelineCreateInfo));
+	}
+
+	beginCommandBuffer(vk, *cmdBuffer, 0u);
+
+	const VkImageMemoryBarrier				initialTransition		=
+	{
+		VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER,		// VkStructureType	sType
+		DE_NULL,									// const void*		pNext
+		0u,											// VkAccessFlags	srcAccessMask
+		VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,		// VkAccessFlags	dstAccessMask
+		VK_IMAGE_LAYOUT_UNDEFINED,					// VkImageLayout	oldLayout
+		VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,	// VkImageLayout	newLayout
+		VK_QUEUE_FAMILY_IGNORED,					// deUint32			srcQueueFamilyIndex
+		VK_QUEUE_FAMILY_IGNORED,					// deUint32			destQueueFamilyIndex
+		*colorTargetImage,							// VkImage			image
+		makeImageSubresourceRange(VK_IMAGE_ASPECT_COLOR_BIT, 0u, 1u, 0, m_data.m_numLayers)	// VkImageSubresourceRange	subresourceRange
+	};
+
+	vk.cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_HOST_BIT, VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, (vk::VkDependencyFlags)0, 0, (const vk::VkMemoryBarrier*)DE_NULL,
+						  0, (const vk::VkBufferMemoryBarrier*)DE_NULL, 1, &initialTransition);
+
+	const VkRect2D							renderArea				= makeRect2D(WIDTH, HEIGHT);
+
+	vector<VkClearValue>					clearColors				(m_data.m_numLayers, makeClearValueColorF32(0.0f, 0.0f, 0.0f, 1.0f));
+
+	const VkRenderPassBeginInfo				renderPassBeginInfo		=
+	{
+		VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO,	// VkStructureType         sType
+		DE_NULL,									// const void*             pNext
+		*renderPass,								// VkRenderPass            renderPass
+		*framebuffer,								// VkFramebuffer           framebuffer
+		renderArea,									// VkRect2D                renderArea
+		(deUint32)clearColors.size(),				// deUint32                clearValueCount
+		clearColors.data(),							// const VkClearValue*     pClearValues
+	};
+
+	vk.cmdBeginRenderPass(*cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE);
+
+	const VkDeviceSize						vertexBufferOffset		= 0;
+	const VkBuffer							vertexBufferObj			= vertexBuffer->object();
+
+	vk.cmdBindVertexBuffers(*cmdBuffer, 0, 1, &vertexBufferObj, &vertexBufferOffset);
+	for (deUint32 i = 0; i < m_data.m_numLayers; i++)
+	{
+		if (i != 0)
+			vk.cmdNextSubpass(*cmdBuffer, VK_SUBPASS_CONTENTS_INLINE);
+
+		vk.cmdBindPipeline(*cmdBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, *pipelines[i]);
+		vk.cmdDraw(*cmdBuffer, 9u, 1u, i * 9u, 0u);
+	}
+
+	endRenderPass(vk, *cmdBuffer);
+
+	const VkImageMemoryBarrier				imageBarrier			=
+	{
+		VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER,		// VkStructureType			sType
+		DE_NULL,									// const void*				pNext
+		VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,		// VkAccessFlags			srcAccessMask
+		VK_ACCESS_TRANSFER_READ_BIT,				// VkAccessFlags			dstAccessMask
+		VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,	// VkImageLayout			oldLayout
+		VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,		// VkImageLayout			newLayout
+		VK_QUEUE_FAMILY_IGNORED,					// deUint32					srcQueueFamilyIndex
+		VK_QUEUE_FAMILY_IGNORED,					// deUint32					destQueueFamilyIndex
+		*colorTargetImage,							// VkImage					image
+		makeImageSubresourceRange(VK_IMAGE_ASPECT_COLOR_BIT, 0u, 1u, 0, m_data.m_numLayers)	// VkImageSubresourceRange	subresourceRange;
+	};
+
+	vk.cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, 0u,
+						  0u, DE_NULL, 0u, DE_NULL, 1u, &imageBarrier);
+
+	for (deUint32 i = 0; i < m_data.m_numLayers; i++)
+	{
+		const VkImageSubresourceLayers	subresource	=
+		{
+			VK_IMAGE_ASPECT_COLOR_BIT,	// VkImageAspectFlags	aspectMask
+			0u,							// deUint32				mipLevel
+			i,							// deUint32				baseArrayLayer
+			1u							// deUint32				layerCount
+		};
+
+		const VkBufferImageCopy			region		=
+		{
+			0ull,							// VkDeviceSize					bufferOffset
+			0u,								// deUint32						bufferRowLength
+			0u,								// deUint32						bufferImageHeight
+			subresource,					// VkImageSubresourceLayers		imageSubresource
+			makeOffset3D(0, 0, 0),			// VkOffset3D					imageOffset
+			makeExtent3D(WIDTH, HEIGHT, 1u)	// VkExtent3D					imageExtent
+		};
+
+		vk.cmdCopyImageToBuffer(*cmdBuffer, *colorTargetImage, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, *resultBuffers[i], 1u, &region);
+
+		const VkBufferMemoryBarrier	bufferBarrier =
+		{
+			VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER,	// VkStructureType	sType
+			DE_NULL,									// const void*		pNext
+			VK_ACCESS_TRANSFER_WRITE_BIT,				// VkAccessFlags	srcAccessMask
+			VK_ACCESS_HOST_READ_BIT,					// VkAccessFlags	dstAccessMask
+			VK_QUEUE_FAMILY_IGNORED,					// deUint32			srcQueueFamilyIndex
+			VK_QUEUE_FAMILY_IGNORED,					// deUint32			dstQueueFamilyIndex
+			*resultBuffers[i],							// VkBuffer			buffer
+			0ull,										// VkDeviceSize		offset
+			VK_WHOLE_SIZE								// VkDeviceSize		size
+		};
+
+		vk.cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_HOST_BIT, 0u,
+							  0u, DE_NULL, 1u, &bufferBarrier, 0u, DE_NULL);
+	}
+
+	endCommandBuffer(vk, *cmdBuffer);
+
+	submitCommandsAndWait(vk, device, queue, cmdBuffer.get());
+
+	qpTestResult res = QP_TEST_RESULT_PASS;
+
+	for (deUint32 i = 0; i < m_data.m_numLayers; i++)
+	{
+		invalidateMappedMemoryRange(vk, m_context.getDevice(), resultBufferAllocations[i]->getMemory(),
+									resultBufferAllocations[i]->getOffset(), VK_WHOLE_SIZE);
+
+		tcu::TextureLevel					refImage(mapVkFormat(colorAttachmentFormat), WIDTH, HEIGHT);
+		tcu::clear(refImage.getAccess(), tcu::Vec4(0.0f, 0.0f, 0.0f, 1.0f));
+
+		vector<tcu::Vec4>					vertices;
+		vector<tcu::Vec4>					colors;
+
+		for (int v = 0; v < 9; v++)
+		{
+			int idx = i * 9 + v;
+			vertices.push_back(m_data.m_vertices[idx].position);
+			colors.push_back(m_data.m_vertices[idx].color);
+		}
+
+		generateRefImage(refImage.getAccess(), vertices, colors);
+
+		const tcu::TextureFormat			format			(mapVkFormat(colorAttachmentFormat));
+		const void *const					ptrResult		(resultBufferAllocations[i]->getHostPtr());
+		const tcu::ConstPixelBufferAccess	renderedFrame	(format, WIDTH, HEIGHT, 1, ptrResult);
+
+		if (!tcu::fuzzyCompare(log, "Result", "Image comparison result", refImage.getAccess(), renderedFrame, 0.053f, tcu::COMPARE_LOG_RESULT))
+			res = QP_TEST_RESULT_FAIL;
+	}
+
+	return tcu::TestStatus(res, qpGetTestResultName(res));
+}
+
+void createAhbDrawTests (tcu::TestCaseGroup* testGroup)
+{
+	testGroup->addChild(new AhbTestCase(testGroup->getTestContext(), "triangle_list", "Draw triangle list to a single layer color buffer",
+									 DrawParams(9u, 1u)));
+
+	testGroup->addChild(new AhbTestCase(testGroup->getTestContext(), "triangle_list_layers_3", "Draw triangle list to a color buffer with three layers",
+										DrawParams(9u * 3u, 3u)));
+
+	testGroup->addChild(new AhbTestCase(testGroup->getTestContext(), "triangle_list_layers_5", "Draw triangle list to a color buffer with five layers",
+										DrawParams(9u * 5u, 5u)));
+
+	testGroup->addChild(new AhbTestCase(testGroup->getTestContext(), "triangle_list_layers_8", "Draw triangle list to a color buffer with eight layers",
+										DrawParams(9u * 8u, 8u)));
+
+}
+
+}	// anonymous
+
+tcu::TestCaseGroup*	createAhbTests (tcu::TestContext& testCtx)
+{
+	return createTestGroup(testCtx, "ahb", "Draw tests using Android Hardware Buffer", createAhbDrawTests);
+}
+
+}	// DrawTests
+}	// vkt
diff --git a/external/vulkancts/modules/vulkan/pipeline/vktPipelineVertexOnlyTests.hpp b/external/vulkancts/modules/vulkan/draw/vktDrawAhbTests.hpp
similarity index 65%
copy from external/vulkancts/modules/vulkan/pipeline/vktPipelineVertexOnlyTests.hpp
copy to external/vulkancts/modules/vulkan/draw/vktDrawAhbTests.hpp
index 1a85ebf..cbb0f03 100644
--- a/external/vulkancts/modules/vulkan/pipeline/vktPipelineVertexOnlyTests.hpp
+++ b/external/vulkancts/modules/vulkan/draw/vktDrawAhbTests.hpp
@@ -1,11 +1,12 @@
-#ifndef _VKTPIPELINEVERTEXONLYTESTS_HPP
-#define _VKTPIPELINEVERTEXONLYTESTS_HPP
+#ifndef _VKTDRAWAHBTESTS_HPP
+#define _VKTDRAWAHBTESTS_HPP
 /*------------------------------------------------------------------------
  * Vulkan Conformance Tests
  * ------------------------
  *
- * Copyright (c) 2019 Google LLC
- * Copyright (c) 2019 The Khronos Group Inc.
+ * Copyright (c) 2020 The Khronos Group Inc.
+ * Copyright (c) 2020 Google LLC
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -21,20 +22,20 @@
  *
  *//*!
  * \file
- * \brief Tests using only vertex shader in a graphics pipeline
+ * \brief Android Hardware Buffer Draw Tests
  *//*--------------------------------------------------------------------*/
 
-#include "tcuDefs.hpp"
-#include "tcuTestCase.hpp"
+#include "vkDefs.hpp"
+#include "vktTestCase.hpp"
 
 namespace vkt
 {
-namespace pipeline
+namespace Draw
 {
 
-tcu::TestCaseGroup*	createVertexOnlyTests (tcu::TestContext& testCtx);
+tcu::TestCaseGroup*	createAhbTests (tcu::TestContext& testCtx);
 
-} // pipeline
+} // Draw
 } // vkt
 
-#endif // _VKTPIPELINEVERTEXONLYTESTS_HPP
+#endif // _VKTDRAWAHBTESTS_HPP
diff --git a/external/vulkancts/modules/vulkan/draw/vktDrawConcurrentTests.cpp b/external/vulkancts/modules/vulkan/draw/vktDrawConcurrentTests.cpp
index 03679c3..b3a38c3 100644
--- a/external/vulkancts/modules/vulkan/draw/vktDrawConcurrentTests.cpp
+++ b/external/vulkancts/modules/vulkan/draw/vktDrawConcurrentTests.cpp
@@ -27,6 +27,7 @@
 
 #include "vktDrawConcurrentTests.hpp"
 
+#include "vktCustomInstancesDevices.hpp"
 #include "vktTestCaseUtil.hpp"
 #include "vktDrawTestCaseUtil.hpp"
 #include "../compute/vktComputeTestsUtil.hpp"
@@ -106,6 +107,7 @@
 	const deUint32							numValues		= 1024;
 	const InstanceInterface&				instance		= m_context.getInstanceInterface();
 	const VkPhysicalDevice					physicalDevice	= m_context.getPhysicalDevice();
+	const auto								validation		= m_context.getTestContext().getCommandLine().isValidationEnabled();
 	tcu::TestLog&							log				= m_context.getTestContext().getLog();
 	Move<VkDevice>							computeDevice;
 	std::vector<VkQueueFamilyProperties>	queueFamilyProperties;
@@ -156,7 +158,7 @@
 	deviceInfo.queueCreateInfoCount		= 1;
 	deviceInfo.pQueueCreateInfos		= &queueInfos;
 
-	computeDevice = createDevice(m_context.getPlatformInterface(), m_context.getInstance(), instance, physicalDevice, &deviceInfo);
+	computeDevice = createCustomDevice(validation, m_context.getPlatformInterface(), m_context.getInstance(), instance, physicalDevice, &deviceInfo);
 
 	vk.getDeviceQueue(*computeDevice, computeQueue.queueFamilyIndex, 0, &computeQueue.queue);
 
diff --git a/external/vulkancts/modules/vulkan/draw/vktDrawCreateInfoUtil.cpp b/external/vulkancts/modules/vulkan/draw/vktDrawCreateInfoUtil.cpp
index 16bee00..0acbee5 100644
--- a/external/vulkancts/modules/vulkan/draw/vktDrawCreateInfoUtil.cpp
+++ b/external/vulkancts/modules/vulkan/draw/vktDrawCreateInfoUtil.cpp
@@ -112,7 +112,7 @@
 			break;
 	}
 
-	subresourceRange = ImageSubresourceRange(aspectFlags);;
+	subresourceRange = ImageSubresourceRange(aspectFlags);
 	flags = _flags;
 }
 
diff --git a/external/vulkancts/modules/vulkan/draw/vktDrawInstancedTests.cpp b/external/vulkancts/modules/vulkan/draw/vktDrawInstancedTests.cpp
index f0df4a2..ad28aff 100644
--- a/external/vulkancts/modules/vulkan/draw/vktDrawInstancedTests.cpp
+++ b/external/vulkancts/modules/vulkan/draw/vktDrawInstancedTests.cpp
@@ -310,6 +310,13 @@
 					TCU_THROW(NotSupportedError, "Implementation does not support multiview feature");
 			}
 		}
+
+		if (m_params.topology == vk::VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN &&
+			context.isDeviceFunctionalitySupported("VK_KHR_portability_subset") &&
+			!context.getPortabilitySubsetFeatures().triangleFans)
+		{
+			TCU_THROW(NotSupportedError, "VK_KHR_portability_subset: Triangle fans are not supported by this implementation");
+		}
 	}
 
 	TestInstance*	createInstance	(Context& context) const
diff --git a/external/vulkancts/modules/vulkan/draw/vktDrawInvertedDepthRangesTests.cpp b/external/vulkancts/modules/vulkan/draw/vktDrawInvertedDepthRangesTests.cpp
index 3144dd9..3fc330a 100644
--- a/external/vulkancts/modules/vulkan/draw/vktDrawInvertedDepthRangesTests.cpp
+++ b/external/vulkancts/modules/vulkan/draw/vktDrawInvertedDepthRangesTests.cpp
@@ -59,9 +59,12 @@
 
 struct TestParams
 {
-	VkBool32	depthClampEnable;
 	float		minDepth;
 	float		maxDepth;
+	VkBool32	depthClampEnable;
+	VkBool32	depthBiasEnable;
+	float		depthBiasClamp;
+
 };
 
 constexpr deUint32			kImageDim		= 256u;
@@ -75,6 +78,10 @@
 constexpr float				kMargin			= 0.2f;		// Space between triangle and image border. See kVertices.
 constexpr float				kDiagonalMargin	= 0.00125f; // Makes sure the image diagonal falls inside the triangle. See kVertices.
 const Vec4					kVertexColor	(0.0f, 0.5f, 0.5f, 1.0f); // Note: the first component will vary.
+
+// Maximum depth slope is constant for triangle and the value here is true only for triangle used it this tests.
+constexpr float				kMaxDepthSlope = 1.4f / 205;
+
 const std::array<Vec4, 3u>	kVertices		=
 {{
 	Vec4(-1.0f + kMargin,                   -1.0f + kMargin,                    -0.2f, 1.0f),	//  0-----2
@@ -272,16 +279,16 @@
 	pipelineCreateInfo.addState (PipelineCreateInfo::ViewportState		(1, std::vector<VkViewport>(), std::vector<VkRect2D>(1, scissor)));
 	pipelineCreateInfo.addState (PipelineCreateInfo::DepthStencilState	(true, true));
 	pipelineCreateInfo.addState (PipelineCreateInfo::RasterizerState	(
-		m_params.depthClampEnable,	// depthClampEnable
-		VK_FALSE,					// rasterizerDiscardEnable
-		VK_POLYGON_MODE_FILL,		// polygonMode
-		VK_CULL_MODE_NONE,			// cullMode
-		VK_FRONT_FACE_CLOCKWISE,	// frontFace
-		VK_FALSE,					// depthBiasEnable
-		0.0f,						// depthBiasConstantFactor
-		0.0f,						// depthBiasClamp
-		0.0f,						// depthBiasSlopeFactor
-		1.0f));						// lineWidth
+		m_params.depthClampEnable,										// depthClampEnable
+		VK_FALSE,														// rasterizerDiscardEnable
+		VK_POLYGON_MODE_FILL,											// polygonMode
+		VK_CULL_MODE_NONE,												// cullMode
+		VK_FRONT_FACE_CLOCKWISE,										// frontFace
+		m_params.depthBiasEnable,										// depthBiasEnable
+		0.0f,															// depthBiasConstantFactor
+		m_params.depthBiasEnable ? m_params.depthBiasClamp : 0.0f,		// depthBiasClamp
+		m_params.depthBiasEnable ? 1.0f : 0.0f,							// depthBiasSlopeFactor
+		1.0f));															// lineWidth
 	pipelineCreateInfo.addState (PipelineCreateInfo::MultiSampleState	());
 	pipelineCreateInfo.addState (PipelineCreateInfo::DynamicState		(dynamicStates));
 
@@ -385,6 +392,7 @@
 	const float						clampMin		= de::min(m_params.minDepth, m_params.maxDepth);
 	const float						clampMax		= de::max(m_params.minDepth, m_params.maxDepth);
 	std::array<float, 3>			depthValues;
+	float							depthBias		= 0.0f;
 
 	// Depth value of each vertex in kVertices.
 	DE_ASSERT(depthValues.size() == kVertices.size());
@@ -396,6 +404,25 @@
 	{
 		tcu::clearDepth(access, kClearDepth);
 		tcu::clearStencil(access, kClearStencil);
+
+		if (m_params.depthBiasEnable)
+		{
+			const float	depthBiasSlopeFactor	= 1.0f;
+			const float	r						= 0.000030518f;		// minimum resolvable difference is an implementation-dependent parameter
+			const float	depthBiasConstantFactor	= 0.0f;				// so we use factor 0.0 to not include it; same as in PipelineCreateInfo
+
+			// Equations taken from vkCmdSetDepthBias manual page
+			depthBias = kMaxDepthSlope * depthBiasSlopeFactor + r * depthBiasConstantFactor;
+
+			// dbclamp(x) function depends on the sign of the depthBiasClamp
+			if (m_params.depthBiasClamp < 0.0f)
+				depthBias = de::max(depthBias, m_params.depthBiasClamp);
+			else if (m_params.depthBiasClamp > 0.0f)
+				depthBias = de::min(depthBias, m_params.depthBiasClamp);
+
+			if (m_params.maxDepth < m_params.minDepth)
+				depthBias *= -1.0f;
+		}
 	}
 
 	for (int y = 0; y < iHeight; ++y)
@@ -417,11 +444,12 @@
 		const float b				= (ycoord - p1f) / triangleSide;
 		const float c				= (xcoord - p1f) / triangleSide;
 		const float a				= 1.0f - b - c;
-		const float	depth			= a * depthValues[0] + b * depthValues[1] + c * depthValues[2];
+		const float depth			= a * depthValues[0] + b * depthValues[1] + c * depthValues[2];
 
-		const float	depthClamped	= de::clamp(depth, 0.0f, 1.0f);
-		const float	depthFinal		= depthClamped * m_params.maxDepth + (1.0f - depthClamped) * m_params.minDepth;
-		const float	storedDepth		= (m_params.depthClampEnable ? de::clamp(depthFinal, clampMin, clampMax) : depthFinal);
+		// Depth values are always limited to the range [0,1] by clamping after depth bias addition is performed
+		const float depthClamped	= de::clamp(depth + depthBias, 0.0f, 1.0f);
+		const float depthFinal		= depthClamped * m_params.maxDepth + (1.0f - depthClamped) * m_params.minDepth;
+		const float storedDepth		= (m_params.depthClampEnable ? de::clamp(depthFinal, clampMin, clampMax) : depthFinal);
 
 		if (m_params.depthClampEnable || de::inRange(depth, -kDepthEpsilon, 1.0f + kDepthEpsilon))
 		{
@@ -570,6 +598,9 @@
 		if (m_params.depthClampEnable)
 			context.requireDeviceCoreFeature(DEVICE_CORE_FEATURE_DEPTH_CLAMP);
 
+		if (m_params.depthBiasEnable && m_params.depthBiasClamp != 0.0f)
+			context.requireDeviceCoreFeature(DEVICE_CORE_FEATURE_DEPTH_BIAS_CLAMP);
+
 		if (m_params.minDepth > 1.0f || m_params.minDepth < 0.0f || m_params.maxDepth > 1.0f || m_params.maxDepth < 0.0f)
 			context.requireDeviceFunctionality("VK_EXT_depth_range_unrestricted");
 	}
@@ -587,8 +618,8 @@
 {
 	const struct
 	{
-		const char* const	name;
-		VkBool32			depthClamp;
+		std::string		name;
+		VkBool32		depthClamp;
 	} depthClamp[] =
 	{
 		{ "depthclamp",		VK_TRUE		},
@@ -597,35 +628,44 @@
 
 	const struct
 	{
-		const char* const	name;
-		float				delta;
-	} delta[] =
+		std::string		name;
+		float			delta;
+		VkBool32		depthBiasEnable;
+		float			depthBiasClamp;
+	} depthParams[] =
 	{
-		{ "deltazero",					0.0f	},
-		{ "deltasmall",					0.3f	},
-		{ "deltaone",					1.0f	},
+		{ "deltazero",					0.0f,		DE_FALSE,	 0.0f },
+		{ "deltasmall",					0.3f,		DE_FALSE,	 0.0f },
+		{ "deltaone",					1.0f,		DE_FALSE,	 0.0f },
+
+		// depthBiasClamp must be smaller then maximum depth slope to make a difference
+		{ "deltaone_bias_clamp_neg",	1.0f,		DE_TRUE,	-0.003f },
+		{ "deltasmall_bias_clamp_pos",	0.3f,		DE_TRUE,	 0.003f },
 
 		// Range > 1.0 requires VK_EXT_depth_range_unrestricted extension
-		{ "depth_range_unrestricted",	2.7f	},
+		{ "depth_range_unrestricted",	2.7f,		DE_FALSE,	 0.0f },
 	};
 
 	for (int ndxDepthClamp = 0; ndxDepthClamp < DE_LENGTH_OF_ARRAY(depthClamp); ++ndxDepthClamp)
-	for (int ndxDelta = 0; ndxDelta < DE_LENGTH_OF_ARRAY(delta); ++ndxDelta)
+	for (int ndxParams = 0; ndxParams < DE_LENGTH_OF_ARRAY(depthParams); ++ndxParams)
 	{
-		const float minDepth = 0.5f + delta[ndxDelta].delta / 2.0f;
-		const float maxDepth = minDepth - delta[ndxDelta].delta;
+		const auto& cDepthClamp		= depthClamp[ndxDepthClamp];
+		const auto& cDepthParams	= depthParams[ndxParams];
+		const float minDepth		= 0.5f + cDepthParams.delta / 2.0f;
+		const float maxDepth		 = minDepth - cDepthParams.delta;
 		DE_ASSERT(minDepth >= maxDepth);
 
 		const TestParams params =
 		{
-			depthClamp[ndxDepthClamp].depthClamp,
 			minDepth,
-			maxDepth
+			maxDepth,
+			cDepthClamp.depthClamp,
+			cDepthParams.depthBiasEnable,
+			cDepthParams.depthBiasClamp,
 		};
-		std::ostringstream	name;
-		name << depthClamp[ndxDepthClamp].name << "_" << delta[ndxDelta].name;
 
-		testGroup->addChild(new InvertedDepthRangesTest(testGroup->getTestContext(), name.str(), "", params));
+		std::string name = cDepthClamp.name + "_" + cDepthParams.name;
+		testGroup->addChild(new InvertedDepthRangesTest(testGroup->getTestContext(), name, "", params));
 	}
 }
 
diff --git a/external/vulkancts/modules/vulkan/draw/vktDrawMultipleClearsWithinRenderPass.cpp b/external/vulkancts/modules/vulkan/draw/vktDrawMultipleClearsWithinRenderPass.cpp
new file mode 100644
index 0000000..f22749e
--- /dev/null
+++ b/external/vulkancts/modules/vulkan/draw/vktDrawMultipleClearsWithinRenderPass.cpp
@@ -0,0 +1,736 @@
+/*-------------------------------------------------------------------------
+ * Vulkan Conformance Tests
+ * -----------------------------
+ *
+ * Copyright (c) 2020 Google Inc.
+ * Copyright (c) 2020 The Khronos Group Inc.
+ *
+ * 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 Tests for multiple color or depth clears within a render pass
+ *//*--------------------------------------------------------------------*/
+
+#include "vktDrawMultipleClearsWithinRenderPass.hpp"
+
+#include "vktTestGroupUtil.hpp"
+#include "vktTestCaseUtil.hpp"
+#include "vktDrawCreateInfoUtil.hpp"
+#include "vktDrawBufferObjectUtil.hpp"
+#include "vktDrawImageObjectUtil.hpp"
+#include "vkPrograms.hpp"
+#include "vkTypeUtil.hpp"
+#include "vkRefUtil.hpp"
+#include "vkCmdUtil.hpp"
+#include "vkBuilderUtil.hpp"
+#include "vkImageUtil.hpp"
+#include "vkQueryUtil.hpp"
+#include "tcuTextureUtil.hpp"
+#include "vktDrawTestCaseUtil.hpp"
+
+#include "deStringUtil.hpp"
+
+#include <cmath>
+#include <vector>
+#include <string>
+#include <sstream>
+
+namespace vkt
+{
+namespace Draw
+{
+namespace
+{
+using namespace vk;
+using tcu::Vec4;
+using de::SharedPtr;
+using std::string;
+using std::abs;
+using std::vector;
+using std::ostringstream;
+
+const deUint32						WIDTH					= 400;
+const deUint32						HEIGHT					= 300;
+
+enum struct Topology
+{
+	TRIANGLE_STRIP = 0,
+	TRIANGLES,
+	TRIANGLE
+};
+
+const Topology						topologiesToTest[]		=
+{
+	Topology::TRIANGLE_STRIP,
+	Topology::TRIANGLES,
+	Topology::TRIANGLE
+};
+
+struct FormatPair
+{
+	VkFormat colorFormat;
+	VkFormat depthFormat;
+};
+
+const FormatPair					formatsToTest[]			=
+{
+	{ VK_FORMAT_R8G8B8A8_UNORM	, VK_FORMAT_UNDEFINED	},
+	{ VK_FORMAT_R8G8B8A8_SNORM	, VK_FORMAT_UNDEFINED	},
+	{ VK_FORMAT_UNDEFINED		, VK_FORMAT_D32_SFLOAT	},
+	{ VK_FORMAT_UNDEFINED		, VK_FORMAT_D16_UNORM	},
+	{ VK_FORMAT_R8G8B8A8_UNORM	, VK_FORMAT_D32_SFLOAT	},
+	{ VK_FORMAT_R8G8B8A8_UNORM	, VK_FORMAT_D16_UNORM	},
+	{ VK_FORMAT_R8G8B8A8_SNORM	, VK_FORMAT_D32_SFLOAT	},
+	{ VK_FORMAT_R8G8B8A8_SNORM	, VK_FORMAT_D16_UNORM	},
+};
+
+const Vec4							verticesTriangleStrip[]	=
+{
+	Vec4(-1.0f, -1.0f,	0.0f, 1.0f),	// 0 -- 2
+	Vec4(-1.0f,	 1.0f,	0.0f, 1.0f),	// |  / |
+	Vec4( 1.0f, -1.0f,	0.0f, 1.0f),	// | /	|
+	Vec4( 1.0f,	 1.0f,	0.0f, 1.0f)		// 1 -- 3
+};
+const Vec4							verticesTriangles[]		=
+{
+	Vec4(-1.0f, -1.0f,	0.0f, 1.0f),	// 0 - 1
+	Vec4(-1.0f,	 1.0f,	0.0f, 1.0f),	// | /
+	Vec4( 1.0f, -1.0f,	0.0f, 1.0f),	// 2
+	Vec4( 1.0f, -1.0f,	0.0f, 1.0f),	//	   4
+	Vec4(-1.0f,	 1.0f,	0.0f, 1.0f),	//	 / |
+	Vec4( 1.0f,	 1.0f,	0.0f, 1.0f)		// 3 - 5
+};
+const Vec4							verticesBigTriangle[]	=
+{
+	Vec4(-1.0f, -1.0f,	0.0f, 1.0f),	// 0 - 2
+	Vec4(-1.0f,	 3.0f,	0.0f, 1.0f),	// | /
+	Vec4( 3.0f, -1.0f,	0.0f, 1.0f),	// 1
+};
+
+const deUint32			TOPOLOGY_MAX_VERTICES_COUNT			= 6;
+const deUint32			TEST_MAX_STEPS_COUNT				= 3;
+
+struct Vertices
+{
+	const char*			testNameSuffix;
+	VkPrimitiveTopology	topology;
+	deUint32			verticesCount;
+	const Vec4*			vertices;
+};
+
+const Vertices			verticesByTopology[]				=
+{
+	{
+		"_triangle_strip",
+		VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP,
+		DE_LENGTH_OF_ARRAY(verticesTriangleStrip),
+		verticesTriangleStrip
+	},
+	{
+		"_triangles",
+		VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST,
+		DE_LENGTH_OF_ARRAY(verticesTriangles),
+		verticesTriangles
+	},
+	{
+		"_big_triangle",
+		VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST,
+		DE_LENGTH_OF_ARRAY(verticesBigTriangle),
+		verticesBigTriangle
+	}
+};
+
+enum struct ClearOp
+{
+	LOAD = 0,
+	DRAW,
+	CLEAR
+};
+
+struct ClearStep
+{
+	ClearOp					clearOp;
+	Vec4					color;
+	float					depth;
+};
+
+struct TestParams
+{
+	VkFormat				colorFormat;
+	VkFormat				depthFormat;
+	Topology				topology;
+	Vec4					expectedColor;
+	float					colorEpsilon;
+	float					expectedDepth;
+	float					depthEpsilon;
+	deUint32				repeatCount;
+	bool					enableBlend;
+	vector<ClearStep>		steps;
+};
+
+class MultipleClearsTest : public TestInstance
+{
+public:
+							MultipleClearsTest		(Context& context, const TestParams& params);
+	virtual tcu::TestStatus	iterate					(void);
+private:
+	void					clearAttachments		(const DeviceInterface& vk, VkCommandBuffer cmdBuffer, const ClearOp clearOp, const size_t stepIndex);
+
+	SharedPtr<Image>		m_colorTargetImage;
+	SharedPtr<Image>		m_depthTargetImage;
+	Move<VkImageView>		m_colorTargetView;
+	Move<VkImageView>		m_depthTargetView;
+	SharedPtr<Buffer>		m_vertexBuffer;
+	Move<VkRenderPass>		m_renderPass;
+	Move<VkFramebuffer>		m_framebuffer;
+	Move<VkPipelineLayout>	m_pipelineLayout;
+	Move<VkPipeline>		m_pipeline;
+
+	const TestParams		m_params;
+	Vec4					m_vertices[TOPOLOGY_MAX_VERTICES_COUNT * TEST_MAX_STEPS_COUNT];
+};
+
+MultipleClearsTest::MultipleClearsTest (Context &context, const TestParams& params)
+	: TestInstance(context)
+	, m_params(params)
+{
+	const DeviceInterface&		vk					= m_context.getDeviceInterface();
+	const VkDevice				device				= m_context.getDevice();
+	const deUint32				queueFamilyIndex	= m_context.getUniversalQueueFamilyIndex();
+	const bool					hasColor			= m_params.colorFormat != VK_FORMAT_UNDEFINED;
+	const bool					hasDepth			= m_params.depthFormat != VK_FORMAT_UNDEFINED;
+
+	DescriptorSetLayoutBuilder	descriptorSetLayoutBuilder;
+	// Vertex data
+	const auto&					vertexData			= verticesByTopology[(size_t)m_params.topology];
+	{
+		DE_ASSERT(vertexData.verticesCount <= TOPOLOGY_MAX_VERTICES_COUNT);
+		const size_t			verticesCount		= vertexData.verticesCount;
+		const VkDeviceSize		dataSize			= verticesCount * sizeof(Vec4);
+		const VkDeviceSize		totalDataSize		= m_params.steps.size() * dataSize;
+		DE_ASSERT(totalDataSize <= sizeof(m_vertices));
+
+		for(size_t i = 0; i < m_params.steps.size(); ++i)
+		{
+			const size_t start = i * verticesCount;
+			deMemcpy(&m_vertices[start], vertexData.vertices, static_cast<size_t>(dataSize));
+			for(size_t j = 0; j < verticesCount; ++j)
+				m_vertices[start + j][2] = m_params.steps[i].depth;
+		}
+		m_vertexBuffer								= Buffer::createAndAlloc(vk, device, BufferCreateInfo(totalDataSize, VK_BUFFER_USAGE_VERTEX_BUFFER_BIT),
+																			 m_context.getDefaultAllocator(), MemoryRequirement::HostVisible);
+		deMemcpy(m_vertexBuffer->getBoundMemory().getHostPtr(), m_vertices, static_cast<std::size_t>(totalDataSize));
+		flushMappedMemoryRange(vk, device, m_vertexBuffer->getBoundMemory().getMemory(), m_vertexBuffer->getBoundMemory().getOffset(), VK_WHOLE_SIZE);
+	}
+	// Render pass
+	std::vector<VkImageView>			attachments;
+	{
+		RenderPassCreateInfo			renderPassCreateInfo;
+		if (hasColor)
+		{
+			const VkImageUsageFlags		targetImageUsageFlags		= VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | VK_IMAGE_USAGE_TRANSFER_SRC_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT;
+			const ImageCreateInfo		targetImageCreateInfo		(VK_IMAGE_TYPE_2D, m_params.colorFormat, { WIDTH, HEIGHT, 1u }, 1u,	1u,	VK_SAMPLE_COUNT_1_BIT, VK_IMAGE_TILING_OPTIMAL, targetImageUsageFlags);
+			m_colorTargetImage										= Image::createAndAlloc(vk, device, targetImageCreateInfo, m_context.getDefaultAllocator(), queueFamilyIndex);
+
+			renderPassCreateInfo.addAttachment(AttachmentDescription(
+				 m_params.colorFormat,								// format
+				 VK_SAMPLE_COUNT_1_BIT,								// samples
+				 VK_ATTACHMENT_LOAD_OP_LOAD,						// loadOp
+				 VK_ATTACHMENT_STORE_OP_STORE,						// storeOp
+				 VK_ATTACHMENT_LOAD_OP_DONT_CARE,					// stencilLoadOp
+				 VK_ATTACHMENT_STORE_OP_DONT_CARE,					// stencilStoreOp
+				 VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,			// initialLayout
+				 VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL));		// finalLayout
+
+			const ImageViewCreateInfo	colorTargetViewInfo			(m_colorTargetImage->object(), VK_IMAGE_VIEW_TYPE_2D, m_params.colorFormat);
+			m_colorTargetView										= createImageView(vk, device, &colorTargetViewInfo);
+			attachments.push_back(*m_colorTargetView);
+		}
+		if (hasDepth)
+		{
+			const VkImageUsageFlags		depthImageUsageFlags		= VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT | VK_IMAGE_USAGE_TRANSFER_SRC_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT;
+			const ImageCreateInfo		depthImageCreateInfo		(VK_IMAGE_TYPE_2D, m_params.depthFormat, { WIDTH, HEIGHT, 1u }, 1u,	1u,	VK_SAMPLE_COUNT_1_BIT, VK_IMAGE_TILING_OPTIMAL, depthImageUsageFlags);
+			m_depthTargetImage										= Image::createAndAlloc(vk, device, depthImageCreateInfo, m_context.getDefaultAllocator(), queueFamilyIndex);
+
+			renderPassCreateInfo.addAttachment(AttachmentDescription(
+				m_params.depthFormat,								// format
+				VK_SAMPLE_COUNT_1_BIT,								// samples
+				VK_ATTACHMENT_LOAD_OP_LOAD,							// loadOp
+				VK_ATTACHMENT_STORE_OP_STORE,						// storeOp
+				VK_ATTACHMENT_LOAD_OP_DONT_CARE,					// stencilLoadOp
+				VK_ATTACHMENT_STORE_OP_DONT_CARE,					// stencilStoreOp
+				VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL,	// initialLayout
+				VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL));	// finalLayout
+
+			const ImageViewCreateInfo	depthTargetViewInfo			(m_depthTargetImage->object(), VK_IMAGE_VIEW_TYPE_2D, m_params.depthFormat);
+			m_depthTargetView										= createImageView(vk, device, &depthTargetViewInfo);;
+			attachments.push_back(*m_depthTargetView);
+		}
+		const VkAttachmentReference colorAttachmentReference		= hasColor ? makeAttachmentReference(0u, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL) : AttachmentReference();
+		const VkAttachmentReference depthAttachmentReference		= hasDepth ? makeAttachmentReference(hasColor ? 1u : 0u, VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL) : AttachmentReference();
+		renderPassCreateInfo.addSubpass(SubpassDescription(
+			VK_PIPELINE_BIND_POINT_GRAPHICS,						// pipelineBindPoint
+			(VkSubpassDescriptionFlags)0,							// flags
+			0u,														// inputAttachmentCount
+			DE_NULL,												// inputAttachments
+			hasColor ? 1 : 0,										// colorAttachmentCount
+			hasColor ? &colorAttachmentReference : DE_NULL,			// colorAttachments
+			DE_NULL,												// resolveAttachments
+			depthAttachmentReference,								// depthStencilAttachment
+			0u,														// preserveAttachmentCount
+			DE_NULL));												// preserveAttachments
+		m_renderPass												= createRenderPass(vk, device, &renderPassCreateInfo);
+	}
+	const FramebufferCreateInfo					framebufferCreateInfo			(*m_renderPass, attachments, WIDTH, HEIGHT, 1);
+	m_framebuffer																= createFramebuffer(vk, device, &framebufferCreateInfo);
+
+	// Vertex input
+	const VkVertexInputBindingDescription		vertexInputBindingDescription	=
+	{
+		0u,										// uint32_t				binding;
+		sizeof(Vec4),							// uint32_t				stride;
+		VK_VERTEX_INPUT_RATE_VERTEX,			// VkVertexInputRate	inputRate;
+	};
+
+	const VkVertexInputAttributeDescription		vertexInputAttributeDescription =
+	{
+		0u,										// uint32_t		location;
+		0u,										// uint32_t		binding;
+		VK_FORMAT_R32G32B32A32_SFLOAT,			// VkFormat		format;
+		0u										// uint32_t		offset;
+	};
+
+	const PipelineCreateInfo::VertexInputState	vertexInputState				= PipelineCreateInfo::VertexInputState(1, &vertexInputBindingDescription,
+																													   1, &vertexInputAttributeDescription);
+
+	// Graphics pipeline
+	const Unique<VkShaderModule>				vertexModule					(createShaderModule(vk, device, m_context.getBinaryCollection().get("vert"), 0));
+	const Unique<VkShaderModule>				fragmentModule					(createShaderModule(vk, device, m_context.getBinaryCollection().get(hasColor ? "frag" : "frag_depthonly"), 0));
+
+	const VkPushConstantRange					pcRange							= vk::VkPushConstantRange { VkShaderStageFlagBits::VK_SHADER_STAGE_FRAGMENT_BIT, 0, sizeof(ClearStep::color) };
+	const PipelineLayoutCreateInfo				pipelineLayoutCreateInfo		(0u, DE_NULL, 1u, &pcRange);
+	m_pipelineLayout															= createPipelineLayout(vk, device, &pipelineLayoutCreateInfo);
+
+	const VkRect2D								scissor							= makeRect2D(WIDTH, HEIGHT);
+	const VkViewport							viewport						= makeViewport(WIDTH, HEIGHT);
+
+	const auto									vkCbAttachmentState				= makePipelineColorBlendAttachmentState(
+		m_params.enableBlend ? VK_TRUE : VK_FALSE,	// VkBool32					blendEnable
+		VK_BLEND_FACTOR_SRC_ALPHA,					// VkBlendFactor			srcColorBlendFactor
+		VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA,		// VkBlendFactor			dstColorBlendFactor
+		VK_BLEND_OP_ADD,							// VkBlendOp				colorBlendOp
+		VK_BLEND_FACTOR_ZERO,						// VkBlendFactor			srcAlphaBlendFactor
+		VK_BLEND_FACTOR_ONE,						// VkBlendFactor			dstAlphaBlendFactor
+		VK_BLEND_OP_ADD,							// VkBlendOp				alphaBlendOp
+		VK_COLOR_COMPONENT_R_BIT |					// VkColorComponentFlags	colorWriteMask
+		VK_COLOR_COMPONENT_G_BIT |
+		VK_COLOR_COMPONENT_B_BIT |
+		VK_COLOR_COMPONENT_A_BIT);
+	PipelineCreateInfo pipelineCreateInfo(*m_pipelineLayout, *m_renderPass, 0, (VkPipelineCreateFlags)0);
+	pipelineCreateInfo.addShader(PipelineCreateInfo::PipelineShaderStage(*vertexModule,	  "main", VK_SHADER_STAGE_VERTEX_BIT));
+	pipelineCreateInfo.addShader(PipelineCreateInfo::PipelineShaderStage(*fragmentModule, "main", VK_SHADER_STAGE_FRAGMENT_BIT));
+	pipelineCreateInfo.addState (PipelineCreateInfo::VertexInputState	(vertexInputState));
+	pipelineCreateInfo.addState (PipelineCreateInfo::InputAssemblerState(vertexData.topology));
+	pipelineCreateInfo.addState (PipelineCreateInfo::ColorBlendState	(1, &vkCbAttachmentState));
+	pipelineCreateInfo.addState (PipelineCreateInfo::ViewportState		(1, std::vector<VkViewport>(1, viewport), std::vector<VkRect2D>(1, scissor)));
+	pipelineCreateInfo.addState (PipelineCreateInfo::DepthStencilState	(hasDepth, hasDepth, VK_COMPARE_OP_ALWAYS, VK_FALSE, VK_FALSE));
+	pipelineCreateInfo.addState (PipelineCreateInfo::RasterizerState	());
+	pipelineCreateInfo.addState (PipelineCreateInfo::MultiSampleState	());
+	m_pipeline																	= createGraphicsPipeline(vk, device, DE_NULL, &pipelineCreateInfo);
+}
+
+void MultipleClearsTest::clearAttachments (const DeviceInterface& vk, vk::VkCommandBuffer cmdBuffer, const ClearOp clearOp, const size_t stepIndex)
+{
+	const Vec4& color = m_params.steps[stepIndex].color;
+	const float depth = m_params.steps[stepIndex].depth;
+	switch(clearOp) {
+	case ClearOp::LOAD:
+		break;
+	case ClearOp::DRAW:
+		{
+			const auto&		vertexData		= verticesByTopology[(size_t)m_params.topology];
+			const deUint32	verticesCount	= vertexData.verticesCount;
+			vk.cmdPushConstants(cmdBuffer, *m_pipelineLayout, VK_SHADER_STAGE_FRAGMENT_BIT, 0, sizeof(color), color.getPtr());
+			vk.cmdDraw(cmdBuffer, verticesCount, 1, static_cast<deUint32>(verticesCount * stepIndex), 0);
+		}
+		break;
+	case ClearOp::CLEAR:
+		{
+			vector<VkClearAttachment>	clearAttachments;
+			if (m_params.colorFormat != VK_FORMAT_UNDEFINED)
+			{
+				const VkClearAttachment	clearAttachment	=
+				{
+					VK_IMAGE_ASPECT_COLOR_BIT,						// VkImageAspectFlags	 aspectMask
+					static_cast<deUint32>(clearAttachments.size()),	// uint32_t				 colorAttachment
+					makeClearValueColor(color)						// VkClearValue			 clearValue
+				};
+				clearAttachments.push_back(clearAttachment);
+			}
+			if (m_params.depthFormat != VK_FORMAT_UNDEFINED)
+			{
+				const VkClearAttachment	clearAttachment	=
+				{
+					VK_IMAGE_ASPECT_DEPTH_BIT,						// VkImageAspectFlags	 aspectMask
+					static_cast<deUint32>(clearAttachments.size()),	// uint32_t				 colorAttachment
+					makeClearValueDepthStencil(depth, 0)			// VkClearValue			 clearValue
+				};
+				clearAttachments.push_back(clearAttachment);
+			}
+			const VkClearRect			clearRect		=
+			{
+				makeRect2D(WIDTH, HEIGHT),							// VkRect2D	   rect
+				0,													// uint32_t	   baseArrayLayer
+				1													// uint32_t	   layerCount
+			};
+			vk.cmdClearAttachments(cmdBuffer, static_cast<deUint32>(clearAttachments.size()), clearAttachments.data(), 1, &clearRect);
+		}
+		break;
+	default:
+		break;
+	}
+}
+
+tcu::TestStatus MultipleClearsTest::iterate (void)
+{
+	const DeviceInterface&			vk					= m_context.getDeviceInterface();
+	const VkDevice					device				= m_context.getDevice();
+	const VkQueue					queue				= m_context.getUniversalQueue();
+	const deUint32					queueFamilyIndex	= m_context.getUniversalQueueFamilyIndex();
+
+	const CmdPoolCreateInfo			cmdPoolCreateInfo	(queueFamilyIndex);
+	const Unique<VkCommandPool>		cmdPool				(createCommandPool(vk, device, &cmdPoolCreateInfo));
+	const Unique<VkCommandBuffer>	cmdBuffer			(allocateCommandBuffer(vk, device, *cmdPool, VK_COMMAND_BUFFER_LEVEL_PRIMARY));
+
+	const bool						hasColor			= m_params.colorFormat != VK_FORMAT_UNDEFINED;
+	const bool						hasDepth			= m_params.depthFormat != VK_FORMAT_UNDEFINED;
+
+	beginCommandBuffer(vk, *cmdBuffer);
+	if (hasColor)
+		initialTransitionColor2DImage(vk, *cmdBuffer, m_colorTargetImage->object(), VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT);
+	if (hasDepth)
+		initialTransitionDepth2DImage(vk, *cmdBuffer, m_depthTargetImage->object(), VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL, VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT, VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT);
+
+	if (!m_params.steps.empty() && m_params.steps[0].clearOp == ClearOp::LOAD)
+		beginRenderPass(vk, *cmdBuffer, *m_renderPass, *m_framebuffer, makeRect2D(0, 0, WIDTH, HEIGHT), m_params.steps[0].color, m_params.steps[0].depth, 0);
+	else
+		beginRenderPass(vk, *cmdBuffer, *m_renderPass, *m_framebuffer, makeRect2D(0, 0, WIDTH, HEIGHT));
+	vk.cmdBindPipeline(*cmdBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, *m_pipeline);
+	{
+		const VkDeviceSize	offset	= 0;
+		const VkBuffer		buffer	= m_vertexBuffer->object();
+		vk.cmdBindVertexBuffers(*cmdBuffer, 0, 1, &buffer, &offset);
+	}
+	for(deUint32 i = 0; i < m_params.repeatCount; ++i)
+		for(size_t j = 0; j < m_params.steps.size(); ++j)
+		{
+			const auto& step = m_params.steps[j];
+			// ClearOp::LOAD only supported for first step
+			DE_ASSERT(j == 0 || step.clearOp != ClearOp::LOAD);
+			clearAttachments(vk, *cmdBuffer, step.clearOp, j);
+		}
+
+	endRenderPass(vk, *cmdBuffer);
+
+	if (hasDepth)
+	{
+		const VkMemoryBarrier	memBarrier	= { VK_STRUCTURE_TYPE_MEMORY_BARRIER, DE_NULL, VK_ACCESS_TRANSFER_WRITE_BIT, VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT | VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT };
+		vk.cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT, 0, 1, &memBarrier, 0, DE_NULL, 0, DE_NULL);
+	}
+	if (hasColor)
+	{
+		const VkMemoryBarrier	memBarrier	= { VK_STRUCTURE_TYPE_MEMORY_BARRIER, DE_NULL, VK_ACCESS_TRANSFER_WRITE_BIT, VK_ACCESS_COLOR_ATTACHMENT_READ_BIT | VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT };
+		vk.cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, 0, 1, &memBarrier, 0, DE_NULL, 0, DE_NULL);
+	}
+
+	if (hasColor)
+		transition2DImage(vk, *cmdBuffer, m_colorTargetImage->object(), VK_IMAGE_ASPECT_COLOR_BIT,
+						  VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,
+						  VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, VK_ACCESS_MEMORY_READ_BIT,
+						  VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, VK_PIPELINE_STAGE_HOST_BIT);
+	if (hasDepth)
+		transition2DImage(vk, *cmdBuffer, m_depthTargetImage->object(), VK_IMAGE_ASPECT_DEPTH_BIT,
+						  VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,
+						  VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT, VK_ACCESS_MEMORY_READ_BIT,
+						  VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT, VK_PIPELINE_STAGE_HOST_BIT);
+
+	endCommandBuffer(vk, *cmdBuffer);
+	submitCommandsAndWait(vk, device, queue, *cmdBuffer);
+
+	VK_CHECK(vk.queueWaitIdle(queue));
+
+	if (hasColor)
+	{
+		const auto		resultImage	= m_colorTargetImage->readSurface(queue, m_context.getDefaultAllocator(), VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, { 0, 0, 0 }, WIDTH, HEIGHT, VK_IMAGE_ASPECT_COLOR_BIT);
+
+		for(int z = 0; z < resultImage.getDepth(); ++z)
+		for(int y = 0; y < resultImage.getHeight(); ++y)
+		for(int x = 0; x < resultImage.getWidth(); ++x)
+		{
+			const Vec4	difference	= m_params.expectedColor - resultImage.getPixel(x,y,z);
+			if (abs(difference.x()) >= m_params.colorEpsilon || abs(difference.y()) >= m_params.colorEpsilon || abs(difference.z()) >= m_params.colorEpsilon)
+			{
+				ostringstream msg;
+				msg << "Color value mismatch, expected: " << m_params.expectedColor << ", got: " << resultImage.getPixel(x,y,z) << " at " << "(" << x << ", " << y << ", " << z << ")";
+				return tcu::TestStatus::fail(msg.str());
+			}
+		}
+	}
+	if (hasDepth)
+	{
+		const auto		resultImage	= m_depthTargetImage->readSurface(queue, m_context.getDefaultAllocator(), VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, { 0, 0, 0 }, WIDTH, HEIGHT, VK_IMAGE_ASPECT_DEPTH_BIT);
+
+		for(int z = 0; z < resultImage.getDepth(); ++z)
+		for(int y = 0; y < resultImage.getHeight(); ++y)
+		for(int x = 0; x < resultImage.getWidth(); ++x)
+		{
+			const float	difference	= m_params.expectedDepth - resultImage.getPixDepth(x,y,z);
+			if (abs(difference) >= m_params.depthEpsilon)
+			{
+				ostringstream msg;
+				msg << "Depth value mismatch, expected: " << m_params.expectedDepth << ", got: " << resultImage.getPixDepth(x,y,z) << " at " << "(" << x << ", " << y << ", " << z << ")";
+				return tcu::TestStatus::fail(msg.str());
+			}
+		}
+	}
+	return tcu::TestStatus::pass("Pass");
+}
+
+class MultipleClearsWithinRenderPassTest : public TestCase
+{
+public:
+	MultipleClearsWithinRenderPassTest (tcu::TestContext& testCtx, const string& name, const string& description, const TestParams& params)
+		: TestCase(testCtx, name, description)
+		, m_params(params)
+	{
+		DE_ASSERT(m_params.steps.size() <= static_cast<size_t>(TEST_MAX_STEPS_COUNT));
+	}
+
+	virtual void initPrograms (SourceCollections& programCollection) const
+	{
+		{
+			ostringstream src;
+			src << glu::getGLSLVersionDeclaration(glu::GLSL_VERSION_450) << "\n"
+				<< "\n"
+				<< "layout(location = 0) in vec4 in_position;\n"
+				<< "\n"
+				<< "out gl_PerVertex {\n"
+				<< "    vec4  gl_Position;\n"
+				<< "};\n"
+				<< "\n"
+				<< "void main(void)\n"
+				<< "{\n"
+				<< "    gl_Position = in_position;\n"
+				<< "}\n";
+			programCollection.glslSources.add("vert") << glu::VertexSource(src.str());
+		}
+		{
+			ostringstream src;
+			src << glu::getGLSLVersionDeclaration(glu::GLSL_VERSION_450) << "\n"
+				<< "\n"
+				<< "layout(push_constant) uniform Color { vec4 color; } u_color;\n"
+				<< "layout(location = 0) out vec4 out_color;\n"
+				<< "\n"
+				<< "void main(void)\n"
+				<< "{\n"
+				<< "    out_color = u_color.color;\n"
+				<< "}\n";
+			programCollection.glslSources.add("frag") << glu::FragmentSource(src.str());
+		}
+		{
+			ostringstream src;
+			src << glu::getGLSLVersionDeclaration(glu::GLSL_VERSION_450) << "\n"
+				<< "\n"
+				<< "layout(push_constant) uniform Color { vec4 color; } u_color;\n"
+				<< "\n"
+				<< "void main(void)\n"
+				<< "{\n"
+				<< "}\n";
+			programCollection.glslSources.add("frag_depthonly") << glu::FragmentSource(src.str());
+		}
+	}
+
+	virtual void checkSupport (Context& context) const
+	{
+		VkImageFormatProperties imageFormatProperties;
+		const auto&	vki	= context.getInstanceInterface();
+		const auto&	vkd	= context.getPhysicalDevice();
+		if (m_params.colorFormat != VK_FORMAT_UNDEFINED)
+		{
+			const auto	colorUsage	= VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | VK_IMAGE_USAGE_TRANSFER_SRC_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT;
+			if (vki.getPhysicalDeviceImageFormatProperties(vkd, m_params.colorFormat, VK_IMAGE_TYPE_2D, VK_IMAGE_TILING_OPTIMAL, colorUsage, 0u, &imageFormatProperties) != VK_SUCCESS)
+				TCU_THROW(NotSupportedError, "Color format not supported");
+		}
+		if (m_params.depthFormat != VK_FORMAT_UNDEFINED)
+		{
+			const auto	depthUsage	= VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT | VK_IMAGE_USAGE_TRANSFER_SRC_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT;
+			if (vki.getPhysicalDeviceImageFormatProperties(vkd, m_params.depthFormat, VK_IMAGE_TYPE_2D, VK_IMAGE_TILING_OPTIMAL, depthUsage, 0u, &imageFormatProperties) != VK_SUCCESS)
+				TCU_THROW(NotSupportedError, "Depth format not supported");
+		}
+	}
+
+	virtual TestInstance* createInstance (Context& context) const
+	{
+		return new MultipleClearsTest(context, m_params);
+	}
+
+private:
+	const TestParams	m_params;
+};
+
+}	// anonymous
+
+MultipleClearsWithinRenderPassTests::MultipleClearsWithinRenderPassTests (tcu::TestContext &testCtx)
+	: TestCaseGroup	(testCtx, "multiple_clears_within_render_pass", "Tests for multiple clears within render pass")
+{
+}
+
+MultipleClearsWithinRenderPassTests::~MultipleClearsWithinRenderPassTests ()
+{
+}
+
+void MultipleClearsWithinRenderPassTests::init ()
+{
+	for(const auto &formatPair : formatsToTest)
+	{
+		ostringstream			formatSuffix;
+		if (formatPair.colorFormat != VK_FORMAT_UNDEFINED)
+			formatSuffix << "_c" << de::toLower(string(getFormatName(formatPair.colorFormat)).substr(9));
+		if (formatPair.depthFormat != VK_FORMAT_UNDEFINED)
+			formatSuffix << "_d" << de::toLower(string(getFormatName(formatPair.depthFormat)).substr(9));
+		for(const auto &topology : topologiesToTest)
+		{
+			const string	testNameSuffix	= formatSuffix.str() + verticesByTopology[(deUint32)topology].testNameSuffix;
+			{
+				const TestParams params	=
+				{
+					formatPair.colorFormat,			// VkFormat				colorFormat;
+					formatPair.depthFormat,			// VkFormat				depthFormat;
+					topology,						// Topology				topology;
+					Vec4(0.0f, 0.5f, 0.5f, 1.0f),	// Vec4					expectedColor;
+					0.01f,							// float				colorEpsilon;
+					0.9f,							// float				expectedDepth;
+					0.01f,							// float				depthEpsilon;
+					1u,								// deUint32				repeatCount;
+					true,							// bool					enableBlend;
+					{								// vector<ClearStep>	steps;
+						{ ClearOp::LOAD		, Vec4(1.0f, 0.0f, 0.0f, 1.0f)	, 0.7f },
+						{ ClearOp::CLEAR	, Vec4(0.0f, 1.0f, 0.0f, 1.0f)	, 0.3f },
+						{ ClearOp::DRAW		, Vec4(0.0f, 0.0f, 1.0f, 0.5f)	, 0.9f }
+					}
+				};
+				addChild(new MultipleClearsWithinRenderPassTest(m_testCtx, "load_clear_draw" + testNameSuffix, "Multiple clears within same render pass, methods: load, clear, draw", params));
+			}
+			{
+				const TestParams params	=
+				{
+					formatPair.colorFormat,			// VkFormat				format;
+					formatPair.depthFormat,			// VkFormat				depthFormat;
+					topology,						// Topology				topology;
+					Vec4(0.0f, 0.5f, 0.5f, 1.0f),	// Vec4					expectedColor;
+					0.01f,							// float				colorEpsilon;
+					0.9f,							// float				expectedDepth;
+					0.01f,							// float				depthEpsilon;
+					1u,								// deUint32				repeatCount;
+					true,							// bool					enableBlend;
+					{								// vector<ClearStep>	steps;
+						{ ClearOp::DRAW		, Vec4(1.0f, 0.0f, 0.0f, 1.0f)	, 0.7f },
+						{ ClearOp::CLEAR	, Vec4(0.0f, 1.0f, 0.0f, 1.0f)	, 0.3f },
+						{ ClearOp::DRAW		, Vec4(0.0f, 0.0f, 1.0f, 0.5f)	, 0.9f }
+					}
+				};
+				addChild(new MultipleClearsWithinRenderPassTest(m_testCtx, "draw_clear_draw" + testNameSuffix, "Multiple clears within same render pass, methods: draw, clear, draw", params));
+			}
+			{
+				const TestParams params	=
+				{
+					formatPair.colorFormat,			// VkFormat				format;
+					formatPair.depthFormat,			// VkFormat				depthFormat;
+					topology,						// Topology				topology;
+					Vec4(0.0f, 0.5f, 0.5f, 1.0f),	// Vec4					expectedColor;
+					0.01f,							// float				colorEpsilon;
+					0.9f,							// float				expectedDepth;
+					0.01f,							// float				depthEpsilon;
+					1u,								// deUint32				repeatCount;
+					true,							// bool					enableBlend;
+					{								// vector<ClearStep>	steps;
+						{ ClearOp::CLEAR	, Vec4(1.0f, 0.0f, 0.0f, 1.0f)	, 0.7f },
+						{ ClearOp::CLEAR	, Vec4(0.0f, 1.0f, 0.0f, 1.0f)	, 0.3f },
+						{ ClearOp::DRAW		, Vec4(0.0f, 0.0f, 1.0f, 0.5f)	, 0.9f }
+					}
+				};
+				addChild(new MultipleClearsWithinRenderPassTest(m_testCtx, "clear_clear_draw" + testNameSuffix, "Multiple clears within same render pass, methods: clear, clear, draw", params));
+			}
+			{
+				const TestParams params	=
+				{
+					formatPair.colorFormat,			// VkFormat				format;
+					formatPair.depthFormat,			// VkFormat				depthFormat;
+					topology,						// Topology				topology;
+					Vec4(0.0f, 1.0f, 0.0f, 1.0f),	// Vec4					expectedColor;
+					0.01f,							// float				colorEpsilon;
+					0.9f,							// float				expectedDepth;
+					0.01f,							// float				depthEpsilon;
+					1u,								// deUint32				repeatCount;
+					false,							// bool					enableBlend;
+					{								// vector<ClearStep>	steps;
+						{ ClearOp::LOAD		, Vec4(1.0f, 0.0f, 0.0f, 1.0f)	, 0.3f },
+						{ ClearOp::CLEAR	, Vec4(0.0f, 1.0f, 0.0f, 1.0f)	, 0.9f }
+					}
+				};
+				addChild(new MultipleClearsWithinRenderPassTest(m_testCtx, "load_clear" + testNameSuffix, "Multiple clears within same render pass, methods: load, clear", params));
+			}
+			{
+				const TestParams params	=
+				{
+					formatPair.colorFormat,			// VkFormat				format;
+					formatPair.depthFormat,			// VkFormat				depthFormat;
+					topology,						// Topology				topology;
+					Vec4(0.0f, 1.0f, 0.0f, 1.0f),	// Vec4					expectedColor;
+					0.01f,							// float				colorEpsilon;
+					0.9f,							// float				expectedDepth;
+					0.01f,							// float				depthEpsilon;
+					1u,								// deUint32				repeatCount;
+					false,							// bool					enableBlend;
+					{								// vector<ClearStep>	steps;
+						{ ClearOp::DRAW		, Vec4(1.0f, 0.0f, 0.0f, 1.0f)	, 0.3f },
+						{ ClearOp::CLEAR	, Vec4(0.0f, 1.0f, 0.0f, 1.0f)	, 0.9f }
+					}
+				};
+				addChild(new MultipleClearsWithinRenderPassTest(m_testCtx, "draw_clear" + testNameSuffix, "Multiple clears within same render pass, methods: draw, clear", params));
+			}
+			{
+				const TestParams params	=
+				{
+					formatPair.colorFormat,			// VkFormat				format;
+					formatPair.depthFormat,			// VkFormat				depthFormat;
+					topology,						// Topology				topology;
+					Vec4(0.0f, 1.0f, 0.0f, 1.0f),	// Vec4					expectedColor;
+					0.01f,							// float				colorEpsilon;
+					0.9f,							// float				expectedDepth;
+					0.01f,							// float				depthEpsilon;
+					1u,								// deUint32				repeatCount;
+					false,							// bool					enableBlend;
+					{								// vector<ClearStep>	steps;
+						{ ClearOp::CLEAR	, Vec4(1.0f, 0.0f, 0.0f, 1.0f)	, 0.3f },
+						{ ClearOp::CLEAR	, Vec4(0.0f, 1.0f, 0.0f, 1.0f)	, 0.9f }
+					}
+				};
+				addChild(new MultipleClearsWithinRenderPassTest(m_testCtx, "clear_clear" + testNameSuffix, "Multiple clears within same render pass, methods: clear, clear", params));
+			}
+		}
+	}
+}
+}	// Draw
+}	// vkt
diff --git a/external/vulkancts/modules/vulkan/draw/vktDrawMultipleClearsWithinRenderPass.hpp b/external/vulkancts/modules/vulkan/draw/vktDrawMultipleClearsWithinRenderPass.hpp
new file mode 100644
index 0000000..d361408
--- /dev/null
+++ b/external/vulkancts/modules/vulkan/draw/vktDrawMultipleClearsWithinRenderPass.hpp
@@ -0,0 +1,46 @@
+#ifndef _VKTDRAWMULTIPLECLEARSWITHINRENDERPASS_HPP
+#define _VKTDRAWMULTIPLECLEARSWITHINRENDERPASS_HPP
+/*-------------------------------------------------------------------------
+ * Vulkan Conformance Tests
+ * -----------------------------
+ *
+ * Copyright (c) 2020 Google Inc.
+ * Copyright (c) 2020 The Khronos Group Inc.
+ *
+ * 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 Test for multiple color or depth clears within a render pass
+ *//*--------------------------------------------------------------------*/
+
+#include "vktTestCase.hpp"
+
+namespace vkt
+{
+namespace Draw
+{
+class MultipleClearsWithinRenderPassTests : public tcu::TestCaseGroup
+{
+public:
+						MultipleClearsWithinRenderPassTests		(tcu::TestContext &testCtx);
+						~MultipleClearsWithinRenderPassTests	();
+	void				init									();
+
+private:
+	MultipleClearsWithinRenderPassTests							(const MultipleClearsWithinRenderPassTests &other);
+	MultipleClearsWithinRenderPassTests&	operator=			(const MultipleClearsWithinRenderPassTests &other);
+};
+}
+}
+#endif // _VKTDRAWMULTIPLECLEARSWITHINRENDERPASS_HPP
diff --git a/external/vulkancts/modules/vulkan/draw/vktDrawTests.cpp b/external/vulkancts/modules/vulkan/draw/vktDrawTests.cpp
index 9b176ce..47b2e4a 100644
--- a/external/vulkancts/modules/vulkan/draw/vktDrawTests.cpp
+++ b/external/vulkancts/modules/vulkan/draw/vktDrawTests.cpp
@@ -43,6 +43,8 @@
 #include "vktDrawExplicitVertexParameterTests.hpp"
 #include "vktDrawOutputLocationTests.hpp"
 #include "vktDrawDepthClampTests.hpp"
+#include "vktDrawAhbTests.hpp"
+#include "vktDrawMultipleClearsWithinRenderPass.hpp"
 
 namespace vkt
 {
@@ -56,25 +58,27 @@
 {
 	tcu::TestContext&	testCtx		= group->getTestContext();
 
-	group->addChild(new ConcurrentDrawTests				(testCtx));
-	group->addChild(new SimpleDrawTests					(testCtx));
-	group->addChild(new DrawIndexedTests				(testCtx));
-	group->addChild(new IndirectDrawTests				(testCtx));
-	group->addChild(createBasicDrawTests				(testCtx));
-	group->addChild(new InstancedTests					(testCtx));
-	group->addChild(new ShaderDrawParametersTests		(testCtx));
-	group->addChild(createNegativeViewportHeightTests	(testCtx));
-	group->addChild(createZeroViewportHeightTests		(testCtx));
-	group->addChild(createInvertedDepthRangesTests		(testCtx));
-	group->addChild(createDifferingInterpolationTests	(testCtx));
-	group->addChild(createShaderLayerTests				(testCtx));
-	group->addChild(createShaderViewportIndexTests		(testCtx));
-	group->addChild(createScissorTests					(testCtx));
-	group->addChild(createMultipleInterpolationTests	(testCtx));
-	group->addChild(createDiscardRectanglesTests		(testCtx));
-	group->addChild(createExplicitVertexParameterTests	(testCtx));
-	group->addChild(createOutputLocationTests	        (testCtx));
-	group->addChild(createDepthClampTests				(testCtx));
+	group->addChild(new ConcurrentDrawTests					(testCtx));
+	group->addChild(new SimpleDrawTests						(testCtx));
+	group->addChild(new DrawIndexedTests					(testCtx));
+	group->addChild(new IndirectDrawTests					(testCtx));
+	group->addChild(createBasicDrawTests					(testCtx));
+	group->addChild(new InstancedTests						(testCtx));
+	group->addChild(new ShaderDrawParametersTests			(testCtx));
+	group->addChild(createNegativeViewportHeightTests		(testCtx));
+	group->addChild(createZeroViewportHeightTests			(testCtx));
+	group->addChild(createInvertedDepthRangesTests			(testCtx));
+	group->addChild(createDifferingInterpolationTests		(testCtx));
+	group->addChild(createShaderLayerTests					(testCtx));
+	group->addChild(createShaderViewportIndexTests			(testCtx));
+	group->addChild(createScissorTests						(testCtx));
+	group->addChild(createMultipleInterpolationTests		(testCtx));
+	group->addChild(createDiscardRectanglesTests			(testCtx));
+	group->addChild(createExplicitVertexParameterTests		(testCtx));
+	group->addChild(createOutputLocationTests		        (testCtx));
+	group->addChild(createDepthClampTests					(testCtx));
+	group->addChild(createAhbTests							(testCtx));
+	group->addChild(new MultipleClearsWithinRenderPassTests	(testCtx));
 }
 
 } // anonymous
diff --git a/external/vulkancts/modules/vulkan/dynamic_state/CMakeLists.txt b/external/vulkancts/modules/vulkan/dynamic_state/CMakeLists.txt
index 473fc1a..76ca72c 100644
--- a/external/vulkancts/modules/vulkan/dynamic_state/CMakeLists.txt
+++ b/external/vulkancts/modules/vulkan/dynamic_state/CMakeLists.txt
@@ -9,10 +9,14 @@
 	vktDynamicStateBaseClass.cpp
 	vktDynamicStateCBTests.cpp
 	vktDynamicStateCBTests.hpp
+	vktDynamicStateComputeTests.cpp
+	vktDynamicStateComputeTests.hpp
 	vktDynamicStateDSTests.cpp
 	vktDynamicStateDSTests.hpp
 	vktDynamicStateGeneralTests.cpp
 	vktDynamicStateGeneralTests.hpp
+	vktDynamicStateInheritanceTests.cpp
+	vktDynamicStateInheritanceTests.hpp
 	vktDynamicStateRSTests.cpp
 	vktDynamicStateRSTests.hpp
 	vktDynamicStateTests.cpp
diff --git a/external/vulkancts/modules/vulkan/dynamic_state/vktDynamicStateComputeTests.cpp b/external/vulkancts/modules/vulkan/dynamic_state/vktDynamicStateComputeTests.cpp
new file mode 100644
index 0000000..fefbbfb
--- /dev/null
+++ b/external/vulkancts/modules/vulkan/dynamic_state/vktDynamicStateComputeTests.cpp
@@ -0,0 +1,974 @@
+/*------------------------------------------------------------------------
+ * Vulkan Conformance Tests
+ * ------------------------
+ *
+ * Copyright (c) 2021 The Khronos Group Inc.
+ * Copyright (c) 2021 Valve Corporation.
+ *
+ * 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 Dynamic State tests mixing it with compute and transfer.
+ *//*--------------------------------------------------------------------*/
+#include "vktDynamicStateComputeTests.hpp"
+
+#include "vkBufferWithMemory.hpp"
+#include "vkObjUtil.hpp"
+#include "vkCmdUtil.hpp"
+#include "vkBarrierUtil.hpp"
+#include "vkBuilderUtil.hpp"
+#include "vkTypeUtil.hpp"
+
+#include "tcuVector.hpp"
+
+#include <vector>
+#include <string>
+#include <functional>
+#include <map>
+#include <sstream>
+#include <cstring>
+#include <iterator>
+#include <numeric>
+
+namespace vkt
+{
+namespace DynamicState
+{
+
+namespace
+{
+
+using namespace vk;
+
+// Additional objects needed to set a given dynamic state that need to exist beyond the state-setting call. Empty by default.
+struct DynamicStateData
+{
+	virtual ~DynamicStateData() {}
+};
+
+// A vertex buffer and graphics pipeline are needed for vkCmdBindVertexBuffers2EXT().
+struct BindVertexBuffersData : public DynamicStateData
+{
+private:
+	using BufferPtr			= de::MovePtr<BufferWithMemory>;
+	using RenderPassPtr		= Move<VkRenderPass>;
+	using LayoutPtr			= Move<VkPipelineLayout>;
+	using ModulePtr			= Move<VkShaderModule>;
+	using PipelinePtr		= Move<VkPipeline>;
+
+	static constexpr deUint32 kWidth	= 16u;
+	static constexpr deUint32 kHeight	= 16u;
+
+	VkExtent3D getExtent (void)
+	{
+		return makeExtent3D(kWidth, kHeight, 1u);
+	}
+
+public:
+	BindVertexBuffersData(Context& ctx)
+		: m_vertexBuffer		()
+		, m_dataSize			(0u)
+		, m_vertexBufferSize	(0ull)
+		, m_renderPass			()
+		, m_pipelineLayout		()
+		, m_vertexShader		()
+		, m_graphicsPipeline	()
+	{
+		const auto&	vki			= ctx.getInstanceInterface();
+		const auto	phyDev		= ctx.getPhysicalDevice();
+		const auto&	vkd			= ctx.getDeviceInterface();
+		const auto	device		= ctx.getDevice();
+		auto&		alloc		= ctx.getDefaultAllocator();
+
+		// Vertex buffer.
+		tcu::Vec4	vertex		(0.f, 0.f, 0.f, 1.f);
+		m_dataSize				= sizeof(vertex);
+		m_vertexBufferSize		= de::roundUp(static_cast<VkDeviceSize>(m_dataSize), getPhysicalDeviceProperties(vki, phyDev).limits.nonCoherentAtomSize);
+		const auto	bufferInfo	= makeBufferCreateInfo(m_vertexBufferSize, VK_BUFFER_USAGE_VERTEX_BUFFER_BIT);
+
+		m_vertexBuffer			= BufferPtr(new BufferWithMemory(vkd, device, alloc, bufferInfo, MemoryRequirement::HostVisible));
+		auto&	bufferAlloc		= m_vertexBuffer->getAllocation();
+
+		deMemcpy(bufferAlloc.getHostPtr(), &vertex, m_dataSize);
+		flushAlloc(vkd, device, bufferAlloc);
+
+		// Empty render pass.
+		m_renderPass = makeRenderPass(vkd, device);
+
+		// Empty pipeline layout.
+		m_pipelineLayout = makePipelineLayout(vkd, device);
+
+		// Passthrough vertex shader.
+		m_vertexShader = createShaderModule(vkd, device, ctx.getBinaryCollection().get("vert"), 0u);
+
+		const auto						extent		= getExtent();
+		const std::vector<VkViewport>	viewports	(1, makeViewport(extent));
+		const std::vector<VkRect2D>		scissors	(1, makeRect2D(extent));
+		const VkDynamicState			state		= VK_DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE_EXT;
+
+		const VkPipelineDynamicStateCreateInfo dynamicStateInfo =
+		{
+			VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO,	//	VkStructureType						sType;
+			nullptr,												//	const void*							pNext;
+			0u,														//	VkPipelineDynamicStateCreateFlags	flags;
+			1u,														//	deUint32							dynamicStateCount;
+			&state,													//	const VkDynamicState*				pDynamicStates;
+		};
+
+		// Graphics pipeline.
+		m_graphicsPipeline = makeGraphicsPipeline(vkd, device, m_pipelineLayout.get(),
+			m_vertexShader.get(), DE_NULL, DE_NULL, DE_NULL, DE_NULL,
+			m_renderPass.get(), viewports, scissors, VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST, 0u, 0u,
+			nullptr, nullptr, nullptr, nullptr, nullptr, &dynamicStateInfo);
+	}
+
+	const BufferWithMemory*	getVertexBuffer () const
+	{
+		return m_vertexBuffer.get();
+	}
+
+	size_t getDataSize () const
+	{
+		return m_dataSize;
+	}
+
+	VkPipeline getPipeline () const
+	{
+		return m_graphicsPipeline.get();
+	}
+
+	virtual ~BindVertexBuffersData() {}
+
+private:
+	BufferPtr		m_vertexBuffer;
+	size_t			m_dataSize;
+	VkDeviceSize	m_vertexBufferSize;
+	RenderPassPtr	m_renderPass;
+	LayoutPtr		m_pipelineLayout;
+	ModulePtr		m_vertexShader;
+	PipelinePtr		m_graphicsPipeline;
+};
+
+// Function that records a state-setting command in the given command buffer.
+using RecordStateFunction = std::function<void(const DeviceInterface*, VkCommandBuffer, const DynamicStateData*)>;
+
+// State-setting functions
+void setViewport (const DeviceInterface* vkd, VkCommandBuffer cmdBuffer, const DynamicStateData*)
+{
+	const VkViewport viewport =
+	{
+		0.0f,	//	float	x;
+		0.0f,	//	float	y;
+		1.0f,	//	float	width;
+		1.0f,	//	float	height;
+		0.0f,	//	float	minDepth;
+		1.0f,	//	float	maxDepth;
+	};
+	vkd->cmdSetViewport(cmdBuffer, 0u, 1u, &viewport);
+}
+
+void setScissor (const DeviceInterface* vkd, VkCommandBuffer cmdBuffer, const DynamicStateData*)
+{
+	const VkRect2D scissor =
+	{
+		{ 0, 0 },	//	VkOffset2D	offset;
+		{ 1u, 1u },	//	VkExtent2D	extent;
+	};
+	vkd->cmdSetScissor(cmdBuffer, 0u, 1u, &scissor);
+}
+
+void setLineWidth (const DeviceInterface* vkd, VkCommandBuffer cmdBuffer, const DynamicStateData*)
+{
+	vkd->cmdSetLineWidth(cmdBuffer, 1.0f);
+}
+
+void setDepthBias (const DeviceInterface* vkd, VkCommandBuffer cmdBuffer, const DynamicStateData*)
+{
+	vkd->cmdSetDepthBias(cmdBuffer, 0.0f, 0.0f, 0.0f);
+}
+
+void setBlendConstants (const DeviceInterface* vkd, VkCommandBuffer cmdBuffer, const DynamicStateData*)
+{
+	const float blendConstants[4] = { 0.0f, 0.0f, 0.0f, 0.0f };
+	vkd->cmdSetBlendConstants(cmdBuffer, blendConstants);
+}
+
+void setDepthBounds (const DeviceInterface* vkd, VkCommandBuffer cmdBuffer, const DynamicStateData*)
+{
+	vkd->cmdSetDepthBounds(cmdBuffer, 0.0f, 1.0f);
+}
+
+void setStencilCompareMask (const DeviceInterface* vkd, VkCommandBuffer cmdBuffer, const DynamicStateData*)
+{
+	vkd->cmdSetStencilCompareMask(cmdBuffer, VK_STENCIL_FACE_FRONT_AND_BACK, 0xFFu);
+}
+
+void setStencilWriteMask (const DeviceInterface* vkd, VkCommandBuffer cmdBuffer, const DynamicStateData*)
+{
+	vkd->cmdSetStencilWriteMask(cmdBuffer, VK_STENCIL_FACE_FRONT_AND_BACK, 0xFFu);
+}
+
+void setStencilReference (const DeviceInterface* vkd, VkCommandBuffer cmdBuffer, const DynamicStateData*)
+{
+	vkd->cmdSetStencilReference(cmdBuffer, VK_STENCIL_FACE_FRONT_AND_BACK, 0xFFu);
+}
+
+void setDiscardRectangle (const DeviceInterface* vkd, VkCommandBuffer cmdBuffer, const DynamicStateData*)
+{
+	const VkRect2D rectangle =
+	{
+		{ 0, 0 },	//	VkOffset2D	offset;
+		{ 1u, 1u },	//	VkExtent2D	extent;
+	};
+	vkd->cmdSetDiscardRectangleEXT(cmdBuffer, 0u, 1u, &rectangle);
+}
+
+void setSampleLocations (const DeviceInterface* vkd, VkCommandBuffer cmdBuffer, const DynamicStateData*)
+{
+	const VkSampleLocationEXT locations[] =
+	{
+		{ 0.5f, 0.5f },
+		{ 0.5f, 1.5f },
+		{ 1.5f, 0.5f },
+		{ 1.5f, 1.5f },
+	};
+	const VkSampleLocationsInfoEXT info =
+	{
+		VK_STRUCTURE_TYPE_SAMPLE_LOCATIONS_INFO_EXT,	//	VkStructureType				sType;
+		nullptr,										//	const void*					pNext;
+		VK_SAMPLE_COUNT_4_BIT,							//	VkSampleCountFlagBits		sampleLocationsPerPixel;
+		{ 1u, 1u },										//	VkExtent2D					sampleLocationGridSize;
+		4u,												//	deUint32					sampleLocationsCount;
+		locations,										//	const VkSampleLocationEXT*	pSampleLocations;
+	};
+	vkd->cmdSetSampleLocationsEXT(cmdBuffer, &info);
+}
+
+void setRTPipelineStatckSize (const DeviceInterface* vkd, VkCommandBuffer cmdBuffer, const DynamicStateData*)
+{
+	vkd->cmdSetRayTracingPipelineStackSizeKHR(cmdBuffer, 4096u);
+}
+
+void setFragmentShadingRage (const DeviceInterface* vkd, VkCommandBuffer cmdBuffer, const DynamicStateData*)
+{
+	const VkExtent2D							fragmentSize	= { 1u, 1u };
+	const VkFragmentShadingRateCombinerOpKHR	combinerOps[2]	=
+	{
+		VK_FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR,
+		VK_FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR,
+	};
+	vkd->cmdSetFragmentShadingRateKHR(cmdBuffer, &fragmentSize, combinerOps);
+}
+
+void setLineStipple (const DeviceInterface* vkd, VkCommandBuffer cmdBuffer, const DynamicStateData*)
+{
+	vkd->cmdSetLineStippleEXT(cmdBuffer, 1u, 1u);
+}
+
+void setCullMode (const DeviceInterface* vkd, VkCommandBuffer cmdBuffer, const DynamicStateData*)
+{
+	vkd->cmdSetCullModeEXT(cmdBuffer, VK_CULL_MODE_FRONT_AND_BACK);
+}
+
+void setFrontFace (const DeviceInterface* vkd, VkCommandBuffer cmdBuffer, const DynamicStateData*)
+{
+	vkd->cmdSetFrontFaceEXT(cmdBuffer, VK_FRONT_FACE_COUNTER_CLOCKWISE);
+}
+
+void setPrimitiveTopology (const DeviceInterface* vkd, VkCommandBuffer cmdBuffer, const DynamicStateData*)
+{
+	vkd->cmdSetPrimitiveTopologyEXT(cmdBuffer, VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP);
+}
+
+void setViewportWithCount (const DeviceInterface* vkd, VkCommandBuffer cmdBuffer, const DynamicStateData*)
+{
+	const VkViewport viewport =
+	{
+		0.0f,	//	float	x;
+		0.0f,	//	float	y;
+		1.0f,	//	float	width;
+		1.0f,	//	float	height;
+		0.0f,	//	float	minDepth;
+		1.0f,	//	float	maxDepth;
+	};
+	vkd->cmdSetViewportWithCountEXT(cmdBuffer, 1u, &viewport);
+}
+
+void setScissorWithCount (const DeviceInterface* vkd, VkCommandBuffer cmdBuffer, const DynamicStateData*)
+{
+	const VkRect2D scissor =
+	{
+		{ 0, 0 },	//	VkOffset2D	offset;
+		{ 1u, 1u },	//	VkExtent2D	extent;
+	};
+	vkd->cmdSetScissorWithCountEXT(cmdBuffer, 1u, &scissor);
+}
+
+void bindVertexBuffers (const DeviceInterface* vkd, VkCommandBuffer cmdBuffer, const DynamicStateData* data)
+{
+	const auto bindData			= dynamic_cast<const BindVertexBuffersData*>(data);
+	DE_ASSERT(bindData != nullptr);
+	const auto vertexBuffer		= bindData->getVertexBuffer();
+	const auto dataSize			= static_cast<VkDeviceSize>(bindData->getDataSize());
+	const auto bufferOffset		= vertexBuffer->getAllocation().getOffset();
+	const auto stride			= static_cast<VkDeviceSize>(0);
+	const auto pipeline			= bindData->getPipeline();
+
+	vkd->cmdBindPipeline(cmdBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, pipeline);
+	vkd->cmdBindVertexBuffers2EXT(cmdBuffer, 0u, 1u, &vertexBuffer->get(), &bufferOffset, &dataSize, &stride);
+}
+
+void setDepthTestEnable (const DeviceInterface* vkd, VkCommandBuffer cmdBuffer, const DynamicStateData*)
+{
+	vkd->cmdSetDepthTestEnableEXT(cmdBuffer, VK_TRUE);
+}
+
+void setDepthWriteEnable (const DeviceInterface* vkd, VkCommandBuffer cmdBuffer, const DynamicStateData*)
+{
+	vkd->cmdSetDepthWriteEnableEXT(cmdBuffer, VK_TRUE);
+}
+
+void setDepthCompareOp (const DeviceInterface* vkd, VkCommandBuffer cmdBuffer, const DynamicStateData*)
+{
+	vkd->cmdSetDepthCompareOpEXT(cmdBuffer, VK_COMPARE_OP_LESS);
+}
+
+void setDepthBoundsTestEnable (const DeviceInterface* vkd, VkCommandBuffer cmdBuffer, const DynamicStateData*)
+{
+	vkd->cmdSetDepthBoundsTestEnableEXT(cmdBuffer, VK_TRUE);
+}
+
+void setStencilTestEnable (const DeviceInterface* vkd, VkCommandBuffer cmdBuffer, const DynamicStateData*)
+{
+	vkd->cmdSetStencilTestEnableEXT(cmdBuffer, VK_TRUE);
+}
+
+void setStencilOp (const DeviceInterface* vkd, VkCommandBuffer cmdBuffer, const DynamicStateData*)
+{
+	vkd->cmdSetStencilOpEXT(cmdBuffer, VK_STENCIL_FRONT_AND_BACK, VK_STENCIL_OP_ZERO, VK_STENCIL_OP_INCREMENT_AND_CLAMP, VK_STENCIL_OP_KEEP, VK_COMPARE_OP_ALWAYS);
+}
+
+void setViewportWScaling (const DeviceInterface* vkd, VkCommandBuffer cmdBuffer, const DynamicStateData*)
+{
+	const VkViewportWScalingNV viewport =
+	{
+		1.0f,	//	float	xcoeff;
+		1.0f,	//	float	ycoeff;
+	};
+	vkd->cmdSetViewportWScalingNV(cmdBuffer, 0u, 1u, &viewport);
+}
+
+void setViewportShadingRatePalette (const DeviceInterface* vkd, VkCommandBuffer cmdBuffer, const DynamicStateData*)
+{
+	const VkShadingRatePaletteEntryNV	entry	= VK_SHADING_RATE_PALETTE_ENTRY_NO_INVOCATIONS_NV;
+	const VkShadingRatePaletteNV		palette	=
+	{
+		1u,		//	deUint32							shadingRatePaletteEntryCount;
+		&entry,	//	const VkShadingRatePaletteEntryNV*	pShadingRatePaletteEntries;
+	};
+	vkd->cmdSetViewportShadingRatePaletteNV(cmdBuffer, 0u, 1u, &palette);
+}
+
+void setCoarseSamplingOrder (const DeviceInterface* vkd, VkCommandBuffer cmdBuffer, const DynamicStateData*)
+{
+	const VkCoarseSampleLocationNV location =
+	{
+		0u,	//	deUint32	pixelX;
+		0u,	//	deUint32	pixelY;
+		0u,	//	deUint32	sample;
+	};
+	const VkCoarseSampleOrderCustomNV order =
+	{
+		VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_PIXEL_NV,	//	VkShadingRatePaletteEntryNV		shadingRate;
+		1u,															//	deUint32						sampleCount;
+		1u,															//	deUint32						sampleLocationCount;
+		&location													//	const VkCoarseSampleLocationNV*	pSampleLocations;
+	};
+	vkd->cmdSetCoarseSampleOrderNV(cmdBuffer, VK_COARSE_SAMPLE_ORDER_TYPE_CUSTOM_NV, 1u, &order);
+}
+
+void setExclusiveScissor (const DeviceInterface* vkd, VkCommandBuffer cmdBuffer, const DynamicStateData*)
+{
+	const VkRect2D scissor =
+	{
+		{ 0, 0 },	//	VkOffset2D	offset;
+		{ 1u, 1u },	//	VkExtent2D	extent;
+	};
+	vkd->cmdSetExclusiveScissorNV(cmdBuffer, 0u, 1u, &scissor);
+}
+
+const VkDynamicState dynamicStateList[] =
+{
+	VK_DYNAMIC_STATE_VIEWPORT,
+	VK_DYNAMIC_STATE_SCISSOR,
+	VK_DYNAMIC_STATE_LINE_WIDTH,
+	VK_DYNAMIC_STATE_DEPTH_BIAS,
+	VK_DYNAMIC_STATE_BLEND_CONSTANTS,
+	VK_DYNAMIC_STATE_DEPTH_BOUNDS,
+	VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK,
+	VK_DYNAMIC_STATE_STENCIL_WRITE_MASK,
+	VK_DYNAMIC_STATE_STENCIL_REFERENCE,
+	VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT,
+	VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT,
+	VK_DYNAMIC_STATE_RAY_TRACING_PIPELINE_STACK_SIZE_KHR,
+	VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR,
+	VK_DYNAMIC_STATE_LINE_STIPPLE_EXT,
+	VK_DYNAMIC_STATE_CULL_MODE_EXT,
+	VK_DYNAMIC_STATE_FRONT_FACE_EXT,
+	VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY_EXT,
+	VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT,
+	VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT,
+	VK_DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE_EXT,
+	VK_DYNAMIC_STATE_DEPTH_TEST_ENABLE_EXT,
+	VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE_EXT,
+	VK_DYNAMIC_STATE_DEPTH_COMPARE_OP_EXT,
+	VK_DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE_EXT,
+	VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE_EXT,
+	VK_DYNAMIC_STATE_STENCIL_OP_EXT,
+	VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV,
+	VK_DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV,
+	VK_DYNAMIC_STATE_VIEWPORT_COARSE_SAMPLE_ORDER_NV,
+	VK_DYNAMIC_STATE_EXCLUSIVE_SCISSOR_NV,
+};
+
+// Information about a dynamic state.
+struct StateInfo
+{
+	std::vector<std::string>	requirements;	// List of required functionalities.
+	RecordStateFunction			recorder;		// Function that records the state to the command buffer being used.
+};
+
+// Returns the state info for a given dynamic state.
+const StateInfo& getDynamicStateInfo (VkDynamicState state)
+{
+	// Maps a given state to its state info structure.
+	using StateInfoMap = std::map<VkDynamicState, StateInfo>;
+
+	static const StateInfoMap result =
+	{
+		{	VK_DYNAMIC_STATE_VIEWPORT,								{	{},										setViewport						}	},
+		{	VK_DYNAMIC_STATE_SCISSOR,								{	{},										setScissor						}	},
+		{	VK_DYNAMIC_STATE_LINE_WIDTH,							{	{},										setLineWidth					}	},
+		{	VK_DYNAMIC_STATE_DEPTH_BIAS,							{	{},										setDepthBias					}	},
+		{	VK_DYNAMIC_STATE_BLEND_CONSTANTS,						{	{},										setBlendConstants				}	},
+		{	VK_DYNAMIC_STATE_DEPTH_BOUNDS,							{	{},										setDepthBounds					}	},
+		{	VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK,					{	{},										setStencilCompareMask			}	},
+		{	VK_DYNAMIC_STATE_STENCIL_WRITE_MASK,					{	{},										setStencilWriteMask				}	},
+		{	VK_DYNAMIC_STATE_STENCIL_REFERENCE,						{	{},										setStencilReference				}	},
+		{	VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT,					{	{ "VK_EXT_discard_rectangles" },		setDiscardRectangle				}	},
+		{	VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT,					{	{ "VK_EXT_sample_locations" },			setSampleLocations				}	},
+		{	VK_DYNAMIC_STATE_RAY_TRACING_PIPELINE_STACK_SIZE_KHR,	{	{ "VK_KHR_ray_tracing_pipeline" },		setRTPipelineStatckSize			}	},
+		{	VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR,				{	{ "VK_KHR_fragment_shading_rate" },		setFragmentShadingRage			}	},
+		{	VK_DYNAMIC_STATE_LINE_STIPPLE_EXT,						{	{ "VK_EXT_line_rasterization" },		setLineStipple					}	},
+		{	VK_DYNAMIC_STATE_CULL_MODE_EXT,							{	{ "VK_EXT_extended_dynamic_state" },	setCullMode						}	},
+		{	VK_DYNAMIC_STATE_FRONT_FACE_EXT,						{	{ "VK_EXT_extended_dynamic_state" },	setFrontFace					}	},
+		{	VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY_EXT,				{	{ "VK_EXT_extended_dynamic_state" },	setPrimitiveTopology			}	},
+		{	VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT,				{	{ "VK_EXT_extended_dynamic_state" },	setViewportWithCount			}	},
+		{	VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT,				{	{ "VK_EXT_extended_dynamic_state" },	setScissorWithCount				}	},
+		{	VK_DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE_EXT,		{	{ "VK_EXT_extended_dynamic_state" },	bindVertexBuffers				}	},
+		{	VK_DYNAMIC_STATE_DEPTH_TEST_ENABLE_EXT,					{	{ "VK_EXT_extended_dynamic_state" },	setDepthTestEnable				}	},
+		{	VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE_EXT,				{	{ "VK_EXT_extended_dynamic_state" },	setDepthWriteEnable				}	},
+		{	VK_DYNAMIC_STATE_DEPTH_COMPARE_OP_EXT,					{	{ "VK_EXT_extended_dynamic_state" },	setDepthCompareOp				}	},
+		{	VK_DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE_EXT,			{	{ "VK_EXT_extended_dynamic_state" },	setDepthBoundsTestEnable		}	},
+		{	VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE_EXT,				{	{ "VK_EXT_extended_dynamic_state" },	setStencilTestEnable			}	},
+		{	VK_DYNAMIC_STATE_STENCIL_OP_EXT,						{	{ "VK_EXT_extended_dynamic_state" },	setStencilOp					}	},
+		{	VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV,					{	{ "VK_NV_clip_space_w_scaling" },		setViewportWScaling				}	},
+		{	VK_DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV,		{	{ "VK_NV_shading_rate_image"},			setViewportShadingRatePalette	}	},
+		{	VK_DYNAMIC_STATE_VIEWPORT_COARSE_SAMPLE_ORDER_NV,		{	{ "VK_NV_shading_rate_image"},			setCoarseSamplingOrder			}	},
+		{	VK_DYNAMIC_STATE_EXCLUSIVE_SCISSOR_NV,					{	{ "VK_NV_scissor_exclusive"},			setExclusiveScissor				}	},
+	};
+
+	const auto itr = result.find(state);
+	DE_ASSERT(itr != result.end());
+
+	return itr->second;
+}
+
+// Returns the set of auxiliary data needed to set a given state.
+de::MovePtr<DynamicStateData> getDynamicStateData (Context& ctx, VkDynamicState state)
+{
+	// Create vertex buffer for VK_DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE_EXT.
+	if (state == VK_DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE_EXT)
+		return de::MovePtr<DynamicStateData>(new BindVertexBuffersData(ctx));
+
+	// null pointer normally.
+	return de::MovePtr<DynamicStateData>();
+}
+
+enum class OperType		{ COMPUTE = 0,	TRANSFER	};
+enum class WhenToSet	{ BEFORE = 0,	AFTER		};
+
+// Set dynamic state before or after attempting to run a compute or transfer operation.
+struct TestParams
+{
+	OperType					operationType;
+	WhenToSet					whenToSet;
+	std::vector<VkDynamicState>	states;
+};
+
+class DynamicStateComputeCase : public vkt::TestCase
+{
+public:
+
+							DynamicStateComputeCase		(tcu::TestContext& testCtx, const std::string& name, const std::string& description, const TestParams& params);
+	virtual					~DynamicStateComputeCase	(void) {}
+
+	virtual void			checkSupport				(Context& context) const;
+	virtual void			initPrograms				(vk::SourceCollections& programCollection) const;
+	virtual TestInstance*	createInstance				(Context& context) const;
+
+protected:
+	TestParams				m_params;
+};
+
+class DynamicStateComputeInstance : public vkt::TestInstance
+{
+public:
+								DynamicStateComputeInstance		(Context& context, const TestParams& params);
+	virtual						~DynamicStateComputeInstance	(void) {}
+
+	virtual tcu::TestStatus		iterate							(void);
+
+protected:
+	tcu::TestStatus				iterateTransfer					(void);
+	tcu::TestStatus				iterateCompute					(void);
+
+	TestParams					m_params;
+};
+
+DynamicStateComputeCase::DynamicStateComputeCase(tcu::TestContext& testCtx, const std::string& name, const std::string& description, const TestParams& params)
+	: vkt::TestCase	(testCtx, name, description)
+	, m_params		(params)
+{}
+
+DynamicStateComputeInstance::DynamicStateComputeInstance (Context& context, const TestParams& params)
+	: vkt::TestInstance (context)
+	, m_params			(params)
+{}
+
+void DynamicStateComputeCase::checkSupport (Context& context) const
+{
+	// Check required functionalities.
+	for (const auto& state : m_params.states)
+	{
+		const auto stateInfo = getDynamicStateInfo(state);
+		for (const auto& functionality : stateInfo.requirements)
+			context.requireDeviceFunctionality(functionality);
+	}
+}
+
+void DynamicStateComputeCase::initPrograms (vk::SourceCollections& programCollection) const
+{
+	if (m_params.operationType == OperType::COMPUTE)
+	{
+		std::ostringstream comp;
+		comp
+			<< "#version 450\n"
+			<< "\n"
+			<< "layout (local_size_x = 1, local_size_y = 1, local_size_z = 1) in;\n"
+			<< "\n"
+			<< "layout (push_constant, std430) uniform PushConstants {\n"
+			<< "	uint valueIndex;\n"
+			<< "} pc;\n"
+			<< "\n"
+			<< "layout (set=0, binding=0, std430) buffer OutputBlock {\n"
+			<< "	uint value[];\n"
+			<< "} ob;\n"
+			<< "\n"
+			<< "void main ()\n"
+			<< "{\n"
+			<< "	ob.value[pc.valueIndex] = 1u;\n"
+			<< "}\n"
+			;
+
+		programCollection.glslSources.add("comp") << glu::ComputeSource(comp.str());
+	}
+
+	if (de::contains(begin(m_params.states), end(m_params.states), VK_DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE_EXT))
+	{
+		// Passthrough vertex shader for stand-in graphics pipeline.
+		std::ostringstream vert;
+		vert
+			<< "#version 450\n"
+			<< "layout (location=0) in vec4 inVertex;\n"
+			<< "void main() {\n"
+			<< "    gl_Position = inVertex;\n"
+			<< "}\n"
+			;
+
+		programCollection.glslSources.add("vert") << glu::VertexSource(vert.str());
+	}
+}
+
+vkt::TestInstance* DynamicStateComputeCase::createInstance (Context& context) const
+{
+	return new DynamicStateComputeInstance(context, m_params);
+}
+
+tcu::TestStatus DynamicStateComputeInstance::iterate (void)
+{
+	if (m_params.operationType == OperType::COMPUTE)
+		return iterateCompute();
+	else
+		return iterateTransfer();
+}
+
+void fillBuffer(const DeviceInterface& vkd, VkDevice device, BufferWithMemory& buffer, const std::vector<deUint32> &values)
+{
+	auto& alloc = buffer.getAllocation();
+
+	deMemcpy(alloc.getHostPtr(), values.data(), de::dataSize(values));
+	flushAlloc(vkd, device, alloc);
+}
+
+tcu::TestStatus DynamicStateComputeInstance::iterateTransfer (void)
+{
+	const auto&	vki		= m_context.getInstanceInterface();
+	const auto	phyDev	= m_context.getPhysicalDevice();
+	const auto&	vkd		= m_context.getDeviceInterface();
+	const auto	device	= m_context.getDevice();
+	auto&		alloc	= m_context.getDefaultAllocator();
+	const auto	qIndex	= m_context.getUniversalQueueFamilyIndex();
+	const auto	queue	= m_context.getUniversalQueue();
+
+	const auto	cmdPool			= makeCommandPool(vkd, device, qIndex);
+	const auto	cmdBufferPtr	= allocateCommandBuffer(vkd, device, cmdPool.get(), VK_COMMAND_BUFFER_LEVEL_PRIMARY);
+	const auto	cmdBuffer		= cmdBufferPtr.get();
+
+	// Prepare two host-visible buffers for a transfer operation, with one element per dynamic state.
+	const deUint32		seqStart	= 1611747605u;
+
+	DE_ASSERT(!m_params.states.empty());
+	std::vector<deUint32>		srcValues(m_params.states.size());
+	const decltype(srcValues)	dstValues(srcValues.size(), 0u);
+	std::iota(begin(srcValues), end(srcValues), seqStart);
+
+	const auto			elemSize	= static_cast<VkDeviceSize>(sizeof(decltype(srcValues)::value_type));
+	const auto			dataSize	= static_cast<VkDeviceSize>(de::dataSize(srcValues));
+	const auto			bufferSize	= de::roundUp(dataSize, getPhysicalDeviceProperties(vki, phyDev).limits.nonCoherentAtomSize);
+	const auto			srcInfo		= makeBufferCreateInfo(bufferSize, VK_BUFFER_USAGE_TRANSFER_SRC_BIT);
+	const auto			dstInfo		= makeBufferCreateInfo(bufferSize, VK_BUFFER_USAGE_TRANSFER_DST_BIT);
+	BufferWithMemory	srcBuffer	(vkd, device, alloc, srcInfo, MemoryRequirement::HostVisible);
+	BufferWithMemory	dstBuffer	(vkd, device, alloc, dstInfo, MemoryRequirement::HostVisible);
+
+	// Fill source and destination buffer.
+	fillBuffer(vkd, device, srcBuffer, srcValues);
+	fillBuffer(vkd, device, dstBuffer, dstValues);
+
+	beginCommandBuffer(vkd, cmdBuffer);
+
+	// We need to preserve dynamic state data until the command buffer has run.
+	std::vector<de::MovePtr<DynamicStateData>> statesData;
+
+	for (size_t stateIdx = 0; stateIdx < m_params.states.size(); ++stateIdx)
+	{
+		// Get extra data needed for using the dynamic state.
+		const auto	offset		= elemSize * stateIdx;
+		const auto&	state		= m_params.states[stateIdx];
+		const auto	stateInfo	= getDynamicStateInfo(state);
+		statesData.push_back(getDynamicStateData(m_context, state));
+
+		// Record command if before.
+		if (m_params.whenToSet == WhenToSet::BEFORE)
+			stateInfo.recorder(&vkd, cmdBuffer, statesData.back().get());
+
+		// Transfer op (copy one buffer element per dynamic state).
+		const VkBufferCopy region = { offset, offset, elemSize };
+		vkd.cmdCopyBuffer(cmdBuffer, srcBuffer.get(), dstBuffer.get(), 1u, &region);
+
+		// Record command if after.
+		if (m_params.whenToSet == WhenToSet::AFTER)
+			stateInfo.recorder(&vkd, cmdBuffer, statesData.back().get());
+	}
+
+	const auto barrier = makeMemoryBarrier(VK_ACCESS_TRANSFER_WRITE_BIT, VK_ACCESS_HOST_READ_BIT);
+	vkd.cmdPipelineBarrier(cmdBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_HOST_BIT, 0u, 1u, &barrier, 0u, nullptr, 0u, nullptr);
+
+	endCommandBuffer(vkd, cmdBuffer);
+	submitCommandsAndWait(vkd, device, queue, cmdBuffer);
+
+	// Invalidate alloc and check destination buffer.
+	auto& dstBufferAlloc = dstBuffer.getAllocation();
+	invalidateAlloc(vkd, device, dstBufferAlloc);
+
+	decltype(srcValues) results (srcValues.size());
+	deMemcpy(results.data(), dstBufferAlloc.getHostPtr(), de::dataSize(srcValues));
+
+	for (size_t valueIdx = 0; valueIdx < srcValues.size(); ++valueIdx)
+	{
+		const auto& orig	= srcValues[valueIdx];
+		const auto& res		= results[valueIdx];
+
+		if (orig != res)
+		{
+			std::ostringstream msg;
+			msg << "Unexpected value found in destination buffer at position " << valueIdx << " (found=" << res << " expected=" << orig << ")";
+			TCU_FAIL(msg.str());
+		}
+	}
+
+	return tcu::TestStatus::pass("Pass");
+}
+
+tcu::TestStatus DynamicStateComputeInstance::iterateCompute (void)
+{
+	const auto&	vki		= m_context.getInstanceInterface();
+	const auto	phyDev	= m_context.getPhysicalDevice();
+	const auto&	vkd		= m_context.getDeviceInterface();
+	const auto	device	= m_context.getDevice();
+	auto&		alloc	= m_context.getDefaultAllocator();
+	const auto	qIndex	= m_context.getUniversalQueueFamilyIndex();
+	const auto	queue	= m_context.getUniversalQueue();
+
+	const auto	cmdPool			= makeCommandPool(vkd, device, qIndex);
+	const auto	cmdBufferPtr	= allocateCommandBuffer(vkd, device, cmdPool.get(), VK_COMMAND_BUFFER_LEVEL_PRIMARY);
+	const auto	cmdBuffer		= cmdBufferPtr.get();
+
+	DescriptorSetLayoutBuilder setLayoutBuilder;
+	setLayoutBuilder.addSingleBinding(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, VK_SHADER_STAGE_COMPUTE_BIT);
+	const auto	setLayout		= setLayoutBuilder.build(vkd, device);
+
+	// Push constants.
+	const deUint32	pcSize		= static_cast<deUint32>(sizeof(deUint32));
+	const auto		pcRange		= makePushConstantRange(VK_SHADER_STAGE_COMPUTE_BIT, 0u, pcSize);
+
+	// Pipeline.
+	const VkPipelineLayoutCreateInfo layoutInfo =
+	{
+		VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO,	//	VkStructureType					sType;
+		nullptr,										//	const void*						pNext;
+		0u,												//	VkPipelineLayoutCreateFlags		flags;
+		1u,												//	deUint32						setLayoutCount;
+		&setLayout.get(),								//	const VkDescriptorSetLayout*	pSetLayouts;
+		1u,												//	deUint32						pushConstantRangeCount;
+		&pcRange,										//	const VkPushConstantRange*		pPushConstantRanges;
+	};
+	const auto pipelineLayout = createPipelineLayout(vkd, device, &layoutInfo);
+
+	const auto shaderModule = createShaderModule(vkd, device, m_context.getBinaryCollection().get("comp"), 0u);
+
+	const VkPipelineShaderStageCreateInfo shaderStageInfo =
+	{
+		VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO,	//	VkStructureType						sType;
+		nullptr,												//	const void*							pNext;
+		0u,														//	VkPipelineShaderStageCreateFlags	flags;
+		VK_SHADER_STAGE_COMPUTE_BIT,							//	VkShaderStageFlagBits				stage;
+		shaderModule.get(),										//	VkShaderModule						module;
+		"main",													//	const char*							pName;
+		nullptr,												//	const VkSpecializationInfo*			pSpecializationInfo;
+	};
+
+	const VkComputePipelineCreateInfo pipelineInfo =
+	{
+		VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO,	//	VkStructureType					sType;
+		nullptr,										//	const void*						pNext;
+		0u,												//	VkPipelineCreateFlags			flags;
+		shaderStageInfo,								//	VkPipelineShaderStageCreateInfo	stage;
+		pipelineLayout.get(),							//	VkPipelineLayout				layout;
+		DE_NULL,										//	VkPipeline						basePipelineHandle;
+		0,												//	deInt32							basePipelineIndex;
+	};
+	const auto pipeline = createComputePipeline(vkd, device, DE_NULL, &pipelineInfo);
+
+	DE_ASSERT(!m_params.states.empty());
+
+	// Output buffer with one value per state.
+	std::vector<deUint32>	bufferData			(m_params.states.size(), 0u);
+	const auto				dataSize			(de::dataSize(bufferData));
+	const auto				outputBufferSize	= de::roundUp(static_cast<VkDeviceSize>(dataSize), getPhysicalDeviceProperties(vki, phyDev).limits.nonCoherentAtomSize);
+	const auto				bufferCreateInfo	= makeBufferCreateInfo(outputBufferSize, VK_BUFFER_USAGE_STORAGE_BUFFER_BIT);
+
+	BufferWithMemory		outputBuffer		(vkd, device, alloc, bufferCreateInfo, MemoryRequirement::HostVisible);
+	auto&					outputBufferAlloc	= outputBuffer.getAllocation();
+	auto					outputBufferPtr		= outputBufferAlloc.getHostPtr();
+
+	deMemcpy(outputBufferPtr, bufferData.data(), dataSize);
+	flushAlloc(vkd, device, outputBufferAlloc);
+
+	// Descriptor set.
+	DescriptorPoolBuilder poolBuilder;
+	poolBuilder.addType(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER);
+	const auto descriptorPool = poolBuilder.build(vkd, device, VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT, 1u);
+
+	const auto descriptorSet = makeDescriptorSet(vkd, device, descriptorPool.get(), setLayout.get());
+
+	const auto bufferInfo = makeDescriptorBufferInfo(outputBuffer.get(), 0ull, outputBufferSize);
+	DescriptorSetUpdateBuilder updateBuilder;
+	updateBuilder.writeSingle(descriptorSet.get(), DescriptorSetUpdateBuilder::Location::binding(0u), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, &bufferInfo);
+	updateBuilder.update(vkd, device);
+
+	// Record and submit.
+	beginCommandBuffer(vkd, cmdBuffer);
+
+	// We need to preserve dynamic state data until the command buffer has run.
+	std::vector<de::MovePtr<DynamicStateData>> statesData;
+
+	for (size_t stateIdx = 0; stateIdx < m_params.states.size(); ++stateIdx)
+	{
+		// Objects needed to set the dynamic state.
+		const auto&	state		= m_params.states[stateIdx];
+		const auto	stateInfo	= getDynamicStateInfo(state);
+		statesData.push_back(getDynamicStateData(m_context, state));
+
+		if (m_params.whenToSet == WhenToSet::BEFORE)
+			stateInfo.recorder(&vkd, cmdBuffer, statesData.back().get());
+
+		vkd.cmdBindPipeline(cmdBuffer, VK_PIPELINE_BIND_POINT_COMPUTE, pipeline.get());
+		vkd.cmdBindDescriptorSets(cmdBuffer, VK_PIPELINE_BIND_POINT_COMPUTE, pipelineLayout.get(), 0u, 1u, &descriptorSet.get(), 0u, nullptr);
+		{
+			// Each state will write to a different buffer position.
+			const deUint32 pcData = static_cast<deUint32>(stateIdx);
+			vkd.cmdPushConstants(cmdBuffer, pipelineLayout.get(), VK_SHADER_STAGE_COMPUTE_BIT, 0u, pcSize, &pcData);
+		}
+		vkd.cmdDispatch(cmdBuffer, 1u, 1u, 1u);
+
+		if (m_params.whenToSet == WhenToSet::AFTER)
+			stateInfo.recorder(&vkd, cmdBuffer, statesData.back().get());
+	}
+
+	// Barrier to read buffer contents.
+	const auto barrier = makeMemoryBarrier(VK_ACCESS_SHADER_WRITE_BIT, VK_ACCESS_HOST_READ_BIT);
+	vkd.cmdPipelineBarrier(cmdBuffer, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, VK_PIPELINE_STAGE_HOST_BIT, 0u, 1u, &barrier, 0u, nullptr, 0u, nullptr);
+
+	endCommandBuffer(vkd, cmdBuffer);
+	submitCommandsAndWait(vkd, device, queue, cmdBuffer);
+
+	// Read and verify buffer contents.
+	invalidateAlloc(vkd, device, outputBufferAlloc);
+	deMemcpy(bufferData.data(), outputBufferPtr, dataSize);
+
+	for (size_t idx = 0u; idx < bufferData.size(); ++idx)
+	{
+		if (bufferData[idx] != 1u)
+		{
+			std::ostringstream msg;
+			msg << "Unexpected value found at buffer position " << idx << ": " << bufferData[idx];
+			TCU_FAIL(msg.str());
+		}
+	}
+
+	return tcu::TestStatus::pass("Pass");
+}
+
+std::string getDynamicStateBriefName (VkDynamicState state)
+{
+	const auto fullName		= de::toString(state);
+	const auto prefixLen	= strlen("VK_DYNAMIC_STATE_");
+
+	return de::toLower(fullName.substr(prefixLen));
+}
+
+} // anonymous
+
+tcu::TestCaseGroup* createDynamicStateComputeTests (tcu::TestContext& testCtx)
+{
+	using GroupPtr = de::MovePtr<tcu::TestCaseGroup>;
+
+	GroupPtr mainGroup(new tcu::TestCaseGroup(testCtx, "compute_transfer", "Dynamic state mixed with compute and transfer operations"));
+
+	const struct
+	{
+		OperType	operationType;
+		const char*	name;
+	} operations[] =
+	{
+		{	OperType::COMPUTE,	"compute"	},
+		{	OperType::TRANSFER,	"transfer"	},
+	};
+
+	const struct
+	{
+		WhenToSet	when;
+		const char*	name;
+	} moments[] =
+	{
+		{	WhenToSet::BEFORE,	"before"	},
+		{	WhenToSet::AFTER,	"after"		},
+	};
+
+	// Tests with a single dynamic state.
+	{
+		GroupPtr singleStateGroup(new tcu::TestCaseGroup(testCtx, "single", "Tests using a single dynamic state"));
+
+		for (int operIdx = 0; operIdx < DE_LENGTH_OF_ARRAY(operations); ++operIdx)
+		{
+			GroupPtr operationGroup(new tcu::TestCaseGroup(testCtx, operations[operIdx].name, ""));
+
+			for (int stateIdx = 0; stateIdx < DE_LENGTH_OF_ARRAY(dynamicStateList); ++stateIdx)
+			{
+				const auto	state		= dynamicStateList[stateIdx];
+				const auto	stateName	= getDynamicStateBriefName(state);
+
+				GroupPtr stateGroup(new tcu::TestCaseGroup(testCtx, stateName.c_str(), ""));
+
+				for (int momentIdx = 0; momentIdx < DE_LENGTH_OF_ARRAY(moments); ++momentIdx)
+				{
+					const TestParams testParams =
+					{
+						operations[operIdx].operationType,		//	OperType					operationType;
+						moments[momentIdx].when,				//	WhenToSet					whenToSet;
+						std::vector<VkDynamicState>(1, state),	//	std::vector<VkDynamicState>	state;
+					};
+
+					stateGroup->addChild(new DynamicStateComputeCase(testCtx, moments[momentIdx].name, "", testParams));
+				}
+
+				operationGroup->addChild(stateGroup.release());
+			}
+
+			singleStateGroup->addChild(operationGroup.release());
+		}
+
+		mainGroup->addChild(singleStateGroup.release());
+	}
+
+	// A few tests with several dynamic states.
+	{
+		GroupPtr multiStateGroup(new tcu::TestCaseGroup(testCtx, "multi", "Tests using multiple dynamic states"));
+
+		for (int operIdx = 0; operIdx < DE_LENGTH_OF_ARRAY(operations); ++operIdx)
+		{
+			GroupPtr operationGroup(new tcu::TestCaseGroup(testCtx, operations[operIdx].name, ""));
+
+			for (int momentIdx = 0; momentIdx < DE_LENGTH_OF_ARRAY(moments); ++momentIdx)
+			{
+				TestParams testParams =
+				{
+					operations[operIdx].operationType,	//	OperType					operationType;
+					moments[momentIdx].when,			//	WhenToSet					whenToSet;
+					std::vector<VkDynamicState>(),		//	std::vector<VkDynamicState>	states;
+				};
+
+				// Use the basic states so as not to introduce extra requirements.
+				for (int stateIdx = 0; stateIdx < DE_LENGTH_OF_ARRAY(dynamicStateList); ++stateIdx)
+				{
+					testParams.states.push_back(dynamicStateList[stateIdx]);
+					if (dynamicStateList[stateIdx] == VK_DYNAMIC_STATE_STENCIL_REFERENCE)
+						break;
+				}
+
+				operationGroup->addChild(new DynamicStateComputeCase(testCtx, moments[momentIdx].name, "", testParams));
+			}
+
+			multiStateGroup->addChild(operationGroup.release());
+		}
+
+		mainGroup->addChild(multiStateGroup.release());
+	}
+
+	return mainGroup.release();
+}
+
+} // DynamicState
+} // vkt
diff --git a/external/vulkancts/modules/vulkan/pipeline/vktPipelineVertexOnlyTests.hpp b/external/vulkancts/modules/vulkan/dynamic_state/vktDynamicStateComputeTests.hpp
similarity index 66%
copy from external/vulkancts/modules/vulkan/pipeline/vktPipelineVertexOnlyTests.hpp
copy to external/vulkancts/modules/vulkan/dynamic_state/vktDynamicStateComputeTests.hpp
index 1a85ebf..d97b349 100644
--- a/external/vulkancts/modules/vulkan/pipeline/vktPipelineVertexOnlyTests.hpp
+++ b/external/vulkancts/modules/vulkan/dynamic_state/vktDynamicStateComputeTests.hpp
@@ -1,11 +1,11 @@
-#ifndef _VKTPIPELINEVERTEXONLYTESTS_HPP
-#define _VKTPIPELINEVERTEXONLYTESTS_HPP
+#ifndef _VKTDYNAMICSTATECOMPUTETESTS_HPP
+#define _VKTDYNAMICSTATECOMPUTETESTS_HPP
 /*------------------------------------------------------------------------
  * Vulkan Conformance Tests
  * ------------------------
  *
- * Copyright (c) 2019 Google LLC
- * Copyright (c) 2019 The Khronos Group Inc.
+ * Copyright (c) 2021 The Khronos Group Inc.
+ * Copyright (c) 2021 Valve Corporation.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -21,20 +21,20 @@
  *
  *//*!
  * \file
- * \brief Tests using only vertex shader in a graphics pipeline
+ * \brief Dynamic State tests mixing it with compute and transfer.
  *//*--------------------------------------------------------------------*/
 
 #include "tcuDefs.hpp"
-#include "tcuTestCase.hpp"
+#include "vktTestCase.hpp"
 
 namespace vkt
 {
-namespace pipeline
+namespace DynamicState
 {
 
-tcu::TestCaseGroup*	createVertexOnlyTests (tcu::TestContext& testCtx);
+tcu::TestCaseGroup* createDynamicStateComputeTests (tcu::TestContext& testCtx);
 
-} // pipeline
+} // DynamicState
 } // vkt
 
-#endif // _VKTPIPELINEVERTEXONLYTESTS_HPP
+#endif // _VKTDYNAMICSTATECOMPUTETESTS_HPP
diff --git a/external/vulkancts/modules/vulkan/dynamic_state/vktDynamicStateDSTests.cpp b/external/vulkancts/modules/vulkan/dynamic_state/vktDynamicStateDSTests.cpp
index 024ab82..982d8ba 100644
--- a/external/vulkancts/modules/vulkan/dynamic_state/vktDynamicStateDSTests.cpp
+++ b/external/vulkancts/modules/vulkan/dynamic_state/vktDynamicStateDSTests.cpp
@@ -331,7 +331,7 @@
 
 		transition2DImage(m_vk, *m_cmdBuffer, m_depthStencilImage->object(), vk::VK_IMAGE_ASPECT_DEPTH_BIT | vk::VK_IMAGE_ASPECT_STENCIL_BIT,
 						  vk::VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, vk::VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL,
-						  vk::VK_ACCESS_TRANSFER_WRITE_BIT, vk::VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT,
+						  vk::VK_ACCESS_TRANSFER_WRITE_BIT, vk::VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT | vk::VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT,
 						  vk::VK_PIPELINE_STAGE_TRANSFER_BIT, vk::VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT | vk::VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT);
 
 		vk::beginRenderPass(m_vk, *m_cmdBuffer, *m_renderPass, *m_framebuffer, vk::makeRect2D(0, 0, WIDTH, HEIGHT));
diff --git a/external/vulkancts/modules/vulkan/dynamic_state/vktDynamicStateInheritanceTests.cpp b/external/vulkancts/modules/vulkan/dynamic_state/vktDynamicStateInheritanceTests.cpp
new file mode 100644
index 0000000..d59702b
--- /dev/null
+++ b/external/vulkancts/modules/vulkan/dynamic_state/vktDynamicStateInheritanceTests.cpp
@@ -0,0 +1,1133 @@
+/*------------------------------------------------------------------------
+ * Vulkan Conformance Tests
+ * ------------------------
+ *
+ * Copyright (c) 2020 NVIDIA Corporation
+ *
+ * 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 VK_NV_inherited_viewport_scissor Tests
+ *
+ * Simple test cases for secondary command buffers inheriting dynamic
+ * viewport and scissor state from the calling primary command buffer
+ * or an earlier secondary command buffer. Tests draw a bunch of color
+ * rectangles using a trivial geometry pipeline (no vertex
+ * transformation except for fixed-function viewport transform,
+ * geometry shader selects viewport/scissor index). The depth test is
+ * enabled to check for incorrect depth transformation.
+ *//*--------------------------------------------------------------------*/
+#include "vktDynamicStateInheritanceTests.hpp"
+
+#include <math.h>
+#include <sstream>
+#include <vector>
+
+#include "vkBufferWithMemory.hpp"
+#include "vkImageWithMemory.hpp"
+
+using namespace vk;
+using tcu::Vec2;
+using tcu::Vec3;
+
+namespace vkt
+{
+namespace DynamicState
+{
+namespace
+{
+// Size of test framebuffer, power of 2 to avoid rounding errors.
+static const deInt32 kWidth = 256, kHeight = 128;
+
+// Maximum viewport/scissors, and maximum rectangles, for any test case.
+static const deUint32 kMaxViewports = 16, kMaxRectangles = 1024;
+
+// Color format of framebuffer image, this seems universally supported.
+static const VkFormat kFormat = VK_FORMAT_B8G8R8A8_UNORM;
+
+// Texel data matching kFormat, and functions for converting to/from
+// packed 32-bit color. alpha is unused.
+struct Texel
+{
+	deUint8 blue, green, red, alpha;
+};
+
+inline Texel texelFrom_r8g8b8(deInt32 r8g8b8)
+{
+	return {deUint8(r8g8b8 & 255),
+			deUint8((r8g8b8 >> 8) & 255),
+			deUint8((r8g8b8 >> 16) & 255), 0u};
+}
+
+// Parameters of axis-aligned rectangle to rasterize.  No mvp matrix
+// or anything, only testing fixed-function viewport transformation.
+struct Rectangle
+{
+	Vec3    xyz;         // Before viewport transformation
+	deInt32 r8g8b8;      // (8-bit) red << 16 | green << 8 | blue
+	Vec2    widthHeight; // positive; before viewport transformation
+	deInt32 viewportIndex;
+};
+
+// Determines where the secondary command buffer's inherited viewport/scissor state comes from (if inherited at all).
+enum InheritanceMode
+{
+	kInheritanceDisabled,   // Disable extension, use non-dynamic viewport/scissor count
+	kInheritFromPrimary,    // Inherit from calling primary cmd buffer
+	kInheritFromSecondary,  // Inherit from earlier secondary cmd buffer
+	kSplitInheritance,      // Split viewport/scissor array in two, inherit
+							// some from primary and rest from secondary
+
+	// Inherit state-with-count-EXT from calling primary cmd buffer
+	kInheritFromPrimaryWithCount,
+	// Inherit state-with-count-EXT from earlier secondary cmd buffer
+	kInheritFromSecondaryWithCount,
+};
+
+// Input test geometry.
+struct TestGeometry
+{
+	// Color and depth to clear the framebuffer to.
+	Vec3    clearColor;
+	float   clearDepth;
+
+	// List of rectangles to rasterize, in order.
+	std::vector<Rectangle>  rectangles;
+
+	// List of viewports and scissors to use, both vectors must have
+	// same length and have length at least 1.
+	std::vector<VkViewport> viewports;
+	std::vector<VkRect2D>   scissors;
+	InheritanceMode inheritanceMode;
+};
+
+
+// Whether the test was a success, and both the device-rasterized image
+// and the CPU-computed expected image.
+struct TestResults
+{
+	bool passed;
+
+	// Index with [y][x]
+	Texel   deviceResult[kHeight][kWidth];
+	Texel expectedResult[kHeight][kWidth];
+};
+
+
+// TODO probably tcu has a clamp already.
+template <typename T>
+inline T clamp(T x, T minVal, T maxVal)
+{
+	return std::min(std::max(x, minVal), maxVal);
+}
+
+
+class InheritanceTestInstance : public TestInstance
+{
+	const vk::InstanceInterface& m_in;
+	const vk::DeviceInterface&   m_vk;
+	InheritanceMode              m_inheritanceMode;
+
+	// Vertex buffer storing rectangle list, and its mapping and
+	// backing memory. kMaxRectangles is its capacity (in Rectangles).
+	BufferWithMemory m_rectangleBuffer;
+
+	// Buffer for downloading rendered image from device
+	BufferWithMemory m_downloadBuffer;
+
+	// Image attachments and views.
+	// Create info for depth buffer set at runtime due to depth format search.
+	VkImageCreateInfo     m_depthImageInfo;
+	ImageWithMemory       m_colorImage,    m_depthImage;
+	VkImageViewCreateInfo m_colorViewInfo, m_depthViewInfo;
+	Unique<VkImageView>   m_colorView,     m_depthView;
+
+	// Simple render pass and framebuffer.
+	Move<VkRenderPass>  m_renderPass;
+	Move<VkFramebuffer> m_framebuffer;
+
+	// Shader modules for graphics pipelines.
+	Move<VkShaderModule> m_vertModule, m_geomModule, m_fragModule;
+
+	// Vertex, geometry, fragment stages for creating the pipeline.
+	VkPipelineShaderStageCreateInfo m_stages[3];
+
+	// Geometry shader pipeline, converts points into rasterized
+	// struct Rectangles using geometry shader, which also selects the
+	// viewport to use. Pipeline array maps viewport/scissor count to
+	// the pipeline to use (special value 0 indicates that
+	// viewport/scissor count is dynamic state).
+	Move<VkPipelineLayout> m_rectanglePipelineLayout;
+	Move<VkPipeline>         m_rectanglePipelines[kMaxViewports + 1];
+
+	// Command pool
+	Move<VkCommandPool> m_cmdPool;
+
+	// Primary command buffer, re-used for every test
+	VkCommandBuffer m_primaryCmdBuffer;
+
+	// Secondary command buffers, first for specifying
+	// viewport/scissor state, second for subpass contents.
+	// Both re-used to check for stale state.
+	VkCommandBuffer m_setStateCmdBuffer, m_subpassCmdBuffer;
+
+	// "depth buffer" used for CPU rasterization of expected image.
+	float m_cpuDepthBuffer[kHeight][kWidth];
+
+public:
+	InheritanceTestInstance(Context& context, InheritanceMode inheritanceMode);
+	tcu::TestStatus iterate(void);
+
+private:
+	void startRenderCmds(const TestGeometry& geometry);
+	void rasterizeExpectedResults(const TestGeometry& geometry, Texel (&output)[kHeight][kWidth]);
+};
+
+
+
+// Most state for graphics pipeline
+namespace pipelinestate {
+
+// Vertex shader, just pass through Rectangle data.
+const char vert_glsl[] =
+"#version 460\n"
+"\n"
+"layout(location=0) in vec3 xyz;\n"
+"layout(location=1) in int r8g8b8;\n"
+"layout(location=2) in vec2 widthHeight;\n"
+"layout(location=3) in int viewportIndex;\n"
+"\n"
+"layout(location=0) flat out int o_r8g8b8;\n"
+"layout(location=1) flat out vec2 o_widthHeight;\n"
+"layout(location=2) flat out int o_viewportIndex;\n"
+"\n"
+"void main()\n"
+"{\n"
+"	gl_Position     = vec4(xyz, 1.0);\n"
+"	o_r8g8b8        = r8g8b8;\n"
+"	o_widthHeight   = widthHeight;\n"
+"	o_viewportIndex = viewportIndex;\n"
+"}\n";
+
+// Geometry shader, convert points to rectangles and select correct viewport.
+const char geom_glsl[] =
+"#version 460\n"
+"\n"
+"layout(points) in;\n"
+"layout(triangle_strip, max_vertices=4) out;\n"
+"\n"
+"layout(location=0) flat in int r8g8b8[];\n"
+"layout(location=1) flat in vec2 widthHeight[];\n"
+"layout(location=2) flat in int viewportIndex[];\n"
+"\n"
+"layout(location=0) flat out vec4 o_color;\n"
+"\n"
+"void main()\n"
+"{\n"
+"	int redBits   = (r8g8b8[0] >> 16) & 255;\n"
+"	int greenBits = (r8g8b8[0] >> 8)  & 255;\n"
+"	int blueBits  =  r8g8b8[0]        & 255;\n"
+"	float n       = 1.0 / 255.0;\n"
+"	vec4 color    = vec4(redBits * n, greenBits * n, blueBits * n, 1.0);\n"
+"\n"
+"	gl_ViewportIndex = viewportIndex[0];\n"
+"	gl_Position = gl_in[0].gl_Position;\n"
+"	o_color     = color;\n"
+"	EmitVertex();\n"
+"\n"
+"	gl_ViewportIndex = viewportIndex[0];\n"
+"	gl_Position = gl_in[0].gl_Position + vec4(0.0, widthHeight[0].y, 0.0, 0.0);\n"
+"	o_color     = color;\n"
+"	EmitVertex();\n"
+"\n"
+"	gl_ViewportIndex = viewportIndex[0];\n"
+"	gl_Position = gl_in[0].gl_Position + vec4(widthHeight[0].x, 0.0, 0.0, 0.0);\n"
+"	o_color     = color;\n"
+"	EmitVertex();\n"
+"\n"
+"	gl_ViewportIndex = viewportIndex[0];\n"
+"	gl_Position = gl_in[0].gl_Position + vec4(widthHeight[0].xy, 0.0, 0.0);\n"
+"	o_color     = color;\n"
+"	EmitVertex();\n"
+"\n"
+"	EndPrimitive();\n"
+"}\n";
+
+// Pass through fragment shader
+const char frag_glsl[] =
+"#version 460\n"
+"layout(location=0) flat in vec4 color;\n"
+"layout(location=0) out     vec4 o_color;\n"
+"\n"
+"void main()\n"
+"{\n"
+"	o_color = color;\n"
+"}\n";
+
+static const VkVertexInputBindingDescription binding = {0, sizeof(Rectangle), VK_VERTEX_INPUT_RATE_VERTEX};
+
+static const VkVertexInputAttributeDescription attributes[4] = {
+	{0, 0, VK_FORMAT_R32G32B32_SFLOAT, offsetof(Rectangle, xyz)},
+	{1, 0, VK_FORMAT_R32_SINT, offsetof(Rectangle, r8g8b8)},
+	{2, 0, VK_FORMAT_R32G32_SFLOAT, offsetof(Rectangle, widthHeight)},
+	{3, 0, VK_FORMAT_R32_SINT, offsetof(Rectangle, viewportIndex)} };
+
+static const VkPipelineVertexInputStateCreateInfo vertexInput = {
+	VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO, NULL,
+	0, 1, &binding, 4, attributes };
+
+static const VkPipelineInputAssemblyStateCreateInfo assembly {
+	VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO, NULL,
+	0, VK_PRIMITIVE_TOPOLOGY_POINT_LIST, VK_FALSE };
+
+static const VkPipelineViewportStateCreateInfo viewportTemplate = {
+	VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO, NULL,
+	0, 0, NULL, 0, NULL };
+
+static const VkPipelineRasterizationStateCreateInfo rasterization = {
+	VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO, NULL,
+	0,
+	VK_FALSE,
+	VK_FALSE,
+	VK_POLYGON_MODE_FILL,
+	VK_CULL_MODE_BACK_BIT,
+	VK_FRONT_FACE_COUNTER_CLOCKWISE,
+	VK_FALSE, 0.0f, 0.0f, 0.0f, 1.0f };
+
+static const VkPipelineMultisampleStateCreateInfo multisample = {
+	VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO, NULL,
+	0, VK_SAMPLE_COUNT_1_BIT, VK_FALSE, 0.0f, NULL, VK_FALSE, VK_FALSE };
+
+static const VkPipelineDepthStencilStateCreateInfo depthStencil = {
+	VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO, NULL,
+	0, VK_TRUE, VK_TRUE, VK_COMPARE_OP_LESS,
+	0, 0, {}, {}, 0, 0 };
+
+static const VkPipelineColorBlendAttachmentState blendAttachment {
+	VK_FALSE,
+	VK_BLEND_FACTOR_ZERO, VK_BLEND_FACTOR_ZERO, VK_BLEND_OP_ADD,
+	VK_BLEND_FACTOR_ZERO, VK_BLEND_FACTOR_ZERO, VK_BLEND_OP_ADD,
+	VK_COLOR_COMPONENT_R_BIT | VK_COLOR_COMPONENT_G_BIT | VK_COLOR_COMPONENT_B_BIT | VK_COLOR_COMPONENT_A_BIT };
+
+static const VkPipelineColorBlendStateCreateInfo blend = {
+	VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO, NULL,
+	0, VK_FALSE, VK_LOGIC_OP_CLEAR, 1, &blendAttachment, {} };
+
+static const VkDynamicState dynamicStateData[2] = { VK_DYNAMIC_STATE_VIEWPORT, VK_DYNAMIC_STATE_SCISSOR };
+static const VkDynamicState dynamicStateWithCountData[2] = {
+	VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT,
+	VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT };
+
+static const VkPipelineDynamicStateCreateInfo dynamicState = {
+	VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO, NULL,
+	0, 2, dynamicStateData };
+
+static const VkPipelineDynamicStateCreateInfo dynamicStateWithCount = {
+	VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO, NULL,
+	0, 2, dynamicStateWithCountData };
+
+// Fill in the given graphics pipeline state. The caller needs to
+// provide space to store the generated
+// VkPipelineViewportStateCreateInfo, and provide the render pass,
+// pipeline layout, shader modules, and the viewport/scissor count (0
+// to use VK_DYNAMIC_STATE_VIEWPORT/SCISSOR_WITH_COUNT_EXT)
+static void fill(VkRenderPass                       renderPass,
+				 VkPipelineLayout                   layout,
+				 deUint32                           staticViewportScissorCount,
+				 deUint32                           stageCount,
+				 const VkPipelineShaderStageCreateInfo* pStages,
+				 VkGraphicsPipelineCreateInfo*      outCreateInfo,
+				 VkPipelineViewportStateCreateInfo* outViewportState)
+{
+	outCreateInfo->sType = VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO;
+	outCreateInfo->pNext = NULL;
+	outCreateInfo->flags = 0;
+	outCreateInfo->stageCount = stageCount;
+	outCreateInfo->pStages = pStages;
+	outCreateInfo->pVertexInputState = &vertexInput;
+	outCreateInfo->pInputAssemblyState = &assembly;
+	outCreateInfo->pTessellationState = NULL;
+	outCreateInfo->pViewportState = outViewportState;
+	outCreateInfo->pRasterizationState = &rasterization;
+	outCreateInfo->pMultisampleState = &multisample;
+	outCreateInfo->pDepthStencilState = &depthStencil;
+	outCreateInfo->pColorBlendState = &blend;
+	outCreateInfo->pDynamicState = staticViewportScissorCount == 0 ? &dynamicStateWithCount : &dynamicState;
+	outCreateInfo->layout = layout;
+	outCreateInfo->renderPass = renderPass;
+	outCreateInfo->subpass = 0;
+	outCreateInfo->basePipelineHandle = 0;
+	outCreateInfo->basePipelineIndex = 0;
+
+	VkPipelineViewportStateCreateInfo viewportState = viewportTemplate;
+	viewportState.viewportCount = staticViewportScissorCount;
+	viewportState.scissorCount  = staticViewportScissorCount;
+	*outViewportState = viewportState;
+}
+
+} // end namespace pipelinestate
+
+
+const VkBufferCreateInfo rectangleBufferInfo = {
+	VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO, NULL, 0,
+	kMaxRectangles * sizeof(Rectangle),
+	VK_BUFFER_USAGE_VERTEX_BUFFER_BIT, VK_SHARING_MODE_EXCLUSIVE, 0, NULL };
+
+const VkBufferCreateInfo downloadBufferInfo = {
+	VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO, NULL, 0,
+	kWidth * kHeight * sizeof(Texel),
+	VK_BUFFER_USAGE_TRANSFER_DST_BIT, VK_SHARING_MODE_EXCLUSIVE, 0, NULL };
+
+const VkImageCreateInfo colorImageInfo = {
+	VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO, NULL, 0,
+	VK_IMAGE_TYPE_2D,
+	kFormat,
+	{ kWidth, kHeight, 1 },
+	1, 1, VK_SAMPLE_COUNT_1_BIT,
+	VK_IMAGE_TILING_OPTIMAL,
+	VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | VK_IMAGE_USAGE_TRANSFER_SRC_BIT,
+	VK_SHARING_MODE_EXCLUSIVE, 0, NULL,
+	VK_IMAGE_LAYOUT_UNDEFINED };
+
+VkImageCreateInfo makeDepthImageInfo(Context& context)
+{
+	VkImageCreateInfo info = {
+		VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO, NULL, 0,
+		VK_IMAGE_TYPE_2D,
+		VK_FORMAT_UNDEFINED, // To be filled in.
+		{ kWidth, kHeight, 1 },
+		1, 1, VK_SAMPLE_COUNT_1_BIT,
+		VK_IMAGE_TILING_OPTIMAL,
+		VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT,
+		VK_SHARING_MODE_EXCLUSIVE, 0, NULL,
+		VK_IMAGE_LAYOUT_UNDEFINED
+	};
+
+	VkFormat depthFormats[4] = {
+		VK_FORMAT_X8_D24_UNORM_PACK32, VK_FORMAT_D24_UNORM_S8_UINT,
+		VK_FORMAT_D32_SFLOAT, VK_FORMAT_D32_SFLOAT_S8_UINT};
+	for (int i = 0; i < 4; ++i)
+	{
+		VkFormatProperties properties;
+		context.getInstanceInterface().getPhysicalDeviceFormatProperties(
+			context.getPhysicalDevice(), depthFormats[i], &properties);
+		if (properties.optimalTilingFeatures & VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT)
+		{
+			info.format = depthFormats[i];
+			return info;
+		}
+	}
+	throw std::runtime_error("Did not find suitable depth attachment format.");
+}
+
+
+
+// Initialize the Vulkan state for the tests.
+InheritanceTestInstance::InheritanceTestInstance(Context& context, InheritanceMode inheritanceMode)
+	: TestInstance(context)
+	, m_in(context.getInstanceInterface())
+	, m_vk(context.getDeviceInterface())
+	, m_inheritanceMode(inheritanceMode)
+	, m_rectangleBuffer(m_vk, m_context.getDevice(), m_context.getDefaultAllocator(), rectangleBufferInfo,
+						MemoryRequirement::HostVisible | MemoryRequirement::Coherent)
+	, m_downloadBuffer(m_vk, m_context.getDevice(), m_context.getDefaultAllocator(), downloadBufferInfo,
+						MemoryRequirement::HostVisible | MemoryRequirement::Coherent)
+	, m_depthImageInfo(makeDepthImageInfo(context))
+	, m_colorImage(m_vk, m_context.getDevice(), m_context.getDefaultAllocator(), colorImageInfo, MemoryRequirement::Local)
+	, m_depthImage(m_vk, m_context.getDevice(), m_context.getDefaultAllocator(), m_depthImageInfo, MemoryRequirement::Local)
+	, m_colorViewInfo{ VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO, NULL, 0, m_colorImage.get(), VK_IMAGE_VIEW_TYPE_2D,
+					   kFormat, {}, { VK_IMAGE_ASPECT_COLOR_BIT, 0, 1, 0, 1 } }
+	, m_depthViewInfo{ VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO, NULL, 0, m_depthImage.get(), VK_IMAGE_VIEW_TYPE_2D,
+					   m_depthImageInfo.format, {}, { VK_IMAGE_ASPECT_DEPTH_BIT, 0, 1, 0, 1 } }
+	, m_colorView(createImageView(m_vk, m_context.getDevice(), &m_colorViewInfo, NULL))
+	, m_depthView(createImageView(m_vk, m_context.getDevice(), &m_depthViewInfo, NULL))
+{
+	VkDevice dev = m_context.getDevice();
+
+	// Render pass, adapted from Alexander Overvoorde's
+	// vulkan-tutorial.com (CC0 1.0 Universal)
+	VkAttachmentDescription colorAttachment{};
+	colorAttachment.format = kFormat;
+	colorAttachment.samples = VK_SAMPLE_COUNT_1_BIT;
+	colorAttachment.loadOp = VK_ATTACHMENT_LOAD_OP_CLEAR;
+	colorAttachment.storeOp = VK_ATTACHMENT_STORE_OP_STORE;
+	colorAttachment.stencilLoadOp = VK_ATTACHMENT_LOAD_OP_DONT_CARE;
+	colorAttachment.stencilStoreOp = VK_ATTACHMENT_STORE_OP_DONT_CARE;
+	colorAttachment.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED;
+	colorAttachment.finalLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL;
+
+	VkAttachmentDescription depthAttachment{};
+	depthAttachment.format = m_depthImageInfo.format;
+	depthAttachment.samples = VK_SAMPLE_COUNT_1_BIT;
+	depthAttachment.loadOp = VK_ATTACHMENT_LOAD_OP_CLEAR;
+	depthAttachment.storeOp = VK_ATTACHMENT_STORE_OP_DONT_CARE;
+	depthAttachment.stencilLoadOp = VK_ATTACHMENT_LOAD_OP_DONT_CARE;
+	depthAttachment.stencilStoreOp = VK_ATTACHMENT_STORE_OP_DONT_CARE;
+	depthAttachment.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED;
+	depthAttachment.finalLayout = VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL;
+
+	VkAttachmentReference colorAttachmentRef{};
+	colorAttachmentRef.attachment = 0;
+	colorAttachmentRef.layout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL;
+
+	VkAttachmentReference depthAttachmentRef{};
+	depthAttachmentRef.attachment = 1;
+	depthAttachmentRef.layout = VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL;
+
+	VkSubpassDescription subpass{};
+	subpass.pipelineBindPoint = VK_PIPELINE_BIND_POINT_GRAPHICS;
+	subpass.colorAttachmentCount = 1;
+	subpass.pColorAttachments = &colorAttachmentRef;
+	subpass.pDepthStencilAttachment = &depthAttachmentRef;
+
+	VkSubpassDependency dependency{};
+	dependency.srcSubpass = VK_SUBPASS_EXTERNAL;
+	dependency.dstSubpass = 0;
+	dependency.srcStageMask = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT;
+	dependency.srcAccessMask = 0;
+	dependency.dstStageMask = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT;
+	dependency.dstAccessMask = VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT;
+
+	VkAttachmentDescription attachments[2] = {colorAttachment, depthAttachment};
+	VkRenderPassCreateInfo renderPassInfo{};
+	renderPassInfo.sType = VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO;
+	renderPassInfo.attachmentCount = 2;
+	renderPassInfo.pAttachments = attachments;
+	renderPassInfo.subpassCount = 1;
+	renderPassInfo.pSubpasses = &subpass;
+	renderPassInfo.dependencyCount = 1;
+	renderPassInfo.pDependencies = &dependency;
+
+	m_renderPass = createRenderPass(m_vk, dev, &renderPassInfo, NULL);
+
+	// Set up framebuffer
+	VkImageView attachmentViews[2] = { m_colorView.get(), m_depthView.get() };
+	VkFramebufferCreateInfo framebufferInfo {
+		VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO,
+		NULL,
+		0,
+		m_renderPass.get(),
+		2, attachmentViews,
+		kWidth, kHeight, 1 };
+	m_framebuffer = createFramebuffer(m_vk, dev, &framebufferInfo, NULL);
+
+	// Compile graphics pipeline stages.
+	m_vertModule = vk::createShaderModule(m_vk, dev, m_context.getBinaryCollection().get("vert"), 0u);
+	m_stages[0].sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO;
+	m_stages[0].pNext = NULL;
+	m_stages[0].flags = 0;
+	m_stages[0].stage = VK_SHADER_STAGE_VERTEX_BIT;
+	m_stages[0].module = m_vertModule.get();
+	m_stages[0].pName = "main";
+	m_stages[0].pSpecializationInfo = NULL;
+
+	m_geomModule = vk::createShaderModule(m_vk, dev, m_context.getBinaryCollection().get("geom"), 0u);
+	m_stages[1].sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO;
+	m_stages[1].pNext = NULL;
+	m_stages[1].flags = 0;
+	m_stages[1].stage = VK_SHADER_STAGE_GEOMETRY_BIT;
+	m_stages[1].module = m_geomModule.get();
+	m_stages[1].pName = "main";
+	m_stages[1].pSpecializationInfo = NULL;
+
+	m_fragModule = vk::createShaderModule(m_vk, dev, m_context.getBinaryCollection().get("frag"), 0u);
+	m_stages[2].sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO;
+	m_stages[2].pNext = NULL;
+	m_stages[2].flags = 0;
+	m_stages[2].stage = VK_SHADER_STAGE_FRAGMENT_BIT;
+	m_stages[2].module = m_fragModule.get();
+	m_stages[2].pName = "main";
+	m_stages[2].pSpecializationInfo = NULL;
+
+	// Set up pipeline layout (empty)
+	VkPipelineLayoutCreateInfo pipelineLayoutInfo{ };
+	pipelineLayoutInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO;
+	m_rectanglePipelineLayout = createPipelineLayout(m_vk, dev, &pipelineLayoutInfo, NULL);
+	// Graphics pipelines are created on-the-fly later.
+
+	// Command pool and command buffers.
+	VkCommandPoolCreateInfo poolInfo {
+		VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO,
+		NULL,
+		VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT,
+		m_context.getUniversalQueueFamilyIndex() };
+	m_cmdPool = createCommandPool(m_vk, dev, &poolInfo, NULL);
+
+	VkCommandBufferAllocateInfo cmdBufferInfo {
+		VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO, NULL,
+		m_cmdPool.get(),
+		VK_COMMAND_BUFFER_LEVEL_PRIMARY, 1 };
+	VK_CHECK(m_vk.allocateCommandBuffers(dev, &cmdBufferInfo, &m_primaryCmdBuffer));
+	cmdBufferInfo.level = VK_COMMAND_BUFFER_LEVEL_SECONDARY;
+	VK_CHECK(m_vk.allocateCommandBuffers(dev, &cmdBufferInfo, &m_setStateCmdBuffer));
+	VK_CHECK(m_vk.allocateCommandBuffers(dev, &cmdBufferInfo, &m_subpassCmdBuffer));
+}
+
+
+static deUint8 u8_from_unorm(float x)
+{
+	return deUint8(roundf(clamp(x, 0.0f, 1.0f) * 255.0f));
+}
+
+
+// Start work (on the univeral queue) for filling m_downloadBuffer with the image
+// resulting from rendering the test case. Must vkQueueWaitIdle before
+// accessing the data, or calling this function again.
+void InheritanceTestInstance::startRenderCmds(const TestGeometry& geometry)
+{
+	DE_ASSERT(geometry.viewports.size() > 0);
+	DE_ASSERT(geometry.viewports.size() <= kMaxViewports);
+	DE_ASSERT(geometry.viewports.size() == geometry.scissors.size());
+
+	// Fill vertex buffer
+	DE_ASSERT(kMaxRectangles >= geometry.rectangles.size());
+	Rectangle* pRectangles = static_cast<Rectangle*>(m_rectangleBuffer.getAllocation().getHostPtr());
+	for (size_t i = 0; i < geometry.rectangles.size(); ++i)
+	{
+		pRectangles[i] = geometry.rectangles[i];
+	}
+
+	VkCommandBufferInheritanceInfo inheritanceInfo {
+		VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO,
+		NULL,
+		m_renderPass.get(),
+		0,
+		m_framebuffer.get(),
+		0, 0, 0 };
+
+	VkCommandBufferBeginInfo cmdBeginInfo {
+		VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,
+		NULL,
+		VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT,
+		&inheritanceInfo };
+
+	// ************************************************************************
+	// Record state-setting secondary command buffer.
+	// ************************************************************************
+	VK_CHECK(m_vk.beginCommandBuffer(m_setStateCmdBuffer, &cmdBeginInfo));
+	switch (m_inheritanceMode)
+	{
+	case kInheritanceDisabled:
+	case kInheritFromPrimary:
+	case kInheritFromPrimaryWithCount:
+		break;
+	case kInheritFromSecondary:
+		// Set all viewport/scissor state.
+		m_vk.cmdSetViewport(m_setStateCmdBuffer, 0, deUint32(geometry.viewports.size()), &geometry.viewports[0]);
+		m_vk.cmdSetScissor(m_setStateCmdBuffer, 0, deUint32(geometry.scissors.size()), &geometry.scissors[0]);
+		break;
+	case kSplitInheritance:
+		// Set just the first viewport / scissor, rest are set in
+		// primary command buffer. Checks that extension properly
+		// muxes state from different sources.
+		m_vk.cmdSetViewport(m_setStateCmdBuffer, 0, 1, &geometry.viewports[0]);
+		m_vk.cmdSetScissor(m_setStateCmdBuffer, 0, 1, &geometry.scissors[0]);
+		break;
+	case kInheritFromSecondaryWithCount:
+		m_vk.cmdSetViewportWithCountEXT(m_setStateCmdBuffer,
+										deUint32(geometry.viewports.size()),
+										&geometry.viewports[0]);
+		m_vk.cmdSetScissorWithCountEXT(m_setStateCmdBuffer,
+									   deUint32(geometry.scissors.size()),
+									   &geometry.scissors[0]);
+		break;
+	}
+	VK_CHECK(m_vk.endCommandBuffer(m_setStateCmdBuffer));
+
+	// ************************************************************************
+	// Record subpass command buffer, bind vertex buffer and pipeline,
+	// then draw rectangles.
+	// ************************************************************************
+	if (m_inheritanceMode != kInheritanceDisabled)
+	{
+		// Enable viewport/scissor inheritance struct.
+		VkCommandBufferInheritanceViewportScissorInfoNV inheritViewportInfo {
+			VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_VIEWPORT_SCISSOR_INFO_NV,
+			NULL,
+			VK_TRUE,
+			deUint32(geometry.viewports.size()), &geometry.viewports[0] };
+		inheritanceInfo.pNext = &inheritViewportInfo;
+		VK_CHECK(m_vk.beginCommandBuffer(m_subpassCmdBuffer, &cmdBeginInfo));
+		inheritanceInfo.pNext = NULL;
+	}
+	else
+	{
+		VK_CHECK(m_vk.beginCommandBuffer(m_subpassCmdBuffer, &cmdBeginInfo));
+	}
+	// Set viewport/scissor state only when not inherited.
+	if (m_inheritanceMode == kInheritanceDisabled)
+	{
+		m_vk.cmdSetViewport(m_subpassCmdBuffer, 0, deUint32(geometry.viewports.size()), &geometry.viewports[0]);
+		m_vk.cmdSetScissor(m_subpassCmdBuffer, 0, deUint32(geometry.scissors.size()), &geometry.scissors[0]);
+	}
+	// Get the graphics pipeline, creating it if needed (encountered
+	// new static viewport/scissor count). 0 = dynamic count.
+	deUint32 staticViewportCount = 0;
+	switch (m_inheritanceMode)
+	{
+	case kInheritanceDisabled:
+	case kInheritFromPrimary:
+	case kInheritFromSecondary:
+	case kSplitInheritance:
+		staticViewportCount = deUint32(geometry.viewports.size());
+		break;
+	case kInheritFromPrimaryWithCount:
+	case kInheritFromSecondaryWithCount:
+		staticViewportCount = 0;
+		break;
+	}
+	VkPipeline graphicsPipeline = m_rectanglePipelines[staticViewportCount].get();
+	if (!graphicsPipeline)
+	{
+		VkGraphicsPipelineCreateInfo pipelineInfo;
+		VkPipelineViewportStateCreateInfo viewportInfo;
+		pipelinestate::fill(
+			m_renderPass.get(), m_rectanglePipelineLayout.get(), staticViewportCount,
+			3, m_stages,
+			&pipelineInfo, &viewportInfo);
+		m_rectanglePipelines[staticViewportCount] = createGraphicsPipeline(m_vk, m_context.getDevice(), 0, &pipelineInfo, NULL);
+		graphicsPipeline = m_rectanglePipelines[staticViewportCount].get();
+	}
+	m_vk.cmdBindPipeline(m_subpassCmdBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, graphicsPipeline);
+
+	// Bind vertex buffer and draw.
+	VkDeviceSize offset = 0;
+	VkBuffer     vertexBuffer = m_rectangleBuffer.get();
+	m_vk.cmdBindVertexBuffers(m_subpassCmdBuffer, 0, 1, &vertexBuffer, &offset);
+	m_vk.cmdDraw(m_subpassCmdBuffer, deUint32(geometry.rectangles.size()), 1, 0, 0);
+	VK_CHECK(m_vk.endCommandBuffer(m_subpassCmdBuffer));
+
+	// ************************************************************************
+	// Primary command buffer commands, start render pass and execute
+	// the secondary command buffers, then copy rendered image to
+	// download buffer.
+	// ************************************************************************
+	VkCommandBufferBeginInfo beginInfo {
+		VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,
+		NULL,
+		0, NULL };
+	VK_CHECK(m_vk.beginCommandBuffer(m_primaryCmdBuffer, &beginInfo));
+
+	VkClearValue clearValues[2];
+	clearValues[0].color.float32[0] = geometry.clearColor.x();
+	clearValues[0].color.float32[1] = geometry.clearColor.y();
+	clearValues[0].color.float32[2] = geometry.clearColor.z();
+	clearValues[0].color.float32[3] = 1.0f;
+	clearValues[1].depthStencil = { geometry.clearDepth, 0 };
+
+	VkRenderPassBeginInfo renderPassBeginInfo {
+		VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO,
+		NULL,
+		m_renderPass.get(),
+		m_framebuffer.get(),
+		{ { 0, 0 }, { kWidth, kHeight } },
+		2, clearValues };
+
+	switch (m_inheritanceMode)
+	{
+	case kInheritFromPrimary:
+		// Specify all viewport/scissor state only when we expect to.
+		// inherit ALL viewport/scissor state from primary command buffer.
+		m_vk.cmdSetViewport(m_primaryCmdBuffer, 0, deUint32(geometry.viewports.size()), &geometry.viewports[0]);
+		m_vk.cmdSetScissor(m_primaryCmdBuffer, 0, deUint32(geometry.scissors.size()), &geometry.scissors[0]);
+		break;
+	case kInheritFromPrimaryWithCount:
+		// Same but with count inherited.
+		m_vk.cmdSetViewportWithCountEXT(m_primaryCmdBuffer,
+										deUint32(geometry.viewports.size()),
+										&geometry.viewports[0]);
+		m_vk.cmdSetScissorWithCountEXT(m_primaryCmdBuffer,
+									   deUint32(geometry.scissors.size()),
+									   &geometry.scissors[0]);
+		break;
+	case kSplitInheritance:
+		// Specify the remaining viewport, scissors not set by the
+		// setStateCmdBuffer in this test mode.
+		if (geometry.viewports.size() > 1)
+		{
+			m_vk.cmdSetViewport(m_primaryCmdBuffer, 1, deUint32(geometry.viewports.size() - 1), &geometry.viewports[1]);
+			m_vk.cmdSetScissor(m_primaryCmdBuffer, 1, deUint32(geometry.scissors.size() - 1), &geometry.scissors[1]);
+		}
+		/* FALLTHROUGH */
+	case kInheritanceDisabled:
+	case kInheritFromSecondary:
+	case kInheritFromSecondaryWithCount:
+		// Specify some bogus state, ensure correctly overwritten later.
+		VkViewport bogusViewport { 0.f, 0.f, 8.f, 8.f, 0.f, 0.1f };
+		VkRect2D   bogusScissors { { 2, 0 }, { 100, 100 }};
+		m_vk.cmdSetViewport(m_primaryCmdBuffer, 0, 1, &bogusViewport);
+		m_vk.cmdSetScissor(m_primaryCmdBuffer, 0, 1, &bogusScissors);
+		break;
+	}
+
+	m_vk.cmdBeginRenderPass(m_primaryCmdBuffer, &renderPassBeginInfo,
+		VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS);
+	VkCommandBuffer secondaryCmdBuffers[2] = {m_setStateCmdBuffer,
+											  m_subpassCmdBuffer};
+	m_vk.cmdExecuteCommands(m_primaryCmdBuffer, 2, secondaryCmdBuffers);
+	m_vk.cmdEndRenderPass(m_primaryCmdBuffer);
+
+	// Barrier, then copy rendered image to download buffer.
+	VkImageMemoryBarrier imageBarrier {
+		VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER,
+		NULL,
+		VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,
+		VK_ACCESS_TRANSFER_READ_BIT,
+		VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
+		VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,
+		0, 0,
+		m_colorImage.get(),
+		{ VK_IMAGE_ASPECT_COLOR_BIT, 0, 1, 0, 1 }};
+	m_vk.cmdPipelineBarrier(
+		m_primaryCmdBuffer,
+		VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT,
+		VK_PIPELINE_STAGE_TRANSFER_BIT,
+		0, 0, NULL, 0, NULL, 1, &imageBarrier );
+	VkBufferImageCopy bufferImageCopy {
+		0, 0, 0,
+		{ VK_IMAGE_ASPECT_COLOR_BIT, 0, 0, 1 },
+		{ 0, 0, 0 },
+		{ kWidth, kHeight, 1 } };
+	m_vk.cmdCopyImageToBuffer(
+		m_primaryCmdBuffer,
+		m_colorImage.get(),
+		VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,
+		m_downloadBuffer.get(),
+		1, &bufferImageCopy);
+
+	// Barrier, make buffer visible to host.
+	VkBufferMemoryBarrier bufferBarrier {
+		VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER,
+		NULL,
+		VK_ACCESS_TRANSFER_WRITE_BIT,
+		VK_ACCESS_HOST_READ_BIT,
+		0, 0,
+		m_downloadBuffer.get(),
+		0, VK_WHOLE_SIZE };
+	m_vk.cmdPipelineBarrier(
+		m_primaryCmdBuffer,
+		VK_PIPELINE_STAGE_TRANSFER_BIT,
+		VK_PIPELINE_STAGE_HOST_BIT,
+		0, 0, NULL, 1, &bufferBarrier, 0, NULL);
+
+	// End and submit primary command buffer.
+	VK_CHECK(m_vk.endCommandBuffer(m_primaryCmdBuffer));
+	VkSubmitInfo submitInfo {
+		VK_STRUCTURE_TYPE_SUBMIT_INFO,
+		NULL,
+		0, NULL, NULL,
+		1, &m_primaryCmdBuffer,
+		0, NULL };
+	m_vk.queueSubmit(m_context.getUniversalQueue(), 1, &submitInfo, 0);
+}
+
+
+void InheritanceTestInstance::rasterizeExpectedResults(const TestGeometry& geometry, Texel (&output)[kHeight][kWidth])
+{
+	// Clear color and depth buffers.
+	Texel clearColorTexel{u8_from_unorm(geometry.clearColor.z()),
+						  u8_from_unorm(geometry.clearColor.y()),
+						  u8_from_unorm(geometry.clearColor.x()), 0u};
+	for (size_t y = 0; y < kHeight; ++y)
+	{
+		for (size_t x = 0; x < kWidth; ++x)
+		{
+			m_cpuDepthBuffer[y][x] = geometry.clearDepth;
+			output[y][x]           = clearColorTexel;
+		}
+	}
+
+	// Rasterize each rectangle. Pixels have half-integer centers.
+	for (size_t i = 0; i < geometry.rectangles.size(); ++i) {
+		Rectangle r = geometry.rectangles[i];
+
+		// Select correct viewport and scissor.
+		VkViewport viewport = geometry.viewports.at(r.viewportIndex);
+		VkRect2D   scissor  = geometry.scissors.at(r.viewportIndex);
+
+		// Transform xyz and width/height with selected viewport.
+		float ox = viewport.x + viewport.width * 0.5f;
+		float oy = viewport.y + viewport.height * 0.5f;
+		float oz = viewport.minDepth;
+
+		float px = viewport.width;
+		float py = viewport.height;
+		float pz = viewport.maxDepth - viewport.minDepth;
+
+		float xLow  = clamp(r.xyz.x(), -1.0f, 1.0f);
+		float xHigh = clamp(r.xyz.x() + r.widthHeight.x(), -1.0f, 1.0f);
+		float yLow  = clamp(r.xyz.y(), -1.0f, 1.0f);
+		float yHigh = clamp(r.xyz.y() + r.widthHeight.y(), -1.0f, 1.0f);
+
+		float xf[2];
+		xf[0]    = px * 0.5f * xLow  + ox;
+		xf[1]    = px * 0.5f * xHigh + ox;
+		float yf[2];
+		yf[0]    = py * 0.5f * yLow  + oy;
+		yf[1]    = py * 0.5f * yHigh + oy;
+		float zf = pz * r.xyz.z() + oz;
+
+		deInt32 xBegin = deInt32(floorf(xf[0] + 0.5f));
+		deInt32 xEnd   = deInt32(floorf(xf[1] + 0.5f));
+		deInt32 yBegin = deInt32(floorf(yf[0] + 0.5f));
+		deInt32 yEnd   = deInt32(floorf(yf[1] + 0.5f));
+
+		// Scissor test, only correct when drawn rectangle has
+		// positive width/height.
+		deInt32 xsLow  = scissor.offset.x;
+		deInt32 xsHigh = xsLow + deInt32(scissor.extent.width);
+		xBegin         = clamp(xBegin, xsLow, xsHigh);
+		xEnd           = clamp(xEnd,   xsLow, xsHigh);
+		deInt32 ysLow  = scissor.offset.y;
+		deInt32 ysHigh = ysLow + deInt32(scissor.extent.height);
+		yBegin         = clamp(yBegin, ysLow, ysHigh);
+		yEnd           = clamp(yEnd,   ysLow, ysHigh);
+
+		// Clamp to framebuffer size
+		xBegin = clamp(xBegin, 0, kWidth);
+		xEnd   = clamp(xEnd,   0, kWidth);
+		yBegin = clamp(yBegin, 0, kHeight);
+		yEnd   = clamp(yEnd,   0, kHeight);
+
+		// Rasterize.
+		Texel rectTexel = texelFrom_r8g8b8(r.r8g8b8);
+		for (deInt32 x = xBegin; x < xEnd; ++x)
+		{
+			for (deInt32 y = yBegin; y < yEnd; ++y)
+			{
+				// Depth test
+				float oldDepth = m_cpuDepthBuffer[y][x];
+				if (!(zf < oldDepth)) continue;
+
+				output[y][x]           = rectTexel;
+				m_cpuDepthBuffer[y][x] = zf;
+			}
+		}
+	}
+}
+
+
+std::vector<TestGeometry> makeGeometry()
+{
+	std::vector<TestGeometry> cases;
+
+	TestGeometry geometry;
+	geometry.clearColor = Vec3(1.0f, 1.0f, 1.0f);
+	geometry.clearDepth = 1.0f;
+
+	// Simple test case, three squares, the last one should go in
+	// between the first two in depth due to viewport 1 halving the
+	// actual depth value.
+	geometry.rectangles.push_back(Rectangle{
+		Vec3(-0.5f, -1.0f, 0.2f),
+		0xFF0000,
+		Vec2(0.5f, 1.0f),
+		0 });
+	geometry.rectangles.push_back(Rectangle{
+		Vec3(0.0f, 0.0f, 0.6f),
+		0x0000FF,
+		Vec2(0.5f, 1.0f),
+		0 });
+	geometry.rectangles.push_back(Rectangle{
+		Vec3(-0.25f, -0.5f, 0.8f), // becomes 0.4f depth
+		0x008000,
+		Vec2(0.5f, 1.0f),
+		1 });
+	geometry.viewports.push_back({0, 0, kWidth, kHeight, 0.0f, 1.0f});
+	geometry.viewports.push_back({0, 0, kWidth, kHeight, 0.0f, 0.5f});
+	geometry.scissors.push_back({{0, 0}, {kWidth, kHeight}});
+	geometry.scissors.push_back({{0, 0}, {kWidth, kHeight}});
+
+	cases.push_back(geometry);
+
+	// Apply scissor rectangle to red and blue squares.
+	geometry.scissors[0].extent.width = kWidth / 2 + 1;
+	cases.push_back(geometry);
+
+	// Squash down and offset green rectangle's viewport.
+	geometry.viewports[1].y      = kHeight * 0.25f;
+	geometry.viewports[1].height = kHeight * 0.75f;
+	cases.push_back(geometry);
+
+	// Add another viewport and scissor.
+	geometry.viewports.push_back(
+		{kWidth / 2 - 4, 0, kWidth / 2, kHeight - 8, 0.5f, 1.0f});
+	geometry.scissors.push_back(
+		{{kWidth / 2 - 2, 10}, {kWidth / 2, kHeight}});
+	geometry.rectangles.push_back(Rectangle{
+		Vec3(-1.0f, -1.0f, 0.5f), // Becomes 0.75f depth
+		0x000000,
+		Vec2(1.75f, 1.75f),
+		2 });
+	cases.push_back(geometry);
+
+	// Add a few more rectangles.
+	geometry.rectangles.push_back(Rectangle{
+		Vec3(-0.25f, -0.25f, 0.1f),
+		0xFF00FF,
+		Vec2(0.375f, 0.375f),
+		0 });
+	geometry.rectangles.push_back(Rectangle{
+		Vec3(-1.0f, -1.0f, 0.8f), // Becomes 0.9f depth
+		0x00FFFF,
+		Vec2(2.0f, 2.0f),
+		2 });
+	geometry.rectangles.push_back(Rectangle{
+		Vec3(-1.0f, -1.0f, 0.7f),
+		0x808000,
+		Vec2(2.0f, 2.0f),
+		0 });
+	cases.push_back(geometry);
+
+	// Change clear depth and color.
+	geometry.clearDepth = 0.85f;
+	geometry.clearColor = Vec3(1.0f, 1.0f, 0.0f);
+	cases.push_back(geometry);
+
+	// Alter viewport/scissor 2.
+	geometry.viewports[2] = VkViewport{ 0, 0, kWidth, kHeight, 0.51f, 0.53f };
+	geometry.scissors[2]  = VkRect2D{ { 20, 0 }, { kWidth, kHeight } };
+	cases.push_back(geometry);
+
+	// Change clear depth and color again.
+	geometry.clearDepth = 0.5f;
+	geometry.clearColor = Vec3(0.0f, 1.0f, 0.0f);
+	cases.push_back(geometry);
+
+	return cases;
+}
+
+
+tcu::TestStatus InheritanceTestInstance::iterate(void)
+{
+	std::vector<TestGeometry> testGeometries = makeGeometry();
+	deUint32 failBits = 0;
+	DE_ASSERT(testGeometries.size() < 32);
+
+	for (size_t i = 0; i != testGeometries.size(); ++i)
+	{
+		const TestGeometry& geometry = testGeometries[i];
+		TestResults results;
+
+		// Start drawing commands.
+		startRenderCmds(geometry);
+
+		// Work on CPU-side expected results while waiting for device.
+		rasterizeExpectedResults(geometry, results.expectedResult);
+
+		// Wait for commands to finish and copy back results.
+		m_vk.queueWaitIdle(m_context.getUniversalQueue());
+		memcpy(results.deviceResult,
+			   m_downloadBuffer.getAllocation().getHostPtr(),
+			   kWidth * kHeight * sizeof(Texel));
+
+		// Compare results. The test cases should be simple enough not to
+		// require fuzzy matching (power of 2 framebuffer, no nearby depth
+		// values, etc.)
+		bool passed = true;
+		for (size_t y = 0; y < kHeight; ++y)
+		{
+			for (size_t x = 0; x < kWidth; ++x)
+			{
+				passed &= results.expectedResult[y][x].red   == results.deviceResult[y][x].red;
+				passed &= results.expectedResult[y][x].green == results.deviceResult[y][x].green;
+				passed &= results.expectedResult[y][x].blue  == results.deviceResult[y][x].blue;
+			}
+		}
+		results.passed = passed; // Log results?
+
+		failBits |= deUint32(!passed) << i;
+	}
+
+	if (failBits != 0)
+	{
+		std::stringstream stream;
+		stream << "Failed for test geometry";
+		for (int i = 0; i < 32; ++i)
+		{
+			if (1 & (failBits >> i))
+			{
+				stream << ' ' << i;
+			}
+		}
+		return tcu::TestStatus::fail(stream.str());
+	}
+	else
+	{
+		return tcu::TestStatus::pass("pass");
+	}
+}
+
+
+class InheritanceTestCase : public TestCase
+{
+public:
+	InheritanceTestCase (tcu::TestContext& testCtx, InheritanceMode inheritanceMode,
+						 const char* name, const char* description)
+		: TestCase(testCtx, name, description), m_inheritanceMode(inheritanceMode)
+	{
+
+	}
+
+	TestInstance* createInstance (Context& context) const
+	{
+		return new InheritanceTestInstance(context, m_inheritanceMode);
+	}
+
+	virtual void checkSupport (Context& context) const
+	{
+		context.requireDeviceFunctionality("VK_NV_inherited_viewport_scissor");
+		if (m_inheritanceMode == kInheritFromPrimaryWithCount || m_inheritanceMode == kInheritFromSecondaryWithCount)
+		{
+			context.requireDeviceFunctionality("VK_EXT_extended_dynamic_state");
+		}
+	}
+
+	virtual void initPrograms (vk::SourceCollections& programCollection) const
+	{
+		programCollection.glslSources.add("vert") << glu::VertexSource  (pipelinestate::vert_glsl);
+		programCollection.glslSources.add("geom") << glu::GeometrySource(pipelinestate::geom_glsl);
+		programCollection.glslSources.add("frag") << glu::FragmentSource(pipelinestate::frag_glsl);
+	}
+private:
+	InheritanceMode        m_inheritanceMode;
+};
+
+} // anonymous namespace
+
+
+DynamicStateInheritanceTests::DynamicStateInheritanceTests (tcu::TestContext& testCtx)
+	: TestCaseGroup(testCtx, "inheritance", "Tests for inherited viewport/scissor state")
+{
+
+}
+
+void DynamicStateInheritanceTests::init (void)
+{
+	addChild(new InheritanceTestCase(m_testCtx, kInheritanceDisabled, "baseline",
+			 "Baseline, no viewport/scissor inheritance"));
+	addChild(new InheritanceTestCase(m_testCtx, kInheritFromPrimary, "primary",
+			 "Inherit viewport/scissor from calling primary command buffer"));
+	addChild(new InheritanceTestCase(m_testCtx, kInheritFromSecondary, "secondary",
+			 "Inherit viewport/scissor from another secondary command buffer"));
+	addChild(new InheritanceTestCase(m_testCtx, kSplitInheritance, "split",
+			 "Inherit some viewports/scissors from primary, some from secondary"));
+	addChild(new InheritanceTestCase(m_testCtx, kInheritFromPrimaryWithCount, "primary_with_count",
+			 "Inherit viewport/scissor with count from calling primary command buffer"));
+	addChild(new InheritanceTestCase(m_testCtx, kInheritFromSecondaryWithCount, "secondary_with_count",
+			 "Inherit viewport/scissor with count from another secondary command buffer"));
+}
+
+} // DynamicState
+} // vkt
diff --git a/external/vulkancts/modules/vulkan/dynamic_state/vktDynamicStateInheritanceTests.hpp b/external/vulkancts/modules/vulkan/dynamic_state/vktDynamicStateInheritanceTests.hpp
new file mode 100644
index 0000000..72c2a46
--- /dev/null
+++ b/external/vulkancts/modules/vulkan/dynamic_state/vktDynamicStateInheritanceTests.hpp
@@ -0,0 +1,47 @@
+#ifndef _VKTDYNAMICSTATEINHERITANCETESTS_HPP
+#define _VKTDYNAMICSTATEINHERITANCETESTS_HPP
+/*------------------------------------------------------------------------
+ * Vulkan Conformance Tests
+ * ------------------------
+ *
+ * Copyright (c) 2020 NVIDIA Corporation
+ *
+ * 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 VK_NV_inherited_viewport_scissor Tests
+ *//*--------------------------------------------------------------------*/
+
+#include "tcuDefs.hpp"
+#include "vktTestCase.hpp"
+
+namespace vkt
+{
+namespace DynamicState
+{
+
+class DynamicStateInheritanceTests : public tcu::TestCaseGroup
+{
+public:
+	DynamicStateInheritanceTests (tcu::TestContext& testCtx);
+	void init (void);
+private:
+	DynamicStateInheritanceTests (const DynamicStateInheritanceTests& other); // not implemented
+	DynamicStateInheritanceTests& operator= (const DynamicStateInheritanceTests& other); // not implemented
+};
+
+} // DynamicState
+} // vkt
+
+#endif // _VKTDYNAMICSTATEINHERITANCETESTS_HPP
diff --git a/external/vulkancts/modules/vulkan/dynamic_state/vktDynamicStateRSTests.cpp b/external/vulkancts/modules/vulkan/dynamic_state/vktDynamicStateRSTests.cpp
index d487798..a6dd053 100644
--- a/external/vulkancts/modules/vulkan/dynamic_state/vktDynamicStateRSTests.cpp
+++ b/external/vulkancts/modules/vulkan/dynamic_state/vktDynamicStateRSTests.cpp
@@ -306,7 +306,7 @@
 
 		transition2DImage(m_vk, *m_cmdBuffer, m_depthStencilImage->object(), vk::VK_IMAGE_ASPECT_DEPTH_BIT | vk::VK_IMAGE_ASPECT_STENCIL_BIT,
 						  vk::VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, vk::VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL,
-						  vk::VK_ACCESS_TRANSFER_WRITE_BIT, vk::VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT,
+						  vk::VK_ACCESS_TRANSFER_WRITE_BIT, vk::VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT | vk::VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT,
 						  vk::VK_PIPELINE_STAGE_TRANSFER_BIT, vk::VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT | vk::VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT);
 
 		vk::beginRenderPass(m_vk, *m_cmdBuffer, *m_renderPass, *m_framebuffer, vk::makeRect2D(0, 0, WIDTH, HEIGHT));
diff --git a/external/vulkancts/modules/vulkan/dynamic_state/vktDynamicStateTests.cpp b/external/vulkancts/modules/vulkan/dynamic_state/vktDynamicStateTests.cpp
index 16f501c..e7398cf 100644
--- a/external/vulkancts/modules/vulkan/dynamic_state/vktDynamicStateTests.cpp
+++ b/external/vulkancts/modules/vulkan/dynamic_state/vktDynamicStateTests.cpp
@@ -29,6 +29,8 @@
 #include "vktDynamicStateCBTests.hpp"
 #include "vktDynamicStateDSTests.hpp"
 #include "vktDynamicStateGeneralTests.hpp"
+#include "vktDynamicStateComputeTests.hpp"
+#include "vktDynamicStateInheritanceTests.hpp"
 #include "vktTestGroupUtil.hpp"
 
 namespace vkt
@@ -48,6 +50,8 @@
 	group->addChild(new DynamicStateCBTests(testCtx));
 	group->addChild(new DynamicStateDSTests(testCtx));
 	group->addChild(new DynamicStateGeneralTests(testCtx));
+	group->addChild(createDynamicStateComputeTests(testCtx));
+	group->addChild(new DynamicStateInheritanceTests(testCtx));
 }
 
 } // anonymous
diff --git a/external/vulkancts/modules/vulkan/fragment_shader_interlock/vktFragmentShaderInterlockBasic.cpp b/external/vulkancts/modules/vulkan/fragment_shader_interlock/vktFragmentShaderInterlockBasic.cpp
index 847d09d..814cf95 100644
--- a/external/vulkancts/modules/vulkan/fragment_shader_interlock/vktFragmentShaderInterlockBasic.cpp
+++ b/external/vulkancts/modules/vulkan/fragment_shader_interlock/vktFragmentShaderInterlockBasic.cpp
@@ -238,12 +238,8 @@
 
 		context.getInstanceInterface().getPhysicalDeviceFeatures2(context.getPhysicalDevice(), &features2);
 
-
-		if (!context.getFragmentShadingRateFeatures().pipelineFragmentShadingRate ||
-		    !context.getFragmentShadingRateProperties().fragmentShadingRateWithFragmentShaderInterlock)
-		{
-			TCU_THROW(NotSupportedError, "fragment shading rate not supported");
-		}
+		if (!shadingRateImageFeatures.shadingRateImage)
+			TCU_THROW(NotSupportedError, "Shading rate image not supported");
 	}
 }
 
@@ -393,7 +389,7 @@
 	const VkDevice			device					= getDevice(m_context, m_data.interlock);
 	Allocator&				allocator				= m_context.getDefaultAllocator();
 	VkFlags					allShaderStages			= VK_SHADER_STAGE_VERTEX_BIT | VK_SHADER_STAGE_FRAGMENT_BIT;
-	VkFlags					allPipelineStages		= VK_PIPELINE_STAGE_VERTEX_SHADER_BIT | VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT;
+	VkFlags					allPipelineStages		= VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT | VK_PIPELINE_STAGE_VERTEX_SHADER_BIT | VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT;
 
 	VkPhysicalDeviceProperties2 properties;
 	deMemset(&properties, 0, sizeof(properties));
@@ -778,7 +774,7 @@
 	vk.cmdFillBuffer(*cmdBuffer, **buffer, 0, bufferSize, 0);
 
 	memBarrier.srcAccessMask = VK_ACCESS_TRANSFER_WRITE_BIT;
-	memBarrier.dstAccessMask = VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_SHADER_WRITE_BIT;
+	memBarrier.dstAccessMask = VK_ACCESS_COLOR_ATTACHMENT_READ_BIT | VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_SHADER_WRITE_BIT;
 	vk.cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, allPipelineStages,
 		0, 1, &memBarrier, 0, DE_NULL, 0, DE_NULL);
 
diff --git a/external/vulkancts/modules/vulkan/fragment_shading_rate/CMakeLists.txt b/external/vulkancts/modules/vulkan/fragment_shading_rate/CMakeLists.txt
index 0cbd423..07a339d 100644
--- a/external/vulkancts/modules/vulkan/fragment_shading_rate/CMakeLists.txt
+++ b/external/vulkancts/modules/vulkan/fragment_shading_rate/CMakeLists.txt
@@ -5,6 +5,8 @@
 	vktFragmentShadingRateTests.hpp
 	vktFragmentShadingRateBasic.cpp
 	vktFragmentShadingRateBasic.hpp
+	vktFragmentShadingRatePixelConsistency.hpp
+	vktFragmentShadingRatePixelConsistency.cpp
 )
 
 set(DEQP_VK_FRAGMENT_SHADING_RATE_LIBS
diff --git a/external/vulkancts/modules/vulkan/fragment_shading_rate/vktFragmentShadingRateBasic.cpp b/external/vulkancts/modules/vulkan/fragment_shading_rate/vktFragmentShadingRateBasic.cpp
index 754bf3f..b464644 100644
--- a/external/vulkancts/modules/vulkan/fragment_shading_rate/vktFragmentShadingRateBasic.cpp
+++ b/external/vulkancts/modules/vulkan/fragment_shading_rate/vktFragmentShadingRateBasic.cpp
@@ -906,7 +906,8 @@
 	Move<VkImageView> dsImageView, dImageView, sImageView;
 	VkImageUsageFlags dsUsage = VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT |
 								VK_IMAGE_USAGE_SAMPLED_BIT |
-								VK_IMAGE_USAGE_TRANSFER_SRC_BIT;
+								VK_IMAGE_USAGE_TRANSFER_SRC_BIT |
+								VK_IMAGE_USAGE_TRANSFER_DST_BIT;
 	if (m_data.useDepthStencil)
 	{
 		const VkImageCreateInfo			imageCreateInfo			=
@@ -1910,6 +1911,15 @@
 			{
 				VkImageSubresourceRange range = makeImageSubresourceRange(VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT, 0u, 1u, 0u, VK_REMAINING_ARRAY_LAYERS);
 				VkClearValue clearColor = makeClearValueDepthStencil(0.0, 0);
+				VkImageMemoryBarrier dsBarrier = imageBarrier;
+				dsBarrier.image = **dsImage;
+				dsBarrier.newLayout = VK_IMAGE_LAYOUT_GENERAL;
+				dsBarrier.subresourceRange = range;
+				vk.cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT,
+										0u, // dependencyFlags
+										0u, nullptr,
+										0u, nullptr,
+										1u, &dsBarrier);
 				vk.cmdClearDepthStencilImage(*cmdBuffer, **dsImage, VK_IMAGE_LAYOUT_GENERAL, &clearColor.depthStencil, 1, &range);
 			}
 
diff --git a/external/vulkancts/modules/vulkan/fragment_shading_rate/vktFragmentShadingRatePixelConsistency.cpp b/external/vulkancts/modules/vulkan/fragment_shading_rate/vktFragmentShadingRatePixelConsistency.cpp
new file mode 100644
index 0000000..229cb5d
--- /dev/null
+++ b/external/vulkancts/modules/vulkan/fragment_shading_rate/vktFragmentShadingRatePixelConsistency.cpp
@@ -0,0 +1,1411 @@
+/*------------------------------------------------------------------------
+ * Vulkan Conformance Tests
+ * ------------------------
+ *
+ * Copyright (c) 2017-2020 The Khronos Group Inc.
+ * Copyright (c) 2020 AMD
+ *
+ * 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 Tests for VK_KHR_fragment_shading_rate
+ *//*--------------------------------------------------------------------*/
+
+#include "vktFragmentShadingRatePixelConsistency.hpp"
+
+#include "vkBufferWithMemory.hpp"
+#include "vkImageWithMemory.hpp"
+#include "vkQueryUtil.hpp"
+#include "vkBuilderUtil.hpp"
+#include "vkCmdUtil.hpp"
+#include "vkTypeUtil.hpp"
+#include "vkObjUtil.hpp"
+#include "vkImageUtil.hpp"
+#include "vkQueryUtil.hpp"
+#include "vkPlatform.hpp"
+
+#include "vktTestGroupUtil.hpp"
+#include "vktTestCase.hpp"
+#include "vktCustomInstancesDevices.hpp"
+
+#include "deDefs.h"
+#include "deMath.h"
+#include "deRandom.h"
+#include "deSharedPtr.hpp"
+#include "deString.h"
+
+#include "tcuTestCase.hpp"
+#include "tcuTestLog.hpp"
+#include "tcuCommandLine.hpp"
+
+#include <limits>
+#include <string>
+#include <sstream>
+
+namespace vkt
+{
+namespace FragmentShadingRate
+{
+namespace
+{
+using namespace vk;
+using namespace std;
+
+struct CaseDef
+{
+	VkExtent2D				shadingRate;
+	VkSampleCountFlagBits	samples;
+	VkExtent2D				framebufferExtent;
+};
+
+struct Vertex
+{
+	float x;
+	float y;
+};
+
+Vertex basicTriangles[6] =
+{
+	{-1.0f, -1.0f},
+	{ 1.0f, -1.0f},
+	{ 1.0f,  1.0f},
+
+	{-1.0f,  1.0f},
+	{ 1.0f, -1.0f},
+	{ 1.0f,  1.0f},
+};
+
+Move<VkDevice> createImageRobustnessDevice(Context& context)
+{
+	const InstanceInterface&	instance		= context.getInstanceInterface();
+	const vk::VkPhysicalDevice	physicalDevice	= context.getPhysicalDevice();
+	const float					queuePriority	= 1.0f;
+
+	// Create a universal queue
+	const VkDeviceQueueCreateInfo queueParams =
+	{
+		VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO,	// VkStructureType				sType;
+		DE_NULL,									// const void*					pNext;
+		0u,											// VkDeviceQueueCreateFlags		flags;
+		context.getUniversalQueueFamilyIndex(),		// deUint32						queueFamilyIndex;
+		1u,											// deUint32						queueCount;
+		&queuePriority								// const float*					pQueuePriorities;
+	};
+
+	// Add image robustness extension if supported
+	std::vector<const char*> deviceExtensions;
+
+	deviceExtensions.push_back("VK_KHR_fragment_shading_rate");
+
+	if (context.isDeviceFunctionalitySupported("VK_EXT_image_robustness"))
+	{
+		deviceExtensions.push_back("VK_EXT_image_robustness");
+	}
+
+	VkPhysicalDeviceFragmentShadingRateFeaturesKHR fsrFeatures =
+	{
+		VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_FEATURES_KHR,	// VkStructureType	sType;
+		DE_NULL,																// void*			pNext;
+		DE_FALSE,																// VkBool32			pipelineFragmentShadingRate;
+		DE_FALSE,																// VkBool32			primitiveFragmentShadingRate;
+		DE_FALSE,																// VkBool32			attachmentFragmentShadingRate;
+	};
+
+	VkPhysicalDeviceFeatures2 enabledFeatures;
+	enabledFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
+	enabledFeatures.pNext = &fsrFeatures;
+
+	instance.getPhysicalDeviceFeatures2(physicalDevice, &enabledFeatures);
+
+	const VkDeviceCreateInfo deviceParams =
+	{
+		VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO,						// VkStructureType					sType;
+		&enabledFeatures,											// const void*						pNext;
+		0u,															// VkDeviceCreateFlags				flags;
+		1u,															// deUint32							queueCreateInfoCount;
+		&queueParams,												// const VkDeviceQueueCreateInfo*	pQueueCreateInfos;
+		0u,															// deUint32							enabledLayerCount;
+		DE_NULL,													// const char* const*				ppEnabledLayerNames;
+		static_cast<deUint32>(deviceExtensions.size()),				// deUint32							enabledExtensionCount;
+		deviceExtensions.empty() ? DE_NULL : &deviceExtensions[0],	// const char* const*				ppEnabledExtensionNames;
+		DE_NULL,													// const VkPhysicalDeviceFeatures*	pEnabledFeatures;
+	};
+
+	return createCustomDevice(context.getTestContext().getCommandLine().isValidationEnabled(), context.getPlatformInterface(),
+							  context.getInstance(), context.getInstanceInterface(), context.getPhysicalDevice(), &deviceParams);
+}
+
+class FSRPixelConsistencyInstance : public TestInstance
+{
+public:
+						FSRPixelConsistencyInstance	(Context& context, const CaseDef& data);
+						~FSRPixelConsistencyInstance(void);
+	tcu::TestStatus		iterate						(void);
+
+private:
+	void				clampShadingRate();
+	tcu::TestStatus		verifyResult(tcu::ConstPixelBufferAccess& resultBuffer, const deUint32 index);
+
+	CaseDef											m_data;
+	vector<VkExtent2D>								m_shadingRateClamped;
+
+	deUint32										m_supportedFragmentShadingRateCount;
+	vector<VkPhysicalDeviceFragmentShadingRateKHR>	m_supportedFragmentShadingRates;
+};
+
+FSRPixelConsistencyInstance::FSRPixelConsistencyInstance(Context& context, const CaseDef& data)
+	: vkt::TestInstance		(context)
+	, m_data(data)
+	, m_supportedFragmentShadingRateCount(0)
+{
+	// Fetch information about supported fragment shading rates
+	context.getInstanceInterface().getPhysicalDeviceFragmentShadingRatesKHR(context.getPhysicalDevice(), &m_supportedFragmentShadingRateCount, DE_NULL);
+
+	m_supportedFragmentShadingRates.resize(m_supportedFragmentShadingRateCount);
+	for (deUint32 i = 0; i < m_supportedFragmentShadingRateCount; ++i)
+	{
+		m_supportedFragmentShadingRates[i].sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_KHR;
+		m_supportedFragmentShadingRates[i].pNext = nullptr;
+	}
+	context.getInstanceInterface().getPhysicalDeviceFragmentShadingRatesKHR(context.getPhysicalDevice(), &m_supportedFragmentShadingRateCount, &m_supportedFragmentShadingRates[0]);
+
+	clampShadingRate();
+}
+
+FSRPixelConsistencyInstance::~FSRPixelConsistencyInstance(void)
+{
+}
+
+class FSRPixelConsistencyTestCase : public TestCase
+{
+	public:
+								FSRPixelConsistencyTestCase		(tcu::TestContext& context, const char* name, const char* desc, const CaseDef data);
+								~FSRPixelConsistencyTestCase	(void);
+	virtual	void				initPrograms					(SourceCollections& programCollection) const;
+	virtual TestInstance*		createInstance					(Context& context) const;
+	virtual void				checkSupport					(Context& context) const;
+
+private:
+
+	CaseDef											m_data;
+};
+
+FSRPixelConsistencyTestCase::FSRPixelConsistencyTestCase(tcu::TestContext& context, const char* name, const char* desc, const CaseDef data)
+	: vkt::TestCase	(context, name, desc)
+	, m_data		(data)
+{
+}
+
+FSRPixelConsistencyTestCase::~FSRPixelConsistencyTestCase(void)
+{
+}
+
+void FSRPixelConsistencyTestCase::checkSupport(Context& context) const
+{
+	const VkImageUsageFlags cbUsage =	VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT |
+										VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT |
+										VK_IMAGE_USAGE_TRANSFER_SRC_BIT		|
+										VK_IMAGE_USAGE_TRANSFER_DST_BIT;
+
+	context.requireDeviceFunctionality("VK_KHR_fragment_shading_rate");
+
+	if (!context.getFragmentShadingRateFeatures().pipelineFragmentShadingRate)
+		TCU_THROW(NotSupportedError, "pipelineFragmentShadingRate not supported");
+
+	VkImageFormatProperties imageProperties;
+	VkResult result = context.getInstanceInterface().getPhysicalDeviceImageFormatProperties(context.getPhysicalDevice(), VK_FORMAT_R32G32_UINT, VK_IMAGE_TYPE_2D,
+																							VK_IMAGE_TILING_OPTIMAL, cbUsage , 0, &imageProperties);
+
+	if (result == VK_ERROR_FORMAT_NOT_SUPPORTED)
+		TCU_THROW(NotSupportedError, "VK_FORMAT_R32G32_UINT not supported");
+
+	if (!(imageProperties.sampleCounts & m_data.samples))
+		TCU_THROW(NotSupportedError, "Image sample count not supported");
+
+	if ((imageProperties.maxExtent.width < m_data.framebufferExtent.width) || (imageProperties.maxExtent.height < m_data.framebufferExtent.height))
+		TCU_THROW(NotSupportedError, "Image max extents are smaller than required");
+}
+
+void FSRPixelConsistencyTestCase::initPrograms (SourceCollections& programCollection) const
+{
+	std::stringstream vss;
+
+	vss <<
+		"#version 450 core\n"
+		"layout(location = 0) in vec2 position;\n"
+		"out gl_PerVertex\n"
+		"{\n"
+		"   vec4 gl_Position;\n"
+		"};\n"
+		"void main()\n"
+		"{\n"
+		"  gl_Position = vec4(position, 0, 1);\n"
+		"}\n";
+
+	programCollection.glslSources.add("vert") << glu::VertexSource(vss.str());
+
+	std::stringstream fssPass0;
+
+	fssPass0 <<
+		"#version 450 core\n"
+		"layout(push_constant) uniform PC {\n"
+		"	uvec2 shadingRate[2];\n"
+		"} pc;\n"
+		"layout(location = 0) out uvec2 col0;\n"
+		"void main()\n"
+		"{\n"
+		"  col0.x = (uint(gl_FragCoord.x) % pc.shadingRate[0].x) + ((uint(gl_FragCoord.y) % pc.shadingRate[0].y) * pc.shadingRate[0].x);\n"
+		"  col0.y = (uint(gl_FragCoord.x) % pc.shadingRate[1].x) + ((uint(gl_FragCoord.y) % pc.shadingRate[1].y) * pc.shadingRate[1].x);\n"
+		"}\n";
+
+	programCollection.glslSources.add("frag_pass0") << glu::FragmentSource(fssPass0.str());
+
+	std::stringstream fssPass1;
+
+	fssPass1 <<
+		"#version 450 core\n";
+
+	if (m_data.samples == VK_SAMPLE_COUNT_1_BIT)
+	{
+		fssPass1 <<
+			"layout(input_attachment_index=0, set=0, binding=0) uniform usubpassInput inputAttachment;\n";
+	}
+	else
+	{
+		fssPass1 <<
+			"layout(input_attachment_index=0, set=0, binding=0) uniform usubpassInputMS inputAttachment;\n";
+	}
+
+	fssPass1 <<
+		"layout(location = 0) out uvec2 col0;\n"
+		"void main()\n"
+		"{\n";
+
+	if (m_data.samples == VK_SAMPLE_COUNT_1_BIT)
+	{
+		fssPass1 <<
+			"  col0 = subpassLoad(inputAttachment).xy;\n";
+	}
+	else
+	{
+		fssPass1 <<
+			"  col0 = subpassLoad(inputAttachment, 0).xy;\n";
+	}
+
+	fssPass1 <<
+		"}\n";
+
+	programCollection.glslSources.add("frag_pass1") << glu::FragmentSource(fssPass1.str());
+}
+
+TestInstance* FSRPixelConsistencyTestCase::createInstance (Context& context) const
+{
+	return new FSRPixelConsistencyInstance(context, m_data);
+}
+
+bool compareShadingRate(VkExtent2D ext1, VkExtent2D ext2)
+{
+	deUint32 ratio1 = std::max(ext1.width, ext1.height) / std::min(ext1.width, ext1.height);
+	deUint32 ratio2 = std::max(ext2.width, ext2.height) / std::min(ext2.width, ext2.height);
+
+	return ratio1 < ratio2;
+}
+
+void FSRPixelConsistencyInstance::clampShadingRate()
+{
+	deUint32 desiredSize = m_data.shadingRate.width * m_data.shadingRate.height;
+
+	while (desiredSize > 0)
+	{
+		// Find modes that maximize the area
+		for (deUint32 i = 0; i < m_supportedFragmentShadingRateCount; ++i)
+		{
+			const VkPhysicalDeviceFragmentShadingRateKHR& supportedRate = m_supportedFragmentShadingRates[i];
+
+			if (supportedRate.sampleCounts & VK_SAMPLE_COUNT_1_BIT)
+			{
+				// We found exact match
+				if (supportedRate.fragmentSize.width  == m_data.shadingRate.width	&&
+					supportedRate.fragmentSize.height == m_data.shadingRate.height)
+				{
+					m_shadingRateClamped.push_back(supportedRate.fragmentSize);
+
+					return;
+				}
+				else
+				{
+					if (supportedRate.fragmentSize.width  <= m_data.shadingRate.width  &&
+						supportedRate.fragmentSize.height <= m_data.shadingRate.height &&
+						supportedRate.fragmentSize.width  *  supportedRate.fragmentSize.height == desiredSize)
+					{
+						m_shadingRateClamped.push_back(supportedRate.fragmentSize);
+					}
+				}
+			}
+		}
+		if (!m_shadingRateClamped.empty())
+		{
+			// Sort the modes so that the ones with the smallest aspect ratio are in front
+			std::sort(m_shadingRateClamped.begin(), m_shadingRateClamped.end(), compareShadingRate);
+
+			deUint32 desiredRatio = std::max(m_shadingRateClamped[0].width, m_shadingRateClamped[0].height) /
+									std::min(m_shadingRateClamped[0].width, m_shadingRateClamped[0].height);
+
+			// Leave only entries with the smallest aspect ratio
+			auto it = m_shadingRateClamped.begin();
+			while (it != m_shadingRateClamped.end())
+			{
+				deUint32 ratio = std::max(it->width, it->height) / std::min(it->width, it->height);
+
+				if (ratio < desiredRatio)
+				{
+					it = m_shadingRateClamped.erase(it, m_shadingRateClamped.end());
+				}
+				else
+				{
+					++it;
+				}
+			}
+
+			return;
+		}
+		else
+		{
+			desiredSize /= 2;
+		}
+	}
+	DE_ASSERT(0);
+
+	return;
+}
+
+tcu::TestStatus	FSRPixelConsistencyInstance::verifyResult(tcu::ConstPixelBufferAccess& resultBuffer, const deUint32 index)
+{
+	deUint32 pixelIndex			= std::numeric_limits<unsigned int>::max();
+	deUint32 pixelOutsideIndex	= std::numeric_limits<unsigned int>::max();
+
+	for (int y = 0; y < resultBuffer.getHeight(); y++)
+	{
+		for (int x = 0; x < resultBuffer.getWidth(); x++)
+		{
+			deUint32 pixel = resultBuffer.getPixelUint(x, y)[index];
+
+			// If pixel was not covered by any triangle, we skip it
+			if (pixel == std::numeric_limits<unsigned int>::max())
+			{
+				continue;
+			}
+
+			// We check if pixel is part of fragment area that is partially outside of framebuffer area
+			deBool outsideW = (x / m_shadingRateClamped[index].width  + 1) * m_shadingRateClamped[index].width  > static_cast<deUint32>(resultBuffer.getWidth());
+			deBool outsideH = (y / m_shadingRateClamped[index].height + 1) * m_shadingRateClamped[index].height > static_cast<deUint32>(resultBuffer.getHeight());
+
+			if (outsideW || outsideH)
+			{
+				// If image robustness is enabled such pixel can have either a value of 0 or one of the values from the area inside framebuffer
+				if (m_context.isDeviceFunctionalitySupported("VK_EXT_image_robustness"))
+				{
+					if (pixelOutsideIndex == std::numeric_limits<unsigned int>::max() || pixelOutsideIndex == 0)
+					{
+						pixelOutsideIndex = pixel;
+					}
+					// If value is non-zero we make sure that all 'corner' pixels have the same value
+					else if ((pixel != 0) && (pixelOutsideIndex != pixel))
+					{
+						return tcu::TestStatus(QP_TEST_RESULT_FAIL, qpGetTestResultName(QP_TEST_RESULT_FAIL));
+					}
+				}
+				// If image robustness is not enabled such pixel can have an undefined value, so we skip it
+				else
+				{
+					continue;
+				}
+			}
+			else
+			{
+				if (pixelIndex == std::numeric_limits<unsigned int>::max())
+				{
+					if (pixel >= m_shadingRateClamped[index].width * m_shadingRateClamped[index].height)
+					{
+						return tcu::TestStatus(QP_TEST_RESULT_FAIL, qpGetTestResultName(QP_TEST_RESULT_FAIL));
+					}
+
+					pixelIndex = pixel;
+				}
+				// If pixel is not part of 'corner' pixels we make sure that is has the same value as other non-'corner' pixels
+				else if (pixelIndex != pixel)
+				{
+					return tcu::TestStatus(QP_TEST_RESULT_FAIL, qpGetTestResultName(QP_TEST_RESULT_FAIL));
+				}
+			}
+		}
+	}
+
+	return tcu::TestStatus(QP_TEST_RESULT_PASS, qpGetTestResultName(QP_TEST_RESULT_PASS));
+}
+
+tcu::TestStatus FSRPixelConsistencyInstance::iterate (void)
+{
+	const VkPhysicalDeviceMemoryProperties memoryProperties = vk::getPhysicalDeviceMemoryProperties(m_context.getInstanceInterface(), m_context.getPhysicalDevice());
+
+	Move<VkDevice>				vkd			 = createImageRobustnessDevice(m_context);
+	const VkDevice				device		 = *vkd;
+	de::MovePtr<DeviceDriver>	deviceDriver = de::MovePtr<DeviceDriver>(new DeviceDriver(m_context.getPlatformInterface(), m_context.getInstance(), device));
+	const DeviceInterface&		vk			 = *deviceDriver.get();
+	const VkQueue				queue		 = getDeviceQueue(vk, device, m_context.getUniversalQueueFamilyIndex(), 0);
+	de::MovePtr<Allocator>		allocator	 = de::MovePtr<Allocator>(new SimpleAllocator(vk, device, memoryProperties));
+
+	// Create vertex buffer
+	const VkDeviceSize vertexBufferSize = sizeof(basicTriangles);
+
+	const VkFormat imageFormat = VK_FORMAT_R32G32_UINT;
+
+	de::MovePtr<BufferWithMemory> vertexBuffer;
+	vertexBuffer = de::MovePtr<BufferWithMemory>(new BufferWithMemory(
+		vk, device, *allocator, makeBufferCreateInfo(vertexBufferSize, VK_BUFFER_USAGE_VERTEX_BUFFER_BIT), MemoryRequirement::HostVisible));
+
+	float* vbuf = (float*)vertexBuffer->getAllocation().getHostPtr();
+
+	deMemcpy(vbuf, basicTriangles, vertexBufferSize);
+
+	flushAlloc(vk, device, vertexBuffer->getAllocation());
+
+	// Create color output buffer
+	const VkDeviceSize colorOutputBufferSize = m_data.framebufferExtent.width * m_data.framebufferExtent.height * tcu::getPixelSize(mapVkFormat(imageFormat));
+
+	de::MovePtr<BufferWithMemory> colorOutputBuffer;
+	colorOutputBuffer = de::MovePtr<BufferWithMemory>(new BufferWithMemory(
+		vk, device, *allocator, makeBufferCreateInfo(colorOutputBufferSize, VK_BUFFER_USAGE_TRANSFER_DST_BIT), MemoryRequirement::HostVisible));
+
+
+	// Create color attachment for subpass 0
+	de::MovePtr<ImageWithMemory> cbImagePass0;
+	Move<VkImageView>			 cbImagePass0View;
+	{
+		const VkImageUsageFlags cbUsage = VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT |
+										  VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT |
+										  VK_IMAGE_USAGE_TRANSFER_DST_BIT;
+
+		const VkImageCreateInfo			imageCreateInfo =
+		{
+			VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO,	// VkStructureType			sType;
+			DE_NULL,								// const void*				pNext;
+			(VkImageCreateFlags)0u,					// VkImageCreateFlags		flags;
+			VK_IMAGE_TYPE_2D,						// VkImageType				imageType;
+			imageFormat,							// VkFormat					format;
+			{
+				m_data.framebufferExtent.width,		// deUint32	width;
+				m_data.framebufferExtent.height,	// deUint32	height;
+				1u									// deUint32	depth;
+			},										// VkExtent3D				extent;
+			1u,										// deUint32					mipLevels;
+			1u,										// deUint32					arrayLayers;
+			m_data.samples,							// VkSampleCountFlagBits	samples;
+			VK_IMAGE_TILING_OPTIMAL,				// VkImageTiling			tiling;
+			cbUsage,								// VkImageUsageFlags		usage;
+			VK_SHARING_MODE_EXCLUSIVE,				// VkSharingMode			sharingMode;
+			0u,										// deUint32					queueFamilyIndexCount;
+			DE_NULL,								// const deUint32*			pQueueFamilyIndices;
+			VK_IMAGE_LAYOUT_UNDEFINED				// VkImageLayout			initialLayout;
+		};
+		cbImagePass0 = de::MovePtr<ImageWithMemory>(new ImageWithMemory(
+			vk, device, *allocator, imageCreateInfo, MemoryRequirement::Any));
+
+		VkImageViewCreateInfo		imageViewCreateInfo =
+		{
+			VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO,	// VkStructureType			sType;
+			DE_NULL,									// const void*				pNext;
+			(VkImageViewCreateFlags)0u,					// VkImageViewCreateFlags	flags;
+			**cbImagePass0,								// VkImage					image;
+			VK_IMAGE_VIEW_TYPE_2D,						// VkImageViewType			viewType;
+			imageFormat,								// VkFormat					format;
+			{
+				VK_COMPONENT_SWIZZLE_R,					// VkComponentSwizzle	r;
+				VK_COMPONENT_SWIZZLE_G,					// VkComponentSwizzle	g;
+				VK_COMPONENT_SWIZZLE_B,					// VkComponentSwizzle	b;
+				VK_COMPONENT_SWIZZLE_A					// VkComponentSwizzle	a;
+			},											// VkComponentMapping		 components;
+			{
+				VK_IMAGE_ASPECT_COLOR_BIT,				// VkImageAspectFlags	aspectMask;
+				0u,										// deUint32				baseMipLevel;
+				1u,										// deUint32				levelCount;
+				0u,										// deUint32				baseArrayLayer;
+				1u										// deUint32				layerCount;
+			}											// VkImageSubresourceRange	subresourceRange;
+		};
+		cbImagePass0View = createImageView(vk, device, &imageViewCreateInfo, NULL);
+	}
+
+	// Create color attachment for subpass 1
+	de::MovePtr<ImageWithMemory> cbImagePass1;
+	Move<VkImageView>			 cbImagePass1View;
+	{
+		const VkImageUsageFlags cbUsage = VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT |
+										  VK_IMAGE_USAGE_TRANSFER_SRC_BIT	  |
+										  VK_IMAGE_USAGE_TRANSFER_DST_BIT;
+
+		const VkImageCreateInfo			imageCreateInfo =
+		{
+			VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO,	// VkStructureType			sType;
+			DE_NULL,								// const void*				pNext;
+			(VkImageCreateFlags)0u,					// VkImageCreateFlags		flags;
+			VK_IMAGE_TYPE_2D,						// VkImageType				imageType;
+			imageFormat,							// VkFormat					format;
+			{
+				m_data.framebufferExtent.width,		// deUint32	width;
+				m_data.framebufferExtent.height,	// deUint32	height;
+				1u									// deUint32	depth;
+			},										// VkExtent3D				extent;
+			1u,										// deUint32					mipLevels;
+			1u,										// deUint32					arrayLayers;
+			VK_SAMPLE_COUNT_1_BIT,					// VkSampleCountFlagBits	samples;
+			VK_IMAGE_TILING_OPTIMAL,				// VkImageTiling			tiling;
+			cbUsage,								// VkImageUsageFlags		usage;
+			VK_SHARING_MODE_EXCLUSIVE,				// VkSharingMode			sharingMode;
+			0u,										// deUint32					queueFamilyIndexCount;
+			DE_NULL,								// const deUint32*			pQueueFamilyIndices;
+			VK_IMAGE_LAYOUT_UNDEFINED				// VkImageLayout			initialLayout;
+		};
+		cbImagePass1 = de::MovePtr<ImageWithMemory>(new ImageWithMemory(
+			vk, device, *allocator, imageCreateInfo, MemoryRequirement::Any));
+
+		VkImageViewCreateInfo		imageViewCreateInfo =
+		{
+			VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO,	// VkStructureType			sType;
+			DE_NULL,									// const void*				pNext;
+			(VkImageViewCreateFlags)0u,					// VkImageViewCreateFlags	flags;
+			**cbImagePass1,								// VkImage					image;
+			VK_IMAGE_VIEW_TYPE_2D,						// VkImageViewType			viewType;
+			imageFormat,								// VkFormat					format;
+			{
+				VK_COMPONENT_SWIZZLE_R,					// VkComponentSwizzle	r;
+				VK_COMPONENT_SWIZZLE_G,					// VkComponentSwizzle	g;
+				VK_COMPONENT_SWIZZLE_B,					// VkComponentSwizzle	b;
+				VK_COMPONENT_SWIZZLE_A					// VkComponentSwizzle	a;
+			},											// VkComponentMapping		 components;
+			{
+				VK_IMAGE_ASPECT_COLOR_BIT,				// VkImageAspectFlags	aspectMask;
+				0u,										// deUint32				baseMipLevel;
+				1u,										// deUint32				levelCount;
+				0u,										// deUint32				baseArrayLayer;
+				1u										// deUint32				layerCount;
+			}											// VkImageSubresourceRange	subresourceRange;
+		};
+		cbImagePass1View = createImageView(vk, device, &imageViewCreateInfo, NULL);
+	}
+
+	// Create render pass
+	Move<VkRenderPass>	renderPass;
+	{
+		const vk::VkAttachmentReference colorAttachment0Reference =
+		{
+			0,															// attachment
+			vk::VK_IMAGE_LAYOUT_GENERAL,								// layout
+		};
+
+		const vk::VkAttachmentReference colorAttachment1Reference =
+		{
+			1,															// attachment
+			vk::VK_IMAGE_LAYOUT_GENERAL,								// layout
+		};
+
+		std::vector<VkAttachmentDescription> attachmentDescriptions;
+
+		attachmentDescriptions.push_back(
+			{
+				(VkAttachmentDescriptionFlags)0u,			// VkAttachmentDescriptionFlags		flags;
+				imageFormat,								// VkFormat							format;
+				m_data.samples,								// VkSampleCountFlagBits			samples;
+				VK_ATTACHMENT_LOAD_OP_LOAD,					// VkAttachmentLoadOp				loadOp;
+				VK_ATTACHMENT_STORE_OP_STORE,				// VkAttachmentStoreOp				storeOp;
+				VK_ATTACHMENT_LOAD_OP_DONT_CARE,			// VkAttachmentLoadOp				stencilLoadOp;
+				VK_ATTACHMENT_STORE_OP_DONT_CARE,			// VkAttachmentStoreOp				stencilStoreOp;
+				VK_IMAGE_LAYOUT_GENERAL,					// VkImageLayout					initialLayout;
+				VK_IMAGE_LAYOUT_GENERAL						// VkImageLayout					finalLayout;
+			}
+		);
+
+		attachmentDescriptions.push_back(
+			{
+				(VkAttachmentDescriptionFlags)0u,			// VkAttachmentDescriptionFlags		flags;
+				imageFormat,								// VkFormat							format;
+				VK_SAMPLE_COUNT_1_BIT,						// VkSampleCountFlagBits			samples;
+				VK_ATTACHMENT_LOAD_OP_LOAD,					// VkAttachmentLoadOp				loadOp;
+				VK_ATTACHMENT_STORE_OP_STORE,				// VkAttachmentStoreOp				storeOp;
+				VK_ATTACHMENT_LOAD_OP_DONT_CARE,			// VkAttachmentLoadOp				stencilLoadOp;
+				VK_ATTACHMENT_STORE_OP_DONT_CARE,			// VkAttachmentStoreOp				stencilStoreOp;
+				VK_IMAGE_LAYOUT_GENERAL,					// VkImageLayout					initialLayout;
+				VK_IMAGE_LAYOUT_GENERAL						// VkImageLayout					finalLayout;
+			}
+		);
+
+		const VkSubpassDescription subpassDescs[] =
+		{
+			{
+				(vk::VkSubpassDescriptionFlags)0,						// flags
+				vk::VK_PIPELINE_BIND_POINT_GRAPHICS,					// pipelineBindPoint
+				0u,														// inputCount
+				DE_NULL,												// pInputAttachments
+				1u,														// colorCount
+				&colorAttachment0Reference,								// pColorAttachments
+				DE_NULL,												// pResolveAttachments
+				DE_NULL,												// depthStencilAttachment
+				0u,														// preserveCount
+				DE_NULL,												// pPreserveAttachments
+			},
+			{
+				(vk::VkSubpassDescriptionFlags)0,						// flags
+				vk::VK_PIPELINE_BIND_POINT_GRAPHICS,					// pipelineBindPoint
+				1u,														// inputCount
+				&colorAttachment0Reference,								// pInputAttachments
+				1u,														// colorCount
+				&colorAttachment1Reference,								// pColorAttachments
+				DE_NULL,												// pResolveAttachments
+				DE_NULL,												// depthStencilAttachment
+				0u,														// preserveCount
+				DE_NULL,												// pPreserveAttachments
+			},
+		};
+
+		const VkSubpassDependency subpassDependency =
+		{
+			0u,												// srcSubpass;
+			1u,												// dstSubpass;
+			VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT,	// srcStageMask;
+			VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT,			// dstStageMask;
+			VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,			// srcAccessMask;
+			VK_ACCESS_INPUT_ATTACHMENT_READ_BIT,			// dstAccessMask;
+			0												// dependencyFlags;
+		};
+
+		const VkRenderPassCreateInfo renderPassParams =
+		{
+			VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO,				// sType
+			DE_NULL,												// pNext
+			(vk::VkRenderPassCreateFlags)0,
+			(deUint32)attachmentDescriptions.size(),				// attachmentCount
+			&attachmentDescriptions[0],								// pAttachments
+			sizeof(subpassDescs) / sizeof(subpassDescs[0]),			// subpassCount
+			subpassDescs,											// pSubpasses
+			1u,														// dependencyCount
+			&subpassDependency,										// pDependencies
+		};
+
+		renderPass = createRenderPass(vk, device, &renderPassParams);
+	}
+
+	// Create framebuffer
+	Move<VkFramebuffer> framebuffer;
+	{
+		std::vector<VkImageView> attachments;
+		attachments.push_back(*cbImagePass0View);
+		attachments.push_back(*cbImagePass1View);
+
+		const vk::VkFramebufferCreateInfo framebufferParams =
+		{
+			vk::VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO,	// sType
+			DE_NULL,										// pNext
+			(vk::VkFramebufferCreateFlags)(0),				// createFlags
+			*renderPass,									// renderPass
+			(deUint32)attachments.size(),					// attachmentCount
+			&attachments[0],								// pAttachments
+			m_data.framebufferExtent.width,					// width
+			m_data.framebufferExtent.height,				// height
+			1u,												// layers
+		};
+
+		framebuffer = createFramebuffer(vk, device, &framebufferParams);
+	}
+
+
+	// Create vertex attribute
+	const VkVertexInputBindingDescription vertexBinding =
+	{
+		0u,							// deUint32				binding;
+		sizeof(Vertex),				// deUint32				stride;
+		VK_VERTEX_INPUT_RATE_VERTEX	// VkVertexInputRate	inputRate;
+	};
+
+	const VkVertexInputAttributeDescription	vertexInputAttributeDescription =
+	{
+		0u,							// deUint32	location;
+		0u,							// deUint32	binding;
+		VK_FORMAT_R32G32_SFLOAT,	// VkFormat	format;
+		0u							// deUint32	offset;
+	};
+
+	const VkPipelineVertexInputStateCreateInfo	vertexInputStateCreateInfo =
+	{
+		VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO,	// VkStructureType							sType;
+		DE_NULL,													// const void*								pNext;
+		(VkPipelineVertexInputStateCreateFlags)0,					// VkPipelineVertexInputStateCreateFlags	flags;
+		1u,															// deUint32									vertexBindingDescriptionCount;
+		&vertexBinding,												// const VkVertexInputBindingDescription*	pVertexBindingDescriptions;
+		1u,															// deUint32									vertexAttributeDescriptionCount;
+		&vertexInputAttributeDescription							// const VkVertexInputAttributeDescription*	pVertexAttributeDescriptions;
+	};
+
+	const VkPipelineInputAssemblyStateCreateInfo inputAssemblyStateCreateInfo =
+	{
+		VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO,	// VkStructureType							sType;
+		DE_NULL,														// const void*								pNext;
+		(VkPipelineInputAssemblyStateCreateFlags)0,						// VkPipelineInputAssemblyStateCreateFlags	flags;
+		VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST,							// VkPrimitiveTopology						topology;
+		VK_FALSE														// VkBool32									primitiveRestartEnable;
+	};
+
+	// Create rasterization state
+	const VkPipelineRasterizationStateCreateInfo rasterizationStateCreateInfo =
+	{
+		VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO,		// VkStructureType							sType;
+		DE_NULL,														// const void*								pNext;
+		(VkPipelineRasterizationStateCreateFlags)0,						// VkPipelineRasterizationStateCreateFlags	flags;
+		VK_FALSE,														// VkBool32									depthClampEnable;
+		VK_FALSE,														// VkBool32									rasterizerDiscardEnable;
+		VK_POLYGON_MODE_FILL,											// VkPolygonMode							polygonMode;
+		VK_CULL_MODE_NONE,												// VkCullModeFlags							cullMode;
+		VK_FRONT_FACE_CLOCKWISE,										// VkFrontFace								frontFace;
+		VK_FALSE,														// VkBool32									depthBiasEnable;
+		0.0f,															// float									depthBiasConstantFactor;
+		0.0f,															// float									depthBiasClamp;
+		0.0f,															// float									depthBiasSlopeFactor;
+		1.0f															// float									lineWidth;
+	};
+
+	// Create scissor and viewport
+	VkViewport	viewport	= makeViewport(m_data.framebufferExtent.width, m_data.framebufferExtent.height);
+	VkRect2D	scissor		= makeRect2D(m_data.framebufferExtent.width, m_data.framebufferExtent.height);
+
+	const VkPipelineViewportStateCreateInfo	viewportStateCreateInfo =
+	{
+		VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO,		// VkStructureType							sType
+		DE_NULL,													// const void*								pNext
+		(VkPipelineViewportStateCreateFlags)0,						// VkPipelineViewportStateCreateFlags		flags
+		1u,															// deUint32									viewportCount
+		&viewport,													// const VkViewport*						pViewports
+		1u,															// deUint32									scissorCount
+		&scissor													// const VkRect2D*							pScissors
+	};
+
+	const VkPipelineDynamicStateCreateInfo dynamicStateCreateInfo =
+	{
+		VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO,		// VkStructureType					  sType;
+		DE_NULL,													// const void*						  pNext;
+		(VkPipelineDynamicStateCreateFlags)0,						// VkPipelineDynamicStateCreateFlags	flags;
+		0u,															// uint32_t							 dynamicStateCount;
+		DE_NULL,													// const VkDynamicState*				pDynamicStates;
+	};
+
+	const VkPipelineColorBlendAttachmentState colorBlendAttachmentState[] =
+	{
+		{
+			VK_FALSE,				// VkBool32					blendEnable;
+			VK_BLEND_FACTOR_ZERO,	// VkBlendFactor			srcColorBlendFactor;
+			VK_BLEND_FACTOR_ZERO,	// VkBlendFactor			dstColorBlendFactor;
+			VK_BLEND_OP_ADD,		// VkBlendOp				colorBlendOp;
+			VK_BLEND_FACTOR_ZERO,	// VkBlendFactor			srcAlphaBlendFactor;
+			VK_BLEND_FACTOR_ZERO,	// VkBlendFactor			dstAlphaBlendFactor;
+			VK_BLEND_OP_ADD,		// VkBlendOp				alphaBlendOp;
+			0xf						// VkColorComponentFlags	colorWriteMask;
+		}
+	};
+
+	const VkPipelineColorBlendStateCreateInfo		colorBlendStateCreateInfo =
+	{
+		VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO,					// VkStructureType								sType;
+		DE_NULL,																	// const void*									pNext;
+		0u,																			// VkPipelineColorBlendStateCreateFlags			flags;
+		VK_FALSE,																	// VkBool32										logicOpEnable;
+		VK_LOGIC_OP_COPY,															// VkLogicOp									logicOp;
+		sizeof(colorBlendAttachmentState) / sizeof(colorBlendAttachmentState[0]),	// deUint32										attachmentCount;
+		colorBlendAttachmentState,													// const VkPipelineColorBlendAttachmentState*	pAttachments;
+		{ 1.0f, 1.0f, 1.0f, 1.0f }													// float										blendConstants[4];
+	};
+
+	VkPipelineDepthStencilStateCreateInfo	depthStencilStateParams =
+	{
+		VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO,	// VkStructureType							sType;
+		DE_NULL,													// const void*								pNext;
+		0u,															// VkPipelineDepthStencilStateCreateFlags	flags;
+		VK_FALSE,													// VkBool32									depthTestEnable;
+		VK_FALSE,													// VkBool32									depthWriteEnable;
+		VK_COMPARE_OP_ALWAYS,										// VkCompareOp								depthCompareOp;
+		VK_FALSE,													// VkBool32									depthBoundsTestEnable;
+		VK_FALSE,													// VkBool32									stencilTestEnable;
+		// VkStencilOpState	front;
+		{
+			VK_STENCIL_OP_REPLACE,	// VkStencilOp	failOp;
+			VK_STENCIL_OP_REPLACE,	// VkStencilOp	passOp;
+			VK_STENCIL_OP_REPLACE,	// VkStencilOp	depthFailOp;
+			VK_COMPARE_OP_ALWAYS,	// VkCompareOp	compareOp;
+			0u,						// deUint32		compareMask;
+			0xFFu,					// deUint32		writeMask;
+			0xFFu,					// deUint32		reference;
+		},
+		// VkStencilOpState	back;
+		{
+			VK_STENCIL_OP_REPLACE,	// VkStencilOp	failOp;
+			VK_STENCIL_OP_REPLACE,	// VkStencilOp	passOp;
+			VK_STENCIL_OP_REPLACE,	// VkStencilOp	depthFailOp;
+			VK_COMPARE_OP_ALWAYS,	// VkCompareOp	compareOp;
+			0u,						// deUint32		compareMask;
+			0xFFu,					// deUint32		writeMask;
+			0xFFu,					// deUint32		reference;
+		},
+		0.0f,						// float			minDepthBounds;
+		0.0f,						// float			maxDepthBounds;
+	};
+
+	// Create pipeline for pass 0
+	Move<VkPipeline> pipelinePass0;
+	Move<VkPipelineLayout> pipelineLayoutPass0;
+	{
+		const VkPushConstantRange		pushConstantRange =
+		{
+			VK_SHADER_STAGE_FRAGMENT_BIT,								// VkShaderStageFlags					stageFlags;
+			0u,															// deUint32								offset;
+			2 * sizeof(VkExtent2D)										// deUint32								size;
+		};
+
+		const VkPipelineLayoutCreateInfo pipelineLayoutCreateInfo =
+		{
+			VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO,				// sType
+			DE_NULL,													// pNext
+			(VkPipelineLayoutCreateFlags)0,
+			0u,															// setLayoutCount
+			DE_NULL,													// pSetLayouts
+			1u,															// pushConstantRangeCount
+			&pushConstantRange,											// pPushConstantRanges
+		};
+
+		pipelineLayoutPass0 = createPipelineLayout(vk, device, &pipelineLayoutCreateInfo, NULL);
+
+		const VkPipelineMultisampleStateCreateInfo	multisampleStateCreateInfo =
+		{
+			VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO,	// VkStructureType							sType
+			DE_NULL,													// const void*					pNext
+			0u,															// VkPipelineMultisampleStateCreateFlags	flags
+			(VkSampleCountFlagBits)m_data.samples,						// VkSampleCountFlagBits					rasterizationSamples
+			VK_FALSE,													// VkBool32									sampleShadingEnable
+			1.0f,														// float									minSampleShading
+			DE_NULL,													// const VkSampleMask*						pSampleMask
+			VK_FALSE,													// VkBool32									alphaToCoverageEnable
+			VK_FALSE													// VkBool32									alphaToOneEnable
+		};
+
+		Move<VkShaderModule> vertShader = createShaderModule(vk, device, m_context.getBinaryCollection().get("vert"), 0);
+		Move<VkShaderModule> fragShader = createShaderModule(vk, device, m_context.getBinaryCollection().get("frag_pass0"), 0);
+
+		const VkPipelineShaderStageCreateInfo	shaderCreateInfo[] =
+		{
+			{
+				VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO,
+				DE_NULL,
+				(VkPipelineShaderStageCreateFlags)0,
+				VK_SHADER_STAGE_VERTEX_BIT,									// stage
+				*vertShader,												// shader
+				"main",
+				DE_NULL,													// pSpecializationInfo
+			},
+			{
+				VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO,
+				DE_NULL,
+				(VkPipelineShaderStageCreateFlags)0,
+				VK_SHADER_STAGE_FRAGMENT_BIT,								// stage
+				*fragShader,												// shader
+				"main",
+				DE_NULL,													// pSpecializationInfo
+			}
+		};
+
+		const VkGraphicsPipelineCreateInfo	graphicsPipelineCreateInfo =
+		{
+			VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO,		// VkStructureType									sType;
+			DE_NULL,												// const void*										pNext;
+			(VkPipelineCreateFlags)0,								// VkPipelineCreateFlags							flags;
+			sizeof(shaderCreateInfo) / sizeof(shaderCreateInfo[0]),	// deUint32											stageCount;
+			&shaderCreateInfo[0],									// const VkPipelineShaderStageCreateInfo*			pStages;
+			&vertexInputStateCreateInfo,							// const VkPipelineVertexInputStateCreateInfo*		pVertexInputState;
+			&inputAssemblyStateCreateInfo,							// const VkPipelineInputAssemblyStateCreateInfo*	pInputAssemblyState;
+			DE_NULL,												// const VkPipelineTessellationStateCreateInfo*		pTessellationState;
+			&viewportStateCreateInfo,								// const VkPipelineViewportStateCreateInfo*			pViewportState;
+			&rasterizationStateCreateInfo,							// const VkPipelineRasterizationStateCreateInfo*	pRasterizationState;
+			&multisampleStateCreateInfo,							// const VkPipelineMultisampleStateCreateInfo*		pMultisampleState;
+			&depthStencilStateParams,								// const VkPipelineDepthStencilStateCreateInfo*		pDepthStencilState;
+			&colorBlendStateCreateInfo,								// const VkPipelineColorBlendStateCreateInfo*		pColorBlendState;
+			&dynamicStateCreateInfo,								// const VkPipelineDynamicStateCreateInfo*			pDynamicState;
+			pipelineLayoutPass0.get(),								// VkPipelineLayout									layout;
+			renderPass.get(),										// VkRenderPass										renderPass;
+			0u,														// deUint32											subpass;
+			DE_NULL,												// VkPipeline										basePipelineHandle;
+			0														// int												basePipelineIndex;
+		};
+
+		pipelinePass0 = createGraphicsPipeline(vk, device, DE_NULL, &graphicsPipelineCreateInfo);
+	}
+
+
+	// Create pipeline for pass 1
+	Move<VkPipeline>				pipelinePass1;
+	Move<VkPipelineLayout>			pipelineLayoutPass1;
+	Move<vk::VkDescriptorPool>		descriptorPool;
+	Move<vk::VkDescriptorSetLayout>	descriptorSetLayout;
+	Move<vk::VkDescriptorSet>		descriptorSet;
+	{
+		const VkDescriptorSetLayoutBinding bindings[] =
+		{
+			{
+				0u,										// binding
+				VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT,	// descriptorType
+				1u,										// descriptorCount
+				VK_SHADER_STAGE_FRAGMENT_BIT,			// stageFlags
+				DE_NULL,								// pImmutableSamplers
+			}
+		};
+
+		// Create a layout and allocate a descriptor set for it.
+		const VkDescriptorSetLayoutCreateInfo setLayoutCreateInfo =
+		{
+			vk::VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO,	// sType
+			DE_NULL,													// pNext
+			(VkDescriptorSetLayoutCreateFlags)(0),						// flags
+			sizeof(bindings) / sizeof(bindings[0]),						// bindingCount
+			&bindings[0]												// pBindings
+		};
+
+		descriptorSetLayout = vk::createDescriptorSetLayout(vk, device, &setLayoutCreateInfo);
+
+		vk::DescriptorPoolBuilder poolBuilder;
+
+		for (deInt32 i = 0; i < (deInt32)(sizeof(bindings) / sizeof(bindings[0])); ++i)
+		{
+			poolBuilder.addType(bindings[i].descriptorType, bindings[i].descriptorCount);
+		}
+
+		descriptorPool = poolBuilder.build(vk, device, VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT, 1u);
+		descriptorSet = makeDescriptorSet(vk, device, *descriptorPool, *descriptorSetLayout);
+
+		VkDescriptorImageInfo imageInfo = makeDescriptorImageInfo(DE_NULL, *cbImagePass0View, VK_IMAGE_LAYOUT_GENERAL);
+
+		VkWriteDescriptorSet writeDescriptorSet =
+		{
+			VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,							// sType
+			DE_NULL,														// pNext
+			*descriptorSet,													// dstSet
+			0u,																// dstBinding
+			0u,																// dstArrayElement
+			1u,																// descriptorCount
+			bindings[0].descriptorType,										// descriptorType
+			&imageInfo,														// pImageInfo
+			DE_NULL,														// pBufferInfo
+			DE_NULL,														// pTexelBufferView
+		};
+
+		vk.updateDescriptorSets(device, 1, &writeDescriptorSet, 0, NULL);
+
+		const VkPipelineLayoutCreateInfo pipelineLayoutCreateInfo =
+		{
+			VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO,				// sType
+			DE_NULL,													// pNext
+			(VkPipelineLayoutCreateFlags)0,
+			1u,															// setLayoutCount
+			&descriptorSetLayout.get(),									// pSetLayouts
+			0u,															// pushConstantRangeCount
+			DE_NULL,													// pPushConstantRanges
+		};
+
+		pipelineLayoutPass1 = createPipelineLayout(vk, device, &pipelineLayoutCreateInfo, NULL);
+
+		const VkPipelineMultisampleStateCreateInfo	multisampleStateCreateInfo =
+		{
+			VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO,	// VkStructureType							sType
+			DE_NULL,													// const void*								pNext
+			0u,															// VkPipelineMultisampleStateCreateFlags	flags
+			VK_SAMPLE_COUNT_1_BIT,										// VkSampleCountFlagBits					rasterizationSamples
+			VK_FALSE,													// VkBool32									sampleShadingEnable
+			1.0f,														// float									minSampleShading
+			DE_NULL,													// const VkSampleMask*						pSampleMask
+			VK_FALSE,													// VkBool32									alphaToCoverageEnable
+			VK_FALSE													// VkBool32									alphaToOneEnable
+		};
+
+		VkPipelineFragmentShadingRateStateCreateInfoKHR shadingRateStateCreateInfo =
+		{
+			VK_STRUCTURE_TYPE_PIPELINE_FRAGMENT_SHADING_RATE_STATE_CREATE_INFO_KHR,								// VkStructureType						sType;
+			DE_NULL,																							// const void*							pNext;
+			m_data.shadingRate,																					// VkExtent2D							fragmentSize;
+			{ VK_FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR, VK_FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR },	// VkFragmentShadingRateCombinerOpKHR	combinerOps[2];
+		};
+
+		Move<VkShaderModule> vertShader = createShaderModule(vk, device, m_context.getBinaryCollection().get("vert"), 0);
+		Move<VkShaderModule> fragShader = createShaderModule(vk, device, m_context.getBinaryCollection().get("frag_pass1"), 0);
+
+		const VkPipelineShaderStageCreateInfo	shaderCreateInfo[] =
+		{
+			{
+				VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO,
+				DE_NULL,
+				(VkPipelineShaderStageCreateFlags)0,
+				VK_SHADER_STAGE_VERTEX_BIT,									// stage
+				*vertShader,												// shader
+				"main",
+				DE_NULL,													// pSpecializationInfo
+			},
+			{
+				VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO,
+				DE_NULL,
+				(VkPipelineShaderStageCreateFlags)0,
+				VK_SHADER_STAGE_FRAGMENT_BIT,								// stage
+				*fragShader,												// shader
+				"main",
+				DE_NULL,													// pSpecializationInfo
+			}
+		};
+
+		const VkGraphicsPipelineCreateInfo	graphicsPipelineCreateInfo =
+		{
+			VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO,		// VkStructureType									sType;
+			&shadingRateStateCreateInfo,							// const void*										pNext;
+			(VkPipelineCreateFlags)0,								// VkPipelineCreateFlags							flags;
+			sizeof(shaderCreateInfo) / sizeof(shaderCreateInfo[0]),	// deUint32											stageCount;
+			&shaderCreateInfo[0],									// const VkPipelineShaderStageCreateInfo*			pStages;
+			&vertexInputStateCreateInfo,							// const VkPipelineVertexInputStateCreateInfo*		pVertexInputState;
+			&inputAssemblyStateCreateInfo,							// const VkPipelineInputAssemblyStateCreateInfo*	pInputAssemblyState;
+			DE_NULL,												// const VkPipelineTessellationStateCreateInfo*		pTessellationState;
+			&viewportStateCreateInfo,								// const VkPipelineViewportStateCreateInfo*			pViewportState;
+			&rasterizationStateCreateInfo,							// const VkPipelineRasterizationStateCreateInfo*	pRasterizationState;
+			&multisampleStateCreateInfo,							// const VkPipelineMultisampleStateCreateInfo*		pMultisampleState;
+			&depthStencilStateParams,								// const VkPipelineDepthStencilStateCreateInfo*		pDepthStencilState;
+			&colorBlendStateCreateInfo,								// const VkPipelineColorBlendStateCreateInfo*		pColorBlendState;
+			&dynamicStateCreateInfo,								// const VkPipelineDynamicStateCreateInfo*			pDynamicState;
+			pipelineLayoutPass1.get(),								// VkPipelineLayout									layout;
+			renderPass.get(),										// VkRenderPass										renderPass;
+			1u,														// deUint32											subpass;
+			DE_NULL,												// VkPipeline										basePipelineHandle;
+			0														// int												basePipelineIndex;
+		};
+
+		pipelinePass1 = createGraphicsPipeline(vk, device, DE_NULL, &graphicsPipelineCreateInfo);
+	}
+
+	// Create command buffer
+	Move<VkCommandPool>		cmdPool		= createCommandPool(vk, device, VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT, m_context.getUniversalQueueFamilyIndex());
+	Move<VkCommandBuffer>	cmdBuffer	= allocateCommandBuffer(vk, device, *cmdPool, VK_COMMAND_BUFFER_LEVEL_PRIMARY);
+
+	VkImageMemoryBarrier preImageBarriers[] =
+	{
+		{
+			VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER,				// VkStructureType		sType
+			DE_NULL,											// const void*			pNext
+			0u,													// VkAccessFlags		srcAccessMask
+			VK_ACCESS_TRANSFER_WRITE_BIT,						// VkAccessFlags		dstAccessMask
+			VK_IMAGE_LAYOUT_UNDEFINED,							// VkImageLayout		oldLayout
+			VK_IMAGE_LAYOUT_GENERAL,							// VkImageLayout		newLayout
+			VK_QUEUE_FAMILY_IGNORED,							// uint32_t				srcQueueFamilyIndex
+			VK_QUEUE_FAMILY_IGNORED,							// uint32_t				dstQueueFamilyIndex
+			**cbImagePass0,										// VkImage				image
+			{
+				VK_IMAGE_ASPECT_COLOR_BIT,				// VkImageAspectFlags	aspectMask
+				0u,										// uint32_t				baseMipLevel
+				VK_REMAINING_MIP_LEVELS,				// uint32_t				mipLevels,
+				0u,										// uint32_t				baseArray
+				VK_REMAINING_ARRAY_LAYERS,				// uint32_t				arraySize
+			}
+		},
+		{
+			VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER,				// VkStructureType		sType
+			DE_NULL,											// const void*			pNext
+			0u,													// VkAccessFlags		srcAccessMask
+			VK_ACCESS_TRANSFER_WRITE_BIT,						// VkAccessFlags		dstAccessMask
+			VK_IMAGE_LAYOUT_UNDEFINED,							// VkImageLayout		oldLayout
+			VK_IMAGE_LAYOUT_GENERAL,							// VkImageLayout		newLayout
+			VK_QUEUE_FAMILY_IGNORED,							// uint32_t				srcQueueFamilyIndex
+			VK_QUEUE_FAMILY_IGNORED,							// uint32_t				dstQueueFamilyIndex
+			**cbImagePass1,										// VkImage				image
+			{
+				VK_IMAGE_ASPECT_COLOR_BIT,				// VkImageAspectFlags	aspectMask
+				0u,										// uint32_t				baseMipLevel
+				VK_REMAINING_MIP_LEVELS,				// uint32_t				mipLevels,
+				0u,										// uint32_t				baseArray
+				VK_REMAINING_ARRAY_LAYERS,				// uint32_t				arraySize
+			}
+		}
+	};
+
+	// Record commands
+	beginCommandBuffer(vk, *cmdBuffer, 0u);
+
+	vk.cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT,
+							(VkDependencyFlags)0,
+							0, (const VkMemoryBarrier*)DE_NULL,
+							0, (const VkBufferMemoryBarrier*)DE_NULL,
+							sizeof(preImageBarriers) / sizeof(preImageBarriers[0]), preImageBarriers);
+
+	// Clear both images to UINT_MAX
+	VkImageSubresourceRange range		= makeImageSubresourceRange(VK_IMAGE_ASPECT_COLOR_BIT, 0u, 1u, 0u, 1u);
+	VkClearValue			clearColor	= makeClearValueColorU32(std::numeric_limits<unsigned int>::max(),0,0,0);
+
+	vk.cmdClearColorImage(*cmdBuffer, **cbImagePass0, VK_IMAGE_LAYOUT_GENERAL, &clearColor.color, 1, &range);
+	vk.cmdClearColorImage(*cmdBuffer, **cbImagePass1, VK_IMAGE_LAYOUT_GENERAL, &clearColor.color, 1, &range);
+
+	// Barrier between the clear and the rendering
+	VkImageMemoryBarrier clearColorBarriers[] =
+	{
+		{
+			VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER,				// VkStructureType		sType
+			DE_NULL,											// const void*			pNext
+			VK_ACCESS_TRANSFER_WRITE_BIT,						// VkAccessFlags		srcAccessMask
+			VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,				// VkAccessFlags		dstAccessMask
+			VK_IMAGE_LAYOUT_GENERAL,							// VkImageLayout		oldLayout
+			VK_IMAGE_LAYOUT_GENERAL,							// VkImageLayout		newLayout
+			VK_QUEUE_FAMILY_IGNORED,							// uint32_t				srcQueueFamilyIndex
+			VK_QUEUE_FAMILY_IGNORED,							// uint32_t				dstQueueFamilyIndex
+			**cbImagePass0,										// VkImage				image
+			{
+				VK_IMAGE_ASPECT_COLOR_BIT,				// VkImageAspectFlags	aspectMask
+				0u,										// uint32_t				baseMipLevel
+				VK_REMAINING_MIP_LEVELS,				// uint32_t				mipLevels,
+				0u,										// uint32_t				baseArray
+				VK_REMAINING_ARRAY_LAYERS,				// uint32_t				arraySize
+			}
+		},
+		{
+			VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER,				// VkStructureType		sType
+			DE_NULL,											// const void*			pNext
+			VK_ACCESS_TRANSFER_WRITE_BIT,						// VkAccessFlags		srcAccessMask
+			VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,				// VkAccessFlags		dstAccessMask
+			VK_IMAGE_LAYOUT_GENERAL,							// VkImageLayout		oldLayout
+			VK_IMAGE_LAYOUT_GENERAL,							// VkImageLayout		newLayout
+			VK_QUEUE_FAMILY_IGNORED,							// uint32_t				srcQueueFamilyIndex
+			VK_QUEUE_FAMILY_IGNORED,							// uint32_t				dstQueueFamilyIndex
+			**cbImagePass1,										// VkImage				image
+			{
+				VK_IMAGE_ASPECT_COLOR_BIT,				// VkImageAspectFlags	aspectMask
+				0u,										// uint32_t				baseMipLevel
+				VK_REMAINING_MIP_LEVELS,				// uint32_t				mipLevels,
+				0u,										// uint32_t				baseArray
+				VK_REMAINING_ARRAY_LAYERS,				// uint32_t				arraySize
+			}
+		}
+	};
+
+	vk.cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT,
+							(VkDependencyFlags)0,
+							0, (const VkMemoryBarrier*)DE_NULL,
+							0, (const VkBufferMemoryBarrier*)DE_NULL,
+							sizeof(clearColorBarriers) / sizeof(clearColorBarriers[0]), clearColorBarriers);
+
+	beginRenderPass(vk, *cmdBuffer, *renderPass, *framebuffer,
+					makeRect2D(m_data.framebufferExtent.width, m_data.framebufferExtent.height),
+					0, DE_NULL, VK_SUBPASS_CONTENTS_INLINE, DE_NULL);
+
+	// Put primitive shading rate in a push constant
+	if (m_shadingRateClamped.size() == 1)
+	{
+		vk.cmdPushConstants(*cmdBuffer, *pipelineLayoutPass0, VK_SHADER_STAGE_FRAGMENT_BIT,	0, sizeof(m_shadingRateClamped[0]), &m_shadingRateClamped[0]);
+		vk.cmdPushConstants(*cmdBuffer, *pipelineLayoutPass0, VK_SHADER_STAGE_FRAGMENT_BIT, sizeof(m_shadingRateClamped[0]), sizeof(m_shadingRateClamped[0]), &m_shadingRateClamped[0]);
+	}
+	else
+	{
+		vk.cmdPushConstants(*cmdBuffer, *pipelineLayoutPass0, VK_SHADER_STAGE_FRAGMENT_BIT, 0, static_cast<deUint32>(m_shadingRateClamped.size() * sizeof(m_shadingRateClamped[0])), &m_shadingRateClamped[0]);
+	}
+
+	// Bind vertex buffer
+	const VkDeviceSize vertexBufferOffset = 0;
+	VkBuffer vb = **vertexBuffer;
+	vk.cmdBindVertexBuffers(*cmdBuffer, 0, 1, &vb, &vertexBufferOffset);
+
+	// Bind pipeline
+	vk.cmdBindPipeline(*cmdBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, *pipelinePass0);
+
+	// Draw triangles
+	vk.cmdDraw(*cmdBuffer, sizeof(basicTriangles) / sizeof(Vertex), 1u, 0u, 0u);
+
+	// Start next subpass
+	vk.cmdNextSubpass(*cmdBuffer, VK_SUBPASS_CONTENTS_INLINE);
+
+	// Bind descriptors
+	vk.cmdBindDescriptorSets(*cmdBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, *pipelineLayoutPass1, 0, 1, &descriptorSet.get(), 0, DE_NULL);
+
+	// Bind vertex buffer
+	vk.cmdBindVertexBuffers(*cmdBuffer, 0, 1, &vb, &vertexBufferOffset);
+
+	// Bind pipeline
+	vk.cmdBindPipeline(*cmdBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, *pipelinePass1);
+
+	// Draw triangles
+	vk.cmdDraw(*cmdBuffer, sizeof(basicTriangles) / sizeof(Vertex), 1u, 0u, 0u);
+
+	endRenderPass(vk, *cmdBuffer);
+
+	VkImageMemoryBarrier postImageBarrier =
+	{
+		VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER,				// VkStructureType		sType
+		DE_NULL,											// const void*			pNext
+		VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,				// VkAccessFlags		srcAccessMask
+		VK_ACCESS_TRANSFER_READ_BIT,						// VkAccessFlags		dstAccessMask
+		VK_IMAGE_LAYOUT_GENERAL,							// VkImageLayout		oldLayout
+		VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,				// VkImageLayout		newLayout
+		VK_QUEUE_FAMILY_IGNORED,							// uint32_t				srcQueueFamilyIndex
+		VK_QUEUE_FAMILY_IGNORED,							// uint32_t				dstQueueFamilyIndex
+		**cbImagePass1,										// VkImage				image
+		{
+			VK_IMAGE_ASPECT_COLOR_BIT,				// VkImageAspectFlags	aspectMask
+			0u,										// uint32_t				baseMipLevel
+			VK_REMAINING_MIP_LEVELS,				// uint32_t				mipLevels,
+			0u,										// uint32_t				baseArray
+			VK_REMAINING_ARRAY_LAYERS,				// uint32_t				arraySize
+		}
+	};
+
+	vk.cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, (VkDependencyFlags)0, 0, (const VkMemoryBarrier*)DE_NULL, 0, (const VkBufferMemoryBarrier*)DE_NULL, 1, &postImageBarrier);
+
+	const VkBufferImageCopy	copyRegion =
+	{
+		0u,																		// VkDeviceSize				bufferOffset;
+		0u,																		// deUint32					bufferRowLength;
+		0u,																		// deUint32					bufferImageHeight;
+		{
+			VK_IMAGE_ASPECT_COLOR_BIT,											// VkImageAspectFlags		aspect;
+			0u,																	// deUint32					mipLevel;
+			0u,																	// deUint32					baseArrayLayer;
+			1u,																	// deUint32					layerCount;
+		},																		// VkImageSubresourceLayers	imageSubresource;
+		{ 0, 0, 0 },															// VkOffset3D				imageOffset;
+		{m_data.framebufferExtent.width, m_data.framebufferExtent.height, 1}	// VkExtent3D				imageExtent;
+	};
+
+
+	vk.cmdCopyImageToBuffer(*cmdBuffer, **cbImagePass1, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, **colorOutputBuffer, 1u, &copyRegion);
+
+	const VkBufferMemoryBarrier	bufferBarrier =
+	{
+		VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER,	// VkStructureType	sType;
+		DE_NULL,									// const void*		pNext;
+		VK_ACCESS_TRANSFER_WRITE_BIT,				// VkAccessFlags	srcAccessMask;
+		VK_ACCESS_HOST_READ_BIT,					// VkAccessFlags	dstAccessMask;
+		VK_QUEUE_FAMILY_IGNORED,					// deUint32			srcQueueFamilyIndex;
+		VK_QUEUE_FAMILY_IGNORED,					// deUint32			dstQueueFamilyIndex;
+		**colorOutputBuffer,						// VkBuffer			buffer;
+		0ull,										// VkDeviceSize		offset;
+		VK_WHOLE_SIZE								// VkDeviceSize		size;
+	};
+
+	vk.cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_HOST_BIT, (VkDependencyFlags)0, 0, (const VkMemoryBarrier*)DE_NULL, 1, &bufferBarrier, 0, (const VkImageMemoryBarrier*)DE_NULL);
+
+	endCommandBuffer(vk, *cmdBuffer);
+
+	submitCommandsAndWait(vk, device, queue, cmdBuffer.get());
+
+	// Read buffer data
+	invalidateAlloc(vk, device, colorOutputBuffer->getAllocation());
+
+	tcu::ConstPixelBufferAccess resultBuffer = tcu::ConstPixelBufferAccess(
+		tcu::TextureFormat(tcu::TextureFormat::RG, tcu::TextureFormat::UNSIGNED_INT32),
+		m_data.framebufferExtent.width, m_data.framebufferExtent.height, 1, (const void *)colorOutputBuffer->getAllocation().getHostPtr());
+
+	for (deUint32 i = 0; i < m_shadingRateClamped.size(); i++)
+	{
+		tcu::TestStatus result = verifyResult(resultBuffer, i);
+		if (result.getCode() == QP_TEST_RESULT_PASS)
+		{
+			return result;
+		}
+	}
+
+	return tcu::TestStatus(QP_TEST_RESULT_FAIL, qpGetTestResultName(QP_TEST_RESULT_FAIL));
+}
+
+}	// anonymous
+
+void createPixelConsistencyTests(tcu::TestContext& testCtx, tcu::TestCaseGroup* parentGroup)
+{
+	typedef struct
+	{
+		deUint32				count;
+		const char*				name;
+		const char*				description;
+	} TestGroupCase;
+
+	typedef struct
+	{
+		VkExtent2D				count;
+		const char*				name;
+		const char*				description;
+	} TestGroupCase2D;
+
+	TestGroupCase2D shadingRateCases[] =
+	{
+		{ {1, 1},	"rate_1x1",	"1x1 shading rate"	},
+		{ {1, 2},	"rate_1x2",	"1x2 shading rate"	},
+		{ {1, 4},	"rate_1x4",	"1x4 shading rate"	},
+		{ {2, 1},	"rate_2x1",	"2x1 shading rate"	},
+		{ {2, 2},	"rate_2x2",	"2x2 shading rate"	},
+		{ {2, 4},	"rate_2x4",	"2x4 shading rate"	},
+		{ {4, 1},	"rate_4x1",	"4x1 shading rate"	},
+		{ {4, 2},	"rate_4x2",	"4x2 shading rate"	},
+		{ {4, 4},	"rate_4x4",	"4x4 shading rate"	},
+	};
+
+	TestGroupCase sampCases[] =
+	{
+		{ VK_SAMPLE_COUNT_1_BIT,	"samples_1",	"1 raster sample"	},
+		{ VK_SAMPLE_COUNT_2_BIT,	"samples_2",	"2 raster samples"	},
+		{ VK_SAMPLE_COUNT_4_BIT,	"samples_4",	"4 raster samples"	},
+		{ VK_SAMPLE_COUNT_8_BIT,	"samples_8",	"8 raster samples"	},
+		{ VK_SAMPLE_COUNT_16_BIT,	"samples_16",	"16 raster samples"	},
+	};
+
+	TestGroupCase2D extentCases[] =
+	{
+		{ {1,   1},		"extent_1x1",		"framebuffer size 1x1"		},
+		{ {4,   4},		"extent_4x4",		"framebuffer size 4x4"		},
+		{ {33,  35},	"extent_33x35",		"framebuffer size 33x35"	},
+		{ {151, 431},	"extent_151x431",	"framebuffer size 151x431"	},
+		{ {256, 256},	"extent_256x256",	"framebuffer size 256x256"	},
+	};
+
+	de::MovePtr<tcu::TestCaseGroup> pixelGroup(new tcu::TestCaseGroup(testCtx, "pixel_consistency", "Pixel selection consistency"));
+
+	for (int rateNdx = 0; rateNdx < DE_LENGTH_OF_ARRAY(shadingRateCases); rateNdx++)
+	{
+		de::MovePtr<tcu::TestCaseGroup> rateGroup(new tcu::TestCaseGroup(testCtx, shadingRateCases[rateNdx].name, shadingRateCases[rateNdx].description));
+
+		for (int sampNdx = 0; sampNdx < DE_LENGTH_OF_ARRAY(sampCases); sampNdx++)
+		{
+			de::MovePtr<tcu::TestCaseGroup> sampleGroup(new tcu::TestCaseGroup(testCtx, sampCases[sampNdx].name, sampCases[sampNdx].description));
+
+			for (int extNdx = 0; extNdx < DE_LENGTH_OF_ARRAY(extentCases); extNdx++)
+			{
+				CaseDef c =
+				{
+					shadingRateCases[rateNdx].count,
+					(VkSampleCountFlagBits)sampCases[sampNdx].count,
+					extentCases[extNdx].count
+				};
+
+				sampleGroup->addChild(new FSRPixelConsistencyTestCase(testCtx, extentCases[extNdx].name, extentCases[extNdx].description, c));
+			}
+
+			rateGroup->addChild(sampleGroup.release());
+		}
+
+		pixelGroup->addChild(rateGroup.release());
+	}
+
+	parentGroup->addChild(pixelGroup.release());
+}
+
+}	// FragmentShadingRage
+}	// vkt
diff --git a/external/vulkancts/modules/vulkan/pipeline/vktPipelineVertexOnlyTests.hpp b/external/vulkancts/modules/vulkan/fragment_shading_rate/vktFragmentShadingRatePixelConsistency.hpp
similarity index 65%
copy from external/vulkancts/modules/vulkan/pipeline/vktPipelineVertexOnlyTests.hpp
copy to external/vulkancts/modules/vulkan/fragment_shading_rate/vktFragmentShadingRatePixelConsistency.hpp
index 1a85ebf..4d2ee8c 100644
--- a/external/vulkancts/modules/vulkan/pipeline/vktPipelineVertexOnlyTests.hpp
+++ b/external/vulkancts/modules/vulkan/fragment_shading_rate/vktFragmentShadingRatePixelConsistency.hpp
@@ -1,11 +1,11 @@
-#ifndef _VKTPIPELINEVERTEXONLYTESTS_HPP
-#define _VKTPIPELINEVERTEXONLYTESTS_HPP
-/*------------------------------------------------------------------------
+#ifndef _VKTFRAGMENTSHADINGRATEPIXELCONSISTENCY_HPP
+#define _VKTFRAGMENTSHADINGRATEPIXELCONSISTENCY_HPP
+/*-------------------------------------------------------------------------
  * Vulkan Conformance Tests
  * ------------------------
  *
- * Copyright (c) 2019 Google LLC
- * Copyright (c) 2019 The Khronos Group Inc.
+ * Copyright (c) 2017-2020 The Khronos Group Inc.
+ * Copyright (c) 2020 AMD
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -21,7 +21,7 @@
  *
  *//*!
  * \file
- * \brief Tests using only vertex shader in a graphics pipeline
+ * \brief Tests for VK_KHR_fragment_shading_rate.
  *//*--------------------------------------------------------------------*/
 
 #include "tcuDefs.hpp"
@@ -29,12 +29,12 @@
 
 namespace vkt
 {
-namespace pipeline
+namespace FragmentShadingRate
 {
 
-tcu::TestCaseGroup*	createVertexOnlyTests (tcu::TestContext& testCtx);
+void createPixelConsistencyTests(tcu::TestContext& testCtx, tcu::TestCaseGroup* group);
 
-} // pipeline
+} // FragmentShadingRate
 } // vkt
 
-#endif // _VKTPIPELINEVERTEXONLYTESTS_HPP
+#endif // _VKTFRAGMENTSHADINGRATEPIXELCONSISTENCY_HPP
diff --git a/external/vulkancts/modules/vulkan/fragment_shading_rate/vktFragmentShadingRateTests.cpp b/external/vulkancts/modules/vulkan/fragment_shading_rate/vktFragmentShadingRateTests.cpp
index 721f7a7..b1ea10f 100644
--- a/external/vulkancts/modules/vulkan/fragment_shading_rate/vktFragmentShadingRateTests.cpp
+++ b/external/vulkancts/modules/vulkan/fragment_shading_rate/vktFragmentShadingRateTests.cpp
@@ -24,6 +24,7 @@
 
 #include "vktFragmentShadingRateTests.hpp"
 #include "vktFragmentShadingRateBasic.hpp"
+#include "vktFragmentShadingRatePixelConsistency.hpp"
 #include "vktTestGroupUtil.hpp"
 
 namespace vkt
@@ -38,7 +39,8 @@
 {
 	tcu::TestContext&	testCtx		= group->getTestContext();
 
-	createBasicTests(testCtx, group);
+	createBasicTests		   (testCtx, group);
+	createPixelConsistencyTests(testCtx, group);
 }
 
 } // anonymous
diff --git a/external/vulkancts/modules/vulkan/geometry/vktGeometryInputGeometryShaderTests.cpp b/external/vulkancts/modules/vulkan/geometry/vktGeometryInputGeometryShaderTests.cpp
index 6ec246d..d748e70 100644
--- a/external/vulkancts/modules/vulkan/geometry/vktGeometryInputGeometryShaderTests.cpp
+++ b/external/vulkancts/modules/vulkan/geometry/vktGeometryInputGeometryShaderTests.cpp
@@ -143,6 +143,13 @@
 void GeometryExpanderRenderTest::checkSupport (Context& context) const
 {
 	context.requireDeviceCoreFeature(DEVICE_CORE_FEATURE_GEOMETRY_SHADER);
+
+	if (m_primitiveType == vk::VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN &&
+		context.isDeviceFunctionalitySupported("VK_KHR_portability_subset") &&
+		!context.getPortabilitySubsetFeatures().triangleFans)
+	{
+		TCU_THROW(NotSupportedError, "VK_KHR_portability_subset: Triangle fans are not supported by this implementation");
+	}
 }
 
 void GeometryExpanderRenderTest::initPrograms (SourceCollections& sourceCollections) const
diff --git a/external/vulkancts/modules/vulkan/geometry/vktGeometryLayeredRenderingTests.cpp b/external/vulkancts/modules/vulkan/geometry/vktGeometryLayeredRenderingTests.cpp
index 8d43032..47a5700 100644
--- a/external/vulkancts/modules/vulkan/geometry/vktGeometryLayeredRenderingTests.cpp
+++ b/external/vulkancts/modules/vulkan/geometry/vktGeometryLayeredRenderingTests.cpp
@@ -1457,7 +1457,7 @@
 		vk.cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, 0u, 0u, DE_NULL, 0u, DE_NULL, 1u, &colorBarrier);
 
 		if (dsUsed)
-			vk.cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT, 0u, 0u, DE_NULL, 0u, DE_NULL, 1u, &dsBarrier);
+			vk.cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT, 0u, 0u, DE_NULL, 0u, DE_NULL, 1u, &dsBarrier);
 	}
 
 	{
@@ -1809,8 +1809,16 @@
 	context.requireDeviceCoreFeature(DEVICE_CORE_FEATURE_GEOMETRY_SHADER);
 
 	if (params.image.viewType == VK_IMAGE_VIEW_TYPE_3D)
+	{
 		context.requireDeviceFunctionality("VK_KHR_maintenance1");
 
+		if (context.isDeviceFunctionalitySupported("VK_KHR_portability_subset") &&
+			!context.getPortabilitySubsetFeatures().imageView2DOn3DImage)
+		{
+			TCU_THROW(NotSupportedError, "VK_KHR_portability_subset: Implementation does not support 2D or 2D array image view to be created on a 3D VkImage");
+		}
+	}
+
 	if (params.testType == TEST_TYPE_SECONDARY_CMD_BUFFER)
 		context.requireDeviceCoreFeature(DEVICE_CORE_FEATURE_FRAGMENT_STORES_AND_ATOMICS);
 }
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/image/CMakeLists.txt b/external/vulkancts/modules/vulkan/image/CMakeLists.txt
index 1ac3333..0c1f3ca 100644
--- a/external/vulkancts/modules/vulkan/image/CMakeLists.txt
+++ b/external/vulkancts/modules/vulkan/image/CMakeLists.txt
@@ -35,6 +35,8 @@
 	vktImageMisalignedCubeTests.hpp
 	vktImageSubresourceLayoutTests.cpp
 	vktImageSubresourceLayoutTests.hpp
+	vktImageMismatchedWriteOpTests.cpp
+	vktImageMismatchedWriteOpTests.hpp
 	)
 
 set(DEQP_VK_IMAGE_LIBS
diff --git a/external/vulkancts/modules/vulkan/image/vktImageAtomicOperationTests.cpp b/external/vulkancts/modules/vulkan/image/vktImageAtomicOperationTests.cpp
index 12e23c2..6769fe9 100644
--- a/external/vulkancts/modules/vulkan/image/vktImageAtomicOperationTests.cpp
+++ b/external/vulkancts/modules/vulkan/image/vktImageAtomicOperationTests.cpp
@@ -26,6 +26,7 @@
 
 #include "deUniquePtr.hpp"
 #include "deStringUtil.hpp"
+#include "deSTLUtil.hpp"
 
 #include "vktTestCaseUtil.hpp"
 #include "vkPrograms.hpp"
@@ -96,6 +97,18 @@
 	ATOMIC_OPERATION_LAST
 };
 
+enum class ShaderReadType
+{
+	NORMAL = 0,
+	SPARSE,
+};
+
+enum class ImageBackingType
+{
+	NORMAL = 0,
+	SPARSE,
+};
+
 static string getCoordStr (const ImageType		imageType,
 						   const std::string&	x,
 						   const std::string&	y,
@@ -120,6 +133,38 @@
 	}
 }
 
+static string getComponentTypeStr (deUint32 componentWidth, bool intFormat, bool uintFormat, bool floatFormat)
+{
+	DE_ASSERT(intFormat || uintFormat || floatFormat);
+
+	const bool is64 = (componentWidth == 64);
+
+	if (intFormat)
+		return (is64 ? "int64_t" : "int");
+	if (uintFormat)
+		return (is64 ? "uint64_t" : "uint");
+	if (floatFormat)
+		return (is64 ? "double" : "float");
+
+	return "";
+}
+
+static string getVec4TypeStr (deUint32 componentWidth, bool intFormat, bool uintFormat, bool floatFormat)
+{
+	DE_ASSERT(intFormat || uintFormat || floatFormat);
+
+	const bool is64 = (componentWidth == 64);
+
+	if (intFormat)
+		return (is64 ? "i64vec4" : "ivec4");
+	if (uintFormat)
+		return (is64 ? "u64vec4" : "uvec4");
+	if (floatFormat)
+		return (is64 ? "f64vec4" : "vec4");
+
+	return "";
+}
+
 static string getAtomicFuncArgumentShaderStr (const AtomicOperation	op,
 											  const string&			x,
 											  const string&			y,
@@ -348,18 +393,34 @@
 	}
 }
 
+VkImageUsageFlags getUsageFlags (bool useTransfer)
+{
+	VkImageUsageFlags usageFlags = VK_IMAGE_USAGE_STORAGE_BIT;
+
+	if (useTransfer)
+		usageFlags |= (VK_IMAGE_USAGE_TRANSFER_SRC_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT);
+
+	return usageFlags;
+}
+
 void AddFillReadShader (SourceCollections&			sourceCollections,
 						const ImageType&			imageType,
 						const tcu::TextureFormat&	format,
-						const string&				type)
+						const string&				componentType,
+						const string&				vec4Type)
 {
 	const string	imageInCoord			= getCoordStr(imageType, "gx", "gy", "gz");
 	const string	shaderImageFormatStr	= getShaderImageFormatQualifier(format);
 	const string	shaderImageTypeStr		= getShaderImageType(format, imageType);
+	const auto		componentWidth			= getFormatComponentWidth(mapTextureFormat(format), 0u);
+	const string	extensions				= ((componentWidth == 64u)
+											?	"#extension GL_EXT_shader_explicit_arithmetic_types_int64 : require\n"
+												"#extension GL_EXT_shader_image_int64 : require\n"
+											:	"");
+
 
 	const string fillShader =	"#version 450\n"
-								"#extension GL_EXT_shader_explicit_arithmetic_types_int64 : require\n"
-								"#extension GL_EXT_shader_image_int64 : require\n"
+								+ extensions +
 								"precision highp " + shaderImageTypeStr + ";\n"
 								"\n"
 								"layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;\n"
@@ -367,7 +428,7 @@
 								"\n"
 								"layout(std430, binding = 1) buffer inputBuffer\n"
 								"{\n"
-								"	"+ type + " data[];\n"
+								"	"+ componentType + " data[];\n"
 								"} inBuffer;\n"
 								"\n"
 								"void main(void)\n"
@@ -376,12 +437,11 @@
 								"	int gy = int(gl_GlobalInvocationID.y);\n"
 								"	int gz = int(gl_GlobalInvocationID.z);\n"
 								"	uint index = gx + (gy * gl_NumWorkGroups.x) + (gz *gl_NumWorkGroups.x * gl_NumWorkGroups.y);\n"
-								"	imageStore(u_resultImage, " + imageInCoord + ", i64vec4(inBuffer.data[index]));\n"
+								"	imageStore(u_resultImage, " + imageInCoord + ", " + vec4Type + "(inBuffer.data[index]));\n"
 								"}\n";
 
 	const string readShader =	"#version 450\n"
-								"#extension GL_EXT_shader_explicit_arithmetic_types_int64 : require\n"
-								"#extension GL_EXT_shader_image_int64 : require\n"
+								+ extensions +
 								"precision highp " + shaderImageTypeStr + ";\n"
 								"\n"
 								"layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;\n"
@@ -389,7 +449,7 @@
 								"\n"
 								"layout(std430, binding = 1) buffer outputBuffer\n"
 								"{\n"
-								"	" + type + " data[];\n"
+								"	" + componentType + " data[];\n"
 								"} outBuffer;\n"
 								"\n"
 								"void main(void)\n"
@@ -406,12 +466,9 @@
 		(imageType != IMAGE_TYPE_1D_ARRAY) &&
 		(imageType != IMAGE_TYPE_BUFFER))
 	{
-		const string gvec4 = isUintFormat(mapTextureFormat(format)) ? "u64vec4" : "i64vec4";
-
 		const string readShaderResidency  = "#version 450\n"
 											"#extension GL_ARB_sparse_texture2 : require\n"
-											"#extension GL_EXT_shader_explicit_arithmetic_types_int64 : require\n"
-											"#extension GL_EXT_shader_image_int64 : require\n"
+											+ extensions +
 											"precision highp " + shaderImageTypeStr + ";\n"
 											"\n"
 											"layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;\n"
@@ -419,7 +476,7 @@
 											"\n"
 											"layout(std430, binding = 1) buffer outputBuffer\n"
 											"{\n"
-											"	" + type + " data[];\n"
+											"	" + componentType + " data[];\n"
 											"} outBuffer;\n"
 											"\n"
 											"void main(void)\n"
@@ -429,10 +486,10 @@
 											"	int gz = int(gl_GlobalInvocationID.z);\n"
 											"	uint index = gx + (gy * gl_NumWorkGroups.x) + (gz *gl_NumWorkGroups.x * gl_NumWorkGroups.y);\n"
 											"	outBuffer.data[index] = imageLoad(u_resultImage, " + imageInCoord + ").x;\n"
-											"	" + gvec4 + " sparseValue;\n"
+											"	" + vec4Type + " sparseValue;\n"
 											"	sparseImageLoadARB(u_resultImage, " + imageInCoord + ", sparseValue);\n"
 											"	if (outBuffer.data[index] != sparseValue.x)\n"
-											"		outBuffer.data[index] = " + gvec4 + "(1234).x;\n"
+											"		outBuffer.data[index] = " + vec4Type + "(1234).x;\n"
 											"}\n";
 
 		sourceCollections.glslSources.add("readShaderResidency") << glu::ComputeSource(readShaderResidency.c_str()) << vk::ShaderBuildOptions(sourceCollections.usedVulkanVersion, vk::SPIRV_VERSION_1_3, 0u);
@@ -442,15 +499,6 @@
 	sourceCollections.glslSources.add("readShader") << glu::ComputeSource(readShader.c_str()) << vk::ShaderBuildOptions(sourceCollections.usedVulkanVersion, vk::SPIRV_VERSION_1_3, 0u);
 }
 
-static bool isSupportedFeatureTransfer (const Context& context, const VkFormat& format)
-{
-	const VkFormatProperties	formatProperties	= getPhysicalDeviceFormatProperties(context.getInstanceInterface(),
-																						context.getPhysicalDevice(), format);
-
-	return ((formatProperties.optimalTilingFeatures & VK_FORMAT_FEATURE_TRANSFER_SRC_BIT) &&
-			(formatProperties.optimalTilingFeatures & VK_FORMAT_FEATURE_TRANSFER_DST_BIT));
-}
-
 //! Prepare the initial data for the image
 static void initDataForImage (const VkDevice			device,
 							  const DeviceInterface&	deviceInterface,
@@ -489,6 +537,93 @@
 	flushAlloc(deviceInterface, device, bufferAllocation);
 }
 
+void commonCheckSupport (Context& context, const tcu::TextureFormat& tcuFormat, ImageType imageType, AtomicOperation operation, bool useTransfer, ShaderReadType readType, ImageBackingType backingType)
+{
+	const VkFormat				format				= mapTextureFormat(tcuFormat);
+	const VkImageType			vkImgType			= mapImageType(imageType);
+	const VkFormatFeatureFlags	texelBufferSupport	= (VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT);
+	const VkFormatProperties	formatProperties	= getPhysicalDeviceFormatProperties(context.getInstanceInterface(),
+																						context.getPhysicalDevice(), format);
+
+	if ((imageType == IMAGE_TYPE_BUFFER) &&
+		((formatProperties.bufferFeatures & texelBufferSupport) != texelBufferSupport))
+		TCU_THROW(NotSupportedError, "Atomic storage texel buffers not supported");
+
+	if (imageType == IMAGE_TYPE_CUBE_ARRAY)
+		context.requireDeviceCoreFeature(DEVICE_CORE_FEATURE_IMAGE_CUBE_ARRAY);
+
+	if (backingType == ImageBackingType::SPARSE)
+	{
+		context.requireDeviceCoreFeature(DEVICE_CORE_FEATURE_SPARSE_BINDING);
+
+		switch (vkImgType)
+		{
+		case VK_IMAGE_TYPE_2D:	context.requireDeviceCoreFeature(DEVICE_CORE_FEATURE_SPARSE_RESIDENCY_IMAGE2D); break;
+		case VK_IMAGE_TYPE_3D:	context.requireDeviceCoreFeature(DEVICE_CORE_FEATURE_SPARSE_RESIDENCY_IMAGE3D); break;
+		default:				DE_ASSERT(false); break;
+		}
+
+		if (!checkSparseImageFormatSupport(context.getPhysicalDevice(), context.getInstanceInterface(), format, vkImgType, VK_SAMPLE_COUNT_1_BIT, getUsageFlags(useTransfer), VK_IMAGE_TILING_OPTIMAL))
+			TCU_THROW(NotSupportedError, "Format does not support sparse images");
+	}
+
+	if (isFloatFormat(format))
+	{
+		context.requireDeviceFunctionality("VK_EXT_shader_atomic_float");
+
+		const VkFormatFeatureFlags	requiredFeatures	= (VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT);
+		const auto&					atomicFloatFeatures	= context.getShaderAtomicFloatFeaturesEXT();
+
+		if (!atomicFloatFeatures.shaderImageFloat32Atomics)
+			TCU_THROW(NotSupportedError, "shaderImageFloat32Atomics not supported");
+
+		if ((operation == ATOMIC_OPERATION_ADD) && !atomicFloatFeatures.shaderImageFloat32AtomicAdd)
+			TCU_THROW(NotSupportedError, "shaderImageFloat32AtomicAdd not supported");
+
+		if ((formatProperties.optimalTilingFeatures & requiredFeatures) != requiredFeatures)
+			TCU_FAIL("Required format feature bits not supported");
+
+		if (backingType == ImageBackingType::SPARSE)
+		{
+			if (!atomicFloatFeatures.sparseImageFloat32Atomics)
+				TCU_THROW(NotSupportedError, "sparseImageFloat32Atomics not supported");
+
+			if (operation == ATOMIC_OPERATION_ADD && !atomicFloatFeatures.sparseImageFloat32AtomicAdd)
+				TCU_THROW(NotSupportedError, "sparseImageFloat32AtomicAdd not supported");
+		}
+
+	}
+	else if (format == VK_FORMAT_R64_UINT || format == VK_FORMAT_R64_SINT)
+	{
+		context.requireDeviceFunctionality("VK_EXT_shader_image_atomic_int64");
+
+		const VkFormatFeatureFlags	requiredFeatures	= (VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT);
+		const auto&					atomicInt64Features	= context.getShaderImageAtomicInt64FeaturesEXT();
+
+		if (!atomicInt64Features.shaderImageInt64Atomics)
+			TCU_THROW(NotSupportedError, "shaderImageInt64Atomics not supported");
+
+		if (backingType == ImageBackingType::SPARSE && !atomicInt64Features.sparseImageInt64Atomics)
+			TCU_THROW(NotSupportedError, "sparseImageInt64Atomics not supported");
+
+		if ((formatProperties.optimalTilingFeatures & requiredFeatures) != requiredFeatures)
+			TCU_FAIL("Mandatory format features not supported");
+	}
+
+	if (useTransfer)
+	{
+		const VkFormatFeatureFlags transferFeatures = (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
+		if ((formatProperties.optimalTilingFeatures & transferFeatures) != transferFeatures)
+			TCU_THROW(NotSupportedError, "Transfer features not supported for this format");
+	}
+
+	if (readType == ShaderReadType::SPARSE)
+	{
+		DE_ASSERT(imageType != IMAGE_TYPE_1D && imageType != IMAGE_TYPE_1D_ARRAY && imageType != IMAGE_TYPE_BUFFER);
+		context.requireDeviceCoreFeature(DEVICE_CORE_FEATURE_SHADER_RESOURCE_RESIDENCY);
+	}
+}
+
 class BinaryAtomicEndResultCase : public vkt::TestCase
 {
 public:
@@ -499,6 +634,9 @@
 															 const tcu::UVec3&			imageSize,
 															 const tcu::TextureFormat&	format,
 															 const AtomicOperation		operation,
+															 const bool					useTransfer,
+															 const ShaderReadType		shaderReadType,
+															 const ImageBackingType		backingType,
 															 const glu::GLSLVersion		glslVersion);
 
 	void						initPrograms				(SourceCollections&			sourceCollections) const;
@@ -510,6 +648,9 @@
 	const tcu::UVec3			m_imageSize;
 	const tcu::TextureFormat	m_format;
 	const AtomicOperation		m_operation;
+	const bool					m_useTransfer;
+	const ShaderReadType		m_readType;
+	const ImageBackingType		m_backingType;
 	const glu::GLSLVersion		m_glslVersion;
 };
 
@@ -520,80 +661,38 @@
 													  const tcu::UVec3&			imageSize,
 													  const tcu::TextureFormat&	format,
 													  const AtomicOperation		operation,
+													  const bool				useTransfer,
+													  const ShaderReadType		shaderReadType,
+													  const ImageBackingType	backingType,
 													  const glu::GLSLVersion	glslVersion)
 	: TestCase		(testCtx, name, description)
 	, m_imageType	(imageType)
 	, m_imageSize	(imageSize)
 	, m_format		(format)
 	, m_operation	(operation)
+	, m_useTransfer	(useTransfer)
+	, m_readType	(shaderReadType)
+	, m_backingType	(backingType)
 	, m_glslVersion	(glslVersion)
 {
 }
 
 void BinaryAtomicEndResultCase::checkSupport (Context& context) const
 {
-	const VkFormat				format				= mapTextureFormat(m_format);
-	const VkFormatFeatureFlags	texelBufferSupport	= VkFormatFeatureFlags(VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT |
-																		   VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT);
-	const VkFormatProperties	formatProperties	= getPhysicalDeviceFormatProperties(context.getInstanceInterface(),
-																						context.getPhysicalDevice(), format);
-
-	if ((m_imageType == IMAGE_TYPE_BUFFER) &&
-		((formatProperties.bufferFeatures & texelBufferSupport) != texelBufferSupport))
-		TCU_THROW(NotSupportedError, "STORAGE_TEXEL_BUFFER_ATOMIC is not supported");
-
-	if (m_imageType == IMAGE_TYPE_CUBE_ARRAY)
-		context.requireDeviceCoreFeature(DEVICE_CORE_FEATURE_IMAGE_CUBE_ARRAY);
-
-	if (isFloatFormat(mapTextureFormat(m_format)))
-	{
-		const VkFormatFeatureFlags	requiredFormatSupport = VkFormatFeatureFlags(VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT |
-																				VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT);
-
-		context.requireDeviceFunctionality("VK_EXT_shader_atomic_float");
-		if (!context.getShaderAtomicFloatFeaturesEXT().shaderImageFloat32Atomics)
-		{
-			TCU_THROW(NotSupportedError, "VkShaderAtomicFloat32: 32-bit floating point image atomic operations not supported");
-		}
-		if ((m_operation == ATOMIC_OPERATION_ADD) && !context.getShaderAtomicFloatFeaturesEXT().shaderImageFloat32AtomicAdd)
-		{
-			TCU_THROW(NotSupportedError, "VkShaderAtomicFloat32: 32-bit floating point image atomic add not supported");
-		}
-		if ((formatProperties.optimalTilingFeatures & requiredFormatSupport) != requiredFormatSupport)
-			TCU_FAIL("VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT and VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT must be supported");
-	}
-
-	if (format == VK_FORMAT_R64_UINT || format == VK_FORMAT_R64_SINT)
-	{
-		const VkFormatFeatureFlags	requisiteSupportR64 = VkFormatFeatureFlags(VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT |
-																				VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT);
-
-		context.requireDeviceFunctionality("VK_EXT_shader_image_atomic_int64");
-
-		if (!context.getShaderImageAtomicInt64FeaturesEXT().shaderImageInt64Atomics)
-		{
-			TCU_THROW(NotSupportedError, "shaderImageInt64Atomics is not supported");
-		}
-
-		if ((formatProperties.optimalTilingFeatures & requisiteSupportR64) != requisiteSupportR64)
-			TCU_FAIL("VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT and VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT must be supported");
-	}
+	commonCheckSupport(context, m_format, m_imageType, m_operation, m_useTransfer, m_readType, m_backingType);
 }
 
 void BinaryAtomicEndResultCase::initPrograms (SourceCollections& sourceCollections) const
 {
 	const VkFormat	imageFormat		= mapTextureFormat(m_format);
 	const deUint32	componentWidth	= getFormatComponentWidth(imageFormat, 0);
-	const bool		uintFormat		= isUintFormat(imageFormat);
 	const bool		intFormat		= isIntFormat(imageFormat);
-	const string	type			= (64 == componentWidth ?
-									  (uintFormat ? "uint64_t" : intFormat ? "int64_t" : "double") :
-									  (uintFormat ? "uint" : intFormat ? "int" : "float"));
+	const bool		uintFormat		= isUintFormat(imageFormat);
+	const bool		floatFormat		= isFloatFormat(imageFormat);
+	const string	type			= getComponentTypeStr(componentWidth, intFormat, uintFormat, floatFormat);
+	const string	vec4Type		= getVec4TypeStr(componentWidth, intFormat, uintFormat, floatFormat);
 
-	if (imageFormat == VK_FORMAT_R64_UINT || imageFormat == VK_FORMAT_R64_SINT)
-	{
-		AddFillReadShader(sourceCollections, m_imageType, m_format, type);
-	}
+	AddFillReadShader(sourceCollections, m_imageType, m_format, type, vec4Type);
 
 	if (isSpirvAtomicOperation(m_operation))
 	{
@@ -661,6 +760,9 @@
 																 const tcu::UVec3&			imageSize,
 																 const tcu::TextureFormat&	format,
 																 const AtomicOperation		operation,
+																 const bool					useTransfer,
+																 const ShaderReadType		shaderReadType,
+																 const ImageBackingType		backingType,
 																 const glu::GLSLVersion		glslVersion);
 
 	void						initPrograms					(SourceCollections&			sourceCollections) const;
@@ -672,6 +774,9 @@
 	const tcu::UVec3			m_imageSize;
 	const tcu::TextureFormat	m_format;
 	const AtomicOperation		m_operation;
+	const bool					m_useTransfer;
+	const ShaderReadType		m_readType;
+	const ImageBackingType		m_backingType;
 	const glu::GLSLVersion		m_glslVersion;
 };
 
@@ -682,79 +787,38 @@
 															const tcu::UVec3&		imageSize,
 															const TextureFormat&	format,
 															const AtomicOperation	operation,
+															const bool				useTransfer,
+															const ShaderReadType	shaderReadType,
+															const ImageBackingType	backingType,
 															const glu::GLSLVersion	glslVersion)
 	: TestCase		(testCtx, name, description)
 	, m_imageType	(imageType)
 	, m_imageSize	(imageSize)
 	, m_format		(format)
 	, m_operation	(operation)
+	, m_useTransfer	(useTransfer)
+	, m_readType	(shaderReadType)
+	, m_backingType	(backingType)
 	, m_glslVersion	(glslVersion)
 {
 }
 
 void BinaryAtomicIntermValuesCase::checkSupport (Context& context) const
 {
-	const VkFormat				format				= mapTextureFormat(m_format);
-	const VkFormatFeatureFlags	texelBufferSupport	= VkFormatFeatureFlags(VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT |
-																		   VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT);
-	const VkFormatProperties	formatProperties	= getPhysicalDeviceFormatProperties(context.getInstanceInterface(),
-																						context.getPhysicalDevice(), format);
-
-	if ((m_imageType == IMAGE_TYPE_BUFFER) &&
-		((formatProperties.bufferFeatures & texelBufferSupport) != texelBufferSupport))
-		TCU_THROW(NotSupportedError, "STORAGE_TEXEL_BUFFER_ATOMIC is not supported");
-
-	if (m_imageType == IMAGE_TYPE_CUBE_ARRAY)
-		context.requireDeviceCoreFeature(DEVICE_CORE_FEATURE_IMAGE_CUBE_ARRAY);
-
-	if (isFloatFormat(mapTextureFormat(m_format)))
-	{
-		const VkFormatFeatureFlags	requiredFormatSupport = VkFormatFeatureFlags(VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT |
-																				VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT);
-		context.requireDeviceFunctionality("VK_EXT_shader_atomic_float");
-		if (!context.getShaderAtomicFloatFeaturesEXT().shaderImageFloat32Atomics)
-		{
-			TCU_THROW(NotSupportedError, "VkShaderAtomicFloat32: 32-bit floating point image atomic operations not supported");
-		}
-		if ((m_operation == ATOMIC_OPERATION_ADD) && !context.getShaderAtomicFloatFeaturesEXT().shaderImageFloat32AtomicAdd)
-		{
-			TCU_THROW(NotSupportedError, "VkShaderAtomicFloat32: 32-bit floating point image atomic add not supported");
-		}
-		if ((formatProperties.optimalTilingFeatures & requiredFormatSupport) != requiredFormatSupport)
-			TCU_FAIL("VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT and VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT must be supported");
-	}
-
-	if (format == VK_FORMAT_R64_UINT || format == VK_FORMAT_R64_SINT)
-	{
-		const VkFormatFeatureFlags	requisiteSupportR64 = VkFormatFeatureFlags(VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT |
-																				VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT);
-
-		context.requireDeviceFunctionality("VK_EXT_shader_image_atomic_int64");
-
-		if (!context.getShaderImageAtomicInt64FeaturesEXT().shaderImageInt64Atomics)
-		{
-			TCU_THROW(NotSupportedError, "shaderImageInt64Atomics is not supported");
-		}
-
-		if ((formatProperties.optimalTilingFeatures & requisiteSupportR64) != requisiteSupportR64)
-			TCU_FAIL("VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT and VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT must be supported");
-	}
+	commonCheckSupport(context, m_format, m_imageType, m_operation, m_useTransfer, m_readType, m_backingType);
 }
 
 void BinaryAtomicIntermValuesCase::initPrograms (SourceCollections& sourceCollections) const
 {
-	const VkFormat	imageFormat = mapTextureFormat(m_format);
+	const VkFormat	imageFormat		= mapTextureFormat(m_format);
 	const deUint32	componentWidth	= getFormatComponentWidth(imageFormat, 0);
-	const bool		uintFormat		= isUintFormat(imageFormat);
 	const bool		intFormat		= isIntFormat(imageFormat);
-	const string	type			= (64 == componentWidth ?
-									  (uintFormat ? "uint64_t" : intFormat ? "int64_t" : "double") :
-									  (uintFormat ? "uint" : intFormat ? "int" : "float"));
+	const bool		uintFormat		= isUintFormat(imageFormat);
+	const bool		floatFormat		= isFloatFormat(imageFormat);
+	const string	type			= getComponentTypeStr(componentWidth, intFormat, uintFormat, floatFormat);
+	const string	vec4Type		= getVec4TypeStr(componentWidth, intFormat, uintFormat, floatFormat);
 
-	if (imageFormat == VK_FORMAT_R64_UINT || imageFormat == VK_FORMAT_R64_SINT)
-	{
-		AddFillReadShader(sourceCollections, m_imageType, m_format, type);
-	}
+	AddFillReadShader(sourceCollections, m_imageType, m_format, type, vec4Type);
 
 	if (isSpirvAtomicOperation(m_operation))
 	{
@@ -771,7 +835,6 @@
 	else
 	{
 		const string	versionDecl				= glu::getGLSLVersionDeclaration(m_glslVersion);
-		const string	colorVecTypeName		= string(uintFormat ? "u" : intFormat ? "i" : "") + (64 == componentWidth ? "64" : "") + "vec4";
 		const UVec3		gridSize				= getShaderGridSize(m_imageType, m_imageSize);
 		const string	atomicCoord				= getCoordStr(m_imageType, "gx % " + toString(gridSize.x()), "gy", "gz");
 		const string	invocationCoord			= getCoordStr(m_imageType, "gx", "gy", "gz");
@@ -807,7 +870,7 @@
 						"	int gx = int(gl_GlobalInvocationID.x);\n"
 						"	int gy = int(gl_GlobalInvocationID.y);\n"
 						"	int gz = int(gl_GlobalInvocationID.z);\n"
-						"	imageStore(u_intermValuesImage, " + invocationCoord + ", " + colorVecTypeName + "(" + atomicInvocation + "));\n"
+						"	imageStore(u_intermValuesImage, " + invocationCoord + ", " + vec4Type + "(" + atomicInvocation + "));\n"
 						"}\n";
 
 		sourceCollections.glslSources.add(m_name) << glu::ComputeSource(source.c_str());
@@ -823,13 +886,16 @@
 														  const ImageType				imageType,
 														  const tcu::UVec3&				imageSize,
 														  const TextureFormat&			format,
-														  const AtomicOperation			operation);
+														  const AtomicOperation			operation,
+														  const bool					useTransfer,
+														  const ShaderReadType			shaderReadType,
+														  const ImageBackingType		backingType);
 
 	tcu::TestStatus				iterate					 (void);
 
 	virtual deUint32			getOutputBufferSize		 (void) const = 0;
 
-	virtual void				prepareResources		 (const bool					isSupportedTransfer) = 0;
+	virtual void				prepareResources		 (const bool					useTransfer) = 0;
 	virtual void				prepareDescriptors		 (const bool					isTexelBuffer) = 0;
 
 	virtual void				commandsBeforeCompute	 (const VkCommandBuffer			cmdBuffer) const = 0;
@@ -838,7 +904,7 @@
 														  const VkPipelineLayout		pipelineLayout,
 														   const VkDescriptorSet		descriptorSet,
 														  const VkDeviceSize&			range,
-														  const bool					isSupportedTransfer) = 0;
+														  const bool					useTransfer) = 0;
 
 	virtual bool				verifyResult			 (Allocation&					outputBufferAllocation,
 														  const bool					is64Bit) const = 0;
@@ -853,14 +919,23 @@
 														  const VkDeviceSize&			range,
 														  const tcu::UVec3&				gridSize);
 
-	void						createdImageResources	(const VkFormat&				imageFormat,
-														  const bool					isSupportedTransfer);
+	void						createImageAndView		(VkFormat						imageFormat,
+														 const tcu::UVec3&				imageExent,
+														 bool							useTransfer,
+														 de::MovePtr<Image>&			imagePtr,
+														 Move<VkImageView>&				imageViewPtr);
+
+	void						createImageResources	(const VkFormat&				imageFormat,
+														 const bool						useTransfer);
 
 	const string				m_name;
 	const ImageType				m_imageType;
 	const tcu::UVec3			m_imageSize;
 	const TextureFormat			m_format;
 	const AtomicOperation		m_operation;
+	const bool					m_useTransfer;
+	const ShaderReadType		m_readType;
+	const ImageBackingType		m_backingType;
 
 	de::MovePtr<Buffer>			m_inputBuffer;
 	de::MovePtr<Buffer>			m_outputBuffer;
@@ -875,6 +950,8 @@
 
 	de::MovePtr<Image>			m_resultImage;
 	Move<VkImageView>			m_resultImageView;
+
+	std::vector<VkSemaphore>	m_waitSemaphores;
 };
 
 BinaryAtomicInstanceBase::BinaryAtomicInstanceBase (Context&				context,
@@ -882,13 +959,19 @@
 													const ImageType			imageType,
 													const tcu::UVec3&		imageSize,
 													const TextureFormat&	format,
-													const AtomicOperation	operation)
+													const AtomicOperation	operation,
+													const bool				useTransfer,
+													const ShaderReadType	shaderReadType,
+													const ImageBackingType	backingType)
 	: vkt::TestInstance	(context)
 	, m_name			(name)
 	, m_imageType		(imageType)
 	, m_imageSize		(imageSize)
 	, m_format			(format)
 	, m_operation		(operation)
+	, m_useTransfer		(useTransfer)
+	, m_readType		(shaderReadType)
+	, m_backingType		(backingType)
 {
 }
 
@@ -902,17 +985,14 @@
 	const VkDeviceSize		imageSizeInBytes	= tcu::getPixelSize(m_format) * getNumPixels(m_imageType, m_imageSize);
 	const VkDeviceSize		outBuffSizeInBytes	= getOutputBufferSize();
 	const VkFormat			imageFormat			= mapTextureFormat(m_format);
-	const bool				isSupportedTransfer	= (imageFormat != VK_FORMAT_R64_SINT) &&
-												  (imageFormat != VK_FORMAT_R64_UINT) &&
-												  isSupportedFeatureTransfer(m_context, imageFormat);
 	const bool				isTexelBuffer		= (m_imageType == IMAGE_TYPE_BUFFER);
 
 	if (!isTexelBuffer)
 	{
-		createdImageResources(imageFormat, isSupportedTransfer);
+		createImageResources(imageFormat, m_useTransfer);
 	}
 
-	tcu::UVec3			gridSize		= getShaderGridSize(m_imageType, m_imageSize);
+	tcu::UVec3				gridSize			= getShaderGridSize(m_imageType, m_imageSize);
 
 	//Prepare the buffer with the initial data for the image
 	m_inputBuffer = de::MovePtr<Buffer>(new Buffer(deviceInterface,
@@ -939,7 +1019,7 @@
 
 	if (!isTexelBuffer)
 	{
-		prepareResources(isSupportedTransfer);
+		prepareResources(m_useTransfer);
 	}
 
 	prepareDescriptors(isTexelBuffer);
@@ -954,7 +1034,7 @@
 	Move<VkPipelineLayout>	pipelineLayoutReadImage;
 	Move<VkPipeline>		pipelineReadImage;
 
-	if (!isSupportedTransfer)
+	if (!m_useTransfer)
 	{
 		m_descriptorSetLayoutNoTransfer =
 			DescriptorSetLayoutBuilder()
@@ -982,13 +1062,7 @@
 		pipelineLayoutFillImage	= makePipelineLayout(deviceInterface, device, *m_descriptorSetLayoutNoTransfer);
 		pipelineFillImage		= makeComputePipeline(deviceInterface, device, *pipelineLayoutFillImage, *shaderModuleFillImage);
 
-		const VkPhysicalDeviceFeatures deviceFeatures = getPhysicalDeviceFeatures(m_context.getInstanceInterface(), m_context.getPhysicalDevice());
-
-		if ((deviceFeatures.shaderResourceResidency == VK_TRUE) &&
-			m_context.getShaderImageAtomicInt64FeaturesEXT().sparseImageInt64Atomics &&
-			(m_imageType != IMAGE_TYPE_1D) &&
-			(m_imageType != IMAGE_TYPE_1D_ARRAY) &&
-			(m_imageType != IMAGE_TYPE_BUFFER))
+		if (m_readType == ShaderReadType::SPARSE)
 		{
 			shaderModuleReadImage = createShaderModule(deviceInterface, device, m_context.getBinaryCollection().get("readShaderResidency"), 0);
 		}
@@ -1013,7 +1087,7 @@
 
 	if (!isTexelBuffer)
 	{
-		if (isSupportedTransfer)
+		if (m_useTransfer)
 		{
 			const vector<VkBufferImageCopy>	bufferImageCopy(1, makeBufferImageCopy(makeExtent3D(getLayerSize(m_imageType, m_imageSize)), getNumLayers(m_imageType, m_imageSize)));
 			copyBufferToImage(deviceInterface,
@@ -1042,24 +1116,26 @@
 						 *pipelineLayoutReadImage,
 						 *descriptorSetReadImage,
 						 outBuffSizeInBytes,
-						 isSupportedTransfer);
+						 m_useTransfer);
 
 	const VkBufferMemoryBarrier	outputBufferPreHostReadBarrier
-		= makeBufferMemoryBarrier(((isSupportedTransfer || isTexelBuffer) ? VK_ACCESS_TRANSFER_WRITE_BIT : VK_ACCESS_SHADER_WRITE_BIT),
+		= makeBufferMemoryBarrier(((m_useTransfer || isTexelBuffer) ? VK_ACCESS_TRANSFER_WRITE_BIT : VK_ACCESS_SHADER_WRITE_BIT),
 								  VK_ACCESS_HOST_READ_BIT,
 								  m_outputBuffer->get(),
 								  0ull,
 								  outBuffSizeInBytes);
 
 	deviceInterface.cmdPipelineBarrier(*cmdBuffer,
-									   ((isSupportedTransfer || isTexelBuffer) ? VK_PIPELINE_STAGE_TRANSFER_BIT : VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT),
+									   ((m_useTransfer || isTexelBuffer) ? VK_PIPELINE_STAGE_TRANSFER_BIT : VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT),
 									   VK_PIPELINE_STAGE_HOST_BIT,
 									   DE_FALSE, 0u, DE_NULL,
 									   1u, &outputBufferPreHostReadBarrier, 0u, DE_NULL);
 
 	endCommandBuffer(deviceInterface, *cmdBuffer);
 
-	submitCommandsAndWait(deviceInterface, device, queue, *cmdBuffer);
+	std::vector<VkPipelineStageFlags> waitStages(m_waitSemaphores.size(), VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT);
+	submitCommandsAndWait(deviceInterface, device, queue, *cmdBuffer, false, 1u,
+		static_cast<deUint32>(m_waitSemaphores.size()), de::dataOrNull(m_waitSemaphores), de::dataOrNull(waitStages));
 
 	Allocation& outputBufferAllocation = m_outputBuffer->getAllocation();
 
@@ -1126,45 +1202,77 @@
 										1, &imageBarrierPost);
 }
 
-void BinaryAtomicInstanceBase::createdImageResources (const VkFormat&	imageFormat,
-													  const bool		isSupportedTransfer)
+void BinaryAtomicInstanceBase::createImageAndView	(VkFormat						imageFormat,
+													 const tcu::UVec3&				imageExent,
+													 bool							useTransfer,
+													 de::MovePtr<Image>&			imagePtr,
+													 Move<VkImageView>&				imageViewPtr)
 {
 	const VkDevice			device			= m_context.getDevice();
 	const DeviceInterface&	deviceInterface	= m_context.getDeviceInterface();
 	Allocator&				allocator		= m_context.getDefaultAllocator();
+	const VkImageUsageFlags	usageFlags		= getUsageFlags(useTransfer);
+	VkImageCreateFlags		createFlags		= 0u;
 
-	const VkImageCreateInfo imageParams =
+	if (m_imageType == IMAGE_TYPE_CUBE || m_imageType == IMAGE_TYPE_CUBE_ARRAY)
+		createFlags |= VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT;
+
+	const auto numLayers = getNumLayers(m_imageType, m_imageSize);
+
+	VkImageCreateInfo createInfo =
 	{
 		VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO,					// VkStructureType			sType;
 		DE_NULL,												// const void*				pNext;
-		(m_imageType == IMAGE_TYPE_CUBE ||
-		 m_imageType == IMAGE_TYPE_CUBE_ARRAY ?
-		 (VkImageCreateFlags)VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT :
-		 (VkImageCreateFlags)0u),								// VkImageCreateFlags		flags;
+		createFlags,											// VkImageCreateFlags		flags;
 		mapImageType(m_imageType),								// VkImageType				imageType;
 		imageFormat,											// VkFormat					format;
-		makeExtent3D(getLayerSize(m_imageType, m_imageSize)),	// VkExtent3D				extent;
+		makeExtent3D(imageExent),								// VkExtent3D				extent;
 		1u,														// deUint32					mipLevels;
-		getNumLayers(m_imageType, m_imageSize),					// deUint32					arrayLayers;
+		numLayers,												// deUint32					arrayLayers;
 		VK_SAMPLE_COUNT_1_BIT,									// VkSampleCountFlagBits	samples;
 		VK_IMAGE_TILING_OPTIMAL,								// VkImageTiling			tiling;
-		(VkImageUsageFlags)(isSupportedTransfer ?
-			(VK_IMAGE_USAGE_STORAGE_BIT |
-			VK_IMAGE_USAGE_TRANSFER_SRC_BIT |
-			VK_IMAGE_USAGE_TRANSFER_DST_BIT) :
-			VK_IMAGE_USAGE_STORAGE_BIT),						// VkImageUsageFlags		usage;
+		usageFlags,												// VkImageUsageFlags		usage;
 		VK_SHARING_MODE_EXCLUSIVE,								// VkSharingMode			sharingMode;
 		0u,														// deUint32					queueFamilyIndexCount;
 		DE_NULL,												// const deUint32*			pQueueFamilyIndices;
 		VK_IMAGE_LAYOUT_UNDEFINED,								// VkImageLayout			initialLayout;
 	};
 
+	if (m_backingType == ImageBackingType::SPARSE)
+	{
+		const auto&		vki				= m_context.getInstanceInterface();
+		const auto		physicalDevice	= m_context.getPhysicalDevice();
+		const auto		sparseQueue		= m_context.getSparseQueue();
+		const auto		sparseQueueIdx	= m_context.getSparseQueueFamilyIndex();
+		const auto		universalQIdx	= m_context.getUniversalQueueFamilyIndex();
+		const deUint32	queueIndices[]	= { universalQIdx, sparseQueueIdx };
+
+		createInfo.flags |= (VK_IMAGE_CREATE_SPARSE_BINDING_BIT | VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT);
+
+		if (sparseQueueIdx != universalQIdx)
+		{
+			createInfo.sharingMode				= VK_SHARING_MODE_CONCURRENT;
+			createInfo.queueFamilyIndexCount	= static_cast<deUint32>(DE_LENGTH_OF_ARRAY(queueIndices));
+			createInfo.pQueueFamilyIndices		= queueIndices;
+		}
+
+		const auto sparseImage = new SparseImage(deviceInterface, device, physicalDevice, vki, createInfo, sparseQueue, allocator, m_format);
+		m_waitSemaphores.push_back(sparseImage->getSemaphore());
+		imagePtr = de::MovePtr<Image>(sparseImage);
+	}
+	else
+		imagePtr = de::MovePtr<Image>(new Image(deviceInterface, device, allocator, createInfo, MemoryRequirement::Any));
+
+	const VkImageSubresourceRange subresourceRange = makeImageSubresourceRange(VK_IMAGE_ASPECT_COLOR_BIT, 0u, 1u, 0u, numLayers);
+
+	imageViewPtr = makeImageView(deviceInterface, device, imagePtr->get(), mapImageViewType(m_imageType), imageFormat, subresourceRange);
+}
+
+void BinaryAtomicInstanceBase::createImageResources (const VkFormat&	imageFormat,
+													 const bool			useTransfer)
+{
 	//Create the image that is going to store results of atomic operations
-	m_resultImage = de::MovePtr<Image>(new Image(deviceInterface, device, allocator, imageParams, MemoryRequirement::Any));
-
-	const VkImageSubresourceRange subresourceRange = makeImageSubresourceRange(VK_IMAGE_ASPECT_COLOR_BIT, 0u, 1u, 0u, getNumLayers(m_imageType, m_imageSize));
-
-	m_resultImageView = makeImageView(deviceInterface, device, m_resultImage->get(), mapImageViewType(m_imageType), imageFormat, subresourceRange);
+	createImageAndView(imageFormat, getLayerSize(m_imageType, m_imageSize), useTransfer, m_resultImage, m_resultImageView);
 }
 
 class BinaryAtomicEndResultInstance : public BinaryAtomicInstanceBase
@@ -1176,12 +1284,15 @@
 														const ImageType				imageType,
 														const tcu::UVec3&			imageSize,
 														const TextureFormat&		format,
-														const AtomicOperation		operation)
-							: BinaryAtomicInstanceBase(context, name, imageType, imageSize, format, operation) {}
+														const AtomicOperation		operation,
+														const bool					useTransfer,
+														const ShaderReadType		shaderReadType,
+														const ImageBackingType		backingType)
+							: BinaryAtomicInstanceBase(context, name, imageType, imageSize, format, operation, useTransfer, shaderReadType, backingType) {}
 
 	virtual deUint32	getOutputBufferSize			   (void) const;
 
-	virtual void		prepareResources			   (const bool					isSupportedTransfer) { DE_UNREF(isSupportedTransfer); }
+	virtual void		prepareResources			   (const bool					useTransfer) { DE_UNREF(useTransfer); }
 	virtual void		prepareDescriptors			   (const bool					isTexelBuffer);
 
 	virtual void		commandsBeforeCompute		   (const VkCommandBuffer) const {}
@@ -1190,7 +1301,7 @@
 														const VkPipelineLayout		pipelineLayout,
 														const VkDescriptorSet		descriptorSet,
 														const VkDeviceSize&			range,
-														const bool					isSupportedTransfer);
+														const bool					useTransfer);
 
 	virtual bool		verifyResult				   (Allocation&					outputBufferAllocation,
 														const bool					is64Bit) const;
@@ -1230,6 +1341,7 @@
 		.build(deviceInterface, device, VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT, 1u);
 
 	m_descriptorSet = makeDescriptorSet(deviceInterface, device, *m_descriptorPool, *m_descriptorSetLayout);
+
 	if (isTexelBuffer)
 	{
 		m_descResultBufferView = makeBufferView(deviceInterface, device, *(*m_inputBuffer), mapTextureFormat(m_format), 0, VK_WHOLE_SIZE);
@@ -1253,7 +1365,7 @@
 														  const VkPipelineLayout	pipelineLayout,
 														  const VkDescriptorSet		descriptorSet,
 														  const VkDeviceSize&		range,
-														  const bool				isSupportedTransfer)
+														  const bool				useTransfer)
 {
 	const DeviceInterface&			deviceInterface		= m_context.getDeviceInterface();
 	const VkImageSubresourceRange	subresourceRange	= makeImageSubresourceRange(VK_IMAGE_ASPECT_COLOR_BIT, 0u, 1u, 0u, getNumLayers(m_imageType, m_imageSize));
@@ -1263,7 +1375,7 @@
 	{
 		m_outputBuffer = m_inputBuffer;
 	}
-	else if (isSupportedTransfer)
+	else if (useTransfer)
 	{
 		const VkImageMemoryBarrier	resultImagePostDispatchBarrier =
 			makeImageMemoryBarrier(	VK_ACCESS_SHADER_WRITE_BIT,
@@ -1295,12 +1407,12 @@
 			.update(deviceInterface, device);
 
 		const VkImageMemoryBarrier	resultImagePostDispatchBarrier =
-		makeImageMemoryBarrier(	VK_ACCESS_SHADER_WRITE_BIT,
-								VK_ACCESS_SHADER_READ_BIT,
-								VK_IMAGE_LAYOUT_GENERAL,
-								VK_IMAGE_LAYOUT_GENERAL,
-								m_resultImage->get(),
-								subresourceRange);
+			makeImageMemoryBarrier(	VK_ACCESS_SHADER_WRITE_BIT,
+									VK_ACCESS_SHADER_READ_BIT,
+									VK_IMAGE_LAYOUT_GENERAL,
+									VK_IMAGE_LAYOUT_GENERAL,
+									m_resultImage->get(),
+									subresourceRange);
 
 		deviceInterface.cmdPipelineBarrier(	cmdBuffer,
 											VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT,
@@ -1442,7 +1554,7 @@
 
 TestInstance* BinaryAtomicEndResultCase::createInstance (Context& context) const
 {
-	return new BinaryAtomicEndResultInstance(context, m_name, m_imageType, m_imageSize, m_format, m_operation);
+	return new BinaryAtomicEndResultInstance(context, m_name, m_imageType, m_imageSize, m_format, m_operation, m_useTransfer, m_readType, m_backingType);
 }
 
 class BinaryAtomicIntermValuesInstance : public BinaryAtomicInstanceBase
@@ -1454,12 +1566,15 @@
 															const ImageType			imageType,
 															const tcu::UVec3&		imageSize,
 															const TextureFormat&	format,
-															const AtomicOperation	operation)
-							: BinaryAtomicInstanceBase(context, name, imageType, imageSize, format, operation) {}
+															const AtomicOperation	operation,
+															const bool				useTransfer,
+															const ShaderReadType	shaderReadType,
+															const ImageBackingType	backingType)
+							: BinaryAtomicInstanceBase(context, name, imageType, imageSize, format, operation, useTransfer, shaderReadType, backingType) {}
 
 	virtual deUint32	getOutputBufferSize				   (void) const;
 
-	virtual void		prepareResources				   (const bool				isSupportedTransfer);
+	virtual void		prepareResources				   (const bool				useTransfer);
 	virtual void		prepareDescriptors				   (const bool				isTexelBuffer);
 
 	virtual void		commandsBeforeCompute			   (const VkCommandBuffer	cmdBuffer) const;
@@ -1468,7 +1583,7 @@
 															const VkPipelineLayout	pipelineLayout,
 															const VkDescriptorSet	descriptorSet,
 															const VkDeviceSize&		range,
-															const bool				isSupportedTransfer);
+															const bool				useTransfer);
 
 	virtual bool		verifyResult					   (Allocation&				outputBufferAllocation,
 															const bool				is64Bit) const;
@@ -1499,48 +1614,14 @@
 	return NUM_INVOCATIONS_PER_PIXEL * tcu::getPixelSize(m_format) * getNumPixels(m_imageType, m_imageSize);
 }
 
-void BinaryAtomicIntermValuesInstance::prepareResources (const bool isSupportedTransfer)
+void BinaryAtomicIntermValuesInstance::prepareResources (const bool useTransfer)
 {
-	const VkDevice			device			= m_context.getDevice();
-	const DeviceInterface&	deviceInterface = m_context.getDeviceInterface();
-	Allocator&				allocator		= m_context.getDefaultAllocator();
-
 	const UVec3 layerSize			= getLayerSize(m_imageType, m_imageSize);
 	const bool  isCubeBasedImage	= (m_imageType == IMAGE_TYPE_CUBE || m_imageType == IMAGE_TYPE_CUBE_ARRAY);
 	const UVec3 extendedLayerSize	= isCubeBasedImage	? UVec3(NUM_INVOCATIONS_PER_PIXEL * layerSize.x(), NUM_INVOCATIONS_PER_PIXEL * layerSize.y(), layerSize.z())
 														: UVec3(NUM_INVOCATIONS_PER_PIXEL * layerSize.x(), layerSize.y(), layerSize.z());
 
-	const VkImageCreateInfo imageParams =
-	{
-		VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO,		// VkStructureType			sType;
-		DE_NULL,									// const void*				pNext;
-		(m_imageType == IMAGE_TYPE_CUBE ||
-		 m_imageType == IMAGE_TYPE_CUBE_ARRAY ?
-		 (VkImageCreateFlags)VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT :
-		 (VkImageCreateFlags)0u),					// VkImageCreateFlags		flags;
-		mapImageType(m_imageType),					// VkImageType				imageType;
-		mapTextureFormat(m_format),					// VkFormat					format;
-		makeExtent3D(extendedLayerSize),			// VkExtent3D				extent;
-		1u,											// deUint32					mipLevels;
-		getNumLayers(m_imageType, m_imageSize),		// deUint32					arrayLayers;
-		VK_SAMPLE_COUNT_1_BIT,						// VkSampleCountFlagBits	samples;
-		VK_IMAGE_TILING_OPTIMAL,					// VkImageTiling			tiling;
-		(VkImageUsageFlags)(isSupportedTransfer ?
-			(VK_IMAGE_USAGE_STORAGE_BIT |
-			VK_IMAGE_USAGE_TRANSFER_SRC_BIT |
-			VK_IMAGE_USAGE_TRANSFER_DST_BIT) :
-			VK_IMAGE_USAGE_STORAGE_BIT),			// VkImageUsageFlags
-		VK_SHARING_MODE_EXCLUSIVE,					// VkSharingMode			sharingMode;
-		0u,											// deUint32					queueFamilyIndexCount;
-		DE_NULL,									// const deUint32*			pQueueFamilyIndices;
-		VK_IMAGE_LAYOUT_UNDEFINED,					// VkImageLayout			initialLayout;
-	};
-
-	m_intermResultsImage = de::MovePtr<Image>(new Image(deviceInterface, device, allocator, imageParams, MemoryRequirement::Any));
-
-	const VkImageSubresourceRange subresourceRange = makeImageSubresourceRange(VK_IMAGE_ASPECT_COLOR_BIT, 0u, 1u, 0u, getNumLayers(m_imageType, m_imageSize));
-
-	m_intermResultsImageView = makeImageView(deviceInterface, device, m_intermResultsImage->get(), mapImageViewType(m_imageType), mapTextureFormat(m_format), subresourceRange);
+	createImageAndView(mapTextureFormat(m_format), extendedLayerSize, useTransfer, m_intermResultsImage, m_intermResultsImageView);
 }
 
 void BinaryAtomicIntermValuesInstance::prepareDescriptors (const bool	isTexelBuffer)
@@ -1608,7 +1689,7 @@
 															 const VkPipelineLayout		pipelineLayout,
 															 const VkDescriptorSet		descriptorSet,
 															 const VkDeviceSize&		range,
-															 const bool					isSupportedTransfer)
+															 const bool					useTransfer)
 {
 	// nothing is needed for texel image buffer
 	if (m_imageType == IMAGE_TYPE_BUFFER)
@@ -1618,7 +1699,7 @@
 	const VkImageSubresourceRange	subresourceRange	= makeImageSubresourceRange(VK_IMAGE_ASPECT_COLOR_BIT, 0u, 1u, 0u, getNumLayers(m_imageType, m_imageSize));
 	const UVec3						layerSize			= getLayerSize(m_imageType, m_imageSize);
 
-	if (isSupportedTransfer)
+	if (useTransfer)
 	{
 		const VkImageMemoryBarrier	imagePostDispatchBarrier =
 			makeImageMemoryBarrier(	VK_ACCESS_SHADER_WRITE_BIT,
@@ -1785,7 +1866,7 @@
 
 TestInstance* BinaryAtomicIntermValuesCase::createInstance (Context& context) const
 {
-	return new BinaryAtomicIntermValuesInstance(context, m_name, m_imageType, m_imageSize, m_format, m_operation);
+	return new BinaryAtomicIntermValuesInstance(context, m_name, m_imageType, m_imageSize, m_format, m_operation, m_useTransfer, m_readType, m_backingType);
 }
 
 } // anonymous ns
@@ -1805,7 +1886,7 @@
 		const tcu::UVec3	m_imageSize;
 	};
 
-	static const ImageParams imageParamsArray[] =
+	const ImageParams imageParamsArray[] =
 	{
 		ImageParams(IMAGE_TYPE_1D,			tcu::UVec3(64u, 1u, 1u)),
 		ImageParams(IMAGE_TYPE_1D_ARRAY,	tcu::UVec3(64u, 1u, 8u)),
@@ -1817,7 +1898,7 @@
 		ImageParams(IMAGE_TYPE_BUFFER,		tcu::UVec3(64u, 1u, 1u))
 	};
 
-	static const tcu::TextureFormat formats[] =
+	const tcu::TextureFormat formats[] =
 	{
 		tcu::TextureFormat(tcu::TextureFormat::R, tcu::TextureFormat::UNSIGNED_INT32),
 		tcu::TextureFormat(tcu::TextureFormat::R, tcu::TextureFormat::SIGNED_INT32),
@@ -1826,6 +1907,26 @@
 		tcu::TextureFormat(tcu::TextureFormat::R, tcu::TextureFormat::SIGNED_INT64)
 	};
 
+	const struct
+	{
+		ShaderReadType		type;
+		const char*			name;
+	} readTypes[] =
+	{
+		{	ShaderReadType::NORMAL,	"normal_read"	},
+		{	ShaderReadType::SPARSE,	"sparse_read"	},
+	};
+
+	const struct
+	{
+		ImageBackingType	type;
+		const char*			name;
+	} backingTypes[] =
+	{
+		{	ImageBackingType::NORMAL,	"normal_img"	},
+		{	ImageBackingType::SPARSE,	"sparse_img"	},
+	};
+
 	for (deUint32 operationI = 0; operationI < ATOMIC_OPERATION_LAST; operationI++)
 	{
 		const AtomicOperation operation = (AtomicOperation)operationI;
@@ -1839,33 +1940,77 @@
 
 			de::MovePtr<tcu::TestCaseGroup> imageTypeGroup(new tcu::TestCaseGroup(testCtx, getImageTypeName(imageType).c_str(), ""));
 
-			for (deUint32 formatNdx = 0; formatNdx < DE_LENGTH_OF_ARRAY(formats); formatNdx++)
+			for (int useTransferIdx = 0; useTransferIdx < 2; ++useTransferIdx)
 			{
-				const TextureFormat&	format		= formats[formatNdx];
-				const std::string		formatName	= getShaderImageFormatQualifier(format);
+				const bool				useTransfer	= (useTransferIdx > 0);
+				const string			groupName	= (!useTransfer ? "no" : "") + string("transfer");
 
-				// Need SPIRV programs in vktImageAtomicSpirvShaders.cpp
-				if (imageType == IMAGE_TYPE_BUFFER && (format.type != tcu::TextureFormat::FLOAT))
-				{
-					continue;
-				}
+				de::MovePtr<tcu::TestCaseGroup> transferGroup(new tcu::TestCaseGroup(testCtx, groupName.c_str(), ""));
 
-				// Only ADD and EXCHANGE are supported on floating-point
-				if (format.type == tcu::TextureFormat::FLOAT)
+				for (int readTypeIdx = 0; readTypeIdx < DE_LENGTH_OF_ARRAY(readTypes); ++readTypeIdx)
 				{
-					if (operation != ATOMIC_OPERATION_ADD && operation != ATOMIC_OPERATION_EXCHANGE)
+					const auto& readType = readTypes[readTypeIdx];
+
+					de::MovePtr<tcu::TestCaseGroup> readTypeGroup(new tcu::TestCaseGroup(testCtx, readType.name, ""));
+
+					for (int backingTypeIdx = 0; backingTypeIdx < DE_LENGTH_OF_ARRAY(backingTypes); ++backingTypeIdx)
 					{
-						continue;
+						const auto& backingType = backingTypes[backingTypeIdx];
+
+						de::MovePtr<tcu::TestCaseGroup> backingTypeGroup(new tcu::TestCaseGroup(testCtx, backingType.name, ""));
+
+						for (deUint32 formatNdx = 0; formatNdx < DE_LENGTH_OF_ARRAY(formats); formatNdx++)
+						{
+							const TextureFormat&	format		= formats[formatNdx];
+							const std::string		formatName	= getShaderImageFormatQualifier(format);
+
+							// Need SPIRV programs in vktImageAtomicSpirvShaders.cpp
+							if (imageType == IMAGE_TYPE_BUFFER && (format.type != tcu::TextureFormat::FLOAT))
+							{
+								continue;
+							}
+
+							// Only 2D and 3D images may support sparse residency.
+							const auto vkImageType = mapImageType(imageType);
+							if (backingType.type == ImageBackingType::SPARSE && (vkImageType != VK_IMAGE_TYPE_2D && vkImageType != VK_IMAGE_TYPE_3D))
+								continue;
+
+							// Only ADD and EXCHANGE are supported on floating-point
+							if (format.type == tcu::TextureFormat::FLOAT)
+							{
+								if (operation != ATOMIC_OPERATION_ADD && operation != ATOMIC_OPERATION_EXCHANGE)
+								{
+									continue;
+								}
+							}
+
+							if (readType.type == ShaderReadType::SPARSE)
+							{
+								// When using transfer, shader reads will not be used, so avoid creating two identical cases.
+								if (useTransfer)
+									continue;
+
+								// Sparse reads are not supported for all types of images.
+								if (imageType == IMAGE_TYPE_1D || imageType == IMAGE_TYPE_1D_ARRAY || imageType == IMAGE_TYPE_BUFFER)
+									continue;
+							}
+
+							//!< Atomic case checks the end result of the operations, and not the intermediate return values
+							const string caseEndResult = formatName + "_end_result";
+							backingTypeGroup->addChild(new BinaryAtomicEndResultCase(testCtx, caseEndResult, "", imageType, imageSize, format, operation, useTransfer, readType.type, backingType.type, glu::GLSL_VERSION_450));
+
+							//!< Atomic case checks the return values of the atomic function and not the end result.
+							const string caseIntermValues = formatName + "_intermediate_values";
+							backingTypeGroup->addChild(new BinaryAtomicIntermValuesCase(testCtx, caseIntermValues, "", imageType, imageSize, format, operation, useTransfer, readType.type, backingType.type, glu::GLSL_VERSION_450));
+						}
+
+						readTypeGroup->addChild(backingTypeGroup.release());
 					}
+
+					transferGroup->addChild(readTypeGroup.release());
 				}
 
-				//!< Atomic case checks the end result of the operations, and not the intermediate return values
-				const string caseEndResult = formatName + "_end_result";
-				imageTypeGroup->addChild(new BinaryAtomicEndResultCase(testCtx, caseEndResult, "", imageType, imageSize, format, operation, glu::GLSL_VERSION_450));
-
-				//!< Atomic case checks the return values of the atomic function and not the end result.
-				const string caseIntermValues = formatName + "_intermediate_values";
-				imageTypeGroup->addChild(new BinaryAtomicIntermValuesCase(testCtx, caseIntermValues, "", imageType, imageSize, format, operation, glu::GLSL_VERSION_450));
+				imageTypeGroup->addChild(transferGroup.release());
 			}
 
 			operationGroup->addChild(imageTypeGroup.release());
diff --git a/external/vulkancts/modules/vulkan/image/vktImageMismatchedFormatsTests.cpp b/external/vulkancts/modules/vulkan/image/vktImageMismatchedFormatsTests.cpp
index 4911b8f..ae248f8 100644
--- a/external/vulkancts/modules/vulkan/image/vktImageMismatchedFormatsTests.cpp
+++ b/external/vulkancts/modules/vulkan/image/vktImageMismatchedFormatsTests.cpp
@@ -190,6 +190,31 @@
 	WRITE
 };
 
+void fillImageCreateInfo (VkImageCreateInfo& imageCreateInfo, TestType testType, VkFormat format)
+{
+	const VkImageCreateFlags	imageFlags		= ((testType == TestType::SPARSE_READ) ? (VK_IMAGE_CREATE_SPARSE_BINDING_BIT | VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT) : 0u);
+	const VkImageCreateInfo		createInfo		=
+	{
+		VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO,																// VkStructureType			sType;
+		nullptr,																							// const void*				pNext;
+		imageFlags,																							// VkImageCreateFlags		flags;
+		VK_IMAGE_TYPE_2D,																					// VkImageType				imageType;
+		format,																								// VkFormat					format;
+		makeExtent3D(8, 8, 1),																				// VkExtent3D				extent;
+		1u,																									// deUint32					mipLevels;
+		1u,																									// deUint32					arrayLayers;
+		VK_SAMPLE_COUNT_1_BIT,																				// VkSampleCountFlagBits	samples;
+		VK_IMAGE_TILING_OPTIMAL,																			// VkImageTiling			tiling;
+		VK_IMAGE_USAGE_STORAGE_BIT | VK_IMAGE_USAGE_TRANSFER_SRC_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT,		// VkImageUsageFlags		usage;
+		VK_SHARING_MODE_EXCLUSIVE,																			// VkSharingMode			sharingMode;
+		0u,																									// deUint32					queueFamilyIndexCount;
+		nullptr,																							// const deUint32*			pQueueFamilyIndices;
+		VK_IMAGE_LAYOUT_UNDEFINED																			// VkImageLayout			initialLayout;
+	};
+
+	imageCreateInfo = createInfo;
+}
+
 class MismatchedFormatTest : public TestCase
 {
 public:
@@ -225,13 +250,23 @@
 
 void MismatchedFormatTest::checkSupport (Context& context) const
 {
+	const auto&	vki				= context.getInstanceInterface();
+	const auto	physicalDevice	= context.getPhysicalDevice();
+
 	if (m_type == TestType::SPARSE_READ)
 	{
 		context.requireDeviceCoreFeature(DEVICE_CORE_FEATURE_SPARSE_BINDING);
 
-		if (!getPhysicalDeviceFeatures(context.getInstanceInterface(), context.getPhysicalDevice()).sparseResidencyBuffer)
-		{
+		if (!getPhysicalDeviceFeatures(vki, physicalDevice).sparseResidencyBuffer)
 			TCU_THROW(NotSupportedError, "Sparse partially resident buffers not supported");
+
+		// Check sparse operations support before creating the image.
+		VkImageCreateInfo imageCreateInfo;
+		fillImageCreateInfo(imageCreateInfo, m_type, m_format);
+
+		if (!checkSparseImageFormatSupport(physicalDevice, vki, imageCreateInfo))
+		{
+			TCU_THROW(NotSupportedError, "The image format does not support sparse operations.");
 		}
 
 		if (!getPhysicalDeviceFeatures(context.getInstanceInterface(), context.getPhysicalDevice()).shaderResourceResidency)
@@ -240,7 +275,7 @@
 		}
 	}
 
-	VkFormatProperties formatProperties = getPhysicalDeviceFormatProperties(context.getInstanceInterface(), context.getPhysicalDevice(), m_format);
+	VkFormatProperties formatProperties = getPhysicalDeviceFormatProperties(vki, physicalDevice, m_format);
 
 	if ((formatProperties.optimalTilingFeatures & VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT) == 0)
 	{
@@ -340,6 +375,9 @@
 	const VkDevice					device				= m_context.getDevice();
 	const VkQueue					queue				= m_context.getUniversalQueue();
 	const deUint32					queueFamilyIndex	= m_context.getUniversalQueueFamilyIndex();
+	auto&							allocator			= m_context.getDefaultAllocator();
+	const auto						physicalDevice		= m_context.getPhysicalDevice();
+	const auto&						instance			= m_context.getInstanceInterface();
 
 	Move<VkShaderModule>			shaderModule		= createShaderModule(vk, device, m_context.getBinaryCollection().get("comp"), 0);
 
@@ -355,28 +393,11 @@
 
 	Move<VkPipeline>				pipeline			= makeComputePipeline(vk, device, *pipelineLayout, *shaderModule);
 
-	VkImageCreateFlags				imageFlag			= m_type == TestType::SPARSE_READ ? (VK_IMAGE_CREATE_SPARSE_BINDING_BIT | VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT) : 0u;
-
-	const VkImageCreateInfo			imageCreateInfo		=
-	{
-		VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO,																// VkStructureType			sType;
-		DE_NULL,																							// const void*				pNext;
-		imageFlag,																							// VkImageCreateFlags		flags;
-		VK_IMAGE_TYPE_2D,																					// VkImageType				imageType;
-		m_format,																							// VkFormat					format;
-		makeExtent3D(8, 8, 1),																				// VkExtent3D				extent;
-		1u,																									// deUint32					mipLevels;
-		1u,																									// deUint32					arrayLayers;
-		VK_SAMPLE_COUNT_1_BIT,																				// VkSampleCountFlagBits	samples;
-		VK_IMAGE_TILING_OPTIMAL,																			// VkImageTiling			tiling;
-		VK_IMAGE_USAGE_STORAGE_BIT | VK_IMAGE_USAGE_TRANSFER_SRC_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT,		// VkImageUsageFlags		usage;
-		VK_SHARING_MODE_EXCLUSIVE,																			// VkSharingMode			sharingMode;
-		0u,																									// deUint32					queueFamilyIndexCount;
-		DE_NULL,																							// const deUint32*			pQueueFamilyIndices;
-		VK_IMAGE_LAYOUT_UNDEFINED																			// VkImageLayout			initialLayout;
-	};
+	VkImageCreateInfo				imageCreateInfo;
+	fillImageCreateInfo(imageCreateInfo, m_type, m_format);
 
 	vk::Move<vk::VkImage>			storageImage		= createImage(vk, device, &imageCreateInfo);
+	const auto						tcuFormat			= mapVkFormat(m_format);
 
 	de::MovePtr<vk::Allocation>					storageAllocation;
 	vk::Move<vk::VkSemaphore>					bindSemaphore;
@@ -384,19 +405,20 @@
 
 	if (m_type == TestType::SPARSE_READ)
 	{
-		bindSemaphore = createSemaphore(m_context.getDeviceInterface(), m_context.getDevice());
+		bindSemaphore = createSemaphore(vk, device);
 
-		allocateAndBindSparseImage(	vk, device, m_context.getPhysicalDevice(), m_context.getInstanceInterface(),
+		allocateAndBindSparseImage(	vk, device, physicalDevice, instance,
 									imageCreateInfo, *bindSemaphore, m_context.getSparseQueue(),
-									m_context.getDefaultAllocator(), allocations, mapVkFormat(m_format), *storageImage	);
+									allocator, allocations, tcuFormat, *storageImage	);
 	}
 	else
 	{
-		storageAllocation = m_context.getDefaultAllocator().allocate(getImageMemoryRequirements(vk, device, *storageImage), MemoryRequirement::Any);
+		storageAllocation = allocator.allocate(getImageMemoryRequirements(vk, device, *storageImage), MemoryRequirement::Any);
 		VK_CHECK(vk.bindImageMemory(device, *storageImage, storageAllocation->getMemory(), storageAllocation->getOffset()));
 	}
 
-	Move<VkImageView>				storageImageView	= makeImageView(vk, device, *storageImage, VK_IMAGE_VIEW_TYPE_2D, m_format, makeImageSubresourceRange(VK_IMAGE_ASPECT_COLOR_BIT, 0u, 1u, 0u, 1u));
+	const auto						subresourceRange	= makeImageSubresourceRange(getImageAspectFlags(tcuFormat), 0u, 1u, 0u, 1u);
+	Move<VkImageView>				storageImageView	= makeImageView(vk, device, *storageImage, VK_IMAGE_VIEW_TYPE_2D, m_format, subresourceRange);
 	VkDescriptorImageInfo			storageImageInfo	= makeDescriptorImageInfo(DE_NULL, *storageImageView, VK_IMAGE_LAYOUT_GENERAL);
 
 	DescriptorSetUpdateBuilder		builder;
@@ -407,7 +429,10 @@
 	Move<VkCommandPool>				cmdPool				= createCommandPool(vk, device, VK_COMMAND_POOL_CREATE_TRANSIENT_BIT, queueFamilyIndex);
 	Move<VkCommandBuffer>			cmdBuffer			= allocateCommandBuffer(vk, device, *cmdPool, VK_COMMAND_BUFFER_LEVEL_PRIMARY);
 
+	const auto						layoutBarrier		= makeImageMemoryBarrier(0u, (VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_SHADER_WRITE_BIT), VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_GENERAL, *storageImage, subresourceRange);
+
 	beginCommandBuffer(vk, *cmdBuffer);
+		vk.cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, 0u, 0u, nullptr, 0u, nullptr, 1u, &layoutBarrier);
 		vk.cmdBindPipeline(*cmdBuffer, VK_PIPELINE_BIND_POINT_COMPUTE, *pipeline);
 		vk.cmdBindDescriptorSets(*cmdBuffer, VK_PIPELINE_BIND_POINT_COMPUTE, *pipelineLayout, 0u, 1u, &descriptorSet.get(), 0u, DE_NULL);
 		vk.cmdDispatch(*cmdBuffer, 8, 8, 1);
diff --git a/external/vulkancts/modules/vulkan/image/vktImageMismatchedWriteOpTests.cpp b/external/vulkancts/modules/vulkan/image/vktImageMismatchedWriteOpTests.cpp
new file mode 100644
index 0000000..53a42b4
--- /dev/null
+++ b/external/vulkancts/modules/vulkan/image/vktImageMismatchedWriteOpTests.cpp
@@ -0,0 +1,935 @@
+/*------------------------------------------------------------------------
+ * Vulkan Conformance Tests
+ * ------------------------
+ *
+ * Copyright (c) 2021 The Khronos Group Inc.
+ * Copyright (c) 2016 The Android Open Source Project
+ *
+ * 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 Testing writing and reading for mismatched vector sizes.
+ *//*--------------------------------------------------------------------*/
+
+#include "vktImageMismatchedWriteOpTests.hpp"
+
+#include "vktImageTexture.hpp"
+#include "vkImageUtil.hpp"
+#include "vkBuilderUtil.hpp"
+#include "vkObjUtil.hpp"
+#include "vktImageTestsUtil.hpp"
+#include "vkQueryUtil.hpp"
+#include "vkCmdUtil.hpp"
+#include "vkBarrierUtil.hpp"
+
+#include "tcuStringTemplate.hpp"
+#include "tcuTexture.hpp"
+#include "tcuTextureUtil.hpp"
+
+#define EPSILON_COMPARE(a,b,e)	((de::max((a),(b))-de::min((a),(b)))<=(e))
+
+using namespace vk;
+
+namespace vkt
+{
+namespace image
+{
+namespace
+{
+
+using tcu::TextureFormat;
+
+class MismatchedVectorSizesTest : public TestCase
+{
+public:
+	struct Params
+	{
+		VkFormat			vkFormat;
+		int					sourceWidth;
+		int					textureWidth;
+		int					textureHeight;
+	};
+	typedef de::SharedPtr<Params> ParamsSp;
+
+							MismatchedVectorSizesTest			(tcu::TestContext&			testCtx,
+																 const std::string&			name,
+																 const std::string&			description,
+																 const ParamsSp				params)
+		: TestCase	(testCtx, name, description)
+		, m_params	(params)
+	{
+		DE_ASSERT(getNumUsedChannels(params->vkFormat) <= params->sourceWidth);
+	}
+
+	virtual void			checkSupport						(Context&					context) const override;
+	virtual void			initPrograms						(SourceCollections&			programCollection) const override;
+	virtual TestInstance*	createInstance						(Context&					context) const override;
+
+private:
+	const ParamsSp	m_params;
+};
+
+class MismatchedVectorSizesTestInstance : public TestInstance
+{
+public:
+	using ParamsSp = MismatchedVectorSizesTest::ParamsSp;
+
+							MismatchedVectorSizesTestInstance   (Context&					context,
+																 const ParamsSp				params)
+		: TestInstance	(context)
+		, m_params		(params)
+	{
+	}
+
+	virtual tcu::TestStatus	iterate								(void)  override;
+	void					clear								(tcu::PixelBufferAccess&	data) const;
+	void					populate							(tcu::PixelBufferAccess&	data) const;
+	bool					compare								(tcu::PixelBufferAccess&	result,
+																 tcu::PixelBufferAccess&	reference) const;
+
+private:
+	const ParamsSp	m_params;
+};
+
+namespace ut
+{
+
+class StorageBuffer2D
+{
+public:
+									StorageBuffer2D		(Context&					context,
+														 const tcu::TextureFormat&	format,
+														 deUint32					width,
+														 deUint32					height);
+
+	VkBuffer						getBuffer			(void) const { return *m_buffer; }
+	VkDeviceSize					getSize				(void) const { return m_bufferSize; }
+
+	tcu::PixelBufferAccess&			getPixelAccess		(void) { return m_access[0]; }
+
+	void							flush				(void) { flushAlloc(m_context.getDeviceInterface(), m_context.getDevice(), *m_bufferMemory); }
+	void							invalidate			(void) { invalidateAlloc(m_context.getDeviceInterface(), m_context.getDevice(), *m_bufferMemory); }
+
+protected:
+	friend class StorageImage2D;
+	Allocation&						getMemory			(void) const { return *m_bufferMemory; }
+
+private:
+	Context&							m_context;
+	const tcu::TextureFormat			m_format;
+	const deUint32						m_width;
+	const deUint32						m_height;
+	const VkDeviceSize					m_bufferSize;
+	Move<VkBuffer>						m_buffer;
+	de::MovePtr<Allocation>				m_bufferMemory;
+	std::vector<tcu::PixelBufferAccess>	m_access;
+};
+
+class StorageImage2D
+{
+public:
+									StorageImage2D	(Context&				context,
+													 VkFormat				vkFormat,
+													 const int				width,
+													 const int				height,
+													 bool					sparse = false);
+
+	VkImageView						getView			(void) const	{ return *m_view; }
+
+	tcu::PixelBufferAccess&			getPixelAccess	(void)			{ return m_buffer.getPixelAccess(); }
+
+	void							flush			(void) { m_buffer.flush(); }
+	void							invalidate		(void) { m_buffer.invalidate(); }
+
+	void							upload			(const VkCommandBuffer	cmdBuffer);
+	void							download		(const VkCommandBuffer	cmdBuffer);
+
+private:
+	Context&								m_context;
+	const bool								m_sparse;
+	const int								m_width;
+	const int								m_height;
+	const vk::VkFormat						m_vkFormat;
+	const tcu::TextureFormat				m_texFormat;
+	StorageBuffer2D							m_buffer;
+
+	VkImageLayout							m_layout;
+	Move<VkImage>							m_image;
+	Move<VkImageView>						m_view;
+	Move<VkSemaphore>						m_semaphore;
+	std::vector<de::SharedPtr<Allocation>>	m_allocations;
+	de::MovePtr<Allocation>					m_imageMemory;
+};
+
+StorageImage2D::StorageImage2D (Context& context, VkFormat vkFormat, const int width, const int height, bool sparse)
+	: m_context		(context)
+	, m_sparse		(sparse)
+	, m_width		(width)
+	, m_height		(height)
+	, m_vkFormat	(vkFormat)
+	, m_texFormat	(mapVkFormat(m_vkFormat))
+	, m_buffer		(m_context, m_texFormat, m_width, m_height)
+{
+	const DeviceInterface&			vki					= m_context.getDeviceInterface();
+	const VkDevice					dev					= m_context.getDevice();
+	const deUint32					queueFamilyIndex	= m_context.getUniversalQueueFamilyIndex();
+	Allocator&						allocator			= m_context.getDefaultAllocator();
+
+	// Create an image
+	{
+		VkImageCreateFlags				imageCreateFlags	= m_sparse? (VK_IMAGE_CREATE_SPARSE_BINDING_BIT | VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT) : 0u;
+		VkImageUsageFlags				imageUsageFlags		= VK_IMAGE_USAGE_STORAGE_BIT | VK_IMAGE_USAGE_TRANSFER_SRC_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT;
+
+		const VkImageCreateInfo			imageCreateInfo		=
+		{
+			VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO,			// VkStructureType			sType;
+			DE_NULL,										// const void*				pNext;
+			imageCreateFlags,								// VkImageCreateFlags		flags;
+			VK_IMAGE_TYPE_2D,								// VkImageType				imageType;
+			m_vkFormat,										// VkFormat					format;
+			{ deUint32(m_width), deUint32(m_height), 1u },	// VkExtent3D				extent;
+			1u,												// deUint32					mipLevels;
+			1u,												// deUint32					arrayLayers;
+			VK_SAMPLE_COUNT_1_BIT,							// VkSampleCountFlagBits	samples;
+			VK_IMAGE_TILING_OPTIMAL,						// VkImageTiling			tiling;
+			imageUsageFlags,								// VkImageUsageFlags		usage;
+			VK_SHARING_MODE_EXCLUSIVE,						// VkSharingMode			sharingMode;
+			1u,												// deUint32					queueFamilyIndexCount;
+			&queueFamilyIndex,								// const deUint32*			pQueueFamilyIndices;
+			(m_layout = VK_IMAGE_LAYOUT_UNDEFINED)			// VkImageLayout			initialLayout;
+		};
+
+		m_image		= createImage(vki, dev, &imageCreateInfo);
+
+		if (m_sparse)
+		{
+			m_semaphore = createSemaphore(vki, dev);
+
+			allocateAndBindSparseImage(	vki, dev, m_context.getPhysicalDevice(), m_context.getInstanceInterface(),
+										imageCreateInfo, *m_semaphore, m_context.getSparseQueue(),
+										allocator, m_allocations, mapVkFormat(m_vkFormat), *m_image	);
+		}
+		else
+		{
+			m_imageMemory = allocator.allocate(getImageMemoryRequirements(vki, dev, *m_image), MemoryRequirement::Any);
+			VK_CHECK(vki.bindImageMemory(dev, *m_image, m_imageMemory->getMemory(), m_imageMemory->getOffset()));
+		}
+
+		VkImageSubresourceRange			subresourceRange	= makeImageSubresourceRange(VK_IMAGE_ASPECT_COLOR_BIT, 0u, 1u, 0u, 1u);
+		m_view	= makeImageView(vki, dev, *m_image, VK_IMAGE_VIEW_TYPE_2D, m_vkFormat, subresourceRange);
+	}
+}
+
+void StorageImage2D::upload (const VkCommandBuffer cmdBuffer)
+{
+	const DeviceInterface&			vki							= m_context.getDeviceInterface();
+	const VkImageSubresourceRange	fullImageSubresourceRange	= makeImageSubresourceRange(VK_IMAGE_ASPECT_COLOR_BIT, 0u, 1u, 0u, 1u);
+	const VkBufferImageCopy			copyRegion					= makeBufferImageCopy(makeExtent3D(tcu::IVec3(m_width, m_height, 1)), 1u);
+
+	{
+		const VkBufferMemoryBarrier bufferBarrier = makeBufferMemoryBarrier(
+			VK_ACCESS_HOST_WRITE_BIT, VK_ACCESS_TRANSFER_READ_BIT,
+			m_buffer.getBuffer(), 0ull, m_buffer.getSize());
+
+		const VkImageMemoryBarrier beforeCopyBarrier = makeImageMemoryBarrier(
+			(VkAccessFlagBits)0, VK_ACCESS_TRANSFER_WRITE_BIT,
+			m_layout, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
+			*m_image, fullImageSubresourceRange);
+
+		vki.cmdPipelineBarrier(cmdBuffer, VK_PIPELINE_STAGE_HOST_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, (VkDependencyFlags)0,
+							   0, (const VkMemoryBarrier*)DE_NULL, 1, &bufferBarrier, 1, &beforeCopyBarrier);
+	}
+
+	vki.cmdCopyBufferToImage(cmdBuffer, m_buffer.getBuffer(), *m_image, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 1u, &copyRegion);
+
+	{
+		const VkBufferMemoryBarrier bufferBarrier = makeBufferMemoryBarrier(
+			VK_ACCESS_TRANSFER_READ_BIT, (VkAccessFlags)0,
+			m_buffer.getBuffer(), 0ull, m_buffer.getSize());
+
+		m_layout = VK_IMAGE_LAYOUT_GENERAL;
+		const VkImageMemoryBarrier afterCopyBarrier = makeImageMemoryBarrier(
+			VK_ACCESS_TRANSFER_WRITE_BIT, VK_ACCESS_SHADER_WRITE_BIT,
+			VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, m_layout,
+			*m_image, fullImageSubresourceRange);
+
+		vki.cmdPipelineBarrier(cmdBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, (VkDependencyFlags)0,
+							   0, (const VkMemoryBarrier*)DE_NULL, 1, &bufferBarrier, 1, &afterCopyBarrier);
+	}
+}
+
+void StorageImage2D::download (const VkCommandBuffer cmdBuffer)
+{
+	const DeviceInterface&			vki							= m_context.getDeviceInterface();
+	const VkImageSubresourceRange	fullImageSubresourceRange	= makeImageSubresourceRange(VK_IMAGE_ASPECT_COLOR_BIT, 0u, 1u, 0u, 1u);
+	const VkBufferImageCopy			copyRegion					= makeBufferImageCopy(makeExtent3D(tcu::IVec3(m_width, m_height, 1)), 1u);
+
+	{
+		const VkBufferMemoryBarrier bufferBarrier = makeBufferMemoryBarrier(
+			(VkAccessFlags)0, VK_ACCESS_TRANSFER_WRITE_BIT,
+			m_buffer.getBuffer(), 0ull, m_buffer.getSize());
+
+		const VkImageMemoryBarrier beforeCopyBarrier = makeImageMemoryBarrier(
+			VK_ACCESS_SHADER_WRITE_BIT, VK_ACCESS_TRANSFER_READ_BIT,
+			m_layout, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,
+			*m_image, fullImageSubresourceRange);
+
+		vki.cmdPipelineBarrier(cmdBuffer, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, (VkDependencyFlags)0,
+							   0, (const VkMemoryBarrier*)DE_NULL, 1, &bufferBarrier, 1, &beforeCopyBarrier);
+	}
+
+	vki.cmdCopyImageToBuffer(cmdBuffer, *m_image, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, m_buffer.getBuffer(), 1, &copyRegion);
+
+	{
+		const VkBufferMemoryBarrier bufferBarrier = makeBufferMemoryBarrier(
+			VK_ACCESS_TRANSFER_WRITE_BIT, VK_ACCESS_HOST_READ_BIT,
+			m_buffer.getBuffer(), 0ull, m_buffer.getSize());
+
+		const VkImageMemoryBarrier afterCopyBarrier = makeImageMemoryBarrier(
+			VK_ACCESS_TRANSFER_READ_BIT, (VkAccessFlags)0,
+			VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, m_layout,
+			*m_image, fullImageSubresourceRange);
+
+		vki.cmdPipelineBarrier(cmdBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_HOST_BIT, (VkDependencyFlags)0,
+							   0, (const VkMemoryBarrier*)DE_NULL, 1, &bufferBarrier, 1, &afterCopyBarrier);
+	}
+
+}
+
+StorageBuffer2D::StorageBuffer2D (Context& context, const tcu::TextureFormat& format, deUint32 width, deUint32 height)
+	: m_context		(context)
+	, m_format		(format)
+	, m_width		(width)
+	, m_height		(height)
+	, m_bufferSize	(m_width * m_height * m_format.getPixelSize())
+{
+	const DeviceInterface&			vki					= m_context.getDeviceInterface();
+	const VkDevice					dev					= m_context.getDevice();
+	const deUint32					queueFamilyIndex	= m_context.getUniversalQueueFamilyIndex();
+	Allocator&						allocator			= m_context.getDefaultAllocator();
+
+	const VkBufferUsageFlags		bufferUsageFlags	= VK_BUFFER_USAGE_STORAGE_BUFFER_BIT | VK_BUFFER_USAGE_TRANSFER_SRC_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT;
+
+	const VkBufferCreateInfo		bufferCreateInfo	=
+	{
+		VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO,		// VkStructureType			sType;
+		DE_NULL,									// const void*				pNext;
+		0u,											// VkBufferCreateFlags		flags;
+		m_bufferSize,								// VkDeviceSize				size;
+		bufferUsageFlags,							// VkBufferUsageFlags		usage;
+		VK_SHARING_MODE_EXCLUSIVE,					// VkSharingMode			sharingMode;
+		1u,											// deUint32					queueFamilyIndexCount;
+		&queueFamilyIndex							//	const deUint32*			pQueueFamilyIndices;
+	};
+
+	m_buffer		= createBuffer(vki, dev, &bufferCreateInfo);
+
+	m_bufferMemory	= allocator.allocate(getBufferMemoryRequirements(vki, dev, *m_buffer), MemoryRequirement::HostVisible);
+	VK_CHECK(vki.bindBufferMemory(dev, *m_buffer, m_bufferMemory->getMemory(), m_bufferMemory->getOffset()));
+
+	m_access.emplace_back(m_format, tcu::IVec3(m_width, m_height, 1), m_bufferMemory->getHostPtr());
+}
+
+tcu::Vec4 gluePixels (const tcu::Vec4& a, const tcu::Vec4& b, const int pivot)
+{
+	tcu::Vec4 result;
+	for (int i = 0; i < pivot; ++i) result[i] = a[i];
+	for (int i = pivot; i < 4; ++i) result[i] = b[i];
+	return result;
+}
+
+template<class T, int N>
+bool comparePixels(const tcu::Vector<T,N>& res, const tcu::Vector<T,N>& ref, const int targetWidth, const T eps = {})
+{
+	bool		ok		= true;
+
+	for (int i = 0; ok && i < targetWidth; ++i)
+	{
+		ok &= EPSILON_COMPARE(res[i], ref[i], eps);
+	}
+
+	return ok;
+}
+
+} // ut
+
+TestInstance* MismatchedVectorSizesTest::createInstance	(Context& context) const
+{
+	return new MismatchedVectorSizesTestInstance(context, m_params);
+}
+
+enum class OpCapability
+{
+	Shader,
+	StorageImageExtendedFormats,
+	Int64ImageEXT
+};
+
+const char* OpCapabilityToStr(const OpCapability& cap)
+{
+	switch (cap)
+	{
+		case OpCapability::Shader:						return "Shader";
+		case OpCapability::StorageImageExtendedFormats:	return "StorageImageExtendedFormats";
+		case OpCapability::Int64ImageEXT:				return "Int64ImageEXT";
+	}
+	DE_ASSERT(DE_FALSE);
+	return nullptr;
+}
+
+struct FormatInfo {
+	VkFormat		vkFormat;
+	const char*		spirvName;
+	OpCapability	capability;
+}
+formatsInfos[] =
+{
+	{ VK_FORMAT_R32G32B32A32_SFLOAT,		"Rgba32f",		OpCapability::Shader						},
+	{ VK_FORMAT_R16G16B16A16_SFLOAT,		"Rgba16f",		OpCapability::Shader						},
+	{ VK_FORMAT_R32_SFLOAT,					"R32f",			OpCapability::Shader						},
+	{ VK_FORMAT_R8G8B8A8_UNORM,				"Rgba8",		OpCapability::Shader						},
+	{ VK_FORMAT_R8G8B8A8_SNORM,				"Rgba8Snorm",	OpCapability::Shader						},
+	{ VK_FORMAT_R32G32_SFLOAT,				"Rg32f",		OpCapability::StorageImageExtendedFormats	},
+	{ VK_FORMAT_R16G16_SFLOAT,				"Rg16f",		OpCapability::StorageImageExtendedFormats	},
+	{ VK_FORMAT_B10G11R11_UFLOAT_PACK32,	"R11fG11fB10f",	OpCapability::StorageImageExtendedFormats	},
+	{ VK_FORMAT_R16_SFLOAT,					"R16f",			OpCapability::StorageImageExtendedFormats	},
+	{ VK_FORMAT_R16G16B16A16_UNORM,			"Rgba16",		OpCapability::StorageImageExtendedFormats	},
+	{ VK_FORMAT_A2B10G10R10_UNORM_PACK32,	"Rgb10A2",		OpCapability::StorageImageExtendedFormats	},
+	{ VK_FORMAT_R16G16_UNORM,				"Rg16",			OpCapability::StorageImageExtendedFormats	},
+	{ VK_FORMAT_R8G8_UNORM,					"Rg8",			OpCapability::StorageImageExtendedFormats	},
+	{ VK_FORMAT_R16_UNORM,					"R16",			OpCapability::StorageImageExtendedFormats	},
+	{ VK_FORMAT_R8_UNORM,					"R8",			OpCapability::StorageImageExtendedFormats	},
+	{ VK_FORMAT_R16G16B16A16_SNORM,			"Rgba16Snorm",	OpCapability::StorageImageExtendedFormats	},
+	{ VK_FORMAT_R16G16_SNORM,				"Rg16Snorm",	OpCapability::StorageImageExtendedFormats	},
+	{ VK_FORMAT_R8G8_SNORM,					"Rg8Snorm",		OpCapability::StorageImageExtendedFormats	},
+	{ VK_FORMAT_R16_SNORM,					"R16Snorm",		OpCapability::StorageImageExtendedFormats	},
+	{ VK_FORMAT_R8_SNORM,					"R8Snorm",		OpCapability::StorageImageExtendedFormats	},
+	{ VK_FORMAT_R32G32B32A32_SINT,			"Rgba32i",		OpCapability::Shader						},
+	{ VK_FORMAT_R16G16B16A16_SINT,			"Rgba16i",		OpCapability::Shader						},
+	{ VK_FORMAT_R8G8B8A8_SINT,				"Rgba8i",		OpCapability::Shader						},
+	{ VK_FORMAT_R32_SINT,					"R32i",			OpCapability::Shader						},
+	{ VK_FORMAT_R32G32_SINT,				"Rg32i",		OpCapability::StorageImageExtendedFormats	},
+	{ VK_FORMAT_R16G16_SINT,				"Rg16i",		OpCapability::StorageImageExtendedFormats	},
+	{ VK_FORMAT_R8G8_SINT,					"Rg8i",			OpCapability::StorageImageExtendedFormats	},
+	{ VK_FORMAT_R16_SINT,					"R16i",			OpCapability::StorageImageExtendedFormats	},
+	{ VK_FORMAT_R8_SINT,					"R8i",			OpCapability::StorageImageExtendedFormats	},
+	{ VK_FORMAT_R32G32B32A32_UINT,			"Rgba32ui",		OpCapability::Shader						},
+	{ VK_FORMAT_R16G16B16A16_UINT,			"Rgba16ui",		OpCapability::Shader						},
+	{ VK_FORMAT_R8G8B8A8_UINT,				"Rgba8ui",		OpCapability::Shader						},
+	{ VK_FORMAT_R32_UINT,					"R32ui",		OpCapability::Shader						},
+	{ VK_FORMAT_A2B10G10R10_UINT_PACK32,	"Rgb10a2ui",	OpCapability::StorageImageExtendedFormats	},
+	{ VK_FORMAT_R32G32_UINT,				"Rg32ui",		OpCapability::StorageImageExtendedFormats	},
+	{ VK_FORMAT_R16G16_UINT,				"Rg16ui",		OpCapability::StorageImageExtendedFormats	},
+	{ VK_FORMAT_R8G8_UINT,					"Rg8ui",		OpCapability::StorageImageExtendedFormats	},
+	{ VK_FORMAT_R16_UINT,					"R16ui",		OpCapability::StorageImageExtendedFormats	},
+	{ VK_FORMAT_R8_UINT,					"R8ui",			OpCapability::StorageImageExtendedFormats	},
+	{ VK_FORMAT_R64_UINT,					"R64ui",		OpCapability::Int64ImageEXT					},
+	{ VK_FORMAT_R64_SINT,					"R64i",			OpCapability::Int64ImageEXT					}
+};
+
+const FormatInfo* findFormatInfo(VkFormat vkFormat)
+{
+	for (const auto& formatInfo : formatsInfos)
+	{
+		if (formatInfo.vkFormat == vkFormat)
+			return &formatInfo;
+	}
+	DE_ASSERT(DE_FALSE);
+	return nullptr;
+}
+
+const char* getChannelStr (const TextureFormat& format)
+{
+	switch (format.type)
+	{
+		case TextureFormat::FLOAT:				return "float";
+		case TextureFormat::SIGNED_INT32:		return "sint";
+		case TextureFormat::UNSIGNED_INT32:		return "uint";
+		case TextureFormat::FLOAT64:			return "double";
+		case TextureFormat::SIGNED_INT64:		return "slong";
+		case TextureFormat::UNSIGNED_INT64:		return "ulong";
+		default:								DE_ASSERT(DE_FALSE);
+	}
+
+	return nullptr;
+}
+
+TextureFormat makeBufferFormat (tcu::TextureChannelClass channelClass, bool doubled)
+{
+	auto	channelType	= TextureFormat::ChannelType::CHANNELTYPE_LAST;
+	switch (channelClass)
+	{
+		case tcu::TEXTURECHANNELCLASS_SIGNED_INTEGER:
+			channelType	= doubled ? TextureFormat::ChannelType::SIGNED_INT64 : TextureFormat::ChannelType::SIGNED_INT32;
+			break;
+		case tcu::TEXTURECHANNELCLASS_UNSIGNED_INTEGER:
+			channelType	= doubled ? TextureFormat::ChannelType::UNSIGNED_INT64 : TextureFormat::ChannelType::UNSIGNED_INT32;
+			break;
+		default:
+			channelType	= doubled ? TextureFormat::ChannelType::FLOAT64 : TextureFormat::ChannelType::FLOAT;
+	}
+	return TextureFormat(TextureFormat::ChannelOrder::RGBA, channelType);
+}
+
+void MismatchedVectorSizesTest::checkSupport (Context& context) const
+{
+	const FormatInfo* info = findFormatInfo(m_params->vkFormat);
+
+	// capabilities that may be used in the shader
+	if (info->capability == OpCapability::Int64ImageEXT)
+	{
+		const VkPhysicalDeviceFeatures deviceFeatures = getPhysicalDeviceFeatures(context.getInstanceInterface(), context.getPhysicalDevice());
+		if(!deviceFeatures.shaderInt64)
+		{
+			TCU_THROW(NotSupportedError, "Device feature shaderInt64 is not supported");
+		}
+		context.requireDeviceFunctionality("VK_EXT_shader_image_atomic_int64");
+	}
+
+	// extensions used statically in the shader
+	context.requireDeviceFunctionality("VK_KHR_variable_pointers");
+	context.requireDeviceFunctionality("VK_KHR_storage_buffer_storage_class");
+
+	VkFormatProperties formatProperties = getPhysicalDeviceFormatProperties(context.getInstanceInterface(), context.getPhysicalDevice(), m_params->vkFormat);
+
+	if ((formatProperties.optimalTilingFeatures & VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT) == 0)
+	{
+		TCU_THROW(NotSupportedError, "Creating storage image with this format is not supported");
+	}
+}
+
+
+void MismatchedVectorSizesTest::initPrograms (SourceCollections& programCollection) const
+{
+	tcu::StringTemplate shaderTemplate(R"(
+
+							  ${ENABLING_CAPABILITIES}
+							  ${CAPABILITY_INT64}
+							  OpExtension      "SPV_KHR_variable_pointers"
+							  OpExtension      "SPV_KHR_storage_buffer_storage_class"
+							  ${EXTENSIONS}
+
+					%std450 = OpExtInstImport  "GLSL.std.450"
+							  OpMemoryModel    Logical GLSL450
+
+							  OpEntryPoint     GLCompute %main "main" %gid %image %buffer
+							  OpExecutionMode  %main LocalSize 1 1 1
+
+							  OpDecorate       %gid BuiltIn GlobalInvocationId
+
+							  OpDecorate       %image DescriptorSet 0
+							  OpDecorate       %image Binding 0
+
+							  OpDecorate       %rta    ArrayStride ${ARRAY_STRIDE}
+							  OpMemberDecorate %struct 0 Offset 0
+							  OpDecorate       %struct Block
+							  OpDecorate       %buffer DescriptorSet 0
+							  OpDecorate       %buffer Binding 1
+
+					  %void = OpTypeVoid
+				   %fn_void = OpTypeFunction %void
+
+					${TYPES_INT64}
+
+					 %float = OpTypeFloat 32
+					  %sint = OpTypeInt 32 1
+					  %uint = OpTypeInt 32 0
+
+				   %v4float = OpTypeVector %float 4
+				   %v3float = OpTypeVector %float 3
+				   %v2float = OpTypeVector %float 2
+
+					%v4sint = OpTypeVector %sint 4
+					%v3sint = OpTypeVector %sint 3
+					%v2sint = OpTypeVector %sint 2
+
+					%v4uint = OpTypeVector %uint 4
+					%v3uint = OpTypeVector %uint 3
+					%v2uint = OpTypeVector %uint 2
+
+			 %v3uint_in_ptr = OpTypePointer Input %v3uint
+					   %gid = OpVariable %v3uint_in_ptr Input
+
+				%image_type = OpTypeImage %${SAMPLED_TYPE} 2D 0 0 0 2 ${SPIRV_IMAGE_FORMAT}
+				 %image_ptr = OpTypePointer UniformConstant %image_type
+					 %image = OpVariable %image_ptr UniformConstant
+
+			   %image_width = OpConstant %sint ${IMAGE_WIDTH}
+			  %image_height = OpConstant %sint ${IMAGE_HEIGHT}
+
+				%rta_offset = OpConstant %uint 0
+					   %rta = OpTypeRuntimeArray %v4${SAMPLED_TYPE}
+					%struct = OpTypeStruct %rta
+				  %ssbo_ptr = OpTypePointer StorageBuffer %struct
+					%buffer = OpVariable %ssbo_ptr StorageBuffer
+
+				%red_offset = OpConstant %uint 0
+			  %green_offset = OpConstant %uint 1
+			   %blue_offset = OpConstant %uint 2
+			  %alpha_offset = OpConstant %uint 3
+
+	   %${SAMPLED_TYPE}_PTR = OpTypePointer StorageBuffer %${SAMPLED_TYPE}
+			  %var_sint_ptr = OpTypePointer Function %sint
+
+				; Entry main procedure
+					  %main = OpFunction %void None %fn_void
+					 %entry = OpLabel
+
+					 %index = OpVariable %var_sint_ptr Function
+
+				; Transform gl_GlobalInvocationID.xyz to ivec2(gl_GlobalInvocationID.xy)
+						%id = OpLoad %v3uint %gid
+
+					%u_id_x = OpCompositeExtract %uint %id 0
+					%s_id_x = OpBitcast %sint %u_id_x
+
+					%u_id_y = OpCompositeExtract %uint %id 1
+					%s_id_y = OpBitcast %sint %u_id_y
+
+					 %id_xy = OpCompositeConstruct %v2sint %s_id_x %s_id_y
+
+				; Calculate index in buffer
+					   %mul = OpIMul %sint %s_id_y %image_width
+					   %add = OpIAdd %sint %mul %s_id_x
+							  OpStore %index %add
+
+				; Final image variable used to read from or write to
+					   %img = OpLoad %image_type %image
+
+				; Accessors to buffer components
+					   %idx = OpLoad %sint %index
+			  %alpha_access = OpAccessChain %${SAMPLED_TYPE}_PTR %buffer %rta_offset %idx %alpha_offset
+			   %blue_access = OpAccessChain %${SAMPLED_TYPE}_PTR %buffer %rta_offset %idx %blue_offset
+			  %green_access = OpAccessChain %${SAMPLED_TYPE}_PTR %buffer %rta_offset %idx %green_offset
+				%red_access = OpAccessChain %${SAMPLED_TYPE}_PTR %buffer %rta_offset %idx %red_offset
+
+					   %red = OpLoad %${SAMPLED_TYPE} %red_access
+					 %green = OpLoad %${SAMPLED_TYPE} %green_access
+					  %blue = OpLoad %${SAMPLED_TYPE} %blue_access
+					 %alpha = OpLoad %${SAMPLED_TYPE} %alpha_access
+
+							  ${WRITE_TO_IMAGE}
+
+							  OpReturn
+							  OpFunctionEnd
+	)");
+
+	const std::string typesInt64(R"(
+					 %slong = OpTypeInt 64 1
+					 %ulong = OpTypeInt 64 0
+
+				   %v4slong = OpTypeVector %slong 4
+				   %v3slong = OpTypeVector %slong 3
+				   %v2slong = OpTypeVector %slong 2
+
+				   %v4ulong = OpTypeVector %ulong 4
+				   %v3ulong = OpTypeVector %ulong 3
+				   %v2ulong = OpTypeVector %ulong 2
+	)");
+
+	const tcu::StringTemplate writeFromSingleComponent(R"(
+					 OpImageWrite %img %id_xy %red
+	)");
+	const tcu::StringTemplate writeFromTwoComponents(R"(
+			   %rg = OpCompositeConstruct %v2${SAMPLED_TYPE} %red %green
+					 OpImageWrite %img %id_xy %rg
+	)");
+
+	const tcu::StringTemplate writeFromThreeComponents(R"(
+			  %rgb = OpCompositeConstruct %v3${SAMPLED_TYPE} %red %green %blue
+					 OpImageWrite %img %id_xy %rgb
+	)");
+	const tcu::StringTemplate writeFromFourComponents(R"(
+			 %rgba = OpCompositeConstruct %v4${SAMPLED_TYPE} %red %green %blue %alpha
+					 OpImageWrite %img %id_xy %rgba
+	)");
+
+
+	std::map<std::string, std::string>	specs;
+
+	const FormatInfo*					info		= findFormatInfo(m_params->vkFormat);
+	const TextureFormat					texFormat	= mapVkFormat(m_params->vkFormat);
+	const tcu::TextureFormat			buffFormat	= makeBufferFormat(getTextureChannelClass(texFormat.type), info->capability == OpCapability::Int64ImageEXT);
+
+	specs["SPIRV_IMAGE_FORMAT"]						= info->spirvName;
+	specs["ENABLING_CAPABILITIES"]					= std::string("OpCapability ") + OpCapabilityToStr(info->capability);
+	specs["CAPABILITY_INT64"]						= "";
+	specs["EXTENSIONS"]								= "";
+	specs["TYPES_INT64"]							= "";
+
+	if (info->capability == OpCapability::Int64ImageEXT)
+	{
+		specs["EXTENSIONS"]							= "OpExtension	   \"SPV_EXT_shader_image_int64\"";
+		specs["CAPABILITY_INT64"]					= std::string("OpCapability Int64");
+		specs["TYPES_INT64"]						= typesInt64;
+	}
+
+
+	specs["SAMPLED_TYPE"]							= getChannelStr(buffFormat);
+	specs["IMAGE_WIDTH"]							= std::to_string(m_params->textureWidth);
+	specs["IMAGE_HEIGHT"]							= std::to_string(m_params->textureHeight);
+	specs["ARRAY_STRIDE"]							= std::to_string(tcu::getChannelSize(buffFormat.type) * tcu::getNumUsedChannels(buffFormat.order));
+
+	specs["WRITE_TO_IMAGE"]							= (m_params->sourceWidth == 1
+													   ? writeFromSingleComponent
+													   : m_params->sourceWidth == 2
+														 ? writeFromTwoComponents
+														 : m_params->sourceWidth == 3
+														   ? writeFromThreeComponents
+														   : writeFromFourComponents).specialize(specs);
+
+	programCollection.spirvAsmSources.add("comp")
+			<< shaderTemplate.specialize(specs)
+			<< vk::SpirVAsmBuildOptions(programCollection.usedVulkanVersion, vk::SPIRV_VERSION_1_4, true);
+}
+
+void MismatchedVectorSizesTestInstance::clear (tcu::PixelBufferAccess& pixels) const
+{
+	const auto channelClass = tcu::getTextureChannelClass(mapVkFormat(m_params->vkFormat).type);
+	switch (channelClass)
+	{
+		case tcu::TEXTURECHANNELCLASS_SIGNED_INTEGER:
+			tcu::clear(pixels, tcu::IVec4(-1, -2, -3, -4));
+			break;
+
+		case tcu::TEXTURECHANNELCLASS_UNSIGNED_INTEGER:
+			tcu::clear(pixels, tcu::UVec4(1, 2, 3, 4));
+			break;
+
+		default:
+			tcu::clear(pixels, tcu::Vec4(0.2f, 0.3f, 0.4f, 0.5f));
+	}
+}
+
+void MismatchedVectorSizesTestInstance::populate (tcu::PixelBufferAccess& pixels) const
+{
+	const auto				texFormat			= mapVkFormat(m_params->vkFormat);
+	const auto				bitDepth			= tcu::getTextureFormatBitDepth(texFormat);
+	const auto				channelClass		= tcu::getTextureChannelClass(texFormat.type);
+
+	const tcu::IVec4		signedMinValues		(bitDepth[0] ? deIntMinValue32(deMin32(bitDepth[0], 32)) : (-1),
+												 bitDepth[1] ? deIntMinValue32(deMin32(bitDepth[1], 32)) : (-1),
+												 bitDepth[2] ? deIntMinValue32(deMin32(bitDepth[2], 32)) : (-1),
+												 bitDepth[3] ? deIntMinValue32(deMin32(bitDepth[3], 32)) : (-1));
+
+	const tcu::IVec4		signedMaxValues		(bitDepth[0] ? deIntMaxValue32(deMin32(bitDepth[0], 32)) : 1,
+												 bitDepth[1] ? deIntMaxValue32(deMin32(bitDepth[1], 32)) : 1,
+												 bitDepth[2] ? deIntMaxValue32(deMin32(bitDepth[2], 32)) : 1,
+												 bitDepth[3] ? deIntMaxValue32(deMin32(bitDepth[3], 32)) : 1);
+
+	const tcu::UVec4		unsignedMinValues	(0u);
+
+	const tcu::UVec4		unsignedMaxValues	(bitDepth[0] ? deUintMaxValue32(deMin32(bitDepth[0], 32)) : 1u,
+												 bitDepth[1] ? deUintMaxValue32(deMin32(bitDepth[1], 32)) : 1u,
+												 bitDepth[2] ? deUintMaxValue32(deMin32(bitDepth[2], 32)) : 1u,
+												 bitDepth[3] ? deUintMaxValue32(deMin32(bitDepth[3], 32)) : 1u);
+
+	auto					nextSigned			= [&](tcu::IVec4& color)
+	{
+		color[0] = (static_cast<deInt64>(color[0] + 2) < signedMaxValues[0]) ? (color[0] + 2) : signedMinValues[0];
+		color[1] = (static_cast<deInt64>(color[1] + 3) < signedMaxValues[1]) ? (color[1] + 3) : signedMinValues[1];
+		color[2] = (static_cast<deInt64>(color[2] + 5) < signedMaxValues[2]) ? (color[2] + 5) : signedMinValues[2];
+		color[3] = (static_cast<deInt64>(color[3] + 7) < signedMaxValues[3]) ? (color[3] + 7) : signedMinValues[3];
+	};
+
+	auto					nextUnsigned		= [&](tcu::UVec4& color)
+	{
+		color[0] = (static_cast<deUint64>(color[0] + 2) < unsignedMaxValues[0]) ? (color[0] + 2) : unsignedMinValues[0];
+		color[1] = (static_cast<deUint64>(color[1] + 3) < unsignedMaxValues[1]) ? (color[1] + 3) : unsignedMinValues[1];
+		color[2] = (static_cast<deUint64>(color[2] + 5) < unsignedMaxValues[2]) ? (color[2] + 5) : unsignedMinValues[2];
+		color[3] = (static_cast<deUint64>(color[3] + 7) < unsignedMaxValues[3]) ? (color[3] + 7) : unsignedMinValues[3];
+	};
+
+	double					floatsData			[4];
+	tcu::PixelBufferAccess	floatsAccess		(texFormat, 1, 1, 1, floatsData);
+	tcu::Vec4				tmpFloats			(0.0f);
+
+	const float				divider				= static_cast<float>(m_params->textureHeight);
+	const tcu::Vec4			ufloatStep			(1.0f/(divider*1.0f), 1.0f/(divider*2.0f), 1.0f/(divider*3.0f), 1.0f/(divider*5.0f));
+	const tcu::Vec4			sfloatStep			(2.0f/(divider*1.0f), 2.0f/(divider*2.0f), 2.0f/(divider*3.0f), 2.0f/(divider*5.0f));
+
+	tcu::IVec4				signedColor			(0);
+	tcu::UVec4				unsignedColor		(0u);
+	tcu::Vec4				ufloatColor			(0.0f);
+	tcu::Vec4				sfloatColor			(-1.0f);
+
+	for (int y = 0; y < m_params->textureHeight; ++y)
+	{
+		for (int x = 0; x < m_params->textureWidth; ++x)
+		{
+			switch (channelClass)
+			{
+				case tcu::TEXTURECHANNELCLASS_SIGNED_INTEGER:
+					pixels.setPixel(signedColor, x, y);
+					break;
+
+				case tcu::TEXTURECHANNELCLASS_UNSIGNED_INTEGER:
+					pixels.setPixel(unsignedColor, x, y);
+					break;
+
+				case tcu::TEXTURECHANNELCLASS_SIGNED_FIXED_POINT:
+					floatsAccess.setPixel(sfloatColor, 0, 0);
+					tmpFloats = ut::gluePixels(floatsAccess.getPixel(0, 0), sfloatColor, tcu::getNumUsedChannels(texFormat.order));
+					pixels.setPixel(tmpFloats, x, y);
+					break;
+
+				// TEXTURECHANNELCLASS_FLOATING_POINT or
+				// TEXTURECHANNELCLASS_UNSIGNED_FIXED_POINT
+				default:
+					floatsAccess.setPixel(ufloatColor, 0, 0);
+					tmpFloats = ut::gluePixels(floatsAccess.getPixel(0, 0), ufloatColor, tcu::getNumUsedChannels(texFormat.order));
+					pixels.setPixel(tmpFloats, x, y);
+					break;
+			}
+		}
+
+		nextSigned		(signedColor);
+		nextUnsigned	(unsignedColor);
+		sfloatColor +=	sfloatStep;
+		ufloatColor +=	ufloatStep;
+	}
+}
+
+bool MismatchedVectorSizesTestInstance::compare (tcu::PixelBufferAccess& result, tcu::PixelBufferAccess& reference) const
+{
+	const tcu::TextureFormat			texFormat		= mapVkFormat(m_params->vkFormat);
+	const tcu::TextureChannelClass		channelClass	= tcu::getTextureChannelClass(texFormat.type);
+	const int							targetWidth		= getNumUsedChannels(texFormat.order);
+
+	bool								doContinue		= true;
+
+	for (int y = 0; doContinue && y < m_params->textureHeight; ++y)
+	{
+		for (int x = 0; doContinue && x < m_params->textureWidth; ++x)
+		{
+			switch (channelClass)
+			{
+				case tcu::TEXTURECHANNELCLASS_SIGNED_INTEGER:
+					doContinue	= ut::comparePixels(result.getPixelInt(x,y),  reference.getPixelInt(x,y), targetWidth );
+					break;
+				case tcu::TEXTURECHANNELCLASS_UNSIGNED_INTEGER:
+					doContinue	= ut::comparePixels(result.getPixelUint(x,y), reference.getPixelUint(x,y), targetWidth );
+					break;
+				default:
+					doContinue	= ut::comparePixels(result.getPixel(x,y),     reference.getPixel(x,y),	   targetWidth, 0.0005f);
+					break;
+			}
+		}
+	}
+
+	return doContinue;
+}
+
+tcu::TestStatus MismatchedVectorSizesTestInstance::iterate (void)
+{
+	const DeviceInterface&			vki					= m_context.getDeviceInterface();
+	const VkDevice					dev					= m_context.getDevice();
+	const VkQueue					queue				= m_context.getUniversalQueue();
+	const deUint32					queueFamilyIndex	= m_context.getUniversalQueueFamilyIndex();
+
+	Move<VkCommandPool>				cmdPool				= createCommandPool(vki, dev, VK_COMMAND_POOL_CREATE_TRANSIENT_BIT, queueFamilyIndex);
+	Move<VkCommandBuffer>			cmdBuffer			= allocateCommandBuffer(vki, dev, *cmdPool, VK_COMMAND_BUFFER_LEVEL_PRIMARY);
+	Move<VkShaderModule>			shaderModule		= createShaderModule(vki, dev, m_context.getBinaryCollection().get("comp"), 0);
+
+	Move<VkDescriptorSetLayout>		descriptorSetLayout	= DescriptorSetLayoutBuilder()
+															.addSingleBinding(VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, VK_SHADER_STAGE_COMPUTE_BIT)
+															.addSingleBinding(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, VK_SHADER_STAGE_COMPUTE_BIT)
+															.build(vki, dev);
+	Move<VkDescriptorPool>			descriptorPool		= DescriptorPoolBuilder()
+															.addType(VK_DESCRIPTOR_TYPE_STORAGE_IMAGE)
+															.addType(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER)
+															.build(vki, dev, VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT, 1u);
+	Move<VkDescriptorSet>			descriptorSet		= makeDescriptorSet(vki, dev, *descriptorPool, *descriptorSetLayout);
+	Move<VkPipelineLayout>			pipelineLayout		= makePipelineLayout(vki, dev, *descriptorSetLayout);
+	Move<VkPipeline>				pipeline			= makeComputePipeline(vki, dev, *pipelineLayout, *shaderModule);
+
+
+	ut::StorageImage2D				image				(m_context, m_params->vkFormat, m_params->textureWidth, m_params->textureHeight);
+
+	const TextureFormat				texFormat			= mapVkFormat(m_params->vkFormat);
+	const TextureFormat				bufferFormat		= makeBufferFormat(getTextureChannelClass(texFormat.type),
+																		   findFormatInfo(m_params->vkFormat)->capability == OpCapability::Int64ImageEXT);
+	ut::StorageBuffer2D				buffer				(m_context, bufferFormat, m_params->textureWidth, m_params->textureHeight);
+
+	VkDescriptorImageInfo			inputImageInfo		= makeDescriptorImageInfo(DE_NULL, image.getView(), VK_IMAGE_LAYOUT_GENERAL);
+	VkDescriptorBufferInfo			outputBufferInfo	= makeDescriptorBufferInfo(buffer.getBuffer(), 0u, buffer.getSize());
+
+	DescriptorSetUpdateBuilder		builder;
+	builder
+		.writeSingle(*descriptorSet, DescriptorSetUpdateBuilder::Location::binding(0u), VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, &inputImageInfo)
+		.writeSingle(*descriptorSet, DescriptorSetUpdateBuilder::Location::binding(1u), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, &outputBufferInfo)
+		.update(vki, dev);
+
+	populate	(buffer.getPixelAccess());
+	clear		(image.getPixelAccess());
+
+	beginCommandBuffer(vki, *cmdBuffer);
+		image.upload(*cmdBuffer);
+		vki.cmdBindPipeline(*cmdBuffer, VK_PIPELINE_BIND_POINT_COMPUTE, *pipeline);
+		vki.cmdBindDescriptorSets(*cmdBuffer, VK_PIPELINE_BIND_POINT_COMPUTE, *pipelineLayout, 0u, 1u, &descriptorSet.get(), 0u, DE_NULL);
+		vki.cmdDispatch(*cmdBuffer, m_params->textureWidth, m_params->textureHeight, 1);
+		image.download(*cmdBuffer);
+	endCommandBuffer(vki, *cmdBuffer);
+
+	image.flush();
+	buffer.flush();
+
+	submitCommandsAndWait(vki, dev, queue, *cmdBuffer);
+
+	image.invalidate();
+	buffer.invalidate();
+
+	return compare(image.getPixelAccess(), buffer.getPixelAccess())
+			? tcu::TestStatus::pass("")
+			: tcu::TestStatus::fail("Pixel comparison failed");
+}
+
+} // anonymous
+
+tcu::TestCaseGroup* createImageMismatchedVectorSizesTests (tcu::TestContext& testCtx)
+{
+	std::stringstream ss;
+	auto createTestName = [&](const FormatInfo& info, const MismatchedVectorSizesTest::Params* params) -> std::string
+	{
+		ss.str(std::string());
+		ss << de::toLower(info.spirvName) << "_from";
+		if (params->sourceWidth > 1)
+			ss << "_vec" << params->sourceWidth;
+		else ss << "_scalar";
+
+		return ss.str();
+	};
+
+	auto testGroup						= new tcu::TestCaseGroup(testCtx, "mismatched_write_op", "Test image OpImageWrite operation in various aspects.");
+	auto testGroupMismatchedVectorSizes	= new tcu::TestCaseGroup(testCtx, "mismatched_vector_sizes", "Case OpImageWrite operation on mismatched vector sizes.");
+
+	for (const auto& info : formatsInfos)
+	{
+		for (int sourceWidth = 4; sourceWidth > 0; --sourceWidth)
+		{
+			if (sourceWidth >= getNumUsedChannels(info.vkFormat))
+			{
+				auto params = new MismatchedVectorSizesTest::Params { info.vkFormat, sourceWidth, 12*sourceWidth, 8*(4-sourceWidth+1) };
+				testGroupMismatchedVectorSizes->addChild(new MismatchedVectorSizesTest(testCtx, createTestName(info, params), {}, MismatchedVectorSizesTest::ParamsSp(params)));
+			}
+		}
+	}
+
+	testGroup->addChild(testGroupMismatchedVectorSizes);
+
+	return testGroup;
+}
+
+} // image
+} // vkt
diff --git a/external/vulkancts/modules/vulkan/pipeline/vktPipelineVertexOnlyTests.hpp b/external/vulkancts/modules/vulkan/image/vktImageMismatchedWriteOpTests.hpp
similarity index 68%
copy from external/vulkancts/modules/vulkan/pipeline/vktPipelineVertexOnlyTests.hpp
copy to external/vulkancts/modules/vulkan/image/vktImageMismatchedWriteOpTests.hpp
index 1a85ebf..c5d1ec0 100644
--- a/external/vulkancts/modules/vulkan/pipeline/vktPipelineVertexOnlyTests.hpp
+++ b/external/vulkancts/modules/vulkan/image/vktImageMismatchedWriteOpTests.hpp
@@ -1,11 +1,10 @@
-#ifndef _VKTPIPELINEVERTEXONLYTESTS_HPP
-#define _VKTPIPELINEVERTEXONLYTESTS_HPP
+#ifndef _VKTIMAGEMISMATCHEDWRITEOPTESTS_HPP
+#define _VKTIMAGEMISMATCHEDWRITEOPTESTS_HPP
 /*------------------------------------------------------------------------
  * Vulkan Conformance Tests
  * ------------------------
  *
- * Copyright (c) 2019 Google LLC
- * Copyright (c) 2019 The Khronos Group Inc.
+ * Copyright (c) 2021 The Khronos Group Inc.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -21,20 +20,21 @@
  *
  *//*!
  * \file
- * \brief Tests using only vertex shader in a graphics pipeline
+ * \brief Testing writing and reading for mismatched vector sizes.
  *//*--------------------------------------------------------------------*/
 
 #include "tcuDefs.hpp"
 #include "tcuTestCase.hpp"
+#include "vktTestCase.hpp"
 
 namespace vkt
 {
-namespace pipeline
+namespace image
 {
 
-tcu::TestCaseGroup*	createVertexOnlyTests (tcu::TestContext& testCtx);
+tcu::TestCaseGroup* createImageMismatchedVectorSizesTests (tcu::TestContext& testCtx);
 
-} // pipeline
+} // image
 } // vkt
 
-#endif // _VKTPIPELINEVERTEXONLYTESTS_HPP
+#endif // _VKTIMAGEMISMATCHEDWRITEOPTESTS_HPP
diff --git a/external/vulkancts/modules/vulkan/image/vktImageTests.cpp b/external/vulkancts/modules/vulkan/image/vktImageTests.cpp
index 218b13e..6a8a28c 100644
--- a/external/vulkancts/modules/vulkan/image/vktImageTests.cpp
+++ b/external/vulkancts/modules/vulkan/image/vktImageTests.cpp
@@ -35,6 +35,7 @@
 #include "vktImageMisalignedCubeTests.hpp"
 #include "vktImageSubresourceLayoutTests.hpp"
 #include "vktImageMismatchedFormatsTests.hpp"
+#include "vktImageMismatchedWriteOpTests.hpp"
 
 namespace vkt
 {
@@ -65,6 +66,7 @@
 	imageTests->addChild(createImageLoadStoreLodAMDTests(testCtx));
 	imageTests->addChild(createImageSubresourceLayoutTests(testCtx));
 	imageTests->addChild(createImageMismatchedFormatsTests(testCtx));
+	imageTests->addChild(createImageMismatchedVectorSizesTests(testCtx));
 }
 
 } // anonymous
diff --git a/external/vulkancts/modules/vulkan/image/vktImageTestsUtil.cpp b/external/vulkancts/modules/vulkan/image/vktImageTestsUtil.cpp
index 227412e..adb2461 100644
--- a/external/vulkancts/modules/vulkan/image/vktImageTestsUtil.cpp
+++ b/external/vulkancts/modules/vulkan/image/vktImageTestsUtil.cpp
@@ -53,8 +53,30 @@
 			  const MemoryRequirement	memoryRequirement)
 {
 	m_image = createImage(vk, device, &imageCreateInfo);
-	m_allocation = allocator.allocate(getImageMemoryRequirements(vk, device, *m_image), memoryRequirement);
-	VK_CHECK(vk.bindImageMemory(device, *m_image, m_allocation->getMemory(), m_allocation->getOffset()));
+	de::SharedPtr<vk::Allocation> allocation(allocator.allocate(getImageMemoryRequirements(vk, device, *m_image), memoryRequirement).release());
+	m_allocations.push_back(allocation);
+	VK_CHECK(vk.bindImageMemory(device, *m_image, allocation->getMemory(), allocation->getOffset()));
+}
+
+Image::Image (void)
+	: m_allocations	()
+	, m_image		()
+{}
+
+SparseImage::SparseImage (const vk::DeviceInterface&	vkd,
+						  vk::VkDevice					device,
+						  vk::VkPhysicalDevice			physicalDevice,
+						  const vk::InstanceInterface&	vki,
+						  const vk::VkImageCreateInfo&	createInfo,
+						  const vk::VkQueue				sparseQueue,
+						  vk::Allocator&				allocator,
+						  const tcu::TextureFormat&		format)
+	: Image			()
+	, m_semaphore	()
+{
+	m_image		= createImage(vkd, device, &createInfo);
+	m_semaphore	= createSemaphore(vkd, device);
+	allocateAndBindSparseImage(vkd, device, physicalDevice, vki, createInfo, m_semaphore.get(), sparseQueue, allocator, m_allocations, format, m_image.get());
 }
 
 tcu::UVec3 getShaderGridSize (const ImageType imageType, const tcu::UVec3& imageSize)
diff --git a/external/vulkancts/modules/vulkan/image/vktImageTestsUtil.hpp b/external/vulkancts/modules/vulkan/image/vktImageTestsUtil.hpp
index f7ca361..5553a44 100644
--- a/external/vulkancts/modules/vulkan/image/vktImageTestsUtil.hpp
+++ b/external/vulkancts/modules/vulkan/image/vktImageTestsUtil.hpp
@@ -99,14 +99,40 @@
 
 	const vk::VkImage&				get				(void) const { return *m_image; }
 	const vk::VkImage&				operator*		(void) const { return get(); }
-	vk::Allocation&					getAllocation	(void) const { return *m_allocation; }
 
-private:
-	de::MovePtr<vk::Allocation>		m_allocation;
+	virtual vk::VkSemaphore			getSemaphore	(void) const { return DE_NULL; }
+
+									Image			(const Image&) = delete;
+	Image&							operator=		(const Image&) = delete;
+
+protected:
+	using AllocationsVec = std::vector<de::SharedPtr<vk::Allocation>>;
+
+									Image			(void);
+
+	AllocationsVec					m_allocations;
 	vk::Move<vk::VkImage>			m_image;
+};
 
-									Image			(const Image&);  // "deleted"
-	Image&							operator=		(const Image&);
+class SparseImage : public Image
+{
+public:
+									SparseImage		(const vk::DeviceInterface&		vkd,
+													 vk::VkDevice					device,
+													 vk::VkPhysicalDevice			physicalDevice,
+													 const vk::InstanceInterface&	vki,
+													 const vk::VkImageCreateInfo&	createInfo,
+													 const vk::VkQueue				sparseQueue,
+													 vk::Allocator&					allocator,
+													 const tcu::TextureFormat&		format);
+
+	virtual vk::VkSemaphore			getSemaphore	(void) const { return m_semaphore.get(); }
+
+									SparseImage		(const SparseImage&) = delete;
+	SparseImage&					operator=		(const SparseImage&) = delete;
+
+protected:
+	vk::Move<vk::VkSemaphore>		m_semaphore;
 };
 
 tcu::UVec3				getShaderGridSize	(const ImageType imageType, const tcu::UVec3& imageSize);	//!< Size used for addresing image in a shader
diff --git a/external/vulkancts/modules/vulkan/image/vktImageTranscodingSupportTests.cpp b/external/vulkancts/modules/vulkan/image/vktImageTranscodingSupportTests.cpp
index 77f9212..61fc220 100644
--- a/external/vulkancts/modules/vulkan/image/vktImageTranscodingSupportTests.cpp
+++ b/external/vulkancts/modules/vulkan/image/vktImageTranscodingSupportTests.cpp
@@ -831,6 +831,9 @@
 {
 	context.requireDeviceFunctionality("VK_KHR_maintenance2");
 
+	if ((m_parameters.operation == OPERATION_TEXTURE_READ || m_parameters.operation == OPERATION_TEXTURE_WRITE) && !context.getDeviceFeatures().fragmentStoresAndAtomics)
+		TCU_THROW(NotSupportedError, "fragmentStoresAndAtomics not supported");
+
 	if (!isFormatUsageFlagSupported(context, m_parameters.featuredFormat, m_parameters.testedImageUsageFeature))
 		TCU_THROW(NotSupportedError, "Test skipped due to feature is not supported by the format");
 
@@ -862,6 +865,16 @@
 
 	if (differenceFound)
 	{
+		if ((context.isDeviceFunctionalitySupported("VK_KHR_portability_subset") &&
+			!context.getPortabilitySubsetFeatures().imageViewFormatReinterpretation))
+		{
+			tcu::TextureFormat	textureImageFormat	= vk::mapVkFormat(m_parameters.featuredFormat);
+			tcu::TextureFormat	textureViewFormat	= vk::mapVkFormat(featurelessFormat);
+
+			if (tcu::getTextureFormatBitDepth(textureImageFormat) != tcu::getTextureFormatBitDepth(textureViewFormat))
+				TCU_THROW(NotSupportedError, "VK_KHR_portability_subset: Format must not contain a different number of bits in each component, than the format of the VkImage");
+		}
+
 		TestParameters	calculatedParameters	=
 		{
 			m_parameters.operation,					// Operation				operation
diff --git a/external/vulkancts/modules/vulkan/memory/vktMemoryAllocationTests.cpp b/external/vulkancts/modules/vulkan/memory/vktMemoryAllocationTests.cpp
index 5cd570c..09b54e2 100644
--- a/external/vulkancts/modules/vulkan/memory/vktMemoryAllocationTests.cpp
+++ b/external/vulkancts/modules/vulkan/memory/vktMemoryAllocationTests.cpp
@@ -120,7 +120,7 @@
 class BaseAllocateTestInstance : public TestInstance
 {
 public:
-						BaseAllocateTestInstance		(Context& context, bool useDeviceGroups)
+	BaseAllocateTestInstance		(Context& context, bool useDeviceGroups)
 		: TestInstance				(context)
 		, m_useDeviceGroups			(useDeviceGroups)
 		, m_subsetAllocationAllowed	(false)
@@ -130,7 +130,7 @@
 		if (m_useDeviceGroups)
 			createDeviceGroup();
 		else
-			createDevice();
+			createTestDevice();
 
 		m_allocFlagsInfo.sType		= VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO_KHR;
 		m_allocFlagsInfo.pNext		= DE_NULL;
@@ -138,7 +138,7 @@
 		m_allocFlagsInfo.deviceMask	= 0;
 	}
 
-	void						createDevice		(void);
+	void						createTestDevice	(void);
 	void						createDeviceGroup	(void);
 	const vk::DeviceInterface&	getDeviceInterface	(void) { return m_useDeviceGroups ? *m_deviceDriver : m_context.getDeviceInterface(); }
 	vk::VkDevice				getDevice			(void) { return m_logicalDevice.get();}
@@ -156,7 +156,7 @@
 	de::MovePtr<vk::DeviceDriver>	m_deviceDriver;
 };
 
-void BaseAllocateTestInstance::createDevice (void)
+void BaseAllocateTestInstance::createTestDevice (void)
 {
 	VkInstance										instance				(m_context.getInstance());
 	InstanceDriver									instanceDriver			(m_context.getPlatformInterface(), instance);
diff --git a/external/vulkancts/modules/vulkan/memory/vktMemoryExternalMemoryHostTests.cpp b/external/vulkancts/modules/vulkan/memory/vktMemoryExternalMemoryHostTests.cpp
index 6888aed..af7757c 100644
--- a/external/vulkancts/modules/vulkan/memory/vktMemoryExternalMemoryHostTests.cpp
+++ b/external/vulkancts/modules/vulkan/memory/vktMemoryExternalMemoryHostTests.cpp
@@ -325,7 +325,7 @@
 	const deUint32						queueFamilyIndex				= m_context.getUniversalQueueFamilyIndex();
 	deUint32							memoryTypeIndexToTest;
 	VkMemoryRequirements				imageMemoryRequirements;
-	const VkImageTiling					tiling							= VK_IMAGE_TILING_OPTIMAL;
+	const VkImageTiling					tiling							= VK_IMAGE_TILING_LINEAR;
 	const VkImageUsageFlags				usageFlags						= (VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | VK_IMAGE_USAGE_TRANSFER_SRC_BIT |	VK_IMAGE_USAGE_TRANSFER_DST_BIT);
 
 	// Verify image format properties before proceeding.
@@ -1055,6 +1055,13 @@
 	context.requireDeviceFunctionality("VK_EXT_external_memory_host");
 }
 
+void checkEvent (Context& context)
+{
+	checkSupport(context);
+	if (context.isDeviceFunctionalitySupported("VK_KHR_portability_subset") && !context.getPortabilitySubsetFeatures().events)
+		TCU_THROW(NotSupportedError, "VK_KHR_portability_subset: Events are not supported by this implementation");
+}
+
 } // unnamed namespace
 
 tcu::TestCaseGroup* createMemoryExternalMemoryHostTests (tcu::TestContext& testCtx)
@@ -1100,7 +1107,7 @@
 
 	synchronization->addChild(new InstanceFactory1WithSupport<ExternalMemoryHostSynchronizationTestInstance, TestParams, FunctionSupport0, AddPrograms>	(testCtx, tcu::NODETYPE_SELF_VALIDATE,
 																																						 "synchronization", "synchronization", AddPrograms(),
-																																						 TestParams(testFormats[0].format, true), checkSupport));
+																																						 TestParams(testFormats[0].format, true), checkEvent));
 	group->addChild(synchronization.release());
 	return group.release();
 }
diff --git a/external/vulkancts/modules/vulkan/memory/vktMemoryMappingTests.cpp b/external/vulkancts/modules/vulkan/memory/vktMemoryMappingTests.cpp
index a9bf33a..8f870ed 100644
--- a/external/vulkancts/modules/vulkan/memory/vktMemoryMappingTests.cpp
+++ b/external/vulkancts/modules/vulkan/memory/vktMemoryMappingTests.cpp
@@ -24,11 +24,14 @@
 #include "vktMemoryMappingTests.hpp"
 
 #include "vktTestCaseUtil.hpp"
+#include "vktCustomInstancesDevices.hpp"
 
 #include "tcuMaybe.hpp"
 #include "tcuResultCollector.hpp"
 #include "tcuTestLog.hpp"
 #include "tcuPlatform.hpp"
+#include "tcuTextureUtil.hpp"
+#include "tcuCommandLine.hpp"
 
 #include "vkDeviceUtil.hpp"
 #include "vkPlatform.hpp"
@@ -37,6 +40,7 @@
 #include "vkRefUtil.hpp"
 #include "vkStrUtil.hpp"
 #include "vkAllocationCallbackUtil.hpp"
+#include "vkImageUtil.hpp"
 
 #include "deRandom.hpp"
 #include "deSharedPtr.hpp"
@@ -304,16 +308,37 @@
 
 Move<VkImage> makeImage (const DeviceInterface& vk, VkDevice device, VkDeviceSize size, deUint32 queueFamilyIndex)
 {
-	const VkDeviceSize					sizeInPixels					= (size + 3u) / 4u;
-	const deUint32						sqrtSize						= static_cast<deUint32>(deFloatCeil(deFloatSqrt(static_cast<float>(sizeInPixels))));
-	const deUint32						powerOfTwoSize					= deSmallestGreaterOrEquallPowerOfTwoU32(sqrtSize);
+	const VkFormat formats[] =
+	{
+		VK_FORMAT_R8G8B8A8_UINT,
+		VK_FORMAT_R16G16B16A16_UINT,
+		VK_FORMAT_R32G32B32A32_UINT,
+	};
+
+	VkFormat	format			= VK_FORMAT_UNDEFINED;
+	deUint32	powerOfTwoSize	= 0;
+
+	for (const VkFormat f : formats)
+	{
+		const int			pixelSize		= vk::mapVkFormat(f).getPixelSize();
+		const VkDeviceSize	sizeInPixels	= (size + 3u) / pixelSize;
+		const deUint32		sqrtSize		= static_cast<deUint32>(deFloatCeil(deFloatSqrt(static_cast<float>(sizeInPixels))));
+
+		format			= f;
+		powerOfTwoSize	= deSmallestGreaterOrEquallPowerOfTwoU32(sqrtSize);
+
+		// maxImageDimension2D
+		if (powerOfTwoSize < 4096)
+			break;
+	}
+
 	const VkImageCreateInfo				colorImageParams				=
 	{
 		VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO,							// VkStructureType			sType;
 		DE_NULL,														// const void*				pNext;
 		0u,																// VkImageCreateFlags		flags;
 		VK_IMAGE_TYPE_2D,												// VkImageType				imageType;
-		VK_FORMAT_R8G8B8A8_UINT,										// VkFormat					format;
+		format,															// VkFormat					format;
 		{
 			powerOfTwoSize,
 			powerOfTwoSize,
@@ -415,7 +440,35 @@
 	return allocateMemory(vk, device, &pAllocInfo);
 }
 
-Move<VkDeviceMemory> allocMemory (const DeviceInterface& vk, VkDevice device, VkDeviceSize pAllocInfo_allocationSize, deUint32 pAllocInfo_memoryTypeIndex, Move<VkImage>& image, Move<VkBuffer>& buffer)
+VkDeviceSize findLargeAllocationSize (const DeviceInterface& vk, VkDevice device, VkDeviceSize max, deUint32 memoryTypeIndex)
+{
+	// max must be power of two
+	DE_ASSERT((max & (max - 1)) == 0);
+
+	for (VkDeviceSize size = max; size > 0; size >>= 1)
+	{
+		const VkMemoryAllocateInfo	allocInfo	=
+		{
+			VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO,
+			DE_NULL,
+			size,
+			memoryTypeIndex,
+		};
+
+		VkDeviceMemory				memory;
+		VkResult					result		= vk.allocateMemory(device, &allocInfo, NULL, &memory);
+
+		if (result == VK_SUCCESS)
+		{
+			vk.freeMemory(device, memory, NULL);
+			return size;
+		}
+	}
+
+	return 0;
+}
+
+Move<VkDeviceMemory> allocMemory (const DeviceInterface& vk, VkDevice device, VkDeviceSize pAllocInfo_allocationSize, deUint32 pAllocInfo_memoryTypeIndex, Move<VkImage>& image, Move<VkBuffer>& buffer, const VkAllocationCallbacks* allocator = DE_NULL)
 {
 	DE_ASSERT((!image) || (!buffer));
 
@@ -435,7 +488,7 @@
 		pAllocInfo_allocationSize,
 		pAllocInfo_memoryTypeIndex,
 	};
-	return allocateMemory(vk, device, &pAllocInfo);
+	return allocateMemory(vk, device, &pAllocInfo, allocator);
 }
 
 struct MemoryRange
@@ -465,17 +518,21 @@
 	vector<MemoryRange>	flushMappings;
 	vector<MemoryRange>	invalidateMappings;
 	bool				remap;
+	bool				implicitUnmap;
 	AllocationKind		allocationKind;
 };
 
-bool compareAndLogBuffer (TestLog& log, size_t size, const deUint8* result, const deUint8* reference)
+bool compareAndLogBuffer (TestLog& log, size_t size, size_t referenceSize, const deUint8* result, const deUint8* reference)
 {
+	size_t	stride		= size / referenceSize;
 	size_t	failedBytes	= 0;
 	size_t	firstFailed	= (size_t)-1;
 
-	for (size_t ndx = 0; ndx < size; ndx++)
+	DE_ASSERT(referenceSize <= size);
+
+	for (size_t ndx = 0; ndx < referenceSize; ndx += stride)
 	{
-		if (result[ndx] != reference[ndx])
+		if (result[ndx * stride] != reference[ndx])
 		{
 			failedBytes++;
 
@@ -491,7 +548,7 @@
 		std::ostringstream	expectedValues;
 		std::ostringstream	resultValues;
 
-		for (size_t ndx = firstFailed; ndx < firstFailed + 10 && ndx < size; ndx++)
+		for (size_t ndx = firstFailed; ndx < firstFailed + 10 && ndx < referenceSize; ndx++)
 		{
 			if (ndx != firstFailed)
 			{
@@ -500,7 +557,7 @@
 			}
 
 			expectedValues << reference[ndx];
-			resultValues << result[ndx];
+			resultValues << result[ndx * stride];
 		}
 
 		if (firstFailed + 10 < size)
@@ -518,19 +575,78 @@
 		return true;
 }
 
+static Move<VkDevice> createProtectedMemoryDevice(const Context& context, const VkPhysicalDeviceFeatures2& features2)
+{
+	auto&											cmdLine					= context.getTestContext().getCommandLine();
+	const InstanceInterface&						vki						= context.getInstanceInterface();
+	const float										queuePriority			= 1.0f;
+	deUint32										queueFamilyIndex		= context.getUniversalQueueFamilyIndex();
+
+	VkDeviceQueueCreateInfo							queueInfo		=
+	{
+		VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO,					// VkStructureType					sType;
+		DE_NULL,													// const void*						pNext;
+		vk::VK_DEVICE_QUEUE_CREATE_PROTECTED_BIT,					// VkDeviceQueueCreateFlags			flags;
+		queueFamilyIndex,											// deUint32							queueFamilyIndex;
+		1u,															// deUint32							queueCount;
+		&queuePriority												// const float*						pQueuePriorities;
+	};
+
+	const VkDeviceCreateInfo						deviceInfo		=
+	{
+		VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO,						// VkStructureType					sType;
+		&features2,													// const void*						pNext;
+		(VkDeviceCreateFlags)0,										// VkDeviceCreateFlags				flags;
+		1u,															// uint32_t							queueCreateInfoCount;
+		&queueInfo,													// const VkDeviceQueueCreateInfo*	pQueueCreateInfos;
+		0u,															// uint32_t							enabledLayerCount;
+		DE_NULL,													// const char* const*				ppEnabledLayerNames;
+		0u,															// uint32_t							enabledExtensionCount;
+		DE_NULL,													// const char* const*				ppEnabledExtensionNames;
+		DE_NULL														// const VkPhysicalDeviceFeatures*	pEnabledFeatures;
+	};
+
+	return createCustomDevice(cmdLine.isValidationEnabled(), context.getPlatformInterface(), context.getInstance(), vki, context.getPhysicalDevice(), &deviceInfo);
+}
+
 tcu::TestStatus testMemoryMapping (Context& context, const TestConfig config)
 {
 	TestLog&								log							= context.getTestContext().getLog();
 	tcu::ResultCollector					result						(log);
 	bool									atLeastOneTestPerformed		= false;
 	const VkPhysicalDevice					physicalDevice				= context.getPhysicalDevice();
-	const VkDevice							device						= context.getDevice();
 	const InstanceInterface&				vki							= context.getInstanceInterface();
 	const DeviceInterface&					vkd							= context.getDeviceInterface();
 	const VkPhysicalDeviceMemoryProperties	memoryProperties			= getPhysicalDeviceMemoryProperties(vki, physicalDevice);
 	const VkDeviceSize						nonCoherentAtomSize			= context.getDeviceProperties().limits.nonCoherentAtomSize;
 	const deUint32							queueFamilyIndex			= context.getUniversalQueueFamilyIndex();
 
+	//Create protected memory device if protected memory is supported
+	//otherwise use the default device
+	Move<VkDevice>	protectMemoryDevice;
+	VkDevice		device;
+	{
+		VkPhysicalDeviceProtectedMemoryFeatures		protectedFeatures;
+		protectedFeatures.sType				= vk::VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES;
+		protectedFeatures.pNext				= DE_NULL;
+		protectedFeatures.protectedMemory	= VK_FALSE;
+
+		VkPhysicalDeviceFeatures2					deviceFeatures2;
+		deviceFeatures2.sType		= vk::VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
+		deviceFeatures2.pNext		= &protectedFeatures;
+
+		vki.getPhysicalDeviceFeatures2(context.getPhysicalDevice(), &deviceFeatures2);
+		if(protectedFeatures.protectedMemory && config.implicitUnmap)
+		{
+			protectMemoryDevice = createProtectedMemoryDevice(context, deviceFeatures2);
+			device = *protectMemoryDevice;
+		}
+		else
+		{
+			device = context.getDevice();
+		}
+	}
+
 	{
 		const tcu::ScopedLogSection	section	(log, "TestCaseInfo", "TestCaseInfo");
 
@@ -562,13 +678,28 @@
 	{
 		try
 		{
-			const tcu::ScopedLogSection		section		(log, "MemoryType" + de::toString(memoryTypeIndex), "MemoryType" + de::toString(memoryTypeIndex));
-			const vk::VkMemoryType&			memoryType	= memoryProperties.memoryTypes[memoryTypeIndex];
-			const VkMemoryHeap&				memoryHeap	= memoryProperties.memoryHeaps[memoryType.heapIndex];
-			const VkDeviceSize				atomSize	= nonCoherentAtomSize;
+			const tcu::ScopedLogSection		section			(log, "MemoryType" + de::toString(memoryTypeIndex), "MemoryType" + de::toString(memoryTypeIndex));
+			const vk::VkMemoryType&			memoryType		= memoryProperties.memoryTypes[memoryTypeIndex];
+			const VkMemoryHeap&				memoryHeap		= memoryProperties.memoryHeaps[memoryType.heapIndex];
+			const VkDeviceSize				atomSize		= nonCoherentAtomSize;
+			const VkDeviceSize				stride			= config.implicitUnmap ? 1024 : 1;
+			const deUint32					iterations		= config.implicitUnmap ? 128 : 1;
 
-			VkDeviceSize					allocationSize				= (config.allocationSize % atomSize == 0) ? config.allocationSize : config.allocationSize + (atomSize - (config.allocationSize % atomSize));
-			vk::VkMemoryRequirements		req							=
+			VkDeviceSize					allocationSize	= (config.allocationSize % atomSize == 0) ? config.allocationSize : config.allocationSize + (atomSize - (config.allocationSize % atomSize));
+			size_t							referenceSize	= 0;
+			vector<deUint8>					reference;
+
+			if (config.implicitUnmap)
+			{
+				VkDeviceSize max	= 0x10000000; // 256MiB
+
+				while (memoryHeap.size <= 4 * max)
+					max >>= 1;
+
+				allocationSize		= findLargeAllocationSize(vkd, device, max, memoryTypeIndex);
+			}
+
+			vk::VkMemoryRequirements		req				=
 			{
 				(VkDeviceSize)allocationSize,
 				(VkDeviceSize)0,
@@ -595,6 +726,9 @@
 				mappingSize = allocationSize;
 			}
 
+			referenceSize = static_cast<size_t>(mappingSize / stride);
+			reference.resize(static_cast<size_t>(mappingOffset) + referenceSize);
+
 			log << TestLog::Message << "MemoryType: " << memoryType << TestLog::EndMessage;
 			log << TestLog::Message << "MemoryHeap: " << memoryHeap << TestLog::EndMessage;
 			log << TestLog::Message << "AtomSize: " << atomSize << TestLog::EndMessage;
@@ -645,12 +779,13 @@
 			{
 				log << TestLog::Message << "Memory type's heap is too small." << TestLog::EndMessage;
 			}
-			else
+			else for (deUint32 iteration = 0; iteration < iterations; iteration++)
 			{
 				atLeastOneTestPerformed = true;
-				const Unique<VkDeviceMemory>	memory				(allocMemory(vkd, device, allocationSize, memoryTypeIndex, image, buffer));
+				AllocationCallbackRecorder		recorder			(getSystemAllocator());
+				const VkAllocationCallbacks*	allocator			= config.implicitUnmap ? recorder.getCallbacks() : DE_NULL;
+				Move<VkDeviceMemory>			memory				(allocMemory(vkd, device, allocationSize, memoryTypeIndex, image, buffer, allocator));
 				de::Random						rng					(config.seed);
-				vector<deUint8>					reference			((size_t)(allocationSize));
 				deUint8*						mapping				= DE_NULL;
 
 				{
@@ -661,11 +796,11 @@
 					mapping = (deUint8*)ptr;
 				}
 
-				for (VkDeviceSize ndx = 0; ndx < mappingSize; ndx++)
+				for (VkDeviceSize ndx = 0; ndx < referenceSize; ndx += stride)
 				{
 					const deUint8 val = rng.getUint8();
 
-					mapping[ndx]												= val;
+					mapping[ndx * stride]						= val;
 					reference[(size_t)(mappingOffset + ndx)]	= val;
 				}
 
@@ -723,10 +858,25 @@
 					VK_CHECK(vkd.invalidateMappedMemoryRanges(device, static_cast<deUint32>(ranges.size()), &ranges[0]));
 				}
 
-				if (!compareAndLogBuffer(log, static_cast<size_t>(mappingSize), mapping, &reference[static_cast<size_t>(mappingOffset)]))
+				if (!compareAndLogBuffer(log, static_cast<size_t>(mappingSize), referenceSize, mapping, &reference[static_cast<size_t>(mappingOffset)]))
 					result.fail("Unexpected values read from mapped memory.");
 
-				vkd.unmapMemory(device, *memory);
+				if (config.implicitUnmap)
+				{
+					AllocationCallbackValidationResults	results;
+
+					vkd.freeMemory(device, memory.disown(), allocator);
+					validateAllocationCallbacks(recorder, &results);
+
+					if (!results.liveAllocations.empty())
+						result.fail("Live allocations remain after freeing mapped memory");
+				}
+				else
+				{
+					vkd.unmapMemory(device, *memory);
+				}
+
+				context.getTestContext().touchWatchdog();
 			}
 		}
 		catch (const tcu::TestError& error)
@@ -1512,6 +1662,7 @@
 	OP_SUB_INVALIDATE_OVERLAPPING,
 
 	OP_REMAP,
+	OP_IMPLICIT_UNMAP,
 
 	OP_LAST
 };
@@ -1528,6 +1679,7 @@
 	config.seed				= seed;
 	config.mapping			= mapping;
 	config.remap			= false;
+	config.implicitUnmap	= false;
 	config.allocationKind	= allocationKind;
 
 	switch (op)
@@ -1539,6 +1691,10 @@
 			config.remap = true;
 			break;
 
+		case OP_IMPLICIT_UNMAP:
+			config.implicitUnmap = true;
+			break;
+
 		case OP_FLUSH:
 			config.flushMappings = vector<MemoryRange>(1, MemoryRange(mapping.offset, mapping.size));
 			break;
@@ -1650,7 +1806,7 @@
 
 	const VkDeviceSize allocationSizes[] =
 	{
-		33, 257, 4087, 8095, 1*1024*1024 + 1
+		0, 33, 257, 4087, 8095, 1*1024*1024 + 1,
 	};
 
 	const VkDeviceSize offsets[] =
@@ -1671,6 +1827,7 @@
 	{
 		{ OP_NONE,						"simple"					},
 		{ OP_REMAP,						"remap"						},
+		{ OP_IMPLICIT_UNMAP,			"implicit_unmap"			},
 		{ OP_FLUSH,						"flush"						},
 		{ OP_SUB_FLUSH,					"subflush"					},
 		{ OP_SUB_FLUSH_SEPARATE,		"subflush_separate"			},
@@ -1690,11 +1847,18 @@
 		for (size_t allocationSizeNdx = 0; allocationSizeNdx < DE_LENGTH_OF_ARRAY(allocationSizes); allocationSizeNdx++)
 		{
 			const VkDeviceSize				allocationSize		= allocationSizes[allocationSizeNdx];
-			de::MovePtr<tcu::TestCaseGroup>	allocationSizeGroup	(new tcu::TestCaseGroup(testCtx, de::toString(allocationSize).c_str(), ""));
+			const string					sizeGroupName		= (allocationSize == 0) ? "variable" : de::toString(allocationSize);
+			de::MovePtr<tcu::TestCaseGroup>	allocationSizeGroup	(new tcu::TestCaseGroup(testCtx, sizeGroupName.c_str(), ""));
 
 			for (size_t opNdx = 0; opNdx < DE_LENGTH_OF_ARRAY(ops); opNdx++)
 			{
 				const Op			op		= ops[opNdx].op;
+
+				// implicit_unmap ignores allocationSize
+				if (((allocationSize == 0) && (op != OP_IMPLICIT_UNMAP)) ||
+					((allocationSize != 0) && (op == OP_IMPLICIT_UNMAP)))
+					continue;
+
 				const char* const	name	= ops[opNdx].name;
 				const deUint32		seed	= (deUint32)(opNdx * allocationSizeNdx);
 				const TestConfig	config	= fullMappedConfig(allocationSize, op, seed, static_cast<AllocationKind>(allocationKindNdx));
@@ -1716,7 +1880,8 @@
 		for (size_t allocationSizeNdx = 0; allocationSizeNdx < DE_LENGTH_OF_ARRAY(allocationSizes); allocationSizeNdx++)
 		{
 			const VkDeviceSize				allocationSize		= allocationSizes[allocationSizeNdx];
-			de::MovePtr<tcu::TestCaseGroup>	allocationSizeGroup	(new tcu::TestCaseGroup(testCtx, de::toString(allocationSize).c_str(), ""));
+			const string					sizeGroupName		= (allocationSize == 0) ? "variable" : de::toString(allocationSize);
+			de::MovePtr<tcu::TestCaseGroup>	allocationSizeGroup	(new tcu::TestCaseGroup(testCtx, sizeGroupName.c_str(), ""));
 
 			for (size_t offsetNdx = 0; offsetNdx < DE_LENGTH_OF_ARRAY(offsets); offsetNdx++)
 			{
@@ -1741,8 +1906,14 @@
 
 					for (size_t opNdx = 0; opNdx < DE_LENGTH_OF_ARRAY(ops); opNdx++)
 					{
-						const deUint32		seed	= (deUint32)(opNdx * allocationSizeNdx);
 						const Op			op		= ops[opNdx].op;
+
+						// implicit_unmap ignores allocationSize
+						if (((allocationSize == 0) && (op != OP_IMPLICIT_UNMAP)) ||
+							((allocationSize != 0) && (op == OP_IMPLICIT_UNMAP)))
+							continue;
+
+						const deUint32		seed	= (deUint32)(opNdx * allocationSizeNdx);
 						const char* const	name	= ops[opNdx].name;
 						const TestConfig	config	= subMappedConfig(allocationSize, MemoryRange(offset, size), op, seed, static_cast<AllocationKind>(allocationKindNdx));
 
diff --git a/external/vulkancts/modules/vulkan/memory/vktMemoryRequirementsTests.cpp b/external/vulkancts/modules/vulkan/memory/vktMemoryRequirementsTests.cpp
index 6316c88..6d35e68 100644
--- a/external/vulkancts/modules/vulkan/memory/vktMemoryRequirementsTests.cpp
+++ b/external/vulkancts/modules/vulkan/memory/vktMemoryRequirementsTests.cpp
@@ -829,6 +829,12 @@
 		return false;
 	}
 
+	if (isYCbCrExtensionFormat(info.format)
+		&& !context.isDeviceFunctionalitySupported("VK_EXT_ycbcr_2plane_444_formats"))
+	{
+		return false;
+	}
+
 	if (info.imageType == VK_IMAGE_TYPE_1D)
 	{
 		DE_ASSERT(info.extent.height == 1u && info.extent.depth == 1u);
@@ -1253,6 +1259,10 @@
 		VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM_KHR,
 		VK_FORMAT_A4R4G4B4_UNORM_PACK16_EXT,
 		VK_FORMAT_A4B4G4R4_UNORM_PACK16_EXT,
+		VK_FORMAT_G8_B8R8_2PLANE_444_UNORM_EXT,
+		VK_FORMAT_G10X6_B10X6R10X6_2PLANE_444_UNORM_3PACK16_EXT,
+		VK_FORMAT_G12X4_B12X4R12X4_2PLANE_444_UNORM_3PACK16_EXT,
+		VK_FORMAT_G16_B16R16_2PLANE_444_UNORM_EXT,
 	};
 	const DeviceInterface&		vk				= context.getDeviceInterface();
 	const InstanceInterface&	vki				= context.getInstanceInterface();
@@ -1647,13 +1657,15 @@
 
 					if (result.check(requirements.memoryRequirements.memoryTypeBits != 0, "No supported memory types"))
 					{
-						bool	hasHostVisibleType	= false;
+						typedef std::vector<deUint32>::const_iterator	IndexIterator;
+						const std::vector<deUint32>						usedMemoryTypeIndices	= bitsToIndices(requirements.memoryRequirements.memoryTypeBits);
+						bool											hasHostVisibleType		= false;
 
-						for (deUint32 memoryTypeIndex = 0; (0x1u << memoryTypeIndex) <= requirements.memoryRequirements.memoryTypeBits; memoryTypeIndex++)
+						for (IndexIterator memoryTypeNdx = usedMemoryTypeIndices.begin(); memoryTypeNdx != usedMemoryTypeIndices.end(); ++memoryTypeNdx)
 						{
-							if (result.check(memoryTypeIndex < memoryProperties.memoryTypeCount, "Unknown memory type bits set in memory requirements"))
+							if (result.check(*memoryTypeNdx < memoryProperties.memoryTypeCount, "Unknown memory type bits set in memory requirements"))
 							{
-								const VkMemoryPropertyFlags	propertyFlags	(memoryProperties.memoryTypes[memoryTypeIndex].propertyFlags);
+								const VkMemoryPropertyFlags	propertyFlags	(memoryProperties.memoryTypes[*memoryTypeNdx].propertyFlags);
 
 								if (propertyFlags & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT)
 									hasHostVisibleType = true;
diff --git a/external/vulkancts/modules/vulkan/memory_model/vktMemoryModelMessagePassing.cpp b/external/vulkancts/modules/vulkan/memory_model/vktMemoryModelMessagePassing.cpp
index 369f45d..0456c5d 100755
--- a/external/vulkancts/modules/vulkan/memory_model/vktMemoryModelMessagePassing.cpp
+++ b/external/vulkancts/modules/vulkan/memory_model/vktMemoryModelMessagePassing.cpp
@@ -1175,13 +1175,28 @@
 			vk, device, allocator, makeBufferCreateInfo(bufferSizes[2], VK_BUFFER_USAGE_TRANSFER_DST_BIT), MemoryRequirement::HostVisible));
 	}
 
+	VkFormat imageFormat;
+	switch (m_data.dataType)
+	{
+	case DATA_TYPE_UINT:
+	case DATA_TYPE_UINT64:
+		imageFormat = VK_FORMAT_R32_UINT;
+		break;
+	case DATA_TYPE_FLOAT32:
+	case DATA_TYPE_FLOAT64:
+		imageFormat = VK_FORMAT_R32_SFLOAT;
+		break;
+	default:
+		TCU_FAIL("Invalid data type.");
+	}
+
 	const VkImageCreateInfo			imageCreateInfo			=
 	{
-		VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO,	// VkStructureType		  sType;
-		DE_NULL,								// const void*			  pNext;
-		(VkImageCreateFlags)0u,					// VkImageCreateFlags	   flags;
-		VK_IMAGE_TYPE_2D,						// VkImageType			  imageType;
-		VK_FORMAT_R32_UINT,						// VkFormat				 format;
+		VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO,	// VkStructureType		sType;
+		DE_NULL,								// const void*			pNext;
+		(VkImageCreateFlags)0u,					// VkImageCreateFlags	flags;
+		VK_IMAGE_TYPE_2D,						// VkImageType			imageType;
+		imageFormat,							// VkFormat				format;
 		{
 			DIM*NUM_WORKGROUP_EACH_DIM,	// deUint32	width;
 			DIM*NUM_WORKGROUP_EACH_DIM,	// deUint32	height;
@@ -1206,7 +1221,7 @@
 		(VkImageViewCreateFlags)0u,					// VkImageViewCreateFlags	 flags;
 		DE_NULL,									// VkImage					image;
 		VK_IMAGE_VIEW_TYPE_2D,						// VkImageViewType			viewType;
-		VK_FORMAT_R32_UINT,										// VkFormat				   format;
+		imageFormat,								// VkFormat					format;
 		{
 			VK_COMPONENT_SWIZZLE_R,	// VkComponentSwizzle	r;
 			VK_COMPONENT_SWIZZLE_G,	// VkComponentSwizzle	g;
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 a0f5636..63cd85f 100644
--- a/external/vulkancts/modules/vulkan/multiview/vktMultiViewRenderTests.cpp
+++ b/external/vulkancts/modules/vulkan/multiview/vktMultiViewRenderTests.cpp
@@ -3289,8 +3289,8 @@
 
 	imageBarrier(*m_device, *m_cmdBuffer, m_dsAttachment->getImage(), subresourceRange,
 		VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL,
-		VK_ACCESS_TRANSFER_WRITE_BIT, VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT,
-		VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT);
+		VK_ACCESS_TRANSFER_WRITE_BIT, VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT | VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT,
+		VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT);
 }
 
 void MultiViewDepthStencilTestInstance::afterDraw (void)
diff --git a/external/vulkancts/modules/vulkan/pipeline/CMakeLists.txt b/external/vulkancts/modules/vulkan/pipeline/CMakeLists.txt
index 2df5782..d23e7bf 100644
--- a/external/vulkancts/modules/vulkan/pipeline/CMakeLists.txt
+++ b/external/vulkancts/modules/vulkan/pipeline/CMakeLists.txt
@@ -1,14 +1,13 @@
 
-include_directories(
-	..
-	../amber
-	)
-
 set(DEQP_VK_PIPELINE_SRCS
+	vktPipelineBindPointTests.cpp
+	vktPipelineBindPointTests.hpp
 	vktPipelineBlendTests.cpp
 	vktPipelineBlendTests.hpp
 	vktPipelineClearUtil.cpp
 	vktPipelineClearUtil.hpp
+	vktPipelineColorWriteEnableTests.cpp
+	vktPipelineColorWriteEnableTests.hpp
 	vktPipelineCombinationsIterator.hpp
 	vktPipelineDepthTests.cpp
 	vktPipelineDepthTests.hpp
@@ -22,6 +21,8 @@
 	vktPipelineImageSamplingInstance.hpp
 	vktPipelineImageTests.cpp
 	vktPipelineImageTests.hpp
+	vktPipelineLogicOpTests.cpp
+	vktPipelineLogicOpTests.hpp
 	vktPipelinePushConstantTests.cpp
 	vktPipelinePushConstantTests.hpp
 	vktPipelinePushDescriptorTests.cpp
@@ -81,8 +82,8 @@
 	vktPipelineVertexInputTests.hpp
 	vktPipelineTimestampTests.cpp
 	vktPipelineTimestampTests.hpp
-	vktPipelineVertexOnlyTests.cpp
-	vktPipelineVertexOnlyTests.hpp
+	vktPipelineMiscTests.cpp
+	vktPipelineMiscTests.hpp
 	vktPipelineVertexUtil.cpp
 	vktPipelineVertexUtil.hpp
 	vktPipelineCacheTests.cpp
@@ -101,6 +102,10 @@
 	vktPipelineBlendOperationAdvancedTests.hpp
 	vktPipelineExtendedDynamicStateTests.cpp
 	vktPipelineExtendedDynamicStateTests.hpp
+	vktPipelineCreationCacheControlTests.cpp
+	vktPipelineCreationCacheControlTests.hpp
+	vktPipelineNoPositionTests.cpp
+	vktPipelineNoPositionTests.hpp
 	)
 
 set(DEQP_VK_PIPELINE_LIBS
@@ -111,8 +116,13 @@
 	)
 
 PCH(DEQP_VK_PIPELINE_SRCS ../pch.cpp)
-include_directories("../../../../amber/src/include")
-include_directories("../amber")
 
 add_library(deqp-vk-pipeline STATIC ${DEQP_VK_PIPELINE_SRCS})
 target_link_libraries(deqp-vk-pipeline ${DEQP_VK_PIPELINE_LIBS})
+target_include_directories(deqp-vk-pipeline
+	PRIVATE
+		..
+		../../../../amber/src/include
+		../amber
+		../util
+)
diff --git a/external/vulkancts/modules/vulkan/pipeline/vktPipelineBindPointTests.cpp b/external/vulkancts/modules/vulkan/pipeline/vktPipelineBindPointTests.cpp
new file mode 100644
index 0000000..ae95208
--- /dev/null
+++ b/external/vulkancts/modules/vulkan/pipeline/vktPipelineBindPointTests.cpp
@@ -0,0 +1,969 @@
+/*------------------------------------------------------------------------
+ * Vulkan Conformance Tests
+ * ------------------------
+ *
+ * Copyright (c) 2021 The Khronos Group Inc.
+ * Copyright (c) 2021 Valve Corporation.
+ *
+ * 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 Pipeline Bind Point Tests
+ *//*--------------------------------------------------------------------*/
+#include "vktPipelineBindPointTests.hpp"
+#include "vktPipelineImageUtil.hpp"
+
+#include "vkObjUtil.hpp"
+#include "vkBuilderUtil.hpp"
+#include "vkCmdUtil.hpp"
+#include "vkTypeUtil.hpp"
+#include "vkRefUtil.hpp"
+#include "vkBarrierUtil.hpp"
+#include "vkBufferWithMemory.hpp"
+#include "vkImageWithMemory.hpp"
+#include "vkRayTracingUtil.hpp"
+
+#include "tcuVector.hpp"
+
+#include <algorithm>
+#include <string>
+#include <sstream>
+#include <type_traits>
+#include <utility>
+
+namespace vkt
+{
+namespace pipeline
+{
+
+namespace
+{
+
+using namespace vk;
+
+// These operations will be tried in different orders.
+// To avoid combinatory explosions, we'll only use two pipeline types per test, which means 2 pipeline bind operations and 2 related set bind operations.
+// The following types will be mixed: (graphics, compute), (graphics, ray tracing) and (compute, ray tracing).
+enum class SetupOp
+{
+	BIND_GRAPHICS_PIPELINE		= 0,
+	BIND_COMPUTE_PIPELINE		= 1,
+	BIND_RAYTRACING_PIPELINE	= 2,
+	BIND_GRAPHICS_SET			= 3,
+	BIND_COMPUTE_SET			= 4,
+	BIND_RAYTRACING_SET			= 5,
+	OP_COUNT					= 6,
+};
+
+// How to bind each set.
+enum class SetUpdateType
+{
+	WRITE				= 0,
+	PUSH				= 1,
+	PUSH_WITH_TEMPLATE	= 2,
+	TYPE_COUNT			= 3,
+};
+
+// Types of operations to dispatch. They will be tried in different orders and are related to the setup sequence.
+enum class DispatchOp
+{
+	DRAW		= 0,
+	COMPUTE		= 1,
+	TRACE_RAYS	= 2,
+	OP_COUNT	= 3,
+};
+
+constexpr auto kTestBindPoints			= 2;					// Two bind points per test.
+constexpr auto kSetupSequenceSize		= kTestBindPoints * 2;	// For each bind point: bind pipeline and bind set.
+constexpr auto kDispatchSequenceSize	= kTestBindPoints;		// Dispatch two types of work, matching the bind points being used.
+
+using SetupSequence		= tcu::Vector<SetupOp, kSetupSequenceSize>;
+using DispatchSequence	= tcu::Vector<DispatchOp, kDispatchSequenceSize>;
+
+// Test parameters.
+struct TestParams
+{
+	SetUpdateType		graphicsSetUpdateType;
+	SetUpdateType		computeSetUpdateType;
+	SetUpdateType		rayTracingSetUpdateType;
+	SetupSequence		setupSequence;
+	DispatchSequence	dispatchSequence;
+
+protected:
+	bool hasSetupOp (SetupOp op) const
+	{
+		for (int i = 0; i < decltype(setupSequence)::SIZE; ++i)
+		{
+			if (setupSequence[i] == op)
+				return true;
+		}
+		return false;
+	}
+
+	bool hasAnyOf (const std::vector<SetupOp>& opVec) const
+	{
+		for (const auto& op : opVec)
+		{
+			if (hasSetupOp(op))
+				return true;
+		}
+		return false;
+	}
+
+public:
+	bool hasGraphics (void) const
+	{
+		const std::vector<SetupOp> setupOps {SetupOp::BIND_GRAPHICS_PIPELINE, SetupOp::BIND_GRAPHICS_SET};
+		return hasAnyOf(setupOps);
+	}
+
+	bool hasCompute (void) const
+	{
+		const std::vector<SetupOp> setupOps {SetupOp::BIND_COMPUTE_PIPELINE, SetupOp::BIND_COMPUTE_SET};
+		return hasAnyOf(setupOps);
+	}
+
+	bool hasRayTracing (void) const
+	{
+		const std::vector<SetupOp> setupOps {SetupOp::BIND_RAYTRACING_PIPELINE, SetupOp::BIND_RAYTRACING_SET};
+		return hasAnyOf(setupOps);
+	}
+
+};
+
+// Expected output values in each buffer.
+constexpr deUint32 kExpectedBufferValueGraphics		= 1u;
+constexpr deUint32 kExpectedBufferValueCompute		= 2u;
+constexpr deUint32 kExpectedBufferValueRayTracing	= 3u;
+
+class BindPointTest : public vkt::TestCase
+{
+public:
+							BindPointTest		(tcu::TestContext& testCtx, const std::string& name, const std::string& description, const TestParams& params);
+	virtual					~BindPointTest		(void) {}
+
+	virtual void			checkSupport		(Context& context) const;
+	virtual void			initPrograms		(vk::SourceCollections& programCollection) const;
+	virtual TestInstance*	createInstance		(Context& context) const;
+
+protected:
+	TestParams				m_params;
+};
+
+class BindPointInstance : public vkt::TestInstance
+{
+public:
+								BindPointInstance	(Context& context, const TestParams& params);
+	virtual						~BindPointInstance	(void) {}
+
+	virtual tcu::TestStatus		iterate				(void);
+
+protected:
+	TestParams					m_params;
+};
+
+BindPointTest::BindPointTest (tcu::TestContext& testCtx, const std::string& name, const std::string& description, const TestParams& params)
+	: vkt::TestCase	(testCtx, name, description)
+	, m_params		(params)
+{}
+
+void BindPointTest::checkSupport (Context& context) const
+{
+	if (m_params.graphicsSetUpdateType != SetUpdateType::WRITE || m_params.computeSetUpdateType != SetUpdateType::WRITE)
+	{
+		context.requireDeviceFunctionality("VK_KHR_push_descriptor");
+
+		if (m_params.graphicsSetUpdateType == SetUpdateType::PUSH_WITH_TEMPLATE || m_params.computeSetUpdateType == SetUpdateType::PUSH_WITH_TEMPLATE)
+			context.requireDeviceFunctionality("VK_KHR_descriptor_update_template");
+	}
+
+	if (m_params.hasRayTracing())
+		context.requireDeviceFunctionality("VK_KHR_ray_tracing_pipeline");
+}
+
+void BindPointTest::initPrograms (vk::SourceCollections& programCollection) const
+{
+	// The flags array will only have 1 element.
+	const std::string descriptorDecl = "layout(set=0, binding=0, std430) buffer BufferBlock { uint flag[]; } outBuffer;\n";
+
+	if (m_params.hasGraphics())
+	{
+		std::ostringstream vert;
+		vert
+			<< "#version 450\n"
+			<< "\n"
+			<< "void main()\n"
+			<< "{\n"
+			// Full-screen clockwise triangle strip with 4 vertices.
+			<< "	const float x = (-1.0+2.0*((gl_VertexIndex & 2)>>1));\n"
+			<< "	const float y = ( 1.0-2.0* (gl_VertexIndex % 2));\n"
+			<< "	gl_Position = vec4(x, y, 0.0, 1.0);\n"
+			<< "}\n"
+			;
+
+		// Note: the color attachment will be a 1x1 image, so gl_FragCoord.xy is (0.5, 0.5).
+		std::ostringstream frag;
+		frag
+			<< "#version 450\n"
+			<< descriptorDecl
+			<< "layout(location=0) out vec4 outColor;\n"
+			<< "\n"
+			<< "void main()\n"
+			<< "{\n"
+			<< "  const uint xCoord = uint(trunc(gl_FragCoord.x));\n"
+			<< "  const uint yCoord = uint(trunc(gl_FragCoord.y));\n"
+			<< "  outBuffer.flag[xCoord + yCoord] = " << kExpectedBufferValueGraphics << "u;\n"
+			<< "  outColor = vec4(0.0, 1.0, 0.0, 1.0);\n"
+			<< "}\n"
+			;
+
+		programCollection.glslSources.add("vert") << glu::VertexSource(vert.str());
+		programCollection.glslSources.add("frag") << glu::FragmentSource(frag.str());
+	}
+
+	if (m_params.hasCompute())
+	{
+		// Note: we will only dispatch 1 group.
+		std::ostringstream comp;
+		comp
+			<< "#version 450\n"
+			<< descriptorDecl
+			<< "layout(local_size_x=1, local_size_y=1, local_size_z=1) in;\n"
+			<< "\n"
+			<< "void main()\n"
+			<< "{\n"
+			<< "  const uint index = gl_GlobalInvocationID.x + gl_GlobalInvocationID.y + gl_GlobalInvocationID.z;\n"
+			<< "  outBuffer.flag[index] = " << kExpectedBufferValueCompute << "u;\n"
+			<< "}\n"
+			;
+
+		programCollection.glslSources.add("comp") << glu::ComputeSource(comp.str());
+	}
+
+	if (m_params.hasRayTracing())
+	{
+		// We will only call the ray gen shader once.
+		std::ostringstream rgen;
+		rgen
+			<< "#version 460\n"
+			<< "#extension GL_EXT_ray_tracing : require\n"
+			<< descriptorDecl
+			<< "\n"
+			<< "void main()\n"
+			<< "{\n"
+			<< "  const uint index = gl_LaunchIDEXT.x + gl_LaunchIDEXT.y + gl_LaunchIDEXT.z;\n"
+			<< "  outBuffer.flag[index] = " << kExpectedBufferValueRayTracing << "u;\n"
+			<< "}\n"
+			;
+
+		const vk::ShaderBuildOptions buildOptions(programCollection.usedVulkanVersion, vk::SPIRV_VERSION_1_4, 0u, true);
+		programCollection.glslSources.add("rgen") << glu::RaygenSource(updateRayTracingGLSL(rgen.str())) << buildOptions;
+	}
+}
+
+vkt::TestInstance* BindPointTest::createInstance (Context& context) const
+{
+	return new BindPointInstance(context, m_params);
+}
+
+BindPointInstance::BindPointInstance (Context& context, const TestParams& params)
+	: vkt::TestInstance	(context)
+	, m_params			(params)
+{}
+
+Move<VkDescriptorSetLayout> makeSetLayout(const DeviceInterface& vkd, VkDevice device, VkShaderStageFlags stages, bool push)
+{
+	VkDescriptorSetLayoutCreateFlags createFlags = 0u;
+	if (push)
+		createFlags |= VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR;
+
+	DescriptorSetLayoutBuilder builder;
+	builder.addSingleBinding(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, stages);
+	return builder.build(vkd, device, createFlags);
+}
+
+void zeroOutAndFlush (const DeviceInterface& vkd, VkDevice device, BufferWithMemory& buffer, VkDeviceSize bufferSize)
+{
+	auto& alloc		= buffer.getAllocation();
+	void* hostPtr	= alloc.getHostPtr();
+
+	deMemset(hostPtr, 0, static_cast<size_t>(bufferSize));
+	flushAlloc(vkd, device, alloc);
+}
+
+void makePoolAndSet (const DeviceInterface& vkd, VkDevice device, VkDescriptorSetLayout layout, Move<VkDescriptorPool>& pool, Move<VkDescriptorSet>& set)
+{
+	DescriptorPoolBuilder poolBuilder;
+	poolBuilder.addType(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER);
+	pool	= poolBuilder.build(vkd, device, VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT, 1u);
+	set		= makeDescriptorSet(vkd, device, pool.get(), layout);
+}
+
+void writeSetUpdate (const DeviceInterface& vkd, VkDevice device, VkBuffer buffer, VkDeviceSize offset, VkDeviceSize size, VkDescriptorSet set)
+{
+	DescriptorSetUpdateBuilder updateBuilder;
+	const auto bufferInfo = makeDescriptorBufferInfo(buffer, offset, size);
+	updateBuilder.writeSingle(set, DescriptorSetUpdateBuilder::Location::binding(0u), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, &bufferInfo);
+	updateBuilder.update(vkd, device);
+}
+
+Move<VkDescriptorUpdateTemplate> makeUpdateTemplate (const DeviceInterface& vkd, VkDevice device, VkDescriptorSetLayout setLayout, VkPipelineBindPoint bindPoint, VkPipelineLayout pipelineLayout)
+{
+	const auto									templateEntry		= makeDescriptorUpdateTemplateEntry(0u, 0u, 1u, VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, static_cast<deUintptr>(0), static_cast<deUintptr>(sizeof(VkDescriptorBufferInfo)));
+	const VkDescriptorUpdateTemplateCreateInfo	templateCreateInfo	=
+	{
+		VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO,	//	VkStructureType							sType;
+		nullptr,													//	const void*								pNext;
+		0u,															//	VkDescriptorUpdateTemplateCreateFlags	flags;
+		1u,															//	deUint32								descriptorUpdateEntryCount;
+		&templateEntry,												//	const VkDescriptorUpdateTemplateEntry*	pDescriptorUpdateEntries;
+		VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR,	//	VkDescriptorUpdateTemplateType			templateType;
+		setLayout,													//	VkDescriptorSetLayout					descriptorSetLayout;
+		bindPoint,													//	VkPipelineBindPoint						pipelineBindPoint;
+		pipelineLayout,												//	VkPipelineLayout						pipelineLayout;
+		0u,															//	deUint32								set;
+	};
+	return createDescriptorUpdateTemplate(vkd, device, &templateCreateInfo);
+}
+
+void pushBufferDescriptor(const DeviceInterface& vkd, VkCommandBuffer cmdBuffer, VkPipelineBindPoint bindPoint, VkPipelineLayout layout, VkBuffer buffer, VkDeviceSize offset, VkDeviceSize size)
+{
+	const auto					bufferInfo	= makeDescriptorBufferInfo(buffer, offset, size);
+	const VkWriteDescriptorSet	write		=
+	{
+		VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,	//	VkStructureType					sType;
+		nullptr,								//	const void*						pNext;
+		DE_NULL,								//	VkDescriptorSet					dstSet;
+		0u,										//	deUint32						dstBinding;
+		0u,										//	deUint32						dstArrayElement;
+		1u,										//	deUint32						descriptorCount;
+		VK_DESCRIPTOR_TYPE_STORAGE_BUFFER,		//	VkDescriptorType				descriptorType;
+		nullptr,								//	const VkDescriptorImageInfo*	pImageInfo;
+		&bufferInfo,							//	const VkDescriptorBufferInfo*	pBufferInfo;
+		nullptr,								//	const VkBufferView*				pTexelBufferView;
+	};
+	vkd.cmdPushDescriptorSetKHR(cmdBuffer, bindPoint, layout, 0u, 1u, &write);
+}
+
+void verifyBufferContents (const DeviceInterface& vkd, VkDevice device, const BufferWithMemory& buffer, const std::string& bufferName, deUint32 expected)
+{
+	auto&				bufferAlloc	= buffer.getAllocation();
+	const auto			dataPtr		= reinterpret_cast<deUint32*>(bufferAlloc.getHostPtr());
+	deUint32			data;
+
+	invalidateAlloc(vkd, device, bufferAlloc);
+	deMemcpy(&data, dataPtr, sizeof(data));
+
+	if (data != expected)
+	{
+		std::ostringstream msg;
+		msg << "Invalid value found in " << bufferName << " buffer: expected " << expected << " and found " << data;
+		TCU_FAIL(msg.str());
+	}
+}
+
+VkBufferMemoryBarrier makeBufferBarrier (VkBuffer buffer, VkDeviceSize offset, VkDeviceSize size)
+{
+	return makeBufferMemoryBarrier(VK_ACCESS_SHADER_WRITE_BIT, VK_ACCESS_HOST_READ_BIT, buffer, offset, size);
+}
+
+void recordBufferBarrier (const DeviceInterface& vkd, VkCommandBuffer cmdBuffer, VkPipelineStageFlagBits stage, const VkBufferMemoryBarrier& barrier)
+{
+	vkd.cmdPipelineBarrier(cmdBuffer, stage, VK_PIPELINE_STAGE_HOST_BIT, 0u, 0u, nullptr, 1u, &barrier, 0u, nullptr);
+}
+
+tcu::TestStatus BindPointInstance::iterate (void)
+{
+	const auto&	vki			= m_context.getInstanceInterface();
+	const auto	physDev		= m_context.getPhysicalDevice();
+	const auto&	vkd			= m_context.getDeviceInterface();
+	const auto	device		= m_context.getDevice();
+	const auto	qIndex		= m_context.getUniversalQueueFamilyIndex();
+	const auto	queue		= m_context.getUniversalQueue();
+	auto&		alloc		= m_context.getDefaultAllocator();
+
+	const auto	imageFormat		= VK_FORMAT_R8G8B8A8_UNORM;
+	const auto	imageExtent		= makeExtent3D(1u, 1u, 1u);
+	const auto	imageType		= VK_IMAGE_TYPE_2D;
+	const auto	imageViewType	= VK_IMAGE_VIEW_TYPE_2D;
+	const auto	imageUsage		= static_cast<VkImageUsageFlags>(VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | VK_IMAGE_USAGE_TRANSFER_SRC_BIT);
+
+	const auto	viewport		= makeViewport(imageExtent);
+	const auto	scissor			= makeRect2D(imageExtent);
+
+	const auto	hasGraphics		= m_params.hasGraphics();
+	const auto	hasCompute		= m_params.hasCompute();
+	const auto	hasRayTracing	= m_params.hasRayTracing();
+
+	// Storage buffers.
+	const auto bufferSize		= static_cast<VkDeviceSize>(sizeof(deUint32));
+	const auto bufferCreateInfo	= makeBufferCreateInfo(bufferSize, VK_BUFFER_USAGE_STORAGE_BUFFER_BIT);
+
+	using BufferWithMemoryPtr = de::MovePtr<BufferWithMemory>;
+	using ImageWithMemoryPtr = de::MovePtr<ImageWithMemory>;
+
+	BufferWithMemoryPtr graphicsBuffer;
+	BufferWithMemoryPtr computeBuffer;
+	BufferWithMemoryPtr rayTracingBuffer;
+
+	if (hasGraphics)	graphicsBuffer		= BufferWithMemoryPtr(new BufferWithMemory(vkd, device, alloc, bufferCreateInfo, MemoryRequirement::HostVisible));
+	if (hasCompute)		computeBuffer		= BufferWithMemoryPtr(new BufferWithMemory(vkd, device, alloc, bufferCreateInfo, MemoryRequirement::HostVisible));
+	if (hasRayTracing)	rayTracingBuffer	= BufferWithMemoryPtr(new BufferWithMemory(vkd, device, alloc, bufferCreateInfo, MemoryRequirement::HostVisible));
+
+	if (hasGraphics)	zeroOutAndFlush(vkd, device, *graphicsBuffer, bufferSize);
+	if (hasCompute)		zeroOutAndFlush(vkd, device, *computeBuffer, bufferSize);
+	if (hasRayTracing)	zeroOutAndFlush(vkd, device, *rayTracingBuffer, bufferSize);
+
+	ImageWithMemoryPtr	colorAttachment;
+	Move<VkImageView>	colorAttachmentView;
+
+	if (hasGraphics)
+	{
+		// Color attachment.
+		const VkImageCreateInfo imageCreateInfo =
+		{
+			VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO,	//	VkStructureType			sType;
+			nullptr,								//	const void*				pNext;
+			0u,										//	VkImageCreateFlags		flags;
+			imageType,								//	VkImageType				imageType;
+			imageFormat,							//	VkFormat				format;
+			imageExtent,							//	VkExtent3D				extent;
+			1u,										//	deUint32				mipLevels;
+			1u,										//	deUint32				arrayLayers;
+			VK_SAMPLE_COUNT_1_BIT,					//	VkSampleCountFlagBits	samples;
+			VK_IMAGE_TILING_OPTIMAL,				//	VkImageTiling			tiling;
+			imageUsage,								//	VkImageUsageFlags		usage;
+			VK_SHARING_MODE_EXCLUSIVE,				//	VkSharingMode			sharingMode;
+			1u,										//	deUint32				queueFamilyIndexCount;
+			&qIndex,								//	const deUint32*			pQueueFamilyIndices;
+			VK_IMAGE_LAYOUT_UNDEFINED,				//	VkImageLayout			initialLayout;
+		};
+
+		const auto subresourceRange		= makeImageSubresourceRange(VK_IMAGE_ASPECT_COLOR_BIT, 0u, 1u, 0u, 1u);
+		colorAttachment					= ImageWithMemoryPtr(new ImageWithMemory(vkd, device, alloc, imageCreateInfo, MemoryRequirement::Any));
+		colorAttachmentView				= makeImageView(vkd, device, colorAttachment->get(), imageViewType, imageFormat, subresourceRange);
+	}
+
+	// Command buffer and pool.
+	const auto cmdPool		= makeCommandPool(vkd, device, qIndex);
+	const auto cmdBufferPtr	= allocateCommandBuffer(vkd, device, cmdPool.get(), VK_COMMAND_BUFFER_LEVEL_PRIMARY);
+	const auto cmdBuffer	= cmdBufferPtr.get();
+
+	// Set and pipeline layouts.
+	Move<VkDescriptorSetLayout> graphicsSetLayout;
+	Move<VkDescriptorSetLayout> computeSetLayout;
+	Move<VkDescriptorSetLayout> rayTracingSetLayout;
+
+	if (hasGraphics)	graphicsSetLayout	= makeSetLayout(vkd, device, VK_SHADER_STAGE_FRAGMENT_BIT, (m_params.graphicsSetUpdateType != SetUpdateType::WRITE));
+	if (hasCompute)		computeSetLayout	= makeSetLayout(vkd, device, VK_SHADER_STAGE_COMPUTE_BIT, (m_params.computeSetUpdateType != SetUpdateType::WRITE));
+	if (hasRayTracing)	rayTracingSetLayout	= makeSetLayout(vkd, device, VK_SHADER_STAGE_RAYGEN_BIT_KHR, (m_params.rayTracingSetUpdateType != SetUpdateType::WRITE));
+
+	Move<VkPipelineLayout> graphicsPipelineLayout;
+	Move<VkPipelineLayout> computePipelineLayout;
+	Move<VkPipelineLayout> rayTracingPipelineLayout;
+
+	if (hasGraphics)	graphicsPipelineLayout		= makePipelineLayout(vkd, device, graphicsSetLayout.get());
+	if (hasCompute)		computePipelineLayout		= makePipelineLayout(vkd, device, computeSetLayout.get());
+	if (hasRayTracing)	rayTracingPipelineLayout	= makePipelineLayout(vkd, device, rayTracingSetLayout.get());
+
+	// Shader modules.
+	Move<VkShaderModule> vertShader;
+	Move<VkShaderModule> fragShader;
+	Move<VkShaderModule> compShader;
+	Move<VkShaderModule> rgenShader;
+
+	if (hasGraphics)	vertShader = createShaderModule(vkd, device, m_context.getBinaryCollection().get("vert"), 0u);
+	if (hasGraphics)	fragShader = createShaderModule(vkd, device, m_context.getBinaryCollection().get("frag"), 0u);
+	if (hasCompute)		compShader = createShaderModule(vkd, device, m_context.getBinaryCollection().get("comp"), 0u);
+	if (hasRayTracing)	rgenShader = createShaderModule(vkd, device, m_context.getBinaryCollection().get("rgen"), 0u);
+
+	Move<VkRenderPass>	renderPass;
+	Move<VkFramebuffer>	framebuffer;
+	Move<VkPipeline>	graphicsPipeline;
+
+	if (hasGraphics)
+	{
+		// Render pass and framebuffer.
+		renderPass	= makeRenderPass(vkd, device, imageFormat);
+		framebuffer	= makeFramebuffer(vkd, device, renderPass.get(), colorAttachmentView.get(), imageExtent.width, imageExtent.height);
+
+		// Graphics pipeline.
+		std::vector<VkViewport>	viewports(1u, viewport);
+		std::vector<VkRect2D>	scissors(1u, scissor);
+
+		const VkPipelineVertexInputStateCreateInfo vertexInputState =
+		{
+			VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO,	// VkStructureType                             sType
+			nullptr,													// const void*                                 pNext
+			0u,															// VkPipelineVertexInputStateCreateFlags       flags
+			0u,															// deUint32                                    vertexBindingDescriptionCount
+			nullptr,													// const VkVertexInputBindingDescription*      pVertexBindingDescriptions
+			0u,															// deUint32                                    vertexAttributeDescriptionCount
+			nullptr,													// const VkVertexInputAttributeDescription*    pVertexAttributeDescriptions
+		};
+
+		graphicsPipeline = makeGraphicsPipeline(vkd, device, graphicsPipelineLayout.get(),
+			vertShader.get(), DE_NULL, DE_NULL, DE_NULL, fragShader.get(),	// Shaders.
+			renderPass.get(), viewports, scissors, VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP, 0u, 0u, &vertexInputState);
+	}
+
+	// Compute pipeline.
+	Move<VkPipeline> computePipeline;
+
+	if (hasCompute)
+	{
+		const VkPipelineShaderStageCreateInfo computeShaderStageInfo =
+		{
+			VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO,	//	VkStructureType						sType;
+			nullptr,												//	const void*							pNext;
+			0u,														//	VkPipelineShaderStageCreateFlags	flags;
+			VK_SHADER_STAGE_COMPUTE_BIT,							//	VkShaderStageFlagBits				stage;
+			compShader.get(),										//	VkShaderModule						module;
+			"main",													//	const char*							pName;
+			nullptr,												//	const VkSpecializationInfo*			pSpecializationInfo;
+		};
+
+		const VkComputePipelineCreateInfo computePipelineCreateInfo =
+		{
+			VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO,	//	VkStructureType					sType;
+			nullptr,										//	const void*						pNext;
+			0u,												//	VkPipelineCreateFlags			flags;
+			computeShaderStageInfo,							//	VkPipelineShaderStageCreateInfo	stage;
+			computePipelineLayout.get(),					//	VkPipelineLayout				layout;
+			DE_NULL,										//	VkPipeline						basePipelineHandle;
+			0u,												//	deInt32							basePipelineIndex;
+		};
+
+		computePipeline = createComputePipeline(vkd, device, DE_NULL, &computePipelineCreateInfo);
+	}
+
+	// Ray tracing pipeline and shader binding tables.
+	using RayTracingPipelineHelperPtr = de::MovePtr<RayTracingPipeline>;
+
+	RayTracingPipelineHelperPtr		rayTracingPipelineHelper;
+	Move<VkPipeline>				rayTracingPipeline;
+	BufferWithMemoryPtr				raygenSBT;
+
+	VkStridedDeviceAddressRegionKHR	raygenSBTRegion		= makeStridedDeviceAddressRegionKHR(DE_NULL, 0, 0);
+	VkStridedDeviceAddressRegionKHR	missSBTRegion		= makeStridedDeviceAddressRegionKHR(DE_NULL, 0, 0);
+	VkStridedDeviceAddressRegionKHR	hitSBTRegion		= makeStridedDeviceAddressRegionKHR(DE_NULL, 0, 0);
+	VkStridedDeviceAddressRegionKHR	callableSBTRegion	= makeStridedDeviceAddressRegionKHR(DE_NULL, 0, 0);
+
+	if (hasRayTracing)
+	{
+		const auto rtProperties				= makeRayTracingProperties(vki, physDev);
+		const auto shaderGroupHandleSize	= rtProperties->getShaderGroupHandleSize();
+		const auto shaderGroupBaseAlignment	= rtProperties->getShaderGroupBaseAlignment();
+		rayTracingPipelineHelper			= RayTracingPipelineHelperPtr(new RayTracingPipeline());
+
+		rayTracingPipelineHelper->addShader(VK_SHADER_STAGE_RAYGEN_BIT_KHR, rgenShader, 0);
+		rayTracingPipeline = rayTracingPipelineHelper->createPipeline(vkd, device, rayTracingPipelineLayout.get());
+
+		raygenSBT		= rayTracingPipelineHelper->createShaderBindingTable(vkd, device, rayTracingPipeline.get(), alloc, shaderGroupHandleSize, shaderGroupBaseAlignment, 0, 1);
+		raygenSBTRegion	= makeStridedDeviceAddressRegionKHR(getBufferDeviceAddress(vkd, device, raygenSBT->get(), 0), shaderGroupHandleSize, shaderGroupHandleSize);
+	}
+
+	// Descriptor pools and sets if needed.
+	Move<VkDescriptorPool>	graphicsDescriptorPool;
+	Move<VkDescriptorPool>	computeDescriptorPool;
+	Move<VkDescriptorPool>	rayTracingDescriptorPool;
+	Move<VkDescriptorSet>	graphicsDescritorSet;
+	Move<VkDescriptorSet>	computeDescriptorSet;
+	Move<VkDescriptorSet>	rayTracingDescriptorSet;
+
+	if (m_params.graphicsSetUpdateType == SetUpdateType::WRITE)
+	{
+		makePoolAndSet(vkd, device, graphicsSetLayout.get(), graphicsDescriptorPool, graphicsDescritorSet);
+		writeSetUpdate(vkd, device, graphicsBuffer->get(), 0ull, bufferSize, graphicsDescritorSet.get());
+	}
+
+	if (m_params.computeSetUpdateType == SetUpdateType::WRITE)
+	{
+		makePoolAndSet(vkd, device, computeSetLayout.get(), computeDescriptorPool, computeDescriptorSet);
+		writeSetUpdate(vkd, device, computeBuffer->get(), 0ull, bufferSize, computeDescriptorSet.get());
+	}
+
+	if (m_params.rayTracingSetUpdateType == SetUpdateType::WRITE)
+	{
+		makePoolAndSet(vkd, device, rayTracingSetLayout.get(), rayTracingDescriptorPool, rayTracingDescriptorSet);
+		writeSetUpdate(vkd, device, rayTracingBuffer->get(), 0ull, bufferSize, rayTracingDescriptorSet.get());
+	}
+
+	// Templates if needed.
+	Move<VkDescriptorUpdateTemplate> graphicsUpdateTemplate;
+	Move<VkDescriptorUpdateTemplate> computeUpdateTemplate;
+	Move<VkDescriptorUpdateTemplate> rayTracingUpdateTemplate;
+
+	if (m_params.graphicsSetUpdateType == SetUpdateType::PUSH_WITH_TEMPLATE)
+		graphicsUpdateTemplate = makeUpdateTemplate(vkd, device, graphicsSetLayout.get(), VK_PIPELINE_BIND_POINT_GRAPHICS, graphicsPipelineLayout.get());
+
+	if (m_params.computeSetUpdateType == SetUpdateType::PUSH_WITH_TEMPLATE)
+		computeUpdateTemplate = makeUpdateTemplate(vkd, device, computeSetLayout.get(), VK_PIPELINE_BIND_POINT_COMPUTE, computePipelineLayout.get());
+
+	if (m_params.rayTracingSetUpdateType == SetUpdateType::PUSH_WITH_TEMPLATE)
+		rayTracingUpdateTemplate = makeUpdateTemplate(vkd, device, rayTracingSetLayout.get(), VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, rayTracingPipelineLayout.get());
+
+	beginCommandBuffer(vkd, cmdBuffer);
+
+	// Helper flags to check the test has been specified properly.
+	bool boundGraphicsPipeline		= false;
+	bool boundGraphicsSet			= false;
+	bool boundComputePipeline		= false;
+	bool boundComputeSet			= false;
+	bool boundRayTracingPipeline	= false;
+	bool boundRayTracingSet			= false;
+
+	// Setup operations in desired order.
+	for (int i = 0; i < decltype(m_params.setupSequence)::SIZE; ++i)
+	{
+		const auto& setupOp = m_params.setupSequence[i];
+		switch (setupOp)
+		{
+		case SetupOp::BIND_GRAPHICS_PIPELINE:
+			vkd.cmdBindPipeline(cmdBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, graphicsPipeline.get());
+			boundGraphicsPipeline = true;
+			break;
+
+		case SetupOp::BIND_COMPUTE_PIPELINE:
+			vkd.cmdBindPipeline(cmdBuffer, VK_PIPELINE_BIND_POINT_COMPUTE, computePipeline.get());
+			boundComputePipeline = true;
+			break;
+
+		case SetupOp::BIND_RAYTRACING_PIPELINE:
+			vkd.cmdBindPipeline(cmdBuffer, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, rayTracingPipeline.get());
+			boundRayTracingPipeline = true;
+			break;
+
+		case SetupOp::BIND_GRAPHICS_SET:
+			if (m_params.graphicsSetUpdateType == SetUpdateType::WRITE)
+				vkd.cmdBindDescriptorSets(cmdBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, graphicsPipelineLayout.get(), 0u, 1u, &graphicsDescritorSet.get(), 0u, nullptr);
+			else if (m_params.graphicsSetUpdateType == SetUpdateType::PUSH)
+				pushBufferDescriptor(vkd, cmdBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, graphicsPipelineLayout.get(), graphicsBuffer->get(), 0ull, bufferSize);
+			else if (m_params.graphicsSetUpdateType == SetUpdateType::PUSH_WITH_TEMPLATE)
+			{
+				const auto bufferInfo = makeDescriptorBufferInfo(graphicsBuffer->get(), 0ull, bufferSize);
+				vkd.cmdPushDescriptorSetWithTemplateKHR(cmdBuffer, graphicsUpdateTemplate.get(), graphicsPipelineLayout.get(), 0u, &bufferInfo);
+			}
+			else
+				DE_ASSERT(false);
+			boundGraphicsSet = true;
+			break;
+
+		case SetupOp::BIND_COMPUTE_SET:
+			if (m_params.computeSetUpdateType == SetUpdateType::WRITE)
+				vkd.cmdBindDescriptorSets(cmdBuffer, VK_PIPELINE_BIND_POINT_COMPUTE, computePipelineLayout.get(), 0u, 1u, &computeDescriptorSet.get(), 0u, nullptr);
+			else if (m_params.computeSetUpdateType == SetUpdateType::PUSH)
+				pushBufferDescriptor(vkd, cmdBuffer, VK_PIPELINE_BIND_POINT_COMPUTE, computePipelineLayout.get(), computeBuffer->get(), 0ull, bufferSize);
+			else if (m_params.computeSetUpdateType == SetUpdateType::PUSH_WITH_TEMPLATE)
+			{
+				const auto bufferInfo = makeDescriptorBufferInfo(computeBuffer->get(), 0ull, bufferSize);
+				vkd.cmdPushDescriptorSetWithTemplateKHR(cmdBuffer, computeUpdateTemplate.get(), computePipelineLayout.get(), 0u, &bufferInfo);
+			}
+			else
+				DE_ASSERT(false);
+			boundComputeSet = true;
+			break;
+
+		case SetupOp::BIND_RAYTRACING_SET:
+			if (m_params.rayTracingSetUpdateType == SetUpdateType::WRITE)
+				vkd.cmdBindDescriptorSets(cmdBuffer, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, rayTracingPipelineLayout.get(), 0u, 1u, &rayTracingDescriptorSet.get(), 0u, nullptr);
+			else if (m_params.rayTracingSetUpdateType == SetUpdateType::PUSH)
+				pushBufferDescriptor(vkd, cmdBuffer, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, rayTracingPipelineLayout.get(), rayTracingBuffer->get(), 0ull, bufferSize);
+			else if (m_params.rayTracingSetUpdateType == SetUpdateType::PUSH_WITH_TEMPLATE)
+			{
+				const auto bufferInfo = makeDescriptorBufferInfo(rayTracingBuffer->get(), 0ull, bufferSize);
+				vkd.cmdPushDescriptorSetWithTemplateKHR(cmdBuffer, rayTracingUpdateTemplate.get(), rayTracingPipelineLayout.get(), 0u, &bufferInfo);
+			}
+			else
+				DE_ASSERT(false);
+			boundRayTracingSet = true;
+			break;
+
+		default:
+			DE_ASSERT(false);
+			break;
+		}
+	}
+
+	// Avoid warning in release builds.
+	DE_UNREF(boundGraphicsPipeline);
+	DE_UNREF(boundGraphicsSet);
+	DE_UNREF(boundComputePipeline);
+	DE_UNREF(boundComputeSet);
+	DE_UNREF(boundRayTracingPipeline);
+	DE_UNREF(boundRayTracingSet);
+
+	// Dispatch operations in desired order.
+	for (int i = 0; i < decltype(m_params.dispatchSequence)::SIZE; ++i)
+	{
+		const auto& dispatchOp = m_params.dispatchSequence[i];
+		switch (dispatchOp)
+		{
+		case DispatchOp::DRAW:
+			DE_ASSERT(boundGraphicsPipeline && boundGraphicsSet);
+			beginRenderPass(vkd, cmdBuffer, renderPass.get(), framebuffer.get(), scissor, tcu::Vec4(1.0f, 0.0f, 0.0f, 1.0f));
+			vkd.cmdDraw(cmdBuffer, 4u, 1u, 0u, 0u);
+			endRenderPass(vkd, cmdBuffer);
+			break;
+
+		case DispatchOp::COMPUTE:
+			DE_ASSERT(boundComputePipeline && boundComputeSet);
+			vkd.cmdDispatch(cmdBuffer, 1u, 1u, 1u);
+			break;
+
+		case DispatchOp::TRACE_RAYS:
+			DE_ASSERT(boundRayTracingPipeline && boundRayTracingSet);
+			cmdTraceRays(vkd, cmdBuffer, &raygenSBTRegion, &missSBTRegion, &hitSBTRegion, &callableSBTRegion, 1u, 1u, 1u);
+			break;
+
+		default:
+			DE_ASSERT(false);
+			break;
+		}
+	}
+
+	if (hasGraphics)
+	{
+		const auto graphicsBufferBarrier = makeBufferBarrier(graphicsBuffer->get(), 0ull, bufferSize);
+		recordBufferBarrier(vkd, cmdBuffer, VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT, graphicsBufferBarrier);
+	}
+	if (hasCompute)
+	{
+		const auto computeBufferBarrier = makeBufferBarrier(computeBuffer->get(), 0ull, bufferSize);
+		recordBufferBarrier(vkd, cmdBuffer, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, computeBufferBarrier);
+	}
+	if (hasRayTracing)
+	{
+		const auto rayTracingBufferBarrier = makeBufferBarrier(rayTracingBuffer->get(), 0ull, bufferSize);
+		recordBufferBarrier(vkd, cmdBuffer, VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR, rayTracingBufferBarrier);
+	}
+
+	endCommandBuffer(vkd, cmdBuffer);
+	submitCommandsAndWait(vkd, device, queue, cmdBuffer);
+
+	// Verify storage buffers.
+	if (hasGraphics)	verifyBufferContents(vkd, device, *graphicsBuffer, "graphics", kExpectedBufferValueGraphics);
+	if (hasCompute)		verifyBufferContents(vkd, device, *computeBuffer, "compute", kExpectedBufferValueCompute);
+	if (hasRayTracing)	verifyBufferContents(vkd, device, *rayTracingBuffer, "raytracing", kExpectedBufferValueRayTracing);
+
+	// Verify color attachment.
+	if (hasGraphics)
+	{
+		const auto		textureLevel	= readColorAttachment(vkd, device, queue, qIndex, alloc, colorAttachment->get(), imageFormat, tcu::UVec2(imageExtent.width, imageExtent.height));
+		const auto		pixelBuffer		= textureLevel->getAccess();
+		const auto		iWidth			= static_cast<int>(imageExtent.width);
+		const auto		iHeight			= static_cast<int>(imageExtent.height);
+		const tcu::Vec4	expectedColor	(0.0f, 1.0f, 0.0f, 1.0f);
+
+		for (int y = 0; y < iHeight; ++y)
+		for (int x = 0; x < iWidth; ++x)
+		{
+			const auto value = pixelBuffer.getPixel(x, y);
+			if (value != expectedColor)
+			{
+				std::ostringstream msg;
+				msg << "Unexpected color found in attachment: expected " << expectedColor << " but found " << value;
+				TCU_FAIL(msg.str());
+			}
+		}
+	}
+
+	return tcu::TestStatus::pass("Pass");
+}
+
+// Auxiliar string conversion functions.
+
+std::string toString(SetUpdateType updateType)
+{
+	switch (updateType)
+	{
+	case SetUpdateType::WRITE:				return "write";
+	case SetUpdateType::PUSH:				return "push";
+	case SetUpdateType::PUSH_WITH_TEMPLATE:	return "template_push";
+	default:								DE_ASSERT(false); break;
+	}
+
+	return "";
+}
+
+std::string toString(const SetupSequence& setupSequence)
+{
+	std::ostringstream out;
+
+	out << "setup";
+	for (int i = 0; i < std::remove_reference<decltype(setupSequence)>::type::SIZE; ++i)
+	{
+		out << "_";
+		switch (setupSequence[i])
+		{
+		case SetupOp::BIND_GRAPHICS_PIPELINE:	out << "gp";		break;
+		case SetupOp::BIND_COMPUTE_PIPELINE:	out << "cp";		break;
+		case SetupOp::BIND_RAYTRACING_PIPELINE:	out << "rp";		break;
+		case SetupOp::BIND_GRAPHICS_SET:		out << "gs";		break;
+		case SetupOp::BIND_COMPUTE_SET:			out << "cs";		break;
+		case SetupOp::BIND_RAYTRACING_SET:		out << "rs";		break;
+		default:								DE_ASSERT(false);	break;
+		}
+	}
+
+	return out.str();
+}
+
+std::string toString(const DispatchSequence& dispatchSequence)
+{
+	std::ostringstream out;
+
+	out << "cmd";
+	for (int i = 0; i < std::remove_reference<decltype(dispatchSequence)>::type::SIZE; ++i)
+	{
+		out << "_";
+		switch (dispatchSequence[i])
+		{
+		case DispatchOp::COMPUTE:		out << "dispatch";	break;
+		case DispatchOp::DRAW:			out << "draw";		break;
+		case DispatchOp::TRACE_RAYS:	out << "tracerays";	break;
+		default:						DE_ASSERT(false);	break;
+		}
+	}
+
+	return out.str();
+}
+
+std::string toString(VkPipelineBindPoint point)
+{
+	if (point == VK_PIPELINE_BIND_POINT_GRAPHICS)			return "graphics";
+	if (point == VK_PIPELINE_BIND_POINT_COMPUTE)			return "compute";
+	if (point == VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR)	return "raytracing";
+
+	DE_ASSERT(false);
+	return "";
+}
+
+} // anonymous
+
+tcu::TestCaseGroup* createBindPointTests (tcu::TestContext& testCtx)
+{
+	using GroupPtr		= de::MovePtr<tcu::TestCaseGroup>;
+	using BindPointPair	= tcu::Vector<VkPipelineBindPoint, kTestBindPoints>;
+
+	GroupPtr bindPointGroup(new tcu::TestCaseGroup(testCtx, "bind_point", "Tests checking bind points are independent and used properly"));
+
+	// Bind point combinations to test.
+	const BindPointPair testPairs[] =
+	{
+		BindPointPair(VK_PIPELINE_BIND_POINT_GRAPHICS,	VK_PIPELINE_BIND_POINT_COMPUTE),
+		BindPointPair(VK_PIPELINE_BIND_POINT_GRAPHICS,	VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR),
+		BindPointPair(VK_PIPELINE_BIND_POINT_COMPUTE,	VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR),
+	};
+
+	for (int testPairIdx = 0; testPairIdx < DE_LENGTH_OF_ARRAY(testPairs); ++testPairIdx)
+	{
+		const auto& testPair = testPairs[testPairIdx];
+
+		// Default values. Two of them will be overwritten later.
+		TestParams params;
+		params.graphicsSetUpdateType	= SetUpdateType::TYPE_COUNT;
+		params.computeSetUpdateType		= SetUpdateType::TYPE_COUNT;
+		params.rayTracingSetUpdateType	= SetUpdateType::TYPE_COUNT;
+
+		// What to test based on the test pair.
+		// Note: updateTypePtrs will tell us which of the set update type members above we need to vary (graphics, compute, ray tracing).
+		SetUpdateType*	updateTypePtrs	[kTestBindPoints] = {	nullptr,				nullptr					};
+		SetupOp			pipelineBinds	[kTestBindPoints] = {	SetupOp::OP_COUNT,		SetupOp::OP_COUNT		};
+		SetupOp			setBinds		[kTestBindPoints] = {	SetupOp::OP_COUNT,		SetupOp::OP_COUNT		};
+		DispatchOp		dispatches		[kTestBindPoints] = {	DispatchOp::OP_COUNT,	DispatchOp::OP_COUNT	};
+
+		for (int elemIdx = 0; elemIdx < std::remove_reference<decltype(testPair)>::type::SIZE; ++elemIdx)
+		{
+			if (testPair[elemIdx] == VK_PIPELINE_BIND_POINT_GRAPHICS)
+			{
+				updateTypePtrs[elemIdx]	= &params.graphicsSetUpdateType;	// Test different graphics set update types.
+				pipelineBinds[elemIdx]	= SetupOp::BIND_GRAPHICS_PIPELINE;
+				setBinds[elemIdx]		= SetupOp::BIND_GRAPHICS_SET;
+				dispatches[elemIdx]		= DispatchOp::DRAW;
+			}
+			else if (testPair[elemIdx] == VK_PIPELINE_BIND_POINT_COMPUTE)
+			{
+				updateTypePtrs[elemIdx]	= &params.computeSetUpdateType;		// Test different compute set update types.
+				pipelineBinds[elemIdx]	= SetupOp::BIND_COMPUTE_PIPELINE;
+				setBinds[elemIdx]		= SetupOp::BIND_COMPUTE_SET;
+				dispatches[elemIdx]		= DispatchOp::COMPUTE;
+			}
+			else if (testPair[elemIdx] == VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR)
+			{
+				updateTypePtrs[elemIdx]	= &params.rayTracingSetUpdateType;	// Test different ray tracing set update types.
+				pipelineBinds[elemIdx]	= SetupOp::BIND_RAYTRACING_PIPELINE;
+				setBinds[elemIdx]		= SetupOp::BIND_RAYTRACING_SET;
+				dispatches[elemIdx]		= DispatchOp::TRACE_RAYS;
+			}
+		}
+
+		const std::string	pairName	= toString(testPair[0]) + "_" + toString(testPair[1]);
+		GroupPtr			pairGroup	(new tcu::TestCaseGroup(testCtx, pairName.c_str(), ""));
+
+		// Combine two update types.
+		for (int firstUpdateTypeIdx = 0; firstUpdateTypeIdx < static_cast<int>(SetUpdateType::TYPE_COUNT); ++firstUpdateTypeIdx)
+		for (int secondUpdateTypeIdx = 0; secondUpdateTypeIdx < static_cast<int>(SetUpdateType::TYPE_COUNT); ++ secondUpdateTypeIdx)
+		{
+			const auto			firstUpdateType		= static_cast<SetUpdateType>(firstUpdateTypeIdx);
+			const auto			secondUpdateType	= static_cast<SetUpdateType>(secondUpdateTypeIdx);
+			const std::string	updateGroupName		= toString(firstUpdateType) + "_" + toString(secondUpdateType);
+			GroupPtr			updateGroup			(new tcu::TestCaseGroup(testCtx, updateGroupName.c_str(), ""));
+
+			// Change update types of the relevant sets.
+			*updateTypePtrs[0] = firstUpdateType;
+			*updateTypePtrs[1] = secondUpdateType;
+
+			// Prepare initial permutation of test parameters.
+			params.setupSequence[0] = pipelineBinds[0];
+			params.setupSequence[1] = pipelineBinds[1];
+			params.setupSequence[2] = setBinds[0];
+			params.setupSequence[3] = setBinds[1];
+
+			// Permutate setup sequence and dispatch sequence.
+			const auto ssBegin	= params.setupSequence.m_data;
+			const auto ssEnd	= ssBegin + decltype(params.setupSequence)::SIZE;
+			do
+			{
+				const auto	setupGroupName	= toString(params.setupSequence);
+				GroupPtr	setupGroup		(new tcu::TestCaseGroup(testCtx, setupGroupName.c_str(), ""));
+
+				// Reset dispatch sequence permutation.
+				params.dispatchSequence = dispatches;
+
+				const auto dsBegin	= params.dispatchSequence.m_data;
+				const auto dsEnd	= dsBegin + decltype(params.dispatchSequence)::SIZE;
+				do
+				{
+					const auto testName = toString(params.dispatchSequence);
+					setupGroup->addChild(new BindPointTest(testCtx, testName, "", params));
+				} while (std::next_permutation(dsBegin, dsEnd));
+
+				updateGroup->addChild(setupGroup.release());
+
+			} while (std::next_permutation(ssBegin, ssEnd));
+
+			pairGroup->addChild(updateGroup.release());
+		}
+
+		bindPointGroup->addChild(pairGroup.release());
+	}
+
+
+	return bindPointGroup.release();
+}
+
+} // pipeline
+} // vkt
+
diff --git a/external/vulkancts/modules/vulkan/pipeline/vktPipelineVertexOnlyTests.hpp b/external/vulkancts/modules/vulkan/pipeline/vktPipelineBindPointTests.hpp
similarity index 68%
copy from external/vulkancts/modules/vulkan/pipeline/vktPipelineVertexOnlyTests.hpp
copy to external/vulkancts/modules/vulkan/pipeline/vktPipelineBindPointTests.hpp
index 1a85ebf..6606cea 100644
--- a/external/vulkancts/modules/vulkan/pipeline/vktPipelineVertexOnlyTests.hpp
+++ b/external/vulkancts/modules/vulkan/pipeline/vktPipelineBindPointTests.hpp
@@ -1,11 +1,11 @@
-#ifndef _VKTPIPELINEVERTEXONLYTESTS_HPP
-#define _VKTPIPELINEVERTEXONLYTESTS_HPP
+#ifndef _VKTPIPELINEBINDPOINTTESTS_HPP
+#define _VKTPIPELINEBINDPOINTTESTS_HPP
 /*------------------------------------------------------------------------
  * Vulkan Conformance Tests
  * ------------------------
  *
- * Copyright (c) 2019 Google LLC
- * Copyright (c) 2019 The Khronos Group Inc.
+ * Copyright (c) 2021 The Khronos Group Inc.
+ * Copyright (c) 2021 Valve Corporation.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -21,20 +21,19 @@
  *
  *//*!
  * \file
- * \brief Tests using only vertex shader in a graphics pipeline
+ * \brief Pipeline Bind Point Tests
  *//*--------------------------------------------------------------------*/
 
-#include "tcuDefs.hpp"
-#include "tcuTestCase.hpp"
+#include "vktTestCase.hpp"
 
 namespace vkt
 {
 namespace pipeline
 {
 
-tcu::TestCaseGroup*	createVertexOnlyTests (tcu::TestContext& testCtx);
+tcu::TestCaseGroup* createBindPointTests (tcu::TestContext& testCtx);
 
 } // pipeline
 } // vkt
 
-#endif // _VKTPIPELINEVERTEXONLYTESTS_HPP
+#endif // _VKTPIPELINEBINDPOINTTESTS_HPP
diff --git a/external/vulkancts/modules/vulkan/pipeline/vktPipelineBlendTests.cpp b/external/vulkancts/modules/vulkan/pipeline/vktPipelineBlendTests.cpp
index a0496bd..e14cb8b 100644
--- a/external/vulkancts/modules/vulkan/pipeline/vktPipelineBlendTests.cpp
+++ b/external/vulkancts/modules/vulkan/pipeline/vktPipelineBlendTests.cpp
@@ -438,6 +438,25 @@
 {
 	if (!isSupportedBlendFormat(context.getInstanceInterface(), context.getPhysicalDevice(), m_colorFormat))
 		throw tcu::NotSupportedError(std::string("Unsupported color blending format: ") + getFormatName(m_colorFormat));
+
+	if (context.isDeviceFunctionalitySupported("VK_KHR_portability_subset") &&
+		!context.getPortabilitySubsetFeatures().constantAlphaColorBlendFactors)
+	{
+		int quadNdx = 0;
+		for (; quadNdx < BlendTest::QUAD_COUNT; quadNdx++)
+		{
+			const VkPipelineColorBlendAttachmentState& blendState = m_blendStates[quadNdx];
+			if (blendState.srcColorBlendFactor == VK_BLEND_FACTOR_CONSTANT_ALPHA ||
+				blendState.dstColorBlendFactor == VK_BLEND_FACTOR_CONSTANT_ALPHA ||
+				blendState.srcColorBlendFactor == VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA ||
+				blendState.dstColorBlendFactor == VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA)
+			{
+				break;
+			}
+		}
+		if (quadNdx < BlendTest::QUAD_COUNT)
+			TCU_THROW(NotSupportedError, "VK_KHR_portability_subset: Constant alpha color blend factors are not supported by this implementation");
+	}
 }
 
 void BlendTest::initPrograms (SourceCollections& sourceCollections) const
diff --git a/external/vulkancts/modules/vulkan/pipeline/vktPipelineColorWriteEnableTests.cpp b/external/vulkancts/modules/vulkan/pipeline/vktPipelineColorWriteEnableTests.cpp
new file mode 100644
index 0000000..8207e01
--- /dev/null
+++ b/external/vulkancts/modules/vulkan/pipeline/vktPipelineColorWriteEnableTests.cpp
@@ -0,0 +1,1204 @@
+/*------------------------------------------------------------------------
+* Vulkan Conformance Tests
+* ------------------------
+*
+* Copyright (c) 2021 The Khronos Group Inc.
+*
+* 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 Tests for Color Write Enable
+*//*--------------------------------------------------------------------*/
+
+#include "vktPipelineColorWriteEnableTests.hpp"
+#include "vktPipelineImageUtil.hpp"
+#include "vktTestCase.hpp"
+
+#include "vkDefs.hpp"
+#include "vkTypeUtil.hpp"
+#include "vkQueryUtil.hpp"
+#include "vkObjUtil.hpp"
+#include "vkBufferWithMemory.hpp"
+#include "vkImageWithMemory.hpp"
+#include "vkBuilderUtil.hpp"
+#include "vkCmdUtil.hpp"
+#include "vkImageUtil.hpp"
+
+#include "tcuVector.hpp"
+#include "tcuMaybe.hpp"
+#include "tcuTestLog.hpp"
+#include "tcuVectorUtil.hpp"
+
+#include "deUniquePtr.hpp"
+#include "deStringUtil.hpp"
+
+#include <vector>
+#include <sstream>
+#include <algorithm>
+#include <utility>
+#include <iterator>
+#include <string>
+#include <limits>
+#include <memory>
+#include <functional>
+
+namespace vkt
+{
+namespace pipeline
+{
+
+namespace
+{
+
+// Framebuffer size.
+constexpr deUint32 kFramebufferWidth  = 64u;
+constexpr deUint32 kFramebufferHeight = 64u;
+
+// Image formats.
+constexpr	vk::VkFormat	kColorFormat	= vk::VK_FORMAT_R8G8B8A8_UNORM;
+const		tcu::Vec4		kColorThreshold	(0.005f); // 1/255 < 0.005 < 2/255.
+
+constexpr	deUint32		kNumColorAttachments = 3u;
+
+const vk::VkFormat kDepthStencilFormats[] =
+{
+	vk::VK_FORMAT_D32_SFLOAT_S8_UINT,
+	vk::VK_FORMAT_D24_UNORM_S8_UINT
+};
+
+constexpr auto kCoordsSize = static_cast<deUint32>(2 * sizeof(float));
+
+using Bool32Vec = std::vector<vk::VkBool32>;
+
+// Generic, to be used with any state than can be set statically and, as an option, dynamically.
+template<typename T>
+struct StaticAndDynamicPair
+{
+	T				staticValue;
+	tcu::Maybe<T>	dynamicValue;
+
+	// Helper constructor to set a static value and no dynamic value.
+	StaticAndDynamicPair (const T& value)
+		: staticValue	(value)
+		, dynamicValue	(tcu::nothing<T>())
+	{
+	}
+
+	// Helper constructor to set both.
+	StaticAndDynamicPair (const T& sVal, const T& dVal)
+		: staticValue	(sVal)
+		, dynamicValue	(tcu::just<T>(dVal))
+	{
+	}
+
+	// If the dynamic value is present, swap static and dynamic values.
+	void swapValues (void)
+	{
+		if (!dynamicValue)
+			return;
+		std::swap(staticValue, dynamicValue.get());
+	}
+};
+
+const tcu::Vec4	kDefaultTriangleColor (0.0f, 0.0f, 1.0f, 1.0f);	// Opaque blue.
+const tcu::Vec4	kDefaultClearColor    (0.0f, 0.0f, 0.0f, 1.0f);	// Opaque black.
+
+struct MeshParams
+{
+	tcu::Vec4	color;
+	float		depth;
+	float		scaleX;
+	float		scaleY;
+	float		offsetX;
+	float		offsetY;
+
+	MeshParams (const tcu::Vec4&	color_		= kDefaultTriangleColor,
+				float				depth_		= 0.0f,
+				float				scaleX_		= 1.0f,
+				float				scaleY_		= 1.0f,
+				float				offsetX_	= 0.0f,
+				float				offsetY_	= 0.0f)
+		: color		(color_)
+		, depth		(depth_)
+		, scaleX	(scaleX_)
+		, scaleY	(scaleY_)
+		, offsetX	(offsetX_)
+		, offsetY	(offsetY_)
+	{}
+};
+
+enum class SequenceOrdering
+{
+	CMD_BUFFER_START	= 0,	// Set state at the start of the command buffer.
+	BEFORE_DRAW			= 1,	// After binding dynamic pipeline and just before drawing.
+	BETWEEN_PIPELINES	= 2,	// After a static state pipeline has been bound but before the dynamic state pipeline has been bound.
+	AFTER_PIPELINES		= 3,	// After a static state pipeline and a second dynamic state pipeline have been bound.
+	BEFORE_GOOD_STATIC	= 4,	// Before a static state pipeline with the correct values has been bound.
+	TWO_DRAWS_DYNAMIC	= 5,	// Bind bad static pipeline and draw, followed by binding correct dynamic pipeline and drawing again.
+	TWO_DRAWS_STATIC	= 6,	// Bind bad dynamic pipeline and draw, followed by binding correct static pipeline and drawing again.
+};
+
+struct TestConfig
+{
+	// Main sequence ordering.
+	SequenceOrdering				sequenceOrdering;
+
+	// Drawing parameters.
+	MeshParams						meshParams;
+
+	// Clearing parameters for the framebuffer.
+	tcu::Vec4						clearColorValue;
+	float							clearDepthValue;
+
+	// Expected output in the attachments.
+	std::vector<tcu::Vec4>			expectedColor;
+	float							expectedDepth;
+
+	// Static and dynamic pipeline configuration.
+	StaticAndDynamicPair<Bool32Vec>	colorWriteEnableConfig;
+
+	// Sane defaults.
+	TestConfig (SequenceOrdering ordering)
+		: sequenceOrdering				(ordering)
+		, clearColorValue				(kDefaultClearColor)
+		, clearDepthValue				(1.0f)
+		, expectedColor					(kNumColorAttachments, kDefaultTriangleColor)
+		, expectedDepth					(1.0f)
+		, colorWriteEnableConfig		(Bool32Vec(1u, VK_TRUE))
+		, m_swappedValues				(false)
+	{
+	}
+
+	// Returns true if we should use the static and dynamic values exchanged.
+	// This makes the static part of the pipeline have the actual expected values.
+	bool isReversed () const
+	{
+		return (sequenceOrdering == SequenceOrdering::BEFORE_GOOD_STATIC ||
+				sequenceOrdering == SequenceOrdering::TWO_DRAWS_STATIC);
+	}
+
+	// Swaps static and dynamic configuration values.
+	void swapValues ()
+	{
+		colorWriteEnableConfig.swapValues();
+		m_swappedValues = !m_swappedValues;
+	}
+
+	// Returns the number of iterations when recording commands.
+	deUint32 numIterations () const
+	{
+		deUint32 iterations = 0u;
+
+		switch (sequenceOrdering)
+		{
+		case SequenceOrdering::TWO_DRAWS_DYNAMIC:
+		case SequenceOrdering::TWO_DRAWS_STATIC:
+			iterations = 2u;
+			break;
+		default:
+			iterations = 1u;
+			break;
+		}
+
+		return iterations;
+	}
+
+private:
+	// Color Write Enable cases as created by createColorWriteEnableTests() are based on the assumption that, when a state
+	// has a static and a dynamic value configured at the same time, the static value is wrong and the dynamic value will give
+	// expected results. That's appropriate for most test variants, but in some others we want to reverse the situation: a dynamic
+	// pipeline with wrong values and a static one with good values.
+	//
+	// Instead of modifying how tests are created, we use isReversed() and swapValues() above, allowing us to swap static and
+	// dynamic values and to know if we should do it for a given test case. However, we need to know were the good value is at any
+	// given point in time in order to correctly answer some questions while running the test. m_swappedValues tracks that state.
+	bool m_swappedValues;
+};
+
+struct PushConstants
+{
+	tcu::Vec4	triangleColor;
+	float		meshDepth;
+	float		scaleX;
+	float		scaleY;
+	float		offsetX;
+	float		offsetY;
+};
+
+class ColorWriteEnableTest : public vkt::TestCase
+{
+public:
+							ColorWriteEnableTest		(tcu::TestContext& testCtx, const std::string& name, const std::string& description, const TestConfig& testConfig);
+	virtual					~ColorWriteEnableTest		(void) {}
+
+	virtual void			checkSupport					(Context& context) const;
+	virtual void			initPrograms					(vk::SourceCollections& programCollection) const;
+	virtual TestInstance*	createInstance					(Context& context) const;
+
+private:
+	TestConfig				m_testConfig;
+};
+
+class ColorWriteEnableInstance : public vkt::TestInstance
+{
+public:
+								ColorWriteEnableInstance	(Context& context, const TestConfig& testConfig);
+	virtual						~ColorWriteEnableInstance	(void) {}
+
+	virtual tcu::TestStatus		iterate							(void);
+
+private:
+	TestConfig					m_testConfig;
+};
+
+ColorWriteEnableTest::ColorWriteEnableTest (tcu::TestContext& testCtx, const std::string& name, const std::string& description, const TestConfig& testConfig)
+	: vkt::TestCase	(testCtx, name, description)
+	, m_testConfig	(testConfig)
+{
+}
+
+void ColorWriteEnableTest::checkSupport (Context& context) const
+{
+	const auto&	vki				= context.getInstanceInterface();
+	const auto	physicalDevice	= context.getPhysicalDevice();
+
+	// This is always required.
+	context.requireDeviceFunctionality("VK_EXT_color_write_enable");
+
+	// Check color image format support (depth/stencil will be chosen at runtime).
+	const vk::VkFormatFeatureFlags	kColorFeatures	= (vk::VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | vk::VK_FORMAT_FEATURE_TRANSFER_SRC_BIT);
+	const auto						colorProperties	= vk::getPhysicalDeviceFormatProperties(vki, physicalDevice, kColorFormat);
+
+	if ((colorProperties.optimalTilingFeatures & kColorFeatures) != kColorFeatures)
+		TCU_THROW(NotSupportedError, "Required color image features not supported");
+}
+
+void ColorWriteEnableTest::initPrograms (vk::SourceCollections& programCollection) const
+{
+	std::ostringstream pushSource;
+	pushSource
+		<< "layout(push_constant, std430) uniform PushConstantsBlock {\n"
+		<< "    vec4  triangleColor;\n"
+		<< "    float depthValue;\n"
+		<< "    float scaleX;\n"
+		<< "    float scaleY;\n"
+		<< "    float offsetX;\n"
+		<< "    float offsetY;\n"
+		<< "} pushConstants;\n"
+		;
+
+	std::ostringstream vertSource;
+	vertSource
+		<< "#version 450\n"
+		<< pushSource.str()
+		<< "layout(location=0) in vec2 position;\n"
+		<< "out gl_PerVertex\n"
+		<< "{\n"
+		<< "    vec4 gl_Position;\n"
+		<< "};\n"
+		<< "void main() {\n"
+		<< "    vec2 vertexCoords = position;\n"
+		<< "    gl_Position = vec4(vertexCoords.x * pushConstants.scaleX + pushConstants.offsetX, vertexCoords.y * pushConstants.scaleY + pushConstants.offsetY, pushConstants.depthValue, 1.0);\n"
+		<< "}\n"
+		;
+
+	std::ostringstream fragOutputs;
+	std::ostringstream colorWrite;
+	for (deUint32 i = 0u; i < kNumColorAttachments; ++i)
+	{
+		fragOutputs << "layout(location=" << i << ") out vec4 color" << i << ";\n";
+		colorWrite << "    color" << i << " = pushConstants.triangleColor * " << powf(0.5f, static_cast<float>(i)) << ";\n";
+	}
+
+	std::ostringstream fragSource;
+	fragSource
+		<< "#version 450\n"
+		<< pushSource.str()
+		<< fragOutputs.str()
+		<< "void main() {\n"
+		<< colorWrite.str()
+		<< "}\n"
+		;
+
+	programCollection.glslSources.add("vert") << glu::VertexSource(vertSource.str());
+	programCollection.glslSources.add("frag") << glu::FragmentSource(fragSource.str());
+}
+
+TestInstance* ColorWriteEnableTest::createInstance (Context& context) const
+{
+	return new ColorWriteEnableInstance(context, m_testConfig);
+}
+
+ColorWriteEnableInstance::ColorWriteEnableInstance(Context& context, const TestConfig& testConfig)
+	: vkt::TestInstance	(context)
+	, m_testConfig		(testConfig)
+{
+}
+
+void logErrors(tcu::TestLog& log, const std::string& setName, const std::string& setDesc, const tcu::ConstPixelBufferAccess& result, const tcu::ConstPixelBufferAccess& errorMask)
+{
+	log << tcu::TestLog::ImageSet(setName, setDesc)
+		<< tcu::TestLog::Image(setName + "Result", "Result image", result)
+		<< tcu::TestLog::Image(setName + "ErrorMask", "Error mask with errors marked in red", errorMask)
+		<< tcu::TestLog::EndImageSet;
+}
+
+// Sets values for dynamic states if needed according to the test configuration.
+void setDynamicStates(const TestConfig& testConfig, const vk::DeviceInterface& vkd, vk::VkCommandBuffer cmdBuffer)
+{
+	if (testConfig.colorWriteEnableConfig.dynamicValue)
+	{
+		const auto& colorWriteEnables = testConfig.colorWriteEnableConfig.dynamicValue.get();
+		vkd.cmdSetColorWriteEnableEXT(cmdBuffer, static_cast<deUint32>(colorWriteEnables.size()), colorWriteEnables.data());
+	}
+}
+
+tcu::TestStatus ColorWriteEnableInstance::iterate (void)
+{
+	using ImageWithMemoryVec	= std::vector<std::unique_ptr<vk::ImageWithMemory>>;
+	using ImageViewVec			= std::vector<vk::Move<vk::VkImageView>>;
+	using FramebufferVec		= std::vector<vk::Move<vk::VkFramebuffer>>;
+
+	const auto&	vki					= m_context.getInstanceInterface();
+	const auto&	vkd					= m_context.getDeviceInterface();
+	const auto	physicalDevice		= m_context.getPhysicalDevice();
+	const auto	device				= m_context.getDevice();
+	auto&		allocator			= m_context.getDefaultAllocator();
+	const auto	queue				= m_context.getUniversalQueue();
+	const auto	queueIndex			= m_context.getUniversalQueueFamilyIndex();
+	auto&		log					= m_context.getTestContext().getLog();
+
+	const auto	kReversed			= m_testConfig.isReversed();
+	const auto	kNumIterations		= m_testConfig.numIterations();
+	const auto	kSequenceOrdering	= m_testConfig.sequenceOrdering;
+
+	const auto						kFramebufferExtent	= vk::makeExtent3D(kFramebufferWidth, kFramebufferHeight, 1u);
+	const vk::VkImageUsageFlags		kColorUsage			= (vk::VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | vk::VK_IMAGE_USAGE_TRANSFER_SRC_BIT);
+	const vk::VkImageUsageFlags		kDSUsage			= (vk::VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT | vk::VK_IMAGE_USAGE_TRANSFER_SRC_BIT);
+	const vk::VkFormatFeatureFlags	kDSFeatures			= (vk::VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT | vk::VK_FORMAT_FEATURE_TRANSFER_SRC_BIT);
+
+	// Choose depth/stencil format.
+	vk::VkFormat dsFormat = vk::VK_FORMAT_UNDEFINED;
+
+	for (int formatIdx = 0; formatIdx < DE_LENGTH_OF_ARRAY(kDepthStencilFormats); ++formatIdx)
+	{
+		const auto dsProperties = vk::getPhysicalDeviceFormatProperties(vki, physicalDevice, kDepthStencilFormats[formatIdx]);
+		if ((dsProperties.optimalTilingFeatures & kDSFeatures) == kDSFeatures)
+		{
+			dsFormat = kDepthStencilFormats[formatIdx];
+			break;
+		}
+	}
+
+	// Note: Not Supported insted of Fail because the transfer feature is not mandatory.
+	if (dsFormat == vk::VK_FORMAT_UNDEFINED)
+		TCU_THROW(NotSupportedError, "Required depth/stencil image features not supported");
+	log << tcu::TestLog::Message << "Chosen depth/stencil format: " << dsFormat << tcu::TestLog::EndMessage;
+
+	// Swap static and dynamic values in the test configuration so the static pipeline ends up with the expected values for cases
+	// where we will bind the static pipeline last before drawing.
+	if (kReversed)
+		m_testConfig.swapValues();
+
+	// Create color and depth/stencil images.
+	ImageWithMemoryVec colorImages;
+	ImageWithMemoryVec dsImages;
+
+	const vk::VkImageCreateInfo colorImageInfo =
+	{
+		vk::VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO,	//	VkStructureType			sType;
+		nullptr,									//	const void*				pNext;
+		0u,											//	VkImageCreateFlags		flags;
+		vk::VK_IMAGE_TYPE_2D,						//	VkImageType				imageType;
+		kColorFormat,								//	VkFormat				format;
+		kFramebufferExtent,							//	VkExtent3D				extent;
+		1u,											//	deUint32				mipLevels;
+		1u,											//	deUint32				arrayLayers;
+		vk::VK_SAMPLE_COUNT_1_BIT,					//	VkSampleCountFlagBits	samples;
+		vk::VK_IMAGE_TILING_OPTIMAL,				//	VkImageTiling			tiling;
+		kColorUsage,								//	VkImageUsageFlags		usage;
+		vk::VK_SHARING_MODE_EXCLUSIVE,				//	VkSharingMode			sharingMode;
+		1u,											//	deUint32				queueFamilyIndexCount;
+		&queueIndex,								//	const deUint32*			pQueueFamilyIndices;
+		vk::VK_IMAGE_LAYOUT_UNDEFINED,				//	VkImageLayout			initialLayout;
+	};
+	for (deUint32 i = 0u; i < kNumIterations * kNumColorAttachments; ++i)
+		colorImages.emplace_back(new vk::ImageWithMemory(vkd, device, allocator, colorImageInfo, vk::MemoryRequirement::Any));
+
+	const vk::VkImageCreateInfo dsImageInfo =
+	{
+		vk::VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO,	//	VkStructureType			sType;
+		nullptr,									//	const void*				pNext;
+		0u,											//	VkImageCreateFlags		flags;
+		vk::VK_IMAGE_TYPE_2D,						//	VkImageType				imageType;
+		dsFormat,									//	VkFormat				format;
+		kFramebufferExtent,							//	VkExtent3D				extent;
+		1u,											//	deUint32				mipLevels;
+		1u,											//	deUint32				arrayLayers;
+		vk::VK_SAMPLE_COUNT_1_BIT,					//	VkSampleCountFlagBits	samples;
+		vk::VK_IMAGE_TILING_OPTIMAL,				//	VkImageTiling			tiling;
+		kDSUsage,									//	VkImageUsageFlags		usage;
+		vk::VK_SHARING_MODE_EXCLUSIVE,				//	VkSharingMode			sharingMode;
+		1u,											//	deUint32				queueFamilyIndexCount;
+		&queueIndex,								//	const deUint32*			pQueueFamilyIndices;
+		vk::VK_IMAGE_LAYOUT_UNDEFINED,				//	VkImageLayout			initialLayout;
+	};
+	for (deUint32 i = 0u; i < kNumIterations; ++i)
+		dsImages.emplace_back(new vk::ImageWithMemory(vkd, device, allocator, dsImageInfo, vk::MemoryRequirement::Any));
+
+	const auto colorSubresourceRange	= vk::makeImageSubresourceRange(vk::VK_IMAGE_ASPECT_COLOR_BIT, 0u, 1u, 0u, 1u);
+	const auto dsSubresourceRange		= vk::makeImageSubresourceRange((vk::VK_IMAGE_ASPECT_DEPTH_BIT | vk::VK_IMAGE_ASPECT_STENCIL_BIT), 0u, 1u, 0u, 1u);
+
+	ImageViewVec colorImageViews;
+	ImageViewVec dsImageViews;
+
+	for (const auto& img : colorImages)
+		colorImageViews.emplace_back(vk::makeImageView(vkd, device, img->get(), vk::VK_IMAGE_VIEW_TYPE_2D, kColorFormat, colorSubresourceRange));
+
+	for (const auto& img : dsImages)
+		dsImageViews.emplace_back(vk::makeImageView(vkd, device, img->get(), vk::VK_IMAGE_VIEW_TYPE_2D, dsFormat, dsSubresourceRange));
+
+	// Vertex buffer.
+	// Full-screen triangle fan with 6 vertices.
+	//
+	// 4        3        2
+	//  +-------+-------+
+	//  |X      X      X|
+	//  | X     X     X |
+	//  |  X    X    X  |
+	//  |   X   X   X   |
+	//  |    X  X  X    |
+	//  |     X X X     |
+	//  |      XXX      |
+	//  +-------+-------+
+	// 5        0        1
+	std::vector<float> vertices = {
+		 0.0f,  1.0f,
+		 1.0f,  1.0f,
+		 1.0f, -1.0f,
+		 0.0f, -1.0f,
+		-1.0f, -1.0f,
+		-1.0f,  1.0f,
+	};
+
+	const auto vertDataSize				= vertices.size() * sizeof(float);
+	const auto vertBufferInfo			= vk::makeBufferCreateInfo(static_cast<vk::VkDeviceSize>(vertDataSize), vk::VK_BUFFER_USAGE_VERTEX_BUFFER_BIT);
+	vk::BufferWithMemory vertBuffer		(vkd, device, allocator, vertBufferInfo, vk::MemoryRequirement::HostVisible);
+	auto& alloc							= vertBuffer.getAllocation();
+
+	deMemcpy(reinterpret_cast<char*>(alloc.getHostPtr()), vertices.data(), vertDataSize);
+	vk::flushAlloc(vkd, device, alloc);
+
+	// Descriptor set layout.
+	vk::DescriptorSetLayoutBuilder layoutBuilder;
+	const auto descriptorSetLayout = layoutBuilder.build(vkd, device);
+
+	// Pipeline layout.
+	vk::VkShaderStageFlags pushConstantStageFlags = (vk::VK_SHADER_STAGE_VERTEX_BIT | vk::VK_SHADER_STAGE_FRAGMENT_BIT);
+
+	const vk::VkPushConstantRange pushConstantRange =
+	{
+		pushConstantStageFlags,							//	VkShaderStageFlags	stageFlags;
+		0u,												//	deUint32			offset;
+		static_cast<deUint32>(sizeof(PushConstants)),	//	deUint32			size;
+	};
+
+	const vk::VkPipelineLayoutCreateInfo pipelineLayoutCreateInfo =
+	{
+		vk::VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO,	//	VkStructureType					sType;
+		nullptr,											//	const void*						pNext;
+		0u,													//	VkPipelineLayoutCreateFlags		flags;
+		1u,													//	deUint32						setLayoutCount;
+		&descriptorSetLayout.get(),							//	const VkDescriptorSetLayout*	pSetLayouts;
+		1u,													//	deUint32						pushConstantRangeCount;
+		&pushConstantRange,									//	const VkPushConstantRange*		pPushConstantRanges;
+	};
+	const auto pipelineLayout = vk::createPipelineLayout(vkd, device, &pipelineLayoutCreateInfo);
+
+	// Render pass with single subpass.
+	std::vector<vk::VkAttachmentReference> colorAttachmentReference;
+	for (deUint32 i = 0u; i < kNumColorAttachments; ++i)
+	{
+		colorAttachmentReference.push_back(vk::VkAttachmentReference
+			{
+				i,												//	deUint32		attachment;
+				vk::VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL	//	VkImageLayout	layout;
+			}
+		);
+	}
+
+	const vk::VkAttachmentReference dsAttachmentReference =
+	{
+		kNumColorAttachments,									//	deUint32		attachment;
+		vk::VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL,	//	VkImageLayout	layout;
+	};
+
+	const vk::VkSubpassDescription subpassDescription =
+	{
+		0u,										//	VkSubpassDescriptionFlags		flags;
+		vk::VK_PIPELINE_BIND_POINT_GRAPHICS,	//	VkPipelineBindPoint				pipelineBindPoint;
+		0u,										//	deUint32						inputAttachmentCount;
+		nullptr,								//	const VkAttachmentReference*	pInputAttachments;
+		kNumColorAttachments,					//	deUint32						colorAttachmentCount;
+		colorAttachmentReference.data(),		//	const VkAttachmentReference*	pColorAttachments;
+		nullptr,								//	const VkAttachmentReference*	pResolveAttachments;
+		&dsAttachmentReference,					//	const VkAttachmentReference*	pDepthStencilAttachment;
+		0u,										//	deUint32						preserveAttachmentCount;
+		nullptr,								//	const deUint32*					pPreserveAttachments;
+	};
+
+	std::vector<vk::VkAttachmentDescription> attachmentDescriptions(
+		kNumColorAttachments,
+		vk::VkAttachmentDescription
+		{
+			0u,												//	VkAttachmentDescriptionFlags	flags;
+			kColorFormat,									//	VkFormat						format;
+			vk::VK_SAMPLE_COUNT_1_BIT,						//	VkSampleCountFlagBits			samples;
+			vk::VK_ATTACHMENT_LOAD_OP_CLEAR,				//	VkAttachmentLoadOp				loadOp;
+			vk::VK_ATTACHMENT_STORE_OP_STORE,				//	VkAttachmentStoreOp				storeOp;
+			vk::VK_ATTACHMENT_LOAD_OP_DONT_CARE,			//	VkAttachmentLoadOp				stencilLoadOp;
+			vk::VK_ATTACHMENT_STORE_OP_DONT_CARE,			//	VkAttachmentStoreOp				stencilStoreOp;
+			vk::VK_IMAGE_LAYOUT_UNDEFINED,					//	VkImageLayout					initialLayout;
+			vk::VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,	//	VkImageLayout					finalLayout;
+		}
+	);
+
+	attachmentDescriptions.push_back(vk::VkAttachmentDescription
+	{
+		0u,														//	VkAttachmentDescriptionFlags	flags;
+		dsFormat,												//	VkFormat						format;
+		vk::VK_SAMPLE_COUNT_1_BIT,								//	VkSampleCountFlagBits			samples;
+		vk::VK_ATTACHMENT_LOAD_OP_CLEAR,						//	VkAttachmentLoadOp				loadOp;
+		vk::VK_ATTACHMENT_STORE_OP_STORE,						//	VkAttachmentStoreOp				storeOp;
+		vk::VK_ATTACHMENT_LOAD_OP_CLEAR,						//	VkAttachmentLoadOp				stencilLoadOp;
+		vk::VK_ATTACHMENT_STORE_OP_STORE,						//	VkAttachmentStoreOp				stencilStoreOp;
+		vk::VK_IMAGE_LAYOUT_UNDEFINED,							//	VkImageLayout					initialLayout;
+		vk::VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL,	//	VkImageLayout					finalLayout;
+	});
+
+	const vk::VkRenderPassCreateInfo renderPassCreateInfo =
+	{
+		vk::VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO,			//	VkStructureType					sType;
+		nullptr,												//	const void*						pNext;
+		0u,														//	VkRenderPassCreateFlags			flags;
+		static_cast<deUint32>(attachmentDescriptions.size()),	//	deUint32						attachmentCount;
+		attachmentDescriptions.data(),							//	const VkAttachmentDescription*	pAttachments;
+		1u,														//	deUint32						subpassCount;
+		&subpassDescription,									//	const VkSubpassDescription*		pSubpasses;
+		0u,														//	deUint32						dependencyCount;
+		nullptr,												//	const VkSubpassDependency*		pDependencies;
+	};
+	const auto renderPass = vk::createRenderPass(vkd, device, &renderPassCreateInfo);
+
+	// Framebuffers.
+	FramebufferVec framebuffers;
+
+	DE_ASSERT(colorImageViews.size() == dsImageViews.size() * kNumColorAttachments);
+	for (size_t imgIdx = 0; imgIdx < dsImageViews.size(); ++imgIdx)
+	{
+		std::vector<vk::VkImageView> attachments;
+		for (deUint32 i = 0u; i < kNumColorAttachments; ++i)
+			attachments.push_back(colorImageViews[imgIdx * kNumColorAttachments + i].get());
+
+		attachments.push_back(dsImageViews[imgIdx].get());
+
+		const vk::VkFramebufferCreateInfo framebufferCreateInfo =
+		{
+			vk::VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO,	//	VkStructureType				sType;
+			nullptr,										//	const void*					pNext;
+			0u,												//	VkFramebufferCreateFlags	flags;
+			renderPass.get(),								//	VkRenderPass				renderPass;
+			static_cast<deUint32>(attachments.size()),		//	deUint32					attachmentCount;
+			attachments.data(),								//	const VkImageView*			pAttachments;
+			kFramebufferWidth,								//	deUint32					width;
+			kFramebufferHeight,								//	deUint32					height;
+			1u,												//	deUint32					layers;
+		};
+
+		framebuffers.emplace_back(vk::createFramebuffer(vkd, device, &framebufferCreateInfo));
+	}
+
+	// Shader modules.
+	const auto	vertModule = vk::createShaderModule(vkd, device, m_context.getBinaryCollection().get("vert"), 0u);
+	const auto	fragModule = vk::createShaderModule(vkd, device, m_context.getBinaryCollection().get("frag"), 0u);
+
+	// Shader stages.
+	std::vector<vk::VkPipelineShaderStageCreateInfo> shaderStages;
+
+	vk::VkPipelineShaderStageCreateInfo shaderStageCreateInfo =
+	{
+		vk::VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO,	//	VkStructureType						sType;
+		nullptr,													//	const void*							pNext;
+		0u,															//	VkPipelineShaderStageCreateFlags	flags;
+		vk::VK_SHADER_STAGE_VERTEX_BIT,								//	VkShaderStageFlagBits				stage;
+		vertModule.get(),											//	VkShaderModule						module;
+		"main",														//	const char*							pName;
+		nullptr,													//	const VkSpecializationInfo*			pSpecializationInfo;
+	};
+
+	shaderStages.push_back(shaderStageCreateInfo);
+	shaderStageCreateInfo.stage = vk::VK_SHADER_STAGE_FRAGMENT_BIT;
+	shaderStageCreateInfo.module = fragModule.get();
+	shaderStages.push_back(shaderStageCreateInfo);
+
+	// Input state.
+	const auto vertexBinding = vk::makeVertexInputBindingDescription(0u, kCoordsSize, vk::VK_VERTEX_INPUT_RATE_VERTEX);
+	const std::vector<vk::VkVertexInputAttributeDescription> vertexAttributes = {
+		vk::makeVertexInputAttributeDescription(0u, 0u, vk::VK_FORMAT_R32G32_SFLOAT, 0u)
+	};
+
+	const vk::VkPipelineVertexInputStateCreateInfo vertexInputStateCreateInfo =
+	{
+		vk::VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO,	//	VkStructureType								sType;
+		nullptr,														//	const void*									pNext;
+		0u,																//	VkPipelineVertexInputStateCreateFlags		flags;
+		1u,																//	deUint32									vertexBindingDescriptionCount;
+		&vertexBinding,													//	const VkVertexInputBindingDescription*		pVertexBindingDescriptions;
+		static_cast<deUint32>(vertexAttributes.size()),					//	deUint32									vertexAttributeDescriptionCount;
+		vertexAttributes.data(),										//	const VkVertexInputAttributeDescription*	pVertexAttributeDescriptions;
+	};
+
+	// Input assembly.
+	const vk::VkPipelineInputAssemblyStateCreateInfo inputAssemblyStateCreateInfo =
+	{
+		vk::VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO,	//	VkStructureType							sType;
+		nullptr,															//	const void*								pNext;
+		0u,																	//	VkPipelineInputAssemblyStateCreateFlags	flags;
+		vk::VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN,								//	VkPrimitiveTopology						topology;
+		VK_FALSE,															//	VkBool32								primitiveRestartEnable;
+	};
+
+	// Viewport state.
+	const vk::VkViewport viewport	(vk::makeViewport(kFramebufferWidth, kFramebufferHeight));
+	const vk::VkRect2D scissor		(vk::makeRect2D(kFramebufferWidth, kFramebufferHeight));
+
+	// For the static pipeline.
+	const vk::VkPipelineViewportStateCreateInfo viewportStateCreateInfo =
+	{
+		vk::VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO,					//	VkStructureType						sType;
+		nullptr,																	//	const void*							pNext;
+		0u,																			//	VkPipelineViewportStateCreateFlags	flags;
+		1u,																			//	deUint32							viewportCount;
+		&viewport,																	//	const VkViewport*					pViewports;
+		1u,																			//	deUint32							scissorCount;
+		&scissor,																	//	const VkRect2D*						pScissors;
+	};
+
+	// Rasterization state.
+	const vk::VkPipelineRasterizationStateCreateInfo rasterizationStateCreateInfo =
+	{
+		vk::VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO,	//	VkStructureType							sType;
+		nullptr,														//	const void*								pNext;
+		0u,																//	VkPipelineRasterizationStateCreateFlags	flags;
+		VK_FALSE,														//	VkBool32								depthClampEnable;
+		VK_FALSE,														//	VkBool32								rasterizerDiscardEnable;
+		vk::VK_POLYGON_MODE_FILL,										//	VkPolygonMode							polygonMode;
+		vk::VK_CULL_MODE_NONE,											//	VkCullModeFlags							cullMode;
+		vk::VK_FRONT_FACE_COUNTER_CLOCKWISE,							//	VkFrontFace								frontFace;
+		VK_FALSE,														//	VkBool32								depthBiasEnable;
+		0.0f,															//	float									depthBiasConstantFactor;
+		0.0f,															//	float									depthBiasClamp;
+		0.0f,															//	float									depthBiasSlopeFactor;
+		1.0f,															//	float									lineWidth;
+	};
+
+	// Multisample state.
+	const vk::VkPipelineMultisampleStateCreateInfo multisampleStateCreateInfo =
+	{
+		vk::VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO,	//	VkStructureType							sType;
+		nullptr,														//	const void*								pNext;
+		0u,																//	VkPipelineMultisampleStateCreateFlags	flags;
+		vk::VK_SAMPLE_COUNT_1_BIT,										//	VkSampleCountFlagBits					rasterizationSamples;
+		VK_FALSE,														//	VkBool32								sampleShadingEnable;
+		0.0f,															//	float									minSampleShading;
+		nullptr,														//	const VkSampleMask*						pSampleMask;
+		VK_FALSE,														//	VkBool32								alphaToCoverageEnable;
+		VK_FALSE,														//	VkBool32								alphaToOneEnable;
+	};
+
+	// Depth/stencil state.
+	const vk::VkStencilOpState stencil =
+	{
+		vk::VK_STENCIL_OP_KEEP,		// VkStencilOp	failOp;
+		vk::VK_STENCIL_OP_KEEP,		// VkStencilOp	passOp;
+		vk::VK_STENCIL_OP_KEEP,		// VkStencilOp	depthFailOp;
+		vk::VK_COMPARE_OP_ALWAYS,	// VkCompareOp	compareOp;
+		0xFFu,						// deUint32		compareMask;
+		0xFFu,						// deUint32		writeMask;
+		0u,							// deUint32		reference;
+	};
+
+	const vk::VkPipelineDepthStencilStateCreateInfo depthStencilStateCreateInfo =
+	{
+		vk::VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO,		//	VkStructureType							sType;
+		nullptr,															//	const void*								pNext;
+		0u,																	//	VkPipelineDepthStencilStateCreateFlags	flags;
+		VK_TRUE,															//	VkBool32								depthTestEnable;
+		VK_TRUE,															//	VkBool32								depthWriteEnable;
+		vk::VK_COMPARE_OP_LESS,												//	VkCompareOp								depthCompareOp;
+		VK_FALSE,															//	VkBool32								depthBoundsTestEnable;
+		VK_FALSE,															//	VkBool32								stencilTestEnable;
+		stencil,															//	VkStencilOpState						front;
+		stencil,															//	VkStencilOpState						back;
+		0.0f,																//	float									minDepthBounds;
+		1.0f,																//	float									maxDepthBounds;
+	};
+
+	// Dynamic state. Here we will set all states which have a dynamic value.
+	std::vector<vk::VkDynamicState> dynamicStates;
+
+	if (m_testConfig.colorWriteEnableConfig.dynamicValue)
+		dynamicStates.push_back(vk::VK_DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXT);
+
+	const vk::VkPipelineDynamicStateCreateInfo dynamicStateCreateInfo =
+	{
+		vk::VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO,	//	VkStructureType						sType;
+		nullptr,													//	const void*							pNext;
+		0u,															//	VkPipelineDynamicStateCreateFlags	flags;
+		static_cast<deUint32>(dynamicStates.size()),				//	deUint32							dynamicStateCount;
+		dynamicStates.data(),										//	const VkDynamicState*				pDynamicStates;
+	};
+
+	std::vector<vk::VkPipelineColorBlendAttachmentState> colorBlendAttachmentState(
+		kNumColorAttachments,
+		vk::VkPipelineColorBlendAttachmentState
+		{
+			VK_FALSE,						// VkBool32                 blendEnable
+			vk::VK_BLEND_FACTOR_ZERO,		// VkBlendFactor            srcColorBlendFactor
+			vk::VK_BLEND_FACTOR_ZERO,		// VkBlendFactor            dstColorBlendFactor
+			vk::VK_BLEND_OP_ADD,			// VkBlendOp                colorBlendOp
+			vk::VK_BLEND_FACTOR_ZERO,		// VkBlendFactor            srcAlphaBlendFactor
+			vk::VK_BLEND_FACTOR_ZERO,		// VkBlendFactor            dstAlphaBlendFactor
+			vk::VK_BLEND_OP_ADD,			// VkBlendOp                alphaBlendOp
+			vk::VK_COLOR_COMPONENT_R_BIT	// VkColorComponentFlags    colorWriteMask
+			| vk::VK_COLOR_COMPONENT_G_BIT
+			| vk::VK_COLOR_COMPONENT_B_BIT
+			| vk::VK_COLOR_COMPONENT_A_BIT
+		}
+	);
+
+	const vk::VkPipelineColorWriteCreateInfoEXT colorWriteCreateInfo =
+	{
+		vk::VK_STRUCTURE_TYPE_PIPELINE_COLOR_WRITE_CREATE_INFO_EXT,		// VkStructureType	sType;
+		nullptr,														// const void*		pNext;
+		kNumColorAttachments,											// deUint32			attachmentCount;
+		m_testConfig.colorWriteEnableConfig.staticValue.data()			// const VkBool32*	pColorWriteEnables;
+	};
+
+	const vk::VkPipelineColorBlendStateCreateInfo colorBlendStateCreateInfo =
+	{
+		vk::VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO,	// VkStructureType                               sType
+		&colorWriteCreateInfo,											// const void*                                   pNext
+		0u,																// VkPipelineColorBlendStateCreateFlags          flags
+		VK_FALSE,														// VkBool32                                      logicOpEnable
+		vk::VK_LOGIC_OP_CLEAR,											// VkLogicOp                                     logicOp
+		kNumColorAttachments,											// deUint32                                      attachmentCount
+		colorBlendAttachmentState.data(),								// const VkPipelineColorBlendAttachmentState*    pAttachments
+		{ 0.0f, 0.0f, 0.0f, 0.0f }										// float                                         blendConstants[4]
+	};
+
+	const vk::VkGraphicsPipelineCreateInfo graphicsPipelineCreateInfoTemplate =
+	{
+		vk::VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO,	//	VkStructureType									sType;
+		nullptr,												//	const void*										pNext;
+		0u,														//	VkPipelineCreateFlags							flags;
+		static_cast<deUint32>(shaderStages.size()),				//	deUint32										stageCount;
+		shaderStages.data(),									//	const VkPipelineShaderStageCreateInfo*			pStages;
+		&vertexInputStateCreateInfo,							//	const VkPipelineVertexInputStateCreateInfo*		pVertexInputState;
+		&inputAssemblyStateCreateInfo,							//	const VkPipelineInputAssemblyStateCreateInfo*	pInputAssemblyState;
+		nullptr,												//	const VkPipelineTessellationStateCreateInfo*	pTessellationState;
+		nullptr,												//	const VkPipelineViewportStateCreateInfo*		pViewportState;
+		&rasterizationStateCreateInfo,							//	const VkPipelineRasterizationStateCreateInfo*	pRasterizationState;
+		&multisampleStateCreateInfo,							//	const VkPipelineMultisampleStateCreateInfo*		pMultisampleState;
+		&depthStencilStateCreateInfo,							//	const VkPipelineDepthStencilStateCreateInfo*	pDepthStencilState;
+		&colorBlendStateCreateInfo,								//	const VkPipelineColorBlendStateCreateInfo*		pColorBlendState;
+		nullptr,												//	const VkPipelineDynamicStateCreateInfo*			pDynamicState;
+		pipelineLayout.get(),									//	VkPipelineLayout								layout;
+		renderPass.get(),										//	VkRenderPass									renderPass;
+		0u,														//	deUint32										subpass;
+		DE_NULL,												//	VkPipeline										basePipelineHandle;
+		0,														//	deInt32											basePipelineIndex;
+	};
+
+	vk::Move<vk::VkPipeline>	staticPipeline;
+	const bool					bindStaticFirst		= (kSequenceOrdering == SequenceOrdering::BETWEEN_PIPELINES	||
+													   kSequenceOrdering == SequenceOrdering::AFTER_PIPELINES	||
+													   kSequenceOrdering == SequenceOrdering::TWO_DRAWS_DYNAMIC);
+	const bool					useStaticPipeline	= (bindStaticFirst || kReversed);
+
+	// Create static pipeline when needed.
+	if (useStaticPipeline)
+	{
+		auto staticPipelineCreateInfo			= graphicsPipelineCreateInfoTemplate;
+		staticPipelineCreateInfo.pViewportState	= &viewportStateCreateInfo;
+		staticPipeline							= vk::createGraphicsPipeline(vkd, device, DE_NULL, &staticPipelineCreateInfo);
+	}
+
+	// Create dynamic pipeline.
+	vk::Move<vk::VkPipeline> graphicsPipeline;
+	{
+		auto dynamicPipelineCreateInfo				= graphicsPipelineCreateInfoTemplate;
+		dynamicPipelineCreateInfo.pDynamicState		= &dynamicStateCreateInfo;
+		dynamicPipelineCreateInfo.pViewportState	= &viewportStateCreateInfo;
+		graphicsPipeline							= vk::createGraphicsPipeline(vkd, device, DE_NULL, &dynamicPipelineCreateInfo);
+	}
+
+	// Command buffer.
+	const auto cmdPool		= vk::makeCommandPool(vkd, device, queueIndex);
+	const auto cmdBufferPtr	= vk::allocateCommandBuffer(vkd , device, cmdPool.get(), vk::VK_COMMAND_BUFFER_LEVEL_PRIMARY);
+	const auto cmdBuffer	= cmdBufferPtr.get();
+
+	// Clear values.
+	std::vector<vk::VkClearValue> clearValues;
+	auto colorClearValue = vk::makeClearValueColor(m_testConfig.clearColorValue);
+	for (deUint32 i = 0u; i < kNumColorAttachments; ++i)
+		clearValues.push_back(colorClearValue);
+	clearValues.push_back(vk::makeClearValueDepthStencil(m_testConfig.clearDepthValue, 0u));
+
+	// Record command buffer.
+	vk::beginCommandBuffer(vkd, cmdBuffer);
+
+	for (deUint32 iteration = 0u; iteration < kNumIterations; ++iteration)
+	{
+		// Maybe set dynamic state here.
+		if (kSequenceOrdering == SequenceOrdering::CMD_BUFFER_START)
+		{
+			setDynamicStates(m_testConfig, vkd, cmdBuffer);
+		}
+
+		// Begin render pass.
+		vk::beginRenderPass(vkd, cmdBuffer, renderPass.get(), framebuffers[iteration].get(), vk::makeRect2D(kFramebufferWidth, kFramebufferHeight), static_cast<deUint32>(clearValues.size()), clearValues.data());
+
+			// Bind a static pipeline first if needed.
+			if (bindStaticFirst && iteration == 0u)
+			{
+				vkd.cmdBindPipeline(cmdBuffer, vk::VK_PIPELINE_BIND_POINT_GRAPHICS, staticPipeline.get());
+			}
+
+			// Maybe set dynamic state here.
+			if (kSequenceOrdering == SequenceOrdering::BETWEEN_PIPELINES)
+			{
+				setDynamicStates(m_testConfig, vkd, cmdBuffer);
+			}
+
+			// Bind dynamic pipeline.
+			if ((kSequenceOrdering != SequenceOrdering::TWO_DRAWS_DYNAMIC &&
+				 kSequenceOrdering != SequenceOrdering::TWO_DRAWS_STATIC) ||
+				(kSequenceOrdering == SequenceOrdering::TWO_DRAWS_DYNAMIC && iteration > 0u) ||
+				(kSequenceOrdering == SequenceOrdering::TWO_DRAWS_STATIC && iteration == 0u))
+			{
+				vkd.cmdBindPipeline(cmdBuffer, vk::VK_PIPELINE_BIND_POINT_GRAPHICS, graphicsPipeline.get());
+			}
+
+			if (kSequenceOrdering == SequenceOrdering::BEFORE_GOOD_STATIC ||
+				(kSequenceOrdering == SequenceOrdering::TWO_DRAWS_DYNAMIC && iteration > 0u) ||
+				(kSequenceOrdering == SequenceOrdering::TWO_DRAWS_STATIC && iteration == 0u))
+			{
+				setDynamicStates(m_testConfig, vkd, cmdBuffer);
+			}
+
+			// Bind a static pipeline last if needed.
+			if (kSequenceOrdering == SequenceOrdering::BEFORE_GOOD_STATIC ||
+				(kSequenceOrdering == SequenceOrdering::TWO_DRAWS_STATIC && iteration > 0u))
+			{
+				vkd.cmdBindPipeline(cmdBuffer, vk::VK_PIPELINE_BIND_POINT_GRAPHICS, staticPipeline.get());
+			}
+
+			// Push constants.
+			PushConstants pushConstants =
+			{
+				m_testConfig.meshParams.color,		//	tcu::Vec4	triangleColor;
+				m_testConfig.meshParams.depth,		//	float		meshDepth;
+				m_testConfig.meshParams.scaleX,		//	float		scaleX;
+				m_testConfig.meshParams.scaleY,		//	float		scaleY;
+				m_testConfig.meshParams.offsetX,	//	float		offsetX;
+				m_testConfig.meshParams.offsetY,	//	float		offsetY;
+			};
+			vkd.cmdPushConstants(cmdBuffer, pipelineLayout.get(), pushConstantStageFlags, 0u, static_cast<deUint32>(sizeof(pushConstants)), &pushConstants);
+
+			// Maybe set dynamic state here.
+			if (kSequenceOrdering == SequenceOrdering::BEFORE_DRAW || kSequenceOrdering == SequenceOrdering::AFTER_PIPELINES)
+			{
+				setDynamicStates(m_testConfig, vkd, cmdBuffer);
+			}
+
+			// Bind vertex buffer and draw.
+			vk::VkDeviceSize offset = 0ull;
+			vkd.cmdBindVertexBuffers(cmdBuffer, 0u, 1u, &vertBuffer.get(), &offset);
+			vkd.cmdDraw(cmdBuffer, 6u, 1u, 0u, 0u);
+
+		vk::endRenderPass(vkd, cmdBuffer);
+	}
+
+	vk::endCommandBuffer(vkd, cmdBuffer);
+
+	// Submit commands.
+	vk::submitCommandsAndWait(vkd, device, queue, cmdBuffer);
+
+	// Read result image aspects from the last used framebuffer.
+	const tcu::UVec2	renderSize(kFramebufferWidth, kFramebufferHeight);
+
+	const int kWidth	= static_cast<int>(kFramebufferWidth);
+	const int kHeight	= static_cast<int>(kFramebufferHeight);
+
+	const tcu::Vec4		kGood(0.0f, 1.0f, 0.0f, 1.0f);
+	const tcu::Vec4		kBad(1.0f, 0.0f, 0.0f, 1.0f);
+
+	const tcu::TextureFormat errorFormat(tcu::TextureFormat::RGBA, tcu::TextureFormat::UNORM_INT8);
+
+	bool colorMatchAll = true;
+
+	// Check expected values.
+	auto nextAttachmentImage = colorImages.end() - kNumColorAttachments;
+	for (deUint32 attachmentIndex = 0u; attachmentIndex < kNumColorAttachments; ++attachmentIndex, ++nextAttachmentImage)
+	{
+		const auto			colorBuffer = readColorAttachment(vkd, device, queue, queueIndex, allocator, (*nextAttachmentImage)->get(), kColorFormat, renderSize);
+		const auto			colorAccess = colorBuffer->getAccess();
+
+		tcu::TextureLevel	colorError			(errorFormat, kWidth, kHeight);
+		const auto			colorErrorAccess	= colorError.getAccess();
+
+		bool colorMatch = true;
+
+		for (int y = 0; y < kHeight; ++y)
+		for (int x = 0; x < kWidth; ++x)
+		{
+			const auto colorPixel = colorAccess.getPixel(x, y);
+
+			bool match = tcu::boolAll(tcu::lessThan(tcu::absDiff(colorPixel, m_testConfig.expectedColor[attachmentIndex]), kColorThreshold));
+			colorErrorAccess.setPixel((match ? kGood : kBad), x, y);
+			if (!match)
+				colorMatch = false;
+		}
+
+		if (!colorMatch)
+		{
+			std::ostringstream desc;
+			desc << "Result color image and error mask for attachment #" << attachmentIndex;
+			logErrors(log, "Color", desc.str(), colorAccess, colorErrorAccess);
+			colorMatchAll = false;
+		}
+	}
+
+	const auto			depthBuffer = readDepthAttachment(vkd, device, queue, queueIndex, allocator, dsImages.back()->get(), dsFormat, renderSize);
+	const auto			depthAccess = depthBuffer->getAccess();
+	tcu::TextureLevel	depthError(errorFormat, kWidth, kHeight);
+	const auto			depthErrorAccess = depthError.getAccess();
+
+	const auto	minDepth	= m_testConfig.expectedDepth - 1.0e-07f;
+	const auto	maxDepth	= m_testConfig.expectedDepth + 1.0e-07f;
+	bool		depthMatch	= true;
+
+	for (int y = 0; y < kHeight; ++y)
+	for (int x = 0; x < kWidth; ++x)
+	{
+		const auto depthPixel = depthAccess.getPixDepth(x, y);
+		bool match = de::inRange(depthPixel, minDepth, maxDepth);
+		depthErrorAccess.setPixel((match ? kGood : kBad), x, y);
+		if (!match)
+			depthMatch = false;
+	}
+
+	if (!depthMatch)
+	{
+		logErrors(log, "Depth", "Result depth image and error mask", depthAccess, depthErrorAccess);
+	}
+
+	if (!(colorMatchAll && depthMatch))
+	{
+		return tcu::TestStatus::fail("Incorrect value found in attachments; please check logged images");
+	}
+
+	return tcu::TestStatus::pass("Pass");
+}
+
+template <typename VectorType>
+VectorType MaskVector(const VectorType& valueIfMaskIsFalse, const VectorType& valueIfMaskIsTrue, const std::vector<bool>& mask, bool inverse = false)
+{
+	DE_ASSERT(valueIfMaskIsFalse.size() == valueIfMaskIsTrue.size() && valueIfMaskIsFalse.size() == mask.size());
+
+	VectorType ret(mask.size());
+
+	for (size_t i = 0; i < mask.size(); ++i)
+	{
+		bool m = mask[i];
+		if (inverse)
+			m = !m;
+		ret[i] = m ? valueIfMaskIsTrue[i] : valueIfMaskIsFalse[i];
+	}
+
+	return ret;
+}
+
+void AddSingleTestCaseStatic(
+	const std::string& name,
+	const std::string& description,
+	const std::vector<bool> mask,
+	bool inverse,
+	tcu::TestCaseGroup* orderingGroup,
+	tcu::TestContext& testCtx)
+{
+	TestConfig config(SequenceOrdering::CMD_BUFFER_START);
+
+	// Enable writes and expect the mesh color, or disable writes and expect the clear color.
+
+	config.clearColorValue						= tcu::Vec4(0.25f, 0.5f, 0.75f, 0.5f);
+	config.meshParams.color						= tcu::Vec4(1.0f, 0.75f, 0.5f, 0.25f);
+
+	const auto allVkFalse						= Bool32Vec(kNumColorAttachments, VK_FALSE);
+	const auto allVkTrue						= Bool32Vec(kNumColorAttachments, VK_TRUE);
+
+	config.colorWriteEnableConfig.staticValue	= MaskVector(allVkFalse, allVkTrue, mask, inverse);
+
+	// Note colorWriteEnableConfig.dynamicValue is unset, defaults to an empty Maybe<T>
+
+	std::vector<tcu::Vec4> meshColorsPerAttachment(kNumColorAttachments);
+	meshColorsPerAttachment[0] = config.meshParams.color;
+	for (deUint32 i = 1u; i < kNumColorAttachments; ++i)
+		meshColorsPerAttachment[i] = meshColorsPerAttachment[i - 1] * 0.5f;
+
+	std::vector<tcu::Vec4> clearColorsPerAttachment(kNumColorAttachments, config.clearColorValue);
+
+	config.expectedColor = MaskVector(clearColorsPerAttachment, meshColorsPerAttachment, mask, inverse);
+
+	// Depth should always be written even when color is not
+	config.clearDepthValue	= 0.5f;
+	config.meshParams.depth	= 0.25f;
+	config.expectedDepth	= 0.25f;
+
+	orderingGroup->addChild(new ColorWriteEnableTest(testCtx, name, description, config));
+}
+
+void AddSingleTestCaseDynamic(
+	const std::string& name,
+	const std::string& description,
+	const std::vector<bool> mask,
+	bool inverse,
+	tcu::TestCaseGroup* orderingGroup,
+	tcu::TestContext& testCtx,
+	SequenceOrdering ordering)
+{
+	TestConfig config(ordering);
+
+	// Enable writes and expect the mesh color, or disable writes and expect the clear color.
+
+	config.clearColorValue						= tcu::Vec4(0.25f, 0.5f, 0.75f, 0.5f);
+	config.meshParams.color						= tcu::Vec4(1.0f, 0.75f, 0.5f, 0.25f);
+
+	const auto allVkFalse						= Bool32Vec(kNumColorAttachments, VK_FALSE);
+	const auto allVkTrue						= Bool32Vec(kNumColorAttachments, VK_TRUE);
+
+	config.colorWriteEnableConfig.staticValue	= inverse ? allVkTrue : allVkFalse;
+	config.colorWriteEnableConfig.dynamicValue	= MaskVector(allVkFalse, allVkTrue, mask, inverse);
+
+	std::vector<tcu::Vec4> meshColorsPerAttachment(kNumColorAttachments);
+	meshColorsPerAttachment[0] = config.meshParams.color;
+	for (deUint32 i = 1u; i < kNumColorAttachments; ++i)
+		meshColorsPerAttachment[i] = meshColorsPerAttachment[i - 1] * 0.5f;
+
+	std::vector<tcu::Vec4> clearColorsPerAttachment(kNumColorAttachments, config.clearColorValue);
+
+	config.expectedColor = MaskVector(clearColorsPerAttachment, meshColorsPerAttachment, mask, inverse);
+
+	// Depth should always be written even when color is not
+	config.clearDepthValue	= 0.5f;
+	config.meshParams.depth	= 0.25f;
+	config.expectedDepth	= 0.25f;
+
+	orderingGroup->addChild(new ColorWriteEnableTest(testCtx, name, description, config));
+}
+
+} // anonymous namespace
+
+tcu::TestCaseGroup* createColorWriteEnableTests (tcu::TestContext& testCtx)
+{
+	de::MovePtr<tcu::TestCaseGroup> colorWriteEnableGroup(new tcu::TestCaseGroup(testCtx, "color_write_enable", "Tests for VK_EXT_color_write_enable"));
+
+	DE_ASSERT(kNumColorAttachments >= 2);
+
+	std::vector<bool> mask_all				(kNumColorAttachments, true);
+	std::vector<bool> mask_first			(kNumColorAttachments, false);	mask_first[0]												= true;
+	std::vector<bool> mask_second			(kNumColorAttachments, false);	mask_second[1]												= true;
+	std::vector<bool> mask_last				(kNumColorAttachments, false);	mask_last.back()											= true;
+	std::vector<bool> mask_first_and_second	(kNumColorAttachments, false);	mask_first_and_second[0]	= mask_first_and_second[1]		= true;
+	std::vector<bool> mask_second_and_last	(kNumColorAttachments, false);	mask_second_and_last[1]		= mask_second_and_last.back()	= true;
+
+	// Test cases for the dynamic state
+	static const struct
+	{
+		SequenceOrdering	ordering;
+		std::string			name;
+		std::string			desc;
+	} kOrderingCases[] =
+	{
+		{ SequenceOrdering::CMD_BUFFER_START,	"cmd_buffer_start",		"Dynamic state set after command buffer start"																								},
+		{ SequenceOrdering::BEFORE_DRAW,		"before_draw",			"Dynamic state set just before drawing"																										},
+		{ SequenceOrdering::BETWEEN_PIPELINES,	"between_pipelines",	"Dynamic after a pipeline with static states has been bound and before a pipeline with dynamic states has been bound"						},
+		{ SequenceOrdering::AFTER_PIPELINES,	"after_pipelines",		"Dynamic state set after both a static-state pipeline and a second dynamic-state pipeline have been bound"									},
+		{ SequenceOrdering::BEFORE_GOOD_STATIC,	"before_good_static",	"Dynamic state set after a dynamic pipeline has been bound and before a second static-state pipeline with the right values has been bound"	},
+		{ SequenceOrdering::TWO_DRAWS_DYNAMIC,	"two_draws_dynamic",	"Bind bad static pipeline and draw, followed by binding correct dynamic pipeline and drawing again"											},
+		{ SequenceOrdering::TWO_DRAWS_STATIC,	"two_draws_static",		"Bind bad dynamic pipeline and draw, followed by binding correct static pipeline and drawing again"											},
+	};
+
+	for (int orderingIdx = 0; orderingIdx < DE_LENGTH_OF_ARRAY(kOrderingCases); ++orderingIdx)
+	{
+		const auto& kOrderingCase	= kOrderingCases[orderingIdx];
+		const auto& kOrdering		= kOrderingCase.ordering;
+
+		de::MovePtr<tcu::TestCaseGroup> orderingGroup(new tcu::TestCaseGroup(testCtx, kOrderingCase.name.c_str(), kOrderingCase.desc.c_str()));
+
+		AddSingleTestCaseDynamic("enable_all",					"Dynamically enable writes to all color attachments",					mask_all,				false, orderingGroup.get(), testCtx, kOrdering);
+		AddSingleTestCaseDynamic("enable_first",				"Dynamically enable writes to the first color attachment",				mask_first,				false, orderingGroup.get(), testCtx, kOrdering);
+		AddSingleTestCaseDynamic("enable_second",				"Dynamically enable writes to the second color attachment",				mask_second,			false, orderingGroup.get(), testCtx, kOrdering);
+		AddSingleTestCaseDynamic("enable_last",					"Dynamically enable writes to the last color attachment",				mask_last,				false, orderingGroup.get(), testCtx, kOrdering);
+		AddSingleTestCaseDynamic("enable_first_and_second",		"Dynamically enable writes to the first two color attachments",			mask_first_and_second,	false, orderingGroup.get(), testCtx, kOrdering);
+		AddSingleTestCaseDynamic("enable_second_and_last",		"Dynamically enable writes to the second and last color attachments",	mask_second_and_last,	false, orderingGroup.get(), testCtx, kOrdering);
+
+		AddSingleTestCaseDynamic("disable_all",					"Dynamically disable writes to all color attachments",					mask_all,				true,  orderingGroup.get(), testCtx, kOrdering);
+		AddSingleTestCaseDynamic("disable_first",				"Dynamically disable writes to the first color attachment",				mask_first,				true,  orderingGroup.get(), testCtx, kOrdering);
+		AddSingleTestCaseDynamic("disable_second",				"Dynamically disable writes to the second color attachment",			mask_second,			true,  orderingGroup.get(), testCtx, kOrdering);
+		AddSingleTestCaseDynamic("disable_last",				"Dynamically disable writes to the last color attachment",				mask_last,				true,  orderingGroup.get(), testCtx, kOrdering);
+		AddSingleTestCaseDynamic("disable_first_and_second",	"Dynamically disable writes to the first two color attachments",		mask_first_and_second,	true,  orderingGroup.get(), testCtx, kOrdering);
+		AddSingleTestCaseDynamic("disable_second_and_last",		"Dynamically disable writes to the second and last color attachments",	mask_second_and_last,	true,  orderingGroup.get(), testCtx, kOrdering);
+
+		colorWriteEnableGroup->addChild(orderingGroup.release());
+	}
+
+	// Test cases for the static state
+	// Note that the dynamic state test cases above also test pipelines with static state (when ordering is BEFORE_GOOD_STATIC and TWO_DRAWS_STATIC).
+	// However they all bind a pipeline with the static state AFTER binding a pipeline with the dynamic state.
+	// The only case missing, then, is static state alone without any dynamic pipelines in the same render pass or command buffer.
+	de::MovePtr<tcu::TestCaseGroup> staticOrderingGroup(new tcu::TestCaseGroup(testCtx, "static", "Static state set"));
+
+	AddSingleTestCaseStatic("enable_all",				"Statically enable writes to all color attachments",					mask_all,				false, staticOrderingGroup.get(), testCtx);
+	AddSingleTestCaseStatic("enable_first",				"Statically enable writes to the first color attachment",				mask_first,				false, staticOrderingGroup.get(), testCtx);
+	AddSingleTestCaseStatic("enable_second",			"Statically enable writes to the second color attachment",				mask_second,			false, staticOrderingGroup.get(), testCtx);
+	AddSingleTestCaseStatic("enable_last",				"Statically enable writes to the last color attachment",				mask_last,				false, staticOrderingGroup.get(), testCtx);
+	AddSingleTestCaseStatic("enable_first_and_second",	"Statically enable writes to the first two color attachments",			mask_first_and_second,	false, staticOrderingGroup.get(), testCtx);
+	AddSingleTestCaseStatic("enable_second_and_last",	"Statically enable writes to the second and last color attachments",	mask_second_and_last,	false, staticOrderingGroup.get(), testCtx);
+
+	AddSingleTestCaseStatic("disable_all",				"Statically disable writes to all color attachments",					mask_all,				true,  staticOrderingGroup.get(), testCtx);
+	AddSingleTestCaseStatic("disable_first",			"Statically disable writes to the first color attachment",				mask_first,				true,  staticOrderingGroup.get(), testCtx);
+	AddSingleTestCaseStatic("disable_second",			"Statically disable writes to the second color attachment",				mask_second,			true,  staticOrderingGroup.get(), testCtx);
+	AddSingleTestCaseStatic("disable_last",				"Statically disable writes to the last color attachment",				mask_last,				true,  staticOrderingGroup.get(), testCtx);
+	AddSingleTestCaseStatic("disable_first_and_second",	"Statically disable writes to the first two color attachments",			mask_first_and_second,	true,  staticOrderingGroup.get(), testCtx);
+	AddSingleTestCaseStatic("disable_second_and_last",	"Statically disable writes to the second and last color attachments",	mask_second_and_last,	true,  staticOrderingGroup.get(), testCtx);
+
+	colorWriteEnableGroup->addChild(staticOrderingGroup.release());
+
+	return colorWriteEnableGroup.release();
+}
+
+} // pipeline
+} // vkt
diff --git a/external/vulkancts/modules/vulkan/pipeline/vktPipelineVertexOnlyTests.hpp b/external/vulkancts/modules/vulkan/pipeline/vktPipelineColorWriteEnableTests.hpp
similarity index 70%
copy from external/vulkancts/modules/vulkan/pipeline/vktPipelineVertexOnlyTests.hpp
copy to external/vulkancts/modules/vulkan/pipeline/vktPipelineColorWriteEnableTests.hpp
index 1a85ebf..2abbf78 100644
--- a/external/vulkancts/modules/vulkan/pipeline/vktPipelineVertexOnlyTests.hpp
+++ b/external/vulkancts/modules/vulkan/pipeline/vktPipelineColorWriteEnableTests.hpp
@@ -1,11 +1,10 @@
-#ifndef _VKTPIPELINEVERTEXONLYTESTS_HPP
-#define _VKTPIPELINEVERTEXONLYTESTS_HPP
+#ifndef _VKTPIPELINECOLORWRITEENABLETESTS_HPP
+#define _VKTPIPELINECOLORWRITEENABLETESTS_HPP
 /*------------------------------------------------------------------------
  * Vulkan Conformance Tests
  * ------------------------
  *
- * Copyright (c) 2019 Google LLC
- * Copyright (c) 2019 The Khronos Group Inc.
+ * Copyright (c) 2021 The Khronos Group Inc.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -21,10 +20,9 @@
  *
  *//*!
  * \file
- * \brief Tests using only vertex shader in a graphics pipeline
+ * \brief Tests for Color Write Enable
  *//*--------------------------------------------------------------------*/
 
-#include "tcuDefs.hpp"
 #include "tcuTestCase.hpp"
 
 namespace vkt
@@ -32,9 +30,9 @@
 namespace pipeline
 {
 
-tcu::TestCaseGroup*	createVertexOnlyTests (tcu::TestContext& testCtx);
+tcu::TestCaseGroup* createColorWriteEnableTests (tcu::TestContext& testCtx);
 
 } // pipeline
 } // vkt
 
-#endif // _VKTPIPELINEVERTEXONLYTESTS_HPP
+#endif // _VKTPIPELINECOLORWRITEENABLETESTS_HPP
diff --git a/external/vulkancts/modules/vulkan/pipeline/vktPipelineCreationCacheControlTests.cpp b/external/vulkancts/modules/vulkan/pipeline/vktPipelineCreationCacheControlTests.cpp
new file mode 100644
index 0000000..c1c1bc9
--- /dev/null
+++ b/external/vulkancts/modules/vulkan/pipeline/vktPipelineCreationCacheControlTests.cpp
@@ -0,0 +1,1412 @@
+/*------------------------------------------------------------------------
+ * Vulkan Conformance Tests
+ * ------------------------
+ *
+ * Copyright (c) 2020 The Khronos Group Inc.
+ * Copyright (c) 2020 Advanced Micro Devices, Inc.
+ *
+ * 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 Pipeline Cache Tests
+ */
+/*--------------------------------------------------------------------*/
+
+#include "vktPipelineCreationCacheControlTests.hpp"
+
+#include "deRandom.hpp"
+#include "deUniquePtr.hpp"
+#include "tcuStringTemplate.hpp"
+#include "vkDeviceUtil.hpp"
+#include "vkRefUtil.hpp"
+#include "vktConstexprVectorUtil.hpp"
+#include "vktTestCase.hpp"
+#include "vktTestCaseUtil.hpp"
+
+#include <chrono>
+#include <random>
+#include <string>
+#include <vector>
+
+namespace vkt
+{
+namespace pipeline
+{
+namespace
+{
+using namespace vk;
+
+using tcu::StringTemplate;
+using tcu::TestCaseGroup;
+using tcu::TestContext;
+using tcu::TestStatus;
+
+using ::std::array;
+using ::std::string;
+using ::std::vector;
+
+/*--------------------------------------------------------------------*//*!
+ * Elements common to all test types
+ *//*--------------------------------------------------------------------*/
+namespace test_common
+{
+static constexpr auto VK_NULL_HANDLE = DE_NULL;
+
+using ::std::chrono::high_resolution_clock;
+using ::std::chrono::microseconds;
+
+using duration			 = high_resolution_clock::duration;
+using UniquePipeline	 = Move<VkPipeline>;
+using UniqueShaderModule = Move<VkShaderModule>;
+
+/*--------------------------------------------------------------------*//*!
+ * \brief Paired Vulkan API result with elapsed duration
+ *//*--------------------------------------------------------------------*/
+struct TimedResult
+{
+	VkResult result;
+	duration elapsed;
+};
+
+/*--------------------------------------------------------------------*//*!
+ * \brief Validation function type output from vkCreate*Pipelines()
+ *
+ * \param result - VkResult returned from API call
+ * \param pipeliens - vector of pipelines created
+ * \param elapsed - high_resolution_clock::duration of time elapsed in API
+ * \param reason - output string to give the reason for failure
+ *
+ * \return QP_TEST_RESULT_PASS on success QP_TEST_RESULT_FAIL otherwise
+ *//*--------------------------------------------------------------------*/
+using Validator = qpTestResult (*)(VkResult, const vector<UniquePipeline>&, duration, string&);
+
+static constexpr size_t VALIDATOR_ARRAY_MAX = 4;
+using ValidatorArray						= ConstexprVector<Validator, VALIDATOR_ARRAY_MAX>;
+
+/*--------------------------------------------------------------------*//*!
+ * \brief Run a loop of validation tests and return the result
+ *//*--------------------------------------------------------------------*/
+template <typename pipelines_t, qpTestResult FAIL_RESULT = QP_TEST_RESULT_FAIL>
+TestStatus validateResults(VkResult				 result,
+						   const pipelines_t&	 pipelines,
+						   duration				 elapsed,
+						   const ValidatorArray& validators)
+{
+	using de::contains;
+	static constexpr VkResult ALLOWED_RESULTS[] = {VK_SUCCESS, VK_ERROR_PIPELINE_COMPILE_REQUIRED_EXT};
+
+	string reason;
+
+	if (contains(DE_ARRAY_BEGIN(ALLOWED_RESULTS), DE_ARRAY_END(ALLOWED_RESULTS), result) == DE_FALSE)
+	{
+		static const StringTemplate ERROR_MSG = {"Pipeline creation returned an error result: ${0}"};
+		TCU_THROW(InternalError, ERROR_MSG.format(result).c_str());
+	}
+
+	for (const auto& validator : validators)
+	{
+		const auto qpResult = validator(result, pipelines, elapsed, reason);
+		if (qpResult != QP_TEST_RESULT_PASS)
+		{
+			return {qpResult, reason};
+		}
+	}
+
+	return TestStatus::pass("Test passed.");
+}
+
+/*--------------------------------------------------------------------*//*!
+ * \brief Generate an error if result does not match VK_RESULT
+ *//*--------------------------------------------------------------------*/
+template <VkResult VK_RESULT, qpTestResult FAIL_RESULT = QP_TEST_RESULT_FAIL>
+qpTestResult checkResult(VkResult result, const vector<UniquePipeline>&, duration, string& reason)
+{
+	if (VK_RESULT != result)
+	{
+		static const StringTemplate ERROR_MSG = {"Got ${0}, Expected ${1}"};
+		reason								  = ERROR_MSG.format(result, VK_RESULT);
+		return FAIL_RESULT;
+	}
+
+	return QP_TEST_RESULT_PASS;
+}
+
+/*--------------------------------------------------------------------*//*!
+ * \brief Generate an error if pipeline[INDEX] is not valid
+ *//*--------------------------------------------------------------------*/
+template <size_t INDEX, qpTestResult FAIL_RESULT = QP_TEST_RESULT_FAIL>
+qpTestResult checkPipelineMustBeValid(VkResult, const vector<UniquePipeline>& pipelines, duration, string& reason)
+{
+	if (pipelines.size() <= INDEX)
+	{
+		static const StringTemplate ERROR_MSG = {"Index ${0} is not in created pipelines (pipelines.size(): ${1})"};
+		TCU_THROW(TestError, ERROR_MSG.format(INDEX, pipelines.size()));
+	}
+
+	if (*pipelines[INDEX] == VK_NULL_HANDLE)
+	{
+		static const StringTemplate ERROR_MSG = {"pipelines[${0}] is not a valid VkPipeline object"};
+		reason								  = ERROR_MSG.format(INDEX);
+		return FAIL_RESULT;
+	}
+
+	return QP_TEST_RESULT_PASS;
+}
+
+/*--------------------------------------------------------------------*//*!
+ * \brief Generate an error if pipeline[INDEX] is not VK_NULL_HANDLE
+ *//*--------------------------------------------------------------------*/
+template <size_t INDEX, qpTestResult FAIL_RESULT = QP_TEST_RESULT_FAIL>
+qpTestResult checkPipelineMustBeNull(VkResult, const vector<UniquePipeline>& pipelines, duration, string& reason)
+{
+	if (pipelines.size() <= INDEX)
+	{
+		static const StringTemplate ERROR_MSG = {"Index ${0} is not in created pipelines (pipelines.size(): ${1})"};
+		TCU_THROW(TestError, ERROR_MSG.format(INDEX, pipelines.size()));
+	}
+
+	if (*pipelines[INDEX] != VK_NULL_HANDLE)
+	{
+		static const StringTemplate ERROR_MSG = {"pipelines[${0}] is not VK_NULL_HANDLE"};
+		reason								  = ERROR_MSG.format(INDEX);
+		return FAIL_RESULT;
+	}
+
+	return QP_TEST_RESULT_PASS;
+}
+
+/*--------------------------------------------------------------------*//*!
+ * \brief Generate an error if any pipeline is valid after an early-return failure
+ *//*--------------------------------------------------------------------*/
+template <size_t INDEX, qpTestResult FAIL_RESULT = QP_TEST_RESULT_FAIL>
+qpTestResult checkPipelineNullAfterIndex(VkResult, const vector<UniquePipeline>& pipelines, duration, string& reason)
+{
+	if (pipelines.size() <= INDEX)
+	{
+		static const StringTemplate ERROR_MSG = {"Index ${0} is not in created pipelines (pipelines.size(): ${1})"};
+		TCU_THROW(TestError, ERROR_MSG.format(INDEX, pipelines.size()));
+	}
+
+	if (pipelines.size() - 1 == INDEX)
+	{
+		static const StringTemplate ERROR_MSG = {"Index ${0} is the last pipeline, likely a malformed test case"};
+		TCU_THROW(TestError, ERROR_MSG.format(INDEX));
+	}
+
+	// Only have to iterate through if the requested index is null
+	if (*pipelines[INDEX] == VK_NULL_HANDLE)
+	{
+		for (size_t i = INDEX + 1; i < pipelines.size(); ++i)
+		{
+			if (*pipelines[i] != VK_NULL_HANDLE)
+			{
+				static const StringTemplate ERROR_MSG = {
+					"pipelines[${0}] is not VK_NULL_HANDLE after a explicit early return index"};
+				reason = ERROR_MSG.format(i);
+				return FAIL_RESULT;
+			}
+		}
+	}
+
+	return QP_TEST_RESULT_PASS;
+}
+
+/*--------------------------------------------------------------------*//*!
+ * Time limit constants
+ *//*--------------------------------------------------------------------*/
+enum ElapsedTime
+{
+	ELAPSED_TIME_INFINITE  = microseconds{-1}.count(),
+	ELAPSED_TIME_IMMEDIATE = microseconds{500}.count(),
+	ELAPSED_TIME_FAST	   = microseconds{1000}.count()
+};
+
+/*--------------------------------------------------------------------*//*!
+ * \brief Generate an error if elapsed time exceeds MAX_TIME
+ *//*--------------------------------------------------------------------*/
+template <ElapsedTime MAX_TIME, qpTestResult FAIL_RESULT = QP_TEST_RESULT_FAIL>
+qpTestResult checkElapsedTime(VkResult, const vector<UniquePipeline>&, duration elapsed, string& reason)
+{
+#if defined(DE_DEBUG)
+	DE_UNREF(elapsed);
+	DE_UNREF(reason);
+
+	// In debug mode timing is not likely to be accurate
+	return QP_TEST_RESULT_PASS;
+#else
+
+	using ::std::chrono::duration_cast;
+
+	static constexpr microseconds ALLOWED_TIME = microseconds{MAX_TIME};
+
+	if (elapsed > ALLOWED_TIME)
+	{
+		static const StringTemplate ERROR_MSG = {"pipeline creation took longer than ${0}us (actual time: ${1}us)"};
+		reason = ERROR_MSG.format(ALLOWED_TIME.count(), duration_cast<microseconds>(elapsed).count());
+		return FAIL_RESULT;
+	}
+
+	return QP_TEST_RESULT_PASS;
+#endif
+}
+
+/*--------------------------------------------------------------------*//*!
+ * \brief Test case parameters
+ *//*--------------------------------------------------------------------*/
+struct TestParams
+{
+	enum CacheType
+	{
+		NO_CACHE = 0,
+		EXPLICIT_CACHE,
+		DERIVATIVE_HANDLE,
+		DERIVATIVE_INDEX
+	};
+
+	struct Iteration
+	{
+		static constexpr size_t MAX_VARIANTS = 4;
+		using Variant						 = VkPipelineCreateFlags;
+		using VariantArray					 = ConstexprVector<Variant, MAX_VARIANTS>;
+
+		static constexpr Variant NORMAL		  = 0;
+		static constexpr Variant NO_COMPILE	  = VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_EXT;
+		static constexpr Variant EARLY_RETURN = NO_COMPILE | VK_PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT_EXT;
+
+		static constexpr VariantArray SINGLE_NORMAL						= VariantArray{NORMAL};
+		static constexpr VariantArray SINGLE_NOCOMPILE					= VariantArray{NO_COMPILE};
+		static constexpr VariantArray BATCH_NOCOMPILE_COMPILE_NOCOMPILE = VariantArray{NO_COMPILE, NORMAL, NO_COMPILE};
+		static constexpr VariantArray BATCH_RETURN_COMPILE_NOCOMPILE = VariantArray{EARLY_RETURN, NORMAL, NO_COMPILE};
+
+		inline constexpr Iteration() : variants{}, validators{} {};
+		inline constexpr Iteration(const VariantArray& v, const ValidatorArray& f) : variants{v}, validators{f} {};
+
+		VariantArray   variants;
+		ValidatorArray validators;
+	};
+
+	static constexpr size_t MAX_ITERATIONS = 4;
+	using IterationArray				   = ConstexprVector<Iteration, MAX_ITERATIONS>;
+
+	const char*	   name;
+	const char*	   description;
+	CacheType	   cacheType;
+	IterationArray iterations;
+};
+
+/*--------------------------------------------------------------------*//*!
+ * \brief Verify extension and feature support
+ *//*--------------------------------------------------------------------*/
+void checkSupport(Context& context, const TestParams&)
+{
+	static constexpr char EXT_NAME[] = "VK_EXT_pipeline_creation_cache_control";
+	if (!context.requireDeviceFunctionality(EXT_NAME))
+	{
+		TCU_THROW(NotSupportedError, "Extension 'VK_EXT_pipeline_creation_cache_control' is not supported");
+	}
+
+	const auto features = context.getPipelineCreationCacheControlFeaturesEXT();
+	if (features.pipelineCreationCacheControl == DE_FALSE)
+	{
+		TCU_THROW(NotSupportedError, "Feature 'pipelineCreationCacheControl' is not enabled");
+	}
+}
+
+/*--------------------------------------------------------------------*//*!
+ * \brief Generate a random floating point number as a string
+ *//*--------------------------------------------------------------------*/
+float randomFloat()
+{
+#if !defined(DE_DEBUG)
+	static de::Random state = {::std::random_device{}()};
+#else
+	static de::Random state = {0xDEADBEEF};
+#endif
+
+	return state.getFloat();
+}
+
+/*--------------------------------------------------------------------*//*!
+ * \brief Get a string of VkResults from a vector
+ *//*--------------------------------------------------------------------*/
+string getResultsString(const vector<VkResult>& results)
+{
+	using ::std::ostringstream;
+
+	ostringstream output;
+
+	output << "results[" << results.size() << "]={ ";
+
+	if (!results.empty())
+	{
+		output << results[0];
+	}
+
+	for (size_t i = 1; i < results.size(); ++i)
+	{
+		output << ", " << results[i];
+	}
+
+	output << " }";
+
+	return output.str();
+}
+
+/*--------------------------------------------------------------------*//*!
+ * \brief Cast a pointer to an the expected SPIRV type
+ *//*--------------------------------------------------------------------*/
+template <typename _t>
+inline const deUint32* shader_cast(const _t* ptr)
+{
+	return reinterpret_cast<const deUint32*>(ptr);
+}
+
+/*--------------------------------------------------------------------*//*!
+ * \brief Capture a container of Vulkan handles into Move<> types
+ *//*--------------------------------------------------------------------*/
+template <typename input_container_t,
+		  typename handle_t	 = typename input_container_t::value_type,
+		  typename move_t	 = Move<handle_t>,
+		  typename deleter_t = Deleter<handle_t>,
+		  typename output_t	 = vector<move_t>>
+output_t wrapHandles(const DeviceInterface&		  vk,
+					 VkDevice					  device,
+					 const input_container_t&	  input,
+					 const VkAllocationCallbacks* allocator = DE_NULL)
+{
+	using ::std::begin;
+	using ::std::end;
+	using ::std::transform;
+
+	auto output = output_t{};
+	output.resize(input.size());
+
+	struct Predicate
+	{
+		deleter_t deleter;
+		move_t	  operator()(handle_t v)
+		{
+			return (v != VK_NULL_HANDLE) ? move_t{check(v), deleter} : move_t{};
+		}
+	};
+
+	const auto wrapHandle = Predicate{deleter_t{vk, device, allocator}};
+
+	transform(begin(input), end(input), begin(output), wrapHandle);
+
+	return output;
+}
+
+/*--------------------------------------------------------------------*//*!
+ * \brief create vkPipelineCache for test params
+ *//*--------------------------------------------------------------------*/
+Move<VkPipelineCache> createPipelineCache(const DeviceInterface& vk, VkDevice device, const TestParams& params)
+{
+	if (params.cacheType != TestParams::EXPLICIT_CACHE)
+	{
+		return {};
+	}
+
+	static constexpr auto cacheInfo = VkPipelineCacheCreateInfo{
+		VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO, //sType
+		DE_NULL,									  //pNext
+		VkPipelineCacheCreateFlags{},				  //flags
+		deUintptr{0},								  //initialDataSize
+		DE_NULL										  //pInitialData
+	};
+
+	return createPipelineCache(vk, device, &cacheInfo);
+}
+
+/*--------------------------------------------------------------------*//*!
+ * \brief create VkPipelineLayout with descriptor sets from test parameters
+ *//*--------------------------------------------------------------------*/
+Move<VkPipelineLayout> createPipelineLayout(const DeviceInterface&				 vk,
+											VkDevice							 device,
+											const vector<VkDescriptorSetLayout>& setLayouts,
+											const TestParams&)
+{
+	const auto layoutCreateInfo = VkPipelineLayoutCreateInfo{
+		VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO, // sType
+		DE_NULL,									   // pNext
+		VkPipelineLayoutCreateFlags{},				   // flags
+		static_cast<deUint32>(setLayouts.size()),	   // setLayoutCount
+		setLayouts.data(),							   // pSetLayouts
+		deUint32{0u},								   // pushConstantRangeCount
+		DE_NULL,									   // pPushConstantRanges
+	};
+
+	return createPipelineLayout(vk, device, &layoutCreateInfo);
+}
+
+/*--------------------------------------------------------------------*//*!
+ * \brief create basic VkPipelineLayout from test parameters
+ *//*--------------------------------------------------------------------*/
+Move<VkPipelineLayout> createPipelineLayout(const DeviceInterface& vk, VkDevice device, const TestParams&)
+{
+	static constexpr auto layoutCreateInfo = VkPipelineLayoutCreateInfo{
+		VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO, // sType
+		DE_NULL,									   // pNext
+		VkPipelineLayoutCreateFlags{},				   // flags
+		deUint32{0u},								   // setLayoutCount
+		DE_NULL,									   // pSetLayouts
+		deUint32{0u},								   // pushConstantRangeCount
+		DE_NULL,									   // pPushConstantRanges
+	};
+
+	return createPipelineLayout(vk, device, &layoutCreateInfo);
+}
+
+/*--------------------------------------------------------------------*//*!
+ * \brief Create array of shader modules
+ *//*--------------------------------------------------------------------*/
+vector<UniqueShaderModule> createShaderModules(const DeviceInterface&	  vk,
+											   VkDevice					  device,
+											   const BinaryCollection&	  collection,
+											   const vector<const char*>& names)
+{
+	auto output = vector<UniqueShaderModule>{};
+	output.reserve(names.size());
+
+	for (const auto& name : names)
+	{
+		const auto& binary	   = collection.get(name);
+		const auto	createInfo = VkShaderModuleCreateInfo{
+			 VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO, // sType
+			 DE_NULL,									  // pNext
+			 VkShaderModuleCreateFlags{},				  // flags
+			 binary.getSize(),							  // codeSize
+			 shader_cast(binary.getBinary())			  // pCode
+		 };
+
+		output.push_back(createShaderModule(vk, device, &createInfo));
+	}
+
+	return output;
+}
+
+/*--------------------------------------------------------------------*//*!
+ * \brief Create array of shader binding stages
+ *//*--------------------------------------------------------------------*/
+vector<VkPipelineShaderStageCreateInfo> createShaderStages(const vector<Move<VkShaderModule>>&	modules,
+														   const vector<VkShaderStageFlagBits>& stages)
+{
+	DE_ASSERT(modules.size() == stages.size());
+
+	auto output = vector<VkPipelineShaderStageCreateInfo>{};
+	output.reserve(modules.size());
+
+	int i = 0;
+
+	for (const auto& module : modules)
+	{
+		const auto stageInfo = VkPipelineShaderStageCreateInfo{
+			VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO, // sType
+			DE_NULL,											 // pNext
+			VkPipelineShaderStageCreateFlags{},					 // flags
+			stages[i++],										 // stage
+			*module,											 // module
+			"main",												 // pName
+			DE_NULL												 // pSpecializationInfo
+		};
+
+		output.push_back(stageInfo);
+	}
+
+	return output;
+}
+
+} // namespace test_common
+
+/*--------------------------------------------------------------------*//*!
+ * \brief Graphics pipeline specific testing
+ *//*--------------------------------------------------------------------*/
+namespace graphics_tests
+{
+using namespace test_common;
+
+/*--------------------------------------------------------------------*//*!
+ * \brief Common graphics pipeline create info initialization
+ *//*--------------------------------------------------------------------*/
+VkGraphicsPipelineCreateInfo getPipelineCreateInfoCommon()
+{
+	static constexpr auto VERTEX_BINDING = VkVertexInputBindingDescription{
+		deUint32{0u},				// binding
+		sizeof(float[4]),			// stride
+		VK_VERTEX_INPUT_RATE_VERTEX // inputRate
+	};
+
+	static constexpr auto VERTEX_ATTRIBUTE = VkVertexInputAttributeDescription{
+		deUint32{0u},				   // location
+		deUint32{0u},				   // binding
+		VK_FORMAT_R32G32B32A32_SFLOAT, // format
+		deUint32{0u}				   // offset
+	};
+
+	static constexpr auto VERTEX_INPUT_STATE = VkPipelineVertexInputStateCreateInfo{
+		VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO, // sType
+		DE_NULL,												   // pNext
+		VkPipelineVertexInputStateCreateFlags{},				   // flags
+		deUint32{1u},											   // vertexBindingDescriptionCount
+		&VERTEX_BINDING,										   // pVertexBindingDescriptions
+		deUint32{1u},											   // vertexAttributeDescriptionCount
+		&VERTEX_ATTRIBUTE										   // pVertexAttributeDescriptions
+	};
+
+	static constexpr auto IA_STATE = VkPipelineInputAssemblyStateCreateInfo{
+		VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO, // sType
+		DE_NULL,													 // pNext
+		VkPipelineInputAssemblyStateCreateFlags{},					 // flags
+		VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST,						 // topology
+		VK_TRUE														 // primitiveRestartEnable
+	};
+
+	static constexpr auto TESSALATION_STATE = VkPipelineTessellationStateCreateInfo{
+		VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO, // sType
+		DE_NULL,																 // pNext
+		VkPipelineTessellationStateCreateFlags{},								 // flags
+		deUint32{0u}															 // patchControlPoints
+	};
+
+	static constexpr auto VIEWPORT = VkViewport{
+		0.f, // x
+		0.f, // y
+		1.f, // width
+		1.f, // height
+		0.f, // minDepth
+		1.f	 // maxDept
+	};
+
+	static constexpr auto SCISSOR_RECT = VkRect2D{
+		{0, 0},	   // offset
+		{256, 256} // extent
+	};
+
+	static constexpr auto VIEWPORT_STATE = VkPipelineViewportStateCreateInfo{
+		VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO, // sType
+		DE_NULL,											   // pNext
+		VkPipelineViewportStateCreateFlags{},				   // flags
+		deUint32{1u},										   // viewportCount
+		&VIEWPORT,											   // pViewports
+		deUint32{1u},										   // scissorCount
+		&SCISSOR_RECT										   // pScissors
+	};
+
+	static constexpr auto RASTERIZATION_STATE = VkPipelineRasterizationStateCreateInfo{
+		VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO, // sType
+		DE_NULL,													// pNext
+		VkPipelineRasterizationStateCreateFlags{},					// flags
+		VK_FALSE,													// depthClampEnable
+		VK_TRUE,													// rasterizerDiscardEnable
+		VK_POLYGON_MODE_FILL,										// polygonMode
+		VK_CULL_MODE_NONE,											// cullMode
+		VK_FRONT_FACE_CLOCKWISE,									// frontFace
+		VK_FALSE,													// depthBiasEnable
+		0.f,														// depthBiasConstantFactor
+		0.f,														// depthBiasClamp
+		0.f,														// depthBiasSlopeFactor
+		1.f															// lineWidth
+	};
+
+	static constexpr auto SAMPLE_MASK = VkSampleMask{};
+
+	static constexpr auto MULTISAMPLE_STATE = VkPipelineMultisampleStateCreateInfo{
+		VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO, // sType
+		DE_NULL,												  // pNext
+		VkPipelineMultisampleStateCreateFlags{},				  // flags
+		VK_SAMPLE_COUNT_1_BIT,									  // rasterizationSamples
+		VK_FALSE,												  // sampleShadingEnable
+		0.f,													  // minSampleShading
+		&SAMPLE_MASK,											  // pSampleMask
+		VK_FALSE,												  // alphaToCoverageEnable
+		VK_FALSE												  // alphaToOneEnable
+	};
+
+	static constexpr auto STENCIL_OP_STATE = VkStencilOpState{
+		VK_STENCIL_OP_ZERO,	  // failOp
+		VK_STENCIL_OP_ZERO,	  // passOp
+		VK_STENCIL_OP_ZERO,	  // depthFailOp
+		VK_COMPARE_OP_ALWAYS, // compareOp
+		deUint32{0u},		  // compareMask
+		deUint32{0u},		  // writeMask
+		deUint32{0u}		  // reference
+	};
+
+	static constexpr auto DEPTH_STENCIL_STATE = VkPipelineDepthStencilStateCreateInfo{
+		VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO, // sType
+		DE_NULL,													// pNext
+		VkPipelineDepthStencilStateCreateFlags{},					// flags
+		VK_FALSE,													// depthTestEnable
+		VK_FALSE,													// depthWriteEnable
+		VK_COMPARE_OP_ALWAYS,										// depthCompareOp
+		VK_FALSE,													// depthBoundsTestEnable
+		VK_FALSE,													// stencilTestEnable
+		STENCIL_OP_STATE,											// front
+		STENCIL_OP_STATE,											// back
+		0.f,														// minDepthBounds
+		1.f															// maxDepthBounds
+	};
+
+	static constexpr auto COLOR_FLAGS_ALL = VkColorComponentFlags{VK_COLOR_COMPONENT_R_BIT | VK_COLOR_COMPONENT_G_BIT |
+																  VK_COLOR_COMPONENT_B_BIT | VK_COLOR_COMPONENT_A_BIT};
+
+	static constexpr auto COLOR_BLEND_ATTACH_STATE = VkPipelineColorBlendAttachmentState{
+		VK_FALSE,			  // blendEnable
+		VK_BLEND_FACTOR_ONE,  // srcColorBlendFactor
+		VK_BLEND_FACTOR_ZERO, // dstColorBlendFactor
+		VK_BLEND_OP_ADD,	  // colorBlendOp
+		VK_BLEND_FACTOR_ONE,  // srcAlphaBlendFactor
+		VK_BLEND_FACTOR_ZERO, // dstAlphaBlendFactor
+		VK_BLEND_OP_ADD,	  // alphaBlendOp
+		COLOR_FLAGS_ALL		  // colorWriteMask
+	};
+
+	static constexpr auto COLOR_BLEND_STATE = VkPipelineColorBlendStateCreateInfo{
+		VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO, // sType
+		DE_NULL,												  // pNext
+		VkPipelineColorBlendStateCreateFlags{},					  // flags
+		VK_FALSE,												  // logicOpEnable
+		VK_LOGIC_OP_SET,										  // logicOp
+		deUint32{1u},											  // attachmentCount
+		&COLOR_BLEND_ATTACH_STATE,								  // pAttachments
+		{0.f, 0.f, 0.f, 0.f}									  // blendConstants[4]
+	};
+
+	static constexpr auto DYNAMIC_STATE = VkPipelineDynamicStateCreateInfo{
+		VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO, // sType;
+		DE_NULL,											  // pNext;
+		VkPipelineDynamicStateCreateFlags{},				  // flags;
+		deUint32{0u},										  // dynamicStateCount;
+		DE_NULL												  // pDynamicStates;
+	};
+
+	return VkGraphicsPipelineCreateInfo{
+		VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO, // sType
+		DE_NULL,										 // pNext
+		VkPipelineCreateFlags{},						 // flags
+		deUint32{0u},									 // stageCount
+		DE_NULL,										 // pStages
+		&VERTEX_INPUT_STATE,							 // pVertexInputState
+		&IA_STATE,										 // pInputAssemblyState
+		&TESSALATION_STATE,								 // pTessellationState
+		&VIEWPORT_STATE,								 // pViewportState
+		&RASTERIZATION_STATE,							 // pRasterizationState
+		&MULTISAMPLE_STATE,								 // pMultisampleState
+		&DEPTH_STENCIL_STATE,							 // pDepthStencilState
+		&COLOR_BLEND_STATE,								 // pColorBlendState
+		&DYNAMIC_STATE,									 // pDynamicState
+		VK_NULL_HANDLE,									 // layout
+		VK_NULL_HANDLE,									 // renderPass
+		deUint32{0u},									 // subpass
+		VK_NULL_HANDLE,									 // basePipelineHandle
+		deInt32{-1}										 // basePipelineIndex
+	};
+}
+
+/*--------------------------------------------------------------------*//*!
+ * \brief create VkGraphicsPipelineCreateInfo structs from test iteration
+ *//*--------------------------------------------------------------------*/
+vector<VkGraphicsPipelineCreateInfo> createPipelineCreateInfos(const TestParams::Iteration&		   iteration,
+															   const VkGraphicsPipelineCreateInfo& base,
+															   VkPipeline						   basePipeline,
+															   const TestParams&				   testParameter)
+{
+	auto output = vector<VkGraphicsPipelineCreateInfo>{};
+	output.reserve(iteration.variants.size());
+
+	deInt32 count			  = 0;
+	deInt32 basePipelineIndex = -1;
+
+	for (VkPipelineCreateFlags flags : iteration.variants)
+	{
+		const auto curIndex	  = count++;
+		auto	   createInfo = base;
+
+		if (testParameter.cacheType == TestParams::DERIVATIVE_INDEX)
+		{
+			if (flags & VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_EXT)
+			{
+				if (basePipelineIndex != -1)
+				{
+					flags |= VK_PIPELINE_CREATE_DERIVATIVE_BIT;
+				}
+			}
+			else
+			{
+				flags |= VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT;
+
+				if (basePipelineIndex == -1)
+				{
+					basePipelineIndex = curIndex;
+				}
+			}
+		}
+
+		createInfo.flags			  = flags;
+		createInfo.basePipelineHandle = basePipeline;
+		createInfo.basePipelineIndex  = basePipelineIndex;
+
+		output.push_back(createInfo);
+	}
+
+	return output;
+}
+
+/*--------------------------------------------------------------------*//*!
+ * \brief create VkRenderPass object for Graphics test
+ *//*--------------------------------------------------------------------*/
+Move<VkRenderPass> createRenderPass(const DeviceInterface& vk, VkDevice device, const TestParams&)
+{
+	static constexpr auto COLOR_FORMAT = VK_FORMAT_R8G8B8A8_UNORM;
+
+	static constexpr auto COLOR_ATTACHMENT_REF = VkAttachmentReference{
+		deUint32{0u},							 // attachment
+		VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL // layout
+	};
+
+	static constexpr auto SUBPASS = VkSubpassDescription{
+		VkSubpassDescriptionFlags{},	 // flags
+		VK_PIPELINE_BIND_POINT_GRAPHICS, // pipelineBindPoint
+		deUint32{0u},					 // inputAttachmentCount
+		DE_NULL,						 // pInputAttachments
+		deUint32{1u},					 // colorAttachmentCount
+		&COLOR_ATTACHMENT_REF,			 // pColorAttachments
+		DE_NULL,						 // pResolveAttachments
+		DE_NULL,						 // pDepthStencilAttachment
+		deUint32{0u},					 // preserveAttachmentCount
+		DE_NULL							 // pPreserveAttachments
+	};
+
+	static constexpr auto COLOR_ATTACHMENT = VkAttachmentDescription{
+		VkAttachmentDescriptionFlags{},	  // flags
+		COLOR_FORMAT,					  // format
+		VK_SAMPLE_COUNT_1_BIT,			  // samples
+		VK_ATTACHMENT_LOAD_OP_CLEAR,	  // loadOp
+		VK_ATTACHMENT_STORE_OP_STORE,	  // storeOp
+		VK_ATTACHMENT_LOAD_OP_DONT_CARE,  // stencilLoadOp
+		VK_ATTACHMENT_STORE_OP_DONT_CARE, // stencilStoreOp
+		VK_IMAGE_LAYOUT_UNDEFINED,		  // initialLayout
+		VK_IMAGE_LAYOUT_PRESENT_SRC_KHR	  // finalLayout
+	};
+
+	static constexpr auto RENDER_PASS_CREATE_INFO = VkRenderPassCreateInfo{
+		VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO, // sType
+		DE_NULL,								   // pNext
+		VkRenderPassCreateFlags{},				   // flags
+		deUint32{1u},							   // attachmentCount
+		&COLOR_ATTACHMENT,						   // pAttachments
+		deUint32{1u},							   // subpassCount
+		&SUBPASS,								   // pSubpasses
+		deUint32{0u},							   // dependencyCount
+		DE_NULL									   // pDependencies
+	};
+
+	return createRenderPass(vk, device, &RENDER_PASS_CREATE_INFO);
+}
+
+/*--------------------------------------------------------------------*//*!
+ * \brief Initialize shader programs
+ *//*--------------------------------------------------------------------*/
+void initPrograms(SourceCollections& dst, const TestParams&)
+{
+	using ::glu::FragmentSource;
+	using ::glu::VertexSource;
+
+	// Vertex Shader
+	static const StringTemplate VS_TEXT = {"#version 310 es\n"
+										   "layout(location = 0) in vec4 position;\n"
+										   "layout(location = 0) out vec3 vertColor;\n"
+										   "void main (void)\n"
+										   "{\n"
+										   "  gl_Position = position;\n"
+										   "  vertColor = vec3(${0}, ${1}, ${2});\n"
+										   "}\n"};
+
+	// Fragment Shader
+	static const StringTemplate FS_TEXT = {"#version 310 es\n"
+										   "precision highp float;\n"
+										   "layout(location = 0) in vec3 vertColor;\n"
+										   "layout(location = 0) out vec4 outColor;\n"
+										   "void main (void)\n"
+										   "{\n"
+										   "  const vec3 fragColor = vec3(${0}, ${1}, ${2});\n"
+										   "  outColor = vec4((fragColor + vertColor) * 0.5, 1.0);\n"
+										   "}\n"};
+
+	dst.glslSources.add("vertex") << VertexSource{VS_TEXT.format(randomFloat(), randomFloat(), randomFloat())};
+	dst.glslSources.add("fragment") << FragmentSource{FS_TEXT.format(randomFloat(), randomFloat(), randomFloat())};
+}
+
+/*--------------------------------------------------------------------*//*!
+ * \brief return both result and elapsed time from pipeline creation
+ *//*--------------------------------------------------------------------*/
+template <typename create_infos_t, typename pipelines_t>
+TimedResult timePipelineCreation(const DeviceInterface&		  vk,
+								 const VkDevice				  device,
+								 const VkPipelineCache		  cache,
+								 const create_infos_t&		  createInfos,
+								 pipelines_t&				  pipelines,
+								 const VkAllocationCallbacks* pAllocator = DE_NULL)
+{
+	DE_ASSERT(createInfos.size() <= pipelines.size());
+
+	const auto timeStart = high_resolution_clock::now();
+	const auto result	 = vk.createGraphicsPipelines(
+		   device, cache, static_cast<deUint32>(createInfos.size()), createInfos.data(), pAllocator, pipelines.data());
+	const auto elapsed = high_resolution_clock::now() - timeStart;
+	return {result, elapsed};
+}
+
+/*--------------------------------------------------------------------*//*!
+ * \brief Test instance function
+ *//*--------------------------------------------------------------------*/
+TestStatus testInstance(Context& context, const TestParams& testParameter)
+{
+	const auto& vk			  = context.getDeviceInterface();
+	const auto	device		  = context.getDevice();
+	const auto	pipelineCache = createPipelineCache(vk, device, testParameter);
+	const auto	layout		  = createPipelineLayout(vk, device, testParameter);
+	const auto	renderPass	  = createRenderPass(vk, device, testParameter);
+	const auto	modules		  = createShaderModules(vk, device, context.getBinaryCollection(), {"vertex", "fragment"});
+	const auto	shaderStages  = createShaderStages(modules, {VK_SHADER_STAGE_VERTEX_BIT, VK_SHADER_STAGE_FRAGMENT_BIT});
+
+	// Placeholder for base pipeline if using cacheType == DERIVATIVE_HANDLE
+	auto basePipeline = UniquePipeline{};
+
+	auto baseCreateInfo		  = getPipelineCreateInfoCommon();
+	baseCreateInfo.layout	  = layout.get();
+	baseCreateInfo.renderPass = renderPass.get();
+	baseCreateInfo.stageCount = static_cast<deUint32>(shaderStages.size());
+	baseCreateInfo.pStages	  = shaderStages.data();
+
+	auto results = vector<VkResult>{};
+	results.reserve(testParameter.iterations.size());
+
+	for (const auto& i : testParameter.iterations)
+	{
+		const auto createInfos = createPipelineCreateInfos(i, baseCreateInfo, basePipeline.get(), testParameter);
+		auto	   created	   = vector<VkPipeline>{};
+		created.resize(createInfos.size());
+
+		const auto timedResult = timePipelineCreation(vk, device, pipelineCache.get(), createInfos, created);
+		auto	   pipelines   = wrapHandles(vk, device, created);
+
+		const auto status = validateResults(timedResult.result, pipelines, timedResult.elapsed, i.validators);
+		if (status.getCode() != QP_TEST_RESULT_PASS)
+		{
+			return status;
+		}
+
+		if ((testParameter.cacheType == TestParams::DERIVATIVE_HANDLE) && (*basePipeline == VK_NULL_HANDLE))
+		{
+			for (auto& pipeline : pipelines)
+			{
+				if (*pipeline != VK_NULL_HANDLE)
+				{
+					basePipeline = pipeline;
+					break;
+				}
+			}
+		}
+
+		results.push_back(timedResult.result);
+	}
+
+	static const StringTemplate PASS_MSG = {"Test Passed. ${0}"};
+	return TestStatus::pass(PASS_MSG.format(getResultsString(results)));
+}
+
+} // namespace graphics_tests
+
+/*--------------------------------------------------------------------*//*!
+ * \brief Compute pipeline specific testing
+ *//*--------------------------------------------------------------------*/
+namespace compute_tests
+{
+using namespace test_common;
+
+/*--------------------------------------------------------------------*//*!
+ * \brief create VkComputePipelineCreateInfo structs from test iteration
+ *//*--------------------------------------------------------------------*/
+vector<VkComputePipelineCreateInfo> createPipelineCreateInfos(const TestParams::Iteration&		 iteration,
+															  const VkComputePipelineCreateInfo& base,
+															  VkPipeline						 basePipeline,
+															  const TestParams&					 testParameter)
+{
+	auto output = vector<VkComputePipelineCreateInfo>{};
+	output.reserve(iteration.variants.size());
+
+	deInt32 count			  = 0;
+	deInt32 basePipelineIndex = -1;
+
+	for (VkPipelineCreateFlags flags : iteration.variants)
+	{
+		const auto curIndex	  = count++;
+		auto	   createInfo = base;
+
+		if (testParameter.cacheType == TestParams::DERIVATIVE_INDEX)
+		{
+			if (flags & VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_EXT)
+			{
+				if (basePipelineIndex != -1)
+				{
+					flags |= VK_PIPELINE_CREATE_DERIVATIVE_BIT;
+				}
+			}
+			else
+			{
+				flags |= VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT;
+
+				if (basePipelineIndex == -1)
+				{
+					basePipelineIndex = curIndex;
+				}
+			}
+		}
+
+		createInfo.flags			  = flags;
+		createInfo.basePipelineHandle = basePipeline;
+		createInfo.basePipelineIndex  = basePipelineIndex;
+
+		output.push_back(createInfo);
+	}
+
+	return output;
+}
+
+/*--------------------------------------------------------------------*//*!
+ * \brief create compute descriptor set layout
+ *//*--------------------------------------------------------------------*/
+Move<VkDescriptorSetLayout> createDescriptorSetLayout(const DeviceInterface& vk, VkDevice device, const TestParams&)
+{
+	static constexpr auto DESCRIPTOR_SET_LAYOUT_BINDING = VkDescriptorSetLayoutBinding{
+		deUint32{0u},					   // binding
+		VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, // descriptorType
+		deUint32{1u},					   // descriptorCount
+		VK_SHADER_STAGE_COMPUTE_BIT,	   // stageFlags
+		DE_NULL							   // pImmutableSamplers
+	};
+
+	static constexpr auto DESCRIPTOR_SET_LAYOUT_CREATE_INFO = VkDescriptorSetLayoutCreateInfo{
+		VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO, // sType
+		DE_NULL,											 // pNext
+		VkDescriptorSetLayoutCreateFlags{},					 // flags
+		deUint32{1u},										 // bindingCount
+		&DESCRIPTOR_SET_LAYOUT_BINDING						 // pBindings
+	};
+
+	return createDescriptorSetLayout(vk, device, &DESCRIPTOR_SET_LAYOUT_CREATE_INFO);
+}
+
+/*--------------------------------------------------------------------*//*!
+ * \brief Initialize shader programs
+ *//*--------------------------------------------------------------------*/
+void initPrograms(SourceCollections& dst, const TestParams&)
+{
+	using ::glu::ComputeSource;
+
+	static const StringTemplate CS_TEXT = {"#version 450\n"
+										   "precision highp float;\n"
+										   "layout (local_size_x = 64, local_size_y = 1, local_size_z = 1) in;\n"
+										   "layout (std140, binding = 0) buffer buf { vec3 data[]; };\n"
+										   "void main (void)\n"
+										   "{\n"
+										   "  data[gl_GlobalInvocationID.x] = vec3(${0}, ${1}, ${2});\n"
+										   "}\n"};
+
+	dst.glslSources.add("compute")
+		<< ComputeSource{CS_TEXT.format(randomFloat(), randomFloat(), randomFloat())};
+}
+
+/*--------------------------------------------------------------------*//*!
+ * \brief return both result and elapsed time from pipeline creation
+ *//*--------------------------------------------------------------------*/
+template <typename create_infos_t, typename pipelines_t>
+TimedResult timePipelineCreation(const DeviceInterface&		  vk,
+								 const VkDevice				  device,
+								 const VkPipelineCache		  cache,
+								 const create_infos_t&		  createInfos,
+								 pipelines_t&				  pipelines,
+								 const VkAllocationCallbacks* pAllocator = DE_NULL)
+{
+	DE_ASSERT(createInfos.size() <= pipelines.size());
+
+	const auto timeStart = high_resolution_clock::now();
+	const auto result	 = vk.createComputePipelines(
+		   device, cache, static_cast<deUint32>(createInfos.size()), createInfos.data(), pAllocator, pipelines.data());
+	const auto elapsed = high_resolution_clock::now() - timeStart;
+	return {result, elapsed};
+}
+
+/*--------------------------------------------------------------------*//*!
+ * \brief Test instance function
+ *//*--------------------------------------------------------------------*/
+TestStatus testInstance(Context& context, const TestParams& testParameter)
+{
+	const auto& vk					= context.getDeviceInterface();
+	const auto	device				= context.getDevice();
+	const auto	pipelineCache		= createPipelineCache(vk, device, testParameter);
+	const auto	descriptorSetLayout = createDescriptorSetLayout(vk, device, testParameter);
+	const auto	pipelineLayout		= createPipelineLayout(vk, device, {descriptorSetLayout.get()}, testParameter);
+	const auto	modules				= createShaderModules(vk, device, context.getBinaryCollection(), {"compute"});
+	const auto	shaderStages		= createShaderStages(modules, {VK_SHADER_STAGE_COMPUTE_BIT});
+
+	// Placeholder for base pipeline if using cacheType == DERIVATIVE_HANDLE
+	auto basePipeline = UniquePipeline{};
+
+	const auto baseCreateInfo = VkComputePipelineCreateInfo{
+		VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO, // sType
+		DE_NULL,										// pNext
+		VkPipelineCreateFlags{},						// flags
+		shaderStages[0],								// stage
+		pipelineLayout.get(),							// layout
+		VK_NULL_HANDLE,									// basePipelineHandle
+		deInt32{-1}										// basePipelineIndex
+	};
+
+	auto results = vector<VkResult>{};
+	results.reserve(testParameter.iterations.size());
+
+	for (const auto& i : testParameter.iterations)
+	{
+		const auto createInfos = createPipelineCreateInfos(i, baseCreateInfo, basePipeline.get(), testParameter);
+		auto	   created	   = vector<VkPipeline>{};
+		created.resize(createInfos.size());
+
+		const auto timedResult = timePipelineCreation(vk, device, pipelineCache.get(), createInfos, created);
+		auto	   pipelines   = wrapHandles(vk, device, created);
+
+		const auto status = validateResults(timedResult.result, pipelines, timedResult.elapsed, i.validators);
+		if (status.getCode() != QP_TEST_RESULT_PASS)
+		{
+			return status;
+		}
+
+		if ((testParameter.cacheType == TestParams::DERIVATIVE_HANDLE) && (*basePipeline == VK_NULL_HANDLE))
+		{
+			for (auto& pipeline : pipelines)
+			{
+				if (*pipeline != VK_NULL_HANDLE)
+				{
+					basePipeline = pipeline;
+					break;
+				}
+			}
+		}
+
+		results.push_back(timedResult.result);
+	}
+
+	static const StringTemplate PASS_MSG = {"Test Passed. ${0}"};
+	return TestStatus::pass(PASS_MSG.format(getResultsString(results)));
+}
+
+} // namespace compute_tests
+
+using namespace test_common;
+
+// Disable formatting on this next block for readability
+// clang-format off
+/*--------------------------------------------------------------------*//*!
+ * \brief Duplicate single pipeline recreation with explicit caching
+ *//*--------------------------------------------------------------------*/
+static constexpr TestParams DUPLICATE_SINGLE_RECREATE_EXPLICIT_CACHING =
+{
+	"duplicate_single_recreate_explicit_caching",
+	"Duplicate single pipeline recreation with explicit caching",
+	TestParams::EXPLICIT_CACHE,
+	TestParams::IterationArray
+	{
+		TestParams::Iteration{
+			// Iteration [0]: Force compilation of pipeline
+			TestParams::Iteration::SINGLE_NORMAL,
+			ValidatorArray{
+				// Fail if result is not VK_SUCCESS
+				checkResult<VK_SUCCESS>,
+				// Fail if pipeline is not valid
+				checkPipelineMustBeValid<0>
+			}
+		},
+		TestParams::Iteration{
+			// Iteration [1]: Request compilation of same pipeline without compile
+			TestParams::Iteration::SINGLE_NOCOMPILE,
+			ValidatorArray{
+				// Warn if result is not VK_SUCCESS
+				checkResult<VK_SUCCESS, QP_TEST_RESULT_COMPATIBILITY_WARNING>,
+				// Warn if pipeline is not valid
+				checkPipelineMustBeValid<0, QP_TEST_RESULT_COMPATIBILITY_WARNING>,
+				// Warn if pipeline took too long
+				checkElapsedTime<ELAPSED_TIME_FAST, QP_TEST_RESULT_QUALITY_WARNING>
+			}
+		}
+	}
+};
+
+/*--------------------------------------------------------------------*//*!
+ * \brief Duplicate single pipeline recreation with no explicit cache
+ *//*--------------------------------------------------------------------*/
+static constexpr TestParams DUPLICATE_SINGLE_RECREATE_NO_CACHING =
+{
+	"duplicate_single_recreate_no_caching",
+	"Duplicate single pipeline recreation with no explicit cache",
+	TestParams::NO_CACHE,
+	TestParams::IterationArray{
+		TestParams::Iteration{
+			// Iteration [0]: Force compilation of pipeline
+			TestParams::Iteration::SINGLE_NORMAL,
+			ValidatorArray{
+				// Fail if result is not VK_SUCCESS
+				checkResult<VK_SUCCESS>,
+				// Fail if pipeline is not valid
+				checkPipelineMustBeValid<0>
+			}
+		},
+		TestParams::Iteration{
+			// Iteration [1]: Request compilation of same pipeline without compile
+			TestParams::Iteration::SINGLE_NOCOMPILE,
+			ValidatorArray{
+				// Warn if pipeline took too long
+				checkElapsedTime<ELAPSED_TIME_FAST, QP_TEST_RESULT_QUALITY_WARNING>
+			}
+		}
+	}
+};
+
+/*--------------------------------------------------------------------*//*!
+ * \brief Duplicate single pipeline recreation using derivative pipelines
+ *//*--------------------------------------------------------------------*/
+static constexpr TestParams DUPLICATE_SINGLE_RECREATE_DERIVATIVE =
+{
+	"duplicate_single_recreate_derivative",
+	"Duplicate single pipeline recreation using derivative pipelines",
+	TestParams::DERIVATIVE_HANDLE,
+	TestParams::IterationArray{
+		TestParams::Iteration{
+			// Iteration [0]: Force compilation of pipeline
+			TestParams::Iteration::SINGLE_NORMAL,
+			ValidatorArray{
+				// Fail if result is not VK_SUCCESS
+				checkResult<VK_SUCCESS>,
+				// Fail if pipeline is not valid
+				checkPipelineMustBeValid<0>
+				}
+			},
+		TestParams::Iteration{
+			// Iteration [1]: Request compilation of same pipeline without compile
+			TestParams::Iteration::SINGLE_NOCOMPILE,
+			ValidatorArray{
+				// Warn if pipeline took too long
+				checkElapsedTime<ELAPSED_TIME_FAST, QP_TEST_RESULT_QUALITY_WARNING>
+			}
+		}
+	}
+};
+
+/*--------------------------------------------------------------------*//*!
+ * \brief Single creation of never before seen pipeline without compile
+ *//*--------------------------------------------------------------------*/
+static constexpr TestParams SINGLE_PIPELINE_NO_COMPILE =
+{
+	"single_pipeline_no_compile",
+	"Single creation of never before seen pipeline without compile",
+	TestParams::NO_CACHE,
+	TestParams::IterationArray{
+		TestParams::Iteration{
+			TestParams::Iteration::SINGLE_NOCOMPILE,
+			ValidatorArray{
+				// Warn if pipeline took too long
+				checkElapsedTime<ELAPSED_TIME_IMMEDIATE, QP_TEST_RESULT_QUALITY_WARNING>
+			}
+		}
+	}
+};
+
+/*--------------------------------------------------------------------*//*!
+ * \brief Batch creation of duplicate pipelines with explicit caching
+ *//*--------------------------------------------------------------------*/
+static constexpr TestParams DUPLICATE_BATCH_PIPELINES_EXPLICIT_CACHE =
+{
+	"duplicate_batch_pipelines_explicit_cache",
+	"Batch creation of duplicate pipelines with explicit caching",
+	TestParams::EXPLICIT_CACHE,
+	TestParams::IterationArray{
+		TestParams::Iteration{
+			TestParams::Iteration::BATCH_NOCOMPILE_COMPILE_NOCOMPILE,
+			ValidatorArray{
+				// Fail if pipeline[1] is not valid
+				checkPipelineMustBeValid<1>,
+				// Warn if result is not VK_ERROR_PIPELINE_COMPILE_REQUIRED_EXT
+				checkResult<VK_ERROR_PIPELINE_COMPILE_REQUIRED_EXT, QP_TEST_RESULT_COMPATIBILITY_WARNING>,
+				// Warn if pipelines[0] is not VK_NULL_HANDLE
+				checkPipelineMustBeNull<0, QP_TEST_RESULT_COMPATIBILITY_WARNING>,
+				// Warn if pipelines[2] is not valid
+				checkPipelineMustBeValid<2, QP_TEST_RESULT_COMPATIBILITY_WARNING>
+			}
+		}
+	}
+};
+
+/*--------------------------------------------------------------------*//*!
+ * \brief Batch creation of duplicate pipelines with no caching
+ *//*--------------------------------------------------------------------*/
+static constexpr TestParams DUPLICATE_BATCH_PIPELINES_NO_CACHE =
+{
+	"duplicate_batch_pipelines_no_cache",
+	"Batch creation of duplicate pipelines with no caching",
+	TestParams::EXPLICIT_CACHE,
+	TestParams::IterationArray{
+		TestParams::Iteration{
+			TestParams::Iteration::BATCH_NOCOMPILE_COMPILE_NOCOMPILE,
+			ValidatorArray{
+				// Fail if pipeline[1] is not valid
+				checkPipelineMustBeValid<1>,
+				// Warn if result is not VK_ERROR_PIPELINE_COMPILE_REQUIRED_EXT
+				checkResult<VK_ERROR_PIPELINE_COMPILE_REQUIRED_EXT, QP_TEST_RESULT_COMPATIBILITY_WARNING>,
+				// Warn if pipelines[0] is not VK_NULL_HANDLE
+				checkPipelineMustBeNull<0, QP_TEST_RESULT_COMPATIBILITY_WARNING>
+			}
+		}
+	}
+};
+
+/*--------------------------------------------------------------------*//*!
+ * \brief Batch creation of duplicate pipelines with derivative pipeline index
+ *//*--------------------------------------------------------------------*/
+static constexpr TestParams DUPLICATE_BATCH_PIPELINES_DERIVATIVE_INDEX =
+{
+	"duplicate_batch_pipelines_derivative_index",
+	"Batch creation of duplicate pipelines with derivative pipeline index",
+	TestParams::DERIVATIVE_INDEX,
+	TestParams::IterationArray{
+		TestParams::Iteration{
+			TestParams::Iteration::BATCH_NOCOMPILE_COMPILE_NOCOMPILE,
+			ValidatorArray{
+				// Fail if pipeline[1] is not valid
+				checkPipelineMustBeValid<1>,
+				// Warn if result is not VK_ERROR_PIPELINE_COMPILE_REQUIRED_EXT
+				checkResult<VK_ERROR_PIPELINE_COMPILE_REQUIRED_EXT, QP_TEST_RESULT_COMPATIBILITY_WARNING>,
+				// Warn if pipelines[0] is not VK_NULL_HANDLE
+				checkPipelineMustBeNull<0, QP_TEST_RESULT_COMPATIBILITY_WARNING>
+			}
+		}
+	}
+};
+
+/*--------------------------------------------------------------------*//*!
+ * \brief Batch creation of pipelines with early return
+ *//*--------------------------------------------------------------------*/
+static constexpr TestParams BATCH_PIPELINES_EARLY_RETURN =
+{
+	"batch_pipelines_early_return",
+	"Batch creation of pipelines with early return",
+	TestParams::NO_CACHE,
+	TestParams::IterationArray{
+		TestParams::Iteration{
+			TestParams::Iteration::BATCH_RETURN_COMPILE_NOCOMPILE,
+			ValidatorArray{
+				// fail if a valid pipeline follows the early-return failure
+				checkPipelineNullAfterIndex<0>,
+				// Warn if return was not immediate
+				checkElapsedTime<ELAPSED_TIME_IMMEDIATE, QP_TEST_RESULT_QUALITY_WARNING>,
+				// Warn if pipelines[0] is not VK_NULL_HANDLE
+				checkPipelineMustBeNull<0, QP_TEST_RESULT_COMPATIBILITY_WARNING>,
+				// Warn if result is not VK_ERROR_PIPELINE_COMPILE_REQUIRED_EXT
+				checkResult<VK_ERROR_PIPELINE_COMPILE_REQUIRED_EXT, QP_TEST_RESULT_COMPATIBILITY_WARNING>
+			}
+		}
+	}
+};
+
+/*--------------------------------------------------------------------*//*!
+ * \brief Full array of test cases
+ *//*--------------------------------------------------------------------*/
+static constexpr TestParams TEST_CASES[] =
+{
+	SINGLE_PIPELINE_NO_COMPILE,
+	BATCH_PIPELINES_EARLY_RETURN,
+	DUPLICATE_SINGLE_RECREATE_EXPLICIT_CACHING,
+	DUPLICATE_SINGLE_RECREATE_NO_CACHING,
+	DUPLICATE_SINGLE_RECREATE_DERIVATIVE,
+	DUPLICATE_BATCH_PIPELINES_EXPLICIT_CACHE,
+	DUPLICATE_BATCH_PIPELINES_NO_CACHE,
+	DUPLICATE_BATCH_PIPELINES_DERIVATIVE_INDEX
+};
+// clang-format on
+
+/*--------------------------------------------------------------------*//*!
+ * \brief Variadic version of de::newMovePtr
+ *//*--------------------------------------------------------------------*/
+template <typename T, typename... args_t>
+inline de::MovePtr<T> newMovePtr(args_t&&... args)
+{
+	return de::MovePtr<T>(new T(::std::forward<args_t>(args)...));
+}
+
+/*--------------------------------------------------------------------*//*!
+ * \brief Make test group consisting of graphics pipeline tests
+ *//*--------------------------------------------------------------------*/
+void addGraphicsPipelineTests(TestCaseGroup& group)
+{
+	using namespace graphics_tests;
+
+	auto tests = newMovePtr<TestCaseGroup>(
+		group.getTestContext(), "graphics_pipelines", "Test pipeline creation cache control with graphics pipelines");
+
+	for (const auto& params : TEST_CASES)
+	{
+		addFunctionCaseWithPrograms<const TestParams&>(
+			tests.get(), params.name, params.description, checkSupport, initPrograms, testInstance, params);
+	}
+
+	group.addChild(tests.release());
+}
+
+/*--------------------------------------------------------------------*//*!
+ * \brief Make test group consisting of compute pipeline tests
+ *//*--------------------------------------------------------------------*/
+void addComputePipelineTests(TestCaseGroup& group)
+{
+	using namespace compute_tests;
+
+	auto tests = newMovePtr<TestCaseGroup>(
+		group.getTestContext(), "compute_pipelines", "Test pipeline creation cache control with compute pipelines");
+
+	for (const auto& params : TEST_CASES)
+	{
+		addFunctionCaseWithPrograms<const TestParams&>(
+			tests.get(), params.name, params.description, checkSupport, initPrograms, testInstance, params);
+	}
+
+	group.addChild(tests.release());
+}
+
+} // namespace
+
+/*--------------------------------------------------------------------*//*!
+ * \brief Make pipeline creation cache control test group
+ *//*--------------------------------------------------------------------*/
+TestCaseGroup* createCacheControlTests(TestContext& testCtx)
+{
+	auto tests = newMovePtr<TestCaseGroup>(testCtx, "creation_cache_control", "pipeline creation cache control tests");
+
+	addGraphicsPipelineTests(*tests);
+	addComputePipelineTests(*tests);
+
+	return tests.release();
+}
+
+} // namespace pipeline
+
+} // namespace vkt
diff --git a/external/vulkancts/modules/vulkan/pipeline/vktPipelineVertexOnlyTests.hpp b/external/vulkancts/modules/vulkan/pipeline/vktPipelineCreationCacheControlTests.hpp
similarity index 68%
copy from external/vulkancts/modules/vulkan/pipeline/vktPipelineVertexOnlyTests.hpp
copy to external/vulkancts/modules/vulkan/pipeline/vktPipelineCreationCacheControlTests.hpp
index 1a85ebf..c10707a 100644
--- a/external/vulkancts/modules/vulkan/pipeline/vktPipelineVertexOnlyTests.hpp
+++ b/external/vulkancts/modules/vulkan/pipeline/vktPipelineCreationCacheControlTests.hpp
@@ -1,11 +1,11 @@
-#ifndef _VKTPIPELINEVERTEXONLYTESTS_HPP
-#define _VKTPIPELINEVERTEXONLYTESTS_HPP
+#ifndef _VKTPIPELINECREATIONCACHECONTROLTESTS_HPP
+#define _VKTPIPELINECREATIONCACHECONTROLTESTS_HPP
 /*------------------------------------------------------------------------
  * Vulkan Conformance Tests
  * ------------------------
  *
- * Copyright (c) 2019 Google LLC
- * Copyright (c) 2019 The Khronos Group Inc.
+ * Copyright (c) 2020 The Khronos Group Inc.
+ * Copyright (c) 2020, Advanced Micro Devices, Inc.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -21,20 +21,19 @@
  *
  *//*!
  * \file
- * \brief Tests using only vertex shader in a graphics pipeline
+ * \brief Pipeline Creation Cache Control Tests
  *//*--------------------------------------------------------------------*/
 
-#include "tcuDefs.hpp"
-#include "tcuTestCase.hpp"
+#include "vktTestCase.hpp"
 
 namespace vkt
 {
 namespace pipeline
 {
 
-tcu::TestCaseGroup*	createVertexOnlyTests (tcu::TestContext& testCtx);
+tcu::TestCaseGroup* createCacheControlTests (tcu::TestContext& testCtx);
 
 } // pipeline
 } // vkt
 
-#endif // _VKTPIPELINEVERTEXONLYTESTS_HPP
+#endif // _VKTPIPELINECREATIONCACHECONTROLTESTS_HPP
diff --git a/external/vulkancts/modules/vulkan/pipeline/vktPipelineExtendedDynamicStateTests.cpp b/external/vulkancts/modules/vulkan/pipeline/vktPipelineExtendedDynamicStateTests.cpp
index f8bb349..3680e8a 100644
--- a/external/vulkancts/modules/vulkan/pipeline/vktPipelineExtendedDynamicStateTests.cpp
+++ b/external/vulkancts/modules/vulkan/pipeline/vktPipelineExtendedDynamicStateTests.cpp
@@ -67,12 +67,18 @@
 	return (value ? VK_TRUE : VK_FALSE);
 }
 
+// Test versions
+constexpr deUint32 TEST_VERSION_extended_dynamic_state = 1;
+constexpr deUint32 TEST_VERSION_vertex_input_dynamic_state = 2;
+constexpr deUint32 TEST_VERSION_extended_dynamic_state2 = 3;
+
 // Framebuffer size.
 constexpr deUint32	kFramebufferWidth	= 64u;
 constexpr deUint32	kFramebufferHeight	= 64u;
 
 // Image formats.
 constexpr	vk::VkFormat	kColorFormat	= vk::VK_FORMAT_R8G8B8A8_UNORM;
+constexpr	vk::VkFormat	kIntColorFormat = vk::VK_FORMAT_R8G8B8A8_UINT;
 const		tcu::Vec4		kColorThreshold	(0.005f); // 1/255 < 0.005 < 2/255.
 
 struct DepthStencilFormat
@@ -87,21 +93,165 @@
 	{ vk::VK_FORMAT_D24_UNORM_S8_UINT,	1.0e-07f	},	// 1/(2**24-1) < 1.0e-07f < 2/(2**24-1)
 };
 
-// Vertices in buffers will have 2 components and a padding to properly test the stride.
-struct GeometryVertex
+// We will use several data types in vertex bindings. Each type will need to define a few things.
+class GeometryVertex
 {
+public:
+	// For GLSL.
+
+	// Vertex input attribute declarations in GLSL form. One sentence per element.
+	virtual std::vector<std::string>							getAttributeDeclarations()	const = 0;
+
+	// Get statements to calculate a vec2 called "vertexCoords" using the vertex input attributes.
+	virtual std::vector<std::string>							getVertexCoordCalc()		const = 0;
+
+
+	// For the pipeline.
+
+	// Vertex attributes for VkPipelineVertexInputStateCreateInfo.
+	virtual std::vector<vk::VkVertexInputAttributeDescription>	getAttributeDescriptions(deUint32 offset)	const = 0;
+
+	// Size of each vertex.
+	virtual size_t												getVertexDataSize()			const = 0;
+
+	// Array of bytes containing vertex data. .size() should match getVertexDataSize().
+	virtual std::vector<deUint8>								getVertexData()				const = 0;
+
+	// Offset to the coords data.
+	virtual size_t												getCoordsOffset()			const = 0;
+
+	// Offset to the padding data.
+	virtual size_t												getPaddingOffset()			const = 0;
+};
+
+// Vertices in buffers will have 2 components and a padding to properly test the stride.
+// This is the vertex type that will be used normally.
+class VertexWithPadding : public GeometryVertex
+{
+protected:
 	tcu::Vec2 coords;
 	tcu::Vec2 padding;
 
-	GeometryVertex (const tcu::Vec2& coords_)
+public:
+	VertexWithPadding (const tcu::Vec2& coords_)
 		: coords	(coords_)
-		, padding	(0.0f)
+		, padding	(0.0f, 0.0f)
+	{}
+
+	virtual std::vector<std::string> getAttributeDeclarations() const override
 	{
+		std::vector<std::string> declarations;
+		declarations.push_back("layout(location=0) in vec2 position;");
+		return declarations;
+	}
+
+	virtual std::vector<std::string> getVertexCoordCalc() const override
+	{
+		std::vector<std::string> statements;
+		statements.push_back("vec2 vertexCoords = position;");
+		return statements;
+	}
+
+	virtual std::vector<vk::VkVertexInputAttributeDescription> getAttributeDescriptions(deUint32 offset) const override
+	{
+		std::vector<vk::VkVertexInputAttributeDescription> descriptions;
+		descriptions.push_back(vk::makeVertexInputAttributeDescription(0u, 0u, vk::VK_FORMAT_R32G32_SFLOAT, offset));
+		return descriptions;
+	}
+
+	virtual size_t getVertexDataSize() const override
+	{
+		return sizeof(coords) + sizeof(padding);
+	}
+
+	virtual std::vector<deUint8> getVertexData() const override
+	{
+		const auto				dataSize	= getVertexDataSize();
+		std::vector<deUint8>	vertexData	(dataSize);
+
+		deMemcpy(&vertexData[0], &coords, sizeof(coords));
+		deMemcpy(&vertexData[sizeof(coords)], &padding, sizeof(padding));
+		return vertexData;
+	}
+
+	virtual size_t getCoordsOffset() const override
+	{
+		return 0;
+	}
+
+	virtual size_t getPaddingOffset() const override
+	{
+		return sizeof coords;
 	}
 };
 
-constexpr auto kVertexStride	= static_cast<vk::VkDeviceSize>(sizeof(GeometryVertex));
-constexpr auto kCoordsSize		= static_cast<vk::VkDeviceSize>(sizeof(GeometryVertex::coords));
+class VertexWithExtraAttributes : public GeometryVertex
+{
+protected:
+	tcu::Vec2 coords;
+	tcu::Vec2 padding[10];
+	tcu::Vec2 ones;
+
+public:
+	VertexWithExtraAttributes (const tcu::Vec2& coords_)
+		: coords	(coords_)
+		, ones		(1.0f, 1.0f)
+	{
+		deMemset(padding, 0, sizeof(padding));
+	}
+
+	virtual std::vector<std::string> getAttributeDeclarations() const override
+	{
+		std::vector<std::string> declarations;
+		declarations.push_back("layout(location=0) in vec2 position;");
+		declarations.push_back("layout(location=1) in vec2 ones;");
+		return declarations;
+	}
+
+	virtual std::vector<std::string> getVertexCoordCalc() const override
+	{
+		std::vector<std::string> statements;
+		statements.push_back("vec2 vertexCoords = position;");
+		statements.push_back("vertexCoords = vertexCoords * ones;");
+		return statements;
+	}
+
+	virtual std::vector<vk::VkVertexInputAttributeDescription> getAttributeDescriptions(deUint32 offset) const override
+	{
+		std::vector<vk::VkVertexInputAttributeDescription> descriptions;
+		descriptions.push_back(vk::makeVertexInputAttributeDescription(0u, 0u, vk::VK_FORMAT_R32G32_SFLOAT, offset));
+		descriptions.push_back(vk::makeVertexInputAttributeDescription(1u, 0u, vk::VK_FORMAT_R32G32_SFLOAT, static_cast<deUint32>(sizeof(coords) + sizeof(padding))));
+		return descriptions;
+	}
+
+	virtual size_t getVertexDataSize() const override
+	{
+		return sizeof(coords) + sizeof(padding) + sizeof(ones);
+	}
+
+	virtual std::vector<deUint8> getVertexData() const override
+	{
+		const auto				dataSize	= getVertexDataSize();
+		std::vector<deUint8>	vertexData	(dataSize);
+
+		deMemcpy(&vertexData[0], &coords, sizeof(coords));
+		deMemcpy(&vertexData[sizeof(coords)], &padding, sizeof(padding));
+		deMemcpy(&vertexData[sizeof(coords) + sizeof(padding)], &ones, sizeof(ones));
+		return vertexData;
+	}
+
+	virtual size_t getCoordsOffset() const override
+	{
+		return 0;
+	}
+
+	virtual size_t getPaddingOffset() const override
+	{
+		return sizeof coords;
+	}
+};
+
+constexpr auto kCoordsSize = static_cast<vk::VkDeviceSize>(sizeof(tcu::Vec2));
 
 // Stencil Operation parameters, as used in vkCmdSetStencilOpEXT().
 struct StencilOpParams
@@ -172,9 +322,17 @@
 using DepthBoundsTestEnableConfig	= BooleanFlagConfig;
 using StencilTestEnableConfig		= BooleanFlagConfig;
 using StencilOpConfig				= StaticAndDynamicPair<StencilOpVec>;	// At least one element.
+using VertexInputConfig				= StaticAndDynamicPair<deUint32>;
+using DepthBiasEnableConfig			= BooleanFlagConfig;
+using RastDiscardEnableConfig		= BooleanFlagConfig;
+using PrimRestartEnableConfig		= BooleanFlagConfig;
+using LogicOpConfig					= StaticAndDynamicPair<vk::VkLogicOp>;
+using PatchControlPointsConfig		= StaticAndDynamicPair<deUint8>;
 
 const tcu::Vec4	kDefaultTriangleColor	(0.0f, 0.0f, 1.0f, 1.0f);	// Opaque blue.
 const tcu::Vec4	kDefaultClearColor		(0.0f, 0.0f, 0.0f, 1.0f);	// Opaque black.
+const tcu::Vec4	kGreenClearColor		(0.0f, 1.0f, 0.0f, 1.0f);	// Opaque green.
+const tcu::Vec4	kCyanColor				(0.0f, 1.0f, 1.0f, 1.0f);	// Opaque cyan
 
 struct MeshParams
 {
@@ -267,6 +425,18 @@
 	const tcu::Vec4 m_bottom;
 };
 
+using VertexFactory = de::MovePtr<GeometryVertex> (*)(const tcu::Vec2&);
+
+de::MovePtr<GeometryVertex> getVertexWithPadding(const tcu::Vec2& coords)
+{
+	return de::MovePtr<GeometryVertex>(new VertexWithPadding(coords));
+}
+
+de::MovePtr<GeometryVertex> getVertexWithExtraAttributes(const tcu::Vec2& coords)
+{
+	return de::MovePtr<GeometryVertex>(new VertexWithExtraAttributes(coords));
+}
+
 struct TestConfig
 {
 	// Main sequence ordering.
@@ -293,6 +463,23 @@
 	// Force inclusion of passthrough geometry shader or not.
 	bool						forceGeometryShader;
 
+	// Version 1 = VK_EXT_extended_dynamic_state
+	// Version 2 = VK_EXT_vertex_input_dynamic_state
+	// Version 3 = VK_EXT_extended_dynamic_state2
+	deUint32					testExtendedDynamicStateVersion;
+
+	// For VK_EXT_extended_dynamic_state2
+	bool						testExtendedDynamicState2LogicOp;
+	bool						testExtendedDynamicState2PatchControlPoints;
+
+	// Use index buffer for rendering
+	bool						useIndexBuffer;
+
+	bool						useTessellation;
+
+	// Vertex factory function.
+	VertexFactory				vertexFactory;
+
 	// Offset and extra room after the vertex buffer data.
 	vk::VkDeviceSize			vertexDataOffset;
 	vk::VkDeviceSize			vertexDataExtraBytes;
@@ -310,9 +497,15 @@
 	DepthBoundsTestEnableConfig	depthBoundsTestEnableConfig;
 	StencilTestEnableConfig		stencilTestEnableConfig;
 	StencilOpConfig				stencilOpConfig;
+	VertexInputConfig			vertexInputConfig;
+	DepthBiasEnableConfig		depthBiasEnableConfig;
+	RastDiscardEnableConfig		rastDiscardEnableConfig;
+	PrimRestartEnableConfig		primRestartEnableConfig;
+	LogicOpConfig				logicOpConfig;
+	PatchControlPointsConfig	patchControlPointsConfig;
 
 	// Sane defaults.
-	TestConfig (SequenceOrdering ordering)
+	TestConfig (SequenceOrdering ordering, VertexFactory vertexFactory_ = getVertexWithPadding)
 		: sequenceOrdering				(ordering)
 		, meshParams					(1u, MeshParams())
 		, referenceStencil				(0u)
@@ -325,21 +518,34 @@
 		, minDepthBounds				(0.0f)
 		, maxDepthBounds				(1.0f)
 		, forceGeometryShader			(false)
+		, testExtendedDynamicStateVersion(TEST_VERSION_extended_dynamic_state)
+		, testExtendedDynamicState2LogicOp(false)
+		, testExtendedDynamicState2PatchControlPoints(false)
+		, useIndexBuffer				(false)
+		, useTessellation				(false)
+		, vertexFactory					(vertexFactory_)
 		, vertexDataOffset				(0ull)
 		, vertexDataExtraBytes			(0ull)
 		, cullModeConfig				(static_cast<vk::VkCullModeFlags>(vk::VK_CULL_MODE_NONE))
 		, frontFaceConfig				(vk::VK_FRONT_FACE_COUNTER_CLOCKWISE)
-		// By default we will use a triangle fan with 6 vertices that could be wrongly interpreted as a triangle list with 2 triangles.
-		, topologyConfig				(vk::VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN)
+		// By default we will use a triangle strip with 6 vertices that could be wrongly interpreted as a triangle list with 2 triangles.
+		, topologyConfig				(vk::VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP)
 		, viewportConfig				(ViewportVec(1u, vk::makeViewport(kFramebufferWidth, kFramebufferHeight)))
 		, scissorConfig					(ScissorVec(1u, vk::makeRect2D(kFramebufferWidth, kFramebufferHeight)))
-		, strideConfig					(kVertexStride)
+		// By default, the vertex stride is the size of a vertex according to the chosen vertex type.
+		, strideConfig					(static_cast<vk::VkDeviceSize>(vertexFactory(tcu::Vec2(0.0f, 0.0f))->getVertexDataSize()))
 		, depthTestEnableConfig			(false)
 		, depthWriteEnableConfig		(false)
 		, depthCompareOpConfig			(vk::VK_COMPARE_OP_NEVER)
 		, depthBoundsTestEnableConfig	(false)
 		, stencilTestEnableConfig		(false)
 		, stencilOpConfig				(StencilOpVec(1u, kDefaultStencilOpParams))
+		, vertexInputConfig				(static_cast<deUint32>(vertexFactory(tcu::Vec2(0.0f, 0.0f))->getCoordsOffset()))
+		, depthBiasEnableConfig			(false)
+		, rastDiscardEnableConfig		(false)
+		, primRestartEnableConfig		(false)
+		, logicOpConfig					(vk::VK_LOGIC_OP_CLEAR)
+		, patchControlPointsConfig		(1)
 		, m_swappedValues				(false)
 	{
 	}
@@ -387,6 +593,12 @@
 		depthBoundsTestEnableConfig.swapValues();
 		stencilTestEnableConfig.swapValues();
 		stencilOpConfig.swapValues();
+		vertexInputConfig.swapValues();
+		depthBiasEnableConfig.swapValues();
+		rastDiscardEnableConfig.swapValues();
+		primRestartEnableConfig.swapValues();
+		logicOpConfig.swapValues();
+		patchControlPointsConfig.swapValues();
 
 		m_swappedValues = !m_swappedValues;
 	}
@@ -531,7 +743,8 @@
 			  staticTopologyClass == getTopologyClass(testConfig.topologyConfig.dynamicValue.get()));
 
 	// Supported topology classes for these tests.
-	DE_ASSERT(staticTopologyClass == TopologyClass::LINE || staticTopologyClass == TopologyClass::TRIANGLE);
+	DE_ASSERT(staticTopologyClass == TopologyClass::LINE || staticTopologyClass == TopologyClass::TRIANGLE
+		|| staticTopologyClass == TopologyClass::PATCH);
 }
 
 void ExtendedDynamicStateTest::checkSupport (Context& context) const
@@ -539,22 +752,37 @@
 	const auto&	vki				= context.getInstanceInterface();
 	const auto	physicalDevice	= context.getPhysicalDevice();
 
-	// This is always required.
-	context.requireDeviceFunctionality("VK_EXT_extended_dynamic_state");
+	if (m_testConfig.testExtendedDynamicStateVersion == TEST_VERSION_extended_dynamic_state)
+		context.requireDeviceFunctionality("VK_EXT_extended_dynamic_state");
+
+	if (m_testConfig.testExtendedDynamicStateVersion == TEST_VERSION_vertex_input_dynamic_state)
+		context.requireDeviceFunctionality("VK_EXT_vertex_input_dynamic_state");
+
+	// Needed for extended state included as part of VK_EXT_extended_dynamic_state2
+	if (m_testConfig.testExtendedDynamicStateVersion == TEST_VERSION_extended_dynamic_state2) {
+		context.requireDeviceFunctionality("VK_EXT_extended_dynamic_state2");
+
+		const vk::VkPhysicalDeviceExtendedDynamicState2FeaturesEXT& extendedDynamicState2Features = context.getExtendedDynamicState2FeaturesEXT();
+
+		if (m_testConfig.testExtendedDynamicState2LogicOp && extendedDynamicState2Features.extendedDynamicState2LogicOp == DE_FALSE)
+			TCU_THROW(NotSupportedError, "VK_EXT_extended_dynamic_state2 : changing LogicOp dynamically is not supported");
+
+		if (m_testConfig.testExtendedDynamicState2PatchControlPoints && extendedDynamicState2Features.extendedDynamicState2PatchControlPoints == DE_FALSE)
+			TCU_THROW(NotSupportedError, "VK_EXT_extended_dynamic_state2 : changing patch control points dynamically is not supported");
+	}
 
 	// Check the number of viewports needed and the corresponding limits.
 	const auto&	viewportConfig	= m_testConfig.viewportConfig;
-	auto		numViews		= viewportConfig.staticValue.size();
+	auto		numViewports	= viewportConfig.staticValue.size();
 
 	if (viewportConfig.dynamicValue)
-		numViews = std::max(numViews, viewportConfig.dynamicValue.get().size());
+		numViewports = std::max(numViewports, viewportConfig.dynamicValue.get().size());
 
-	if (numViews > 1)
+	if (numViewports > 1)
 	{
-		context.requireDeviceFunctionality("VK_KHR_multiview");
 		const auto properties = vk::getPhysicalDeviceProperties(vki, physicalDevice);
-		if (numViews > static_cast<decltype(numViews)>(properties.limits.maxViewports))
-			TCU_THROW(NotSupportedError, "Number of viewports not supported (" + de::toString(numViews) + ")");
+		if (numViewports > static_cast<decltype(numViewports)>(properties.limits.maxViewports))
+			TCU_THROW(NotSupportedError, "Number of viewports not supported (" + de::toString(numViewports) + ")");
 	}
 
 	const auto&	dbTestEnable	= m_testConfig.depthBoundsTestEnableConfig;
@@ -570,11 +798,18 @@
 		// Check geometry shader support.
 		if (m_testConfig.needsGeometryShader() && !features.geometryShader)
 			TCU_THROW(NotSupportedError, "Geometry shader not supported");
+
+		// Check tessellation support
+		if (m_testConfig.useTessellation && !features.tessellationShader)
+			TCU_THROW(NotSupportedError, "Tessellation feature not supported");
 	}
 
 	// Check color image format support (depth/stencil will be chosen at runtime).
 	const vk::VkFormatFeatureFlags	kColorFeatures	= (vk::VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | vk::VK_FORMAT_FEATURE_TRANSFER_SRC_BIT);
-	const auto						colorProperties	= vk::getPhysicalDeviceFormatProperties(vki, physicalDevice, kColorFormat);
+
+	// Pick int color format for logic op
+	vk::VkFormat					colorFormat		= m_testConfig.logicOpConfig.dynamicValue ? kIntColorFormat : kColorFormat;
+	const auto						colorProperties	= vk::getPhysicalDeviceFormatProperties(vki, physicalDevice, colorFormat);
 
 	if ((colorProperties.optimalTilingFeatures & kColorFeatures) != kColorFeatures)
 		TCU_THROW(NotSupportedError, "Required color image features not supported");
@@ -586,6 +821,8 @@
 	std::ostringstream vertSource;
 	std::ostringstream fragSource;
 	std::ostringstream geomSource;
+	std::ostringstream tescSource;
+	std::ostringstream teseSource;
 
 	pushSource
 		<< "layout(push_constant, std430) uniform PushConstantsBlock {\n"
@@ -600,16 +837,29 @@
 		;
 	const auto pushConstants = pushSource.str();
 
+	const auto			dummyVertex	= m_testConfig.vertexFactory(tcu::Vec2(0.0f, 0.0f));
+	const auto			attribDecls	= dummyVertex->getAttributeDeclarations();
+	const auto			coordCalcs	= dummyVertex->getVertexCoordCalc();
+	std::ostringstream	attributes;
+	std::ostringstream	calculations;
+
+	for (const auto& decl : attribDecls)
+		attributes << decl << "\n";
+
+	for (const auto& statement : coordCalcs)
+		calculations << "    " << statement << "\n";
+
 	vertSource
 		<< "#version 450\n"
 		<< pushConstants
-		<< "layout(location=0) in vec2 position;\n"
+		<< attributes.str()
 		<< "out gl_PerVertex\n"
 		<< "{\n"
 		<< "    vec4 gl_Position;\n"
 		<< "};\n"
 		<< "void main() {\n"
-		<< "    gl_Position = vec4(position.x * pushConstants.scaleX + pushConstants.offsetX, position.y * pushConstants.scaleY + pushConstants.offsetY, pushConstants.depthValue, 1.0);\n"
+		<< calculations.str()
+		<< "    gl_Position = vec4(vertexCoords.x * pushConstants.scaleX + pushConstants.offsetX, vertexCoords.y * pushConstants.scaleY + pushConstants.offsetY, pushConstants.depthValue, 1.0);\n"
 		<< "}\n"
 		;
 
@@ -659,10 +909,46 @@
 			;
 	}
 
+	if (m_testConfig.useTessellation)
+	{
+		tescSource
+			<< "#version 450\n"
+			<< "#extension GL_EXT_tessellation_shader : require\n"
+			<< "layout(vertices=3) out;\n"
+			<< "in gl_PerVertex\n"
+			<< "{\n"
+			<< "    vec4 gl_Position;\n"
+			<< "} gl_in[];\n"
+			<< "void main() {\n"
+			<< "  gl_out[gl_InvocationID].gl_Position = gl_in[gl_InvocationID].gl_Position;\n"
+			<< "  gl_TessLevelOuter[0] = 3.0;\n"
+			<< "  gl_TessLevelOuter[1] = 3.0;\n"
+			<< "  gl_TessLevelOuter[2] = 3.0;\n"
+			<< "  gl_TessLevelInner[0] = 3.0;\n"
+			<< "}\n"
+			;
+		teseSource
+			<< "#version 450\n"
+			<< "#extension GL_EXT_tessellation_shader : require\n"
+			<< "layout(triangles) in;\n"
+			<< "void main() {\n"
+			<< "  gl_Position = (gl_in[0].gl_Position * gl_TessCoord.x + \n"
+			<< "                 gl_in[1].gl_Position * gl_TessCoord.y + \n"
+			<< "                 gl_in[2].gl_Position * gl_TessCoord.z);\n"
+			<< "}\n";
+			;
+	}
+
+
 	programCollection.glslSources.add("vert") << glu::VertexSource(vertSource.str());
 	programCollection.glslSources.add("frag") << glu::FragmentSource(fragSource.str());
 	if (m_testConfig.needsGeometryShader())
 		programCollection.glslSources.add("geom") << glu::GeometrySource(geomSource.str());
+	if (m_testConfig.useTessellation)
+	{
+		programCollection.glslSources.add("tesc") << glu::TessellationControlSource(tescSource.str());
+		programCollection.glslSources.add("tese") << glu::TessellationEvaluationSource(teseSource.str());
+	}
 }
 
 TestInstance* ExtendedDynamicStateTest::createInstance (Context& context) const
@@ -710,6 +996,26 @@
 	vk::flushAlloc(vkd, device, alloc);
 }
 
+std::vector<deUint8> concatenateVertexData(const std::vector<GeometryVertex*>& vertices)
+{
+	std::vector<deUint8> concatenatedData;
+
+	if (vertices.empty())
+		return concatenatedData;
+
+	const auto dataSize = vertices.size() * vertices[0]->getVertexDataSize();
+	concatenatedData.reserve(dataSize);
+
+	auto backInserter = std::back_inserter(concatenatedData);
+	for (const auto ptr : vertices)
+	{
+		const auto singleData = ptr->getVertexData();
+		std::copy(begin(singleData), end(singleData), backInserter);
+	}
+
+	return concatenatedData;
+}
+
 // Sets values for dynamic states if needed according to the test configuration.
 void setDynamicStates(const TestConfig& testConfig, const vk::DeviceInterface& vkd, vk::VkCommandBuffer cmdBuffer)
 {
@@ -749,11 +1055,49 @@
 	if (testConfig.stencilTestEnableConfig.dynamicValue)
 		vkd.cmdSetStencilTestEnableEXT(cmdBuffer, makeVkBool32(testConfig.stencilTestEnableConfig.dynamicValue.get()));
 
+	if (testConfig.depthBiasEnableConfig.dynamicValue)
+		vkd.cmdSetDepthBiasEnableEXT(cmdBuffer, makeVkBool32(testConfig.depthBiasEnableConfig.dynamicValue.get()));
+
+	if (testConfig.rastDiscardEnableConfig.dynamicValue)
+		vkd.cmdSetRasterizerDiscardEnableEXT(cmdBuffer, makeVkBool32(testConfig.rastDiscardEnableConfig.dynamicValue.get()));
+
+	if (testConfig.primRestartEnableConfig.dynamicValue)
+		vkd.cmdSetPrimitiveRestartEnableEXT(cmdBuffer, makeVkBool32(testConfig.primRestartEnableConfig.dynamicValue.get()));
+
+	if (testConfig.logicOpConfig.dynamicValue)
+		vkd.cmdSetLogicOpEXT(cmdBuffer, testConfig.logicOpConfig.dynamicValue.get());
+
+	if (testConfig.patchControlPointsConfig.dynamicValue)
+		vkd.cmdSetPatchControlPointsEXT(cmdBuffer, testConfig.patchControlPointsConfig.dynamicValue.get());
+
 	if (testConfig.stencilOpConfig.dynamicValue)
 	{
 		for (const auto& params : testConfig.stencilOpConfig.dynamicValue.get())
 			vkd.cmdSetStencilOpEXT(cmdBuffer, params.faceMask, params.failOp, params.passOp, params.depthFailOp, params.compareOp);
 	}
+
+	if (testConfig.vertexInputConfig.dynamicValue)
+	{
+		const vk::VkVertexInputBindingDescription2EXT vertexBinding =
+		{
+			vk::VK_STRUCTURE_TYPE_VERTEX_INPUT_BINDING_DESCRIPTION_2_EXT,	//	VkStructureType		sType;
+			nullptr,														//	void*				pNext;
+			0u,																//	deUint32			binding;
+			static_cast<deUint32>(testConfig.strideConfig.staticValue),		//	deUint32			stride;
+			vk::VK_VERTEX_INPUT_RATE_VERTEX,								//	VkVertexInputRate	inputRate;
+			1u,																//	deUint32			divisor;
+		};
+		const vk::VkVertexInputAttributeDescription2EXT vertexAttribute =
+		{
+			vk::VK_STRUCTURE_TYPE_VERTEX_INPUT_ATTRIBUTE_DESCRIPTION_2_EXT,				//	VkStructureType	sType;
+			nullptr,																	//	void*			pNext;
+			0u,																			//	deUint32		location;
+			0u,																			//	deUint32		binding;
+			vk::VK_FORMAT_R32G32_SFLOAT,												//	VkFormat		format;
+			static_cast<deUint32>(testConfig.vertexInputConfig.dynamicValue.get()),		//	deUint32		offset;
+		};
+		vkd.cmdSetVertexInputEXT(cmdBuffer, 1, &vertexBinding, 1, &vertexAttribute);
+	}
 }
 
 // Bind the appropriate vertex buffer with a dynamic stride if the test configuration needs a dynamic stride.
@@ -803,6 +1147,9 @@
 	const vk::VkImageUsageFlags		kDSUsage			= (vk::VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT | vk::VK_IMAGE_USAGE_TRANSFER_SRC_BIT);
 	const vk::VkFormatFeatureFlags	kDSFeatures			= (vk::VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT | vk::VK_FORMAT_FEATURE_TRANSFER_SRC_BIT);
 
+	// Pick int color format for logic op
+	vk::VkFormat					colorFormat = m_testConfig.logicOpConfig.dynamicValue ? kIntColorFormat : kColorFormat;
+
 	// Choose depth/stencil format.
 	const DepthStencilFormat* dsFormatInfo = nullptr;
 
@@ -836,7 +1183,7 @@
 		nullptr,									//	const void*				pNext;
 		0u,											//	VkImageCreateFlags		flags;
 		vk::VK_IMAGE_TYPE_2D,						//	VkImageType				imageType;
-		kColorFormat,								//	VkFormat				format;
+		colorFormat,								//	VkFormat				format;
 		kFramebufferExtent,							//	VkExtent3D				extent;
 		1u,											//	deUint32				mipLevels;
 		1u,											//	deUint32				arrayLayers;
@@ -879,36 +1226,48 @@
 	ImageViewVec dsImageViews;
 
 	for (const auto& img : colorImages)
-		colorImageViews.emplace_back(vk::makeImageView(vkd, device, img->get(), vk::VK_IMAGE_VIEW_TYPE_2D, kColorFormat, colorSubresourceRange));
+		colorImageViews.emplace_back(vk::makeImageView(vkd, device, img->get(), vk::VK_IMAGE_VIEW_TYPE_2D, colorFormat, colorSubresourceRange));
 
 	for (const auto& img : dsImages)
 		dsImageViews.emplace_back(vk::makeImageView(vkd, device, img->get(), vk::VK_IMAGE_VIEW_TYPE_2D, dsFormatInfo->imageFormat, dsSubresourceRange));
 
 	// Vertex buffer.
-	const auto					topologyClass = getTopologyClass(m_testConfig.topologyConfig.staticValue);
-	std::vector<GeometryVertex>	vertices;
+	const auto									topologyClass = getTopologyClass(m_testConfig.topologyConfig.staticValue);
+	std::vector<de::MovePtr<GeometryVertex>>	vertexPtrs;
+	std::vector<deUint32>		indices{ 0, 1, 2, 3, 0xFFFFFFFF, 2, 3, 4, 5 };
 
 	if (topologyClass == TopologyClass::TRIANGLE)
 	{
-		// Full-screen triangle fan with 6 vertices.
+		// Full-screen triangle strip with 6 vertices.
 		//
-		// 4        3        2
+		// 0        2        4
 		//  +-------+-------+
-		//  |X      X      X|
-		//  | X     X     X |
-		//  |  X    X    X  |
+		//  |      XX      X|
+		//  |     X X     X |
+		//  |    X  X    X  |
 		//  |   X   X   X   |
-		//  |    X  X  X    |
-		//  |     X X X     |
-		//  |      XXX      |
+		//  |  X    X  X    |
+		//  | X     X X     |
+		//  |X      XX      |
 		//  +-------+-------+
-		// 5        0        1
-		vertices.push_back(GeometryVertex(tcu::Vec2( 0.0f,  1.0f)));
-		vertices.push_back(GeometryVertex(tcu::Vec2( 1.0f,  1.0f)));
-		vertices.push_back(GeometryVertex(tcu::Vec2( 1.0f, -1.0f)));
-		vertices.push_back(GeometryVertex(tcu::Vec2( 0.0f, -1.0f)));
-		vertices.push_back(GeometryVertex(tcu::Vec2(-1.0f, -1.0f)));
-		vertices.push_back(GeometryVertex(tcu::Vec2(-1.0f,  1.0f)));
+		// 1        3        5
+
+		vertexPtrs.push_back(m_testConfig.vertexFactory(tcu::Vec2(-1.0f, -1.0f)));
+		vertexPtrs.push_back(m_testConfig.vertexFactory(tcu::Vec2(-1.0f,  1.0f)));
+		vertexPtrs.push_back(m_testConfig.vertexFactory(tcu::Vec2( 0.0f, -1.0f)));
+		vertexPtrs.push_back(m_testConfig.vertexFactory(tcu::Vec2( 0.0f,  1.0f)));
+		vertexPtrs.push_back(m_testConfig.vertexFactory(tcu::Vec2( 1.0f, -1.0f)));
+		vertexPtrs.push_back(m_testConfig.vertexFactory(tcu::Vec2( 1.0f,  1.0f)));
+	}
+	else if (topologyClass == TopologyClass::PATCH)
+	{
+		// 2 triangles making a quad
+		vertexPtrs.push_back(m_testConfig.vertexFactory(tcu::Vec2(-1.0f,  1.0f)));
+		vertexPtrs.push_back(m_testConfig.vertexFactory(tcu::Vec2( 1.0f,  1.0f)));
+		vertexPtrs.push_back(m_testConfig.vertexFactory(tcu::Vec2( 1.0f, -1.0f)));
+		vertexPtrs.push_back(m_testConfig.vertexFactory(tcu::Vec2( 1.0f, -1.0f)));
+		vertexPtrs.push_back(m_testConfig.vertexFactory(tcu::Vec2(-1.0f, -1.0f)));
+		vertexPtrs.push_back(m_testConfig.vertexFactory(tcu::Vec2(-1.0f,  1.0f)));
 	}
 	else // TopologyClass::LINE
 	{
@@ -918,16 +1277,32 @@
 		{
 			// Offset of 0.5 pixels + one line per row from -1 to 1.
 			const float yCoord = (lineHeight / 2.0f) + lineHeight * static_cast<float>(rowIdx) - 1.0f;
-			vertices.push_back(GeometryVertex(tcu::Vec2(-1.0f, yCoord)));
-			vertices.push_back(GeometryVertex(tcu::Vec2(-0.5f, yCoord)));
-			vertices.push_back(GeometryVertex(tcu::Vec2( 0.5f, yCoord)));
-			vertices.push_back(GeometryVertex(tcu::Vec2( 1.0f, yCoord)));
+			vertexPtrs.push_back(m_testConfig.vertexFactory(tcu::Vec2(-1.0f, yCoord)));
+			vertexPtrs.push_back(m_testConfig.vertexFactory(tcu::Vec2(-0.5f, yCoord)));
+			vertexPtrs.push_back(m_testConfig.vertexFactory(tcu::Vec2( 0.5f, yCoord)));
+			vertexPtrs.push_back(m_testConfig.vertexFactory(tcu::Vec2( 1.0f, yCoord)));
 		}
 	}
 
-	// Reversed vertices, except for the first one (0, 5, 4, 3, 2, 1): clockwise mesh for triangles. Not to be used with lines.
-	std::vector<GeometryVertex> reversedVertices(1u, vertices[0]);
-	std::copy_n(vertices.rbegin(), vertices.size() - 1u, std::back_inserter(reversedVertices));
+	std::vector<GeometryVertex*> vertexRawPtrs;
+	vertexRawPtrs.reserve(vertexPtrs.size());
+	std::transform(begin(vertexPtrs), end(vertexPtrs), std::back_inserter(vertexRawPtrs),
+				   [](const de::MovePtr<GeometryVertex>& p) { return p.get(); });
+
+	// Reversed vertices order in triangle strip (1, 0, 3, 2, 5, 4)
+	std::vector<GeometryVertex*> reversedVertexRawPtrs;
+	if (topologyClass == TopologyClass::TRIANGLE)
+	{
+		reversedVertexRawPtrs =
+		{
+			vertexRawPtrs[1],
+			vertexRawPtrs[0],
+			vertexRawPtrs[3],
+			vertexRawPtrs[2],
+			vertexRawPtrs[5],
+			vertexRawPtrs[4],
+		};
+	}
 
 	if (topologyClass == TopologyClass::LINE)
 	{
@@ -938,16 +1313,24 @@
 		}
 	}
 
-	const auto vertDataSize				= static_cast<vk::VkDeviceSize>(vertices.size() * sizeof(decltype(vertices)::value_type));
+	DE_ASSERT(!vertexRawPtrs.empty());
+	const auto vertDataSize				= static_cast<vk::VkDeviceSize>(vertexRawPtrs.size() * vertexRawPtrs[0]->getVertexDataSize());
 	const auto vertBufferSize			= m_testConfig.vertexDataOffset + vertDataSize + m_testConfig.vertexDataExtraBytes;
 	const auto vertBufferInfo			= vk::makeBufferCreateInfo(vertBufferSize, vk::VK_BUFFER_USAGE_VERTEX_BUFFER_BIT);
 	vk::BufferWithMemory vertBuffer		(vkd, device, allocator, vertBufferInfo, vk::MemoryRequirement::HostVisible);
 	vk::BufferWithMemory rvertBuffer	(vkd, device, allocator, vertBufferInfo, vk::MemoryRequirement::HostVisible);
 
-	// Copy data to vertex buffers and flush allocations.
+
+	const auto indexDataSize = static_cast<vk::VkDeviceSize>(indices.size() * sizeof(deUint32));
+	const auto indexBufferInfo = vk::makeBufferCreateInfo(indexDataSize, vk::VK_BUFFER_USAGE_INDEX_BUFFER_BIT);
+	vk::BufferWithMemory indexBuffer(vkd, device, allocator, indexBufferInfo, vk::MemoryRequirement::HostVisible);
+
+
+	// Copy data to vertex/index buffers and flush allocations.
 	{
-		const GeometryVertex	offScreenVertex		(tcu::Vec2(0.0f, 3.0f));
-		const auto				offScreenVertexSz	= sizeof(offScreenVertex);
+		const auto				offScreenVertexPtr	= m_testConfig.vertexFactory(tcu::Vec2(0.0f, 3.0f));
+		const auto				offScreenVertex		= offScreenVertexPtr->getVertexData();
+		const auto				offScreenVertexSz	= offScreenVertex.size();
 		const auto				dataSize			= static_cast<size_t>(vertDataSize);
 		const auto				offset				= static_cast<size_t>(m_testConfig.vertexDataOffset);
 		const auto				extraSize			= static_cast<size_t>(m_testConfig.vertexDataExtraBytes);
@@ -956,12 +1339,17 @@
 		for (auto b : buffersToFill)
 		{
 			// Fill bytes surrounding vertex data with the offScreenVertex.
-			fillWithPattern(*b, 0u, offset, &offScreenVertex, offScreenVertexSz);
-			fillWithPattern(*b, offset + dataSize, extraSize, &offScreenVertex, offScreenVertexSz);
+			fillWithPattern(*b, 0u, offset, offScreenVertex.data(), offScreenVertexSz);
+			fillWithPattern(*b, offset + dataSize, extraSize, offScreenVertex.data(), offScreenVertexSz);
 		}
 
+		// Create vectors with all vertex data and all reversed vertex data concatenated in order to fill the buffers.
+		const auto vertices			= concatenateVertexData(vertexRawPtrs);
+		const auto reversedVertices	= concatenateVertexData(reversedVertexRawPtrs);
+
 		copyAndFlush(vkd, device, vertBuffer, offset, vertices.data(), static_cast<size_t>(vertices.size() * sizeof(vertices[0])));
 		copyAndFlush(vkd, device, rvertBuffer, offset, reversedVertices.data(), static_cast<size_t>(reversedVertices.size() * sizeof(reversedVertices[0])));
+		copyAndFlush(vkd, device, indexBuffer, 0, indices.data(), static_cast<size_t>(indexDataSize));
 	}
 
 	// Descriptor set layout.
@@ -1024,7 +1412,7 @@
 	attachmentDescriptions.push_back(vk::VkAttachmentDescription
 	{
 		0u,												//	VkAttachmentDescriptionFlags	flags;
-		kColorFormat,									//	VkFormat						format;
+		colorFormat,									//	VkFormat						format;
 		vk::VK_SAMPLE_COUNT_1_BIT,						//	VkSampleCountFlagBits			samples;
 		vk::VK_ATTACHMENT_LOAD_OP_CLEAR,				//	VkAttachmentLoadOp				loadOp;
 		vk::VK_ATTACHMENT_STORE_OP_STORE,				//	VkAttachmentStoreOp				storeOp;
@@ -1095,6 +1483,15 @@
 	if (m_testConfig.needsGeometryShader())
 		geomModule = vk::createShaderModule(vkd, device, m_context.getBinaryCollection().get("geom"), 0u);
 
+	vk::Move<vk::VkShaderModule>	tescModule;
+	vk::Move<vk::VkShaderModule>	teseModule;
+
+	if (m_testConfig.useTessellation)
+	{
+		tescModule = vk::createShaderModule(vkd, device, m_context.getBinaryCollection().get("tesc"), 0u);
+		teseModule = vk::createShaderModule(vkd, device, m_context.getBinaryCollection().get("tese"), 0u);
+	}
+
 	// Shader stages.
 	std::vector<vk::VkPipelineShaderStageCreateInfo> shaderStages;
 
@@ -1121,9 +1518,21 @@
 		shaderStages.push_back(shaderStageCreateInfo);
 	}
 
+	if (m_testConfig.useTessellation)
+	{
+		shaderStageCreateInfo.stage = vk::VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT;
+		shaderStageCreateInfo.module = tescModule.get();
+		shaderStages.push_back(shaderStageCreateInfo);
+
+		shaderStageCreateInfo.stage = vk::VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT;
+		shaderStageCreateInfo.module = teseModule.get();
+		shaderStages.push_back(shaderStageCreateInfo);
+	}
+
 	// Input state.
+	DE_ASSERT(!vertexRawPtrs.empty());
 	const auto vertexBinding	= vk::makeVertexInputBindingDescription(0u, static_cast<deUint32>(m_testConfig.strideConfig.staticValue), vk::VK_VERTEX_INPUT_RATE_VERTEX);
-	const auto vertexAttribute	= vk::makeVertexInputAttributeDescription(0u, 0u, vk::VK_FORMAT_R32G32_SFLOAT, 0u);
+	const auto vertexAttributes	= vertexRawPtrs[0]->getAttributeDescriptions(static_cast<deUint32>(m_testConfig.vertexInputConfig.staticValue));
 
 	const vk::VkPipelineVertexInputStateCreateInfo vertexInputStateCreateInfo =
 	{
@@ -1132,8 +1541,8 @@
 		0u,																//	VkPipelineVertexInputStateCreateFlags		flags;
 		1u,																//	deUint32									vertexBindingDescriptionCount;
 		&vertexBinding,													//	const VkVertexInputBindingDescription*		pVertexBindingDescriptions;
-		1u,																//	deUint32									vertexAttributeDescriptionCount;
-		&vertexAttribute,												//	const VkVertexInputAttributeDescription*	pVertexAttributeDescriptions;
+		static_cast<deUint32>(vertexAttributes.size()),					//	deUint32									vertexAttributeDescriptionCount;
+		vertexAttributes.data(),										//	const VkVertexInputAttributeDescription*	pVertexAttributeDescriptions;
 	};
 
 	// Input assembly.
@@ -1143,7 +1552,7 @@
 		nullptr,															//	const void*								pNext;
 		0u,																	//	VkPipelineInputAssemblyStateCreateFlags	flags;
 		m_testConfig.topologyConfig.staticValue,							//	VkPrimitiveTopology						topology;
-		VK_FALSE,															//	VkBool32								primitiveRestartEnable;
+		makeVkBool32(m_testConfig.primRestartEnableConfig.staticValue),		//	VkBool32								primitiveRestartEnable;
 	};
 
 	// Viewport state.
@@ -1196,19 +1605,20 @@
 	};
 
 	// Rasterization state.
-	const vk::VkPipelineRasterizationStateCreateInfo rasterizationStateCreateInfo =
+	vk::VkPipelineRasterizationStateCreateInfo rasterizationStateCreateInfo =
 	{
 		vk::VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO,	//	VkStructureType							sType;
 		nullptr,														//	const void*								pNext;
 		0u,																//	VkPipelineRasterizationStateCreateFlags	flags;
 		VK_FALSE,														//	VkBool32								depthClampEnable;
-		VK_FALSE,														//	VkBool32								rasterizerDiscardEnable;
+		makeVkBool32(m_testConfig.rastDiscardEnableConfig.staticValue),	//	VkBool32								rasterizerDiscardEnable;
 		vk::VK_POLYGON_MODE_FILL,										//	VkPolygonMode							polygonMode;
 		m_testConfig.cullModeConfig.staticValue,						//	VkCullModeFlags							cullMode;
 		m_testConfig.frontFaceConfig.staticValue,						//	VkFrontFace								frontFace;
-		VK_FALSE,														//	VkBool32								depthBiasEnable;
-		0.0f,															//	float									depthBiasConstantFactor;
-		0.0f,															//	float									depthBiasClamp;
+		makeVkBool32(m_testConfig.depthBiasEnableConfig.staticValue),	//	VkBool32								depthBiasEnable;
+		// Change the depth bias parameters if depth bias is dynamic
+		m_testConfig.depthBiasEnableConfig.dynamicValue ? 2e7f : 0.0f,	//	float									depthBiasConstantFactor;
+		m_testConfig.depthBiasEnableConfig.dynamicValue ? 0.25f : 0.0f,	//	float									depthBiasClamp;
 		0.0f,															//	float									depthBiasSlopeFactor;
 		1.0f,															//	float									lineWidth;
 	};
@@ -1290,6 +1700,12 @@
 	if (m_testConfig.depthBoundsTestEnableConfig.dynamicValue)	dynamicStates.push_back(vk::VK_DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE_EXT);
 	if (m_testConfig.stencilTestEnableConfig.dynamicValue)		dynamicStates.push_back(vk::VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE_EXT);
 	if (m_testConfig.stencilOpConfig.dynamicValue)				dynamicStates.push_back(vk::VK_DYNAMIC_STATE_STENCIL_OP_EXT);
+	if (m_testConfig.vertexInputConfig.dynamicValue)			dynamicStates.push_back(vk::VK_DYNAMIC_STATE_VERTEX_INPUT_EXT);
+	if (m_testConfig.depthBiasEnableConfig.dynamicValue)		dynamicStates.push_back(vk::VK_DYNAMIC_STATE_DEPTH_BIAS_ENABLE_EXT);
+	if (m_testConfig.rastDiscardEnableConfig.dynamicValue)		dynamicStates.push_back(vk::VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE_EXT);
+	if (m_testConfig.primRestartEnableConfig.dynamicValue)		dynamicStates.push_back(vk::VK_DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE_EXT);
+	if (m_testConfig.logicOpConfig.dynamicValue)				dynamicStates.push_back(vk::VK_DYNAMIC_STATE_LOGIC_OP_EXT);
+	if (m_testConfig.patchControlPointsConfig.dynamicValue)		dynamicStates.push_back(vk::VK_DYNAMIC_STATE_PATCH_CONTROL_POINTS_EXT);
 
 	const vk::VkPipelineDynamicStateCreateInfo dynamicStateCreateInfo =
 	{
@@ -1320,13 +1736,21 @@
 		vk::VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO,	// VkStructureType                               sType
 		nullptr,														// const void*                                   pNext
 		0u,																// VkPipelineColorBlendStateCreateFlags          flags
-		VK_FALSE,														// VkBool32                                      logicOpEnable
-		vk::VK_LOGIC_OP_CLEAR,											// VkLogicOp                                     logicOp
+		m_testConfig.logicOpConfig.dynamicValue ? VK_TRUE : VK_FALSE,	// VkBool32                                      logicOpEnable
+		m_testConfig.logicOpConfig.staticValue,							// VkLogicOp                                     logicOp
 		1u,																// deUint32                                      attachmentCount
 		&colorBlendAttachmentState,										// const VkPipelineColorBlendAttachmentState*    pAttachments
 		{ 0.0f, 0.0f, 0.0f, 0.0f }										// float                                         blendConstants[4]
 	};
 
+	const vk::VkPipelineTessellationStateCreateInfo pipelineTessellationStateCreateInfo =
+	{
+		vk::VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO,	// VkStructureType                               sType
+		nullptr,														// const void*                                   pNext
+		0u,																// VkPipelineTessellationStateCreateFlags        flags
+		m_testConfig.patchControlPointsConfig.staticValue,				// uint32_t										 patchControlPoints
+	};
+
 	const vk::VkGraphicsPipelineCreateInfo graphicsPipelineCreateInfoTemplate =
 	{
 		vk::VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO,	//	VkStructureType									sType;
@@ -1336,8 +1760,8 @@
 		shaderStages.data(),									//	const VkPipelineShaderStageCreateInfo*			pStages;
 		&vertexInputStateCreateInfo,							//	const VkPipelineVertexInputStateCreateInfo*		pVertexInputState;
 		&inputAssemblyStateCreateInfo,							//	const VkPipelineInputAssemblyStateCreateInfo*	pInputAssemblyState;
-		nullptr,												//	const VkPipelineTessellationStateCreateInfo*	pTessellationState;
-		nullptr,												//	const VkPipelineViewportStateCreateInfo*		pViewportState;
+		m_testConfig.useTessellation ? &pipelineTessellationStateCreateInfo : nullptr,	//	const VkPipelineTessellationStateCreateInfo*		pTessellationState;
+		nullptr,												//	const VkPipelineViewportStateCreateInfo *	pViewportState;
 		&rasterizationStateCreateInfo,							//	const VkPipelineRasterizationStateCreateInfo*	pRasterizationState;
 		&multisampleStateCreateInfo,							//	const VkPipelineMultisampleStateCreateInfo*		pMultisampleState;
 		&depthStencilStateCreateInfo,							//	const VkPipelineDepthStencilStateCreateInfo*	pDepthStencilState;
@@ -1378,8 +1802,10 @@
 	const auto cmdBufferPtr	= vk::allocateCommandBuffer(vkd , device, cmdPool.get(), vk::VK_COMMAND_BUFFER_LEVEL_PRIMARY);
 	const auto cmdBuffer	= cmdBufferPtr.get();
 
-	// Clear values.
+	// Clear values, clear to green for dynamic logicOp
 	std::vector<vk::VkClearValue> clearValues;
+	if (m_testConfig.logicOpConfig.dynamicValue)
+		m_testConfig.clearColorValue = kGreenClearColor;
 	clearValues.push_back(vk::makeClearValueColor(m_testConfig.clearColorValue));
 	clearValues.push_back(vk::makeClearValueDepthStencil(m_testConfig.clearDepthValue, m_testConfig.clearStencilValue));
 
@@ -1466,10 +1892,27 @@
 
 					// Bind vertex buffer with static stride if needed and draw.
 					if (!(boundInAdvance || boundBeforeDraw))
+					{
 						vkd.cmdBindVertexBuffers(cmdBuffer, 0u, 1u, (m_testConfig.meshParams[meshIdx].reversed ? &rvertBuffer.get() : &vertBuffer.get()), &m_testConfig.vertexDataOffset);
-
+						if (m_testConfig.useIndexBuffer)
+						{
+							vkd.cmdBindIndexBuffer(cmdBuffer, indexBuffer.get(), 0, vk::VK_INDEX_TYPE_UINT32);
+						}
+					}
 					// Draw mesh.
-					vkd.cmdDraw(cmdBuffer, static_cast<deUint32>(vertices.size()), 1u, 0u, 0u);
+					if (m_testConfig.useIndexBuffer) {
+						deUint32 numIndices = static_cast<deUint32>(indices.size());
+						// For SequenceOrdering::TWO_DRAWS_DYNAMIC and TWO_DRAWS_STATIC cases, the first draw does not have primitive restart enabled
+						// So, draw without using the invalid (0xFFFFFFFF) index, the second draw with primitive restart enabled will replace the results
+						// using all indices.
+						if (iteration == 0u &&
+							(m_testConfig.sequenceOrdering == SequenceOrdering::TWO_DRAWS_DYNAMIC ||
+							m_testConfig.sequenceOrdering == SequenceOrdering::TWO_DRAWS_STATIC))
+							numIndices = 3u;
+						vkd.cmdDrawIndexed(cmdBuffer, numIndices, 1u, 0u, 0u, 0u);
+					}
+					else
+						vkd.cmdDraw(cmdBuffer, static_cast<deUint32>(vertexPtrs.size()), 1u, 0u, 0u);
 				}
 			}
 
@@ -1483,7 +1926,7 @@
 
 	// Read result image aspects from the last used framebuffer.
 	const tcu::UVec2	renderSize		(kFramebufferWidth, kFramebufferHeight);
-	const auto			colorBuffer		= readColorAttachment(vkd, device, queue, queueIndex, allocator, colorImages.back()->get(), kColorFormat, renderSize);
+	const auto			colorBuffer		= readColorAttachment(vkd, device, queue, queueIndex, allocator, colorImages.back()->get(), colorFormat, renderSize);
 	const auto			depthBuffer		= readDepthAttachment(vkd, device, queue, queueIndex, allocator, dsImages.back()->get(), dsFormatInfo->imageFormat, renderSize);
 	const auto			stencilBuffer	= readStencilAttachment(vkd, device, queue, queueIndex, allocator, dsImages.back()->get(), dsFormatInfo->imageFormat, renderSize, vk::VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL);
 	const auto			colorAccess		= colorBuffer->getAccess();
@@ -1494,7 +1937,7 @@
 	const int kHeight	= static_cast<int>(kFramebufferHeight);
 
 	// Generate reference color buffer.
-	const auto				tcuColorFormat			= vk::mapVkFormat(kColorFormat);
+	const auto				tcuColorFormat			= vk::mapVkFormat(colorFormat);
 	tcu::TextureLevel		referenceColorLevel		(tcuColorFormat, kWidth, kHeight);
 	tcu::PixelBufferAccess	referenceColorAccess	= referenceColorLevel.getAccess();
 	m_testConfig.referenceColor(referenceColorAccess);
@@ -1520,8 +1963,15 @@
 	for (int y = 0; y < kHeight; ++y)
 	for (int x = 0; x < kWidth; ++x)
 	{
-		const auto colorPixel		= colorAccess.getPixel(x, y);
-		const auto expectedPixel	= referenceColorAccess.getPixel(x, y);
+		auto colorPixel		= colorAccess.getPixel(x, y);
+		auto expectedPixel	= referenceColorAccess.getPixel(x, y);
+
+		// The logic OP must have ORed the colors to cyan
+		if (m_testConfig.logicOpConfig.dynamicValue)
+		{
+			// Multiply by 255.0f as the color is in R8G8B8A8 format
+			expectedPixel = kCyanColor * 255.0f;
+		}
 
 		match = tcu::boolAll(tcu::lessThan(tcu::absDiff(colorPixel, expectedPixel), kColorThreshold));
 		colorErrorAccess.setPixel((match ? kGood : kBad), x, y);
@@ -1695,6 +2145,59 @@
 			orderingGroup->addChild(new ExtendedDynamicStateTest(testCtx, "front_face_ccw_reversed", "Dynamically set front face to counter-clockwise with a clockwise mesh", config));
 		}
 
+		// Rasterizer discard
+		{
+			TestConfig config(kOrdering);
+			config.testExtendedDynamicStateVersion = TEST_VERSION_extended_dynamic_state2;
+			config.rastDiscardEnableConfig.staticValue = false;
+			config.rastDiscardEnableConfig.dynamicValue = tcu::just(true);
+			config.referenceColor = SingleColorGenerator(kDefaultClearColor);
+			orderingGroup->addChild(new ExtendedDynamicStateTest(testCtx, "disable_raster", "Dynamically disable rasterizer", config));
+		}
+		{
+			TestConfig config(kOrdering);
+			config.testExtendedDynamicStateVersion = TEST_VERSION_extended_dynamic_state2;
+			config.rastDiscardEnableConfig.staticValue = true;
+			config.rastDiscardEnableConfig.dynamicValue = tcu::just(false);
+			config.referenceColor = SingleColorGenerator(kDefaultTriangleColor);
+			orderingGroup->addChild(new ExtendedDynamicStateTest(testCtx, "enable_raster", "Dynamically enable rasterizer", config));
+		}
+
+		// Logic op
+		{
+			TestConfig config(kOrdering);
+			config.testExtendedDynamicStateVersion = TEST_VERSION_extended_dynamic_state2;
+			config.testExtendedDynamicState2LogicOp = true;
+			config.logicOpConfig.staticValue = vk::VK_LOGIC_OP_CLEAR;
+			config.logicOpConfig.dynamicValue = tcu::just<vk::VkLogicOp>(vk::VK_LOGIC_OP_OR);
+			config.referenceColor = SingleColorGenerator(kDefaultTriangleColor);
+			orderingGroup->addChild(new ExtendedDynamicStateTest(testCtx, "logic_op_or", "Dynamically change logic op to VK_LOGIC_OP_OR", config));
+		}
+
+		// Dynamically enable primitive restart
+		{
+			TestConfig config(kOrdering);
+			config.testExtendedDynamicStateVersion = TEST_VERSION_extended_dynamic_state2;
+			config.useIndexBuffer = true;
+			config.primRestartEnableConfig.staticValue = false;
+			config.primRestartEnableConfig.dynamicValue = tcu::just(true);
+			config.referenceColor = SingleColorGenerator(kDefaultTriangleColor);
+			orderingGroup->addChild(new ExtendedDynamicStateTest(testCtx, "prim_restart_enable", "Dynamically enable primitiveRestart", config));
+		}
+
+		// Dynamically change the number of primitive control points
+		{
+			TestConfig config(kOrdering);
+			config.testExtendedDynamicStateVersion = TEST_VERSION_extended_dynamic_state2;
+			config.testExtendedDynamicState2PatchControlPoints = true;
+			config.useTessellation = true;
+			config.topologyConfig.staticValue = vk::VK_PRIMITIVE_TOPOLOGY_PATCH_LIST;
+			config.patchControlPointsConfig.staticValue = 1;
+			config.patchControlPointsConfig.dynamicValue = 3;
+			config.referenceColor = SingleColorGenerator(kDefaultTriangleColor);
+			orderingGroup->addChild(new ExtendedDynamicStateTest(testCtx, "patch_control_points", "Dynamically change patch control points", config));
+		}
+
 		// Dynamic topology.
 		{
 			TestConfig baseConfig(kOrdering);
@@ -1709,8 +2212,8 @@
 					vk::VkPrimitiveTopology dynamicVal;
 				} kTopologyCases[] =
 				{
-					{ vk::VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST,	vk::VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN	},
-					{ vk::VK_PRIMITIVE_TOPOLOGY_LINE_LIST,		vk::VK_PRIMITIVE_TOPOLOGY_LINE_STRIP	},
+					{ vk::VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST,	vk::VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP	},
+					{ vk::VK_PRIMITIVE_TOPOLOGY_LINE_LIST,		vk::VK_PRIMITIVE_TOPOLOGY_LINE_STRIP		},
 				};
 
 				for (int topoCaseIdx = 0; topoCaseIdx < DE_LENGTH_OF_ARRAY(kTopologyCases); ++topoCaseIdx)
@@ -1825,32 +2328,59 @@
 
 		// Stride.
 		{
-			TestConfig config(kOrdering);
-			config.strideConfig.staticValue		= kCoordsSize;
-			config.strideConfig.dynamicValue	= kVertexStride;
-			orderingGroup->addChild(new ExtendedDynamicStateTest(testCtx, "stride", "Dynamically set stride", config));
-		}
-		{
-			TestConfig config(kOrdering);
-			config.strideConfig.staticValue		= kCoordsSize;
-			config.strideConfig.dynamicValue	= kVertexStride;
-			config.vertexDataOffset				= static_cast<vk::VkDeviceSize>(sizeof(GeometryVertex));
-			orderingGroup->addChild(new ExtendedDynamicStateTest(testCtx, "stride_with_offset", "Dynamically set stride using a nonzero vertex data offset", config));
-		}
-		{
-			TestConfig config(kOrdering);
-			config.strideConfig.staticValue		= kCoordsSize;
-			config.strideConfig.dynamicValue	= kVertexStride;
-			config.vertexDataOffset				= static_cast<vk::VkDeviceSize>(sizeof(GeometryVertex));
-			config.vertexDataExtraBytes			= config.vertexDataOffset;
+			struct
+			{
+				VertexFactory		factory;
+				const std::string	prefix;
+			} strideCases[] =
+			{
+				{ getVertexWithPadding,			"stride"		},
+				{ getVertexWithExtraAttributes,	"large_stride"	},
+			};
 
-			// Make the mesh cover the top half only. If the implementation reads data outside the vertex data it should read the
-			// offscreen vertex and draw something in the bottom half.
-			config.referenceColor				= HorizontalSplitGenerator(kDefaultTriangleColor, kDefaultClearColor);
-			config.meshParams[0].scaleY			= 0.5f;
-			config.meshParams[0].offsetY		= -0.5f;
+			for (int strideCaseIndex = 0; strideCaseIndex < DE_LENGTH_OF_ARRAY(strideCases); ++strideCaseIndex)
+			{
+				const auto	factory			= strideCases[strideCaseIndex].factory;
+				const auto&	prefix			= strideCases[strideCaseIndex].prefix;
+				const auto	dummyVertex		= factory(tcu::Vec2(0.0f, 0.0f));
+				const auto	vertexStride	= static_cast<vk::VkDeviceSize>(dummyVertex->getVertexDataSize());
 
-			orderingGroup->addChild(new ExtendedDynamicStateTest(testCtx, "stride_with_offset_and_padding", "Dynamically set stride using a nonzero vertex data offset and extra bytes", config));
+				if (factory == getVertexWithExtraAttributes && kOrdering == SequenceOrdering::TWO_DRAWS_STATIC)
+				{
+					// This case is invalid because it breaks VUID-vkCmdBindVertexBuffers2EXT-pStrides-03363 due to the dynamic
+					// stride being less than the extent of the binding for the second attribute.
+					continue;
+				}
+
+				{
+					TestConfig config(kOrdering, factory);
+					config.strideConfig.staticValue		= kCoordsSize;
+					config.strideConfig.dynamicValue	= vertexStride;
+					orderingGroup->addChild(new ExtendedDynamicStateTest(testCtx, prefix, "Dynamically set stride", config));
+				}
+				{
+					TestConfig config(kOrdering, factory);
+					config.strideConfig.staticValue		= kCoordsSize;
+					config.strideConfig.dynamicValue	= vertexStride;
+					config.vertexDataOffset				= static_cast<vk::VkDeviceSize>(sizeof(GeometryVertex));
+					orderingGroup->addChild(new ExtendedDynamicStateTest(testCtx, prefix + "_with_offset", "Dynamically set stride using a nonzero vertex data offset", config));
+				}
+				{
+					TestConfig config(kOrdering, factory);
+					config.strideConfig.staticValue		= kCoordsSize;
+					config.strideConfig.dynamicValue	= vertexStride;
+					config.vertexDataOffset				= static_cast<vk::VkDeviceSize>(sizeof(GeometryVertex));
+					config.vertexDataExtraBytes			= config.vertexDataOffset;
+
+					// Make the mesh cover the top half only. If the implementation reads data outside the vertex data it should read the
+					// offscreen vertex and draw something in the bottom half.
+					config.referenceColor				= HorizontalSplitGenerator(kDefaultTriangleColor, kDefaultClearColor);
+					config.meshParams[0].scaleY			= 0.5f;
+					config.meshParams[0].offsetY		= -0.5f;
+
+					orderingGroup->addChild(new ExtendedDynamicStateTest(testCtx, prefix + "_with_offset_and_padding", "Dynamically set stride using a nonzero vertex data offset and extra bytes", config));
+				}
+			}
 		}
 
 		// Depth test enable.
@@ -1904,6 +2434,50 @@
 			orderingGroup->addChild(new ExtendedDynamicStateTest(testCtx, "depth_write_disable", "Dynamically disable writes to the depth buffer", config));
 		}
 
+		// Depth bias enable.
+		{
+			{
+				TestConfig config(kOrdering);
+				config.testExtendedDynamicStateVersion = TEST_VERSION_extended_dynamic_state2;
+
+				// Enable depth test and write 1.0f
+				config.depthTestEnableConfig.staticValue = true;
+				config.depthWriteEnableConfig.staticValue = true;
+				config.depthCompareOpConfig.staticValue = vk::VK_COMPARE_OP_ALWAYS;
+				// Clear depth buffer to 0.25f
+				config.clearDepthValue = 0.25f;
+				// Write depth to 0.5f
+				config.meshParams[0].depth = 0.5f;
+
+				// Enable dynamic depth bias and expect the depth value to be clamped to 0.75f based on depthBiasConstantFactor and depthBiasClamp
+				config.depthBiasEnableConfig.staticValue = false;
+				config.depthBiasEnableConfig.dynamicValue = tcu::just(true);
+				config.expectedDepth = 0.75f;
+
+				orderingGroup->addChild(new ExtendedDynamicStateTest(testCtx, "depth_bias_enable", "Dynamically enable the depth bias", config));
+			}
+			{
+				TestConfig config(kOrdering);
+				config.testExtendedDynamicStateVersion = TEST_VERSION_extended_dynamic_state2;
+
+				// Enable depth test and write 1.0f
+				config.depthTestEnableConfig.staticValue = true;
+				config.depthWriteEnableConfig.staticValue = true;
+				config.depthCompareOpConfig.staticValue = vk::VK_COMPARE_OP_ALWAYS;
+				// Clear depth buffer to 0.25f
+				config.clearDepthValue = 0.25f;
+				// Write depth to 0.5f
+				config.meshParams[0].depth = 0.5f;
+
+				// Disable dynamic depth bias and expect the depth value to remain at 0.5f based on written value
+				config.depthBiasEnableConfig.staticValue = true;
+				config.depthBiasEnableConfig.dynamicValue = tcu::just(false);
+				config.expectedDepth = 0.5f;
+
+				orderingGroup->addChild(new ExtendedDynamicStateTest(testCtx, "depth_bias_disable", "Dynamically disable the depth bias", config));
+			}
+		}
+
 		// Depth compare op.
 		{
 			TestConfig baseConfig(kOrdering);
@@ -2288,6 +2862,19 @@
 			}
 		}
 
+		// Vertex input.
+		{
+			const auto	dummyVertex		= getVertexWithPadding(tcu::Vec2(0.0f, 0.0f));
+
+			TestConfig config(kOrdering);
+			config.testExtendedDynamicStateVersion  = TEST_VERSION_vertex_input_dynamic_state;
+			config.vertexInputConfig.staticValue	= static_cast<deUint32>(dummyVertex->getPaddingOffset());
+			config.vertexInputConfig.dynamicValue	= static_cast<deUint32>(dummyVertex->getCoordsOffset());
+			config.strideConfig.staticValue			= kCoordsSize;
+			config.strideConfig.dynamicValue		= static_cast<vk::VkDeviceSize>(dummyVertex->getVertexDataSize());
+			orderingGroup->addChild(new ExtendedDynamicStateTest(testCtx, "vertex_input", "Dynamically set vertex input", config));
+		}
+
 		extendedDynamicStateGroup->addChild(orderingGroup.release());
 	}
 
diff --git a/external/vulkancts/modules/vulkan/pipeline/vktPipelineFramebufferAttachmentTests.cpp b/external/vulkancts/modules/vulkan/pipeline/vktPipelineFramebufferAttachmentTests.cpp
index 50d6856..7d8a71f 100644
--- a/external/vulkancts/modules/vulkan/pipeline/vktPipelineFramebufferAttachmentTests.cpp
+++ b/external/vulkancts/modules/vulkan/pipeline/vktPipelineFramebufferAttachmentTests.cpp
@@ -1151,7 +1151,7 @@
 					VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER,													// VkStructureType			sType;
 					DE_NULL,																				// const void*				pNext;
 					VK_ACCESS_TRANSFER_WRITE_BIT,															// VkAccessFlags			srcAccessMask;
-					VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,													// VkAccessFlags			dstAccessMask;
+					VK_ACCESS_COLOR_ATTACHMENT_READ_BIT,													// VkAccessFlags			dstAccessMask;
 					VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,													// VkImageLayout			oldLayout;
 					VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,												// VkImageLayout			newLayout;
 					VK_QUEUE_FAMILY_IGNORED,																// deUint32					srcQueueFamilyIndex;
diff --git a/external/vulkancts/modules/vulkan/pipeline/vktPipelineImageSamplingInstance.cpp b/external/vulkancts/modules/vulkan/pipeline/vktPipelineImageSamplingInstance.cpp
index 46ef651..1eae7a0 100644
--- a/external/vulkancts/modules/vulkan/pipeline/vktPipelineImageSamplingInstance.cpp
+++ b/external/vulkancts/modules/vulkan/pipeline/vktPipelineImageSamplingInstance.cpp
@@ -325,6 +325,20 @@
 
 	if (params.allocationKind == ALLOCATION_KIND_DEDICATED)
 		context.requireDeviceFunctionality("VK_KHR_dedicated_allocation");
+
+	if (context.isDeviceFunctionalitySupported("VK_KHR_portability_subset"))
+	{
+		const auto portabilitySubsetFeatures	= context.getPortabilitySubsetFeatures();
+		const auto componentMapping				= params.componentMapping;
+		if (!portabilitySubsetFeatures.imageViewFormatSwizzle &&
+			((componentMapping.r != VK_COMPONENT_SWIZZLE_IDENTITY) ||
+			 (componentMapping.g != VK_COMPONENT_SWIZZLE_IDENTITY) ||
+			 (componentMapping.b != VK_COMPONENT_SWIZZLE_IDENTITY) ||
+			 (componentMapping.a != VK_COMPONENT_SWIZZLE_IDENTITY)))
+		{
+			TCU_THROW(NotSupportedError, "VK_KHR_portability_subset: Implementation does not support remapping format components");
+		}
+	}
 }
 
 ImageSamplingInstance::ImageSamplingInstance (Context&						context,
diff --git a/external/vulkancts/modules/vulkan/pipeline/vktPipelineImageUtil.cpp b/external/vulkancts/modules/vulkan/pipeline/vktPipelineImageUtil.cpp
index 3b18883..7d48508 100644
--- a/external/vulkancts/modules/vulkan/pipeline/vktPipelineImageUtil.cpp
+++ b/external/vulkancts/modules/vulkan/pipeline/vktPipelineImageUtil.cpp
@@ -987,7 +987,7 @@
 void TestTexture::fillWithGradient (const tcu::PixelBufferAccess& levelAccess)
 {
 	const tcu::TextureFormatInfo formatInfo = tcu::getTextureFormatInfo(levelAccess.getFormat());
-	tcu::fillWithComponentGradients(levelAccess, formatInfo.valueMin, formatInfo.valueMax);
+	tcu::fillWithComponentGradients2(levelAccess, formatInfo.valueMin, formatInfo.valueMax);
 }
 
 // TestTexture1D
diff --git a/external/vulkancts/modules/vulkan/pipeline/vktPipelineImageViewTests.cpp b/external/vulkancts/modules/vulkan/pipeline/vktPipelineImageViewTests.cpp
index 22382a5..a128548 100644
--- a/external/vulkancts/modules/vulkan/pipeline/vktPipelineImageViewTests.cpp
+++ b/external/vulkancts/modules/vulkan/pipeline/vktPipelineImageViewTests.cpp
@@ -719,6 +719,13 @@
 		VK_FORMAT_R8G8B8_UINT,
 		VK_FORMAT_R8G8B8_SINT,
 		VK_FORMAT_R8G8B8_SRGB,
+		VK_FORMAT_B8G8R8_UNORM,
+		VK_FORMAT_B8G8R8_SNORM,
+		VK_FORMAT_B8G8R8_USCALED,
+		VK_FORMAT_B8G8R8_SSCALED,
+		VK_FORMAT_B8G8R8_UINT,
+		VK_FORMAT_B8G8R8_SINT,
+		VK_FORMAT_B8G8R8_SRGB,
 		VK_FORMAT_R8G8B8A8_UNORM,
 		VK_FORMAT_R8G8B8A8_SNORM,
 		VK_FORMAT_R8G8B8A8_USCALED,
@@ -726,6 +733,13 @@
 		VK_FORMAT_R8G8B8A8_UINT,
 		VK_FORMAT_R8G8B8A8_SINT,
 		VK_FORMAT_R8G8B8A8_SRGB,
+		VK_FORMAT_B8G8R8A8_UNORM,
+		VK_FORMAT_B8G8R8A8_SNORM,
+		VK_FORMAT_B8G8R8A8_USCALED,
+		VK_FORMAT_B8G8R8A8_SSCALED,
+		VK_FORMAT_B8G8R8A8_UINT,
+		VK_FORMAT_B8G8R8A8_SINT,
+		VK_FORMAT_B8G8R8A8_SRGB,
 		VK_FORMAT_A2R10G10B10_UNORM_PACK32,
 		VK_FORMAT_A2R10G10B10_UINT_PACK32,
 		VK_FORMAT_A2B10G10R10_USCALED_PACK32,
diff --git a/external/vulkancts/modules/vulkan/pipeline/vktPipelineInputAssemblyTests.cpp b/external/vulkancts/modules/vulkan/pipeline/vktPipelineInputAssemblyTests.cpp
index 9af8969..1eee007 100644
--- a/external/vulkancts/modules/vulkan/pipeline/vktPipelineInputAssemblyTests.cpp
+++ b/external/vulkancts/modules/vulkan/pipeline/vktPipelineInputAssemblyTests.cpp
@@ -244,6 +244,13 @@
 		default:
 			break;
 	}
+
+	if (m_primitiveTopology == VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN &&
+		context.isDeviceFunctionalitySupported("VK_KHR_portability_subset") &&
+		!context.getPortabilitySubsetFeatures().triangleFans)
+	{
+		TCU_THROW(NotSupportedError, "VK_KHR_portability_subset: Triangle fans are not supported by this implementation");
+	}
 }
 
 TestInstance* InputAssemblyTest::createInstance (Context& context) const
diff --git a/external/vulkancts/modules/vulkan/pipeline/vktPipelineLogicOpTests.cpp b/external/vulkancts/modules/vulkan/pipeline/vktPipelineLogicOpTests.cpp
new file mode 100644
index 0000000..9f0568b
--- /dev/null
+++ b/external/vulkancts/modules/vulkan/pipeline/vktPipelineLogicOpTests.cpp
@@ -0,0 +1,561 @@
+/*------------------------------------------------------------------------
+ * Vulkan Conformance Tests
+ * ------------------------
+ *
+ * Copyright (c) 2020 The Khronos Group Inc.
+ * Copyright (c) 2020 Valve Corporation.
+ *
+ * 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 Logic Operators Tests
+ *//*--------------------------------------------------------------------*/
+
+#include "vktPipelineLogicOpTests.hpp"
+#include "vktPipelineImageUtil.hpp"
+
+#include "vkQueryUtil.hpp"
+#include "vkCmdUtil.hpp"
+#include "vkObjUtil.hpp"
+#include "vkTypeUtil.hpp"
+#include "vkMemUtil.hpp"
+#include "vkImageUtil.hpp"
+#include "vkImageWithMemory.hpp"
+
+#include "tcuVectorUtil.hpp"
+#include "tcuImageCompare.hpp"
+#include "tcuTestLog.hpp"
+
+#include <string>
+#include <limits>
+
+namespace vkt
+{
+namespace pipeline
+{
+
+using namespace vk;
+
+namespace
+{
+
+bool isSupportedColorAttachmentFormat (const InstanceInterface& instanceInterface,
+									   VkPhysicalDevice device,
+									   VkFormat format)
+{
+	VkFormatProperties formatProps;
+	instanceInterface.getPhysicalDeviceFormatProperties(device, format, &formatProps);
+
+	// Format also needs to be INT, UINT, or SINT but as we are the ones setting the
+	// color attachment format we only need to check that it is a valid color attachment
+	// format here.
+	return (formatProps.optimalTilingFeatures & VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT);
+}
+
+struct TestParams
+{
+	VkLogicOp	logicOp;	// Operation.
+	tcu::UVec4	fbColor;	// Framebuffer color.
+	tcu::UVec4	quadColor;	// Geometry color.
+	VkFormat	format;		// Framebuffer format.
+	std::string	name;		// Logic operator test name.
+};
+
+deUint32 calcOpResult(VkLogicOp op, deUint32 src, deUint32 dst)
+{
+	// See section 29.2 "Logical Operations" in the spec.
+	//
+	//	AND:			SRC & DST		= 1010 & 1100		= 1000 = 0x8
+	//	AND_REVERSE:	SRC & ~DST		= 0011 & 1010		= 0010 = 0x2
+	//	COPY:			SRC				= 1010				= 1010 = 0xa
+	//	AND_INVERTED:	~SRC & DST		= 0101 & 1100		= 0100 = 0x4
+	//	NO_OP:			DST				= 1010				= 1010 = 0xa
+	//	XOR:			SRC ^ DST		= 1010 ^ 1100		= 0110 = 0x6
+	//	OR:				SRC | DST		= 1010 | 1100		= 1110 = 0xe
+	//	NOR:			~(SRC | DST)	= ~(1010 | 1100)	= 0001 = 0x1
+	//	EQUIVALENT:		~(SRC ^ DST)	= ~(1010 ^ 1100)	= 1001 = 0x9
+	//	INVERT:			~DST			= ~1100				= 0011 = 0x3
+	//	OR_REVERSE:		SRC | ~DST		= 1010 | 0011		= 1011 = 0xb
+	//	COPY_INVERTED:	~SRC			= 0101				= 0101 = 0x5
+	//	OR_INVERTED:	~SRC | DST		= 0101 | 1100		= 1101 = 0xd
+	//	NAND:			~(SRC & DST)	= ~(1010 &1100)		= 0111 = 0x7
+	//	SET:							= 1111				= 1111 = 0xf (sets all bits)
+
+	switch (op)
+	{
+	case VK_LOGIC_OP_CLEAR:				return (0u);
+	case VK_LOGIC_OP_AND:				return (src & dst);
+	case VK_LOGIC_OP_AND_REVERSE:		return (src & ~dst);
+	case VK_LOGIC_OP_COPY:				return (src);
+	case VK_LOGIC_OP_AND_INVERTED:		return (~src & dst);
+	case VK_LOGIC_OP_NO_OP:				return (dst);
+	case VK_LOGIC_OP_XOR:				return (src ^ dst);
+	case VK_LOGIC_OP_OR:				return (src | dst);
+	case VK_LOGIC_OP_NOR:				return (~(src | dst));
+	case VK_LOGIC_OP_EQUIVALENT:		return (~(src ^ dst));
+	case VK_LOGIC_OP_INVERT:			return (~dst);
+	case VK_LOGIC_OP_OR_REVERSE:		return (src | ~dst);
+	case VK_LOGIC_OP_COPY_INVERTED:		return (~src);
+	case VK_LOGIC_OP_OR_INVERTED:		return (~src | dst);
+	case VK_LOGIC_OP_NAND:				return (~(src & dst));
+	case VK_LOGIC_OP_SET:				return (std::numeric_limits<deUint32>::max());
+	default: DE_ASSERT(false); break;
+	}
+
+	DE_ASSERT(false);
+	return 0u;
+}
+
+// Gets a bitmask to filter out unused bits according to the channel size (e.g. 0xFFu for 8-bit channels).
+// channelSize in bytes.
+deUint32 getChannelMask (int channelSize)
+{
+	DE_ASSERT(channelSize >= 1 && channelSize <= 4);
+
+	deUint64 mask = 1u;
+	mask <<= (channelSize * 8);
+	--mask;
+
+	return static_cast<deUint32>(mask);
+}
+
+class LogicOpTest : public vkt::TestCase
+{
+public:
+									LogicOpTest			(tcu::TestContext&  testCtx,
+														 const std::string& name,
+														 const std::string& description,
+														 const TestParams &testParams);
+	virtual							~LogicOpTest		(void);
+	virtual		  void				initPrograms		(SourceCollections& sourceCollections) const;
+	virtual		  void				checkSupport		(Context& context) const;
+	virtual		  TestInstance*		createInstance		(Context& context) const;
+
+private:
+	TestParams m_params;
+};
+
+LogicOpTest::LogicOpTest (tcu::TestContext& testCtx,
+						  const std::string& name,
+						  const std::string& description,
+						  const TestParams& testParams)
+	: vkt::TestCase	(testCtx, name, description)
+	, m_params		(testParams)
+{
+	DE_ASSERT(m_params.format != VK_FORMAT_UNDEFINED);
+}
+
+LogicOpTest::~LogicOpTest (void)
+{
+}
+
+void LogicOpTest::checkSupport (Context &ctx) const
+{
+	const auto& features = ctx.getDeviceFeatures();
+
+	if (!features.logicOp)
+		TCU_THROW(NotSupportedError, "Logic operations not supported");
+
+	if (!isSupportedColorAttachmentFormat(ctx.getInstanceInterface(), ctx.getPhysicalDevice(), m_params.format))
+		TCU_THROW(NotSupportedError, "Unsupported color attachment format: " + std::string(getFormatName(m_params.format)));
+}
+
+void LogicOpTest::initPrograms (SourceCollections& sourceCollections) const
+{
+	sourceCollections.glslSources.add("color_vert") << glu::VertexSource(
+		"#version 430\n"
+		"vec2 vdata[] = vec2[] (\n"
+		"vec2(-1.0, -1.0),\n"
+		"vec2(1.0, -1.0),\n"
+		"vec2(-1.0, 1.0),\n"
+		"vec2(1.0, 1.0));\n"
+		"void main (void)\n"
+		"{\n"
+		"	gl_Position = vec4(vdata[gl_VertexIndex], 0.0, 1.0);\n"
+		"}\n");
+
+	sourceCollections.glslSources.add("color_frag") << glu::FragmentSource(
+		"#version 430\n"
+		"layout(push_constant) uniform quadColor {\n"
+		"	uvec4 val;\n"
+		"} QUAD_COLOR;\n"
+		"layout(location = 0) out uvec4 fragColor;\n"
+		"void main (void)\n"
+		"{\n"
+		"	fragColor = QUAD_COLOR.val;\n"
+		"}\n");
+}
+
+class LogicOpTestInstance : public vkt::TestInstance
+{
+public:
+										LogicOpTestInstance(Context& context,
+															const TestParams& params);
+										~LogicOpTestInstance(void);
+	virtual		tcu::TestStatus			iterate(void);
+
+private:
+	tcu::TestStatus						verifyImage(void);
+
+	TestParams							m_params;
+
+	// Derived from m_params.
+	const tcu::TextureFormat			m_tcuFormat;
+	const int							m_numChannels;
+	const int							m_channelSize;
+	const deUint32						m_channelMask;
+
+	const tcu::UVec2					m_renderSize;
+
+	VkImageCreateInfo					m_colorImageCreateInfo;
+	de::MovePtr<ImageWithMemory>		m_colorImage;
+	Move<VkImageView>					m_colorAttachmentView;
+
+	Move<VkRenderPass>					m_renderPass;
+	Move<VkFramebuffer>					m_framebuffer;
+
+	Move<VkShaderModule>				m_vertexShaderModule;
+	Move<VkShaderModule>				m_fragmentShaderModule;
+
+	Move<VkPipelineLayout>				m_pipelineLayout;
+	Move<VkPipeline>					m_graphicsPipeline;
+
+	Move<VkCommandPool>					m_cmdPool;
+	Move<VkCommandBuffer>				m_cmdBuffer;
+};
+
+LogicOpTestInstance::LogicOpTestInstance (Context &ctx, const TestParams &testParams)
+	: vkt::TestInstance	(ctx)
+	, m_params			(testParams)
+	, m_tcuFormat		(mapVkFormat(m_params.format))
+	, m_numChannels		(tcu::getNumUsedChannels(m_tcuFormat.order))
+	, m_channelSize		(tcu::getChannelSize(m_tcuFormat.type))
+	, m_channelMask		(getChannelMask(m_channelSize))
+	, m_renderSize		(32u, 32u)
+{
+	DE_ASSERT(isUintFormat(m_params.format));
+
+	const DeviceInterface&		vk					= m_context.getDeviceInterface();
+	const VkDevice				vkDevice			= m_context.getDevice();
+	const deUint32				queueFamilyIndex	= m_context.getUniversalQueueFamilyIndex();
+	Allocator&					memAlloc			= m_context.getDefaultAllocator();
+	constexpr auto				kPushConstantSize	= static_cast<deUint32>(sizeof(m_params.quadColor));
+
+	// create color image
+	{
+		const VkImageCreateInfo	colorImageParams =
+		{
+			VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO,										// VkStructureType			sType;
+			DE_NULL,																	// const void*				pNext;
+			0u,																			// VkImageCreateFlags		flags;
+			VK_IMAGE_TYPE_2D,															// VkImageType				imageType;
+			m_params.format,															// VkFormat					format;
+			{ m_renderSize.x(), m_renderSize.y(), 1u },									// VkExtent3D				extent;
+			1u,																			// deUint32					mipLevels;
+			1u,																			// deUint32					arrayLayers;
+			VK_SAMPLE_COUNT_1_BIT,														// VkSampleCountFlagBits	samples;
+			VK_IMAGE_TILING_OPTIMAL,													// VkImageTiling			tiling;
+			VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | VK_IMAGE_USAGE_TRANSFER_SRC_BIT,		// VkImageUsageFlags		usage;
+			VK_SHARING_MODE_EXCLUSIVE,													// VkSharingMode			sharingMode;
+			1u,																			// deUint32					queueFamilyIndexCount;
+			&queueFamilyIndex,															// const deUint32*			pQueueFamilyIndices;
+			VK_IMAGE_LAYOUT_UNDEFINED													// VkImageLayout			initialLayout;
+		};
+
+		m_colorImageCreateInfo	= colorImageParams;
+		m_colorImage			= de::MovePtr<ImageWithMemory>(new ImageWithMemory(vk, vkDevice, memAlloc, m_colorImageCreateInfo, MemoryRequirement::Any));
+
+		// create color attachment view
+		const VkImageViewCreateInfo colorAttachmentViewParams =
+		{
+			VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO,			// VkStructureType			sType;
+			DE_NULL,											// const void*				pNext;
+			0u,													// VkImageViewCreateFlags	flags;
+			m_colorImage->get(),								// VkImage					image;
+			VK_IMAGE_VIEW_TYPE_2D,								// VkImageViewType			viewType;
+			m_params.format,									// VkFormat					format;
+			{	VK_COMPONENT_SWIZZLE_IDENTITY,
+				VK_COMPONENT_SWIZZLE_IDENTITY,
+				VK_COMPONENT_SWIZZLE_IDENTITY,
+				VK_COMPONENT_SWIZZLE_IDENTITY	},
+			{ VK_IMAGE_ASPECT_COLOR_BIT, 0u, 1u, 0u, 1u }		// VkImageSubresourceRange	subresourceRange;
+		};
+
+		m_colorAttachmentView = createImageView(vk, vkDevice, &colorAttachmentViewParams);
+	}
+
+	m_renderPass	= makeRenderPass(vk, vkDevice, m_params.format);
+	m_framebuffer	= makeFramebuffer(vk, vkDevice, *m_renderPass, m_colorAttachmentView.get(), m_renderSize.x(), m_renderSize.y());
+
+	// create pipeline layout
+	{
+		const VkPushConstantRange pcRange =
+		{
+			VK_SHADER_STAGE_FRAGMENT_BIT,		// VkShaderStageFlags				stageFlags;
+			0u,									// deUint32							offset;
+			kPushConstantSize,					// deUint32							size;
+		};
+
+		const VkPipelineLayoutCreateInfo pipelineLayoutParams =
+		{
+			VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO,		// VkStructureType					sType;
+			DE_NULL,											// const void*						pNext;
+			0u,													// VkPipelineLayoutCreateFlags		flags;
+			0u,													// deUint32							setLayoutCount;
+			DE_NULL,											// const VkDescriptorSetLayout*		pSetLayouts;
+			1u,													// deUint32							pushConstantRangeCount;
+			&pcRange,											// const VkPushConstantRange*		pPushConstantRanges;
+		};
+
+		m_pipelineLayout = createPipelineLayout(vk, vkDevice, &pipelineLayoutParams);
+	}
+
+	m_vertexShaderModule	= createShaderModule(vk, vkDevice, m_context.getBinaryCollection().get("color_vert"), 0);
+	m_fragmentShaderModule	= createShaderModule(vk, vkDevice, m_context.getBinaryCollection().get("color_frag"), 0);
+
+	// create pipeline
+	{
+		const VkPipelineVertexInputStateCreateInfo	vertexInputStateParams	= initVulkanStructure();
+
+		const std::vector<VkViewport>				viewports				(1, makeViewport(m_renderSize));
+		const std::vector<VkRect2D>					scissors				(1, makeRect2D(m_renderSize));
+
+		VkColorComponentFlags						colorWriteMask		=	VK_COLOR_COMPONENT_R_BIT |
+																			VK_COLOR_COMPONENT_G_BIT |
+																			VK_COLOR_COMPONENT_B_BIT |
+																			VK_COLOR_COMPONENT_A_BIT;
+
+		const VkPipelineColorBlendAttachmentState blendAttachmentState =
+		{
+			VK_FALSE,					//	VkBool32				blendEnable;
+			(VkBlendFactor) 0,			//	VkBlendFactor			srcColorBlendFactor;
+			(VkBlendFactor) 0,			//	VkBlendFactor			dstColorBlendFactor;
+			(VkBlendOp)		0,			//	VkBlendOp				colorBlendOp;
+			(VkBlendFactor) 0,			//	VkBlendFactor			srcAlphaBlendFactor;
+			(VkBlendFactor) 0,			//	VkBlendFactor			dstAlphaBlendFactor;
+			(VkBlendOp)		0,			//	VkBlendOp				alphaBlendOp;
+			colorWriteMask,				//	VkColorComponentFlags	colorWriteMask;
+		};
+
+		const VkPipelineColorBlendStateCreateInfo colorBlendStateParams =
+		{
+			VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO,	//	VkStructureType								sType;
+			DE_NULL,													//	const void*									pNext;
+			DE_NULL,													//	VkPipelineColorBlendStateCreateFlags		flags;
+			VK_TRUE,													//	VkBool32									logicOpEnable;
+			m_params.logicOp,											//	VkLogicOp									logicOp;
+			1u,															//	uint32_t									attachmentCount;
+			&blendAttachmentState,										//	const VkPipelineColorBlendAttachmentState*	pAttachments;
+			{ 0.0f, 0.0f, 0.0f, 0.0f },									//	float										blendConstants[4];
+		};
+
+		m_graphicsPipeline = makeGraphicsPipeline(vk,
+												  vkDevice,								// const VkDevice								 device
+												  *m_pipelineLayout,					// const VkPipelineLayout						 pipelineLayout
+												  *m_vertexShaderModule,				// const VkShaderModule							 vertexShaderModule
+												  DE_NULL,								// const VkShaderModule							 tessellationControlModule
+												  DE_NULL,								// const VkShaderModule							 tessellationEvalModule
+												  DE_NULL,								// const VkShaderModule							 geometryShaderModule
+												  *m_fragmentShaderModule,				// const VkShaderModule							 fragmentShaderModule
+												  *m_renderPass,						// const VkRenderPass							 renderPass
+												  viewports,							// const std::vector<VkViewport>&				 viewports
+												  scissors,								// const std::vector<VkRect2D>&					 scissors
+												  VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP,	// const VkPrimitiveTopology					 topology
+												  0u,									// const deUint32								 subpass
+												  0u,									// const deUint32								 patchControlPoints
+												  &vertexInputStateParams,				// const VkPipelineVertexInputStateCreateInfo*	 vertexInputStateCreateInfo
+												  DE_NULL,								// const VkPipelineRasterizationStateCreateInfo* rasterizationStateCreateInfo
+												  DE_NULL,								// const VkPipelineMultisampleStateCreateInfo*	 multisampleStateCreateInfo
+												  DE_NULL,								// const VkPipelineDepthStencilStateCreateInfo*	 depthStencilStateCreateInfo
+												  &colorBlendStateParams);				// const VkPipelineColorBlendStateCreateInfo*	 colorBlendStateCreateInfo
+	}
+
+	// create command pool
+	m_cmdPool = createCommandPool(vk, vkDevice, VK_COMMAND_POOL_CREATE_TRANSIENT_BIT, queueFamilyIndex);
+
+	// allocate and record command buffer
+	{
+		// Prepare clear color value and quad color taking into account the channel mask.
+		VkClearValue	attachmentClearValue;
+		tcu::UVec4		quadColor(0u, 0u, 0u, 0u);
+
+		deMemset(&attachmentClearValue.color, 0, sizeof(attachmentClearValue.color));
+		for (int c = 0; c < m_numChannels; ++c)
+			attachmentClearValue.color.uint32[c] = (m_params.fbColor[c] & m_channelMask);
+
+		for (int c = 0; c < m_numChannels; ++c)
+			quadColor[c] = (m_params.quadColor[c] & m_channelMask);
+
+		m_cmdBuffer = allocateCommandBuffer(vk, vkDevice, *m_cmdPool, VK_COMMAND_BUFFER_LEVEL_PRIMARY);
+
+		beginCommandBuffer(vk, *m_cmdBuffer, 0u);
+		beginRenderPass(vk, *m_cmdBuffer, *m_renderPass, *m_framebuffer, makeRect2D(0, 0, m_renderSize.x(), m_renderSize.y()), attachmentClearValue);
+
+		// Update push constant values
+		vk.cmdPushConstants(*m_cmdBuffer, *m_pipelineLayout, VK_SHADER_STAGE_FRAGMENT_BIT, 0u, kPushConstantSize, &quadColor);
+
+		vk.cmdBindPipeline(*m_cmdBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, *m_graphicsPipeline);
+		vk.cmdDraw(*m_cmdBuffer, 4u, 1u, 0u, 0u);
+		endRenderPass(vk, *m_cmdBuffer);
+		endCommandBuffer(vk, *m_cmdBuffer);
+	}
+}
+
+LogicOpTestInstance::~LogicOpTestInstance (void)
+{
+}
+
+tcu::TestStatus LogicOpTestInstance::iterate (void)
+{
+	const DeviceInterface&		vk			= m_context.getDeviceInterface();
+	const VkDevice				vkDevice	= m_context.getDevice();
+	const VkQueue				queue		= m_context.getUniversalQueue();
+
+	submitCommandsAndWait(vk, vkDevice, queue, m_cmdBuffer.get());
+	return verifyImage();
+}
+
+tcu::TestStatus LogicOpTestInstance::verifyImage (void)
+{
+	const DeviceInterface&		vk					= m_context.getDeviceInterface();
+	const VkDevice				vkDevice			= m_context.getDevice();
+	const VkQueue				queue				= m_context.getUniversalQueue();
+	const deUint32				queueFamilyIndex	= m_context.getUniversalQueueFamilyIndex();
+	Allocator&					allocator			= m_context.getDefaultAllocator();
+	auto&						log					= m_context.getTestContext().getLog();
+
+	const auto					result				= readColorAttachment(vk, vkDevice, queue, queueFamilyIndex, allocator, m_colorImage->get(), m_params.format, m_renderSize).release();
+	const auto					resultAccess		= result->getAccess();
+	const int					iWidth				= static_cast<int>(m_renderSize.x());
+	const int					iHeight				= static_cast<int>(m_renderSize.y());
+	tcu::UVec4					expectedColor		(0u, 0u, 0u, 0u);	// Overwritten below.
+	tcu::TextureLevel			referenceTexture	(m_tcuFormat, iWidth, iHeight);
+	auto						referenceAccess		= referenceTexture.getAccess();
+	tcu::UVec4					threshold			(0u, 0u, 0u, 0u);	// Exact results.
+
+	// Calculate proper expected color values.
+	for (int c = 0; c < m_numChannels; ++c)
+	{
+		expectedColor[c] = calcOpResult(m_params.logicOp, m_params.quadColor[c], m_params.fbColor[c]);
+		expectedColor[c] &= m_channelMask;
+	}
+
+	for (int y = 0; y < iHeight; ++y)
+	for (int x = 0; x < iWidth; ++x)
+		referenceAccess.setPixel(expectedColor, x, y);
+
+	// Check result.
+	bool resultOk = tcu::intThresholdCompare(log, "TestResults", "Test Result Images", referenceAccess, resultAccess, threshold, tcu::COMPARE_LOG_ON_ERROR);
+
+	if (!resultOk)
+		TCU_FAIL("Result does not match expected values; check log for details");
+
+	return tcu::TestStatus::pass("Pass");
+}
+
+TestInstance *LogicOpTest::createInstance (Context& context) const
+{
+	return new LogicOpTestInstance(context, m_params);
+}
+
+std::string getSimpleFormatName (VkFormat format)
+{
+	return de::toLower(std::string(getFormatName(format)).substr(std::string("VK_FORMAT_").size()));
+}
+
+} // anonymous namespace
+
+tcu::TestCaseGroup* createLogicOpTests (tcu::TestContext& testCtx)
+{
+	de::MovePtr<tcu::TestCaseGroup>	logicOpTests (new tcu::TestCaseGroup(testCtx, "logic_op", "Logical Operations tests"));
+
+	// 4 bits are enough to check all possible combinations of logical operation inputs at once, for example s AND d:
+	//
+	//		1 0 1 0
+	//	AND	1 1 0 0
+	//	------------
+	//		1 0 0 0
+	//
+	// However, we will choose color values such that both higher bits and lower bits are used, and the implementation will not be
+	// able to mix channels by mistake.
+	//
+	//	0011 0101 1010 1100
+	//	3    5    a    c
+	//	0101 0011 1100 1010
+	//	5    3    c    a
+
+	const tcu::UVec4 kQuadColor	= { 0x35acU, 0x5ac3U, 0xac35U, 0xc35aU };
+	const tcu::UVec4 kFbColor	= { 0x53caU, 0x3ca5U, 0xca53U, 0xa53cU };
+
+	// Note: the format will be chosen and changed later.
+	std::vector<TestParams> logicOpTestParams =
+	{
+		{ VK_LOGIC_OP_CLEAR,			kFbColor,	kQuadColor,		VK_FORMAT_UNDEFINED,	"clear"			},
+		{ VK_LOGIC_OP_AND,				kFbColor,	kQuadColor,		VK_FORMAT_UNDEFINED,	"and"			},
+		{ VK_LOGIC_OP_AND_REVERSE,		kFbColor,	kQuadColor,		VK_FORMAT_UNDEFINED,	"and_reverse"	},
+		{ VK_LOGIC_OP_COPY,				kFbColor,	kQuadColor,		VK_FORMAT_UNDEFINED,	"copy"			},
+		{ VK_LOGIC_OP_AND_INVERTED,		kFbColor,	kQuadColor,		VK_FORMAT_UNDEFINED,	"and_inverted"	},
+		{ VK_LOGIC_OP_NO_OP,			kFbColor,	kQuadColor,		VK_FORMAT_UNDEFINED,	"no_op"			},
+		{ VK_LOGIC_OP_XOR,				kFbColor,	kQuadColor,		VK_FORMAT_UNDEFINED,	"xor"			},
+		{ VK_LOGIC_OP_OR,				kFbColor,	kQuadColor,		VK_FORMAT_UNDEFINED,	"or"			},
+		{ VK_LOGIC_OP_NOR,				kFbColor,	kQuadColor,		VK_FORMAT_UNDEFINED,	"nor"			},
+		{ VK_LOGIC_OP_EQUIVALENT,		kFbColor,	kQuadColor,		VK_FORMAT_UNDEFINED,	"equivalent"	},
+		{ VK_LOGIC_OP_INVERT,			kFbColor,	kQuadColor,		VK_FORMAT_UNDEFINED,	"invert"		},
+		{ VK_LOGIC_OP_OR_REVERSE,		kFbColor,	kQuadColor,		VK_FORMAT_UNDEFINED,	"or_reverse"	},
+		{ VK_LOGIC_OP_COPY_INVERTED,	kFbColor,	kQuadColor,		VK_FORMAT_UNDEFINED,	"copy_inverted"	},
+		{ VK_LOGIC_OP_OR_INVERTED,		kFbColor,	kQuadColor,		VK_FORMAT_UNDEFINED,	"or_inverted"	},
+		{ VK_LOGIC_OP_NAND,				kFbColor,	kQuadColor,		VK_FORMAT_UNDEFINED,	"nand"			},
+		{ VK_LOGIC_OP_SET,				kFbColor,	kQuadColor,		VK_FORMAT_UNDEFINED,	"set"			},
+	};
+
+	const VkFormat formatList[] =
+	{
+		VK_FORMAT_R8_UINT,
+		VK_FORMAT_R8G8_UINT,
+		VK_FORMAT_R8G8B8_UINT,
+		VK_FORMAT_B8G8R8_UINT,
+		VK_FORMAT_R8G8B8A8_UINT,
+		VK_FORMAT_B8G8R8A8_UINT,
+		VK_FORMAT_R16_UINT,
+		VK_FORMAT_R16G16_UINT,
+		VK_FORMAT_R16G16B16_UINT,
+		VK_FORMAT_R16G16B16A16_UINT,
+		VK_FORMAT_R32_UINT,
+		VK_FORMAT_R32G32_UINT,
+		VK_FORMAT_R32G32B32_UINT,
+		VK_FORMAT_R32G32B32A32_UINT,
+	};
+
+	for (int formatIdx = 0; formatIdx < DE_LENGTH_OF_ARRAY(formatList); ++formatIdx)
+	{
+		const auto&	format		= formatList[formatIdx];
+		const auto	formatName	= getSimpleFormatName(format);
+		const auto	formatDesc	= "Logical operator tests with format " + formatName;
+
+		de::MovePtr<tcu::TestCaseGroup> formatGroup (new tcu::TestCaseGroup(testCtx, formatName.c_str(), formatDesc.c_str()));
+
+		for (auto& params : logicOpTestParams)
+		{
+			params.format = format;
+			formatGroup->addChild(new LogicOpTest(testCtx, params.name, "Tests the " + params.name + " logical operator", params));
+		}
+
+		logicOpTests->addChild(formatGroup.release());
+	}
+
+	return logicOpTests.release();
+}
+
+} // pipeline namespace
+} // vkt namespace
diff --git a/external/vulkancts/modules/vulkan/pipeline/vktPipelineVertexOnlyTests.hpp b/external/vulkancts/modules/vulkan/pipeline/vktPipelineLogicOpTests.hpp
similarity index 68%
copy from external/vulkancts/modules/vulkan/pipeline/vktPipelineVertexOnlyTests.hpp
copy to external/vulkancts/modules/vulkan/pipeline/vktPipelineLogicOpTests.hpp
index 1a85ebf..94a2fa8 100644
--- a/external/vulkancts/modules/vulkan/pipeline/vktPipelineVertexOnlyTests.hpp
+++ b/external/vulkancts/modules/vulkan/pipeline/vktPipelineLogicOpTests.hpp
@@ -1,11 +1,11 @@
-#ifndef _VKTPIPELINEVERTEXONLYTESTS_HPP
-#define _VKTPIPELINEVERTEXONLYTESTS_HPP
+#ifndef _VKTPIPELINELOGICOPTESTS_HPP
+#define _VKTPIPELINELOGICOPTESTS_HPP
 /*------------------------------------------------------------------------
  * Vulkan Conformance Tests
  * ------------------------
  *
- * Copyright (c) 2019 Google LLC
- * Copyright (c) 2019 The Khronos Group Inc.
+ * Copyright (c) 2020 The Khronos Group Inc.
+ * Copyright (c) 2020 Valve Corporation.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -21,20 +21,19 @@
  *
  *//*!
  * \file
- * \brief Tests using only vertex shader in a graphics pipeline
+ * \brief Logical Operations Tests
  *//*--------------------------------------------------------------------*/
 
-#include "tcuDefs.hpp"
-#include "tcuTestCase.hpp"
+#include "vktTestCase.hpp"
 
 namespace vkt
 {
 namespace pipeline
 {
 
-tcu::TestCaseGroup*	createVertexOnlyTests (tcu::TestContext& testCtx);
+tcu::TestCaseGroup* createLogicOpTests (tcu::TestContext& testCtx);
 
 } // pipeline
 } // vkt
 
-#endif // _VKTPIPELINEVERTEXONLYTESTS_HPP
+#endif // _VKTPIPELINELOGICOPTESTS_HPP
diff --git a/external/vulkancts/modules/vulkan/pipeline/vktPipelineMiscTests.cpp b/external/vulkancts/modules/vulkan/pipeline/vktPipelineMiscTests.cpp
new file mode 100644
index 0000000..0a9e53c
--- /dev/null
+++ b/external/vulkancts/modules/vulkan/pipeline/vktPipelineMiscTests.cpp
@@ -0,0 +1,108 @@
+/*------------------------------------------------------------------------
+ * Vulkan Conformance Tests
+ * ------------------------
+ *
+ * Copyright (c) 2019 Google LLC
+ * Copyright (c) 2019 The Khronos Group Inc.
+ *
+ * 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 Tests using only vertex shader in a graphics pipeline
+ *//*--------------------------------------------------------------------*/
+
+#include <string>
+
+#include "vktTestGroupUtil.hpp"
+#include "vktAmberTestCase.hpp"
+#include "vktPipelineMiscTests.hpp"
+
+namespace vkt
+{
+namespace pipeline
+{
+namespace
+{
+
+enum AmberFeatureBits
+{
+	AMBER_FEATURE_VERTEX_PIPELINE_STORES_AND_ATOMICS	= (1 <<	0),
+	AMBER_FEATURE_TESSELATION_SHADER					= (1 <<	1),
+	AMBER_FEATURE_GEOMETRY_SHADER						= (1 <<	2),
+};
+
+using AmberFeatureFlags = deUint32;
+
+std::vector<std::string> getFeatureList (AmberFeatureFlags flags)
+{
+	std::vector<std::string> requirements;
+
+	if (flags & AMBER_FEATURE_VERTEX_PIPELINE_STORES_AND_ATOMICS)
+		requirements.push_back("Features.vertexPipelineStoresAndAtomics");
+
+	if (flags & AMBER_FEATURE_TESSELATION_SHADER)
+		requirements.push_back("Features.tessellationShader");
+
+	if (flags & AMBER_FEATURE_GEOMETRY_SHADER)
+		requirements.push_back("Features.geometryShader");
+
+	return requirements;
+}
+
+void addTests (tcu::TestCaseGroup* tests, const char* data_dir)
+{
+	tcu::TestContext& testCtx = tests->getTestContext();
+
+	// Shader test files are saved in <path>/external/vulkancts/data/vulkan/amber/<data_dir>/<basename>.amber
+	struct Case {
+		const char*			basename;
+		const char*			description;
+		AmberFeatureFlags	flags;
+	};
+
+	const Case cases[] =
+	{
+		{
+			"position_to_ssbo",
+			"Write position data into ssbo using only the vertex shader in a pipeline",
+			(AMBER_FEATURE_VERTEX_PIPELINE_STORES_AND_ATOMICS),
+		},
+		{
+			"primitive_id_from_tess",
+			"Read primitive id from tessellation shaders without a geometry shader",
+			(AMBER_FEATURE_TESSELATION_SHADER | AMBER_FEATURE_GEOMETRY_SHADER),
+		},
+	};
+
+	for (unsigned i = 0; i < DE_LENGTH_OF_ARRAY(cases) ; ++i)
+	{
+		std::string					file			= std::string(cases[i].basename) + ".amber";
+		std::vector<std::string>	requirements	= getFeatureList(cases[i].flags);
+		cts_amber::AmberTestCase	*testCase		= cts_amber::createAmberTestCase(testCtx, cases[i].basename, cases[i].description, data_dir, file, requirements);
+
+		tests->addChild(testCase);
+	}
+}
+
+} // anonymous
+
+tcu::TestCaseGroup* createMiscTests (tcu::TestContext& testCtx)
+{
+	// Location of the Amber script files under the data/vulkan/amber source tree.
+	const char* data_dir = "pipeline";
+	return createTestGroup(testCtx, "misc", "Miscellaneous pipeline tests", addTests, data_dir);
+}
+
+} // SpirVAssembly
+} // vkt
diff --git a/external/vulkancts/modules/vulkan/pipeline/vktPipelineVertexOnlyTests.hpp b/external/vulkancts/modules/vulkan/pipeline/vktPipelineMiscTests.hpp
similarity index 84%
rename from external/vulkancts/modules/vulkan/pipeline/vktPipelineVertexOnlyTests.hpp
rename to external/vulkancts/modules/vulkan/pipeline/vktPipelineMiscTests.hpp
index 1a85ebf..0b72c0d 100644
--- a/external/vulkancts/modules/vulkan/pipeline/vktPipelineVertexOnlyTests.hpp
+++ b/external/vulkancts/modules/vulkan/pipeline/vktPipelineMiscTests.hpp
@@ -1,5 +1,5 @@
-#ifndef _VKTPIPELINEVERTEXONLYTESTS_HPP
-#define _VKTPIPELINEVERTEXONLYTESTS_HPP
+#ifndef _VKTPIPELINEMISCTESTS_HPP
+#define _VKTPIPELINEMISCTESTS_HPP
 /*------------------------------------------------------------------------
  * Vulkan Conformance Tests
  * ------------------------
@@ -32,9 +32,9 @@
 namespace pipeline
 {
 
-tcu::TestCaseGroup*	createVertexOnlyTests (tcu::TestContext& testCtx);
+tcu::TestCaseGroup*	createMiscTests (tcu::TestContext& testCtx);
 
 } // pipeline
 } // vkt
 
-#endif // _VKTPIPELINEVERTEXONLYTESTS_HPP
+#endif // _VKTPIPELINEMISCTESTS_HPP
diff --git a/external/vulkancts/modules/vulkan/pipeline/vktPipelineMultisampleBaseResolve.cpp b/external/vulkancts/modules/vulkan/pipeline/vktPipelineMultisampleBaseResolve.cpp
index 67046b7..7483b86 100644
--- a/external/vulkancts/modules/vulkan/pipeline/vktPipelineMultisampleBaseResolve.cpp
+++ b/external/vulkancts/modules/vulkan/pipeline/vktPipelineMultisampleBaseResolve.cpp
@@ -44,6 +44,17 @@
 
 tcu::TestStatus MSInstanceBaseResolve::iterate (void)
 {
+	// cases creating this tests are defined using templates and we do not have easy access
+	// to image type - to do this check in checkSupport bigger reffactoring would be needed
+	if (m_context.isDeviceFunctionalitySupported("VK_KHR_portability_subset") &&
+		!m_context.getPortabilitySubsetFeatures().multisampleArrayImage &&
+		(m_imageType == IMAGE_TYPE_2D_ARRAY) &&
+		(m_imageMSParams.numSamples != VK_SAMPLE_COUNT_1_BIT) &&
+		(m_imageMSParams.imageSize.z() != 1))
+	{
+		TCU_THROW(NotSupportedError, "VK_KHR_portability_subset: Implementation does not support image array with multiple samples per texel");
+	}
+
 	const InstanceInterface&		instance			= m_context.getInstanceInterface();
 	const DeviceInterface&			deviceInterface		= m_context.getDeviceInterface();
 	const VkDevice					device				= m_context.getDevice();
diff --git a/external/vulkancts/modules/vulkan/pipeline/vktPipelineMultisampleBaseResolveAndPerSampleFetch.cpp b/external/vulkancts/modules/vulkan/pipeline/vktPipelineMultisampleBaseResolveAndPerSampleFetch.cpp
index 453fa03..012844a 100644
--- a/external/vulkancts/modules/vulkan/pipeline/vktPipelineMultisampleBaseResolveAndPerSampleFetch.cpp
+++ b/external/vulkancts/modules/vulkan/pipeline/vktPipelineMultisampleBaseResolveAndPerSampleFetch.cpp
@@ -258,7 +258,7 @@
 	}
 
 	std::vector<VkSubpassDescription> subpasses(1u + numSamples);
-	std::vector<VkSubpassDependency>  subpassDependencies(numSamples);
+	std::vector<VkSubpassDependency>  subpassDependencies;
 
 	const VkSubpassDescription firstSubpassDesc =
 	{
@@ -305,7 +305,23 @@
 			0u,												// VkDependencyFlags       dependencyFlags;
 		};
 
-		subpassDependencies[sampleNdx] = subpassDependency;
+		subpassDependencies.push_back(subpassDependency);
+	}
+	// now handle the very last sample pass, which must synchronize with all prior subpasses
+	for (deUint32 sampleNdx = 0u; sampleNdx < (numSamples - 1); ++sampleNdx)
+	{
+		const VkSubpassDependency subpassDependency =
+		{
+			1u + sampleNdx,									// uint32_t					srcSubpass;
+			numSamples,										// uint32_t					dstSubpass;
+			VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT,	// VkPipelineStageFlags		srcStageMask;
+			VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT,			// VkPipelineStageFlags		dstStageMask;
+			VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,			// VkAccessFlags			srcAccessMask;
+			VK_ACCESS_INPUT_ATTACHMENT_READ_BIT,			// VkAccessFlags			dstAccessMask;
+			0u,												// VkDependencyFlags		dependencyFlags;
+		};
+
+		subpassDependencies.push_back(subpassDependency);
 	}
 
 	const VkRenderPassCreateInfo renderPassInfo =
diff --git a/external/vulkancts/modules/vulkan/pipeline/vktPipelineMultisampleImageTests.cpp b/external/vulkancts/modules/vulkan/pipeline/vktPipelineMultisampleImageTests.cpp
index ef4efb3..62c33d0 100644
--- a/external/vulkancts/modules/vulkan/pipeline/vktPipelineMultisampleImageTests.cpp
+++ b/external/vulkancts/modules/vulkan/pipeline/vktPipelineMultisampleImageTests.cpp
@@ -69,6 +69,7 @@
 	int						numLayers;
 	VkFormat				colorFormat;
 	VkSampleCountFlagBits	numSamples;
+	bool					colorSamples;
 };
 
 template<typename T>
@@ -616,6 +617,117 @@
 	return std::vector<Vertex4RGBA>(data, data + DE_LENGTH_OF_ARRAY(data));
 }
 
+Vec4 sampleIndexToColor (deUint32 index)
+{
+	Vec4 res = Vec4(0.0f, 0.0f, 0.0f, 1.0f);
+
+	if (index & 0x01) res += Vec4(0.5f, 0.0f, 0.0f, 0.0f);
+	if (index & 0x02) res += Vec4(0.0f, 0.5f, 0.0f, 0.0f);
+	if (index & 0x04) res += Vec4(0.0f, 0.0f, 0.5f, 0.0f);
+
+	if (index & 0x08) res += Vec4(0.5f, 0.0f, 0.0f, 0.0f);
+	if (index & 0x10) res += Vec4(0.0f, 0.5f, 0.0f, 0.0f);
+	if (index & 0x20) res += Vec4(0.0f, 0.0f, 0.5f, 0.0f);
+
+	return res;
+}
+
+float* getStandardSampleLocations (VkSampleCountFlagBits samples)
+{
+	static float standardSampleLocations_1[1 * 2] = {
+		0.5f, 0.5f,
+	};
+
+	static float standardSampleLocations_2[2 * 2] = {
+		0.75f, 0.75f,
+		0.25f, 0.25f,
+	};
+
+	static float standardSampleLocations_4[4 * 2] = {
+		0.375f, 0.125f,
+		0.875f, 0.375f,
+		0.125f, 0.625f,
+		0.625f, 0.875f,
+	};
+
+	static float standardSampleLocations_8[8 * 2] = {
+		0.5625f, 0.3125f,
+		0.4375f, 0.6875f,
+		0.8125f, 0.5625f,
+		0.3125f, 0.1875f,
+		0.1875f, 0.8125f,
+		0.0625f, 0.4375f,
+		0.6875f, 0.9375f,
+		0.9375f, 0.0625f,
+	};
+
+	static float standardSampleLocations_16[16 * 2] = {
+		0.5625f, 0.5625f,
+		0.4375f, 0.3125f,
+		0.3125f, 0.625f,
+		0.75f, 0.4375f,
+		0.1875f, 0.375f,
+		0.625f, 0.8125f,
+		0.8125f, 0.6875f,
+		0.6875f, 0.1875f,
+		0.375f, 0.875f,
+		0.5f, 0.0625f,
+		0.25f, 0.125f,
+		0.125f, 0.75f,
+		0.0f, 0.5f,
+		0.9375f, 0.25f,
+		0.875f, 0.9375f,
+		0.0625f, 0.0f,
+	};
+
+	switch (samples)
+	{
+	case VK_SAMPLE_COUNT_1_BIT:
+		return standardSampleLocations_1;
+	case VK_SAMPLE_COUNT_2_BIT:
+		return standardSampleLocations_2;
+	case VK_SAMPLE_COUNT_4_BIT:
+		return standardSampleLocations_4;
+	case VK_SAMPLE_COUNT_8_BIT:
+		return standardSampleLocations_8;
+	case VK_SAMPLE_COUNT_16_BIT:
+		return standardSampleLocations_16;
+	default:
+		TCU_THROW(InternalError, "Unknown multisample bit configuration requested");
+	}
+}
+
+//! A flat-colored shapes plotted at standard sample points.
+std::vector<Vertex4RGBA> genPerSampleTriangleVertices (VkSampleCountFlagBits samples)
+{
+	float*						coordinates		= getStandardSampleLocations(samples);
+	const float					triangleSize	= 1.0f / (static_cast<float>(samples) * 2.0f);
+	std::vector<Vertex4RGBA>	res;
+
+	for (deUint32 i = 0; i < static_cast<deUint32>(samples); i++)
+	{
+		Vertex4RGBA data[] =
+		{
+			{
+				Vec4(0 + coordinates[i * 2 + 0] * 2 - 1, -triangleSize + coordinates[i * 2 + 1] * 2 - 1, 0.0f, 1.0f),
+				sampleIndexToColor(i),
+			},
+			{
+				Vec4(-triangleSize + coordinates[i * 2 + 0] * 2 - 1, triangleSize + coordinates[i * 2 + 1] * 2 - 1, 0.0f, 1.0f),
+				sampleIndexToColor(i),
+			},
+			{
+				Vec4(triangleSize + coordinates[i * 2 + 0] * 2 - 1, triangleSize + coordinates[i * 2 + 1] * 2 - 1, 0.0f, 1.0f),
+				sampleIndexToColor(i),
+			},
+		};
+		res.push_back(data[0]);
+		res.push_back(data[1]);
+		res.push_back(data[2]);
+	}
+	return res;
+}
+
 //! A full-viewport quad. Use with TRIANGLE_STRIP topology.
 std::vector<Vertex4RGBA> genFullQuadVertices (void)
 {
@@ -770,7 +882,7 @@
 		}
 
 		// Vertex buffer
-		const std::vector<Vertex4RGBA>	vertices			= genTriangleVertices();
+		const std::vector<Vertex4RGBA>	vertices			= caseDef.colorSamples ? genPerSampleTriangleVertices(caseDef.numSamples) : genTriangleVertices();
 		const VkDeviceSize				vertexBufferSize	= sizeInBytes(vertices);
 		const Unique<VkBuffer>			vertexBuffer		(makeBuffer(vk, device, vertexBufferSize, VK_BUFFER_USAGE_VERTEX_BUFFER_BIT));
 		const UniquePtr<Allocation>		vertexBufferAlloc	(bindBuffer(vk, device, allocator, *vertexBuffer, MemoryRequirement::HostVisible));
@@ -805,7 +917,6 @@
 				vk.cmdNextSubpass(*cmdBuffer, VK_SUBPASS_CONTENTS_INLINE);
 
 			vk.cmdBindPipeline(*cmdBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, **pipelines[layerNdx]);
-
 			vk.cmdDraw(*cmdBuffer, static_cast<deUint32>(vertices.size()), 1u, 0u, 0u);
 		}
 
@@ -900,6 +1011,13 @@
 	const VkImageUsageFlags colorImageUsage = VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | VK_IMAGE_USAGE_SAMPLED_BIT;
 
 	checkImageFormatRequirements(context.getInstanceInterface(), context.getPhysicalDevice(), caseDef.numSamples, caseDef.colorFormat, colorImageUsage);
+
+	if (context.isDeviceFunctionalitySupported("VK_KHR_portability_subset") &&
+		!context.getPortabilitySubsetFeatures().multisampleArrayImage &&
+		(caseDef.numSamples != VK_SAMPLE_COUNT_1_BIT) && (caseDef.numLayers != 1))
+	{
+		TCU_THROW(NotSupportedError, "VK_KHR_portability_subset: Implementation does not support image array with multiple samples per texel");
+	}
 }
 
 tcu::TestStatus test (Context& context, const CaseDef caseDef)
@@ -1380,6 +1498,237 @@
 
 } // StorageImage ns
 
+
+namespace StandardSamplePosition
+{
+
+void initPrograms (SourceCollections& programCollection, const CaseDef caseDef)
+{
+	// Pass 1: Render to texture
+
+	addSimpleVertexAndFragmentPrograms(programCollection, caseDef);
+
+	// Pass 2: Sample texture
+
+	// Vertex shader
+	{
+		std::ostringstream src;
+		src << glu::getGLSLVersionDeclaration(glu::GLSL_VERSION_450) << "\n"
+			<< "\n"
+			<< "layout(location = 0) in  vec4  in_position;\n"
+			<< "\n"
+			<< "out gl_PerVertex {\n"
+			<< "    vec4 gl_Position;\n"
+			<< "};\n"
+			<< "\n"
+			<< "void main(void)\n"
+			<< "{\n"
+			<< "    gl_Position = in_position;\n"
+			<< "}\n";
+
+		programCollection.glslSources.add("sample_vert") << glu::VertexSource(src.str());
+	}
+
+	// Fragment shader
+	{
+		std::ostringstream src;
+		src << glu::getGLSLVersionDeclaration(glu::GLSL_VERSION_450) << "\n"
+			<< "\n"
+			<< "layout(location = 0) out uint o_status;\n"
+			<< "\n"
+			<< "layout(set = 0, binding = 0) uniform sampler2DMS colorTexture;\n"
+			<< "\n"
+			<< "void main(void)\n"
+			<< "{\n"
+			<< "    uint result = 0;\n"
+			<< "    vec4 a, b;\n\n"
+			<< "\n";
+
+		for (deUint32 sampleNdx = 0; sampleNdx < (deUint32)caseDef.numSamples; sampleNdx++)
+		{
+			Vec4 expectedColor = sampleIndexToColor(sampleNdx);
+
+			src << "    a = texelFetch(colorTexture, ivec2(0,0), " << sampleNdx << ");\n"
+				   "    b = vec4(" << expectedColor.x() << ", " << expectedColor.y() << ", " << expectedColor.z() << ", 1.0);\n"
+				   "    if (abs(a.x - b.x) > 0.1 || abs(a.y - b.y) > 0.1 || abs(a.z - b.z) > 0.1) result++;\n";
+		}
+
+		src << "\n"
+			<< "    o_status = result;\n"
+			<< "}\n";
+
+		programCollection.glslSources.add("sample_frag") << glu::FragmentSource(src.str());
+	}
+}
+
+void checkSupport (Context& context, const CaseDef caseDef)
+{
+	const VkImageUsageFlags colorImageUsage		= VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | VK_IMAGE_USAGE_SAMPLED_BIT;
+	const VkPhysicalDeviceProperties props		= getPhysicalDeviceProperties(context.getInstanceInterface(), context.getPhysicalDevice());
+
+	checkImageFormatRequirements(context.getInstanceInterface(), context.getPhysicalDevice(), caseDef.numSamples, caseDef.colorFormat, colorImageUsage);
+
+	if (!props.limits.standardSampleLocations)
+		TCU_THROW(NotSupportedError, "Device does not support standard sample locations.");
+
+	if (caseDef.numSamples == VK_SAMPLE_COUNT_32_BIT ||
+		caseDef.numSamples == VK_SAMPLE_COUNT_64_BIT)
+	{
+		TCU_THROW(InternalError, "Standard does not define sample positions for 32x or 64x multisample modes");
+	}
+
+}
+
+tcu::TestStatus test (Context& context, const CaseDef caseDef)
+{
+	const DeviceInterface&	vk					= context.getDeviceInterface();
+	const VkDevice			device				= context.getDevice();
+	const VkQueue			queue				= context.getUniversalQueue();
+	const deUint32			queueFamilyIndex	= context.getUniversalQueueFamilyIndex();
+	Allocator&				allocator			= context.getDefaultAllocator();
+
+	const VkImageUsageFlags		colorImageUsage		= VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | VK_IMAGE_USAGE_SAMPLED_BIT;
+
+	{
+		tcu::TestLog& log = context.getTestContext().getLog();
+		log << tcu::LogSection("Description", "")
+			<< tcu::TestLog::Message << "Rendering to a multisampled image. Expecting samples to have specified colors." << tcu::TestLog::EndMessage
+			<< tcu::TestLog::Message << "Sampling from the texture with texelFetch (OpImageFetch)." << tcu::TestLog::EndMessage
+			<< tcu::TestLog::EndSection;
+	}
+
+	// Multisampled color image
+	const Unique<VkImage>			colorImage		(makeImage(vk, device, caseDef.colorFormat, caseDef.renderSize, caseDef.numLayers, caseDef.numSamples, colorImageUsage));
+	const UniquePtr<Allocation>		colorImageAlloc	(bindImage(vk, device, allocator, *colorImage, MemoryRequirement::Any));
+
+	const Unique<VkCommandPool>		cmdPool			(createCommandPool(vk, device, VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT, queueFamilyIndex));
+	const Unique<VkCommandBuffer>	cmdBuffer		(makeCommandBuffer(vk, device, *cmdPool));
+
+	// Step 1: Render to texture
+	{
+		renderMultisampledImage(context, caseDef, *colorImage);
+	}
+
+	// Step 2: Sample texture
+	{
+		// Color image view
+		const VkImageViewType			colorImageViewType	= (caseDef.numLayers == 1 ? VK_IMAGE_VIEW_TYPE_2D : VK_IMAGE_VIEW_TYPE_2D_ARRAY);
+		const Unique<VkImageView>		colorImageView		(makeImageView(vk, device, *colorImage, colorImageViewType, caseDef.colorFormat, makeColorSubresourceRange(0, caseDef.numLayers)));
+		const Unique<VkSampler>			colorSampler		(makeSampler(vk, device));
+
+		// Checksum image
+		const VkFormat					checksumFormat		= VK_FORMAT_R8_UINT;
+		const Unique<VkImage>			checksumImage		(makeImage(vk, device, checksumFormat, caseDef.renderSize, 1u, VK_SAMPLE_COUNT_1_BIT,
+																	   VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | VK_IMAGE_USAGE_TRANSFER_SRC_BIT));
+		const UniquePtr<Allocation>		checksumImageAlloc	(bindImage(vk, device, allocator, *checksumImage, MemoryRequirement::Any));
+		const Unique<VkImageView>		checksumImageView	(makeImageView(vk, device, *checksumImage, VK_IMAGE_VIEW_TYPE_2D, checksumFormat, makeColorSubresourceRange(0, 1)));
+
+		// Checksum buffer (for host reading)
+		const VkDeviceSize				checksumBufferSize	= caseDef.renderSize.x() * caseDef.renderSize.y() * tcu::getPixelSize(mapVkFormat(checksumFormat));
+		const Unique<VkBuffer>			checksumBuffer		(makeBuffer(vk, device, checksumBufferSize, VK_BUFFER_USAGE_TRANSFER_DST_BIT));
+		const UniquePtr<Allocation>		checksumBufferAlloc	(bindBuffer(vk, device, allocator, *checksumBuffer, MemoryRequirement::HostVisible));
+
+		zeroBuffer(vk, device, *checksumBufferAlloc, checksumBufferSize);
+
+		// Vertex buffer
+		const std::vector<Vertex4RGBA>	vertices			= genFullQuadVertices();
+		const VkDeviceSize				vertexBufferSize	= sizeInBytes(vertices);
+		const Unique<VkBuffer>			vertexBuffer		(makeBuffer(vk, device, vertexBufferSize, VK_BUFFER_USAGE_VERTEX_BUFFER_BIT));
+		const UniquePtr<Allocation>		vertexBufferAlloc	(bindBuffer(vk, device, allocator, *vertexBuffer, MemoryRequirement::HostVisible));
+
+		{
+			deMemcpy(vertexBufferAlloc->getHostPtr(), &vertices[0], static_cast<std::size_t>(vertexBufferSize));
+			flushAlloc(vk, device, *vertexBufferAlloc);
+		}
+
+		// Descriptors
+		// \note OpImageFetch doesn't use a sampler, but in GLSL texelFetch needs a sampler2D which translates to a combined image sampler in Vulkan.
+
+		const Unique<VkDescriptorSetLayout> descriptorSetLayout(DescriptorSetLayoutBuilder()
+			.addSingleSamplerBinding(VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, VK_SHADER_STAGE_FRAGMENT_BIT, &colorSampler.get())
+			.build(vk, device));
+
+		const Unique<VkDescriptorPool> descriptorPool(DescriptorPoolBuilder()
+			.addType(VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER)
+			.build(vk, device, VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT, 1u));
+
+		const Unique<VkDescriptorSet>	descriptorSet		(makeDescriptorSet(vk, device, *descriptorPool, *descriptorSetLayout));
+		const VkDescriptorImageInfo		imageDescriptorInfo	= makeDescriptorImageInfo(DE_NULL, *colorImageView, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL);
+
+		DescriptorSetUpdateBuilder()
+			.writeSingle(*descriptorSet, DescriptorSetUpdateBuilder::Location::binding(0u), VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, &imageDescriptorInfo)
+			.update(vk, device);
+
+		const Unique<VkShaderModule>	vertexModule	(createShaderModule		(vk, device, context.getBinaryCollection().get("sample_vert"), 0u));
+		const Unique<VkShaderModule>	fragmentModule	(createShaderModule		(vk, device, context.getBinaryCollection().get("sample_frag"), 0u));
+		const Unique<VkRenderPass>		renderPass		(makeSimpleRenderPass	(vk, device, checksumFormat));
+		const Unique<VkFramebuffer>		framebuffer		(makeFramebuffer		(vk, device, *renderPass, 1u, &checksumImageView.get(),
+																				 static_cast<deUint32>(caseDef.renderSize.x()),  static_cast<deUint32>(caseDef.renderSize.y())));
+		const Unique<VkPipelineLayout>	pipelineLayout	(makePipelineLayout		(vk, device, *descriptorSetLayout));
+		const std::vector<PipelineSp>	pipelines		(makeGraphicsPipelines	(vk, device, 1u, *pipelineLayout, *renderPass, *vertexModule, *fragmentModule,
+																				 caseDef.renderSize, VK_SAMPLE_COUNT_1_BIT, VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP));
+
+		beginCommandBuffer(vk, *cmdBuffer);
+
+		// Prepare for sampling in the fragment shader
+		{
+			const VkImageMemoryBarrier barriers[] =
+			{
+				{
+					VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER,						// VkStructureType			sType;
+					DE_NULL,													// const void*				pNext;
+					VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,						// VkAccessFlags			outputMask;
+					VK_ACCESS_SHADER_READ_BIT,									// VkAccessFlags			inputMask;
+					VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,					// VkImageLayout			oldLayout;
+					VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL,					// VkImageLayout			newLayout;
+					VK_QUEUE_FAMILY_IGNORED,									// deUint32					srcQueueFamilyIndex;
+					VK_QUEUE_FAMILY_IGNORED,									// deUint32					destQueueFamilyIndex;
+					*colorImage,												// VkImage					image;
+					makeColorSubresourceRange(0, caseDef.numLayers),			// VkImageSubresourceRange	subresourceRange;
+				},
+			};
+
+			vk.cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT, 0u,
+				0u, DE_NULL, 0u, DE_NULL, DE_LENGTH_OF_ARRAY(barriers), barriers);
+		}
+
+		beginRenderPass(vk, *cmdBuffer, *renderPass, *framebuffer, makeRect2D(0, 0, caseDef.renderSize.x(), caseDef.renderSize.y()), tcu::UVec4(0u));
+
+		vk.cmdBindPipeline(*cmdBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, **pipelines.back());
+		vk.cmdBindDescriptorSets(*cmdBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, *pipelineLayout, 0u, 1u, &descriptorSet.get(), 0u, DE_NULL);
+		{
+			const VkDeviceSize vertexBufferOffset = 0ull;
+			vk.cmdBindVertexBuffers(*cmdBuffer, 0u, 1u, &vertexBuffer.get(), &vertexBufferOffset);
+		}
+
+		vk.cmdDraw(*cmdBuffer, static_cast<deUint32>(vertices.size()), 1u, 0u, 0u);
+		endRenderPass(vk, *cmdBuffer);
+
+		copyImageToBuffer(vk, *cmdBuffer, *checksumImage, *checksumBuffer, caseDef.renderSize);
+
+		endCommandBuffer(vk, *cmdBuffer);
+		submitCommandsAndWait(vk, device, queue, *cmdBuffer);
+
+		// Verify result
+
+		{
+			invalidateAlloc(vk, device, *checksumBufferAlloc);
+
+			const tcu::ConstPixelBufferAccess	access						(mapVkFormat(checksumFormat), caseDef.renderSize.x(), caseDef.renderSize.y(), 1, checksumBufferAlloc->getHostPtr());
+
+			deUint32 result		= access.getPixelUint(0, 0).x();
+
+			if (result)
+				return tcu::TestStatus::fail(std::to_string(result) + " multisamples have unexpected color.");
+		}
+	}
+
+	return tcu::TestStatus::pass("OK");
+}
+
+} // StandardSamplePosition ns
+
+
 std::string getSizeLayerString (const IVec2& size, const int numLayers)
 {
 	std::ostringstream str;
@@ -1442,6 +1791,7 @@
 					numLayers[layerNdx],	// int						numLayers;
 					format[formatNdx],		// VkFormat					colorFormat;
 					samples[samplesNdx],	// VkSampleCountFlagBits	numSamples;
+					false,					// bool						colorQuad;
 				};
 
 				addFunctionCaseWithPrograms(formatGroup.get(), caseName.str(), "", checkSupport, initPrograms, testFunc, caseDef);
@@ -1452,6 +1802,49 @@
 	}
 }
 
+void addStandardSamplePositionTestCasesWithFunctions (tcu::TestCaseGroup*					group,
+													  FunctionSupport1<CaseDef>::Function	checkSupport,
+													  FunctionPrograms1<CaseDef>::Function	initPrograms,
+													  FunctionInstance1<CaseDef>::Function	testFunc)
+{
+	const VkSampleCountFlagBits samples[] =
+	{
+		VK_SAMPLE_COUNT_2_BIT,
+		VK_SAMPLE_COUNT_4_BIT,
+		VK_SAMPLE_COUNT_8_BIT,
+		VK_SAMPLE_COUNT_16_BIT,
+		VK_SAMPLE_COUNT_32_BIT,
+		VK_SAMPLE_COUNT_64_BIT,
+	};
+	const VkFormat format[] =
+	{
+		VK_FORMAT_R8G8B8A8_UNORM,
+		VK_FORMAT_R32G32B32A32_SFLOAT,
+	};
+
+	for (int formatNdx = 0; formatNdx < DE_LENGTH_OF_ARRAY(format); ++formatNdx)
+	{
+		MovePtr<tcu::TestCaseGroup> formatGroup(new tcu::TestCaseGroup(group->getTestContext(), getFormatString(format[formatNdx]).c_str(), ""));
+		for (int samplesNdx = 0; samplesNdx < DE_LENGTH_OF_ARRAY(samples); ++samplesNdx)
+		{
+			std::ostringstream caseName;
+			caseName << "samples_" << getNumSamples(samples[samplesNdx]);
+
+			const CaseDef caseDef =
+			{
+				IVec2(1,1),				// IVec2					renderSize;
+				1,						// int						numLayers;
+				format[formatNdx],		// VkFormat					colorFormat;
+				samples[samplesNdx],	// VkSampleCountFlagBits	numSamples;
+				true,					// bool						colorQuad;
+			};
+
+			addFunctionCaseWithPrograms(formatGroup.get(), caseName.str(), "", checkSupport, initPrograms, testFunc, caseDef);
+		}
+		group->addChild(formatGroup.release());
+	}
+}
+
 void createSampledImageTestsInGroup (tcu::TestCaseGroup* group)
 {
 	addTestCasesWithFunctions(group, SampledImage::checkSupport, SampledImage::initPrograms, SampledImage::test);
@@ -1462,6 +1855,11 @@
 	addTestCasesWithFunctions(group, StorageImage::checkSupport, StorageImage::initPrograms, StorageImage::test);
 }
 
+void createStandardSamplePositionTestsInGroup (tcu::TestCaseGroup* group)
+{
+	addStandardSamplePositionTestCasesWithFunctions(group, StandardSamplePosition::checkSupport, StandardSamplePosition::initPrograms, StandardSamplePosition::test);
+}
+
 } // anonymous ns
 
 //! Render to a multisampled image and sample from it in a fragment shader.
@@ -1476,5 +1874,11 @@
 	return createTestGroup(testCtx, "storage_image", "Multisampled image draw and read/write in compute shader", createStorageImageTestsInGroup);
 }
 
+//! Render to a multisampled image and verify standard multisample positions.
+tcu::TestCaseGroup* createMultisampleStandardSamplePositionTests (tcu::TestContext& testCtx)
+{
+	return createTestGroup(testCtx, "standardsampleposition", "Multisampled image standard sample position tests", createStandardSamplePositionTestsInGroup);
+}
+
 } // pipeline
 } // vkt
diff --git a/external/vulkancts/modules/vulkan/pipeline/vktPipelineMultisampleImageTests.hpp b/external/vulkancts/modules/vulkan/pipeline/vktPipelineMultisampleImageTests.hpp
index caec2d7..cf8d1e9 100644
--- a/external/vulkancts/modules/vulkan/pipeline/vktPipelineMultisampleImageTests.hpp
+++ b/external/vulkancts/modules/vulkan/pipeline/vktPipelineMultisampleImageTests.hpp
@@ -32,6 +32,7 @@
 
 tcu::TestCaseGroup* createMultisampleSampledImageTests (tcu::TestContext& testCtx);
 tcu::TestCaseGroup* createMultisampleStorageImageTests (tcu::TestContext& testCtx);
+tcu::TestCaseGroup* createMultisampleStandardSamplePositionTests(tcu::TestContext& testCtx);
 
 } // pipeline
 } // vkt
diff --git a/external/vulkancts/modules/vulkan/pipeline/vktPipelineMultisampleInterpolationTests.cpp b/external/vulkancts/modules/vulkan/pipeline/vktPipelineMultisampleInterpolationTests.cpp
index e3ed15f..60c183f 100644
--- a/external/vulkancts/modules/vulkan/pipeline/vktPipelineMultisampleInterpolationTests.cpp
+++ b/external/vulkancts/modules/vulkan/pipeline/vktPipelineMultisampleInterpolationTests.cpp
@@ -87,7 +87,7 @@
 
 	void						init			(void);
 	void						initPrograms	(vk::SourceCollections& programCollection) const;
-	virtual void				checkSupport	(Context&) const {}
+	void						checkSupport	(Context&				context) const;
 	TestInstance*				createInstance	(Context&				context) const;
 	static MultisampleCaseBase*	createCase		(tcu::TestContext&		testCtx,
 												 const std::string&		name,
@@ -95,6 +95,18 @@
 };
 
 template <typename CaseClassName>
+void MSCase<CaseClassName>::checkSupport (Context& context) const
+{
+	if (context.isDeviceFunctionalitySupported("VK_KHR_portability_subset") &&
+		!context.getPortabilitySubsetFeatures().shaderSampleRateInterpolationFunctions)
+	{
+		TCU_THROW(NotSupportedError, "VK_KHR_portability_subset: Shader sample rate interpolation functions are not supported by this implementation");
+	}
+
+	context.requireDeviceCoreFeature(DEVICE_CORE_FEATURE_SAMPLE_RATE_SHADING);
+}
+
+template <typename CaseClassName>
 MultisampleCaseBase* MSCase<CaseClassName>::createCase (tcu::TestContext& testCtx, const std::string& name, const ImageMSParams& imageMSParams)
 {
 	return new MSCase<CaseClassName>(testCtx, name, imageMSParams);
@@ -291,11 +303,6 @@
 	programCollection.glslSources.add("fragment_shader") << glu::FragmentSource(fs.str());
 }
 
-template<> void MSCase<MSCaseInterpolateAtSampleDistinctValues>::checkSupport (Context& context) const
-{
-	context.requireDeviceCoreFeature(DEVICE_CORE_FEATURE_SAMPLE_RATE_SHADING);
-}
-
 template<> TestInstance* MSCase<MSCaseInterpolateAtSampleDistinctValues>::createInstance (Context& context) const
 {
 	return new MSInstance<MSInstanceDistinctValues>(context, m_imageMSParams);
@@ -418,11 +425,6 @@
 	programCollection.glslSources.add("fragment_shader") << glu::FragmentSource(fs.str());
 }
 
-template<> void MSCase<MSCaseInterpolateAtSampleSingleSample>::checkSupport (Context& context) const
-{
-	context.requireDeviceCoreFeature(DEVICE_CORE_FEATURE_SAMPLE_RATE_SHADING);
-}
-
 template<> TestInstance* MSCase<MSCaseInterpolateAtSampleSingleSample>::createInstance (Context& context) const
 {
 	return new MSInstance<MSInstanceInterpolateScreenPosition>(context, m_imageMSParams);
@@ -492,11 +494,6 @@
 	programCollection.glslSources.add("fragment_shader") << glu::FragmentSource(fs.str());
 }
 
-template<> void MSCase<MSCaseInterpolateAtSampleIgnoresCentroid>::checkSupport (Context& context) const
-{
-	context.requireDeviceCoreFeature(DEVICE_CORE_FEATURE_SAMPLE_RATE_SHADING);
-}
-
 template<> TestInstance* MSCase<MSCaseInterpolateAtSampleIgnoresCentroid>::createInstance (Context& context) const
 {
 	return new MSInstance<MSInstanceInterpolateScreenPosition>(context, m_imageMSParams);
@@ -601,11 +598,6 @@
 	programCollection.glslSources.add("fragment_shader") << glu::FragmentSource(fs.str());
 }
 
-template<> void MSCase<MSCaseInterpolateAtSampleConsistency>::checkSupport (Context& context) const
-{
-	context.requireDeviceCoreFeature(DEVICE_CORE_FEATURE_SAMPLE_RATE_SHADING);
-}
-
 template<> TestInstance* MSCase<MSCaseInterpolateAtSampleConsistency>::createInstance (Context& context) const
 {
 	return new MSInstance<MSInstanceInterpolateScreenPosition>(context, m_imageMSParams);
@@ -710,11 +702,6 @@
 	programCollection.glslSources.add("fragment_shader") << glu::FragmentSource(fs.str());
 }
 
-template<> void MSCase<MSCaseInterpolateAtCentroidConsistency>::checkSupport (Context& context) const
-{
-	context.requireDeviceCoreFeature(DEVICE_CORE_FEATURE_SAMPLE_RATE_SHADING);
-}
-
 template<> TestInstance* MSCase<MSCaseInterpolateAtCentroidConsistency>::createInstance (Context& context) const
 {
 	return new MSInstance<MSInstanceInterpolateScreenPosition>(context, m_imageMSParams);
@@ -790,11 +777,6 @@
 	programCollection.glslSources.add("fragment_shader") << glu::FragmentSource(fs.str());
 }
 
-template<> void MSCase<MSCaseInterpolateAtOffsetPixelCenter>::checkSupport (Context& context) const
-{
-	context.requireDeviceCoreFeature(DEVICE_CORE_FEATURE_SAMPLE_RATE_SHADING);
-}
-
 template<> TestInstance* MSCase<MSCaseInterpolateAtOffsetPixelCenter>::createInstance (Context& context) const
 {
 	return new MSInstance<MSInstanceInterpolateScreenPosition>(context, m_imageMSParams);
@@ -901,11 +883,6 @@
 	programCollection.glslSources.add("fragment_shader") << glu::FragmentSource(fs.str());
 }
 
-template<> void MSCase<MSCaseInterpolateAtOffsetSamplePosition>::checkSupport (Context& context) const
-{
-	context.requireDeviceCoreFeature(DEVICE_CORE_FEATURE_SAMPLE_RATE_SHADING);
-}
-
 template<> TestInstance* MSCase<MSCaseInterpolateAtOffsetSamplePosition>::createInstance (Context& context) const
 {
 	return new MSInstance<MSInstanceInterpolateScreenPosition>(context, m_imageMSParams);
@@ -1020,6 +997,10 @@
 	programCollection.glslSources.add("fragment_shader") << glu::FragmentSource(fs.str());
 }
 
+template<> void MSCase<MSCaseCentroidQualifierInsidePrimitive>::checkSupport (Context&) const
+{
+}
+
 template<> TestInstance* MSCase<MSCaseCentroidQualifierInsidePrimitive>::createInstance (Context& context) const
 {
 	return new MSInstance<MSInstanceInterpolateBarycentricCoordinates>(context, m_imageMSParams);
diff --git a/external/vulkancts/modules/vulkan/pipeline/vktPipelineMultisampleSampleLocationsExtTests.cpp b/external/vulkancts/modules/vulkan/pipeline/vktPipelineMultisampleSampleLocationsExtTests.cpp
index 80861fa..12687fe 100644
--- a/external/vulkancts/modules/vulkan/pipeline/vktPipelineMultisampleSampleLocationsExtTests.cpp
+++ b/external/vulkancts/modules/vulkan/pipeline/vktPipelineMultisampleSampleLocationsExtTests.cpp
@@ -814,6 +814,17 @@
 				subpassDependencies.push_back(dependency);
 			}
 		}
+		// add a final dependency to synchronize results for the copy commands that will follow the renderpass
+		const VkSubpassDependency finalDependency = {
+			numSubpasses - 1,																			// uint32_t                srcSubpass;
+			VK_SUBPASS_EXTERNAL,																		// uint32_t                dstSubpass;
+			VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT | VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT,	// VkPipelineStageFlags    srcStageMask;
+			VK_PIPELINE_STAGE_TRANSFER_BIT,																// VkPipelineStageFlags    dstStageMask;
+			VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT | VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT,		// VkAccessFlags           srcAccessMask;
+			VK_ACCESS_TRANSFER_READ_BIT,																// VkAccessFlags           dstAccessMask;
+			(VkDependencyFlags)0,																		// VkDependencyFlags       dependencyFlags;
+		};
+		subpassDependencies.push_back(finalDependency);
 
 		const VkRenderPassCreateInfo renderPassInfo =
 		{
@@ -1535,16 +1546,6 @@
 		vk.cmdDraw(*cmdBuffer, m_numVertices, 1u, 0u, 0u);
 		endRenderPass(vk, *cmdBuffer);
 
-		// Resolve image -> host buffer
-		recordImageBarrier(vk, *cmdBuffer, *m_resolveImage,
-						VK_IMAGE_ASPECT_COLOR_BIT,								// VkImageAspectFlags	aspect,
-						VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT,			// VkPipelineStageFlags srcStageMask,
-						VK_PIPELINE_STAGE_TRANSFER_BIT,							// VkPipelineStageFlags dstStageMask,
-						VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,					// VkAccessFlags		srcAccessMask,
-						VK_ACCESS_TRANSFER_READ_BIT,							// VkAccessFlags		dstAccessMask,
-						VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,					// VkImageLayout		oldLayout,
-						VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL);					// VkImageLayout		newLayout)
-
 		recordCopyImageToBuffer(vk, *cmdBuffer, m_renderSize, *m_resolveImage, *m_colorBuffer);
 
 		endCommandBuffer(vk, *cmdBuffer);
@@ -1795,6 +1796,12 @@
 	// Are we allowed to modify the sample pattern within the same subpass?
 	if (params.drawIn == TEST_DRAW_IN_SAME_SUBPASS && ((params.options & TEST_OPTION_SAME_PATTERN_BIT) == 0) && !getSampleLocationsPropertiesEXT(context).variableSampleLocations)
 		TCU_THROW(NotSupportedError, "VkPhysicalDeviceSampleLocationsPropertiesEXT: variableSampleLocations not supported");
+
+	if (TEST_OPTION_WAIT_EVENTS_BIT & params.options &&
+		context.isDeviceFunctionalitySupported("VK_KHR_portability_subset") && !context.getPortabilitySubsetFeatures().events)
+	{
+		TCU_THROW(NotSupportedError, "VK_KHR_portability_subset: Events are not supported by this implementation");
+	}
 }
 
 const char* getString (const TestImageAspect aspect)
@@ -2216,16 +2223,6 @@
 
 		endRenderPass(vk, *cmdBuffer);
 
-		// Resolve image -> host buffer
-		recordImageBarrier(vk, *cmdBuffer, *m_resolveImage,
-						VK_IMAGE_ASPECT_COLOR_BIT,								// VkImageAspectFlags	aspect,
-						VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT,			// VkPipelineStageFlags srcStageMask,
-						VK_PIPELINE_STAGE_TRANSFER_BIT,							// VkPipelineStageFlags dstStageMask,
-						VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,					// VkAccessFlags		srcAccessMask,
-						VK_ACCESS_TRANSFER_READ_BIT,							// VkAccessFlags		dstAccessMask,
-						VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,					// VkImageLayout		oldLayout,
-						VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL);					// VkImageLayout		newLayout)
-
 		recordCopyImageToBuffer(vk, *cmdBuffer, m_renderSize, *m_resolveImage, *m_colorBuffer);
 
 		endCommandBuffer(vk, *cmdBuffer);
@@ -2561,15 +2558,6 @@
 		}
 
 		// Resolve image -> host buffer
-		recordImageBarrier(vk, currentCmdBuffer, *m_resolveImage,
-						VK_IMAGE_ASPECT_COLOR_BIT,								// VkImageAspectFlags	aspect,
-						VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT,			// VkPipelineStageFlags srcStageMask,
-						VK_PIPELINE_STAGE_TRANSFER_BIT,							// VkPipelineStageFlags dstStageMask,
-						VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,					// VkAccessFlags		srcAccessMask,
-						VK_ACCESS_TRANSFER_READ_BIT,							// VkAccessFlags		dstAccessMask,
-						VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,					// VkImageLayout		oldLayout,
-						VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL);					// VkImageLayout		newLayout)
-
 		recordCopyImageToBuffer(vk, currentCmdBuffer, m_renderSize, *m_resolveImage, *m_colorBuffer);
 
 		endCommandBuffer(vk, currentCmdBuffer);
@@ -2802,15 +2790,6 @@
 		endRenderPass(vk, *cmdBuffer);
 
 		// Resolve image -> host buffer
-		recordImageBarrier(vk, *cmdBuffer, *m_resolveImage,
-						VK_IMAGE_ASPECT_COLOR_BIT,								// VkImageAspectFlags	aspect,
-						VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT,			// VkPipelineStageFlags srcStageMask,
-						VK_PIPELINE_STAGE_TRANSFER_BIT,							// VkPipelineStageFlags dstStageMask,
-						VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,					// VkAccessFlags		srcAccessMask,
-						VK_ACCESS_TRANSFER_READ_BIT,							// VkAccessFlags		dstAccessMask,
-						VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,					// VkImageLayout		oldLayout,
-						VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL);					// VkImageLayout		newLayout)
-
 		recordCopyImageToBuffer(vk, *cmdBuffer, m_renderSize, *m_resolveImage, *m_colorBuffer);
 
 		endCommandBuffer(vk, *cmdBuffer);
@@ -2957,15 +2936,6 @@
 		endRenderPass(vk, *cmdBuffer);
 
 		// Resolve image -> host buffer
-		recordImageBarrier(vk, *cmdBuffer, *m_resolveImage,
-						VK_IMAGE_ASPECT_COLOR_BIT,								// VkImageAspectFlags	aspect,
-						VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT,			// VkPipelineStageFlags srcStageMask,
-						VK_PIPELINE_STAGE_TRANSFER_BIT,							// VkPipelineStageFlags dstStageMask,
-						VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,					// VkAccessFlags		srcAccessMask,
-						VK_ACCESS_TRANSFER_READ_BIT,							// VkAccessFlags		dstAccessMask,
-						VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,					// VkImageLayout		oldLayout,
-						VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL);					// VkImageLayout		newLayout)
-
 		recordCopyImageToBuffer(vk, *cmdBuffer, m_renderSize, *m_resolveImage, *m_colorBuffer);
 
 		endCommandBuffer(vk, *cmdBuffer);
diff --git a/external/vulkancts/modules/vulkan/pipeline/vktPipelineMultisampleTests.cpp b/external/vulkancts/modules/vulkan/pipeline/vktPipelineMultisampleTests.cpp
index 3db404c..6615ada 100644
--- a/external/vulkancts/modules/vulkan/pipeline/vktPipelineMultisampleTests.cpp
+++ b/external/vulkancts/modules/vulkan/pipeline/vktPipelineMultisampleTests.cpp
@@ -2977,6 +2977,21 @@
 					};
 					subpassDependencies.push_back(copySampleSubpassDependency);
 				}
+				// the very last sample pass must synchronize with all prior subpasses
+				for (size_t i = 0; i < (m_perSampleImages.size() - 1); ++i)
+				{
+					const VkSubpassDependency storeSubpassDependency =
+					{
+						1u + static_cast<deUint32>(i),						// deUint32							srcSubpass
+						static_cast<deUint32>(m_perSampleImages.size()),    // deUint32							dstSubpass
+						VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT,		// VkPipelineStageFlags				srcStageMask
+						VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT,				// VkPipelineStageFlags				dstStageMask
+						VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,				// VkAccessFlags					srcAccessMask
+						VK_ACCESS_INPUT_ATTACHMENT_READ_BIT,				// VkAccessFlags					dstAccessMask
+						0u,													// VkDependencyFlags				dependencyFlags
+					};
+					subpassDependencies.push_back(storeSubpassDependency);
+				}
 			}
 		}
 
@@ -4586,6 +4601,11 @@
 		multisampleTests->addChild(createMultisampleStorageImageTests(testCtx));
 	}
 
+	// Sampling from a multisampled image texture (texelFetch), checking supersample positions
+	{
+		multisampleTests->addChild(createMultisampleStandardSamplePositionTests(testCtx));
+	}
+
 	// VK_EXT_sample_locations
 	{
 		multisampleTests->addChild(createMultisampleSampleLocationsExtTests(testCtx));
diff --git a/external/vulkancts/modules/vulkan/pipeline/vktPipelineNoPositionTests.cpp b/external/vulkancts/modules/vulkan/pipeline/vktPipelineNoPositionTests.cpp
new file mode 100644
index 0000000..16de0cb
--- /dev/null
+++ b/external/vulkancts/modules/vulkan/pipeline/vktPipelineNoPositionTests.cpp
@@ -0,0 +1,783 @@
+/*------------------------------------------------------------------------
+ * Vulkan Conformance Tests
+ * ------------------------
+ *
+ * Copyright (c) 2020 The Khronos Group Inc.
+ * Copyright (c) 2020 Valve Corporation.
+ *
+ * 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 Tests with shaders that do not write to the Position built-in.
+ *//*--------------------------------------------------------------------*/
+
+#include "vktPipelineNoPositionTests.hpp"
+#include "vktTestCase.hpp"
+
+#include "vkQueryUtil.hpp"
+#include "vkObjUtil.hpp"
+#include "vkBuilderUtil.hpp"
+#include "vkTypeUtil.hpp"
+#include "vkCmdUtil.hpp"
+#include "vkImageWithMemory.hpp"
+#include "vkBufferWithMemory.hpp"
+#include "vktPipelineImageUtil.hpp"
+#include "vkImageUtil.hpp"
+#include "vkBarrierUtil.hpp"
+#include "vkBuilderUtil.hpp"
+
+#include "tcuVector.hpp"
+#include "tcuTestLog.hpp"
+
+#include "deUniquePtr.hpp"
+
+#include <vector>
+#include <set>
+#include <sstream>
+#include <array>
+
+namespace vkt
+{
+namespace pipeline
+{
+
+namespace
+{
+
+using namespace vk;
+
+enum ShaderStageBits
+{
+	STAGE_VERTEX			= (1 << 0),
+	STAGE_TESS_CONTROL		= (1 << 1),
+	STAGE_TESS_EVALUATION	= (1 << 2),
+	STAGE_GEOMETRY			= (1 << 3),
+	STAGE_MASK_COUNT		= (1 << 4),
+};
+
+using ShaderStageFlags = deUint32;
+
+constexpr deUint32 kStageCount = 4u;
+
+static_assert((1u << kStageCount) == static_cast<deUint32>(STAGE_MASK_COUNT),
+			  "Total stage count does not match stage mask bits");
+
+struct TestParams
+{
+	ShaderStageFlags	selectedStages;			// Stages that will be present in the pipeline.
+	ShaderStageFlags	writeStages;			// Subset of selectedStages that will write to the Position built-in.
+	deUint32			numViews;				// Number of views for multiview.
+	bool				explicitDeclarations;	// Explicitly declare the input and output blocks or not.
+	bool				useSSBO;				// Write to an SSBO from the selected stages.
+
+	// Commonly used checks.
+	bool tessellation	(void) const { return (selectedStages & (STAGE_TESS_CONTROL | STAGE_TESS_EVALUATION));	}
+	bool geometry		(void) const { return (selectedStages & STAGE_GEOMETRY);								}
+};
+
+// Generates the combinations list of stage flags for writeStages when a given subset of stages are selected.
+std::vector<ShaderStageFlags> getWriteSubCases (ShaderStageFlags selectedStages)
+{
+	std::set<ShaderStageFlags> uniqueCases;
+	for (ShaderStageFlags stages = 0; stages < STAGE_MASK_COUNT; ++stages)
+		uniqueCases.insert(stages & selectedStages);
+	return std::vector<ShaderStageFlags>(begin(uniqueCases), end(uniqueCases));
+}
+
+class NoPositionCase : public vkt::TestCase
+{
+public:
+							NoPositionCase		(tcu::TestContext& testCtx, const std::string& name, const std::string& description, const TestParams& params);
+	virtual					~NoPositionCase		(void) {}
+
+	virtual void			initPrograms		(vk::SourceCollections& programCollection) const;
+	virtual TestInstance*	createInstance		(Context& context) const;
+	virtual void			checkSupport		(Context& context) const;
+
+	static tcu::Vec4		getBackGroundColor	(void) { return tcu::Vec4(0.0f, 1.0f, 0.0f, 1.0f); }
+	static VkFormat			getImageFormat		(void) { return VK_FORMAT_R8G8B8A8_UNORM; }
+	static VkExtent3D		getImageExtent		(void) { return makeExtent3D(64u, 64u, 1u); }
+
+private:
+	TestParams				m_params;
+};
+
+class NoPositionInstance : public vkt::TestInstance
+{
+public:
+								NoPositionInstance	(Context& context, const TestParams& params);
+	virtual						~NoPositionInstance	(void) {}
+
+	virtual tcu::TestStatus		iterate				(void);
+
+private:
+	TestParams					m_params;
+};
+
+NoPositionCase::NoPositionCase (tcu::TestContext& testCtx, const std::string& name, const std::string& description, const TestParams& params)
+	: vkt::TestCase	(testCtx, name, description)
+	, m_params		(params)
+{
+	DE_ASSERT(params.numViews >= 1u);
+}
+
+void NoPositionCase::initPrograms (vk::SourceCollections& programCollection) const
+{
+	// Add shaders for the selected stages and write to gl_Position in the subset of stages marked for writing.
+
+	// Optional writes, extensions and declarations.
+	std::string ssboDecl;
+	std::string extensions;
+	std::string vertSSBOWrite;
+	std::string tescSSBOWrite;
+	std::string teseSSBOWrite;
+	std::string geomSSBOWrite;
+
+	const bool multiview = (m_params.numViews > 1u);
+
+	if (multiview)
+		extensions = "#extension GL_EXT_multiview : require\n";
+
+	if (m_params.useSSBO)
+	{
+		const auto stageCountStr	= de::toString(kStageCount);
+		const auto ssboElementCount	= kStageCount * m_params.numViews;
+		ssboDecl = "layout (set=0, binding=0, std430) buffer StorageBlock { uint counters[" + de::toString(ssboElementCount) + "]; } ssbo;\n";
+
+		const std::array<std::string*, kStageCount> writeStrings = {{ &vertSSBOWrite, &tescSSBOWrite, &teseSSBOWrite, &geomSSBOWrite }};
+		for (size_t i = 0; i < writeStrings.size(); ++i)
+			*writeStrings[i] = "    atomicAdd(ssbo.counters[" + de::toString(i) + (multiview ? (" + uint(gl_ViewIndex) * " + stageCountStr) : "") + "], 1u);\n";
+	}
+
+	if (m_params.selectedStages & STAGE_VERTEX)
+	{
+		std::ostringstream vert;
+		vert
+			<< "#version 450\n"
+			<< extensions
+			<< ssboDecl
+			<< "layout (location=0) in vec4 in_pos;\n"
+			<< (m_params.explicitDeclarations ?
+				"out gl_PerVertex\n"
+				"{\n"
+				"    vec4 gl_Position;\n"
+				"    float gl_PointSize;\n"
+				"    float gl_ClipDistance[];\n"
+				"    float gl_CullDistance[];\n"
+				"};\n"
+				: "")
+			<< "void main (void)\n"
+			<< "{\n"
+			<< ((m_params.writeStages & STAGE_VERTEX) ? "    gl_Position = in_pos;\n" : "")
+			<< vertSSBOWrite
+			<< "}\n"
+			;
+
+		programCollection.glslSources.add("vert") << glu::VertexSource(vert.str());
+	}
+
+	if (m_params.selectedStages & STAGE_TESS_CONTROL)
+	{
+		std::ostringstream tesc;
+		tesc
+			<< "#version 450\n"
+			<< extensions
+			<< ssboDecl
+			<< "layout (vertices = 3) out;\n"
+			<< (m_params.explicitDeclarations ?
+				"in gl_PerVertex\n"
+				"{\n"
+				"    vec4 gl_Position;\n"
+				"    float gl_PointSize;\n"
+				"    float gl_ClipDistance[];\n"
+				"    float gl_CullDistance[];\n"
+				"} gl_in[gl_MaxPatchVertices];\n"
+				"out gl_PerVertex\n"
+				"{\n"
+				"    vec4 gl_Position;\n"
+				"    float gl_PointSize;\n"
+				"    float gl_ClipDistance[];\n"
+				"    float gl_CullDistance[];\n"
+				"} gl_out[];\n"
+				: "")
+			<< "void main (void)\n"
+			<< "{\n"
+			<< "    gl_TessLevelInner[0] = 1.0;\n"
+			<< "    gl_TessLevelInner[1] = 1.0;\n"
+			<< "    gl_TessLevelOuter[0] = 1.0;\n"
+			<< "    gl_TessLevelOuter[1] = 1.0;\n"
+			<< "    gl_TessLevelOuter[2] = 1.0;\n"
+			<< "    gl_TessLevelOuter[3] = 1.0;\n"
+			<< "\n"
+			<< ((m_params.writeStages & STAGE_TESS_CONTROL) ? "    gl_out[gl_InvocationID].gl_Position = gl_in[gl_InvocationID].gl_Position;\n" : "")
+			<< tescSSBOWrite
+			<< "}\n"
+			;
+
+		programCollection.glslSources.add("tesc") << glu::TessellationControlSource(tesc.str());
+	}
+
+	if (m_params.selectedStages & STAGE_TESS_EVALUATION)
+	{
+		std::ostringstream tese;
+		tese
+			<< "#version 450\n"
+			<< extensions
+			<< ssboDecl
+			<< "layout (triangles, fractional_odd_spacing, cw) in;\n"
+			<< (m_params.explicitDeclarations ?
+				"in gl_PerVertex\n"
+				"{\n"
+				"    vec4 gl_Position;\n"
+				"    float gl_PointSize;\n"
+				"    float gl_ClipDistance[];\n"
+				"    float gl_CullDistance[];\n"
+				"} gl_in[gl_MaxPatchVertices];\n"
+				"out gl_PerVertex\n"
+				"{\n"
+				"    vec4 gl_Position;\n"
+				"    float gl_PointSize;\n"
+				"    float gl_ClipDistance[];\n"
+				"    float gl_CullDistance[];\n"
+				"};\n"
+				: "")
+			<< "void main (void)\n"
+			<< "{\n"
+			<< ((m_params.writeStages & STAGE_TESS_EVALUATION) ?
+				"    gl_Position = (gl_TessCoord.x * gl_in[0].gl_Position) +\n"
+				"                  (gl_TessCoord.y * gl_in[1].gl_Position) +\n"
+				"                  (gl_TessCoord.z * gl_in[2].gl_Position);\n"
+				: "")
+			<< teseSSBOWrite
+			<< "}\n"
+			;
+
+		programCollection.glslSources.add("tese") << glu::TessellationEvaluationSource(tese.str());
+	}
+
+	if (m_params.selectedStages & STAGE_GEOMETRY)
+	{
+		std::ostringstream geom;
+		geom
+			<< "#version 450\n"
+			<< extensions
+			<< ssboDecl
+			<< "layout (triangles) in;\n"
+			<< "layout (triangle_strip, max_vertices=3) out;\n"
+			<< (m_params.explicitDeclarations ?
+				"in gl_PerVertex\n"
+				"{\n"
+				"    vec4 gl_Position;\n"
+				"    float gl_PointSize;\n"
+				"    float gl_ClipDistance[];\n"
+				"    float gl_CullDistance[];\n"
+				"} gl_in[3];\n"
+				"out gl_PerVertex\n"
+				"{\n"
+				"    vec4 gl_Position;\n"
+				"    float gl_PointSize;\n"
+				"    float gl_ClipDistance[];\n"
+				"    float gl_CullDistance[];\n"
+				"};\n"
+				: "")
+			<< "void main (void)\n"
+			<< "{\n"
+			<< "    for (int i = 0; i < 3; i++)\n"
+			<< "    {\n"
+			<< ((m_params.writeStages & STAGE_GEOMETRY) ? "        gl_Position = gl_in[i].gl_Position;\n" : "")
+			<< "        EmitVertex();\n"
+			<< "    }\n"
+			<< geomSSBOWrite
+			<< "}\n"
+			;
+
+		programCollection.glslSources.add("geom") << glu::GeometrySource(geom.str());
+	}
+
+	{
+		const auto backgroundColor = getBackGroundColor();
+
+		std::ostringstream colorStr;
+		colorStr << "vec4(" << backgroundColor.x() << ", " << backgroundColor.y() << ", " << backgroundColor.z() << ", " << backgroundColor.w() << ")";
+
+		std::ostringstream frag;
+		frag
+			<< "#version 450\n"
+			<< "layout (location=0) out vec4 out_color;\n"
+			<< "void main (void)\n"
+			<< "{\n"
+			<< "    out_color = " << colorStr.str() << ";\n"
+			<< "}\n"
+			;
+
+		programCollection.glslSources.add("frag") << glu::FragmentSource(frag.str());
+	}
+}
+
+TestInstance* NoPositionCase::createInstance (Context& context) const
+{
+	return new NoPositionInstance (context, m_params);
+}
+
+void NoPositionCase::checkSupport (Context& context) const
+{
+	const auto features	= getPhysicalDeviceFeatures(context.getInstanceInterface(), context.getPhysicalDevice());
+	const bool hasTess	= m_params.tessellation();
+	const bool hasGeom	= m_params.geometry();
+
+	if (hasTess && !features.tessellationShader)
+		TCU_THROW(NotSupportedError, "Tessellation shaders not supported");
+
+	if (hasGeom && !features.geometryShader)
+		TCU_THROW(NotSupportedError, "Geometry shaders not supported");
+
+	if (m_params.numViews > 1u)
+	{
+		context.requireDeviceFunctionality("VK_KHR_multiview");
+		const auto& multiviewFeatures = context.getMultiviewFeatures();
+
+		if (!multiviewFeatures.multiview)
+			TCU_THROW(NotSupportedError, "Multiview not supported");
+
+		if (hasTess && !multiviewFeatures.multiviewTessellationShader)
+			TCU_THROW(NotSupportedError, "Multiview not supported with tessellation shaders");
+
+		if (hasGeom && !multiviewFeatures.multiviewGeometryShader)
+			TCU_THROW(NotSupportedError, "Multiview not supported with geometry shaders");
+	}
+
+	if (m_params.useSSBO)
+	{
+		if (!features.vertexPipelineStoresAndAtomics)
+			TCU_THROW(NotSupportedError, "Vertex pipeline stores and atomics not supported");
+	}
+}
+
+NoPositionInstance::NoPositionInstance (Context& context, const TestParams& params)
+	: vkt::TestInstance	(context)
+	, m_params			(params)
+{}
+
+tcu::TestStatus NoPositionInstance::iterate (void)
+{
+	const	auto&				vkd			= m_context.getDeviceInterface();
+	const	auto				device		= m_context.getDevice();
+	const	auto				queue		= m_context.getUniversalQueue();
+	const	auto				qIndex		= m_context.getUniversalQueueFamilyIndex();
+			auto&				alloc		= m_context.getDefaultAllocator();
+	const	auto				format		= NoPositionCase::getImageFormat();
+	const	auto				extent		= NoPositionCase::getImageExtent();
+	const	auto				color		= NoPositionCase::getBackGroundColor();
+	const	VkImageUsageFlags	usage		= (VK_IMAGE_USAGE_TRANSFER_SRC_BIT | VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT);
+	const	auto				viewType	= (m_params.numViews > 1u ? VK_IMAGE_VIEW_TYPE_2D_ARRAY : VK_IMAGE_VIEW_TYPE_2D);
+	const	bool				tess		= m_params.tessellation();
+			VkShaderStageFlags	stageFlags	= 0u;
+
+	// Shader modules.
+	Move<VkShaderModule> vert;
+	Move<VkShaderModule> tesc;
+	Move<VkShaderModule> tese;
+	Move<VkShaderModule> geom;
+	Move<VkShaderModule> frag;
+
+	if (m_params.selectedStages & STAGE_VERTEX)
+	{
+		vert = createShaderModule(vkd, device, m_context.getBinaryCollection().get("vert"), 0u);
+		stageFlags |= VK_SHADER_STAGE_VERTEX_BIT;
+	}
+	if (m_params.selectedStages & STAGE_TESS_CONTROL)
+	{
+		tesc = createShaderModule(vkd, device, m_context.getBinaryCollection().get("tesc"), 0u);
+		stageFlags |= VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT;
+	}
+	if (m_params.selectedStages & STAGE_TESS_EVALUATION)
+	{
+		tese = createShaderModule(vkd, device, m_context.getBinaryCollection().get("tese"), 0u);
+		stageFlags |= VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT;
+	}
+	if (m_params.selectedStages & STAGE_GEOMETRY)
+	{
+		geom = createShaderModule(vkd, device, m_context.getBinaryCollection().get("geom"), 0u);
+		stageFlags |= VK_SHADER_STAGE_GEOMETRY_BIT;
+	}
+
+	frag = createShaderModule(vkd, device, m_context.getBinaryCollection().get("frag"), 0u);
+	stageFlags |= VK_SHADER_STAGE_FRAGMENT_BIT;
+
+	// Color attachment.
+	const VkImageCreateInfo colorImageInfo =
+	{
+		VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO,	//	VkStructureType			sType;
+		nullptr,								//	const void*				pNext;
+		0u,										//	VkImageCreateFlags		flags;
+		VK_IMAGE_TYPE_2D,						//	VkImageType				imageType;
+		format,									//	VkFormat				format;
+		extent,									//	VkExtent3D				extent;
+		1u,										//	deUint32				mipLevels;
+		m_params.numViews,						//	deUint32				arrayLayers;
+		VK_SAMPLE_COUNT_1_BIT,					//	VkSampleCountFlagBits	samples;
+		VK_IMAGE_TILING_OPTIMAL,				//	VkImageTiling			tiling;
+		usage,									//	VkImageUsageFlags		usage;
+		VK_SHARING_MODE_EXCLUSIVE,				//	VkSharingMode			sharingMode;
+		0u,										//	deUint32				queueFamilyIndexCount;
+		nullptr,								//	const deUint32*			pQueueFamilyIndices;
+		VK_IMAGE_LAYOUT_UNDEFINED,				//	VkImageLayout			initialLayout;
+	};
+	ImageWithMemory colorImage (vkd, device, alloc, colorImageInfo, MemoryRequirement::Any);
+
+	const auto subresourceRange	= makeImageSubresourceRange(VK_IMAGE_ASPECT_COLOR_BIT, 0u, 1u, 0u, m_params.numViews);
+	const auto colorImageView	= makeImageView(vkd, device, colorImage.get(), viewType, format, subresourceRange);
+
+	// Vertices and vertex buffer.
+	std::vector<tcu::Vec4> vertices =
+	{
+		tcu::Vec4( 0.0f, -0.5f,  0.0f,  1.0f),
+		tcu::Vec4( 0.5f,  0.5f,  0.0f,  1.0f),
+		tcu::Vec4(-0.5f,  0.5f,  0.0f,  1.0f),
+	};
+
+	const auto vertexBufferSize		= static_cast<VkDeviceSize>(vertices.size() * sizeof(decltype(vertices)::value_type));
+	const auto vertexBufferInfo		= makeBufferCreateInfo(vertexBufferSize, VK_BUFFER_USAGE_VERTEX_BUFFER_BIT);
+	const auto vertexBufferOffset	= static_cast<VkDeviceSize>(0);
+	BufferWithMemory vertexBuffer (vkd, device, alloc, vertexBufferInfo, MemoryRequirement::HostVisible);
+
+	auto& vertexBufferAlloc	= vertexBuffer.getAllocation();
+	void* vertexBufferPtr	= vertexBufferAlloc.getHostPtr();
+	deMemcpy(vertexBufferPtr, vertices.data(), static_cast<size_t>(vertexBufferSize));
+	flushAlloc(vkd, device, vertexBufferAlloc);
+
+	// Render pass.
+	const VkAttachmentDescription colorAttachment =
+	{
+		0u,											//	VkAttachmentDescriptionFlags	flags;
+		format,										//	VkFormat						format;
+		VK_SAMPLE_COUNT_1_BIT,						//	VkSampleCountFlagBits			samples;
+		VK_ATTACHMENT_LOAD_OP_CLEAR,				//	VkAttachmentLoadOp				loadOp;
+		VK_ATTACHMENT_STORE_OP_STORE,				//	VkAttachmentStoreOp				storeOp;
+		VK_ATTACHMENT_LOAD_OP_DONT_CARE,			//	VkAttachmentLoadOp				stencilLoadOp;
+		VK_ATTACHMENT_STORE_OP_DONT_CARE,			//	VkAttachmentStoreOp				stencilStoreOp;
+		VK_IMAGE_LAYOUT_UNDEFINED,					//	VkImageLayout					initialLayout;
+		VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,	//	VkImageLayout					finalLayout;
+	};
+
+	const VkAttachmentReference colorAttachmentReference =
+	{
+		0u,											//	deUint32		attachment;
+		VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,	//	VkImageLayout	layout;
+	};
+
+	const VkSubpassDescription subpassDescription =
+	{
+		0u,									//	VkSubpassDescriptionFlags		flags;
+		VK_PIPELINE_BIND_POINT_GRAPHICS,	//	VkPipelineBindPoint				pipelineBindPoint;
+		0u,									//	deUint32						inputAttachmentCount;
+		nullptr,							//	const VkAttachmentReference*	pInputAttachments;
+		1u,									//	deUint32						colorAttachmentCount;
+		&colorAttachmentReference,			//	const VkAttachmentReference*	pColorAttachments;
+		0u,									//	const VkAttachmentReference*	pResolveAttachments;
+		nullptr,							//	const VkAttachmentReference*	pDepthStencilAttachment;
+		0u,									//	deUint32						preserveAttachmentCount;
+		nullptr,							//	const deUint32*					pPreserveAttachments;
+	};
+
+	de::MovePtr<VkRenderPassMultiviewCreateInfo>	multiviewInfo;
+	deUint32										viewMask		= 0u;
+	deUint32										correlationMask	= 0u;
+
+	if (m_params.numViews > 1u)
+	{
+		for (deUint32 viewIdx = 0u; viewIdx < m_params.numViews; ++viewIdx)
+		{
+			viewMask		|= (1 << viewIdx);
+			correlationMask	|= (1 << viewIdx);
+		}
+
+		multiviewInfo = de::MovePtr<VkRenderPassMultiviewCreateInfo>(new VkRenderPassMultiviewCreateInfo
+		{
+			VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO,	//	VkStructureType	sType;
+			nullptr,												//	const void*		pNext;
+			1u,														//	deUint32		subpassCount;
+			&viewMask,												//	const deUint32*	pViewMasks;
+			0u,														//	deUint32		dependencyCount;
+			nullptr,												//	const deInt32*	pViewOffsets;
+			1u,														//	deUint32		correlationMaskCount;
+			&correlationMask,										//	const deUint32*	pCorrelationMasks;
+		});
+	}
+
+	const VkRenderPassCreateInfo renderPassInfo =
+	{
+		VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO,	//	VkStructureType					sType;
+		multiviewInfo.get(),						//	const void*						pNext;
+		0u,											//	VkRenderPassCreateFlags			flags;
+		1u,											//	deUint32						attachmentCount;
+		&colorAttachment,							//	const VkAttachmentDescription*	pAttachments;
+		1u,											//	deUint32						subpassCount;
+		&subpassDescription,						//	const VkSubpassDescription*		pSubpasses;
+		0u,											//	deUint32						dependencyCount;
+		nullptr,									//	const VkSubpassDependency*		pDependencies;
+	};
+
+	const auto renderPass = createRenderPass(vkd, device, &renderPassInfo);
+
+	// Framebuffer.
+	const auto framebuffer = makeFramebuffer(vkd, device, renderPass.get(), colorImageView.get(), extent.width, extent.height);
+
+	// Descriptor set layout and pipeline layout.
+	DescriptorSetLayoutBuilder layoutBuilder;
+	if (m_params.useSSBO)
+	{
+		layoutBuilder.addSingleBinding(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, stageFlags);
+	}
+	const auto descriptorSetLayout	= layoutBuilder.build(vkd, device);
+	const auto pipelineLayout		= makePipelineLayout(vkd, device, descriptorSetLayout.get());
+
+	// Pipeline.
+	const std::vector<VkViewport>	viewports		(1u, makeViewport(extent));
+	const std::vector<VkRect2D>		scissors		(1u, makeRect2D(extent));
+
+	const deUint32	patchControlPoints	= (tess ? 3u : 0u);
+	const auto		primitiveTopology	= (tess ? VK_PRIMITIVE_TOPOLOGY_PATCH_LIST : VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST);
+
+	const auto pipeline = makeGraphicsPipeline(
+		vkd, device, pipelineLayout.get(),
+		vert.get(), tesc.get(), tese.get(), geom.get(), frag.get(),
+		renderPass.get(), viewports, scissors, primitiveTopology,
+		0u /* Subpass */, patchControlPoints);
+
+	// Descriptor set and output SSBO if needed.
+	Move<VkDescriptorPool>			descriptorPool;
+	Move<VkDescriptorSet>			descriptorSet;
+	de::MovePtr<BufferWithMemory>	ssboBuffer;
+	const auto						ssboElementCount	= kStageCount * m_params.numViews;
+	const auto						ssboBufferSize		= static_cast<VkDeviceSize>(ssboElementCount * sizeof(deUint32));
+
+	if (m_params.useSSBO)
+	{
+		// Output SSBO.
+		const auto	ssboBufferInfo	= makeBufferCreateInfo(ssboBufferSize, VK_BUFFER_USAGE_STORAGE_BUFFER_BIT);
+					ssboBuffer		= de::MovePtr<BufferWithMemory>(new BufferWithMemory(vkd, device, alloc, ssboBufferInfo, MemoryRequirement::HostVisible));
+		auto&		ssboBufferAlloc	= ssboBuffer->getAllocation();
+
+		deMemset(ssboBufferAlloc.getHostPtr(), 0, static_cast<size_t>(ssboBufferSize));
+		flushAlloc(vkd, device, ssboBufferAlloc);
+
+		// Descriptor pool.
+		DescriptorPoolBuilder poolBuilder;
+		poolBuilder.addType(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER);
+		descriptorPool = poolBuilder.build(vkd, device, VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT, 1u);
+
+		// Descriptor set.
+		descriptorSet = makeDescriptorSet(vkd, device, descriptorPool.get(), descriptorSetLayout.get());
+		const auto ssboWriteInfo = makeDescriptorBufferInfo(ssboBuffer->get(), 0ull, ssboBufferSize);
+		DescriptorSetUpdateBuilder updateBuilder;
+		updateBuilder.writeSingle(descriptorSet.get(), DescriptorSetUpdateBuilder::Location::binding(0u), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, &ssboWriteInfo);
+		updateBuilder.update(vkd, device);
+	}
+
+	// Output verification buffer.
+	const auto tcuFormat	= mapVkFormat(format);
+	const auto pixelSize	= static_cast<deUint32>(tcu::getPixelSize(tcuFormat));
+	const auto layerPixels	= extent.width * extent.height;
+	const auto layerBytes	= layerPixels * pixelSize;
+	const auto totalPixels	= layerPixels * m_params.numViews;
+	const auto totalBytes	= totalPixels * pixelSize;
+
+	const auto verificationBufferInfo = makeBufferCreateInfo(totalBytes, VK_BUFFER_USAGE_TRANSFER_DST_BIT);
+	BufferWithMemory verificationBuffer(vkd, device, alloc, verificationBufferInfo, MemoryRequirement::HostVisible);
+
+	// Command pool and buffer.
+	const auto cmdPool		= makeCommandPool(vkd, device, qIndex);
+	const auto cmdBufferPtr	= allocateCommandBuffer(vkd, device, cmdPool.get(), VK_COMMAND_BUFFER_LEVEL_PRIMARY);
+	const auto cmdBuffer	= cmdBufferPtr.get();
+
+	// Render triangle.
+	beginCommandBuffer(vkd, cmdBuffer);
+	beginRenderPass(vkd, cmdBuffer, renderPass.get(), framebuffer.get(), scissors.front(), color);
+	vkd.cmdBindPipeline(cmdBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, pipeline.get());
+	vkd.cmdBindVertexBuffers(cmdBuffer, 0u, 1u, &vertexBuffer.get(), &vertexBufferOffset);
+	if (m_params.useSSBO)
+		vkd.cmdBindDescriptorSets(cmdBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, pipelineLayout.get(), 0u, 1u, &descriptorSet.get(), 0u, nullptr);
+	vkd.cmdDraw(cmdBuffer, static_cast<deUint32>(vertices.size()), 1u, 0u, 0u);
+	endRenderPass(vkd, cmdBuffer);
+
+	// Copy output image to verification buffer.
+	const auto preTransferBarrier = makeImageMemoryBarrier(VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, VK_ACCESS_TRANSFER_READ_BIT, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, colorImage.get(), subresourceRange);
+	vkd.cmdPipelineBarrier(cmdBuffer, VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, 0u, 0u, nullptr, 0u, nullptr, 1u, &preTransferBarrier);
+
+	const auto				subresourceLayers	= makeImageSubresourceLayers(VK_IMAGE_ASPECT_COLOR_BIT, 0u, 0u, m_params.numViews);
+	const VkBufferImageCopy	copyRegion			=
+	{
+		0ull,					//	VkDeviceSize				bufferOffset;
+		0u,						//	deUint32					bufferRowLength;
+		0u,						//	deUint32					bufferImageHeight;
+		subresourceLayers,		//	VkImageSubresourceLayers	imageSubresource;
+		makeOffset3D(0, 0, 0),	//	VkOffset3D					imageOffset;
+		extent,					//	VkExtent3D					imageExtent;
+	};
+	vkd.cmdCopyImageToBuffer(cmdBuffer, colorImage.get(), VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, verificationBuffer.get(), 1u, &copyRegion);
+
+	const auto postTransferBarrier = makeMemoryBarrier(VK_ACCESS_TRANSFER_WRITE_BIT, VK_ACCESS_HOST_READ_BIT);
+	vkd.cmdPipelineBarrier(cmdBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_HOST_BIT, 0u, 1u, &postTransferBarrier, 0u, nullptr, 0u, nullptr);
+
+	// Output SSBO to host barrier.
+	if (m_params.useSSBO)
+	{
+		const auto ssboBarrier = makeMemoryBarrier(VK_ACCESS_SHADER_WRITE_BIT, VK_ACCESS_HOST_READ_BIT);
+		vkd.cmdPipelineBarrier(cmdBuffer, VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT, VK_PIPELINE_STAGE_HOST_BIT, 0u, 1u, &ssboBarrier, 0u, nullptr, 0u, nullptr);
+	}
+
+	// Submit commands.
+	endCommandBuffer(vkd, cmdBuffer);
+	submitCommandsAndWait(vkd, device, queue, cmdBuffer);
+
+	// Verify the image has the background color.
+	auto&	verificationBufferAlloc	= verificationBuffer.getAllocation();
+	auto	verificationBufferPtr	= reinterpret_cast<const char*>(verificationBufferAlloc.getHostPtr());
+	invalidateAlloc(vkd, device, verificationBufferAlloc);
+
+	const auto iWidth	= static_cast<int>(extent.width);
+	const auto iHeight	= static_cast<int>(extent.height);
+	const auto iDepth	= static_cast<int>(extent.depth);
+
+	for (deUint32 layer = 0u; layer < m_params.numViews; ++layer)
+	{
+		const auto pixels = tcu::ConstPixelBufferAccess(tcuFormat, iWidth, iHeight, iDepth, reinterpret_cast<const void*>(verificationBufferPtr + layer * layerBytes));
+
+		for (int y = 0; y < iHeight;	++y)
+		for (int x = 0; x < iWidth;		++x)
+		{
+			const auto pixel = pixels.getPixel(x, y);
+			if (pixel != color)
+			{
+				std::ostringstream msg;
+				msg << "Unexpected color found at pixel (" << x << ", " << y << ") in layer " << layer;
+
+				auto& log = m_context.getTestContext().getLog();
+				log << tcu::TestLog::Message << msg.str() << tcu::TestLog::EndMessage;
+				log << tcu::TestLog::Image("Result", "Result Image", pixels);
+				TCU_FAIL(msg.str());
+			}
+		}
+	}
+
+	// Verify SSBO if used.
+	if (m_params.useSSBO)
+	{
+		// Get stored counters.
+		const auto	ssboBufferSizeSz	= static_cast<size_t>(ssboBufferSize);
+		auto&		ssboAlloc			= ssboBuffer->getAllocation();
+		invalidateAlloc(vkd, device, ssboAlloc);
+
+		std::vector<deUint32> ssboCounters;
+		ssboCounters.resize(ssboElementCount);
+		DE_ASSERT(ssboBufferSizeSz == ssboCounters.size() * sizeof(decltype(ssboCounters)::value_type));
+		deMemcpy(ssboCounters.data(), ssboAlloc.getHostPtr(), ssboBufferSizeSz);
+
+		// Minimum accepted counter values.
+		// Vertex, Tesellation Evaluation, Tessellation Control, Geometry.
+		deUint32 expectedCounters[kStageCount] = { 3u, 3u, 3u, 1u };
+
+		// Verify.
+		for (deUint32 viewIdx = 0u; viewIdx < m_params.numViews; ++viewIdx)
+		for (deUint32 stageIdx = 0u; stageIdx < kStageCount; ++stageIdx)
+		{
+			// If the stage is not selected, the expected value is exactly zero. Otherwise, it must be at least as expectedCounters.
+			const deUint32	minVal		= ((m_params.selectedStages & (1u << stageIdx)) ? expectedCounters[stageIdx] : 0u);
+			const deUint32	storedVal	= ssboCounters[stageIdx + viewIdx * kStageCount];
+			const bool		ok			= ((minVal == 0u) ? (storedVal == minVal) : (storedVal >= minVal));
+
+			if (!ok)
+			{
+				const char* stageNames[kStageCount] =
+				{
+					"vertex",
+					"tessellation evaluation",
+					"tessellation control",
+					"geometry",
+				};
+
+				std::ostringstream msg;
+				msg << "Unexpected SSBO counter value in view " << viewIdx
+					<< " for the " << stageNames[stageIdx] << " shader:"
+					<< " got " << storedVal << " but expected " << minVal;
+				TCU_FAIL(msg.str());
+			}
+		}
+	}
+
+	return tcu::TestStatus::pass("Pass");
+}
+
+} // anonymous
+
+tcu::TestCaseGroup*	createNoPositionTests (tcu::TestContext& testCtx)
+{
+	de::MovePtr<tcu::TestCaseGroup> group(new tcu::TestCaseGroup(testCtx, "no_position", "Tests with shaders that do not write to the Position built-in"));
+
+	for (int aux = 0; aux < 2; ++aux)
+	{
+		const bool						explicitDeclarations	= (aux == 1);
+		const std::string				declGroupName			(explicitDeclarations ? "explicit_declarations" : "implicit_declarations");
+		de::MovePtr<tcu::TestCaseGroup>	declGroup				(new tcu::TestCaseGroup(testCtx, declGroupName.c_str(), ""));
+
+		for (int aux2 = 0; aux2 < 2; ++aux2)
+		{
+			const bool useSSBO = (aux2 == 1);
+			const std::string ssboGroupName (useSSBO ? "ssbo_writes" : "basic");
+			de::MovePtr<tcu::TestCaseGroup> ssboGroup (new tcu::TestCaseGroup(testCtx, ssboGroupName.c_str(), ""));
+
+			for (deUint32 viewCount = 1u; viewCount <= 2u; ++viewCount)
+			{
+				const std::string				viewGroupName	((viewCount == 1u) ? "single_view" : "multiview");
+				de::MovePtr<tcu::TestCaseGroup>	viewGroup		(new tcu::TestCaseGroup(testCtx, viewGroupName.c_str(), ""));
+
+				for (ShaderStageFlags stages = 0u; stages < STAGE_MASK_COUNT; ++stages)
+				{
+					// Vertex must always be present.
+					if (! (stages & STAGE_VERTEX))
+						continue;
+
+					// Tessellation stages must both be present or none must be.
+					if (static_cast<bool>(stages & STAGE_TESS_CONTROL) != static_cast<bool>(stages & STAGE_TESS_EVALUATION))
+						continue;
+
+					const auto writeMaskCases = getWriteSubCases(stages);
+					for (const auto writeMask : writeMaskCases)
+					{
+						std::string testName;
+						if (stages & STAGE_VERTEX)			testName += (testName.empty() ? "" : "_") + std::string("v") + ((writeMask & STAGE_VERTEX)			? "1" : "0");
+						if (stages & STAGE_TESS_CONTROL)	testName += (testName.empty() ? "" : "_") + std::string("c") + ((writeMask & STAGE_TESS_CONTROL)	? "1" : "0");
+						if (stages & STAGE_TESS_EVALUATION)	testName += (testName.empty() ? "" : "_") + std::string("e") + ((writeMask & STAGE_TESS_EVALUATION)	? "1" : "0");
+						if (stages & STAGE_GEOMETRY)		testName += (testName.empty() ? "" : "_") + std::string("g") + ((writeMask & STAGE_GEOMETRY)		? "1" : "0");
+
+						TestParams params = { stages, writeMask, viewCount, explicitDeclarations, true };
+						viewGroup->addChild(new NoPositionCase(testCtx, testName, "", params));
+					}
+				}
+
+				ssboGroup->addChild(viewGroup.release());
+			}
+
+			declGroup->addChild(ssboGroup.release());
+		}
+
+		group->addChild(declGroup.release());
+	}
+
+	return group.release();
+}
+
+} // pipeline
+} // vkt
diff --git a/external/vulkancts/modules/vulkan/pipeline/vktPipelineVertexOnlyTests.hpp b/external/vulkancts/modules/vulkan/pipeline/vktPipelineNoPositionTests.hpp
similarity index 72%
copy from external/vulkancts/modules/vulkan/pipeline/vktPipelineVertexOnlyTests.hpp
copy to external/vulkancts/modules/vulkan/pipeline/vktPipelineNoPositionTests.hpp
index 1a85ebf..b5a2ca6 100644
--- a/external/vulkancts/modules/vulkan/pipeline/vktPipelineVertexOnlyTests.hpp
+++ b/external/vulkancts/modules/vulkan/pipeline/vktPipelineNoPositionTests.hpp
@@ -1,11 +1,11 @@
-#ifndef _VKTPIPELINEVERTEXONLYTESTS_HPP
-#define _VKTPIPELINEVERTEXONLYTESTS_HPP
+#ifndef _VKTPIPELINENOPOSITIONTESTS_HPP
+#define _VKTPIPELINENOPOSITIONTESTS_HPP
 /*------------------------------------------------------------------------
  * Vulkan Conformance Tests
  * ------------------------
  *
- * Copyright (c) 2019 Google LLC
- * Copyright (c) 2019 The Khronos Group Inc.
+ * Copyright (c) 2020 The Khronos Group Inc.
+ * Copyright (c) 2020 Valve Corporation.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -21,7 +21,7 @@
  *
  *//*!
  * \file
- * \brief Tests using only vertex shader in a graphics pipeline
+ * \brief Tests with shaders that do not write to the Position built-in.
  *//*--------------------------------------------------------------------*/
 
 #include "tcuDefs.hpp"
@@ -32,9 +32,9 @@
 namespace pipeline
 {
 
-tcu::TestCaseGroup*	createVertexOnlyTests (tcu::TestContext& testCtx);
+tcu::TestCaseGroup*	createNoPositionTests (tcu::TestContext& testCtx);
 
 } // pipeline
 } // vkt
 
-#endif // _VKTPIPELINEVERTEXONLYTESTS_HPP
+#endif // _VKTPIPELINENOPOSITIONTESTS_HPP
diff --git a/external/vulkancts/modules/vulkan/pipeline/vktPipelinePushConstantTests.cpp b/external/vulkancts/modules/vulkan/pipeline/vktPipelinePushConstantTests.cpp
index 6e32277..10e0987 100644
--- a/external/vulkancts/modules/vulkan/pipeline/vktPipelinePushConstantTests.cpp
+++ b/external/vulkancts/modules/vulkan/pipeline/vktPipelinePushConstantTests.cpp
@@ -27,6 +27,7 @@
 #include "vktPipelineImageUtil.hpp"
 #include "vktPipelineVertexUtil.hpp"
 #include "vktPipelineReferenceRenderer.hpp"
+
 #include "vktTestCase.hpp"
 #include "vkImageUtil.hpp"
 #include "vkMemUtil.hpp"
@@ -38,12 +39,17 @@
 #include "vkTypeUtil.hpp"
 #include "vkCmdUtil.hpp"
 #include "vkObjUtil.hpp"
+#include "vkImageWithMemory.hpp"
+#include "vkBufferWithMemory.hpp"
+#include "vkBarrierUtil.hpp"
+
 #include "tcuImageCompare.hpp"
+#include "tcuTestLog.hpp"
+
 #include "deMemory.h"
 #include "deRandom.hpp"
 #include "deStringUtil.hpp"
 #include "deUniquePtr.hpp"
-#include "tcuTestLog.hpp"
 
 #include <algorithm>
 #include <sstream>
@@ -97,7 +103,7 @@
 struct PushConstantData
 {
 	struct PushConstantRange
-{
+	{
 		VkShaderStageFlags		shaderStage;
 		deUint32				offset;
 		deUint32				size;
@@ -2595,6 +2601,338 @@
 	return tcu::TestStatus::pass("Result image matches reference");
 }
 
+// The overwrite-values cases will use a 2x2 storage image and 4 separate draws or dispatches to store the color of each pixel in
+// the image. The color will be calculated as baseColor*multiplier+colorOffset, and the base color, multiplier, color component
+// offsets and coords will be changed with multiple push commands before each draw/dispatch, to verify overwriting multiple ranges
+// works as expected.
+
+struct OverwritePushConstants
+{
+	tcu::IVec4	coords;				// We will only use the first two components, but an IVec4 eases matching alignments.
+	tcu::UVec4	baseColor;
+	tcu::UVec4	multiplier;
+	deUint32	colorOffsets[4];
+	tcu::UVec4	transparentGreen;
+};
+
+struct OverwriteTestParams
+{
+	OverwritePushConstants	pushConstantValues[4];
+	VkPipelineBindPoint		bindPoint;
+};
+
+class OverwriteTestCase : public vkt::TestCase
+{
+public:
+							OverwriteTestCase		(tcu::TestContext& testCtx, const std::string& name, const std::string& description, const OverwriteTestParams& params);
+	virtual					~OverwriteTestCase		(void) {}
+
+	virtual void			initPrograms			(vk::SourceCollections& programCollection) const;
+	virtual TestInstance*	createInstance			(Context& context) const;
+
+protected:
+	OverwriteTestParams		m_params;
+};
+
+class OverwriteTestInstance : public vkt::TestInstance
+{
+public:
+								OverwriteTestInstance	(Context& context, const OverwriteTestParams& params);
+	virtual						~OverwriteTestInstance	(void) {}
+
+	virtual tcu::TestStatus		iterate					(void);
+
+protected:
+	OverwriteTestParams			m_params;
+};
+
+OverwriteTestCase::OverwriteTestCase (tcu::TestContext& testCtx, const std::string& name, const std::string& description, const OverwriteTestParams& params)
+	: vkt::TestCase	(testCtx, name, description)
+	, m_params		(params)
+{}
+
+void OverwriteTestCase::initPrograms (vk::SourceCollections& programCollection) const
+{
+	std::ostringstream shader;
+
+	shader
+		<< "#version 450\n"
+		<< "layout (push_constant, std430) uniform PushConstants {\n"
+		<< "    ivec4   coords;\n" // Note we will only use the .xy swizzle.
+		<< "    uvec4   baseColor;\n"
+		<< "    uvec4   multiplier;\n"
+		<< "    uint    colorOffsets[4];\n"
+		<< "    uvec4   transparentGreen;\n"
+		<< "} pc;\n"
+		<< "layout(rgba8ui, set=0, binding=0) uniform uimage2D simage;\n"
+		<< "void main() {\n"
+		<< "    uvec4   colorOffsets = uvec4(pc.colorOffsets[0], pc.colorOffsets[1], pc.colorOffsets[2], pc.colorOffsets[3]);\n"
+		<< "    uvec4   finalColor   = pc.baseColor * pc.multiplier + colorOffsets + pc.transparentGreen;\n"
+		<< "    imageStore(simage, pc.coords.xy, finalColor);\n"
+		<< "}\n"
+		;
+
+	if (m_params.bindPoint == VK_PIPELINE_BIND_POINT_COMPUTE)
+	{
+		programCollection.glslSources.add("comp") << glu::ComputeSource(shader.str());
+	}
+	else if (m_params.bindPoint == VK_PIPELINE_BIND_POINT_GRAPHICS)
+	{
+		std::ostringstream vert;
+		vert
+			<< "#version 450\n"
+			<< "\n"
+			<< "void main()\n"
+			<< "{\n"
+			// Full-screen clockwise triangle strip with 4 vertices.
+			<< "	const float x = (-1.0+2.0*((gl_VertexIndex & 2)>>1));\n"
+			<< "	const float y = ( 1.0-2.0* (gl_VertexIndex % 2));\n"
+			<< "	gl_Position = vec4(x, y, 0.0, 1.0);\n"
+			<< "}\n"
+			;
+
+		programCollection.glslSources.add("vert") << glu::VertexSource(vert.str());
+		programCollection.glslSources.add("frag") << glu::FragmentSource(shader.str());
+	}
+	else
+		DE_ASSERT(false);
+}
+
+TestInstance* OverwriteTestCase::createInstance (Context& context) const
+{
+	return new OverwriteTestInstance(context, m_params);
+}
+
+OverwriteTestInstance::OverwriteTestInstance (Context& context, const OverwriteTestParams& params)
+	: vkt::TestInstance	(context)
+	, m_params			(params)
+{}
+
+tcu::TestStatus OverwriteTestInstance::iterate (void)
+{
+	const auto&	vkd		= m_context.getDeviceInterface();
+	const auto	device	= m_context.getDevice();
+	auto&		alloc	= m_context.getDefaultAllocator();
+	const auto	queue	= m_context.getUniversalQueue();
+	const auto	qIndex	= m_context.getUniversalQueueFamilyIndex();
+	const bool	isComp	= (m_params.bindPoint == VK_PIPELINE_BIND_POINT_COMPUTE);
+
+	const VkShaderStageFlags	stageFlags	= (isComp ? VK_SHADER_STAGE_COMPUTE_BIT : VK_SHADER_STAGE_FRAGMENT_BIT);
+	const VkPipelineStageFlags	writeStages	= (isComp ? VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT : VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT);
+	const auto					imageFormat	= VK_FORMAT_R8G8B8A8_UINT;
+	const auto					imageExtent	= makeExtent3D(2u, 2u, 1u);
+
+	// Storage image.
+	const VkImageCreateInfo imageCreateInfo =
+	{
+		VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO,							//	VkStructureType			sType;
+		nullptr,														//	const void*				pNext;
+		0u,																//	VkImageCreateFlags		flags;
+		VK_IMAGE_TYPE_2D,												//	VkImageType				imageType;
+		imageFormat,													//	VkFormat				format;
+		imageExtent,													//	VkExtent3D				extent;
+		1u,																//	deUint32				mipLevels;
+		1u,																//	deUint32				arrayLayers;
+		VK_SAMPLE_COUNT_1_BIT,											//	VkSampleCountFlagBits	samples;
+		VK_IMAGE_TILING_OPTIMAL,										//	VkImageTiling			tiling;
+		(VK_IMAGE_USAGE_STORAGE_BIT | VK_IMAGE_USAGE_TRANSFER_SRC_BIT),	//	VkImageUsageFlags		usage;
+		VK_SHARING_MODE_EXCLUSIVE,										//	VkSharingMode			sharingMode;
+		0u,																//	deUint32				queueFamilyIndexCount;
+		nullptr,														//	const deUint32*			pQueueFamilyIndices;
+		VK_IMAGE_LAYOUT_UNDEFINED,										//	VkImageLayout			initialLayout;
+	};
+	ImageWithMemory storageImage (vkd, device, alloc, imageCreateInfo, MemoryRequirement::Any);
+	const auto subresourceRange = makeImageSubresourceRange(VK_IMAGE_ASPECT_COLOR_BIT, 0u, 1u, 0u, 1u);
+	const auto storageImageView = makeImageView(vkd, device, storageImage.get(), VK_IMAGE_VIEW_TYPE_2D, imageFormat, subresourceRange);
+
+	// Buffer to copy output pixels to.
+	const auto tcuFormat	= mapVkFormat(imageFormat);
+	const auto pixelSize	= static_cast<VkDeviceSize>(tcu::getPixelSize(tcuFormat));
+	const auto bufferSize	= pixelSize * imageExtent.width * imageExtent.height * imageExtent.depth;
+
+	const auto bufferCreateInfo = makeBufferCreateInfo(bufferSize, VK_BUFFER_USAGE_TRANSFER_DST_BIT);
+	BufferWithMemory transferBuffer (vkd, device, alloc, bufferCreateInfo, MemoryRequirement::HostVisible);
+
+	// Descriptor set layout and pipeline layout.
+	DescriptorSetLayoutBuilder layoutBuilder;
+	layoutBuilder.addSingleBinding(VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, stageFlags);
+	const auto descriptorSetLayout = layoutBuilder.build(vkd, device);
+
+	const VkPushConstantRange pcRange =
+	{
+		stageFlags,												//	VkShaderStageFlags	stageFlags;
+		0u,														//	deUint32			offset;
+		static_cast<deUint32>(sizeof(OverwritePushConstants)),	//	deUint32			size;
+	};
+	const auto pipelineLayout = makePipelineLayout(vkd, device, 1u, &descriptorSetLayout.get(), 1u, &pcRange);
+
+	// Descriptor pool and set.
+	DescriptorPoolBuilder poolBuilder;
+	poolBuilder.addType(VK_DESCRIPTOR_TYPE_STORAGE_IMAGE);
+	const auto descriptorPool = poolBuilder.build(vkd, device, VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT, 1u);
+	const auto descriptorSet = makeDescriptorSet(vkd, device, descriptorPool.get(), descriptorSetLayout.get());
+
+	DescriptorSetUpdateBuilder updateBuilder;
+	const auto descriptorImageInfo = makeDescriptorImageInfo(DE_NULL, storageImageView.get(), VK_IMAGE_LAYOUT_GENERAL);
+	updateBuilder.writeSingle(descriptorSet.get(), DescriptorSetUpdateBuilder::Location::binding(0u), VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, &descriptorImageInfo);
+	updateBuilder.update(vkd, device);
+
+	// Command pool and set.
+	const auto cmdPool		= makeCommandPool(vkd, device, qIndex);
+	const auto cmdBufferPtr	= allocateCommandBuffer(vkd, device, cmdPool.get(), VK_COMMAND_BUFFER_LEVEL_PRIMARY);
+	const auto cmdBuffer	= cmdBufferPtr.get();
+
+	// Pipeline.
+	const std::vector<VkViewport>	viewports	(1, makeViewport(imageExtent));
+	const std::vector<VkRect2D>		scissors	(1, makeRect2D(imageExtent));
+
+	Move<VkShaderModule>	vertModule;
+	Move<VkShaderModule>	fragModule;
+	Move<VkShaderModule>	compModule;
+
+	Move<VkRenderPass>		renderPass;
+	Move<VkFramebuffer>		framebuffer;
+	Move<VkPipeline>		pipeline;
+
+	if (isComp)
+	{
+		compModule	= createShaderModule(vkd, device, m_context.getBinaryCollection().get("comp"), 0u);
+		pipeline	= makeComputePipeline(vkd, device, pipelineLayout.get(), 0u, compModule.get(), 0u, nullptr);
+	}
+	else
+	{
+		vertModule = createShaderModule(vkd, device, m_context.getBinaryCollection().get("vert"), 0u);
+		fragModule = createShaderModule(vkd, device, m_context.getBinaryCollection().get("frag"), 0u);
+
+		const VkPipelineVertexInputStateCreateInfo inputState =
+		{
+			VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO,	// VkStructureType                             sType
+			nullptr,													// const void*                                 pNext
+			0u,															// VkPipelineVertexInputStateCreateFlags       flags
+			0u,															// deUint32                                    vertexBindingDescriptionCount
+			nullptr,													// const VkVertexInputBindingDescription*      pVertexBindingDescriptions
+			0u,															// deUint32                                    vertexAttributeDescriptionCount
+			nullptr,													// const VkVertexInputAttributeDescription*    pVertexAttributeDescriptions
+		};
+		renderPass	= makeRenderPass(vkd, device);
+		framebuffer	= makeFramebuffer(vkd, device, renderPass.get(), 0u, nullptr, imageExtent.width, imageExtent.height);
+		pipeline	= makeGraphicsPipeline(vkd, device, pipelineLayout.get(),
+			vertModule.get(), DE_NULL, DE_NULL, DE_NULL, fragModule.get(), renderPass.get(),
+			viewports, scissors, VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP, 0u, 0u, &inputState);
+	}
+
+	// Offsets and sizes.
+	const struct
+	{
+		size_t offset;
+		size_t size;
+	} pcPush[] =
+	{
+		// Push members doing some back-and-forth in the range.
+		{	offsetof(OverwritePushConstants, baseColor),		sizeof(OverwritePushConstants::baseColor)			},
+		{	offsetof(OverwritePushConstants, coords),			sizeof(OverwritePushConstants::coords)				},
+		{	offsetof(OverwritePushConstants, colorOffsets),		sizeof(OverwritePushConstants::colorOffsets)		},
+		{	offsetof(OverwritePushConstants, multiplier),		sizeof(OverwritePushConstants::multiplier)			},
+		{	offsetof(OverwritePushConstants, transparentGreen),	sizeof(OverwritePushConstants::transparentGreen)	},
+	};
+
+	beginCommandBuffer(vkd, cmdBuffer);
+
+	// Transition layout for storage image.
+	const auto preImageBarrier = makeImageMemoryBarrier(0u, VK_ACCESS_SHADER_WRITE_BIT, VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_GENERAL, storageImage.get(), subresourceRange);
+	vkd.cmdPipelineBarrier(cmdBuffer, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, writeStages, 0u, 0u, nullptr, 0u, nullptr, 1u, &preImageBarrier);
+
+	vkd.cmdBindDescriptorSets(cmdBuffer, m_params.bindPoint, pipelineLayout.get(), 0u, 1u, &descriptorSet.get(), 0u, nullptr);
+	vkd.cmdBindPipeline(cmdBuffer, m_params.bindPoint, pipeline.get());
+
+	if (!isComp)
+		beginRenderPass(vkd, cmdBuffer, renderPass.get(), framebuffer.get(), scissors[0]);
+
+	for (int pcIndex = 0; pcIndex < DE_LENGTH_OF_ARRAY(m_params.pushConstantValues); ++pcIndex)
+	{
+		const auto& pc = m_params.pushConstantValues[pcIndex];
+
+		// Push all structure members separately.
+		for (int pushIdx = 0; pushIdx < DE_LENGTH_OF_ARRAY(pcPush); ++pushIdx)
+		{
+			const auto&	push	= pcPush[pushIdx];
+			const void*	dataPtr	= reinterpret_cast<const void*>(reinterpret_cast<const char*>(&pc) + push.offset);
+			vkd.cmdPushConstants(cmdBuffer, pipelineLayout.get(), stageFlags, static_cast<deUint32>(push.offset), static_cast<deUint32>(push.size), dataPtr);
+		}
+
+		// Draw or dispatch.
+		if (isComp)
+			vkd.cmdDispatch(cmdBuffer, 1u, 1u, 1u);
+		else
+			vkd.cmdDraw(cmdBuffer, 4u, 1u, 0u, 0u);
+	}
+
+	if (!isComp)
+		endRenderPass(vkd, cmdBuffer);
+
+	// Copy storage image to output buffer.
+	const auto postImageBarrier = makeImageMemoryBarrier(VK_ACCESS_SHADER_WRITE_BIT, VK_ACCESS_TRANSFER_READ_BIT, VK_IMAGE_LAYOUT_GENERAL, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, storageImage.get(), subresourceRange);
+	vkd.cmdPipelineBarrier(cmdBuffer, writeStages, VK_PIPELINE_STAGE_TRANSFER_BIT, 0u, 0u, nullptr, 0u, nullptr, 1u, &postImageBarrier);
+
+	const auto copyRegion = makeBufferImageCopy(imageExtent, makeImageSubresourceLayers(VK_IMAGE_ASPECT_COLOR_BIT, 0u, 0u, 1u));
+	vkd.cmdCopyImageToBuffer(cmdBuffer, storageImage.get(), VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, transferBuffer.get(), 1u, &copyRegion);
+
+	const auto bufferBarrier = makeBufferMemoryBarrier(VK_ACCESS_TRANSFER_WRITE_BIT, VK_ACCESS_HOST_READ_BIT, transferBuffer.get(), 0ull, bufferSize);
+	vkd.cmdPipelineBarrier(cmdBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_HOST_BIT, 0u, 0u, nullptr, 1u, &bufferBarrier, 0u, nullptr);
+
+	endCommandBuffer(vkd, cmdBuffer);
+	submitCommandsAndWait(vkd, device, queue, cmdBuffer);
+
+	// Verify output colors match.
+	auto&		bufferAlloc		= transferBuffer.getAllocation();
+	const void*	bufferHostPtr	= bufferAlloc.getHostPtr();
+	invalidateAlloc(vkd, device, bufferAlloc);
+
+	const int iWidth	= static_cast<int>(imageExtent.width);
+	const int iHeight	= static_cast<int>(imageExtent.height);
+	const int iDepth	= static_cast<int>(imageExtent.depth);
+
+	tcu::ConstPixelBufferAccess outputAccess (tcuFormat, iWidth, iHeight, iDepth, bufferHostPtr);
+
+	for (int pixelIdx = 0; pixelIdx < DE_LENGTH_OF_ARRAY(m_params.pushConstantValues); ++pixelIdx)
+	{
+		const auto&			pc				= m_params.pushConstantValues[pixelIdx];
+		const tcu::UVec4	expectedValue	= pc.baseColor * pc.multiplier + tcu::UVec4(pc.colorOffsets[0], pc.colorOffsets[1], pc.colorOffsets[2], pc.colorOffsets[3]) + pc.transparentGreen;
+		const tcu::UVec4	outputValue		= outputAccess.getPixelUint(pc.coords.x(), pc.coords.y());
+
+		if (expectedValue != outputValue)
+		{
+			std::ostringstream msg;
+			msg << "Unexpected value in output image at coords " << pc.coords << ": found " << outputValue << " and expected " << expectedValue;
+			TCU_FAIL(msg.str());
+		}
+	}
+
+	return tcu::TestStatus::pass("Pass");
+}
+
+void addOverwriteCase (tcu::TestCaseGroup* group, tcu::TestContext& testCtx, VkPipelineBindPoint bindPoint)
+{
+	const OverwritePushConstants pushConstants[4] =
+	{
+	//	coords						baseColor					multiplier							colorOffsets				transparentGreen
+		{ tcu::IVec4(0, 0, 0, 0),	tcu::UVec4(1u, 0u, 0u, 0u),	tcu::UVec4( 2u,  2u,  2u,  2u),		{ 128u, 129u, 130u, 131u },	tcu::UVec4(0u, 1u, 0u, 0u) },
+		{ tcu::IVec4(0, 1, 0, 0),	tcu::UVec4(0u, 1u, 0u, 0u),	tcu::UVec4( 4u,  4u,  4u,  4u),		{ 132u, 133u, 134u, 135u },	tcu::UVec4(0u, 1u, 0u, 0u) },
+		{ tcu::IVec4(1, 0, 0, 0),	tcu::UVec4(0u, 0u, 1u, 0u),	tcu::UVec4( 8u,  8u,  8u,  8u),		{ 136u, 137u, 138u, 139u },	tcu::UVec4(0u, 1u, 0u, 0u) },
+		{ tcu::IVec4(1, 1, 0, 0),	tcu::UVec4(0u, 0u, 0u, 1u),	tcu::UVec4(16u, 16u, 16u, 16u),		{ 140u, 141u, 142u, 143u },	tcu::UVec4(0u, 1u, 0u, 0u) },
+	};
+
+	OverwriteTestParams testParams;
+
+	DE_ASSERT(DE_LENGTH_OF_ARRAY(pushConstants) == DE_LENGTH_OF_ARRAY(testParams.pushConstantValues));
+	for (int pixelIdx = 0; pixelIdx < DE_LENGTH_OF_ARRAY(pushConstants); ++pixelIdx)
+		testParams.pushConstantValues[pixelIdx] = pushConstants[pixelIdx];
+
+	testParams.bindPoint = bindPoint;
+
+	group->addChild(new OverwriteTestCase(testCtx, "overwrite", "Test push constant range overwrites", testParams));
+}
+
 } // anonymous
 
 tcu::TestCaseGroup* createPushConstantTests (tcu::TestContext& testCtx)
@@ -2944,10 +3282,12 @@
 	{
 		graphicsTests->addChild(new PushConstantGraphicsOverlapTest(testCtx, overlapGraphicsParams[ndx].name, overlapGraphicsParams[ndx].description, overlapGraphicsParams[ndx].count, overlapGraphicsParams[ndx].range));
 	}
+	addOverwriteCase(graphicsTests.get(), testCtx, VK_PIPELINE_BIND_POINT_GRAPHICS);
 	pushConstantTests->addChild(graphicsTests.release());
 
 	de::MovePtr<tcu::TestCaseGroup>	computeTests	(new tcu::TestCaseGroup(testCtx, "compute_pipeline", "compute pipeline"));
 	computeTests->addChild(new PushConstantComputeTest(testCtx, computeParams[0].name, computeParams[0].description, computeParams[0].range));
+	addOverwriteCase(computeTests.get(), testCtx, VK_PIPELINE_BIND_POINT_COMPUTE);
 	pushConstantTests->addChild(computeTests.release());
 
 	de::MovePtr<tcu::TestCaseGroup>	lifetimeTests	(new tcu::TestCaseGroup(testCtx, "lifetime", "lifetime tests"));
diff --git a/external/vulkancts/modules/vulkan/pipeline/vktPipelinePushDescriptorTests.cpp b/external/vulkancts/modules/vulkan/pipeline/vktPipelinePushDescriptorTests.cpp
index bfeb035..7cd1c08 100644
--- a/external/vulkancts/modules/vulkan/pipeline/vktPipelinePushDescriptorTests.cpp
+++ b/external/vulkancts/modules/vulkan/pipeline/vktPipelinePushDescriptorTests.cpp
@@ -76,10 +76,11 @@
 	deUint32			numCalls; // Number of draw or dispatch calls
 };
 
-VkDeviceSize calcItemSize (const InstanceInterface& vki, VkPhysicalDevice physicalDevice)
+VkDeviceSize calcItemSize (const InstanceInterface& vki, VkPhysicalDevice physicalDevice, deUint32 numElements = 1u)
 {
-	const auto minAlignment = getPhysicalDeviceProperties(vki, physicalDevice).limits.minStorageBufferOffsetAlignment;
-	return de::lcm(de::max(VkDeviceSize{1}, minAlignment), kSizeofVec4);
+	const auto minAlignment	= getPhysicalDeviceProperties(vki, physicalDevice).limits.minStorageBufferOffsetAlignment;
+	const auto lcm			= de::lcm(de::max(VkDeviceSize{1}, minAlignment), kSizeofVec4);
+	return de::roundUp(kSizeofVec4 * numElements, lcm);
 }
 
 void checkAllSupported (const Extensions& supportedExtensions, const vector<string>& requiredExtensions)
@@ -1897,6 +1898,8 @@
 	const Unique<VkDevice>		m_device;
 	const DeviceDriver			m_vkd;
 	const VkQueue				m_queue;
+	const VkDeviceSize			m_itemSize;
+	const VkDeviceSize			m_blockSize;
 	SimpleAllocator				m_allocator;
 	const tcu::UVec2			m_textureSize;
 	const VkFormat				m_colorFormat;
@@ -1929,6 +1932,8 @@
 	, m_device				(createDeviceWithPushDescriptor(context, m_vkp, m_instance, m_vki, m_physicalDevice, m_deviceExtensions, m_queueFamilyIndex))
 	, m_vkd					(m_vkp, m_instance, *m_device)
 	, m_queue				(getDeviceQueue(m_vkd, *m_device, m_queueFamilyIndex, 0u))
+	, m_itemSize			(calcItemSize(m_vki, m_physicalDevice, 2u))
+	, m_blockSize			(kSizeofVec4 * 2u)
 	, m_allocator			(m_vkd, *m_device, getPhysicalDeviceMemoryProperties(m_vki, m_physicalDevice))
 	, m_textureSize			(32, 32)
 	, m_colorFormat			(VK_FORMAT_R8G8B8A8_UNORM)
@@ -2232,12 +2237,14 @@
 
 	// Create output buffer
 	{
+		DE_ASSERT(m_params.numCalls <= 2u);
+
 		const VkBufferCreateInfo bufferCreateInfo =
 		{
 			VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO,	// VkStructureType		sType;
 			DE_NULL,								// const void*			pNext;
 			0u,										// VkBufferCreateFlags	flags
-			64u,									// VkDeviceSize			size;
+			m_itemSize * 2u,						// VkDeviceSize			size;
 			VK_BUFFER_USAGE_STORAGE_BUFFER_BIT,		// VkBufferUsageFlags	usage;
 			VK_SHARING_MODE_EXCLUSIVE,				// VkSharingMode		sharingMode;
 			1u,										// deUint32				queueFamilyCount;
@@ -2362,9 +2369,9 @@
 
 			const VkDescriptorBufferInfo descriptorBufferInfoOutput	=
 			{
-				*m_outputBuffer,	// VkBuffer		buffer;
-				32u * dispatchNdx,	// VkDeviceSize	offset;
-				32u					// VkDeviceSize	range;
+				*m_outputBuffer,			// VkBuffer		buffer;
+				m_itemSize * dispatchNdx,	// VkDeviceSize	offset;
+				m_blockSize,				// VkDeviceSize	range;
 			};
 
 			// Write output buffer descriptor set
@@ -2407,7 +2414,9 @@
 
 tcu::TestStatus PushDescriptorImageComputeTestInstance::verifyOutput (void)
 {
-	float ref[16];
+	const auto			floatsPerDispatch	= 8u; // 8 floats (2 vec4s) per dispatch.
+	std::vector<float>	ref					(floatsPerDispatch * 2u);
+
 	invalidateAlloc(m_vkd, *m_device, *m_outputBufferAlloc);
 
 	switch(m_params.descriptorType)
@@ -2504,17 +2513,36 @@
 	};
 
 	// Verify result
-	if (deMemCmp((void*)ref, m_outputBufferAlloc->getHostPtr(), (size_t)(32u * m_params.numCalls)))
+	const auto			bufferDataPtr		= reinterpret_cast<const char*>(m_outputBufferAlloc->getHostPtr());
+	const auto			blockSize			= static_cast<size_t>(m_blockSize);
+
+	for (deUint32 dispatchNdx = 0u; dispatchNdx < m_params.numCalls; ++dispatchNdx)
 	{
-		const float* ptr = (float*)m_outputBufferAlloc->getHostPtr();
-		std::string debugMsg = "Output buffer contents:\n";
+		const auto refIdx		= floatsPerDispatch * dispatchNdx;
+		const auto bufferOffset	= m_itemSize * dispatchNdx;	// Each dispatch uses m_itemSize bytes in the buffer to meet alignment reqs.
 
-		for (deUint32 i = 0; i < m_params.numCalls * 8; i++)
-			debugMsg += de::toString(ptr[i]) + " vs " + de::toString(ref[i]) + "\n";
+		if (deMemCmp(&ref[refIdx], bufferDataPtr + bufferOffset, blockSize) != 0)
+		{
+			std::vector<float> buffferValues	(floatsPerDispatch);
+			std::vector<float> refValues		(floatsPerDispatch);
 
-		m_context.getTestContext().getLog() << tcu::TestLog::Message << debugMsg << tcu::TestLog::EndMessage;
-		return tcu::TestStatus::fail("Output mismatch");
+			deMemcpy(refValues.data(), &ref[refIdx], blockSize);
+			deMemcpy(buffferValues.data(), bufferDataPtr + bufferOffset, blockSize);
+
+			std::ostringstream msg;
+			msg << "Output mismatch at dispatch " << dispatchNdx << ": Reference ";
+			for (deUint32 i = 0; i < floatsPerDispatch; ++i)
+				msg << ((i == 0) ? "[" : ", ") << refValues[i];
+			msg << "]; Buffer ";
+			for (deUint32 i = 0; i < floatsPerDispatch; ++i)
+				msg << ((i == 0) ? "[" : ", ") << buffferValues[i];
+			msg << "]";
+
+			m_context.getTestContext().getLog() << tcu::TestLog::Message << msg.str() << tcu::TestLog::EndMessage;
+			return tcu::TestStatus::fail("Output mismatch");
+		}
 	}
+
 	return tcu::TestStatus::pass("Output matches expected values");
 }
 
diff --git a/external/vulkancts/modules/vulkan/pipeline/vktPipelineRenderToImageTests.cpp b/external/vulkancts/modules/vulkan/pipeline/vktPipelineRenderToImageTests.cpp
index c858f98..a13b8df 100644
--- a/external/vulkancts/modules/vulkan/pipeline/vktPipelineRenderToImageTests.cpp
+++ b/external/vulkancts/modules/vulkan/pipeline/vktPipelineRenderToImageTests.cpp
@@ -1219,7 +1219,15 @@
 void checkImageViewTypeRequirements (Context& context, const VkImageViewType viewType)
 {
 	if (viewType == VK_IMAGE_VIEW_TYPE_3D)
+	{
+		if (context.isDeviceFunctionalitySupported("VK_KHR_portability_subset") &&
+		   !context.getPortabilitySubsetFeatures().imageView2DOn3DImage)
+		{
+			TCU_THROW(NotSupportedError, "VK_KHR_portability_subset: Implementation does not support 2D or 2D array image view to be created on a 3D VkImage");
+		}
+
 		context.requireDeviceFunctionality("VK_KHR_maintenance1");
+	}
 
 	if (viewType == VK_IMAGE_VIEW_TYPE_CUBE_ARRAY)
 		context.requireDeviceCoreFeature(DEVICE_CORE_FEATURE_IMAGE_CUBE_ARRAY);
diff --git a/external/vulkancts/modules/vulkan/pipeline/vktPipelineSamplerTests.cpp b/external/vulkancts/modules/vulkan/pipeline/vktPipelineSamplerTests.cpp
index b0abe75..34a4440 100644
--- a/external/vulkancts/modules/vulkan/pipeline/vktPipelineSamplerTests.cpp
+++ b/external/vulkancts/modules/vulkan/pipeline/vktPipelineSamplerTests.cpp
@@ -223,6 +223,7 @@
 															 bool					separateStencilUsage);
 	virtual							~SamplerLodTest			(void) {}
 	virtual VkSamplerCreateInfo		getSamplerCreateInfo	(void) const;
+	virtual void					checkSupport			(Context& context) const;
 
 private:
 	VkSamplerMipmapMode				m_mipmapMode;
@@ -231,6 +232,17 @@
 	float							m_mipLodBias;
 };
 
+void SamplerLodTest::checkSupport (Context& context) const
+{
+	SamplerTest::checkSupport(context);
+
+	if (m_mipLodBias != 0.0f && context.isDeviceFunctionalitySupported("VK_KHR_portability_subset") &&
+		!context.getPortabilitySubsetFeatures().samplerMipLodBias)
+	{
+		TCU_THROW(NotSupportedError, "VK_KHR_portability_subset: Sampler mipmap LOD bias is not supported by this implementation");
+	}
+}
+
 class SamplerAddressModesTest : public SamplerTest
 {
 public:
@@ -1366,8 +1378,6 @@
 
 tcu::TestStatus ExactSamplingInstance::iterate (void)
 {
-	const auto& vki			= m_context.getInstanceInterface();
-	const auto	physDevice	= m_context.getPhysicalDevice();
 	const auto&	vkd			= m_context.getDeviceInterface();
 	const auto	device		= m_context.getDevice();
 	auto&		allocator	= m_context.getDefaultAllocator();
@@ -1532,12 +1542,8 @@
 	const auto descriptorSet = vk::makeDescriptorSet(vkd, device, descriptorPool.get(), descriptorSetLayout.get());
 
 	// Texture sampler. When using a solid color, test linear filtering. Linear filtering may incur in a small precission loss, but
-	// it should be minimal and we should get the same color when converting back to the original format. Anisotropy should be
-	// irrelevant too, so it is enabled and set to the maximum level if available.
+	// it should be minimal and we should get the same color when converting back to the original format.
 	const auto	minMagFilter			= (m_params.solidColor ? vk::VK_FILTER_LINEAR : vk::VK_FILTER_NEAREST);
-	const bool	anisotropySupported		= (vk::getPhysicalDeviceFeatures(vki, physDevice).samplerAnisotropy == VK_TRUE);
-	const bool	anisotropyEnable		= (!unnorm && m_params.solidColor && anisotropySupported);
-	const float	maxAnisotropy			= (anisotropyEnable ? vk::getPhysicalDeviceProperties(vki, physDevice).limits.maxSamplerAnisotropy : 1.0f);
 	const auto	addressMode				= (unnorm ? vk::VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE : vk::VK_SAMPLER_ADDRESS_MODE_REPEAT);
 	const auto	unnormalizedCoordinates	= (unnorm ? VK_TRUE : VK_FALSE);
 
@@ -1553,8 +1559,8 @@
 		addressMode,									// VkSamplerAddressMode	addressModeV;
 		addressMode,									// VkSamplerAddressMode	addressModeW;
 		0.0f,											// float				mipLodBias;
-		(anisotropyEnable ? VK_TRUE : VK_FALSE),		// VkBool32				anisotropyEnable;
-		maxAnisotropy,									// float				maxAnisotropy;
+		VK_FALSE,										// VkBool32				anisotropyEnable;
+		1.0f,											// float				maxAnisotropy;
 		VK_FALSE,										// VkBool32				compareEnable;
 		vk::VK_COMPARE_OP_NEVER,						// VkCompareOp			compareOp;
 		0.0f,											// float				minLod;
diff --git a/external/vulkancts/modules/vulkan/pipeline/vktPipelineStencilTests.cpp b/external/vulkancts/modules/vulkan/pipeline/vktPipelineStencilTests.cpp
index 6837dbb..1937f31 100644
--- a/external/vulkancts/modules/vulkan/pipeline/vktPipelineStencilTests.cpp
+++ b/external/vulkancts/modules/vulkan/pipeline/vktPipelineStencilTests.cpp
@@ -291,6 +291,9 @@
 
 	if (m_separateDepthStencilLayouts && !context.isDeviceFunctionalitySupported("VK_KHR_separate_depth_stencil_layouts"))
 		TCU_THROW(NotSupportedError, "VK_KHR_separate_depth_stencil_layouts is not supported");
+
+	if (context.isDeviceFunctionalitySupported("VK_KHR_portability_subset") && !context.getPortabilitySubsetFeatures().separateStencilMaskRef)
+		TCU_THROW(NotSupportedError, "VK_KHR_portability_subset: Separate stencil mask references are not supported by this implementation");
 }
 
 TestInstance* StencilTest::createInstance (Context& context) const
diff --git a/external/vulkancts/modules/vulkan/pipeline/vktPipelineTests.cpp b/external/vulkancts/modules/vulkan/pipeline/vktPipelineTests.cpp
index e00f23f..17ef252 100644
--- a/external/vulkancts/modules/vulkan/pipeline/vktPipelineTests.cpp
+++ b/external/vulkancts/modules/vulkan/pipeline/vktPipelineTests.cpp
@@ -28,6 +28,7 @@
 #include "vktPipelineDepthTests.hpp"
 #include "vktPipelineDynamicOffsetTests.hpp"
 #include "vktPipelineEarlyDestroyTests.hpp"
+#include "vktPipelineLogicOpTests.hpp"
 #include "vktPipelineImageTests.hpp"
 #include "vktPipelineInputAssemblyTests.hpp"
 #include "vktPipelineSamplerTests.hpp"
@@ -49,10 +50,14 @@
 #include "vktPipelineCreationFeedbackTests.hpp"
 #include "vktPipelineDepthRangeUnrestrictedTests.hpp"
 #include "vktPipelineExecutablePropertiesTests.hpp"
-#include "vktPipelineVertexOnlyTests.hpp"
+#include "vktPipelineMiscTests.hpp"
 #include "vktPipelineMaxVaryingsTests.hpp"
 #include "vktPipelineBlendOperationAdvancedTests.hpp"
 #include "vktPipelineExtendedDynamicStateTests.hpp"
+#include "vktPipelineCreationCacheControlTests.hpp"
+#include "vktPipelineNoPositionTests.hpp"
+#include "vktPipelineBindPointTests.hpp"
+#include "vktPipelineColorWriteEnableTests.hpp"
 #include "vktTestGroupUtil.hpp"
 
 namespace vkt
@@ -75,6 +80,7 @@
 	pipelineTests->addChild(createImageTests					(testCtx));
 	pipelineTests->addChild(createSamplerTests					(testCtx));
 	pipelineTests->addChild(createImageViewTests				(testCtx));
+	pipelineTests->addChild(createLogicOpTests					(testCtx));
 	pipelineTests->addChild(createPushConstantTests				(testCtx));
 	pipelineTests->addChild(createPushDescriptorTests			(testCtx));
 	pipelineTests->addChild(createSpecConstantTests				(testCtx));
@@ -93,10 +99,14 @@
 	pipelineTests->addChild(createCreationFeedbackTests			(testCtx));
 	pipelineTests->addChild(createDepthRangeUnrestrictedTests	(testCtx));
 	pipelineTests->addChild(createExecutablePropertiesTests		(testCtx));
-	pipelineTests->addChild(createVertexOnlyTests				(testCtx));
+	pipelineTests->addChild(createMiscTests						(testCtx));
 	pipelineTests->addChild(createMaxVaryingsTests				(testCtx));
 	pipelineTests->addChild(createBlendOperationAdvancedTests	(testCtx));
 	pipelineTests->addChild(createExtendedDynamicStateTests		(testCtx));
+	pipelineTests->addChild(createCacheControlTests				(testCtx));
+	pipelineTests->addChild(createNoPositionTests				(testCtx));
+	pipelineTests->addChild(createBindPointTests				(testCtx));
+	pipelineTests->addChild(createColorWriteEnableTests			(testCtx));
 }
 
 } // anonymous
diff --git a/external/vulkancts/modules/vulkan/pipeline/vktPipelineTimestampTests.cpp b/external/vulkancts/modules/vulkan/pipeline/vktPipelineTimestampTests.cpp
index c49094d..a8699ad 100644
--- a/external/vulkancts/modules/vulkan/pipeline/vktPipelineTimestampTests.cpp
+++ b/external/vulkancts/modules/vulkan/pipeline/vktPipelineTimestampTests.cpp
@@ -2407,6 +2407,16 @@
 	vk.cmdClearColorImage(*m_cmdBuffer, *m_srcImage, VK_IMAGE_LAYOUT_GENERAL, &srcClearValue, 1u, &subRangeColor);
 	vk.cmdClearColorImage(*m_cmdBuffer, *m_dstImage, VK_IMAGE_LAYOUT_GENERAL, &dstClearValue, 1u, &subRangeColor);
 
+	// synchronize the Clear commands before starting any copy
+	const vk::VkMemoryBarrier barrier =
+	{
+		vk::VK_STRUCTURE_TYPE_MEMORY_BARRIER,							// VkStructureType	sType;
+		DE_NULL,														// const void*		pNext;
+		vk::VK_ACCESS_TRANSFER_WRITE_BIT,								// VkAccessFlags	srcAccessMask;
+		vk::VK_ACCESS_TRANSFER_READ_BIT | VK_ACCESS_TRANSFER_WRITE_BIT, // VkAccessFlags	dstAccessMask;
+	};
+	vk.cmdPipelineBarrier(*m_cmdBuffer, vk::VK_PIPELINE_STAGE_TRANSFER_BIT, vk::VK_PIPELINE_STAGE_TRANSFER_BIT, 0u, 1u, &barrier, 0u, DE_NULL, 0u, DE_NULL);
+
 	if (!m_hostQueryReset)
 		vk.cmdResetQueryPool(*m_cmdBuffer, *m_queryPool, 0u, TimestampTest::ENTRY_COUNT);
 
@@ -2427,21 +2437,6 @@
 	{
 		case TRANSFER_METHOD_COPY_BUFFER:
 			{
-				const vk::VkBufferMemoryBarrier bufferBarrier =
-					{
-						vk::VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER,	// VkStructureType	sType;
-						DE_NULL,										// const void*		pNext;
-						vk::VK_ACCESS_TRANSFER_WRITE_BIT,				// VkAccessFlags	srcAccessMask;
-						vk::VK_ACCESS_TRANSFER_WRITE_BIT,				// VkAccessFlags	dstAccessMask;
-						VK_QUEUE_FAMILY_IGNORED,						// deUint32			srcQueueFamilyIndex;
-						VK_QUEUE_FAMILY_IGNORED,						// deUint32			dstQueueFamilyIndex;
-						*m_dstBuffer,									// VkBuffer			buffer;
-						0ull,											// VkDeviceSize		offset;
-						VK_WHOLE_SIZE									// VkDeviceSize		size;
-					};
-
-				vk.cmdPipelineBarrier(*m_cmdBuffer, vk::VK_PIPELINE_STAGE_TRANSFER_BIT, vk::VK_PIPELINE_STAGE_TRANSFER_BIT, 0u, 0u, DE_NULL, 1u, &bufferBarrier, 0u, DE_NULL);
-
 				const VkBufferCopy  copyBufRegion =
 					{
 						0u,			// VkDeviceSize    srcOffset;
@@ -2586,6 +2581,7 @@
 
 				initialImageTransition(*m_cmdBuffer, *m_msImage, subRangeColor, VK_IMAGE_LAYOUT_GENERAL);
 				vk.cmdClearColorImage(*m_cmdBuffer, *m_msImage, VK_IMAGE_LAYOUT_GENERAL, &srcClearValue, 1u, &subRangeColor);
+				vk.cmdPipelineBarrier(*m_cmdBuffer, vk::VK_PIPELINE_STAGE_TRANSFER_BIT, vk::VK_PIPELINE_STAGE_TRANSFER_BIT, 0u, 1u, &barrier, 0u, DE_NULL, 0u, DE_NULL);
 				vk.cmdResolveImage(*m_cmdBuffer, *m_msImage, VK_IMAGE_LAYOUT_GENERAL, *m_dstImage, VK_IMAGE_LAYOUT_GENERAL, 1u, &imageResolve);
 				break;
 			}
diff --git a/external/vulkancts/modules/vulkan/pipeline/vktPipelineVertexOnlyTests.cpp b/external/vulkancts/modules/vulkan/pipeline/vktPipelineVertexOnlyTests.cpp
deleted file mode 100644
index 295d2f7..0000000
--- a/external/vulkancts/modules/vulkan/pipeline/vktPipelineVertexOnlyTests.cpp
+++ /dev/null
@@ -1,72 +0,0 @@
-/*------------------------------------------------------------------------
- * Vulkan Conformance Tests
- * ------------------------
- *
- * Copyright (c) 2019 Google LLC
- * Copyright (c) 2019 The Khronos Group Inc.
- *
- * 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 Tests using only vertex shader in a graphics pipeline
- *//*--------------------------------------------------------------------*/
-
-#include <string>
-
-#include "vktTestGroupUtil.hpp"
-#include "vktAmberTestCase.hpp"
-#include "vktPipelineVertexOnlyTests.hpp"
-
-namespace vkt
-{
-namespace pipeline
-{
-namespace
-{
-
-void addTests (tcu::TestCaseGroup* tests, const char* data_dir)
-{
-	tcu::TestContext& testCtx = tests->getTestContext();
-
-	// Shader test files are saved in <path>/external/vulkancts/data/vulkan/amber/<data_dir>/<basename>.amber
-	struct Case {
-		const char* basename;
-		const char* description;
-	};
-	const Case cases[] =
-	{
-		{ "position_to_ssbo", "Write position data into ssbo" }
-	};
-
-	for (unsigned i = 0; i < DE_LENGTH_OF_ARRAY(cases) ; ++i)
-	{
-		std::string					file			= std::string(cases[i].basename) + ".amber";
-		std::vector<std::string>	requirements	= std::vector<std::string>(1, "Features.vertexPipelineStoresAndAtomics");
-		cts_amber::AmberTestCase	*testCase		= cts_amber::createAmberTestCase(testCtx, cases[i].basename, cases[i].description, data_dir, file, requirements);
-
-		tests->addChild(testCase);
-	}
-}
-
-} // anonymous
-
-tcu::TestCaseGroup* createVertexOnlyTests (tcu::TestContext& testCtx)
-{
-	// Location of the Amber script files under the data/vulkan/amber source tree.
-	const char* data_dir = "pipeline/vertex_only";
-	return createTestGroup(testCtx, "vertex_only", "Tests using only vertex shader in a pipeline", addTests, data_dir);
-}
-
-} // SpirVAssembly
-} // vkt
diff --git a/external/vulkancts/modules/vulkan/protected_memory/vktProtectedMemYCbCrConversionTests.cpp b/external/vulkancts/modules/vulkan/protected_memory/vktProtectedMemYCbCrConversionTests.cpp
index 6540509..505a184 100644
--- a/external/vulkancts/modules/vulkan/protected_memory/vktProtectedMemYCbCrConversionTests.cpp
+++ b/external/vulkancts/modules/vulkan/protected_memory/vktProtectedMemYCbCrConversionTests.cpp
@@ -1421,6 +1421,12 @@
 		vk::VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16,
 		vk::VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM,
 		vk::VK_FORMAT_G16_B16R16_2PLANE_420_UNORM,
+
+		// Extended YCbCr formats
+		vk::VK_FORMAT_G8_B8R8_2PLANE_444_UNORM_EXT,
+		vk::VK_FORMAT_G10X6_B10X6R10X6_2PLANE_444_UNORM_3PACK16_EXT,
+		vk::VK_FORMAT_G12X4_B12X4R12X4_2PLANE_444_UNORM_3PACK16_EXT,
+		vk::VK_FORMAT_G16_B16R16_2PLANE_444_UNORM_EXT,
 	};
 
 	for (size_t formatNdx = 0; formatNdx < DE_LENGTH_OF_ARRAY(testFormats); formatNdx++)
diff --git a/external/vulkancts/modules/vulkan/query_pool/vktQueryPoolStatisticsTests.cpp b/external/vulkancts/modules/vulkan/query_pool/vktQueryPoolStatisticsTests.cpp
index 258f7d2..2e80f51 100644
--- a/external/vulkancts/modules/vulkan/query_pool/vktQueryPoolStatisticsTests.cpp
+++ b/external/vulkancts/modules/vulkan/query_pool/vktQueryPoolStatisticsTests.cpp
@@ -2603,6 +2603,16 @@
 		m_data.push_back(GraphicBasicTestInstance::VertexData(tcu::Vec4( 1.0f, 1.0f, 1.0f, 1.0f), tcu::RGBA::gray().toVec()));
 	}
 
+	void checkSupport (vkt::Context& context) const
+	{
+		if (m_parametersGraphic.primitiveTopology == VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN &&
+			context.isDeviceFunctionalitySupported("VK_KHR_portability_subset") &&
+			!context.getPortabilitySubsetFeatures().triangleFans)
+		{
+			TCU_THROW(NotSupportedError, "VK_KHR_portability_subset: Triangle fans are not supported by this implementation");
+		}
+	}
+
 	vkt::TestInstance* createInstance (vkt::Context& context) const
 	{
 		return new Instance(context, m_data, m_parametersGraphic, m_drawRepeats);
diff --git a/external/vulkancts/modules/vulkan/rasterization/vktRasterizationFragShaderSideEffectsTests.cpp b/external/vulkancts/modules/vulkan/rasterization/vktRasterizationFragShaderSideEffectsTests.cpp
index 9c9d4f1..c9332d4 100644
--- a/external/vulkancts/modules/vulkan/rasterization/vktRasterizationFragShaderSideEffectsTests.cpp
+++ b/external/vulkancts/modules/vulkan/rasterization/vktRasterizationFragShaderSideEffectsTests.cpp
@@ -59,6 +59,7 @@
 {
 	KILL,
 	DEMOTE,
+	TERMINATE_INVOCATION,
 	SAMPLE_MASK_BEFORE,
 	SAMPLE_MASK_AFTER,
 	ALPHA_COVERAGE_BEFORE,
@@ -72,7 +73,6 @@
 constexpr deUint32 kFramebufferHeight	= 32u;
 constexpr deUint32 kTotalPixels			= kFramebufferWidth * kFramebufferHeight;
 
-constexpr vk::VkFormatFeatureFlags	kNeededColorFeatures	= (vk::VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | vk::VK_FORMAT_FEATURE_TRANSFER_SRC_BIT);
 constexpr vk::VkFormat				kColorFormat			= vk::VK_FORMAT_R8G8B8A8_UNORM;
 constexpr vk::VkFormatFeatureFlags	kNeededDSFeatures		= vk::VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT;
 // VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT must be supported for one of these two, according to the spec.
@@ -153,12 +153,13 @@
 
 void FragSideEffectsTestCase::checkSupport (Context& context) const
 {
-	const auto&	vki				= context.getInstanceInterface();
-	const auto	physicalDevice	= context.getPhysicalDevice();
+	const auto& features = context.getDeviceFeatures();
+
+	if (!features.fragmentStoresAndAtomics)
+		TCU_THROW(NotSupportedError, "Fragment shader stores and atomics not supported");
 
 	if (m_params.caseType == CaseType::DEPTH_BOUNDS)
 	{
-		const auto features = vk::getPhysicalDeviceFeatures(vki, physicalDevice);
 		if (!features.depthBounds)
 			TCU_THROW(NotSupportedError, "Depth bounds test not supported");
 	}
@@ -166,10 +167,10 @@
 	{
 		context.requireDeviceFunctionality("VK_EXT_shader_demote_to_helper_invocation");
 	}
-
-	const auto colorFormatProperties = vk::getPhysicalDeviceFormatProperties(vki, physicalDevice, kColorFormat);
-	if ((colorFormatProperties.optimalTilingFeatures & kNeededColorFeatures) != kNeededColorFeatures)
-		TCU_THROW(NotSupportedError, "Color format lacks required features");
+	else if (m_params.caseType == CaseType::TERMINATE_INVOCATION)
+	{
+		context.requireDeviceFunctionality("VK_KHR_shader_terminate_invocation");
+	}
 }
 
 void FragSideEffectsTestCase::initPrograms (vk::SourceCollections& programCollection) const
@@ -219,6 +220,10 @@
 		headers	<< "#extension GL_EXT_demote_to_helper_invocation : enable\n";
 		after	<< "    demote;\n";
 		break;
+	case CaseType::TERMINATE_INVOCATION:
+		headers	<< "#extension GL_EXT_terminate_invocation : enable\n";
+		after	<< "    terminateInvocation;\n";
+		break;
 	case CaseType::SAMPLE_MASK_BEFORE:
 		before	<< "    gl_SampleMask[0] = 0;\n";
 		break;
@@ -697,6 +702,10 @@
 			colorOrderGroup->addChild(new FragSideEffectsTestCase(testCtx, "demote", "OpDemoteToHelperInvocation after SSBO write", params));
 		}
 		{
+			TestParams params(CaseType::TERMINATE_INVOCATION, kDefaultClearColor, kDefaultDrawColor, colorAtEnd, kDefaultDepthBoundsParams);
+			colorOrderGroup->addChild(new FragSideEffectsTestCase(testCtx, "terminate_invocation", "OpTerminateInvocation after SSBO write", params));
+		}
+		{
 			TestParams params(CaseType::SAMPLE_MASK_BEFORE, kDefaultClearColor, kDefaultDrawColor, colorAtEnd, kDefaultDepthBoundsParams);
 			colorOrderGroup->addChild(new FragSideEffectsTestCase(testCtx, "sample_mask_before", "Set sample mask to zero before SSBO write", params));
 		}
diff --git a/external/vulkancts/modules/vulkan/rasterization/vktRasterizationTests.cpp b/external/vulkancts/modules/vulkan/rasterization/vktRasterizationTests.cpp
index 80fc096..6eb39d7 100644
--- a/external/vulkancts/modules/vulkan/rasterization/vktRasterizationTests.cpp
+++ b/external/vulkancts/modules/vulkan/rasterization/vktRasterizationTests.cpp
@@ -34,6 +34,7 @@
 #include "tcuStringTemplate.hpp"
 #include "tcuTextureUtil.hpp"
 #include "tcuResultCollector.hpp"
+#include "tcuFloatFormat.hpp"
 #include "vkImageUtil.hpp"
 #include "deStringUtil.hpp"
 #include "deRandom.hpp"
@@ -90,6 +91,7 @@
 													"{\n"
 													"	fragColor = v_color;\n"
 													"}\n";
+
 enum InterpolationCaseFlags
 {
 	INTERPOLATIONFLAGS_NONE = 0,
@@ -132,6 +134,7 @@
 	PRIMITIVESTRICTNESS_LAST
 };
 
+
 class BaseRenderingTestCase : public TestCase
 {
 public:
@@ -176,7 +179,7 @@
 
 protected:
 	void											addImageTransitionBarrier		(VkCommandBuffer commandBuffer, VkImage image, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, VkAccessFlags srcAccessMask, VkAccessFlags dstAccessMask, VkImageLayout oldLayout, VkImageLayout newLayout) const;
-	void											drawPrimitives					(tcu::Surface& result, const std::vector<tcu::Vec4>& vertexData, VkPrimitiveTopology primitiveTopology);
+	virtual void									drawPrimitives					(tcu::Surface& result, const std::vector<tcu::Vec4>& vertexData, VkPrimitiveTopology primitiveTopology);
 	void											drawPrimitives					(tcu::Surface& result, const std::vector<tcu::Vec4>& vertexData, const std::vector<tcu::Vec4>& coloDrata, VkPrimitiveTopology primitiveTopology);
 	void											drawPrimitives					(tcu::Surface& result, const std::vector<tcu::Vec4>& positionData, const std::vector<tcu::Vec4>& colorData, VkPrimitiveTopology primitiveTopology,
 																						VkImage image, VkImage resolvedImage, VkFramebuffer frameBuffer, const deUint32 renderSize, VkBuffer resultBuffer, const Allocation& resultBufferMemory);
@@ -188,7 +191,10 @@
 	const VkPipelineRasterizationStateCreateInfo*	getRasterizationStateCreateInfo	(void) const;
 
 	virtual
-	VkPipelineRasterizationLineStateCreateInfoEXT*	getLineRasterizationStateCreateInfo	(void);
+	VkPipelineRasterizationLineStateCreateInfoEXT	initLineRasterizationStateCreateInfo	(void) const;
+
+	virtual
+	const VkPipelineRasterizationLineStateCreateInfoEXT*	getLineRasterizationStateCreateInfo	(void) const;
 
 	virtual
 	const VkPipelineColorBlendStateCreateInfo*		getColorBlendStateCreateInfo	(void) const;
@@ -236,6 +242,9 @@
 	const VkDeviceSize								m_additionalResultBufferSize;
 
 	VkPipelineRasterizationLineStateCreateInfoEXT	m_lineRasterizationStateInfo;
+
+private:
+	virtual int										getIteration					(void) const { TCU_THROW(InternalError, "Iteration undefined in the base class"); }
 };
 
 BaseRenderingTestInstance::BaseRenderingTestInstance (Context& context, VkSampleCountFlagBits sampleCount, deUint32 renderSize, VkFormat imageFormat, deUint32 additionalRenderSize)
@@ -250,6 +259,7 @@
 	, m_resultBufferSize	(renderSize * renderSize * m_textureFormat.getPixelSize())
 	, m_additionalRenderSize(additionalRenderSize)
 	, m_additionalResultBufferSize(additionalRenderSize * additionalRenderSize * m_textureFormat.getPixelSize())
+	, m_lineRasterizationStateInfo	(initLineRasterizationStateCreateInfo())
 {
 	const DeviceInterface&						vkd						= m_context.getDeviceInterface();
 	const VkDevice								vkDevice				= m_context.getDevice();
@@ -729,7 +739,10 @@
 
 		VkPipelineRasterizationStateCreateInfo rasterizationStateInfo = *getRasterizationStateCreateInfo();
 
-		rasterizationStateInfo.pNext = getLineRasterizationStateCreateInfo();
+		const VkPipelineRasterizationLineStateCreateInfoEXT* lineRasterizationStateInfo = getLineRasterizationStateCreateInfo();
+
+		if (lineRasterizationStateInfo != DE_NULL)
+			appendStructurePtrToVulkanChain(&rasterizationStateInfo.pNext, lineRasterizationStateInfo);
 
 		VkPipelineDynamicStateCreateInfo			dynamicStateCreateInfo =
 		{
@@ -883,9 +896,9 @@
 	return &rasterizationStateCreateInfo;
 }
 
-VkPipelineRasterizationLineStateCreateInfoEXT* BaseRenderingTestInstance::getLineRasterizationStateCreateInfo (void)
+VkPipelineRasterizationLineStateCreateInfoEXT BaseRenderingTestInstance::initLineRasterizationStateCreateInfo (void) const
 {
-	m_lineRasterizationStateInfo =
+	VkPipelineRasterizationLineStateCreateInfoEXT lineRasterizationStateInfo =
 	{
 		VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO_EXT,	// VkStructureType				sType;
 		DE_NULL,																// const void*					pNext;
@@ -895,6 +908,11 @@
 		0xFFFF,																	// uint16_t						lineStipplePattern;
 	};
 
+	return lineRasterizationStateInfo;
+}
+
+const VkPipelineRasterizationLineStateCreateInfoEXT* BaseRenderingTestInstance::getLineRasterizationStateCreateInfo (void) const
+{
 	return &m_lineRasterizationStateInfo;
 }
 
@@ -938,11 +956,18 @@
 class BaseTriangleTestInstance : public BaseRenderingTestInstance
 {
 public:
-							BaseTriangleTestInstance	(Context& context, VkPrimitiveTopology primitiveTopology, VkSampleCountFlagBits sampleCount);
+							BaseTriangleTestInstance	(Context& context, VkPrimitiveTopology primitiveTopology, VkSampleCountFlagBits sampleCount, deUint32 renderSize = RESOLUTION_POT);
 	virtual tcu::TestStatus	iterate						(void);
 
+protected:
+	int						getIteration				(void) const	{ return m_iteration;		}
+	int						getIterationCount			(void) const	{ return m_iterationCount;	}
+
 private:
 	virtual void			generateTriangles			(int iteration, std::vector<tcu::Vec4>& outData, std::vector<TriangleSceneSpec::SceneTriangle>& outTriangles) = DE_NULL;
+	virtual bool			compareAndVerify			(std::vector<TriangleSceneSpec::SceneTriangle>&	triangles,
+														 tcu::Surface&									resultImage,
+														 std::vector<tcu::Vec4>&						drawBuffer);
 
 	int						m_iteration;
 	const int				m_iterationCount;
@@ -950,8 +975,8 @@
 	bool					m_allIterationsPassed;
 };
 
-BaseTriangleTestInstance::BaseTriangleTestInstance (Context& context, VkPrimitiveTopology primitiveTopology, VkSampleCountFlagBits sampleCount)
-	: BaseRenderingTestInstance		(context, sampleCount)
+BaseTriangleTestInstance::BaseTriangleTestInstance (Context& context, VkPrimitiveTopology primitiveTopology, VkSampleCountFlagBits sampleCount, deUint32 renderSize)
+	: BaseRenderingTestInstance		(context, sampleCount, renderSize)
 	, m_iteration					(0)
 	, m_iterationCount				(3)
 	, m_primitiveTopology			(primitiveTopology)
@@ -974,21 +999,7 @@
 
 	// compare
 	{
-		bool					compareOk;
-		RasterizationArguments	args;
-		TriangleSceneSpec		scene;
-
-		tcu::IVec4				colorBits = tcu::getTextureFormatBitDepth(getTextureFormat());
-
-		args.numSamples		= m_multisampling ? 1 : 0;
-		args.subpixelBits	= m_subpixelBits;
-		args.redBits		= colorBits[0];
-		args.greenBits		= colorBits[1];
-		args.blueBits		= colorBits[2];
-
-		scene.triangles.swap(triangles);
-
-		compareOk = verifyTriangleGroupRasterization(resultImage, scene, args, m_context.getTestContext().getLog());
+		const bool compareOk = compareAndVerify(triangles, resultImage, drawBuffer);
 
 		if (!compareOk)
 			m_allIterationsPassed = false;
@@ -1006,6 +1017,24 @@
 		return tcu::TestStatus::incomplete();
 }
 
+bool BaseTriangleTestInstance::compareAndVerify (std::vector<TriangleSceneSpec::SceneTriangle>& triangles, tcu::Surface& resultImage, std::vector<tcu::Vec4>&)
+{
+	RasterizationArguments	args;
+	TriangleSceneSpec		scene;
+
+	tcu::IVec4				colorBits = tcu::getTextureFormatBitDepth(getTextureFormat());
+
+	args.numSamples		= m_multisampling ? 1 : 0;
+	args.subpixelBits	= m_subpixelBits;
+	args.redBits		= colorBits[0];
+	args.greenBits		= colorBits[1];
+	args.blueBits		= colorBits[2];
+
+	scene.triangles.swap(triangles);
+
+	return verifyTriangleGroupRasterization(resultImage, scene, args, m_context.getTestContext().getLog());
+}
+
 class BaseLineTestInstance : public BaseRenderingTestInstance
 {
 public:
@@ -1016,17 +1045,29 @@
 														 VkSampleCountFlagBits		sampleCount,
 														 LineStipple				stipple,
 														 VkLineRasterizationModeEXT	lineRasterizationMode,
-														 const deUint32				additionalRenderSize = 0);
+														 const deUint32				additionalRenderSize = 0,
+														 const deUint32				renderSize = RESOLUTION_POT,
+														 const float				narrowLineWidth = 1.0f);
 	virtual tcu::TestStatus		iterate					(void);
 	virtual float				getLineWidth			(void) const;
 	bool						getLineStippleEnable	(void) const { return m_stipple != LINESTIPPLE_DISABLED; }
 	virtual bool				getLineStippleDynamic	(void) const { return m_stipple == LINESTIPPLE_DYNAMIC; };
 
 	virtual
-	VkPipelineRasterizationLineStateCreateInfoEXT*		getLineRasterizationStateCreateInfo	(void);
+	VkPipelineRasterizationLineStateCreateInfoEXT	initLineRasterizationStateCreateInfo	(void) const;
+
+	virtual
+	const VkPipelineRasterizationLineStateCreateInfoEXT*	getLineRasterizationStateCreateInfo	(void) const;
+
+protected:
+	int							getIteration			(void) const	{ return m_iteration;		}
+	int							getIterationCount		(void) const	{ return m_iterationCount;	}
 
 private:
 	virtual void				generateLines			(int iteration, std::vector<tcu::Vec4>& outData, std::vector<LineSceneSpec::SceneLine>& outLines) = DE_NULL;
+	virtual bool				compareAndVerify		(std::vector<LineSceneSpec::SceneLine>&	lines,
+														 tcu::Surface&							resultImage,
+														 std::vector<tcu::Vec4>&				drawBuffer);
 
 	bool						resultHasAlpha			(tcu::Surface& result);
 
@@ -1059,8 +1100,10 @@
 											VkSampleCountFlagBits		sampleCount,
 											LineStipple					stipple,
 											VkLineRasterizationModeEXT	lineRasterizationMode,
-											const deUint32 additionalRenderSize)
-	: BaseRenderingTestInstance	(context, sampleCount, RESOLUTION_POT, VK_FORMAT_R8G8B8A8_UNORM, additionalRenderSize)
+											const deUint32				additionalRenderSize,
+											const deUint32				renderSize,
+											const float					narrowLineWidth)
+	: BaseRenderingTestInstance	(context, sampleCount, renderSize, VK_FORMAT_R8G8B8A8_UNORM, additionalRenderSize)
 	, m_iteration				(0)
 	, m_iterationCount			(3)
 	, m_primitiveTopology		(primitiveTopology)
@@ -1074,6 +1117,8 @@
 {
 	DE_ASSERT(m_primitiveWideness < PRIMITIVEWIDENESS_LAST);
 
+	m_lineRasterizationStateInfo = initLineRasterizationStateCreateInfo();
+
 	if (m_lineRasterizationMode != VK_LINE_RASTERIZATION_MODE_EXT_LAST)
 	{
 		if (context.isDeviceFunctionalitySupported("VK_EXT_line_rasterization"))
@@ -1098,7 +1143,11 @@
 	// create line widths
 	if (m_primitiveWideness == PRIMITIVEWIDENESS_NARROW)
 	{
-		m_lineWidths.resize(m_iterationCount, 1.0f);
+		m_lineWidths.resize(m_iterationCount, narrowLineWidth);
+
+		// Bump up m_maxLineWidth for conservative rasterization
+		if (narrowLineWidth > m_maxLineWidth)
+			m_maxLineWidth = narrowLineWidth;
 	}
 	else if (m_primitiveWideness == PRIMITIVEWIDENESS_WIDE)
 	{
@@ -1305,7 +1354,6 @@
 	const tcu::ScopedLogSection				section					(m_context.getTestContext().getLog(), iterationDescription, iterationDescription);
 	const float								lineWidth				= getLineWidth();
 	tcu::Surface							resultImage				(m_renderSize, m_renderSize);
-	tcu::Surface							additionalResultImage	(m_additionalRenderSize, m_additionalRenderSize);
 	std::vector<tcu::Vec4>					drawBuffer;
 	std::vector<LineSceneSpec::SceneLine>	lines;
 
@@ -1319,99 +1367,12 @@
 		drawPrimitives(resultImage, drawBuffer, m_primitiveTopology);
 
 		// compare
-		RasterizationArguments	args;
-		LineSceneSpec			scene;
-		tcu::IVec4				colorBits	= tcu::getTextureFormatBitDepth(getTextureFormat());
-		bool					strict		= m_primitiveStrictness == PRIMITIVESTRICTNESS_STRICT;
-
-		args.numSamples		= m_multisampling ? 1 : 0;
-		args.subpixelBits	= m_subpixelBits;
-		args.redBits		= colorBits[0];
-		args.greenBits		= colorBits[1];
-		args.blueBits		= colorBits[2];
-
-		scene.lines.swap(lines);
-		scene.lineWidth = lineWidth;
-		scene.stippleEnable = getLineStippleEnable();
-		scene.stippleFactor = getLineStippleEnable() ? lineStippleFactor : 1;
-		scene.stipplePattern = getLineStippleEnable() ? lineStipplePattern : 0xFFFF;
-		scene.isStrip = m_primitiveTopology == VK_PRIMITIVE_TOPOLOGY_LINE_STRIP;
-		scene.isSmooth = m_lineRasterizationMode == VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT;
-
-		// Choose verification mode. Smooth lines assume mostly over-rasterization (bloated lines with a falloff).
-		// Stippled lines lose some precision across segments in a strip, so need a weaker threshold than normal
-		// lines. For simple cases, check for an exact match (STRICT).
-		if (scene.isSmooth)
-			scene.verificationMode = tcu::VERIFICATIONMODE_SMOOTH;
-		else if (scene.stippleEnable)
-			scene.verificationMode = tcu::VERIFICATIONMODE_WEAKER;
-		else
-			scene.verificationMode = tcu::VERIFICATIONMODE_STRICT;
-
-		if (m_lineRasterizationMode == VK_LINE_RASTERIZATION_MODE_BRESENHAM_EXT)
 		{
-			// bresenham is "no AA" in GL, so set numSamples to zero.
-			args.numSamples = 0;
-			if (!verifyLineGroupRasterization(resultImage, scene, args, m_context.getTestContext().getLog()))
+			const bool compareOk = compareAndVerify(lines, resultImage, drawBuffer);
+
+			if (!compareOk)
 				m_allIterationsPassed = false;
 		}
-		else
-		{
-			if (scene.isSmooth)
-			{
-				// Smooth lines get the fractional coverage multiplied into the alpha component,
-				// so do a sanity check to validate that there is at least one pixel in the image
-				// with a fractional opacity.
-				bool hasAlpha = resultHasAlpha(resultImage);
-				if (!hasAlpha)
-				{
-					m_context.getTestContext().getLog() << tcu::TestLog::Message << "Missing alpha transparency (failed)." << tcu::TestLog::EndMessage;
-					m_allIterationsPassed = false;
-				}
-			}
-
-			if (!verifyRelaxedLineGroupRasterization(resultImage, scene, args, m_context.getTestContext().getLog(), (0 == m_multisampling), strict))
-			{
-				// Retry with weaker verification. If it passes, consider it a quality warning.
-				scene.verificationMode = tcu::VERIFICATIONMODE_WEAKER;
-				if (!verifyRelaxedLineGroupRasterization(resultImage, scene, args, m_context.getTestContext().getLog(), false, strict))
-					m_allIterationsPassed = false;
-				else
-					m_qualityWarning = true;
-			}
-
-			if (m_additionalRenderSize != 0)
-			{
-				const std::vector<tcu::Vec4> colorData(drawBuffer.size(), tcu::Vec4(1.0f, 1.0f, 1.0f, 1.0f));
-
-				if (scene.isSmooth)
-					scene.verificationMode = tcu::VERIFICATIONMODE_SMOOTH;
-				else if (scene.stippleEnable)
-					scene.verificationMode = tcu::VERIFICATIONMODE_WEAKER;
-				else
-					scene.verificationMode = tcu::VERIFICATIONMODE_STRICT;
-
-				drawPrimitives(additionalResultImage, drawBuffer, colorData, m_primitiveTopology, *m_additionalImage, *m_additionalResolvedImage, *m_additionalFrameBuffer, m_additionalRenderSize, *m_additionalResultBuffer, *m_additionalResultBufferMemory);
-
-				// Compare
-				if (!verifyRelaxedLineGroupRasterization(additionalResultImage, scene, args, m_context.getTestContext().getLog(), (0 == m_multisampling), strict))
-				{
-					if (strict)
-					{
-						m_allIterationsPassed = false;
-					}
-					else
-					{
-						// Retry with weaker verification. If it passes, consider it a quality warning.
-						scene.verificationMode = tcu::VERIFICATIONMODE_WEAKER;
-						if (!verifyRelaxedLineGroupRasterization(resultImage, scene, args, m_context.getTestContext().getLog(), (0 == m_multisampling), strict))
-							m_allIterationsPassed = false;
-						else
-							m_qualityWarning = true;
-					}
-				}
-			}
-		}
 	}
 	else
 		m_context.getTestContext().getLog() << tcu::TestLog::Message << "Line width " << lineWidth << " not supported, skipping iteration." << tcu::TestLog::EndMessage;
@@ -1430,18 +1391,116 @@
 		return tcu::TestStatus::incomplete();
 }
 
+bool BaseLineTestInstance::compareAndVerify (std::vector<LineSceneSpec::SceneLine>&	lines, tcu::Surface& resultImage, std::vector<tcu::Vec4>& drawBuffer)
+{
+	const float				lineWidth				= getLineWidth();
+	bool					result					= true;
+	tcu::Surface			additionalResultImage	(m_additionalRenderSize, m_additionalRenderSize);
+	RasterizationArguments	args;
+	LineSceneSpec			scene;
+	tcu::IVec4				colorBits	= tcu::getTextureFormatBitDepth(getTextureFormat());
+	bool					strict		= m_primitiveStrictness == PRIMITIVESTRICTNESS_STRICT;
+
+	args.numSamples		= m_multisampling ? 1 : 0;
+	args.subpixelBits	= m_subpixelBits;
+	args.redBits		= colorBits[0];
+	args.greenBits		= colorBits[1];
+	args.blueBits		= colorBits[2];
+
+	scene.lines.swap(lines);
+	scene.lineWidth = lineWidth;
+	scene.stippleEnable = getLineStippleEnable();
+	scene.stippleFactor = getLineStippleEnable() ? lineStippleFactor : 1;
+	scene.stipplePattern = getLineStippleEnable() ? lineStipplePattern : 0xFFFF;
+	scene.isStrip = m_primitiveTopology == VK_PRIMITIVE_TOPOLOGY_LINE_STRIP;
+	scene.isSmooth = m_lineRasterizationMode == VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT;
+
+	// Choose verification mode. Smooth lines assume mostly over-rasterization (bloated lines with a falloff).
+	// Stippled lines lose some precision across segments in a strip, so need a weaker threshold than normal
+	// lines. For simple cases, check for an exact match (STRICT).
+	if (scene.isSmooth)
+		scene.verificationMode = tcu::VERIFICATIONMODE_SMOOTH;
+	else if (scene.stippleEnable)
+		scene.verificationMode = tcu::VERIFICATIONMODE_WEAKER;
+	else
+		scene.verificationMode = tcu::VERIFICATIONMODE_STRICT;
+
+	if (m_lineRasterizationMode == VK_LINE_RASTERIZATION_MODE_BRESENHAM_EXT)
+	{
+		// bresenham is "no AA" in GL, so set numSamples to zero.
+		args.numSamples = 0;
+		if (!verifyLineGroupRasterization(resultImage, scene, args, m_context.getTestContext().getLog()))
+			result = false;
+	}
+	else
+	{
+		if (scene.isSmooth)
+		{
+			// Smooth lines get the fractional coverage multiplied into the alpha component,
+			// so do a sanity check to validate that there is at least one pixel in the image
+			// with a fractional opacity.
+			bool hasAlpha = resultHasAlpha(resultImage);
+			if (!hasAlpha)
+			{
+				m_context.getTestContext().getLog() << tcu::TestLog::Message << "Missing alpha transparency (failed)." << tcu::TestLog::EndMessage;
+				result = false;
+			}
+		}
+
+		if (!verifyRelaxedLineGroupRasterization(resultImage, scene, args, m_context.getTestContext().getLog(), (0 == m_multisampling), strict))
+		{
+			// Retry with weaker verification. If it passes, consider it a quality warning.
+			scene.verificationMode = tcu::VERIFICATIONMODE_WEAKER;
+			if (!verifyRelaxedLineGroupRasterization(resultImage, scene, args, m_context.getTestContext().getLog(), false, strict))
+				result = false;
+			else
+				m_qualityWarning = true;
+		}
+
+		if (m_additionalRenderSize != 0)
+		{
+			const std::vector<tcu::Vec4> colorData(drawBuffer.size(), tcu::Vec4(1.0f, 1.0f, 1.0f, 1.0f));
+
+			if (scene.isSmooth)
+				scene.verificationMode = tcu::VERIFICATIONMODE_SMOOTH;
+			else if (scene.stippleEnable)
+				scene.verificationMode = tcu::VERIFICATIONMODE_WEAKER;
+			else
+				scene.verificationMode = tcu::VERIFICATIONMODE_STRICT;
+
+			drawPrimitives(additionalResultImage, drawBuffer, colorData, m_primitiveTopology, *m_additionalImage, *m_additionalResolvedImage, *m_additionalFrameBuffer, m_additionalRenderSize, *m_additionalResultBuffer, *m_additionalResultBufferMemory);
+
+			// Compare
+			if (!verifyRelaxedLineGroupRasterization(additionalResultImage, scene, args, m_context.getTestContext().getLog(), (0 == m_multisampling), strict))
+			{
+				if (strict)
+				{
+					result = false;
+				}
+				else
+				{
+					// Retry with weaker verification. If it passes, consider it a quality warning.
+					scene.verificationMode = tcu::VERIFICATIONMODE_WEAKER;
+					if (!verifyRelaxedLineGroupRasterization(resultImage, scene, args, m_context.getTestContext().getLog(), (0 == m_multisampling), strict))
+						result = false;
+					else
+						m_qualityWarning = true;
+				}
+			}
+		}
+	}
+
+	return result;
+}
 
 float BaseLineTestInstance::getLineWidth (void) const
 {
 	return m_lineWidths[m_iteration];
 }
 
-VkPipelineRasterizationLineStateCreateInfoEXT* BaseLineTestInstance::getLineRasterizationStateCreateInfo (void)
+VkPipelineRasterizationLineStateCreateInfoEXT BaseLineTestInstance::initLineRasterizationStateCreateInfo (void) const
 {
-	if (m_lineRasterizationMode == VK_LINE_RASTERIZATION_MODE_EXT_LAST)
-		return DE_NULL;
-
-	m_lineRasterizationStateInfo	=
+	VkPipelineRasterizationLineStateCreateInfoEXT lineRasterizationStateInfo	=
 	{
 		VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO_EXT,	// VkStructureType				sType;
 		DE_NULL,																// const void*					pNext;
@@ -1453,10 +1512,18 @@
 
 	if (m_stipple == LINESTIPPLE_STATIC)
 	{
-		m_lineRasterizationStateInfo.lineStippleFactor = lineStippleFactor;
-		m_lineRasterizationStateInfo.lineStipplePattern = lineStipplePattern;
+		lineRasterizationStateInfo.lineStippleFactor = lineStippleFactor;
+		lineRasterizationStateInfo.lineStipplePattern = lineStipplePattern;
 	}
 
+	return lineRasterizationStateInfo;
+}
+
+const VkPipelineRasterizationLineStateCreateInfoEXT* BaseLineTestInstance::getLineRasterizationStateCreateInfo (void) const
+{
+	if (m_lineRasterizationMode == VK_LINE_RASTERIZATION_MODE_EXT_LAST)
+		return DE_NULL;
+
 	return &m_lineRasterizationStateInfo;
 }
 
@@ -1469,12 +1536,21 @@
 													 VkSampleCountFlagBits		sampleCount,
 													 LineStipple				stipple,				// ignored
 													 VkLineRasterizationModeEXT	lineRasterizationMode,	// ignored
-													 deUint32					renderSize);			// ignored
+													 deUint32					additionalRenderSize,	// ignored
+													 deUint32					renderSize				= RESOLUTION_POT,
+													 float						pointSizeNarrow			= 1.0f);
 	virtual tcu::TestStatus	iterate					(void);
 	virtual float			getPointSize			(void) const;
 
+protected:
+	int						getIteration				(void) const	{ return m_iteration;		}
+	int						getIterationCount			(void) const	{ return m_iterationCount;	}
+
 private:
 	virtual void			generatePoints			(int iteration, std::vector<tcu::Vec4>& outData, std::vector<PointSceneSpec::ScenePoint>& outPoints);
+	virtual bool			compareAndVerify		(std::vector<PointSceneSpec::ScenePoint>&	points,
+													 tcu::Surface&								resultImage,
+													 std::vector<tcu::Vec4>&					drawBuffer);
 
 	int						m_iteration;
 	const int				m_iterationCount;
@@ -1490,23 +1566,25 @@
 									  VkSampleCountFlagBits			sampleCount,
 									  LineStipple					stipple,
 									  VkLineRasterizationModeEXT	lineRasterizationMode,
-									  deUint32						renderSize)
-	: BaseRenderingTestInstance	(context, sampleCount)
+									  deUint32						additionalRenderSize,
+									  deUint32						renderSize,
+									  float							pointSizeNarrow)
+	: BaseRenderingTestInstance	(context, sampleCount, renderSize)
 	, m_iteration				(0)
 	, m_iterationCount			(3)
 	, m_primitiveWideness		(wideness)
 	, m_allIterationsPassed		(true)
-	, m_maxPointSize			(1.0f)
+	, m_maxPointSize			(pointSizeNarrow)
 {
 	DE_UNREF(strictness);
 	DE_UNREF(stipple);
 	DE_UNREF(lineRasterizationMode);
-	DE_UNREF(renderSize);
+	DE_UNREF(additionalRenderSize);
 
 	// create point sizes
 	if (m_primitiveWideness == PRIMITIVEWIDENESS_NARROW)
 	{
-		m_pointSizes.resize(m_iterationCount, 1.0f);
+		m_pointSizes.resize(m_iterationCount, pointSizeNarrow);
 	}
 	else if (m_primitiveWideness == PRIMITIVEWIDENESS_WIDE)
 	{
@@ -1548,21 +1626,7 @@
 
 		// compare
 		{
-			bool					compareOk;
-			RasterizationArguments	args;
-			PointSceneSpec			scene;
-
-			tcu::IVec4				colorBits = tcu::getTextureFormatBitDepth(getTextureFormat());
-
-			args.numSamples		= m_multisampling ? 1 : 0;
-			args.subpixelBits	= m_subpixelBits;
-			args.redBits		= colorBits[0];
-			args.greenBits		= colorBits[1];
-			args.blueBits		= colorBits[2];
-
-			scene.points.swap(points);
-
-			compareOk = verifyPointGroupRasterization(resultImage, scene, args, m_context.getTestContext().getLog());
+			const bool compareOk = compareAndVerify(points, resultImage, drawBuffer);
 
 			if (!compareOk)
 				m_allIterationsPassed = false;
@@ -1583,6 +1647,28 @@
 		return tcu::TestStatus::incomplete();
 }
 
+bool PointTestInstance::compareAndVerify (std::vector<PointSceneSpec::ScenePoint>&	points,
+										  tcu::Surface&								resultImage,
+										  std::vector<tcu::Vec4>&					drawBuffer)
+{
+	RasterizationArguments	args;
+	PointSceneSpec			scene;
+
+	tcu::IVec4				colorBits = tcu::getTextureFormatBitDepth(getTextureFormat());
+
+	args.numSamples		= m_multisampling ? 1 : 0;
+	args.subpixelBits	= m_subpixelBits;
+	args.redBits		= colorBits[0];
+	args.greenBits		= colorBits[1];
+	args.blueBits		= colorBits[2];
+
+	scene.points.swap(points);
+
+	DE_UNREF(drawBuffer);
+
+	return verifyPointGroupRasterization(resultImage, scene, args, m_context.getTestContext().getLog());
+}
+
 float PointTestInstance::getPointSize (void) const
 {
 	return m_pointSizes[m_iteration];
@@ -2174,6 +2260,2152 @@
 	}
 }
 
+struct ConservativeTestConfig
+{
+	VkConservativeRasterizationModeEXT	conservativeRasterizationMode;
+	float								extraOverestimationSize;
+	VkPrimitiveTopology					primitiveTopology;
+	bool								degeneratePrimitives;
+	float								lineWidth;
+	deUint32							resolution;
+};
+
+float getExtraOverestimationSize (const float overestimationSizeDesired, const VkPhysicalDeviceConservativeRasterizationPropertiesEXT& conservativeRasterizationProperties)
+{
+	const float extraOverestimationSize	= overestimationSizeDesired == TCU_INFINITY ? conservativeRasterizationProperties.maxExtraPrimitiveOverestimationSize
+										: overestimationSizeDesired == -TCU_INFINITY ? conservativeRasterizationProperties.extraPrimitiveOverestimationSizeGranularity
+										: overestimationSizeDesired;
+
+	return extraOverestimationSize;
+}
+
+template <typename ConcreteTestInstance>
+class ConservativeTestCase : public BaseRenderingTestCase
+{
+public:
+									ConservativeTestCase		(tcu::TestContext&					context,
+																 const std::string&					name,
+																 const std::string&					description,
+																 const ConservativeTestConfig&		conservativeTestConfig,
+																 VkSampleCountFlagBits				sampleCount = VK_SAMPLE_COUNT_1_BIT)
+										: BaseRenderingTestCase		(context, name, description, sampleCount)
+										, m_conservativeTestConfig	(conservativeTestConfig)
+									{}
+
+	virtual void					checkSupport				(Context& context) const;
+
+	virtual TestInstance*			createInstance				(Context& context) const
+									{
+										return new ConcreteTestInstance(context, m_conservativeTestConfig, m_sampleCount);
+									}
+
+protected:
+	bool							isUseLineSubPixel			(Context& context) const;
+	deUint32						getSubPixelResolution		(Context& context) const;
+
+	const ConservativeTestConfig	m_conservativeTestConfig;
+};
+
+template <typename ConcreteTestInstance>
+bool ConservativeTestCase<ConcreteTestInstance>::isUseLineSubPixel (Context& context) const
+{
+	return (isPrimitiveTopologyLine(m_conservativeTestConfig.primitiveTopology) && context.isDeviceFunctionalitySupported("VK_EXT_line_rasterization"));
+}
+
+template <typename ConcreteTestInstance>
+deUint32 ConservativeTestCase<ConcreteTestInstance>::getSubPixelResolution (Context& context) const
+{
+	if (isUseLineSubPixel(context))
+	{
+		const VkPhysicalDeviceLineRasterizationPropertiesEXT	lineRasterizationPropertiesEXT	= context.getLineRasterizationPropertiesEXT();
+
+		return lineRasterizationPropertiesEXT.lineSubPixelPrecisionBits;
+	}
+	else
+	{
+		return context.getDeviceProperties().limits.subPixelPrecisionBits;
+	}
+}
+
+template <typename ConcreteTestInstance>
+void ConservativeTestCase<ConcreteTestInstance>::checkSupport (Context& context) const
+{
+	context.requireDeviceFunctionality("VK_EXT_conservative_rasterization");
+
+	const VkPhysicalDeviceConservativeRasterizationPropertiesEXT	conservativeRasterizationProperties	= context.getConservativeRasterizationPropertiesEXT();
+	const deUint32													subPixelPrecisionBits				= getSubPixelResolution(context);
+	const deUint32													subPixelPrecision					= 1<<subPixelPrecisionBits;
+	const bool														linesPrecision						= isUseLineSubPixel(context);
+	const float														primitiveOverestimationSizeMult		= float(subPixelPrecision) * conservativeRasterizationProperties.primitiveOverestimationSize;
+	const bool														topologyLineOrPoint					= isPrimitiveTopologyLine(m_conservativeTestConfig.primitiveTopology) || isPrimitiveTopologyPoint(m_conservativeTestConfig.primitiveTopology);
+
+	DE_ASSERT(subPixelPrecisionBits < sizeof(deUint32) * 8);
+
+	context.getTestContext().getLog()
+		<< tcu::TestLog::Message
+		<< "maxExtraPrimitiveOverestimationSize="			<< conservativeRasterizationProperties.maxExtraPrimitiveOverestimationSize << '\n'
+		<< "extraPrimitiveOverestimationSizeGranularity="	<< conservativeRasterizationProperties.extraPrimitiveOverestimationSizeGranularity << '\n'
+		<< "degenerateLinesRasterized="						<< conservativeRasterizationProperties.degenerateLinesRasterized << '\n'
+		<< "degenerateTrianglesRasterized="					<< conservativeRasterizationProperties.degenerateTrianglesRasterized << '\n'
+		<< "primitiveOverestimationSize="					<< conservativeRasterizationProperties.primitiveOverestimationSize << " (==" << primitiveOverestimationSizeMult << '/' << subPixelPrecision << ")\n"
+		<< "subPixelPrecisionBits="							<< subPixelPrecisionBits << (linesPrecision ? " (using VK_EXT_line_rasterization)" : " (using limits)") << '\n'
+		<< tcu::TestLog::EndMessage;
+
+	if (conservativeRasterizationProperties.extraPrimitiveOverestimationSizeGranularity > conservativeRasterizationProperties.maxExtraPrimitiveOverestimationSize)
+		TCU_FAIL("Granularity cannot be greater than maximum extra size");
+
+	if (topologyLineOrPoint)
+	{
+		if (!conservativeRasterizationProperties.conservativePointAndLineRasterization)
+			TCU_THROW(NotSupportedError, "Conservative line and point rasterization is not supported");
+	}
+
+	if (m_conservativeTestConfig.conservativeRasterizationMode == VK_CONSERVATIVE_RASTERIZATION_MODE_UNDERESTIMATE_EXT)
+	{
+		if (conservativeRasterizationProperties.primitiveUnderestimation == DE_FALSE)
+			TCU_THROW(NotSupportedError, "Underestimation is not supported");
+
+		if (isPrimitiveTopologyLine(m_conservativeTestConfig.primitiveTopology))
+		{
+			const float	testLineWidth	= m_conservativeTestConfig.lineWidth;
+
+			if (testLineWidth != 1.0f)
+			{
+				const VkPhysicalDeviceLimits&	limits					= context.getDeviceProperties().limits;
+				const float						lineWidthRange[2]		= { limits.lineWidthRange[0], limits.lineWidthRange[1] };
+				const float						lineWidthGranularity	= limits.lineWidthGranularity;
+
+				context.requireDeviceCoreFeature(DEVICE_CORE_FEATURE_WIDE_LINES);
+
+				if (lineWidthGranularity == 0.0f)
+					TCU_THROW(NotSupportedError, "Wide lines required for test, but are not supported");
+
+				DE_ASSERT(lineWidthGranularity > 0.0f && lineWidthRange[0] > 0.0f && lineWidthRange[1] >= lineWidthRange[0]);
+
+				if (!de::inBounds(testLineWidth, lineWidthRange[0], lineWidthRange[1]))
+					TCU_THROW(NotSupportedError, "Tested line width is not supported");
+
+				const float	n	= (testLineWidth - lineWidthRange[0]) / lineWidthGranularity;
+
+				if (deFloatFrac(n) != 0.0f || n * lineWidthGranularity + lineWidthRange[0] != testLineWidth)
+					TCU_THROW(NotSupportedError, "Exact match of line width is required for the test");
+			}
+		}
+		else if (isPrimitiveTopologyPoint(m_conservativeTestConfig.primitiveTopology))
+		{
+			const float	testPointSize	= m_conservativeTestConfig.lineWidth;
+
+			if (testPointSize != 1.0f)
+			{
+				const VkPhysicalDeviceLimits&	limits					= context.getDeviceProperties().limits;
+				const float						pointSizeRange[2]		= { limits.pointSizeRange[0], limits.pointSizeRange[1] };
+				const float						pointSizeGranularity	= limits.pointSizeGranularity;
+
+				context.requireDeviceCoreFeature(DEVICE_CORE_FEATURE_LARGE_POINTS);
+
+				if (pointSizeGranularity == 0.0f)
+					TCU_THROW(NotSupportedError, "Large points required for test, but are not supported");
+
+				DE_ASSERT(pointSizeGranularity > 0.0f && pointSizeRange[0] > 0.0f && pointSizeRange[1] >= pointSizeRange[0]);
+
+				if (!de::inBounds(testPointSize, pointSizeRange[0], pointSizeRange[1]))
+					TCU_THROW(NotSupportedError, "Tested point size is not supported");
+
+				const float	n	= (testPointSize - pointSizeRange[0]) / pointSizeGranularity;
+
+				if (deFloatFrac(n) != 0.0f || n * pointSizeGranularity + pointSizeRange[0] != testPointSize)
+					TCU_THROW(NotSupportedError, "Exact match of point size is required for the test");
+			}
+		}
+	}
+	else if (m_conservativeTestConfig.conservativeRasterizationMode == VK_CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT)
+	{
+		const float extraOverestimationSize	= getExtraOverestimationSize(m_conservativeTestConfig.extraOverestimationSize, conservativeRasterizationProperties);
+
+		if (extraOverestimationSize > conservativeRasterizationProperties.maxExtraPrimitiveOverestimationSize)
+			TCU_THROW(NotSupportedError, "Specified overestimation size is not supported");
+
+		if (topologyLineOrPoint)
+		{
+			if (!conservativeRasterizationProperties.conservativePointAndLineRasterization)
+				TCU_THROW(NotSupportedError, "Conservative line and point rasterization is not supported");
+		}
+
+		if (isPrimitiveTopologyTriangle(m_conservativeTestConfig.primitiveTopology))
+		{
+			if (m_conservativeTestConfig.degeneratePrimitives)
+			{
+				// Enforce specification minimum required limit to avoid division by zero
+				DE_ASSERT(subPixelPrecisionBits >= 4);
+
+				// Make sure float precision of 22 bits is enough, i.e. resoultion in subpixel quarters less than float precision
+				if (m_conservativeTestConfig.resolution * (1<<(subPixelPrecisionBits + 2)) > (1<<21))
+					TCU_THROW(NotSupportedError, "Subpixel resolution is too high to generate degenerate primitives");
+			}
+		}
+	}
+	else
+		TCU_THROW(InternalError, "Non-conservative mode tests are not supported by this class");
+}
+
+class ConservativeTraingleTestInstance : public BaseTriangleTestInstance
+{
+public:
+																				ConservativeTraingleTestInstance				(Context&				context,
+																																 ConservativeTestConfig	conservativeTestConfig,
+																																 VkSampleCountFlagBits	sampleCount)
+																					: BaseTriangleTestInstance						(context,
+																																	 conservativeTestConfig.primitiveTopology,
+																																	 sampleCount,
+																																	 conservativeTestConfig.resolution)
+																					, m_conservativeTestConfig						(conservativeTestConfig)
+																					, m_conservativeRasterizationProperties			(context.getConservativeRasterizationPropertiesEXT())
+																					, m_rasterizationConservativeStateCreateInfo	(initRasterizationConservativeStateCreateInfo())
+																					, m_rasterizationStateCreateInfo				(initRasterizationStateCreateInfo())
+																				{}
+
+	void																		generateTriangles								(int											iteration,
+																																 std::vector<tcu::Vec4>&						outData,
+																																 std::vector<TriangleSceneSpec::SceneTriangle>&	outTriangles);
+	const VkPipelineRasterizationStateCreateInfo*								getRasterizationStateCreateInfo					(void) const;
+
+protected:
+	virtual const VkPipelineRasterizationLineStateCreateInfoEXT*				getLineRasterizationStateCreateInfo				(void) const;
+
+	virtual bool																compareAndVerify								(std::vector<TriangleSceneSpec::SceneTriangle>&	triangles,
+																																 tcu::Surface&									resultImage,
+																																 std::vector<tcu::Vec4>&						drawBuffer);
+	virtual bool																compareAndVerifyOverestimatedNormal				(std::vector<TriangleSceneSpec::SceneTriangle>&	triangles,
+																																 tcu::Surface&									resultImage);
+	virtual bool																compareAndVerifyOverestimatedDegenerate			(std::vector<TriangleSceneSpec::SceneTriangle>&	triangles,
+																																 tcu::Surface&									resultImage);
+	virtual bool																compareAndVerifyUnderestimatedNormal			(std::vector<TriangleSceneSpec::SceneTriangle>&	triangles,
+																																 tcu::Surface&									resultImage);
+	virtual bool																compareAndVerifyUnderestimatedDegenerate		(std::vector<TriangleSceneSpec::SceneTriangle>&	triangles,
+																																 tcu::Surface&									resultImage);
+	void																		generateNormalTriangles							(int											iteration,
+																																 std::vector<tcu::Vec4>&						outData,
+																																 std::vector<TriangleSceneSpec::SceneTriangle>&	outTriangles);
+	void																		generateDegenerateTriangles					(int											iteration,
+																																 std::vector<tcu::Vec4>&						outData,
+																																 std::vector<TriangleSceneSpec::SceneTriangle>&	outTriangles);
+	void																		drawPrimitives									(tcu::Surface&									result,
+																																 const std::vector<tcu::Vec4>&					vertexData,
+																																 VkPrimitiveTopology							primitiveTopology);
+
+private:
+	const std::vector<VkPipelineRasterizationConservativeStateCreateInfoEXT>	initRasterizationConservativeStateCreateInfo	(void);
+	const std::vector<VkPipelineRasterizationStateCreateInfo>					initRasterizationStateCreateInfo				(void);
+
+	const ConservativeTestConfig												m_conservativeTestConfig;
+	const VkPhysicalDeviceConservativeRasterizationPropertiesEXT				m_conservativeRasterizationProperties;
+	const std::vector<VkPipelineRasterizationConservativeStateCreateInfoEXT>	m_rasterizationConservativeStateCreateInfo;
+	const std::vector<VkPipelineRasterizationStateCreateInfo>					m_rasterizationStateCreateInfo;
+};
+
+void ConservativeTraingleTestInstance::generateTriangles (int iteration, std::vector<tcu::Vec4>& outData, std::vector<TriangleSceneSpec::SceneTriangle>& outTriangles)
+{
+	if (m_conservativeTestConfig.degeneratePrimitives)
+		generateDegenerateTriangles(iteration, outData, outTriangles);
+	else
+		generateNormalTriangles(iteration, outData, outTriangles);
+}
+
+void ConservativeTraingleTestInstance::generateNormalTriangles (int iteration, std::vector<tcu::Vec4>& outData, std::vector<TriangleSceneSpec::SceneTriangle>& outTriangles)
+{
+	const float	halfPixel						= 1.0f / float(m_renderSize);
+	const float extraOverestimationSize			= getExtraOverestimationSize(m_conservativeTestConfig.extraOverestimationSize, m_conservativeRasterizationProperties);
+	const float	overestimate					= 2.0f * halfPixel * (m_conservativeRasterizationProperties.primitiveOverestimationSize + extraOverestimationSize);
+	const float	overestimateMargin				= overestimate;
+	const float	underestimateMargin				= 0.0f;
+	const bool	isOverestimate					= m_conservativeTestConfig.conservativeRasterizationMode == VK_CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT;
+	const float	margin							= isOverestimate ? overestimateMargin : underestimateMargin;
+	const char*	overestimateIterationComments[]	= { "Corner touch", "Any portion pixel coverage", "Edge touch" };
+
+	outData.resize(6);
+
+	switch (iteration)
+	{
+		case 0:
+		{
+			// Corner touch
+			const float edge	= 2 * halfPixel + margin;
+			const float left	= -1.0f + edge;
+			const float right	= +1.0f - edge;
+			const float up		= -1.0f + edge;
+			const float down	= +1.0f - edge;
+
+			outData[0] = tcu::Vec4( left, down, 0.0f, 1.0f);
+			outData[1] = tcu::Vec4( left,   up, 0.0f, 1.0f);
+			outData[2] = tcu::Vec4(right, down, 0.0f, 1.0f);
+
+			outData[3] = tcu::Vec4( left,   up, 0.0f, 1.0f);
+			outData[4] = tcu::Vec4(right, down, 0.0f, 1.0f);
+			outData[5] = tcu::Vec4(right,   up, 0.0f, 1.0f);
+
+			break;
+		}
+
+		case 1:
+		{
+			// Partial coverage
+			const float eps		= halfPixel / 32.0f;
+			const float edge	= 4.0f * halfPixel  + margin - eps;
+			const float left	= -1.0f + edge;
+			const float right	= +1.0f - edge;
+			const float up		= -1.0f + edge;
+			const float down	= +1.0f - edge;
+
+			outData[0] = tcu::Vec4( left, down, 0.0f, 1.0f);
+			outData[1] = tcu::Vec4( left,   up, 0.0f, 1.0f);
+			outData[2] = tcu::Vec4(right, down, 0.0f, 1.0f);
+
+			outData[3] = tcu::Vec4( left,   up, 0.0f, 1.0f);
+			outData[4] = tcu::Vec4(right, down, 0.0f, 1.0f);
+			outData[5] = tcu::Vec4(right,   up, 0.0f, 1.0f);
+
+			break;
+		}
+
+		case 2:
+		{
+			// Edge touch
+			const float edge	= 6.0f * halfPixel + margin;
+			const float left	= -1.0f + edge;
+			const float right	= +1.0f - edge;
+			const float up		= -1.0f + edge;
+			const float down	= +1.0f - edge;
+
+			outData[0] = tcu::Vec4( left, down, 0.0f, 1.0f);
+			outData[1] = tcu::Vec4( left,   up, 0.0f, 1.0f);
+			outData[2] = tcu::Vec4(right, down, 0.0f, 1.0f);
+
+			outData[3] = tcu::Vec4( left,   up, 0.0f, 1.0f);
+			outData[4] = tcu::Vec4(right, down, 0.0f, 1.0f);
+			outData[5] = tcu::Vec4(right,   up, 0.0f, 1.0f);
+
+			break;
+		}
+
+		default:
+			TCU_THROW(InternalError, "Unexpected iteration");
+	}
+
+	outTriangles.resize(outData.size() / 3);
+
+	for (size_t ndx = 0; ndx < outTriangles.size(); ++ndx)
+	{
+		outTriangles[ndx].positions[0] = outData[3 * ndx + 0];	outTriangles[ndx].sharedEdge[0] = false;
+		outTriangles[ndx].positions[1] = outData[3 * ndx + 1];	outTriangles[ndx].sharedEdge[1] = false;
+		outTriangles[ndx].positions[2] = outData[3 * ndx + 2];	outTriangles[ndx].sharedEdge[2] = false;
+	}
+
+	// log
+	if (isOverestimate)
+	{
+		m_context.getTestContext().getLog()
+			<< tcu::TestLog::Message
+			<< "Testing " << overestimateIterationComments[iteration] << " "
+			<< "with rendering " << outTriangles.size() << " triangle(s):"
+			<< tcu::TestLog::EndMessage;
+	}
+	else
+	{
+		m_context.getTestContext().getLog()
+			<< tcu::TestLog::Message
+			<< "Rendering " << outTriangles.size() << " triangle(s):"
+			<< tcu::TestLog::EndMessage;
+	}
+
+	for (size_t ndx = 0; ndx < outTriangles.size(); ++ndx)
+	{
+		const deUint32	 multiplier	= m_renderSize / 2;
+
+		m_context.getTestContext().getLog()
+			<< tcu::TestLog::Message
+			<< "Triangle " << (ndx + 1) << ":"
+			<< "\n\t" << outTriangles[ndx].positions[0] << " == " << (float(multiplier) * outTriangles[ndx].positions[0]) << "/" << multiplier
+			<< "\n\t" << outTriangles[ndx].positions[1] << " == " << (float(multiplier) * outTriangles[ndx].positions[1]) << "/" << multiplier
+			<< "\n\t" << outTriangles[ndx].positions[2] << " == " << (float(multiplier) * outTriangles[ndx].positions[2]) << "/" << multiplier
+			<< tcu::TestLog::EndMessage;
+	}
+}
+
+void ConservativeTraingleTestInstance::generateDegenerateTriangles (int iteration, std::vector<tcu::Vec4>& outData, std::vector<TriangleSceneSpec::SceneTriangle>& outTriangles)
+{
+	tcu::TestLog&	log								= m_context.getTestContext().getLog();
+	const float		pixelSize						= 2.0f / float(m_renderSize);
+	const deUint32	subPixels						= 1u << m_context.getDeviceProperties().limits.subPixelPrecisionBits;
+	const float		subPixelSize					= pixelSize / float(subPixels);
+	const float		extraOverestimationSize			= getExtraOverestimationSize(m_conservativeTestConfig.extraOverestimationSize, m_conservativeRasterizationProperties);
+	const float		totalOverestimate				= m_conservativeRasterizationProperties.primitiveOverestimationSize + extraOverestimationSize;
+	const float		totalOverestimateInSubPixels	= deFloatCeil(totalOverestimate * float(subPixels));
+	const float		overestimate					= subPixelSize * totalOverestimateInSubPixels;
+	const float		overestimateSafetyMargin		= subPixelSize * 0.125f;
+	const float		overestimateMargin				= overestimate + overestimateSafetyMargin;
+	const float		underestimateMargin				= 0.0f;
+	const bool		isOverestimate					= m_conservativeTestConfig.conservativeRasterizationMode == VK_CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT;
+	const float		margin							= isOverestimate ? overestimateMargin : underestimateMargin;
+	const char*		overestimateIterationComments[]	= { "Backfacing", "Generate pixels", "Use provoking vertex" };
+
+	if (pixelSize < 2 * overestimateMargin)
+		TCU_THROW(NotSupportedError, "Could not generate degenerate triangle for such overestimate parameters");
+
+	outData.clear();
+
+	switch (iteration)
+	{
+		case 0:
+		case 1:
+		case 2:
+		{
+			for (int rowNdx = 0; rowNdx < 3; ++rowNdx)
+			for (int colNdx = 0; colNdx < 4; ++colNdx)
+			{
+				const float	offsetX		= -1.0f + float(4 * (colNdx + 1)) * pixelSize;
+				const float	offsetY		= -1.0f + float(4 * (rowNdx + 1)) * pixelSize;
+				const float	left		= offsetX + margin;
+				const float	right		= offsetX + margin + 0.25f * subPixelSize;
+				const float	up			= offsetY + margin;
+				const float	down		= offsetY + margin + 0.25f * subPixelSize;
+				const bool	luPresent	= (rowNdx & 1) == 0;
+				const bool	rdPresent	= (rowNdx & 2) == 0;
+				const bool	luCW		= (colNdx & 1) == 0;
+				const bool	rdCW		= (colNdx & 2) == 0;
+
+				DE_ASSERT(left < right);
+				DE_ASSERT(up < down);
+
+				if (luPresent)
+				{
+					if (luCW)
+					{
+						// CW triangle left up
+						outData.push_back(tcu::Vec4( left, down, 0.0f, 1.0f));
+						outData.push_back(tcu::Vec4( left,   up, 0.0f, 1.0f));
+						outData.push_back(tcu::Vec4(right,   up, 0.0f, 1.0f));
+					}
+					else
+					{
+						// CCW triangle left up
+						outData.push_back(tcu::Vec4(right,   up, 0.0f, 1.0f));
+						outData.push_back(tcu::Vec4( left,   up, 0.0f, 1.0f));
+						outData.push_back(tcu::Vec4( left, down, 0.0f, 1.0f));
+					}
+				}
+
+				if (rdPresent)
+				{
+					if (rdCW)
+					{
+						// CW triangle right down
+						outData.push_back(tcu::Vec4(right,   up, 0.0f, 1.0f));
+						outData.push_back(tcu::Vec4(right, down, 0.0f, 1.0f));
+						outData.push_back(tcu::Vec4( left, down, 0.0f, 1.0f));
+					}
+					else
+					{
+						// CCW triangle right down
+						outData.push_back(tcu::Vec4( left, down, 0.0f, 1.0f));
+						outData.push_back(tcu::Vec4(right, down, 0.0f, 1.0f));
+						outData.push_back(tcu::Vec4(right,   up, 0.0f, 1.0f));
+					}
+				}
+			}
+
+			break;
+		}
+
+		default:
+			TCU_THROW(InternalError, "Unexpected iteration");
+	}
+
+	outTriangles.resize(outData.size() / 3);
+
+	for (size_t ndx = 0; ndx < outTriangles.size(); ++ndx)
+	{
+		outTriangles[ndx].positions[0] = outData[3 * ndx + 0];	outTriangles[ndx].sharedEdge[0] = false;
+		outTriangles[ndx].positions[1] = outData[3 * ndx + 1];	outTriangles[ndx].sharedEdge[1] = false;
+		outTriangles[ndx].positions[2] = outData[3 * ndx + 2];	outTriangles[ndx].sharedEdge[2] = false;
+	}
+
+	// log
+	if (isOverestimate)
+	{
+		m_context.getTestContext().getLog()
+			<< tcu::TestLog::Message
+			<< "Testing " << overestimateIterationComments[iteration] << " "
+			<< "with rendering " << outTriangles.size() << " triangle(s):"
+			<< tcu::TestLog::EndMessage;
+	}
+	else
+	{
+		m_context.getTestContext().getLog()
+			<< tcu::TestLog::Message
+			<< "Rendering " << outTriangles.size() << " triangle(s):"
+			<< tcu::TestLog::EndMessage;
+	}
+
+	for (int ndx = 0; ndx < (int)outTriangles.size(); ++ndx)
+	{
+		const deUint32	multiplierInt	= m_renderSize / 2;
+		const deUint32	multiplierFrac	= subPixels;
+		std::string		coordsString;
+
+		for (size_t vertexNdx = 0; vertexNdx < 3; ++vertexNdx)
+		{
+			const tcu::Vec4&	pos				= outTriangles[ndx].positions[vertexNdx];
+			std::ostringstream	coordsFloat;
+			std::ostringstream	coordsNatural;
+
+			for (int coordNdx = 0; coordNdx < 2; ++coordNdx)
+			{
+				const char*	sep		= (coordNdx < 1) ? "," : "";
+				const float	coord	= pos[coordNdx];
+				const char	sign	= deSign(coord) < 0 ? '-' : '+';
+				const float	m		= deFloatFloor(float(multiplierInt) * deFloatAbs(coord));
+				const float	r		= deFloatFrac(float(multiplierInt) * deFloatAbs(coord)) * float(multiplierFrac);
+
+				coordsFloat << std::fixed << std::setw(13) << std::setprecision(10) << coord << sep;
+				coordsNatural << sign << '(' << m << '+' << r << '/' << multiplierFrac << ')' << sep;
+			}
+
+			coordsString += "\n\t[" + coordsFloat.str() + "] == [" + coordsNatural.str() + "] / " + de::toString(multiplierInt);
+		}
+
+		log << tcu::TestLog::Message
+			<< "Triangle " << (ndx + 1) << ':'
+			<< coordsString
+			<< tcu::TestLog::EndMessage;
+	}
+}
+
+void ConservativeTraingleTestInstance::drawPrimitives (tcu::Surface& result, const std::vector<tcu::Vec4>& vertexData, VkPrimitiveTopology primitiveTopology)
+{
+	if (m_conservativeTestConfig.degeneratePrimitives && getIteration() == 2)
+	{
+		// Set provoking vertex color to white
+		tcu::Vec4				colorProvoking	(1.0f, 1.0f, 1.0f, 1.0f);
+		tcu::Vec4				colorOther		(0.0f, 1.0f, 1.0f, 1.0f);
+		std::vector<tcu::Vec4>	colorData;
+
+		colorData.reserve(vertexData.size());
+
+		for (size_t vertexNdx = 0; vertexNdx < vertexData.size(); ++vertexNdx)
+			if (vertexNdx % 3 == 0)
+				colorData.push_back(colorProvoking);
+			else
+				colorData.push_back(colorOther);
+
+		BaseRenderingTestInstance::drawPrimitives(result, vertexData, colorData, primitiveTopology);
+	}
+	else
+		BaseRenderingTestInstance::drawPrimitives(result, vertexData, primitiveTopology);
+}
+
+bool ConservativeTraingleTestInstance::compareAndVerify (std::vector<TriangleSceneSpec::SceneTriangle>& triangles, tcu::Surface& resultImage, std::vector<tcu::Vec4>& drawBuffer)
+{
+	DE_UNREF(drawBuffer);
+
+	switch (m_conservativeTestConfig.conservativeRasterizationMode)
+	{
+		case VK_CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT:
+		{
+			if (m_conservativeTestConfig.degeneratePrimitives)
+				return compareAndVerifyOverestimatedDegenerate(triangles, resultImage);
+			else
+				return compareAndVerifyOverestimatedNormal(triangles, resultImage);
+
+			break;
+		}
+
+		case VK_CONSERVATIVE_RASTERIZATION_MODE_UNDERESTIMATE_EXT:
+		{
+			if (m_conservativeTestConfig.degeneratePrimitives)
+				return compareAndVerifyUnderestimatedDegenerate(triangles, resultImage);
+			else
+				return compareAndVerifyUnderestimatedNormal(triangles, resultImage);
+
+			break;
+		}
+
+		default:
+			TCU_THROW(InternalError, "Unknown conservative rasterization mode");
+	}
+}
+
+bool ConservativeTraingleTestInstance::compareAndVerifyOverestimatedNormal (std::vector<TriangleSceneSpec::SceneTriangle>& triangles, tcu::Surface& resultImage)
+{
+	DE_UNREF(triangles);
+
+	const int			start					= getIteration() + 1;
+	const int			end						= resultImage.getHeight() - start;
+	const tcu::RGBA		backgroundColor			= tcu::RGBA(0, 0, 0, 255);
+	const tcu::RGBA		foregroundColor			= tcu::RGBA(255, 255, 255, 255);
+	const tcu::RGBA		unexpectedPixelColor	= tcu::RGBA(255, 0, 0, 255);
+	tcu::TestLog&		log						= m_context.getTestContext().getLog();
+	int					errX					= 0;
+	int					errY					= 0;
+	deUint32			errValue				= 0;
+	bool				result					= true;
+
+	DE_ASSERT(resultImage.getHeight() == resultImage.getWidth());
+
+	for (int y = start; result && y < end; ++y)
+	for (int x = start; result && x < end; ++x)
+	{
+		if (resultImage.getPixel(x,y).getPacked() != foregroundColor.getPacked())
+		{
+			result		= false;
+			errX		= x;
+			errY		= y;
+			errValue	= resultImage.getPixel(x,y).getPacked();
+
+			break;
+		}
+	}
+
+	if (!result)
+	{
+		tcu::Surface	errorMask		(resultImage.getWidth(), resultImage.getHeight());
+		tcu::Surface	expectedImage	(resultImage.getWidth(), resultImage.getHeight());
+
+		for (int y = 0; y < errorMask.getHeight(); ++y)
+		for (int x = 0; x < errorMask.getWidth(); ++x)
+		{
+			errorMask.setPixel(x, y, backgroundColor);
+			expectedImage.setPixel(x, y, backgroundColor);
+		}
+
+		for (int y = start; y < end; ++y)
+		for (int x = start; x < end; ++x)
+		{
+			expectedImage.setPixel(x, y, foregroundColor);
+
+			if (resultImage.getPixel(x, y).getPacked() != foregroundColor.getPacked())
+				errorMask.setPixel(x, y, unexpectedPixelColor);
+		}
+
+		log << tcu::TestLog::Message << "Invalid pixels found starting at " << errX << "," << errY << " value=0x" << std::hex << errValue
+			<< tcu::TestLog::EndMessage;
+		log << tcu::TestLog::ImageSet("Verification result", "Result of rendering")
+			<< tcu::TestLog::Image("Result",	"Result",		resultImage)
+			<< tcu::TestLog::Image("Expected",	"Expected",		expectedImage)
+			<< tcu::TestLog::Image("ErrorMask", "ErrorMask",	errorMask)
+			<< tcu::TestLog::EndImageSet;
+	}
+	else
+	{
+		log << tcu::TestLog::Message << "No invalid pixels found." << tcu::TestLog::EndMessage;
+		log << tcu::TestLog::ImageSet("Verification result", "Result of rendering")
+			<< tcu::TestLog::Image("Result", "Result", resultImage)
+			<< tcu::TestLog::EndImageSet;
+	}
+
+	return result;
+}
+
+bool ConservativeTraingleTestInstance::compareAndVerifyOverestimatedDegenerate (std::vector<TriangleSceneSpec::SceneTriangle>& triangles, tcu::Surface& resultImage)
+{
+	DE_UNREF(triangles);
+
+	const char*			iterationComments[]		= { "Cull back face triangles", "Cull front face triangles", "Cull none" };
+	const tcu::RGBA		backgroundColor			= tcu::RGBA(0, 0, 0, 255);
+	const tcu::RGBA		foregroundColor			= tcu::RGBA(255, 255, 255, 255);
+	const tcu::RGBA		unexpectedPixelColor	= tcu::RGBA(255, 0, 0, 255);
+	tcu::TestLog&		log						= m_context.getTestContext().getLog();
+	bool				result					= true;
+	tcu::Surface		referenceImage			(resultImage.getWidth(), resultImage.getHeight());
+
+	for (int y = 0; y < resultImage.getHeight(); ++y)
+	for (int x = 0; x < resultImage.getWidth(); ++x)
+		referenceImage.setPixel(x, y, backgroundColor);
+
+	if (m_conservativeRasterizationProperties.degenerateTrianglesRasterized)
+	{
+		if (getIteration() != 0)
+		{
+			log << tcu::TestLog::Message << "Triangles expected to be rasterized with at least one pixel of white color each" << tcu::TestLog::EndMessage;
+
+			for (int rowNdx = 0; rowNdx < 3; ++rowNdx)
+			for (int colNdx = 0; colNdx < 4; ++colNdx)
+			{
+				referenceImage.setPixel(4 * (colNdx + 1), 4 * (rowNdx + 1), foregroundColor);
+
+				// Allow implementations that need to be extra conservative with degenerate triangles,
+				// which may cause extra coverage.
+				if (resultImage.getPixel(4 * (colNdx + 1) - 1, 4 * (rowNdx + 1) - 1) == foregroundColor)
+					referenceImage.setPixel(4 * (colNdx + 1) - 1, 4 * (rowNdx + 1) - 1, foregroundColor);
+				if (resultImage.getPixel(4 * (colNdx + 1) - 1, 4 * (rowNdx + 1)) == foregroundColor)
+					referenceImage.setPixel(4 * (colNdx + 1) - 1, 4 * (rowNdx + 1), foregroundColor);
+				if (resultImage.getPixel(4 * (colNdx + 1), 4 * (rowNdx + 1) - 1) == foregroundColor)
+					referenceImage.setPixel(4 * (colNdx + 1), 4 * (rowNdx + 1) - 1, foregroundColor);
+			}
+		}
+		else
+			log << tcu::TestLog::Message << "Triangles expected to be culled due to backfacing culling and all degenerate triangles assumed to be backfacing" << tcu::TestLog::EndMessage;
+	}
+	else
+		log << tcu::TestLog::Message << "Triangles expected to be culled due to degenerateTrianglesRasterized=false" << tcu::TestLog::EndMessage;
+
+	for (int y = 0; result && y < resultImage.getHeight(); ++y)
+	for (int x = 0; result && x < resultImage.getWidth(); ++x)
+	{
+		if (resultImage.getPixel(x,y).getPacked() != referenceImage.getPixel(x,y).getPacked())
+		{
+			result = false;
+
+			break;
+		}
+	}
+
+	if (!result)
+	{
+		tcu::Surface	errorMask	(resultImage.getWidth(), resultImage.getHeight());
+
+		for (int y = 0; y < errorMask.getHeight(); ++y)
+		for (int x = 0; x < errorMask.getWidth(); ++x)
+		{
+			if (resultImage.getPixel(x, y).getPacked() != referenceImage.getPixel(x, y).getPacked())
+				errorMask.setPixel(x, y, unexpectedPixelColor);
+			else
+				errorMask.setPixel(x, y, backgroundColor);
+		}
+
+		log << tcu::TestLog::Message << "Invalid pixels found for mode '" << iterationComments[getIteration()] << "'"
+			<< tcu::TestLog::EndMessage;
+		log << tcu::TestLog::ImageSet("Verification result", "Result of rendering")
+			<< tcu::TestLog::Image("Result",	"Result",		resultImage)
+			<< tcu::TestLog::Image("Reference",	"Reference",	referenceImage)
+			<< tcu::TestLog::Image("ErrorMask", "ErrorMask",	errorMask)
+			<< tcu::TestLog::EndImageSet;
+	}
+	else
+	{
+		log << tcu::TestLog::Message << "No invalid pixels found." << tcu::TestLog::EndMessage;
+		log << tcu::TestLog::ImageSet("Verification result", "Result of rendering")
+			<< tcu::TestLog::Image("Result", "Result", resultImage)
+			<< tcu::TestLog::EndImageSet;
+	}
+
+	return result;
+}
+
+bool ConservativeTraingleTestInstance::compareAndVerifyUnderestimatedNormal (std::vector<TriangleSceneSpec::SceneTriangle>& triangles, tcu::Surface& resultImage)
+{
+	DE_UNREF(triangles);
+
+	const tcu::RGBA		backgroundColor			= tcu::RGBA(0, 0, 0, 255);
+	const tcu::RGBA		foregroundColor			= tcu::RGBA(255, 255, 255, 255);
+	const tcu::RGBA		unexpectedPixelColor	= tcu::RGBA(255, 0, 0, 255);
+	const tcu::IVec2	viewportSize			= tcu::IVec2(resultImage.getWidth(), resultImage.getHeight());
+	tcu::TestLog&		log						= m_context.getTestContext().getLog();
+	int					errX					= -1;
+	int					errY					= -1;
+	deUint32			errValue				= 0;
+	tcu::Surface		referenceImage			(resultImage.getWidth(), resultImage.getHeight());
+	bool				result					= true;
+
+	DE_ASSERT(resultImage.getHeight() == resultImage.getWidth());
+
+	for (int y = 0; y < resultImage.getHeight(); ++y)
+	for (int x = 0; x < resultImage.getWidth(); ++x)
+		referenceImage.setPixel(x, y, backgroundColor);
+
+	for (size_t triangleNdx = 0; triangleNdx < triangles.size(); ++triangleNdx)
+	{
+		const tcu::Vec4&	p0	= triangles[triangleNdx].positions[0];
+		const tcu::Vec4&	p1	= triangles[triangleNdx].positions[1];
+		const tcu::Vec4&	p2	= triangles[triangleNdx].positions[2];
+
+		for (int y = 0; y < resultImage.getHeight(); ++y)
+		for (int x = 0; x < resultImage.getWidth(); ++x)
+		{
+			if (calculateUnderestimateTriangleCoverage(p0, p1, p2, tcu::IVec2(x,y), m_subpixelBits, viewportSize) == tcu::COVERAGE_FULL)
+				referenceImage.setPixel(x, y, foregroundColor);
+		}
+	}
+
+	for (int y = 0; result && y < resultImage.getHeight(); ++y)
+	for (int x = 0; result && x < resultImage.getWidth(); ++x)
+		if (resultImage.getPixel(x, y).getPacked() != referenceImage.getPixel(x, y).getPacked())
+		{
+			result		= false;
+			errX		= x;
+			errY		= y;
+			errValue	= resultImage.getPixel(x,y).getPacked();
+		}
+
+	if (!result)
+	{
+		tcu::Surface	errorMask	(resultImage.getWidth(), resultImage.getHeight());
+
+		for (int y = 0; y < errorMask.getHeight(); ++y)
+		for (int x = 0; x < errorMask.getWidth(); ++x)
+		{
+			if (resultImage.getPixel(x,y).getPacked() != referenceImage.getPixel(x,y).getPacked())
+				errorMask.setPixel(x, y, unexpectedPixelColor);
+			else
+				errorMask.setPixel(x, y, backgroundColor);
+		}
+
+		log << tcu::TestLog::Message << "Invalid pixels found starting at " << errX << "," << errY << " value=0x" << std::hex << errValue
+			<< tcu::TestLog::EndMessage;
+		log << tcu::TestLog::ImageSet("Verification result", "Result of rendering")
+			<< tcu::TestLog::Image("Result",	"Result",		resultImage)
+			<< tcu::TestLog::Image("Refernce",	"Refernce",		referenceImage)
+			<< tcu::TestLog::Image("ErrorMask", "ErrorMask",	errorMask)
+			<< tcu::TestLog::EndImageSet;
+	}
+	else
+	{
+		log << tcu::TestLog::Message << "No invalid pixels found." << tcu::TestLog::EndMessage;
+		log << tcu::TestLog::ImageSet("Verification result", "Result of rendering")
+			<< tcu::TestLog::Image("Result", "Result", resultImage)
+			<< tcu::TestLog::EndImageSet;
+	}
+
+	return result;
+}
+
+bool ConservativeTraingleTestInstance::compareAndVerifyUnderestimatedDegenerate (std::vector<TriangleSceneSpec::SceneTriangle>& triangles, tcu::Surface& resultImage)
+{
+	DE_UNREF(triangles);
+
+	const char*			iterationComments[]		= { "Cull back face triangles", "Cull front face triangles", "Cull none" };
+	const tcu::RGBA		backgroundColor			= tcu::RGBA(0, 0, 0, 255);
+	const tcu::RGBA		unexpectedPixelColor	= tcu::RGBA(255, 0, 0, 255);
+	tcu::TestLog&		log						= m_context.getTestContext().getLog();
+	int					errX					= 0;
+	int					errY					= 0;
+	deUint32			errValue				= 0;
+	bool				result					= true;
+
+	if (m_conservativeRasterizationProperties.degenerateTrianglesRasterized)
+	{
+		if (getIteration() != 0)
+			log << tcu::TestLog::Message << "Triangles expected to be not rendered due to no one triangle can fully cover fragment" << tcu::TestLog::EndMessage;
+		else
+			log << tcu::TestLog::Message << "Triangles expected to be culled due to backfacing culling and all degenerate triangles assumed to be backfacing" << tcu::TestLog::EndMessage;
+	}
+	else
+		log << tcu::TestLog::Message << "Triangles expected to be culled due to degenerateTrianglesRasterized=false" << tcu::TestLog::EndMessage;
+
+	for (int y = 0; result && y < resultImage.getHeight(); ++y)
+	for (int x = 0; result && x < resultImage.getWidth(); ++x)
+	{
+		if (resultImage.getPixel(x, y).getPacked() != backgroundColor.getPacked())
+		{
+			result		= false;
+			errX		= x;
+			errY		= y;
+			errValue	= resultImage.getPixel(x,y).getPacked();
+
+			break;
+		}
+	}
+
+	if (!result)
+	{
+		tcu::Surface	referenceImage	(resultImage.getWidth(), resultImage.getHeight());
+		tcu::Surface	errorMask		(resultImage.getWidth(), resultImage.getHeight());
+
+		for (int y = 0; y < resultImage.getHeight(); ++y)
+		for (int x = 0; x < resultImage.getWidth(); ++x)
+			referenceImage.setPixel(x, y, backgroundColor);
+
+		for (int y = 0; y < errorMask.getHeight(); ++y)
+		for (int x = 0; x < errorMask.getWidth(); ++x)
+		{
+			if (resultImage.getPixel(x, y).getPacked() != referenceImage.getPixel(x, y).getPacked())
+				errorMask.setPixel(x, y, unexpectedPixelColor);
+			else
+				errorMask.setPixel(x, y, backgroundColor);
+		}
+
+		log << tcu::TestLog::Message << "Invalid pixels found for mode '" << iterationComments[getIteration()] << "' starting at " << errX << "," << errY << " value=0x" << std::hex << errValue
+			<< tcu::TestLog::EndMessage;
+
+		log << tcu::TestLog::ImageSet("Verification result", "Result of rendering")
+			<< tcu::TestLog::Image("Result",	"Result",		resultImage)
+			<< tcu::TestLog::Image("Reference",	"Reference",	referenceImage)
+			<< tcu::TestLog::Image("ErrorMask", "ErrorMask",	errorMask)
+			<< tcu::TestLog::EndImageSet;
+	}
+	else
+	{
+		log << tcu::TestLog::Message << "No invalid pixels found." << tcu::TestLog::EndMessage;
+		log << tcu::TestLog::ImageSet("Verification result", "Result of rendering")
+			<< tcu::TestLog::Image("Result", "Result", resultImage)
+			<< tcu::TestLog::EndImageSet;
+	}
+
+	return result;
+}
+
+const std::vector<VkPipelineRasterizationConservativeStateCreateInfoEXT> ConservativeTraingleTestInstance::initRasterizationConservativeStateCreateInfo (void)
+{
+	const float															extraOverestimationSize	= getExtraOverestimationSize(m_conservativeTestConfig.extraOverestimationSize, m_conservativeRasterizationProperties);
+	std::vector<VkPipelineRasterizationConservativeStateCreateInfoEXT>	result;
+
+	result.reserve(getIterationCount());
+
+	for (int iteration = 0; iteration < getIterationCount(); ++iteration)
+	{
+		const VkPipelineRasterizationConservativeStateCreateInfoEXT	rasterizationConservativeStateCreateInfo	=
+		{
+			VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_CONSERVATIVE_STATE_CREATE_INFO_EXT,	//  VkStructureType											sType;
+			DE_NULL,																		//  const void*												pNext;
+			(VkPipelineRasterizationConservativeStateCreateFlagsEXT)0,						//  VkPipelineRasterizationConservativeStateCreateFlagsEXT	flags;
+			m_conservativeTestConfig.conservativeRasterizationMode,							//  VkConservativeRasterizationModeEXT						conservativeRasterizationMode;
+			extraOverestimationSize															//  float													extraPrimitiveOverestimationSize;
+		};
+
+		result.push_back(rasterizationConservativeStateCreateInfo);
+	}
+
+	return result;
+}
+
+const std::vector<VkPipelineRasterizationStateCreateInfo> ConservativeTraingleTestInstance::initRasterizationStateCreateInfo (void)
+{
+	std::vector<VkPipelineRasterizationStateCreateInfo>	result;
+
+	result.reserve(getIterationCount());
+
+	for (int iteration = 0; iteration < getIterationCount(); ++iteration)
+	{
+		const VkCullModeFlags							cullModeFlags					= (!m_conservativeTestConfig.degeneratePrimitives) ? VK_CULL_MODE_NONE
+																						: (iteration == 0) ? VK_CULL_MODE_BACK_BIT
+																						: (iteration == 1) ? VK_CULL_MODE_FRONT_BIT
+																						: VK_CULL_MODE_NONE;
+
+		const VkPipelineRasterizationStateCreateInfo	rasterizationStateCreateInfo	=
+		{
+			VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO,		//  VkStructureType							sType;
+			&m_rasterizationConservativeStateCreateInfo[iteration],			//  const void*								pNext;
+			0,																//  VkPipelineRasterizationStateCreateFlags	flags;
+			false,															//  VkBool32								depthClampEnable;
+			false,															//  VkBool32								rasterizerDiscardEnable;
+			VK_POLYGON_MODE_FILL,											//  VkPolygonMode							polygonMode;
+			cullModeFlags,													//  VkCullModeFlags							cullMode;
+			VK_FRONT_FACE_COUNTER_CLOCKWISE,								//  VkFrontFace								frontFace;
+			VK_FALSE,														//  VkBool32								depthBiasEnable;
+			0.0f,															//  float									depthBiasConstantFactor;
+			0.0f,															//  float									depthBiasClamp;
+			0.0f,															//  float									depthBiasSlopeFactor;
+			getLineWidth(),													//  float									lineWidth;
+		};
+
+		result.push_back(rasterizationStateCreateInfo);
+	}
+
+	return result;
+}
+
+const VkPipelineRasterizationStateCreateInfo* ConservativeTraingleTestInstance::getRasterizationStateCreateInfo	(void) const
+{
+	return &m_rasterizationStateCreateInfo[getIteration()];
+}
+
+const VkPipelineRasterizationLineStateCreateInfoEXT* ConservativeTraingleTestInstance::getLineRasterizationStateCreateInfo	(void) const
+{
+	return DE_NULL;
+}
+
+
+class ConservativeLineTestInstance : public BaseLineTestInstance
+{
+public:
+																				ConservativeLineTestInstance					(Context&								context,
+																																 ConservativeTestConfig					conservativeTestConfig,
+																																 VkSampleCountFlagBits					sampleCount);
+
+	void																		generateLines									(int									iteration,
+																																 std::vector<tcu::Vec4>&				outData,
+																																 std::vector<LineSceneSpec::SceneLine>&	outLines);
+	const VkPipelineRasterizationStateCreateInfo*								getRasterizationStateCreateInfo					(void) const;
+
+protected:
+	virtual const VkPipelineRasterizationLineStateCreateInfoEXT*				getLineRasterizationStateCreateInfo				(void) const;
+
+	virtual bool																compareAndVerify								(std::vector<LineSceneSpec::SceneLine>&	lines,
+																																 tcu::Surface&							resultImage,
+																																 std::vector<tcu::Vec4>&				drawBuffer);
+	virtual bool																compareAndVerifyOverestimatedNormal				(std::vector<LineSceneSpec::SceneLine>&	lines,
+																																 tcu::Surface&							resultImage);
+	virtual bool																compareAndVerifyOverestimatedDegenerate			(std::vector<LineSceneSpec::SceneLine>&	lines,
+																																 tcu::Surface&							resultImage);
+	virtual bool																compareAndVerifyUnderestimatedNormal			(std::vector<LineSceneSpec::SceneLine>&	lines,
+																																 tcu::Surface&							resultImage);
+	virtual bool																compareAndVerifyUnderestimatedDegenerate		(std::vector<LineSceneSpec::SceneLine>&	lines,
+																																 tcu::Surface&							resultImage);
+	void																		generateNormalLines								(int									iteration,
+																																 std::vector<tcu::Vec4>&				outData,
+																																 std::vector<LineSceneSpec::SceneLine>&	outLines);
+	void																		generateDegenerateLines							(int									iteration,
+																																 std::vector<tcu::Vec4>&				outData,
+																																 std::vector<LineSceneSpec::SceneLine>&	outLines);
+	void																		drawPrimitives									(tcu::Surface&							result,
+																																 const std::vector<tcu::Vec4>&			vertexData,
+																																 VkPrimitiveTopology					primitiveTopology);
+
+private:
+	const std::vector<VkPipelineRasterizationConservativeStateCreateInfoEXT>	initRasterizationConservativeStateCreateInfo	(void);
+	const std::vector<VkPipelineRasterizationStateCreateInfo>					initRasterizationStateCreateInfo				(void);
+
+	const ConservativeTestConfig												m_conservativeTestConfig;
+	const VkPhysicalDeviceConservativeRasterizationPropertiesEXT				m_conservativeRasterizationProperties;
+	const std::vector<VkPipelineRasterizationConservativeStateCreateInfoEXT>	m_rasterizationConservativeStateCreateInfo;
+	const std::vector<VkPipelineRasterizationStateCreateInfo>					m_rasterizationStateCreateInfo;
+};
+
+ConservativeLineTestInstance::ConservativeLineTestInstance (Context&				context,
+															ConservativeTestConfig	conservativeTestConfig,
+															VkSampleCountFlagBits	sampleCount)
+	: BaseLineTestInstance							(
+														context,
+														conservativeTestConfig.primitiveTopology,
+														PRIMITIVEWIDENESS_NARROW,
+														PRIMITIVESTRICTNESS_IGNORE,
+														sampleCount,
+														LINESTIPPLE_DISABLED,
+														VK_LINE_RASTERIZATION_MODE_DEFAULT_EXT,
+														0,
+														conservativeTestConfig.resolution,
+														conservativeTestConfig.lineWidth
+													)
+	, m_conservativeTestConfig						(conservativeTestConfig)
+	, m_conservativeRasterizationProperties			(context.getConservativeRasterizationPropertiesEXT())
+	, m_rasterizationConservativeStateCreateInfo	(initRasterizationConservativeStateCreateInfo())
+	, m_rasterizationStateCreateInfo				(initRasterizationStateCreateInfo())
+{
+}
+
+void ConservativeLineTestInstance::generateLines (int iteration, std::vector<tcu::Vec4>& outData, std::vector<LineSceneSpec::SceneLine>& outLines)
+{
+	if (m_conservativeTestConfig.degeneratePrimitives)
+		generateDegenerateLines(iteration, outData, outLines);
+	else
+		generateNormalLines(iteration, outData, outLines);
+}
+
+void ConservativeLineTestInstance::generateNormalLines (int iteration, std::vector<tcu::Vec4>& outData, std::vector<LineSceneSpec::SceneLine>& outLines)
+{
+	const char*		iterationComment		= "";
+	const float		halfPixel				= 1.0f / float(m_renderSize);
+	const float		extraOverestimationSize	= getExtraOverestimationSize(m_conservativeTestConfig.extraOverestimationSize, m_conservativeRasterizationProperties);
+	const float		overestimate			= 2.0f * halfPixel * (m_conservativeRasterizationProperties.primitiveOverestimationSize + extraOverestimationSize);
+	const float		overestimateMargin		= overestimate;
+	const float		underestimateMargin		= 0.0f;
+	const bool		isOverestimate			= m_conservativeTestConfig.conservativeRasterizationMode == VK_CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT;
+	const float		margin					= isOverestimate ? overestimateMargin : underestimateMargin;
+	const float		edge					= 4 * halfPixel + margin;
+	const float		left					= -1.0f + edge;
+	const float		right					= +1.0f - edge;
+	const float		up						= -1.0f + edge;
+	const float		down					= +1.0f - edge;
+
+	outData.reserve(2);
+
+	if (isOverestimate)
+	{
+		const char*		iterationComments[]		= { "Horizontal up line", "Vertical line", "Horizontal down line" };
+
+		iterationComment = iterationComments[iteration];
+
+		switch (iteration)
+		{
+			case 0:
+			{
+				outData.push_back(tcu::Vec4(              left,   up + halfPixel, 0.0f, 1.0f));
+				outData.push_back(tcu::Vec4(             right,   up + halfPixel, 0.0f, 1.0f));
+
+				break;
+			}
+
+			case 1:
+			{
+				outData.push_back(tcu::Vec4(  left + halfPixel,               up, 0.0f, 1.0f));
+				outData.push_back(tcu::Vec4(  left + halfPixel,             down, 0.0f, 1.0f));
+
+				break;
+			}
+
+			case 2:
+			{
+				outData.push_back(tcu::Vec4(              left, down - halfPixel, 0.0f, 1.0f));
+				outData.push_back(tcu::Vec4(             right, down - halfPixel, 0.0f, 1.0f));
+
+				break;
+			}
+
+			default:
+				TCU_THROW(InternalError, "Unexpected iteration");
+		}
+	}
+	else
+	{
+		const char*		iterationComments[]	= { "Horizontal lines", "Vertical lines", "Diagonal lines" };
+		const deUint32	subPixels			= 1u << m_subpixelBits;
+		const float		subPixelSize		= 2.0f * halfPixel / float(subPixels);
+		const float		blockStep			= 16.0f * 2.0f * halfPixel;
+		const float		lineWidth			= 2.0f * halfPixel * getLineWidth();
+		const float		offsets[]			=
+		{
+			float(1) * blockStep,
+			float(2) * blockStep + halfPixel,
+			float(3) * blockStep + 0.5f * lineWidth + 2.0f * subPixelSize,
+			float(4) * blockStep + 0.5f * lineWidth - 2.0f * subPixelSize,
+		};
+
+		iterationComment = iterationComments[iteration];
+
+		outData.reserve(DE_LENGTH_OF_ARRAY(offsets));
+
+		switch (iteration)
+		{
+			case 0:
+			{
+				for (size_t lineNdx = 0; lineNdx < DE_LENGTH_OF_ARRAY(offsets); ++lineNdx)
+				{
+					outData.push_back(tcu::Vec4( left + halfPixel, up + offsets[lineNdx], 0.0f, 1.0f));
+					outData.push_back(tcu::Vec4(right - halfPixel, up + offsets[lineNdx], 0.0f, 1.0f));
+				}
+
+				break;
+			}
+
+			case 1:
+			{
+				for (size_t lineNdx = 0; lineNdx < DE_LENGTH_OF_ARRAY(offsets); ++lineNdx)
+				{
+					outData.push_back(tcu::Vec4(left + offsets[lineNdx],   up + halfPixel, 0.0f, 1.0f));
+					outData.push_back(tcu::Vec4(left + offsets[lineNdx], down - halfPixel, 0.0f, 1.0f));
+				}
+
+				break;
+			}
+
+			case 2:
+			{
+				for (size_t lineNdx = 0; lineNdx < DE_LENGTH_OF_ARRAY(offsets); ++lineNdx)
+				{
+					outData.push_back(tcu::Vec4(left + offsets[lineNdx],          up + halfPixel, 0.0f, 1.0f));
+					outData.push_back(tcu::Vec4(      right - halfPixel, down - offsets[lineNdx], 0.0f, 1.0f));
+				}
+
+				break;
+			}
+
+			default:
+				TCU_THROW(InternalError, "Unexpected iteration");
+		}
+	}
+
+	DE_ASSERT(outData.size() % 2 == 0);
+	outLines.resize(outData.size() / 2);
+	for(size_t lineNdx = 0; lineNdx < outLines.size(); ++lineNdx)
+	{
+		outLines[lineNdx].positions[0] = outData[2 * lineNdx + 0];
+		outLines[lineNdx].positions[1] = outData[2 * lineNdx + 1];
+	}
+
+	// log
+	m_context.getTestContext().getLog()
+		<< tcu::TestLog::Message
+		<< "Testing " << iterationComment << " "
+		<< "with rendering " << outLines.size() << " line(s):"
+		<< tcu::TestLog::EndMessage;
+
+	for (int ndx = 0; ndx < (int)outLines.size(); ++ndx)
+	{
+		const deUint32	 multiplier	= m_renderSize / 2;
+
+		m_context.getTestContext().getLog()
+			<< tcu::TestLog::Message
+			<< "Line " << (ndx+1) << ":"
+			<< "\n\t" << outLines[ndx].positions[0] << " == " << (float(multiplier) * outLines[ndx].positions[0]) << "/" << multiplier
+			<< "\n\t" << outLines[ndx].positions[1] << " == " << (float(multiplier) * outLines[ndx].positions[1]) << "/" << multiplier
+			<< tcu::TestLog::EndMessage;
+	}
+}
+
+void ConservativeLineTestInstance::generateDegenerateLines (int iteration, std::vector<tcu::Vec4>& outData, std::vector<LineSceneSpec::SceneLine>& outLines)
+{
+	const bool		isOverestimate		= m_conservativeTestConfig.conservativeRasterizationMode == VK_CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT;
+	const float		pixelSize			= 2.0f / float(m_renderSize);
+	const deUint32	subPixels			= 1u << m_context.getDeviceProperties().limits.subPixelPrecisionBits;
+	const float		subPixelSize		= pixelSize / float(subPixels);
+	const char*		iterationComments[]	= { "Horizontal line", "Vertical line", "Diagonal line" };
+
+	outData.clear();
+
+	if (isOverestimate)
+	{
+		const float		extraOverestimationSize			= getExtraOverestimationSize(m_conservativeTestConfig.extraOverestimationSize, m_conservativeRasterizationProperties);
+		const float		totalOverestimate				= m_conservativeRasterizationProperties.primitiveOverestimationSize + extraOverestimationSize;
+		const float		totalOverestimateInSubPixels	= deFloatCeil(totalOverestimate * float(subPixels));
+		const float		overestimate					= subPixelSize * totalOverestimateInSubPixels;
+		const float		overestimateSafetyMargin		= subPixelSize * 0.125f;
+		const float		margin							= overestimate + overestimateSafetyMargin;
+		const float		originOffset					= -1.0f + 1 * pixelSize;
+		const float		originLeft						= originOffset + margin;
+		const float		originRight						= originOffset + margin + 0.25f * subPixelSize;
+		const float		originUp						= originOffset + margin;
+		const float		originDown						= originOffset + margin + 0.25f * subPixelSize;
+
+		switch (iteration)
+		{
+			case 0:
+			{
+				outData.push_back(tcu::Vec4( originLeft,   originUp, 0.0f, 1.0f));
+				outData.push_back(tcu::Vec4(originRight,   originUp, 0.0f, 1.0f));
+
+				break;
+			}
+
+			case 1:
+			{
+				outData.push_back(tcu::Vec4( originLeft,   originUp, 0.0f, 1.0f));
+				outData.push_back(tcu::Vec4( originLeft, originDown, 0.0f, 1.0f));
+
+				break;
+			}
+
+			case 2:
+			{
+				outData.push_back(tcu::Vec4( originLeft,   originUp, 0.0f, 1.0f));
+				outData.push_back(tcu::Vec4(originRight, originDown, 0.0f, 1.0f));
+
+				break;
+			}
+
+			default:
+				TCU_THROW(InternalError, "Unexpected iteration");
+		}
+	}
+	else
+	{
+		size_t rowStart	= 3 * getIteration();
+		size_t rowEnd	= 3 * (getIteration() + 1);
+
+		for (size_t rowNdx = rowStart; rowNdx < rowEnd; ++rowNdx)
+		for (size_t colNdx = 0; colNdx < 3 * 3; ++colNdx)
+		{
+			const float		originOffsetY	= -1.0f + float(4 * (1 + rowNdx)) * pixelSize;
+			const float		originOffsetX	= -1.0f + float(4 * (1 + colNdx)) * pixelSize;
+			const float		x0				= float(rowNdx % 3);
+			const float		y0				= float(rowNdx / 3);
+			const float		x1				= float(colNdx % 3);
+			const float		y1				= float(colNdx / 3);
+			const tcu::Vec4	p0				= tcu::Vec4(originOffsetX + x0 * pixelSize / 2.0f, originOffsetY + y0 * pixelSize / 2.0f, 0.0f, 1.0f);
+			const tcu::Vec4	p1				= tcu::Vec4(originOffsetX + x1 * pixelSize / 2.0f, originOffsetY + y1 * pixelSize / 2.0f, 0.0f, 1.0f);
+
+			if (x0 == x1 && y0 == y1)
+				continue;
+
+			outData.push_back(p0);
+			outData.push_back(p1);
+		}
+	}
+
+	outLines.resize(outData.size() / 2);
+
+	for (size_t ndx = 0; ndx < outLines.size(); ++ndx)
+	{
+		outLines[ndx].positions[0] = outData[2 * ndx + 0];
+		outLines[ndx].positions[1] = outData[2 * ndx + 1];
+	}
+
+	// log
+	m_context.getTestContext().getLog()
+		<< tcu::TestLog::Message
+		<< "Testing " << iterationComments[iteration] << " "
+		<< "with rendering " << outLines.size() << " line(s):"
+		<< tcu::TestLog::EndMessage;
+
+	for (int ndx = 0; ndx < (int)outLines.size(); ++ndx)
+	{
+		const deUint32	multiplierInt	= m_renderSize / 2;
+		const deUint32	multiplierFrac	= subPixels;
+		std::string		coordsString;
+
+		for (size_t vertexNdx = 0; vertexNdx < 2; ++vertexNdx)
+		{
+			const tcu::Vec4&	pos				= outLines[ndx].positions[vertexNdx];
+			std::ostringstream	coordsFloat;
+			std::ostringstream	coordsNatural;
+
+			for (int coordNdx = 0; coordNdx < 2; ++coordNdx)
+			{
+				const char*	sep		= (coordNdx < 1) ? "," : "";
+				const float	coord	= pos[coordNdx];
+				const char	sign	= deSign(coord) < 0 ? '-' : '+';
+				const float	m		= deFloatFloor(float(multiplierInt) * deFloatAbs(coord));
+				const float	r		= deFloatFrac(float(multiplierInt) * deFloatAbs(coord)) * float(multiplierFrac);
+
+				coordsFloat << std::fixed << std::setw(13) << std::setprecision(10) << coord << sep;
+				coordsNatural << sign << '(' << m << '+' << r << '/' << multiplierFrac << ')' << sep;
+			}
+
+			coordsString += "\n\t[" + coordsFloat.str() + "] == [" + coordsNatural.str() + "] / " + de::toString(multiplierInt);
+		}
+
+		m_context.getTestContext().getLog()
+			<< tcu::TestLog::Message
+			<< "Line " << (ndx + 1) << ':'
+			<< coordsString
+			<< tcu::TestLog::EndMessage;
+	}
+}
+
+void ConservativeLineTestInstance::drawPrimitives (tcu::Surface& result, const std::vector<tcu::Vec4>& vertexData, VkPrimitiveTopology primitiveTopology)
+{
+	if (m_conservativeTestConfig.degeneratePrimitives)
+	{
+		// Set provoking vertex color to white
+		tcu::Vec4				colorProvoking	(1.0f, 1.0f, 1.0f, 1.0f);
+		tcu::Vec4				colorOther		(0.0f, 1.0f, 1.0f, 1.0f);
+		std::vector<tcu::Vec4>	colorData;
+
+		colorData.reserve(vertexData.size());
+
+		for (size_t vertexNdx = 0; vertexNdx < vertexData.size(); ++vertexNdx)
+			if (vertexNdx % 2 == 0)
+				colorData.push_back(colorProvoking);
+			else
+				colorData.push_back(colorOther);
+
+		BaseRenderingTestInstance::drawPrimitives(result, vertexData, colorData, primitiveTopology);
+	}
+	else
+		BaseRenderingTestInstance::drawPrimitives(result, vertexData, primitiveTopology);
+}
+
+bool ConservativeLineTestInstance::compareAndVerify (std::vector<LineSceneSpec::SceneLine>& lines, tcu::Surface& resultImage, std::vector<tcu::Vec4>& drawBuffer)
+{
+	DE_UNREF(drawBuffer);
+
+	switch (m_conservativeTestConfig.conservativeRasterizationMode)
+	{
+		case VK_CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT:
+		{
+			if (m_conservativeTestConfig.degeneratePrimitives)
+				return compareAndVerifyOverestimatedDegenerate(lines, resultImage);
+			else
+				return compareAndVerifyOverestimatedNormal(lines, resultImage);
+
+			break;
+		}
+		case VK_CONSERVATIVE_RASTERIZATION_MODE_UNDERESTIMATE_EXT:
+		{
+			if (m_conservativeTestConfig.degeneratePrimitives)
+				return compareAndVerifyUnderestimatedDegenerate(lines, resultImage);
+			else
+				return compareAndVerifyUnderestimatedNormal(lines, resultImage);
+
+			break;
+		}
+
+		default:
+			TCU_THROW(InternalError, "Unknown conservative rasterization mode");
+	}
+}
+
+bool ConservativeLineTestInstance::compareAndVerifyOverestimatedNormal (std::vector<LineSceneSpec::SceneLine>& lines, tcu::Surface& resultImage)
+{
+	DE_UNREF(lines);
+
+	const int			b						= 3; // bar width
+	const int			w						= resultImage.getWidth() - 1;
+	const int			h						= resultImage.getHeight() - 1;
+	const int			xStarts[]				= {     1,     1,     1 };
+	const int			xEnds[]					= { w - 1,     b, w - 1 };
+	const int			yStarts[]				= {     1,     1, h - b };
+	const int			yEnds[]					= {     b, h - 1, h - 1 };
+	const int			xStart					= xStarts[getIteration()];
+	const int			xEnd					= xEnds[getIteration()];
+	const int			yStart					= yStarts[getIteration()];
+	const int			yEnd					= yEnds[getIteration()];
+	const tcu::RGBA		backgroundColor			= tcu::RGBA(0, 0, 0, 255);
+	const tcu::RGBA		foregroundColor			= tcu::RGBA(255, 255, 255, 255);
+	const tcu::RGBA		unexpectedPixelColor	= tcu::RGBA(255, 0, 0, 255);
+	tcu::TestLog&		log						= m_context.getTestContext().getLog();
+	int					errX					= 0;
+	int					errY					= 0;
+	deUint32			errValue				= 0;
+	bool				result					= true;
+
+	DE_ASSERT(resultImage.getHeight() == resultImage.getWidth());
+
+	for (int y = yStart; result && y < yEnd; ++y)
+	for (int x = xStart; result && x < xEnd; ++x)
+	{
+		if (resultImage.getPixel(x,y).getPacked() != foregroundColor.getPacked())
+		{
+			result		= false;
+			errX		= x;
+			errY		= y;
+			errValue	= resultImage.getPixel(x,y).getPacked();
+
+			break;
+		}
+	}
+
+	if (!result)
+	{
+		tcu::Surface	errorMask	(resultImage.getWidth(), resultImage.getHeight());
+
+		for (int y = 0; y < errorMask.getHeight(); ++y)
+		for (int x = 0; x < errorMask.getWidth(); ++x)
+			errorMask.setPixel(x, y, backgroundColor);
+
+		for (int y = yStart; y < yEnd; ++y)
+		for (int x = xStart; x < xEnd; ++x)
+		{
+			if (resultImage.getPixel(x,y).getPacked() != foregroundColor.getPacked())
+				errorMask.setPixel(x,y, unexpectedPixelColor);
+		}
+
+		log << tcu::TestLog::Message << "Invalid pixels found starting at " << errX << "," << errY << " value=0x" << std::hex << errValue
+			<< tcu::TestLog::EndMessage;
+		log << tcu::TestLog::ImageSet("Verification result", "Result of rendering")
+			<< tcu::TestLog::Image("Result",	"Result",		resultImage)
+			<< tcu::TestLog::Image("ErrorMask", "ErrorMask",	errorMask)
+			<< tcu::TestLog::EndImageSet;
+	}
+	else
+	{
+		log << tcu::TestLog::Message << "No invalid pixels found." << tcu::TestLog::EndMessage;
+		log << tcu::TestLog::ImageSet("Verification result", "Result of rendering")
+			<< tcu::TestLog::Image("Result", "Result", resultImage)
+			<< tcu::TestLog::EndImageSet;
+	}
+
+	return result;
+}
+
+bool ConservativeLineTestInstance::compareAndVerifyOverestimatedDegenerate (std::vector<LineSceneSpec::SceneLine>& lines, tcu::Surface& resultImage)
+{
+	DE_UNREF(lines);
+
+	const char*			iterationComments[]		= { "Horizontal line", "Vertical line", "Diagonal line" };
+	const tcu::RGBA		backgroundColor			= tcu::RGBA(0, 0, 0, 255);
+	const tcu::RGBA		foregroundColor			= tcu::RGBA(255, 255, 255, 255);
+	const tcu::RGBA		unexpectedPixelColor	= tcu::RGBA(255, 0, 0, 255);
+	tcu::TestLog&		log						= m_context.getTestContext().getLog();
+	bool				result					= true;
+	tcu::Surface		referenceImage			(resultImage.getWidth(), resultImage.getHeight());
+
+	for (int y = 0; y < resultImage.getHeight(); ++y)
+	for (int x = 0; x < resultImage.getWidth(); ++x)
+		referenceImage.setPixel(x, y, backgroundColor);
+
+	if (m_conservativeRasterizationProperties.degenerateLinesRasterized)
+	{
+		log << tcu::TestLog::Message << "Lines expected to be rasterized with white color" << tcu::TestLog::EndMessage;
+
+		// This pixel will alway be covered due to the placement of the line.
+		referenceImage.setPixel(1, 1, foregroundColor);
+
+		// Additional pixels will be covered based on the extra bloat added to the primitive.
+		const float extraOverestimation = getExtraOverestimationSize(m_conservativeTestConfig.extraOverestimationSize, m_conservativeRasterizationProperties);
+		const int xExtent = 1 + int((extraOverestimation * 2.0f) + 0.5f);
+		const int yExtent = xExtent;
+
+		for (int y = 0; y <= yExtent; ++y)
+		for (int x = 0; x <= xExtent; ++x)
+			referenceImage.setPixel(x, y, foregroundColor);
+	}
+	else
+		log << tcu::TestLog::Message << "Lines expected to be culled" << tcu::TestLog::EndMessage;
+
+	for (int y = 0; result && y < resultImage.getHeight(); ++y)
+	for (int x = 0; result && x < resultImage.getWidth(); ++x)
+	{
+		if (resultImage.getPixel(x, y).getPacked() != referenceImage.getPixel(x, y).getPacked())
+		{
+			result = false;
+
+			break;
+		}
+	}
+
+	if (!result)
+	{
+		tcu::Surface	errorMask	(resultImage.getWidth(), resultImage.getHeight());
+
+		for (int y = 0; y < errorMask.getHeight(); ++y)
+		for (int x = 0; x < errorMask.getWidth(); ++x)
+		{
+			if (resultImage.getPixel(x, y).getPacked() != referenceImage.getPixel(x, y).getPacked())
+				errorMask.setPixel(x, y, unexpectedPixelColor);
+			else
+				errorMask.setPixel(x, y, backgroundColor);
+		}
+
+		log << tcu::TestLog::Message << "Invalid pixels found for mode " << iterationComments[getIteration()]
+			<< tcu::TestLog::EndMessage;
+		log << tcu::TestLog::ImageSet("Verification result", "Result of rendering")
+			<< tcu::TestLog::Image("Result",	"Result",		resultImage)
+			<< tcu::TestLog::Image("Reference",	"Reference",	referenceImage)
+			<< tcu::TestLog::Image("ErrorMask", "ErrorMask",	errorMask)
+			<< tcu::TestLog::EndImageSet;
+	}
+	else
+	{
+		log << tcu::TestLog::Message << "No invalid pixels found." << tcu::TestLog::EndMessage;
+		log << tcu::TestLog::ImageSet("Verification result", "Result of rendering")
+			<< tcu::TestLog::Image("Result", "Result", resultImage)
+			<< tcu::TestLog::EndImageSet;
+	}
+
+	return result;
+}
+
+bool ConservativeLineTestInstance::compareAndVerifyUnderestimatedNormal (std::vector<LineSceneSpec::SceneLine>& lines, tcu::Surface& resultImage)
+{
+	DE_UNREF(lines);
+
+	const tcu::RGBA		backgroundColor			= tcu::RGBA(0, 0, 0, 255);
+	const tcu::RGBA		foregroundColor			= tcu::RGBA(255, 255, 255, 255);
+	const tcu::RGBA		unexpectedPixelColor	= tcu::RGBA(255, 0, 0, 255);
+	tcu::TestLog&		log						= m_context.getTestContext().getLog();
+	int					errX					= -1;
+	int					errY					= -1;
+	tcu::RGBA			errValue;
+	bool				result					= true;
+	tcu::Surface		referenceImage			(resultImage.getWidth(), resultImage.getHeight());
+
+	DE_ASSERT(resultImage.getHeight() == resultImage.getWidth());
+
+	for (int y = 0; y < referenceImage.getHeight(); ++y)
+	for (int x = 0; x < referenceImage.getWidth(); ++x)
+		referenceImage.setPixel(x, y, backgroundColor);
+
+	if (getLineWidth() > 1.0f)
+	{
+		const tcu::IVec2	viewportSize(resultImage.getWidth(), resultImage.getHeight());
+
+		for (size_t lineNdx = 0; lineNdx < lines.size(); ++lineNdx)
+		for (int y = 0; y < resultImage.getHeight(); ++y)
+		for (int x = 0; x < resultImage.getWidth(); ++x)
+		{
+			if (calculateUnderestimateLineCoverage(lines[lineNdx].positions[0], lines[lineNdx].positions[1], getLineWidth(), tcu::IVec2(x,y), viewportSize) == tcu::COVERAGE_FULL)
+				referenceImage.setPixel(x, y, foregroundColor);
+		}
+	}
+
+	for (int y = 0; result && y < resultImage.getHeight(); ++y)
+	for (int x = 0; result && x < resultImage.getWidth(); ++x)
+	{
+		if (resultImage.getPixel(x,y).getPacked() != referenceImage.getPixel(x,y).getPacked())
+		{
+			result		= false;
+			errX		= x;
+			errY		= y;
+			errValue	= resultImage.getPixel(x,y);
+
+			break;
+		}
+	}
+
+	if (!result)
+	{
+		tcu::Surface	errorMask	(resultImage.getWidth(), resultImage.getHeight());
+
+		for (int y = 0; y < errorMask.getHeight(); ++y)
+		for (int x = 0; x < errorMask.getWidth(); ++x)
+			errorMask.setPixel(x, y, backgroundColor);
+
+		for (int y = 0; y < errorMask.getHeight(); ++y)
+		for (int x = 0; x < errorMask.getWidth();  ++x)
+		{
+			if (resultImage.getPixel(x,y).getPacked() != referenceImage.getPixel(x,y).getPacked())
+				errorMask.setPixel(x, y, unexpectedPixelColor);
+		}
+
+		log << tcu::TestLog::Message << "Invalid pixels found starting at " << errX << "," << errY << " errValue=" << errValue
+			<< tcu::TestLog::EndMessage;
+		log << tcu::TestLog::ImageSet("Verification result", "Result of rendering")
+			<< tcu::TestLog::Image("Result",	"Result",		resultImage)
+			<< tcu::TestLog::Image("Reference",	"Reference",	referenceImage)
+			<< tcu::TestLog::Image("ErrorMask", "ErrorMask",	errorMask)
+			<< tcu::TestLog::EndImageSet;
+	}
+	else
+	{
+		log << tcu::TestLog::Message << "No invalid pixels found." << tcu::TestLog::EndMessage;
+		log << tcu::TestLog::ImageSet("Verification result", "Result of rendering")
+			<< tcu::TestLog::Image("Result", "Result", resultImage)
+			<< tcu::TestLog::EndImageSet;
+	}
+
+	return result;
+}
+
+bool ConservativeLineTestInstance::compareAndVerifyUnderestimatedDegenerate (std::vector<LineSceneSpec::SceneLine>& lines, tcu::Surface& resultImage)
+{
+	DE_UNREF(lines);
+
+	const tcu::RGBA		backgroundColor			= tcu::RGBA(0, 0, 0, 255);
+	const tcu::RGBA		unexpectedPixelColor	= tcu::RGBA(255, 0, 0, 255);
+	tcu::TestLog&		log						= m_context.getTestContext().getLog();
+	bool				result					= true;
+	tcu::Surface		referenceImage			(resultImage.getWidth(), resultImage.getHeight());
+
+	for (int y = 0; y < resultImage.getHeight(); ++y)
+	for (int x = 0; x < resultImage.getWidth(); ++x)
+		referenceImage.setPixel(x, y, backgroundColor);
+
+	log << tcu::TestLog::Message << "No lines expected to be rasterized" << tcu::TestLog::EndMessage;
+
+	for (int y = 0; result && y < resultImage.getHeight(); ++y)
+	for (int x = 0; result && x < resultImage.getWidth(); ++x)
+	{
+		if (resultImage.getPixel(x,y).getPacked() != referenceImage.getPixel(x,y).getPacked())
+		{
+			result = false;
+
+			break;
+		}
+	}
+
+	if (!result)
+	{
+		tcu::Surface	errorMask	(resultImage.getWidth(), resultImage.getHeight());
+
+		for (int y = 0; y < errorMask.getHeight(); ++y)
+		for (int x = 0; x < errorMask.getWidth(); ++x)
+		{
+			if (resultImage.getPixel(x, y).getPacked() != referenceImage.getPixel(x, y).getPacked())
+				errorMask.setPixel(x, y, unexpectedPixelColor);
+			else
+				errorMask.setPixel(x, y, backgroundColor);
+		}
+
+		log << tcu::TestLog::Message << "Invalid pixels found" << tcu::TestLog::EndMessage;
+		log << tcu::TestLog::ImageSet("Verification result", "Result of rendering")
+			<< tcu::TestLog::Image("Result",	"Result",		resultImage)
+			<< tcu::TestLog::Image("Reference",	"Reference",	referenceImage)
+			<< tcu::TestLog::Image("ErrorMask", "ErrorMask",	errorMask)
+			<< tcu::TestLog::EndImageSet;
+	}
+	else
+	{
+		log << tcu::TestLog::Message << "No invalid pixels found." << tcu::TestLog::EndMessage;
+		log << tcu::TestLog::ImageSet("Verification result", "Result of rendering")
+			<< tcu::TestLog::Image("Result", "Result", resultImage)
+			<< tcu::TestLog::EndImageSet;
+	}
+
+	return result;
+}
+
+const std::vector<VkPipelineRasterizationConservativeStateCreateInfoEXT> ConservativeLineTestInstance::initRasterizationConservativeStateCreateInfo (void)
+{
+	const float															extraOverestimationSize	= getExtraOverestimationSize(m_conservativeTestConfig.extraOverestimationSize, m_conservativeRasterizationProperties);
+	std::vector<VkPipelineRasterizationConservativeStateCreateInfoEXT>	result;
+
+	result.reserve(getIterationCount());
+
+	for (int iteration = 0; iteration < getIterationCount(); ++iteration)
+	{
+		const VkPipelineRasterizationConservativeStateCreateInfoEXT	rasterizationConservativeStateCreateInfo	=
+		{
+			VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_CONSERVATIVE_STATE_CREATE_INFO_EXT,	//  VkStructureType											sType;
+			DE_NULL,																		//  const void*												pNext;
+			(VkPipelineRasterizationConservativeStateCreateFlagsEXT)0,						//  VkPipelineRasterizationConservativeStateCreateFlagsEXT	flags;
+			m_conservativeTestConfig.conservativeRasterizationMode,							//  VkConservativeRasterizationModeEXT						conservativeRasterizationMode;
+			extraOverestimationSize															//  float													extraPrimitiveOverestimationSize;
+		};
+
+		result.push_back(rasterizationConservativeStateCreateInfo);
+	}
+
+	return result;
+}
+
+const std::vector<VkPipelineRasterizationStateCreateInfo> ConservativeLineTestInstance::initRasterizationStateCreateInfo (void)
+{
+	std::vector<VkPipelineRasterizationStateCreateInfo>	result;
+
+	result.reserve(getIterationCount());
+
+	for (int iteration = 0; iteration < getIterationCount(); ++iteration)
+	{
+		const VkPipelineRasterizationStateCreateInfo	rasterizationStateCreateInfo	=
+		{
+			VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO,		//  VkStructureType							sType;
+			&m_rasterizationConservativeStateCreateInfo[iteration],			//  const void*								pNext;
+			0,																//  VkPipelineRasterizationStateCreateFlags	flags;
+			false,															//  VkBool32								depthClampEnable;
+			false,															//  VkBool32								rasterizerDiscardEnable;
+			VK_POLYGON_MODE_FILL,											//  VkPolygonMode							polygonMode;
+			VK_CULL_MODE_NONE,												//  VkCullModeFlags							cullMode;
+			VK_FRONT_FACE_COUNTER_CLOCKWISE,								//  VkFrontFace								frontFace;
+			VK_FALSE,														//  VkBool32								depthBiasEnable;
+			0.0f,															//  float									depthBiasConstantFactor;
+			0.0f,															//  float									depthBiasClamp;
+			0.0f,															//  float									depthBiasSlopeFactor;
+			getLineWidth(),													//  float									lineWidth;
+		};
+
+		result.push_back(rasterizationStateCreateInfo);
+	}
+
+	return result;
+}
+
+const VkPipelineRasterizationStateCreateInfo* ConservativeLineTestInstance::getRasterizationStateCreateInfo	(void) const
+{
+	return &m_rasterizationStateCreateInfo[getIteration()];
+}
+
+const VkPipelineRasterizationLineStateCreateInfoEXT* ConservativeLineTestInstance::getLineRasterizationStateCreateInfo	(void) const
+{
+	return DE_NULL;
+}
+
+
+class ConservativePointTestInstance : public PointTestInstance
+{
+public:
+																				ConservativePointTestInstance					(Context&				context,
+																																 ConservativeTestConfig	conservativeTestConfig,
+																																 VkSampleCountFlagBits	sampleCount)
+																					: PointTestInstance								(
+																																		context,
+																																		PRIMITIVEWIDENESS_NARROW,
+																																		PRIMITIVESTRICTNESS_IGNORE,
+																																		sampleCount,
+																																		LINESTIPPLE_DISABLED,
+																																		VK_LINE_RASTERIZATION_MODE_DEFAULT_EXT,
+																																		0,
+																																		conservativeTestConfig.resolution,
+																																		conservativeTestConfig.lineWidth
+																																	)
+																					, m_conservativeTestConfig						(conservativeTestConfig)
+																					, m_conservativeRasterizationProperties			(context.getConservativeRasterizationPropertiesEXT())
+																					, m_rasterizationConservativeStateCreateInfo	(initRasterizationConservativeStateCreateInfo())
+																					, m_rasterizationStateCreateInfo				(initRasterizationStateCreateInfo())
+																					, m_renderStart									()
+																					, m_renderEnd									()
+																				{}
+
+	void																		generatePoints									(int										iteration,
+																																 std::vector<tcu::Vec4>&					outData,
+																																 std::vector<PointSceneSpec::ScenePoint>&	outPoints);
+	const VkPipelineRasterizationStateCreateInfo*								getRasterizationStateCreateInfo					(void) const;
+
+protected:
+	virtual const VkPipelineRasterizationLineStateCreateInfoEXT*				getLineRasterizationStateCreateInfo				(void) const;
+
+	virtual bool																compareAndVerify								(std::vector<PointSceneSpec::ScenePoint>&	points,
+																																 tcu::Surface&								resultImage,
+																																 std::vector<tcu::Vec4>&					drawBuffer);
+	virtual bool																compareAndVerifyOverestimated					(std::vector<PointSceneSpec::ScenePoint>&	points,
+																																 tcu::Surface&								resultImage);
+	virtual bool																compareAndVerifyUnderestimated					(std::vector<PointSceneSpec::ScenePoint>&	points,
+																																 tcu::Surface&								resultImage);
+
+private:
+	const std::vector<VkPipelineRasterizationConservativeStateCreateInfoEXT>	initRasterizationConservativeStateCreateInfo	(void);
+	const std::vector<VkPipelineRasterizationStateCreateInfo>					initRasterizationStateCreateInfo				(void);
+
+	const ConservativeTestConfig												m_conservativeTestConfig;
+	const VkPhysicalDeviceConservativeRasterizationPropertiesEXT				m_conservativeRasterizationProperties;
+	const std::vector<VkPipelineRasterizationConservativeStateCreateInfoEXT>	m_rasterizationConservativeStateCreateInfo;
+	const std::vector<VkPipelineRasterizationStateCreateInfo>					m_rasterizationStateCreateInfo;
+	std::vector<int>															m_renderStart;
+	std::vector<int>															m_renderEnd;
+};
+
+void ConservativePointTestInstance::generatePoints (int iteration, std::vector<tcu::Vec4>& outData, std::vector<PointSceneSpec::ScenePoint>& outPoints)
+{
+	const float	pixelSize		= 2.0f / float(m_renderSize);
+	const bool	isOverestimate	= m_conservativeTestConfig.conservativeRasterizationMode == VK_CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT;
+
+	m_renderStart.clear();
+	m_renderEnd.clear();
+
+	if (isOverestimate)
+	{
+		const float	extraOverestimationSize	= getExtraOverestimationSize(m_conservativeTestConfig.extraOverestimationSize, m_conservativeRasterizationProperties);
+		const float	overestimate			= m_conservativeRasterizationProperties.primitiveOverestimationSize + extraOverestimationSize;
+		const float	halfRenderAreaSize		= overestimate + 0.5f;
+		const float	pointCenterOffset		= 2.0f + 0.5f * float(iteration) + halfRenderAreaSize;
+		const float	pointEdgeStart			= pointCenterOffset - halfRenderAreaSize;
+		const float	pointEdgeEnd			= pointEdgeStart + 2 * halfRenderAreaSize;
+		const int	renderStart				= int(deFloatFloor(pointEdgeStart)) + int((deFloatFrac(pointEdgeStart) > 0.0f) ? 0 : -1);
+		const int	renderEnd				= int(deFloatCeil(pointEdgeEnd)) + int((deFloatFrac(pointEdgeEnd) > 0.0f) ? 0 : 1);
+
+		outData.push_back(tcu::Vec4(-1.0f + pixelSize * pointCenterOffset, -1.0f + pixelSize * pointCenterOffset, 0.0f, 1.0f));
+
+		m_renderStart.push_back(renderStart);
+		m_renderEnd.push_back(renderEnd);
+	}
+	else
+	{
+		const float	pointSize			= m_conservativeTestConfig.lineWidth;
+		const float	halfRenderAreaSize	= pointSize / 2.0f;
+
+		switch (iteration)
+		{
+			case 0:
+			{
+				const float	pointCenterOffset	= (pointSize + 1.0f + deFloatFrac(pointSize)) / 2.0f;
+				const float	pointEdgeStart		= pointCenterOffset - halfRenderAreaSize;
+				const float	pointEdgeEnd		= pointEdgeStart + 2.0f * halfRenderAreaSize;
+				const int	renderStart			= (m_renderSize / 2) + int(deFloatCeil(pointEdgeStart));
+				const int	renderEnd			= (m_renderSize / 2) + int(deFloatFloor(pointEdgeEnd));
+
+				outData.push_back(tcu::Vec4(pixelSize * pointCenterOffset, pixelSize * pointCenterOffset, 0.0f, 1.0f));
+
+				m_renderStart.push_back(renderStart);
+				m_renderEnd.push_back(renderEnd);
+
+				break;
+			}
+
+			case 1:
+			{
+				const float subPixelSize		= 1.0f / float(1u<<(m_subpixelBits - 1));
+				const float	pointBottomLeft		= 1.0f - subPixelSize;
+				const float	pointCenterOffset	= pointBottomLeft + pointSize / 2.0f;
+				const float	pointEdgeStart		= pointCenterOffset - halfRenderAreaSize;
+				const float	pointEdgeEnd		= pointEdgeStart + 2.0f * halfRenderAreaSize;
+				const int	renderStart			= (m_renderSize / 2) + int(deFloatCeil(pointEdgeStart));
+				const int	renderEnd			= (m_renderSize / 2) + int(deFloatFloor(pointEdgeEnd));
+
+				outData.push_back(tcu::Vec4(pixelSize * pointCenterOffset, pixelSize * pointCenterOffset, 0.0f, 1.0f));
+
+				m_renderStart.push_back(renderStart);
+				m_renderEnd.push_back(renderEnd);
+
+				break;
+			}
+
+			case 2:
+			{
+				// Edges of a point are considered not covered. Top-left coverage rule is not applicable for underestimate rasterization.
+				const float	pointCenterOffset	= (pointSize + deFloatFrac(pointSize)) / 2.0f;
+				const float	pointEdgeStart		= pointCenterOffset - halfRenderAreaSize;
+				const float	pointEdgeEnd		= pointEdgeStart + 2.0f * halfRenderAreaSize;
+				const int	renderStart			= (m_renderSize / 2) + int(deFloatCeil(pointEdgeStart)) + 1;
+				const int	renderEnd			= (m_renderSize / 2) + int(deFloatFloor(pointEdgeEnd)) - 1;
+
+				outData.push_back(tcu::Vec4(pixelSize * pointCenterOffset, pixelSize * pointCenterOffset, 0.0f, 1.0f));
+
+				m_renderStart.push_back(renderStart);
+				m_renderEnd.push_back(renderEnd);
+
+				break;
+			}
+
+			default:
+				TCU_THROW(InternalError, "Unexpected iteration");
+		}
+	}
+
+	outPoints.resize(outData.size());
+	for (size_t ndx = 0; ndx < outPoints.size(); ++ndx)
+	{
+		outPoints[ndx].position = outData[ndx];
+		outPoints[ndx].pointSize = getPointSize();
+	}
+
+	// log
+	m_context.getTestContext().getLog()
+		<< tcu::TestLog::Message
+		<< "Testing conservative point rendering "
+		<< "with rendering " << outPoints.size() << " points(s):"
+		<< tcu::TestLog::EndMessage;
+	for (int ndx = 0; ndx < (int)outPoints.size(); ++ndx)
+	{
+		const deUint32	 multiplier	= m_renderSize / 2;
+
+		m_context.getTestContext().getLog()
+			<< tcu::TestLog::Message
+			<< "Point " << (ndx+1) << ":"
+			<< "\n\t" << outPoints[ndx].position << " == " << (float(multiplier) * outPoints[ndx].position) << "/" << multiplier
+			<< tcu::TestLog::EndMessage;
+	}
+}
+
+bool ConservativePointTestInstance::compareAndVerify (std::vector<PointSceneSpec::ScenePoint>& points, tcu::Surface& resultImage, std::vector<tcu::Vec4>& drawBuffer)
+{
+	DE_UNREF(drawBuffer);
+
+	switch (m_conservativeTestConfig.conservativeRasterizationMode)
+	{
+		case VK_CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT:
+		{
+			return compareAndVerifyOverestimated(points, resultImage);
+		}
+		case VK_CONSERVATIVE_RASTERIZATION_MODE_UNDERESTIMATE_EXT:
+		{
+			return compareAndVerifyUnderestimated(points, resultImage);
+		}
+
+		default:
+			TCU_THROW(InternalError, "Unknown conservative rasterization mode");
+	}
+}
+
+bool ConservativePointTestInstance::compareAndVerifyOverestimated (std::vector<PointSceneSpec::ScenePoint>& points, tcu::Surface& resultImage)
+{
+	DE_UNREF(points);
+
+	const char*			iterationComments[]		= { "Edges and corners", "Partial coverage", "Edges and corners" };
+	const tcu::RGBA		backgroundColor			= tcu::RGBA(0, 0, 0, 255);
+	const tcu::RGBA		foregroundColor			= tcu::RGBA(255, 255, 255, 255);
+	const tcu::RGBA		unexpectedPixelColor	= tcu::RGBA(255, 0, 0, 255);
+	tcu::TestLog&		log						= m_context.getTestContext().getLog();
+	int					errX					= 0;
+	int					errY					= 0;
+	deUint32			errValue				= 0;
+	bool				result					= true;
+
+	log << tcu::TestLog::Message << "Points expected to be rasterized with white color" << tcu::TestLog::EndMessage;
+	log << tcu::TestLog::Message << "Testing " << iterationComments[getIteration()] << tcu::TestLog::EndMessage;
+
+	for (size_t renderAreaNdx = 0; result && renderAreaNdx < m_renderStart.size(); ++renderAreaNdx)
+	{
+		const int renderStart	= m_renderStart[renderAreaNdx];
+		const int renderEnd		= m_renderEnd[renderAreaNdx];
+
+		for (int y = renderStart; result && y < renderEnd; ++y)
+		for (int x = renderStart; result && x < renderEnd; ++x)
+		{
+			if (resultImage.getPixel(x,y).getPacked() != foregroundColor.getPacked())
+			{
+				result		= false;
+				errX		= x;
+				errY		= y;
+				errValue	= resultImage.getPixel(x, y).getPacked();
+
+				break;
+			}
+		}
+	}
+
+	if (!result)
+	{
+		tcu::Surface		referenceImage	(resultImage.getWidth(), resultImage.getHeight());
+		tcu::Surface		errorMask		(resultImage.getWidth(), resultImage.getHeight());
+		std::ostringstream	css;
+
+		for (int y = 0; y < resultImage.getHeight(); ++y)
+		for (int x = 0; x < resultImage.getWidth(); ++x)
+			referenceImage.setPixel(x, y, backgroundColor);
+
+		for (size_t renderAreaNdx = 0; result && renderAreaNdx < m_renderStart.size(); ++renderAreaNdx)
+		{
+			const int renderStart	= m_renderStart[renderAreaNdx];
+			const int renderEnd		= m_renderEnd[renderAreaNdx];
+
+			for (int y = renderStart; y < renderEnd; ++y)
+			for (int x = renderStart; x < renderEnd; ++x)
+				referenceImage.setPixel(x, y, foregroundColor);
+		}
+
+		for (int y = 0; y < errorMask.getHeight(); ++y)
+		for (int x = 0; x < errorMask.getWidth(); ++x)
+		{
+			if (resultImage.getPixel(x, y).getPacked() != referenceImage.getPixel(x, y).getPacked())
+				errorMask.setPixel(x, y, unexpectedPixelColor);
+			else
+				errorMask.setPixel(x, y, backgroundColor);
+		}
+
+		css << std::endl;
+		for (size_t renderAreaNdx = 0; result && renderAreaNdx < m_renderStart.size(); ++renderAreaNdx)
+		{
+			const int renderStart	= m_renderStart[renderAreaNdx];
+			const int renderEnd		= m_renderEnd[renderAreaNdx];
+
+			css << "[" << renderStart << "," << renderEnd << ") x [" << renderStart << "," << renderEnd << ")" << std::endl;
+		}
+
+		log << tcu::TestLog::Message << "Invalid pixels found starting at " << errX << "," << errY << " value=0x" << std::hex << errValue
+			<< tcu::TestLog::EndMessage;
+		log << tcu::TestLog::Message << "Expected area(s) to be filled:" << css.str()
+			<< tcu::TestLog::EndMessage;
+		log << tcu::TestLog::ImageSet("Verification result", "Result of rendering")
+			<< tcu::TestLog::Image("Result",	"Result",		resultImage)
+			<< tcu::TestLog::Image("Reference",	"Reference",	referenceImage)
+			<< tcu::TestLog::Image("ErrorMask", "ErrorMask",	errorMask)
+			<< tcu::TestLog::EndImageSet;
+	}
+	else
+	{
+		log << tcu::TestLog::Message << "No invalid pixels found." << tcu::TestLog::EndMessage;
+		log << tcu::TestLog::ImageSet("Verification result", "Result of rendering")
+			<< tcu::TestLog::Image("Result", "Result", resultImage)
+			<< tcu::TestLog::EndImageSet;
+	}
+
+	return result;
+}
+
+bool ConservativePointTestInstance::compareAndVerifyUnderestimated (std::vector<PointSceneSpec::ScenePoint>& points, tcu::Surface& resultImage)
+{
+	DE_UNREF(points);
+
+	const char*			iterationComments[]		= { "Full coverage", "Full coverage with subpixel", "Exact coverage" };
+	const tcu::RGBA		backgroundColor			= tcu::RGBA(0, 0, 0, 255);
+	const tcu::RGBA		foregroundColor			= tcu::RGBA(255, 255, 255, 255);
+	const tcu::RGBA		unexpectedPixelColor	= tcu::RGBA(255, 0, 0, 255);
+	tcu::TestLog&		log						= m_context.getTestContext().getLog();
+	int					errX					= 0;
+	int					errY					= 0;
+	deUint32			errValue				= 0;
+	bool				result					= true;
+	tcu::Surface		referenceImage			(resultImage.getWidth(), resultImage.getHeight());
+
+	log << tcu::TestLog::Message << "Points expected to be rasterized with white color" << tcu::TestLog::EndMessage;
+	log << tcu::TestLog::Message << "Testing " << iterationComments[getIteration()] << tcu::TestLog::EndMessage;
+
+	for (int y = 0; y < resultImage.getHeight(); ++y)
+	for (int x = 0; x < resultImage.getWidth(); ++x)
+		referenceImage.setPixel(x, y, backgroundColor);
+
+	for (size_t renderAreaNdx = 0; result && renderAreaNdx < m_renderStart.size(); ++renderAreaNdx)
+	{
+		const int renderStart	= m_renderStart[renderAreaNdx];
+		const int renderEnd		= m_renderEnd[renderAreaNdx];
+
+		for (int y = renderStart; y < renderEnd; ++y)
+		for (int x = renderStart; x < renderEnd; ++x)
+			referenceImage.setPixel(x, y, foregroundColor);
+	}
+
+	for (int y = 0; result && y < resultImage.getHeight(); ++y)
+	for (int x = 0; result && x < resultImage.getWidth(); ++x)
+	{
+		if (resultImage.getPixel(x, y).getPacked() != referenceImage.getPixel(x, y).getPacked())
+		{
+			result		= false;
+			errX		= x;
+			errY		= y;
+			errValue	= resultImage.getPixel(x, y).getPacked();
+
+			break;
+		}
+	}
+
+	if (!result)
+	{
+		tcu::Surface		errorMask	(resultImage.getWidth(), resultImage.getHeight());
+		std::ostringstream	css;
+
+		for (int y = 0; y < errorMask.getHeight(); ++y)
+		for (int x = 0; x < errorMask.getWidth(); ++x)
+		{
+			if (resultImage.getPixel(x, y).getPacked() != referenceImage.getPixel(x, y).getPacked())
+				errorMask.setPixel(x, y, unexpectedPixelColor);
+			else
+				errorMask.setPixel(x, y, backgroundColor);
+		}
+
+		css << std::endl;
+		for (size_t renderAreaNdx = 0; result && renderAreaNdx < m_renderStart.size(); ++renderAreaNdx)
+		{
+			const int renderStart	= m_renderStart[renderAreaNdx];
+			const int renderEnd		= m_renderEnd[renderAreaNdx];
+
+			css << "[" << renderStart << "," << renderEnd << ") x [" << renderStart << "," << renderEnd << ")" << std::endl;
+		}
+
+		log << tcu::TestLog::Message << "Invalid pixels found starting at " << errX << "," << errY << " value=0x" << std::hex << errValue
+			<< tcu::TestLog::EndMessage;
+		log << tcu::TestLog::Message << "Expected area(s) to be filled:" << css.str()
+			<< tcu::TestLog::EndMessage;
+		log << tcu::TestLog::ImageSet("Verification result", "Result of rendering")
+			<< tcu::TestLog::Image("Result",	"Result",		resultImage)
+			<< tcu::TestLog::Image("Reference",	"Reference",	referenceImage)
+			<< tcu::TestLog::Image("ErrorMask", "ErrorMask",	errorMask)
+			<< tcu::TestLog::EndImageSet;
+	}
+	else
+	{
+		log << tcu::TestLog::Message << "No invalid pixels found." << tcu::TestLog::EndMessage;
+		log << tcu::TestLog::ImageSet("Verification result", "Result of rendering")
+			<< tcu::TestLog::Image("Result", "Result", resultImage)
+			<< tcu::TestLog::EndImageSet;
+	}
+
+	return result;
+}
+
+const std::vector<VkPipelineRasterizationConservativeStateCreateInfoEXT> ConservativePointTestInstance::initRasterizationConservativeStateCreateInfo (void)
+{
+	const float															extraOverestimationSize	= getExtraOverestimationSize(m_conservativeTestConfig.extraOverestimationSize, m_conservativeRasterizationProperties);
+	std::vector<VkPipelineRasterizationConservativeStateCreateInfoEXT>	result;
+
+	result.reserve(getIterationCount());
+
+	for (int iteration = 0; iteration < getIterationCount(); ++iteration)
+	{
+		const VkPipelineRasterizationConservativeStateCreateInfoEXT	rasterizationConservativeStateCreateInfo	=
+		{
+			VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_CONSERVATIVE_STATE_CREATE_INFO_EXT,	//  VkStructureType											sType;
+			DE_NULL,																		//  const void*												pNext;
+			(VkPipelineRasterizationConservativeStateCreateFlagsEXT)0,						//  VkPipelineRasterizationConservativeStateCreateFlagsEXT	flags;
+			m_conservativeTestConfig.conservativeRasterizationMode,							//  VkConservativeRasterizationModeEXT						conservativeRasterizationMode;
+			extraOverestimationSize															//  float													extraPrimitiveOverestimationSize;
+		};
+
+		result.push_back(rasterizationConservativeStateCreateInfo);
+	}
+
+	return result;
+}
+
+const std::vector<VkPipelineRasterizationStateCreateInfo> ConservativePointTestInstance::initRasterizationStateCreateInfo (void)
+{
+	std::vector<VkPipelineRasterizationStateCreateInfo>	result;
+
+	result.reserve(getIterationCount());
+
+	for (int iteration = 0; iteration < getIterationCount(); ++iteration)
+	{
+		const VkPipelineRasterizationStateCreateInfo	rasterizationStateCreateInfo	=
+		{
+			VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO,		//  VkStructureType							sType;
+			&m_rasterizationConservativeStateCreateInfo[iteration],			//  const void*								pNext;
+			0,																//  VkPipelineRasterizationStateCreateFlags	flags;
+			false,															//  VkBool32								depthClampEnable;
+			false,															//  VkBool32								rasterizerDiscardEnable;
+			VK_POLYGON_MODE_FILL,											//  VkPolygonMode							polygonMode;
+			VK_CULL_MODE_NONE,												//  VkCullModeFlags							cullMode;
+			VK_FRONT_FACE_COUNTER_CLOCKWISE,								//  VkFrontFace								frontFace;
+			VK_FALSE,														//  VkBool32								depthBiasEnable;
+			0.0f,															//  float									depthBiasConstantFactor;
+			0.0f,															//  float									depthBiasClamp;
+			0.0f,															//  float									depthBiasSlopeFactor;
+			0.0f,															//  float									lineWidth;
+		};
+
+		result.push_back(rasterizationStateCreateInfo);
+	}
+
+	return result;
+}
+
+const VkPipelineRasterizationStateCreateInfo* ConservativePointTestInstance::getRasterizationStateCreateInfo	(void) const
+{
+	return &m_rasterizationStateCreateInfo[getIteration()];
+}
+
+const VkPipelineRasterizationLineStateCreateInfoEXT* ConservativePointTestInstance::getLineRasterizationStateCreateInfo	(void) const
+{
+	return DE_NULL;
+}
+
+
 template <typename ConcreteTestInstance>
 class WidenessTestCase : public BaseRenderingTestCase
 {
@@ -3017,6 +5249,7 @@
 								{
 									return new CullingTestInstance(context, m_cullMode, m_primitiveTopology, m_frontFace, m_polygonMode);
 								}
+	void						checkSupport		(Context& context) const;
 protected:
 	const VkCullModeFlags		m_cullMode;
 	const VkPrimitiveTopology	m_primitiveTopology;
@@ -3024,6 +5257,18 @@
 	const VkPolygonMode			m_polygonMode;
 };
 
+void CullingTestCase::checkSupport (Context& context) const
+{
+	if (context.isDeviceFunctionalitySupported("VK_KHR_portability_subset"))
+	{
+		const VkPhysicalDevicePortabilitySubsetFeaturesKHR& subsetFeatures = context.getPortabilitySubsetFeatures();
+		if (m_polygonMode == VK_POLYGON_MODE_POINT && !subsetFeatures.pointPolygons)
+			TCU_THROW(NotSupportedError, "VK_KHR_portability_subset: Point polygons are not supported by this implementation");
+		if (m_primitiveTopology == VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN && !subsetFeatures.triangleFans)
+			TCU_THROW(NotSupportedError, "VK_KHR_portability_subset: Triangle fans are not supported by this implementation");
+	}
+}
+
 class DiscardTestInstance : public BaseRenderingTestInstance
 {
 public:
@@ -3041,7 +5286,7 @@
 	void													extractTriangles					(std::vector<TriangleSceneSpec::SceneTriangle>& outTriangles, const std::vector<tcu::Vec4>& vertices) const;
 	void													extractLines						(std::vector<LineSceneSpec::SceneLine>& outLines, const std::vector<tcu::Vec4>& vertices) const;
 	void													extractPoints						(std::vector<PointSceneSpec::ScenePoint>& outPoints, const std::vector<tcu::Vec4>& vertices) const;
-	void													drawPrimitives						(tcu::Surface& result, const std::vector<tcu::Vec4>& positionData, VkPrimitiveTopology primitiveTopology, Move<VkQueryPool>& queryPool);
+	void													drawPrimitivesDiscard				(tcu::Surface& result, const std::vector<tcu::Vec4>& positionData, VkPrimitiveTopology primitiveTopology, Move<VkQueryPool>& queryPool);
 
 	const VkPrimitiveTopology								m_primitiveTopology;
 	const deBool											m_queryFragmentShaderInvocations;
@@ -3095,7 +5340,7 @@
 	{
 		Move<VkQueryPool> queryPool	= createQueryPool(vkd, vkDevice, &queryPoolCreateInfo);
 
-		drawPrimitives(resultImage, drawBuffer, m_primitiveTopology, queryPool);
+		drawPrimitivesDiscard(resultImage, drawBuffer, m_primitiveTopology, queryPool);
 		vkd.getQueryPoolResults(vkDevice, *queryPool, 0u, 1u, sizeof(deUint64), &queryResult, 0u, VK_QUERY_RESULT_64_BIT | VK_QUERY_RESULT_WAIT_BIT);
 	}
 	else
@@ -3293,7 +5538,7 @@
 	return &rasterizationStateCreateInfo;
 }
 
-void DiscardTestInstance::drawPrimitives (tcu::Surface& result, const std::vector<tcu::Vec4>& positionData, VkPrimitiveTopology primitiveTopology, Move<VkQueryPool>& queryPool)
+void DiscardTestInstance::drawPrimitivesDiscard (tcu::Surface& result, const std::vector<tcu::Vec4>& positionData, VkPrimitiveTopology primitiveTopology, Move<VkQueryPool>& queryPool)
 {
 	const DeviceInterface&				vkd					= m_context.getDeviceInterface();
 	const VkDevice						vkDevice			= m_context.getDevice();
@@ -3494,6 +5739,11 @@
 								{
 									if (m_queryFragmentShaderInvocations)
 										context.requireDeviceCoreFeature(DEVICE_CORE_FEATURE_PIPELINE_STATISTICS_QUERY);
+
+									if (m_primitiveTopology == VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN &&
+											context.isDeviceFunctionalitySupported("VK_KHR_portability_subset") &&
+											!context.getPortabilitySubsetFeatures().triangleFans)
+										TCU_THROW(NotSupportedError, "VK_KHR_portability_subset: Triangle fans are not supported by this implementation");
 								}
 
 protected:
@@ -3733,6 +5983,16 @@
 								{
 									return new TriangleInterpolationTestInstance(context, m_primitiveTopology, m_flags, m_sampleCount);
 								}
+
+	virtual	void				checkSupport		(Context& context) const
+								{
+									if (m_primitiveTopology == VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN &&
+										context.isDeviceFunctionalitySupported("VK_KHR_portability_subset") &&
+										!context.getPortabilitySubsetFeatures().triangleFans)
+									{
+										TCU_THROW(NotSupportedError, "VK_KHR_portability_subset: Triangle fans are not supported by this implementation");
+									}
+								}
 protected:
 	const VkPrimitiveTopology	m_primitiveTopology;
 	const int					m_flags;
@@ -4521,6 +6781,277 @@
 		rasterizationTests->addChild(discard);
 	}
 
+	// .conservative
+	{
+		typedef struct
+		{
+			float			size;
+			const char*		name;
+		} overestimateSizes;
+
+		const overestimateSizes overestimateNormalSizes[]	=
+		{
+			{ 0.00f,			"0_00" },
+			{ 0.25f,			"0_25" },
+			{ 0.50f,			"0_50" },
+			{ 0.75f,			"0_75" },
+			{ 1.00f,			"1_00" },
+			{ 2.00f,			"2_00" },
+			{ 4.00f,			"4_00" },
+			{ -TCU_INFINITY,	"min" },
+			{ TCU_INFINITY,		"max" },
+		};
+		const overestimateSizes overestimateDegenerate[]	=
+		{
+			{ 0.00f,			"0_00" },
+			{ 0.25f,			"0_25" },
+			{ -TCU_INFINITY,	"min" },
+			{ TCU_INFINITY,		"max" },
+		};
+		const overestimateSizes underestimateLineWidths[]	=
+		{
+			{ 0.50f,			"0_50" },
+			{ 1.00f,			"1_00" },
+			{ 1.50f,			"1_50" },
+		};
+		const overestimateSizes underestimatePointSizes[]	=
+		{
+			{ 1.00f,			"1_00" },
+			{ 1.50f,			"1_50" },
+			{ 2.00f,			"2_00" },
+			{ 3.00f,			"3_00" },
+			{ 4.00f,			"4_00" },
+			{ 8.00f,			"8_00" },
+		};
+		const struct PrimitiveType
+		{
+			VkPrimitiveTopology	type;
+			const char*			name;
+		}
+		primitiveTypes[] =
+		{
+			{ VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST,	"triangles"		},
+			{ VK_PRIMITIVE_TOPOLOGY_LINE_LIST,		"lines"			},
+			{ VK_PRIMITIVE_TOPOLOGY_POINT_LIST,		"points"		}
+		};
+		const VkSampleCountFlagBits samples[] =
+		{
+			VK_SAMPLE_COUNT_1_BIT,
+			VK_SAMPLE_COUNT_2_BIT,
+			VK_SAMPLE_COUNT_4_BIT,
+			VK_SAMPLE_COUNT_8_BIT,
+			VK_SAMPLE_COUNT_16_BIT,
+			VK_SAMPLE_COUNT_32_BIT,
+			VK_SAMPLE_COUNT_64_BIT
+		};
+
+		tcu::TestCaseGroup* const conservative = new tcu::TestCaseGroup(testCtx, "conservative", "Conservative rasterization tests");
+
+		rasterizationTests->addChild(conservative);
+
+		{
+			tcu::TestCaseGroup* const overestimate = new tcu::TestCaseGroup(testCtx, "overestimate", "Overestimate tests");
+
+			conservative->addChild(overestimate);
+
+			for (int samplesNdx = 0; samplesNdx < DE_LENGTH_OF_ARRAY(samples); ++samplesNdx)
+			{
+				const std::string samplesGroupName = "samples_" + de::toString(samples[samplesNdx]);
+
+				tcu::TestCaseGroup* const samplesGroup = new tcu::TestCaseGroup(testCtx, samplesGroupName.c_str(), "Samples tests");
+
+				overestimate->addChild(samplesGroup);
+
+				for (int primitiveTypeNdx = 0; primitiveTypeNdx < DE_LENGTH_OF_ARRAY(primitiveTypes); ++primitiveTypeNdx)
+				{
+					tcu::TestCaseGroup* const primitiveGroup = new tcu::TestCaseGroup(testCtx, primitiveTypes[primitiveTypeNdx].name, "Primitive tests");
+
+					samplesGroup->addChild(primitiveGroup);
+
+					{
+						tcu::TestCaseGroup* const normal = new tcu::TestCaseGroup(testCtx, "normal", "Normal conservative rasterization tests");
+
+						primitiveGroup->addChild(normal);
+
+						for (int overestimateSizesNdx = 0; overestimateSizesNdx < DE_LENGTH_OF_ARRAY(overestimateNormalSizes); ++overestimateSizesNdx)
+						{
+							const ConservativeTestConfig	config	=
+							{
+								VK_CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT,	//  VkConservativeRasterizationModeEXT	conservativeRasterizationMode;
+								overestimateNormalSizes[overestimateSizesNdx].size,		//  float								extraOverestimationSize;
+								primitiveTypes[primitiveTypeNdx].type,					//  VkPrimitiveTopology					primitiveTopology;
+								false,													//  bool								degeneratePrimitives;
+								1.0f,													//  float								lineWidth;
+								RESOLUTION_POT,											//  deUint32							resolution;
+							};
+
+							if (primitiveTypes[primitiveTypeNdx].type == VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST)
+								normal->addChild(new ConservativeTestCase<ConservativeTraingleTestInstance>	(testCtx,
+																											 overestimateNormalSizes[overestimateSizesNdx].name,
+																											 "Overestimate test, verify rasterization result",
+																											 config,
+																											 samples[samplesNdx]));
+
+							if (primitiveTypes[primitiveTypeNdx].type == VK_PRIMITIVE_TOPOLOGY_LINE_LIST)
+								normal->addChild(new ConservativeTestCase<ConservativeLineTestInstance>		(testCtx,
+																											 overestimateNormalSizes[overestimateSizesNdx].name,
+																											 "Overestimate test, verify rasterization result",
+																											 config,
+																											 samples[samplesNdx]));
+
+							if (primitiveTypes[primitiveTypeNdx].type == VK_PRIMITIVE_TOPOLOGY_POINT_LIST)
+								normal->addChild(new ConservativeTestCase<ConservativePointTestInstance>	(testCtx,
+																											 overestimateNormalSizes[overestimateSizesNdx].name,
+																											 "Overestimate test, verify rasterization result",
+																											 config,
+																											 samples[samplesNdx]));
+						}
+					}
+
+					{
+						tcu::TestCaseGroup* const degenerate = new tcu::TestCaseGroup(testCtx, "degenerate", "Degenerate primitives conservative rasterization tests");
+
+						primitiveGroup->addChild(degenerate);
+
+						for (int overestimateSizesNdx = 0; overestimateSizesNdx < DE_LENGTH_OF_ARRAY(overestimateDegenerate); ++overestimateSizesNdx)
+						{
+							const ConservativeTestConfig	config	=
+							{
+								VK_CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT,	//  VkConservativeRasterizationModeEXT	conservativeRasterizationMode;
+								overestimateDegenerate[overestimateSizesNdx].size,		//  float								extraOverestimationSize;
+								primitiveTypes[primitiveTypeNdx].type,					//  VkPrimitiveTopology					primitiveTopology;
+								true,													//  bool								degeneratePrimitives;
+								1.0f,													//  float								lineWidth;
+								64u,													//  deUint32							resolution;
+							};
+
+							if (primitiveTypes[primitiveTypeNdx].type == VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST)
+								degenerate->addChild(new ConservativeTestCase<ConservativeTraingleTestInstance>	(testCtx,
+																												 overestimateDegenerate[overestimateSizesNdx].name,
+																												 "Overestimate triangle test, verify rasterization result",
+																												 config,
+																												 samples[samplesNdx]));
+
+							if (primitiveTypes[primitiveTypeNdx].type == VK_PRIMITIVE_TOPOLOGY_LINE_LIST)
+								degenerate->addChild(new ConservativeTestCase<ConservativeLineTestInstance>		(testCtx,
+																												 overestimateDegenerate[overestimateSizesNdx].name,
+																												 "Overestimate line test, verify rasterization result",
+																												 config,
+																												 samples[samplesNdx]));
+						}
+					}
+				}
+			}
+		}
+
+		{
+			tcu::TestCaseGroup* const underestimate = new tcu::TestCaseGroup(testCtx, "underestimate", "Underestimate tests");
+
+			conservative->addChild(underestimate);
+
+			for (int samplesNdx = 0; samplesNdx < DE_LENGTH_OF_ARRAY(samples); ++samplesNdx)
+			{
+				const std::string samplesGroupName = "samples_" + de::toString(samples[samplesNdx]);
+
+				tcu::TestCaseGroup* const samplesGroup = new tcu::TestCaseGroup(testCtx, samplesGroupName.c_str(), "Samples tests");
+
+				underestimate->addChild(samplesGroup);
+
+				for (int primitiveTypeNdx = 0; primitiveTypeNdx < DE_LENGTH_OF_ARRAY(primitiveTypes); ++primitiveTypeNdx)
+				{
+					tcu::TestCaseGroup* const primitiveGroup = new tcu::TestCaseGroup(testCtx, primitiveTypes[primitiveTypeNdx].name, "Primitive tests");
+
+					samplesGroup->addChild(primitiveGroup);
+
+					{
+						tcu::TestCaseGroup* const normal = new tcu::TestCaseGroup(testCtx, "normal", "Normal conservative rasterization tests");
+
+						primitiveGroup->addChild(normal);
+
+						ConservativeTestConfig	config	=
+						{
+							VK_CONSERVATIVE_RASTERIZATION_MODE_UNDERESTIMATE_EXT,	//  VkConservativeRasterizationModeEXT	conservativeRasterizationMode;
+							0.0f,													//  float								extraOverestimationSize;
+							primitiveTypes[primitiveTypeNdx].type,					//  VkPrimitiveTopology					primitiveTopology;
+							false,													//  bool								degeneratePrimitives;
+							1.0f,													//  float								lineWidth;
+							64u,													//  deUint32							resolution;
+						};
+
+						if (primitiveTypes[primitiveTypeNdx].type == VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST)
+							normal->addChild(new ConservativeTestCase<ConservativeTraingleTestInstance>	(testCtx,
+																										 "test",
+																										 "Underestimate test, verify rasterization result",
+																										 config,
+																										 samples[samplesNdx]));
+
+						if (primitiveTypes[primitiveTypeNdx].type == VK_PRIMITIVE_TOPOLOGY_LINE_LIST)
+						{
+							for (int underestimateWidthNdx = 0; underestimateWidthNdx < DE_LENGTH_OF_ARRAY(underestimateLineWidths); ++underestimateWidthNdx)
+							{
+								config.lineWidth = underestimateLineWidths[underestimateWidthNdx].size;
+								normal->addChild(new ConservativeTestCase<ConservativeLineTestInstance>		(testCtx,
+																											 underestimateLineWidths[underestimateWidthNdx].name,
+																											 "Underestimate test, verify rasterization result",
+																											 config,
+																											 samples[samplesNdx]));
+							}
+						}
+
+						if (primitiveTypes[primitiveTypeNdx].type == VK_PRIMITIVE_TOPOLOGY_POINT_LIST)
+						{
+							for (int underestimatePointSizeNdx = 0; underestimatePointSizeNdx < DE_LENGTH_OF_ARRAY(underestimatePointSizes); ++underestimatePointSizeNdx)
+							{
+								config.lineWidth = underestimatePointSizes[underestimatePointSizeNdx].size;
+								normal->addChild(new ConservativeTestCase<ConservativePointTestInstance>	(testCtx,
+																											 underestimatePointSizes[underestimatePointSizeNdx].name,
+																											 "Underestimate test, verify rasterization result",
+																											 config,
+																											 samples[samplesNdx]));
+							}
+						}
+					}
+
+					{
+						tcu::TestCaseGroup* const degenerate = new tcu::TestCaseGroup(testCtx, "degenerate", "Degenerate primitives conservative rasterization tests");
+
+						primitiveGroup->addChild(degenerate);
+
+						ConservativeTestConfig	config	=
+						{
+							VK_CONSERVATIVE_RASTERIZATION_MODE_UNDERESTIMATE_EXT,	//  VkConservativeRasterizationModeEXT	conservativeRasterizationMode;
+							0.0f,													//  float								extraOverestimationSize;
+							primitiveTypes[primitiveTypeNdx].type,					//  VkPrimitiveTopology					primitiveTopology;
+							true,													//  bool								degeneratePrimitives;
+							1.0f,													//  float								lineWidth;
+							64u,													//  deUint32							resolution;
+						};
+
+						if (primitiveTypes[primitiveTypeNdx].type == VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST)
+							degenerate->addChild(new ConservativeTestCase<ConservativeTraingleTestInstance>	(testCtx,
+																											 "test",
+																											 "Underestimate triangle test, verify rasterization result",
+																											 config,
+																											 samples[samplesNdx]));
+
+						if (primitiveTypes[primitiveTypeNdx].type == VK_PRIMITIVE_TOPOLOGY_LINE_LIST)
+						{
+							for (int underestimateWidthNdx = 0; underestimateWidthNdx < DE_LENGTH_OF_ARRAY(underestimateLineWidths); ++underestimateWidthNdx)
+							{
+								config.lineWidth = underestimateLineWidths[underestimateWidthNdx].size;
+								degenerate->addChild(new ConservativeTestCase<ConservativeLineTestInstance>		(testCtx,
+																												 underestimateLineWidths[underestimateWidthNdx].name,
+																												 "Underestimate line test, verify rasterization result",
+																												 config,
+																												 samples[samplesNdx]));
+							}
+						}
+					}
+				}
+			}
+		}
+	}
+
 	// .interpolation
 	{
 		tcu::TestCaseGroup* const interpolation = new tcu::TestCaseGroup(testCtx, "interpolation", "Test interpolation");
@@ -4769,6 +7300,55 @@
 		}
 	}
 
+	// .depth bias
+	{
+		tcu::TestCaseGroup* const	depthBias	= new tcu::TestCaseGroup(testCtx, "depth_bias", "Test depth bias");
+		static const char			dataDir[]	= "rasterization/depth_bias";
+
+		static const struct
+		{
+			std::string name;
+			vk::VkFormat format;
+			std::string description;
+		} cases [] =
+		{
+			{"d16_unorm",	vk::VK_FORMAT_D16_UNORM,			"Test depth bias with format D16_UNORM"},
+			{"d32_sfloat",	vk::VK_FORMAT_D32_SFLOAT,			"Test depth bias with format D32_SFLOAT"},
+			{"d24_unorm",	vk::VK_FORMAT_D24_UNORM_S8_UINT,	"Test depth bias with format D24_UNORM_S8_UINT"}
+		};
+
+		for (int i = 0; i < DE_LENGTH_OF_ARRAY(cases); ++i)
+		{
+			const VkImageCreateInfo vkImageCreateInfo = {
+				VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO,			// sType
+				nullptr,										// pNext
+				0,												// flags
+				VK_IMAGE_TYPE_2D,								// imageType
+				cases[i].format,								// format
+				{250, 250, 1},									// extent
+				1,												// mipLevels
+				1,												// arrayLayers
+				VK_SAMPLE_COUNT_1_BIT,							// samples
+				VK_IMAGE_TILING_OPTIMAL,						// tiling
+				VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT,	// usage
+				VK_SHARING_MODE_EXCLUSIVE,						// sharingMode
+				0,												// queueFamilyIndexCount
+				nullptr,										// pQueueFamilyIndices
+				VK_IMAGE_LAYOUT_UNDEFINED,						// initialLayout
+			};
+
+			std::vector<std::string>		requirements = std::vector<std::string>(0);
+			std::vector<VkImageCreateInfo>	imageRequirements;
+			imageRequirements.push_back(vkImageCreateInfo);
+			const std::string			fileName	= cases[i].name + ".amber";
+			cts_amber::AmberTestCase*	testCase	= cts_amber::createAmberTestCase(testCtx, cases[i].name.c_str(), cases[i].description.c_str(), dataDir, fileName, requirements, imageRequirements);
+
+			depthBias->addChild(testCase);
+		}
+
+		rasterizationTests->addChild(depthBias);
+	}
+
 	// Fragment shader side effects.
 	{
 		rasterizationTests->addChild(createFragSideEffectsTests(testCtx));
diff --git a/external/vulkancts/modules/vulkan/ray_query/CMakeLists.txt b/external/vulkancts/modules/vulkan/ray_query/CMakeLists.txt
index ff06bbd..8d7f9cf 100644
--- a/external/vulkancts/modules/vulkan/ray_query/CMakeLists.txt
+++ b/external/vulkancts/modules/vulkan/ray_query/CMakeLists.txt
@@ -9,10 +9,18 @@
 	vktRayQueryTraversalControlTests.hpp
 	vktRayQueryAccelerationStructuresTests.cpp
 	vktRayQueryAccelerationStructuresTests.hpp
+	vktRayQueryBarycentricCoordinatesTests.cpp
+	vktRayQueryBarycentricCoordinatesTests.hpp
+	vktRayQueryProceduralGeometryTests.cpp
+	vktRayQueryProceduralGeometryTests.hpp
 	vktRayQueryWatertightnessTests.cpp
 	vktRayQueryWatertightnessTests.hpp
 	vktRayQueryCullRayFlagsTests.cpp
 	vktRayQueryCullRayFlagsTests.hpp
+	vktRayQueryMiscTests.cpp
+	vktRayQueryMiscTests.hpp
+	vktRayQueryDirectionTests.cpp
+	vktRayQueryDirectionTests.hpp
 	)
 
 set(DEQP_VK_RAY_QUERY_LIBS
diff --git a/external/vulkancts/modules/vulkan/ray_query/vktRayQueryAccelerationStructuresTests.cpp b/external/vulkancts/modules/vulkan/ray_query/vktRayQueryAccelerationStructuresTests.cpp
index 25f6084..3985bcf 100644
--- a/external/vulkancts/modules/vulkan/ray_query/vktRayQueryAccelerationStructuresTests.cpp
+++ b/external/vulkancts/modules/vulkan/ray_query/vktRayQueryAccelerationStructuresTests.cpp
@@ -1459,6 +1459,21 @@
 	return result;
 }
 
+void commonASTestsCheckSupport(Context& context)
+{
+	context.requireInstanceFunctionality("VK_KHR_get_physical_device_properties2");
+	context.requireDeviceFunctionality("VK_KHR_acceleration_structure");
+	context.requireDeviceFunctionality("VK_KHR_ray_query");
+
+	const VkPhysicalDeviceRayQueryFeaturesKHR&	rayQueryFeaturesKHR = context.getRayQueryFeatures();
+	if (rayQueryFeaturesKHR.rayQuery == DE_FALSE)
+		TCU_THROW(NotSupportedError, "Requires VkPhysicalDeviceRayQueryFeaturesKHR.rayQuery");
+
+	const VkPhysicalDeviceAccelerationStructureFeaturesKHR&	accelerationStructureFeaturesKHR = context.getAccelerationStructureFeatures();
+	if (accelerationStructureFeaturesKHR.accelerationStructure == DE_FALSE)
+		TCU_THROW(TestError, "VK_KHR_ray_query requires VkPhysicalDeviceAccelerationStructureFeaturesKHR.accelerationStructure");
+}
+
 class RayQueryASBasicTestCase : public TestCase
 {
 public:
@@ -1512,19 +1527,9 @@
 
 void RayQueryASBasicTestCase::checkSupport (Context& context) const
 {
-	context.requireInstanceFunctionality("VK_KHR_get_physical_device_properties2");
-	context.requireDeviceFunctionality("VK_KHR_acceleration_structure");
-	context.requireDeviceFunctionality("VK_KHR_ray_query");
+	commonASTestsCheckSupport(context);
 
-	const VkPhysicalDeviceRayQueryFeaturesKHR&	rayQueryFeaturesKHR								= context.getRayQueryFeatures();
-	if (rayQueryFeaturesKHR.rayQuery == DE_FALSE)
-		TCU_THROW(NotSupportedError, "Requires VkPhysicalDeviceRayQueryFeaturesKHR.rayQuery");
-
-	const VkPhysicalDeviceAccelerationStructureFeaturesKHR&	accelerationStructureFeaturesKHR	= context.getAccelerationStructureFeatures();
-	if (accelerationStructureFeaturesKHR.accelerationStructure == DE_FALSE)
-		TCU_THROW(TestError, "VK_KHR_ray_query requires VkPhysicalDeviceAccelerationStructureFeaturesKHR.accelerationStructure");
-
-	const VkPhysicalDeviceFeatures2&			features2										= context.getDeviceFeatures2();
+	const VkPhysicalDeviceFeatures2& features2 = context.getDeviceFeatures2();
 
 	if ((m_data.shaderSourceType == SST_TESSELATION_CONTROL_SHADER ||
 		 m_data.shaderSourceType == SST_TESSELATION_EVALUATION_SHADER) &&
@@ -1562,6 +1567,7 @@
 		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");
 
@@ -2581,8 +2587,12 @@
 
 					if (m_data.buildType == VK_ACCELERATION_STRUCTURE_BUILD_TYPE_DEVICE_KHR)
 					{
-						const VkMemoryBarrier	serializeMemoryBarrier = makeMemoryBarrier(VK_ACCESS_MEMORY_WRITE_BIT, VK_ACCESS_MEMORY_READ_BIT);
-						cmdPipelineMemoryBarrier(vkd, *cmdBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, &serializeMemoryBarrier);
+						endCommandBuffer(vkd, *cmdBuffer);
+
+						submitCommandsAndWait(vkd, device, queue, cmdBuffer.get());
+
+						vkd.resetCommandPool(device, *cmdPool, VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT);
+						beginCommandBuffer(vkd, *cmdBuffer, 0u);
 					}
 
 					de::MovePtr<BottomLevelAccelerationStructure> asCopy = makeBottomLevelAccelerationStructure();
@@ -2684,8 +2694,12 @@
 
 					if (m_data.buildType == VK_ACCELERATION_STRUCTURE_BUILD_TYPE_DEVICE_KHR)
 					{
-						const VkMemoryBarrier	serializeMemoryBarrier = makeMemoryBarrier(VK_ACCESS_MEMORY_WRITE_BIT, VK_ACCESS_MEMORY_READ_BIT);
-						cmdPipelineMemoryBarrier(vkd, *cmdBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, &serializeMemoryBarrier);
+						endCommandBuffer(vkd, *cmdBuffer);
+
+						submitCommandsAndWait(vkd, device, queue, cmdBuffer.get());
+
+						vkd.resetCommandPool(device, *cmdPool, VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT);
+						beginCommandBuffer(vkd, *cmdBuffer, 0u);
 					}
 
 					topLevelAccelerationStructureCopy = makeTopLevelAccelerationStructure();
@@ -2791,6 +2805,517 @@
 		return tcu::TestStatus::fail("Fail");
 }
 
+// Tests dynamic indexing of acceleration structures
+class RayQueryASDynamicIndexingTestCase : public TestCase
+{
+public:
+						RayQueryASDynamicIndexingTestCase		(tcu::TestContext& context, const char* name);
+						~RayQueryASDynamicIndexingTestCase		(void) = default;
+
+	void				checkSupport							(Context& context) const override;
+	void				initPrograms							(SourceCollections& programCollection) const override;
+	TestInstance*		createInstance							(Context& context) const override;
+};
+
+class RayQueryASDynamicIndexingTestInstance : public TestInstance
+{
+public:
+						RayQueryASDynamicIndexingTestInstance	(Context& context);
+						~RayQueryASDynamicIndexingTestInstance	(void) = default;
+	tcu::TestStatus		iterate									(void) override;
+};
+
+RayQueryASDynamicIndexingTestCase::RayQueryASDynamicIndexingTestCase(tcu::TestContext& context, const char* name)
+	: TestCase(context, name, "")
+{
+}
+
+void RayQueryASDynamicIndexingTestCase::checkSupport(Context& context) const
+{
+	commonASTestsCheckSupport(context);
+	context.requireDeviceFunctionality("VK_EXT_descriptor_indexing");
+}
+
+void RayQueryASDynamicIndexingTestCase::initPrograms(SourceCollections& programCollection) const
+{
+	const vk::SpirVAsmBuildOptions spvBuildOptions(programCollection.usedVulkanVersion, vk::SPIRV_VERSION_1_4, true);
+
+	// compute shader is defined in spir-v as it requires possing pointer to TLAS that was read from ssbo;
+	// original spir-v code was generated using following glsl code but resulting spir-v code was modiifed
+
+	// #version 460 core
+	// #extension GL_EXT_ray_query : require
+	// #extension GL_EXT_nonuniform_qualifier : enable
+
+	// #define ARRAY_SIZE 500
+	// layout(set = 0, binding = 0) uniform accelerationStructureEXT tlasArray[ARRAY_SIZE];
+	// layout(set = 0, binding = 1) readonly buffer topLevelASPointers {
+	//     uvec2 ptr[];
+	// } tlasPointers;
+	// layout(set = 0, binding = 2) readonly buffer topLevelASIndices {
+	//     uint idx[];
+	// } tlasIndices;
+	// layout(set = 0, binding = 3, std430) writeonly buffer Result {
+	//     uint value[];
+	// } result;
+
+	// void main()
+	// {
+	//   float tmin      = 0.0;
+	//   float tmax      = 2.0;
+	//   vec3  origin    = vec3(0.25f, 0.5f, 1.0);
+	//   vec3  direction = vec3(0.0,0.0,-1.0);
+	//   uint  tlasIndex = tlasIndices.idx[nonuniformEXT(gl_GlobalInvocationID.x)];
+
+	//   rayQueryEXT rq;
+	//   rayQueryInitializeEXT(rq, tlasArray[nonuniformEXT(tlasIndex)], gl_RayFlagsCullBackFacingTrianglesEXT, 0xFF, origin, tmin, direction, tmax);
+	//   atomicAdd(result.value[nonuniformEXT(gl_GlobalInvocationID.x)], 2);
+
+	//   if (rayQueryProceedEXT(rq))
+	//   {
+	//     if (rayQueryGetIntersectionTypeEXT(rq, false) == gl_RayQueryCandidateIntersectionTriangleEXT)
+	//       atomicAdd(result.value[nonuniformEXT(gl_GlobalInvocationID.x + gl_NumWorkGroups.x)], 3);
+	//   }
+
+	//   //rayQueryInitializeEXT(rq, tlasArray[nonuniformEXT(tlasIndex)], gl_RayFlagsCullBackFacingTrianglesEXT, 0xFF, origin, tmin, direction, tmax);
+	//   rayQueryInitializeEXT(rq, *tlasPointers.ptr[nonuniformEXT(tlasIndex)], gl_RayFlagsCullBackFacingTrianglesEXT, 0xFF, origin, tmin, direction, tmax);
+	//   atomicAdd(result.value[nonuniformEXT(gl_GlobalInvocationID.x + gl_NumWorkGroups.x * 2)], 5);
+
+	//   if (rayQueryProceedEXT(rq))
+	//   {
+	//     if (rayQueryGetIntersectionTypeEXT(rq, false) == gl_RayQueryCandidateIntersectionTriangleEXT)
+	//       atomicAdd(result.value[nonuniformEXT(gl_GlobalInvocationID.x + gl_NumWorkGroups.x * 3)], 7);
+	//   }
+	// }
+
+	const std::string compSource =
+		"OpCapability Shader\n"
+		"OpCapability RayQueryKHR\n"
+		"OpCapability ShaderNonUniform\n"
+		"OpExtension \"SPV_EXT_descriptor_indexing\"\n"
+		"OpExtension \"SPV_KHR_ray_query\"\n"
+		"%1 = OpExtInstImport \"GLSL.std.450\"\n"
+		"OpMemoryModel Logical GLSL450\n"
+		"OpEntryPoint GLCompute %4 \"main\" %var_index_ssbo %33 %var_as_arr_uni_ptr %64 %83 %var_as_pointers_ssbo\n"
+		"OpExecutionMode %4 LocalSize 1 1 1\n"
+		"OpDecorate %25 ArrayStride 4\n"
+		"OpMemberDecorate %26 0 NonWritable\n"
+		"OpMemberDecorate %26 0 Offset 0\n"
+		"OpDecorate %26 Block\n"
+		"OpDecorate %var_index_ssbo DescriptorSet 0\n"
+		"OpDecorate %var_index_ssbo Binding 2\n"
+		"OpDecorate %33 BuiltIn GlobalInvocationId\n"
+		"OpDecorate %38 NonUniform\n"
+		"OpDecorate %40 NonUniform\n"
+		"OpDecorate %41 NonUniform\n"
+		"OpDecorate %var_as_arr_uni_ptr DescriptorSet 0\n"
+		"OpDecorate %var_as_arr_uni_ptr Binding 0\n"
+		"OpDecorate %51 NonUniform\n"
+		"OpDecorate %53 NonUniform\n"
+		"OpDecorate %54 NonUniform\n"
+		"OpDecorate %61 ArrayStride 4\n"
+		"OpMemberDecorate %62 0 NonReadable\n"
+		"OpMemberDecorate %62 0 Offset 0\n"
+		"OpDecorate %62 Block\n"
+		"OpDecorate %64 DescriptorSet 0\n"
+		"OpDecorate %64 Binding 3\n"
+		"OpDecorate %67 NonUniform\n"
+		"OpDecorate %83 BuiltIn NumWorkgroups\n"
+		"OpDecorate %87 NonUniform\n"
+		"OpDecorate %as_index NonUniform\n"
+		"OpDecorate %as_device_addres NonUniform\n"
+		"OpDecorate %105 NonUniform\n"
+		"OpDecorate %122 NonUniform\n"
+		"OpDecorate %127 ArrayStride 8\n"
+		"OpMemberDecorate %128 0 NonWritable\n"
+		"OpMemberDecorate %128 0 Offset 0\n"
+		"OpDecorate %128 Block\n"
+		"OpDecorate %var_as_pointers_ssbo DescriptorSet 0\n"
+		"OpDecorate %var_as_pointers_ssbo Binding 1\n"
+		"%2							= OpTypeVoid\n"
+		"%3							= OpTypeFunction %2\n"
+		"%6							= OpTypeFloat 32\n"
+		"%7							= OpTypePointer Function %6\n"
+		"%9							= OpConstant %6 0\n"
+		"%11						= OpConstant %6 2\n"
+		"%12						= OpTypeVector %6 3\n"
+		"%13						= OpTypePointer Function %12\n"
+		"%15						= OpConstant %6 0.25\n"
+		"%16						= OpConstant %6 0.5\n"
+		"%17						= OpConstant %6 1\n"
+		"%18						= OpConstantComposite %12 %15 %16 %17\n"
+		"%20						= OpConstant %6 -1\n"
+		"%21						= OpConstantComposite %12 %9 %9 %20\n"
+		"%type_uint32				= OpTypeInt 32 0\n"
+		"%23						= OpTypePointer Function %type_uint32\n"
+		"%25						= OpTypeRuntimeArray %type_uint32\n"
+		"%26						= OpTypeStruct %25\n"
+		"%27						= OpTypePointer StorageBuffer %26\n"
+		"%var_index_ssbo			= OpVariable %27 StorageBuffer\n"
+		"%29						= OpTypeInt 32 1\n"
+		"%c_int32_0					= OpConstant %29 0\n"
+		"%31						= OpTypeVector %type_uint32 3\n"
+		"%32						= OpTypePointer Input %31\n"
+		"%33						= OpVariable %32 Input\n"
+		"%34						= OpConstant %type_uint32 0\n"
+		"%35						= OpTypePointer Input %type_uint32\n"
+		"%type_uint32_ssbo_ptr		= OpTypePointer StorageBuffer %type_uint32\n"
+		"%42						= OpTypeRayQueryKHR\n"
+		"%43						= OpTypePointer Function %42\n"
+		"%type_as					= OpTypeAccelerationStructureKHR\n"
+		"%46						= OpConstant %type_uint32 500\n"
+		"%type_as_arr				= OpTypeArray %type_as %46\n"
+		"%type_as_arr_uni_ptr		= OpTypePointer UniformConstant %type_as_arr\n"
+		"%var_as_arr_uni_ptr		= OpVariable %type_as_arr_uni_ptr UniformConstant\n"
+		"%type_as_uni_ptr			= OpTypePointer UniformConstant %type_as\n"
+		"%55						= OpConstant %type_uint32 16\n"
+		"%56						= OpConstant %type_uint32 255\n"
+		"%61						= OpTypeRuntimeArray %type_uint32\n"
+		"%62						= OpTypeStruct %61\n"
+		"%63						= OpTypePointer StorageBuffer %62\n"
+		"%64						= OpVariable %63 StorageBuffer\n"
+		"%69						= OpConstant %type_uint32 2\n"
+		"%70						= OpConstant %type_uint32 1\n"
+		"%72						= OpTypeBool\n"
+		"%76						= OpConstantFalse %72\n"
+		"%83						= OpVariable %32 Input\n"
+		"%89						= OpConstant %type_uint32 3\n"
+		"%107						= OpConstant %type_uint32 5\n"
+		"%124						= OpConstant %type_uint32 7\n"
+
+		// <changed_section>
+		"%v2uint					= OpTypeVector %type_uint32 2\n"
+		"%127						= OpTypeRuntimeArray %v2uint\n"
+		"%128						= OpTypeStruct %127\n"
+		"%129						= OpTypePointer StorageBuffer %128\n"
+		"%var_as_pointers_ssbo		= OpVariable %129 StorageBuffer\n"
+		"%type_uint64_ssbo_ptr		= OpTypePointer StorageBuffer %v2uint\n"
+		// </changed_section>
+
+		// void main()
+		"%4							= OpFunction %2 None %3\n"
+		"%5							= OpLabel\n"
+		"%8							= OpVariable %7 Function\n"
+		"%10						= OpVariable %7 Function\n"
+		"%14						= OpVariable %13 Function\n"
+		"%19						= OpVariable %13 Function\n"
+		"%24						= OpVariable %23 Function\n"
+		"%var_ray_query				= OpVariable %43 Function\n"
+		"OpStore %8 %9\n"
+		"OpStore %10 %11\n"
+		"OpStore %14 %18\n"
+		"OpStore %19 %21\n"
+		"%36						= OpAccessChain %35 %33 %34\n"
+		"%37						= OpLoad %type_uint32 %36\n"
+		"%38						= OpCopyObject %type_uint32 %37\n"
+		"%40						= OpAccessChain %type_uint32_ssbo_ptr %var_index_ssbo %c_int32_0 %38\n"
+		"%41						= OpLoad %type_uint32 %40\n"
+		"OpStore %24 %41\n"
+
+		// rayQueryInitializeEXT using AS that was read from array
+		"%50						= OpLoad %type_uint32 %24\n"
+		"%51						= OpCopyObject %type_uint32 %50\n"
+		"%53						= OpAccessChain %type_as_uni_ptr %var_as_arr_uni_ptr %51\n"
+		"%54						= OpLoad %type_as %53\n"
+		"%57						= OpLoad %12 %14\n"
+		"%58						= OpLoad %6 %8\n"
+		"%59						= OpLoad %12 %19\n"
+		"%60						= OpLoad %6 %10\n"
+		"OpRayQueryInitializeKHR %var_ray_query %54 %55 %56 %57 %58 %59 %60\n"
+
+		"%65						= OpAccessChain %35 %33 %34\n"
+		"%66						= OpLoad %type_uint32 %65\n"
+		"%67						= OpCopyObject %type_uint32 %66\n"
+		"%68						= OpAccessChain %type_uint32_ssbo_ptr %64 %c_int32_0 %67\n"
+		"%71						= OpAtomicIAdd %type_uint32 %68 %70 %34 %69\n"
+
+		"%73						= OpRayQueryProceedKHR %72 %var_ray_query\n"
+		"OpSelectionMerge %75 None\n"
+		"OpBranchConditional %73 %74 %75\n"
+		"%74						= OpLabel\n"
+
+		"%77						= OpRayQueryGetIntersectionTypeKHR %type_uint32 %var_ray_query %c_int32_0\n"
+		"%78						= OpIEqual %72 %77 %34\n"
+		"OpSelectionMerge %80 None\n"
+		"OpBranchConditional %78 %79 %80\n"
+		"%79						= OpLabel\n"
+		"%81						= OpAccessChain %35 %33 %34\n"
+		"%82						= OpLoad %type_uint32 %81\n"
+		"%84						= OpAccessChain %35 %83 %34\n"
+		"%85						= OpLoad %type_uint32 %84\n"
+		"%86						= OpIAdd %type_uint32 %82 %85\n"
+		"%87						= OpCopyObject %type_uint32 %86\n"
+		"%88						= OpAccessChain %type_uint32_ssbo_ptr %64 %c_int32_0 %87\n"
+		"%90						= OpAtomicIAdd %type_uint32 %88 %70 %34 %89\n"
+		"OpBranch %80\n"
+		"%80						= OpLabel\n"
+		"OpBranch %75\n"
+		"%75						= OpLabel\n"
+
+		// rayQueryInitializeEXT using pointer to AS
+		"%91						= OpLoad %type_uint32 %24\n"
+		"%as_index					= OpCopyObject %type_uint32 %91\n"
+
+		// <changed_section>
+		"%as_device_addres_ptr		= OpAccessChain %type_uint64_ssbo_ptr %var_as_pointers_ssbo %c_int32_0 %as_index\n"
+		"%as_device_addres			= OpLoad %v2uint %as_device_addres_ptr\n"
+		"%as_to_use					= OpConvertUToAccelerationStructureKHR %type_as %as_device_addres\n"
+		// </changed_section>
+
+		"%95						= OpLoad %12 %14\n"
+		"%96						= OpLoad %6 %8\n"
+		"%97						= OpLoad %12 %19\n"
+		"%98						= OpLoad %6 %10\n"
+		"OpRayQueryInitializeKHR %var_ray_query %as_to_use %55 %56 %95 %96 %97 %98\n"
+
+		"%99						= OpAccessChain %35 %33 %34\n"
+		"%100						= OpLoad %type_uint32 %99\n"
+		"%101						= OpAccessChain %35 %83 %34\n"
+		"%102						= OpLoad %type_uint32 %101\n"
+		"%103						= OpIMul %type_uint32 %102 %69\n"
+		"%104						= OpIAdd %type_uint32 %100 %103\n"
+		"%105						= OpCopyObject %type_uint32 %104\n"
+		"%106						= OpAccessChain %type_uint32_ssbo_ptr %64 %c_int32_0 %105\n"
+		"%108						= OpAtomicIAdd %type_uint32 %106 %70 %34 %107\n"
+
+		"%109						= OpRayQueryProceedKHR %72 %var_ray_query\n"
+		"OpSelectionMerge %111 None\n"
+		"OpBranchConditional %109 %110 %111\n"
+		"%110						= OpLabel\n"
+
+		"%112						= OpRayQueryGetIntersectionTypeKHR %type_uint32 %var_ray_query %c_int32_0\n"
+		"%113						= OpIEqual %72 %112 %34\n"
+		"OpSelectionMerge %115 None\n"
+		"OpBranchConditional %113 %114 %115\n"
+		"%114						= OpLabel\n"
+		"%116						= OpAccessChain %35 %33 %34\n"
+		"%117						= OpLoad %type_uint32 %116\n"
+		"%118						= OpAccessChain %35 %83 %34\n"
+		"%119						= OpLoad %type_uint32 %118\n"
+		"%120						= OpIMul %type_uint32 %119 %89\n"
+		"%121						= OpIAdd %type_uint32 %117 %120\n"
+		"%122						= OpCopyObject %type_uint32 %121\n"
+		"%123						= OpAccessChain %type_uint32_ssbo_ptr %64 %c_int32_0 %122\n"
+		"%125						= OpAtomicIAdd %type_uint32 %123 %70 %34 %124\n"
+		"OpBranch %115\n"
+		"%115						= OpLabel\n"
+		"OpBranch %111\n"
+		"%111						= OpLabel\n"
+		"OpReturn\n"
+		"OpFunctionEnd\n";
+
+	programCollection.spirvAsmSources.add("comp") << compSource << spvBuildOptions;
+}
+
+TestInstance* RayQueryASDynamicIndexingTestCase::createInstance(Context& context) const
+{
+	return new RayQueryASDynamicIndexingTestInstance(context);
+}
+
+
+RayQueryASDynamicIndexingTestInstance::RayQueryASDynamicIndexingTestInstance(Context& context)
+	: vkt::TestInstance(context)
+{
+}
+
+tcu::TestStatus RayQueryASDynamicIndexingTestInstance::iterate(void)
+{
+	const DeviceInterface&		vkd							= m_context.getDeviceInterface();
+	const VkDevice				device						= m_context.getDevice();
+	const deUint32				queueFamilyIndex			= m_context.getUniversalQueueFamilyIndex();
+	const VkQueue				queue						= m_context.getUniversalQueue();
+	Allocator&					allocator					= m_context.getDefaultAllocator();
+	const deUint32				tlasCount					= 500;	// changing this will require also changing shaders
+	const deUint32				activeTlasCount				= 32;	// number of tlas out of <tlasCount> that will be active
+
+	const Move<VkDescriptorSetLayout> descriptorSetLayout = DescriptorSetLayoutBuilder()
+		.addArrayBinding(VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR, tlasCount, VK_SHADER_STAGE_COMPUTE_BIT)
+		.addSingleBinding(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, VK_SHADER_STAGE_COMPUTE_BIT)			// pointers to all acceleration structures
+		.addSingleBinding(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, VK_SHADER_STAGE_COMPUTE_BIT)			// ssbo with indices of all acceleration structures
+		.addSingleBinding(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, VK_SHADER_STAGE_COMPUTE_BIT)			// ssbo with result values
+		.build(vkd, device);
+
+	const Move<VkDescriptorPool> descriptorPool = DescriptorPoolBuilder()
+		.addType(VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR, tlasCount)
+		.addType(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER)
+		.addType(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER)
+		.addType(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER)
+		.build(vkd, device, VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT, 1u);
+	const Move<VkDescriptorSet> descriptorSet = makeDescriptorSet(vkd, device, *descriptorPool, *descriptorSetLayout);
+
+	const Move<VkPipelineLayout>		pipelineLayout		= makePipelineLayout(vkd, device, descriptorSetLayout.get());
+	Move<VkShaderModule>				shaderModule		= createShaderModule(vkd, device, m_context.getBinaryCollection().get("comp"), 0u);
+	const VkComputePipelineCreateInfo	pipelineCreateInfo
+	{
+		VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO,			// VkStructureType						sType
+		DE_NULL,												// const void*							pNext
+		0u,														// VkPipelineCreateFlags				flags
+		{														// VkPipelineShaderStageCreateInfo		stage
+			VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO,
+			DE_NULL,
+			(VkPipelineShaderStageCreateFlags)0,
+			VK_SHADER_STAGE_COMPUTE_BIT,
+			*shaderModule,
+			"main",
+			DE_NULL
+		},
+		*pipelineLayout,										// VkPipelineLayout						layout
+		DE_NULL,												// VkPipeline							basePipelineHandle
+		0,														// deInt32								basePipelineIndex
+	};
+
+	Move<VkPipeline>				pipeline				= createComputePipeline(vkd, device, DE_NULL, &pipelineCreateInfo);
+
+	const VkDeviceSize				pointerBufferSize		= tlasCount * sizeof(VkDeviceAddress);
+	const VkBufferCreateInfo		pointerBufferCreateInfo = makeBufferCreateInfo(pointerBufferSize, VK_BUFFER_USAGE_STORAGE_BUFFER_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT);
+	de::MovePtr<BufferWithMemory>	pointerBuffer			= de::MovePtr<BufferWithMemory>(new BufferWithMemory(vkd, device, allocator, pointerBufferCreateInfo, MemoryRequirement::HostVisible | MemoryRequirement::DeviceAddress));
+
+	const VkDeviceSize				indicesBufferSize		= activeTlasCount * sizeof(deUint32);
+	const VkBufferCreateInfo		indicesBufferCreateInfo = makeBufferCreateInfo(indicesBufferSize, VK_BUFFER_USAGE_STORAGE_BUFFER_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT);
+	de::MovePtr<BufferWithMemory>	indicesBuffer			= de::MovePtr<BufferWithMemory>(new BufferWithMemory(vkd, device, allocator, indicesBufferCreateInfo, MemoryRequirement::HostVisible));
+
+	const VkDeviceSize				resultBufferSize		= activeTlasCount * sizeof(deUint32) * 4;
+	const VkBufferCreateInfo		resultBufferCreateInfo	= makeBufferCreateInfo(resultBufferSize, VK_BUFFER_USAGE_STORAGE_BUFFER_BIT | VK_BUFFER_USAGE_TRANSFER_SRC_BIT);
+	de::MovePtr<BufferWithMemory>	resultBuffer			= de::MovePtr<BufferWithMemory>(new BufferWithMemory(vkd, device, allocator, resultBufferCreateInfo, MemoryRequirement::HostVisible));
+
+	const Move<VkCommandPool>		cmdPool					= createCommandPool(vkd, device, 0, queueFamilyIndex);
+	const Move<VkCommandBuffer>		cmdBuffer				= allocateCommandBuffer(vkd, device, *cmdPool, VK_COMMAND_BUFFER_LEVEL_PRIMARY);
+
+	de::SharedPtr<BottomLevelAccelerationStructure>				blas = de::SharedPtr<BottomLevelAccelerationStructure>(makeBottomLevelAccelerationStructure().release());
+	std::vector<de::MovePtr<TopLevelAccelerationStructure>>		tlasVect(tlasCount);
+	std::vector<VkDeviceAddress>								tlasPtrVect(tlasCount);
+	std::vector<VkAccelerationStructureKHR>						tlasVkVect;
+
+	// randomly scatter AS indices across the range (number of them should be equal to the max subgroup size)
+	deRandom rnd;
+	deRandom_init(&rnd, 123);
+	std::set<deUint32> asIndicesSet;
+	while (asIndicesSet.size() < activeTlasCount)
+		asIndicesSet.insert(deRandom_getUint32(&rnd) % tlasCount);
+
+	// fill indices buffer
+	deUint32 helperIndex = 0;
+	auto& indicesBufferAlloc = indicesBuffer->getAllocation();
+	deUint32* indicesBufferPtr = reinterpret_cast<deUint32*>(indicesBufferAlloc.getHostPtr());
+	std::for_each(asIndicesSet.begin(), asIndicesSet.end(),
+		[&helperIndex, indicesBufferPtr](const deUint32& index)
+		{
+			indicesBufferPtr[helperIndex++] = index;
+		});
+	vk::flushAlloc(vkd, device, indicesBufferAlloc);
+
+	// clear result buffer
+	auto& resultBufferAlloc = resultBuffer->getAllocation();
+	void* resultBufferPtr = resultBufferAlloc.getHostPtr();
+	deMemset(resultBufferPtr, 0, static_cast<size_t>(resultBufferSize));
+	vk::flushAlloc(vkd, device, resultBufferAlloc);
+
+	beginCommandBuffer(vkd, *cmdBuffer, 0u);
+	{
+		// build bottom level acceleration structure
+		blas->setGeometryData(
+			{
+				{ 0.0, 0.0, 0.0 },
+				{ 1.0, 0.0, 0.0 },
+				{ 0.0, 1.0, 0.0 },
+			},
+			true,
+			0u
+			);
+
+		blas->createAndBuild(vkd, device, *cmdBuffer, allocator);
+
+		// build top level acceleration structures
+		for (deUint32 tlasIndex = 0; tlasIndex < tlasCount; ++tlasIndex)
+		{
+			auto& tlas = tlasVect[tlasIndex];
+			tlas = makeTopLevelAccelerationStructure();
+			tlas->setInstanceCount(1);
+			tlas->addInstance(blas);
+			if (!asIndicesSet.count(tlasIndex))
+			{
+				// tlas that are not in asIndicesSet should be empty but it is hard to do
+				// that with current cts utils so we are marking them as inactive instead
+				tlas->setInactiveInstances(true);
+			}
+			tlas->createAndBuild(vkd, device, *cmdBuffer, allocator);
+
+			// get acceleration structure device address
+			const VkAccelerationStructureDeviceAddressInfoKHR addressInfo =
+			{
+				VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_DEVICE_ADDRESS_INFO_KHR,	// VkStructureType				sType
+				DE_NULL,															// const void*					pNext
+				*tlas->getPtr()														// VkAccelerationStructureKHR	accelerationStructure
+			};
+			VkDeviceAddress vkda = vkd.getAccelerationStructureDeviceAddressKHR(device, &addressInfo);
+			tlasPtrVect[tlasIndex] = vkda;
+		}
+
+		// fill pointer buffer
+		vkd.cmdUpdateBuffer(*cmdBuffer, **pointerBuffer, 0, pointerBufferSize, tlasPtrVect.data());
+
+		// wait for data transfers
+		const VkMemoryBarrier uploadBarrier = makeMemoryBarrier(VK_ACCESS_TRANSFER_WRITE_BIT, VK_ACCESS_SHADER_READ_BIT);
+		cmdPipelineMemoryBarrier(vkd, *cmdBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, &uploadBarrier, 1u);
+
+		// wait for as build
+		const VkMemoryBarrier asBuildBarrier = makeMemoryBarrier(VK_ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_KHR, VK_ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR);
+		cmdPipelineMemoryBarrier(vkd, *cmdBuffer, VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, &asBuildBarrier, 1u);
+
+		tlasVkVect.reserve(tlasCount);
+		for (auto& tlas : tlasVect)
+			tlasVkVect.push_back(*tlas->getPtr());
+
+		VkWriteDescriptorSetAccelerationStructureKHR accelerationStructureWriteDescriptorSet =
+		{
+			VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR,	// VkStructureType						sType;
+			DE_NULL,															// const void*							pNext;
+			tlasCount,															// deUint32								accelerationStructureCount;
+			tlasVkVect.data(),													// const VkAccelerationStructureKHR*	pAccelerationStructures;
+		};
+
+		const vk::VkDescriptorBufferInfo pointerBufferInfo	= makeDescriptorBufferInfo(**pointerBuffer, 0u, VK_WHOLE_SIZE);
+		const vk::VkDescriptorBufferInfo indicesBufferInfo	= makeDescriptorBufferInfo(**indicesBuffer, 0u, VK_WHOLE_SIZE);
+		const vk::VkDescriptorBufferInfo resultInfo			= makeDescriptorBufferInfo(**resultBuffer,  0u, VK_WHOLE_SIZE);
+
+		DescriptorSetUpdateBuilder()
+			.writeArray (*descriptorSet, DescriptorSetUpdateBuilder::Location::binding(0u), VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR, tlasCount, &accelerationStructureWriteDescriptorSet)
+			.writeSingle(*descriptorSet, DescriptorSetUpdateBuilder::Location::binding(1u), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, &pointerBufferInfo)
+			.writeSingle(*descriptorSet, DescriptorSetUpdateBuilder::Location::binding(2u), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, &indicesBufferInfo)
+			.writeSingle(*descriptorSet, DescriptorSetUpdateBuilder::Location::binding(3u), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, &resultInfo)
+			.update(vkd, device);
+
+		vkd.cmdBindDescriptorSets(*cmdBuffer, VK_PIPELINE_BIND_POINT_COMPUTE, *pipelineLayout, 0, 1, &descriptorSet.get(), 0, DE_NULL);
+
+		vkd.cmdBindPipeline(*cmdBuffer, VK_PIPELINE_BIND_POINT_COMPUTE, *pipeline);
+
+		vkd.cmdDispatch(*cmdBuffer, activeTlasCount, 1, 1);
+
+		const VkMemoryBarrier postTraceMemoryBarrier = makeMemoryBarrier(VK_ACCESS_SHADER_WRITE_BIT, VK_ACCESS_TRANSFER_READ_BIT);
+		cmdPipelineMemoryBarrier(vkd, *cmdBuffer, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, &postTraceMemoryBarrier);
+	}
+	endCommandBuffer(vkd, *cmdBuffer);
+
+	submitCommandsAndWait(vkd, device, queue, cmdBuffer.get());
+
+	invalidateMappedMemoryRange(vkd, device, resultBuffer->getAllocation().getMemory(), resultBuffer->getAllocation().getOffset(), resultBufferSize);
+
+	// verify result buffer
+	deUint32		failures = 0;
+	const deUint32*	resultPtr = reinterpret_cast<deUint32*>(resultBuffer->getAllocation().getHostPtr());
+	for (deUint32 index = 0; index < activeTlasCount; ++index)
+	{
+		failures += (resultPtr[0 * activeTlasCount + index] != 2) +
+					(resultPtr[1 * activeTlasCount + index] != 3) +
+					(resultPtr[2 * activeTlasCount + index] != 5) +
+					(resultPtr[3 * activeTlasCount + index] != 7);
+	}
+
+	if (failures)
+		return tcu::TestStatus::fail(de::toString(failures) + " failures, " + de::toString(4 * activeTlasCount - failures) + " are ok");
+	return tcu::TestStatus::pass("Pass");
+}
+
 }	// anonymous
 
 /********************/
@@ -3422,6 +3947,12 @@
 	}
 }
 
+void addDynamicIndexingTests(tcu::TestCaseGroup* group)
+{
+	auto& ctx = group->getTestContext();
+	group->addChild(new RayQueryASDynamicIndexingTestCase(ctx, "dynamic_indexing"));
+}
+
 void addEmptyAccelerationStructureTests (tcu::TestCaseGroup* group)
 {
 	const struct
@@ -3538,6 +4069,7 @@
 	addTestGroup(group.get(), "host_threading", "Test host threading operations", addHostThreadingOperationTests);
 	addTestGroup(group.get(), "function_argument", "Test using AS as function argument using both pointers and bare values", addFuncArgTests);
 	addTestGroup(group.get(), "instance_triangle_culling", "Test building AS with counterclockwise triangles and/or disabling face culling", addInstanceTriangleCullingTests);
+	addTestGroup(group.get(), "dynamic_indexing", "Exercise dynamic indexing of acceleration structures", addDynamicIndexingTests);
 	addTestGroup(group.get(), "empty", "Test building empty acceleration structures using different methods", addEmptyAccelerationStructureTests);
 
 	return group.release();
diff --git a/external/vulkancts/modules/vulkan/ray_query/vktRayQueryBarycentricCoordinatesTests.cpp b/external/vulkancts/modules/vulkan/ray_query/vktRayQueryBarycentricCoordinatesTests.cpp
new file mode 100644
index 0000000..8248b03
--- /dev/null
+++ b/external/vulkancts/modules/vulkan/ray_query/vktRayQueryBarycentricCoordinatesTests.cpp
@@ -0,0 +1,383 @@
+/*-------------------------------------------------------------------------
+ * Vulkan Conformance Tests
+ * ------------------------
+ *
+ * Copyright (c) 2021 The Khronos Group Inc.
+ * Copyright (c) 2021 Valve Corporation.
+ *
+ * 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 Ray Query Barycentric Coordinates Tests
+ *//*--------------------------------------------------------------------*/
+
+#include "vktRayQueryBarycentricCoordinatesTests.hpp"
+#include "vktTestCase.hpp"
+
+#include "vkRayTracingUtil.hpp"
+#include "vkObjUtil.hpp"
+#include "vkCmdUtil.hpp"
+#include "vkBufferWithMemory.hpp"
+#include "vkBuilderUtil.hpp"
+#include "vkTypeUtil.hpp"
+#include "vkBarrierUtil.hpp"
+
+#include "deUniquePtr.hpp"
+#include "deRandom.hpp"
+
+#include <sstream>
+#include <vector>
+
+namespace vkt
+{
+namespace RayQuery
+{
+
+namespace
+{
+
+using namespace vk;
+
+struct TestParams
+{
+	deUint32				seed;
+};
+
+constexpr float		kZCoord		= 5.0f;
+constexpr float		kXYCoordAbs	= 1.0f;
+
+constexpr float		kThreshold	= 0.001f;				// For the resulting coordinates.
+constexpr float		kTMin		= 1.0f - kThreshold;	// Require the same precision in T.
+constexpr float		kTMax		= 1.0f + kThreshold;	// Ditto.
+constexpr deUint32	kNumRays	= 20u;
+
+class BarycentricCoordinatesCase : public TestCase
+{
+public:
+							BarycentricCoordinatesCase	(tcu::TestContext& testCtx, const std::string& name, const std::string& description, const TestParams& params);
+	virtual					~BarycentricCoordinatesCase	(void) {}
+
+	virtual void			checkSupport				(Context& context) const;
+	virtual void			initPrograms				(vk::SourceCollections& programCollection) const;
+	virtual TestInstance*	createInstance				(Context& context) const;
+
+protected:
+	TestParams				m_params;
+};
+
+class BarycentricCoordinatesInstance : public TestInstance
+{
+public:
+								BarycentricCoordinatesInstance	(Context& context, const TestParams& params);
+	virtual						~BarycentricCoordinatesInstance	(void) {}
+
+	virtual tcu::TestStatus		iterate							(void);
+
+protected:
+	TestParams					m_params;
+};
+
+BarycentricCoordinatesCase::BarycentricCoordinatesCase (tcu::TestContext& testCtx, const std::string& name, const std::string& description, const TestParams& params)
+	: TestCase	(testCtx, name, description)
+	, m_params	(params)
+{}
+
+void BarycentricCoordinatesCase::checkSupport (Context& context) const
+{
+	context.requireDeviceFunctionality("VK_KHR_acceleration_structure");
+	context.requireDeviceFunctionality("VK_KHR_ray_query");
+}
+
+void BarycentricCoordinatesCase::initPrograms (vk::SourceCollections& programCollection) const
+{
+	const vk::ShaderBuildOptions buildOptions (programCollection.usedVulkanVersion, vk::SPIRV_VERSION_1_4, 0u, true);
+
+	std::ostringstream comp;
+	comp
+		<< "#version 460 core\n"
+		<< "#extension GL_EXT_ray_query : require\n"
+		<< "\n"
+		<< "layout(local_size_x=" << kNumRays << ", local_size_y=1, local_size_z=1) in;\n"
+		<< "\n"
+		<< "layout(set=0, binding=0) uniform accelerationStructureEXT topLevelAS;\n"
+		<< "layout(set=0, binding=1) uniform RayDirections {\n"
+		<< "  vec4 values[" << kNumRays << "];\n"
+		<< "} directions;\n"
+		<< "layout(set=0, binding=2, std430) buffer OutputBarycentrics {\n"
+		<< "  vec4 values[" << kNumRays << "];\n"
+		<< "} coordinates;\n"
+		<< "\n"
+		<< "void main()\n"
+		<< "{\n"
+		<< "  const uint  cullMask  = 0xFF;\n"
+		<< "  const vec3  origin    = vec3(0.0, 0.0, 0.0);\n"
+		<< "  const vec3  direction = directions.values[gl_LocalInvocationID.x].xyz;\n"
+		<< "  const float tMin      = " << kTMin << ";\n"
+		<< "  const float tMax      = " << kTMax << ";\n"
+		<< "  vec4        outputVal = vec4(-1.0, -1.0, -1.0, -1.0);\n"
+		<< "  rayQueryEXT rq;\n"
+		<< "  rayQueryInitializeEXT(rq, topLevelAS, gl_RayFlagsNoneEXT, cullMask, origin, tMin, direction, tMax);\n"
+		<< "  while (rayQueryProceedEXT(rq)) {\n"
+		<< "    if (rayQueryGetIntersectionTypeEXT(rq, false) == gl_RayQueryCandidateIntersectionTriangleEXT) {\n"
+		<< "      outputVal = vec4(rayQueryGetIntersectionBarycentricsEXT(rq, false), 0.0, 0.0);\n"
+		<< "    }\n"
+		<< "  }\n"
+		<< "  coordinates.values[gl_LocalInvocationID.x] = vec4(outputVal);\n"
+		<< "}\n"
+		;
+
+	programCollection.glslSources.add("comp") << glu::ComputeSource(updateRayTracingGLSL(comp.str())) << buildOptions;
+}
+
+TestInstance* BarycentricCoordinatesCase::createInstance (Context& context) const
+{
+	return new BarycentricCoordinatesInstance(context, m_params);
+}
+
+BarycentricCoordinatesInstance::BarycentricCoordinatesInstance (Context& context, const TestParams& params)
+	: TestInstance	(context)
+	, m_params		(params)
+{}
+
+// Calculates coordinates in a triangle given barycentric coordinates b and c.
+tcu::Vec3 calcCoordinates (const std::vector<tcu::Vec3>& triangle, float b, float c)
+{
+	DE_ASSERT(triangle.size() == 3u);
+	DE_ASSERT(b > 0.0f);
+	DE_ASSERT(c > 0.0f);
+	DE_ASSERT(b + c < 1.0f);
+
+	const float a = 1.0f - b - c;
+	DE_ASSERT(a > 0.0f);
+
+	return triangle[0] * a + triangle[1] * b + triangle[2] * c;
+}
+
+// Return a, b, c with a close to 1.0f and (b, c) close to 0.0f.
+tcu::Vec3 getBarycentricVertex (void)
+{
+	const float a = 0.999f;
+	const float aux = 1.0f - a;
+	const float b = aux / 2.0f;
+	const float c = b;
+
+	return tcu::Vec3(a, b, c);
+}
+
+tcu::Vec4 extendToV4 (const tcu::Vec3& vec3)
+{
+	return tcu::Vec4(vec3.x(), vec3.y(), vec3.z(), 0.0f);
+}
+
+tcu::TestStatus BarycentricCoordinatesInstance::iterate (void)
+{
+	const auto&	vkd		= m_context.getDeviceInterface();
+	const auto	device	= m_context.getDevice();
+	auto&		alloc	= m_context.getDefaultAllocator();
+	const auto	qIndex	= m_context.getUniversalQueueFamilyIndex();
+	const auto	queue	= m_context.getUniversalQueue();
+	const auto	stages	= VK_SHADER_STAGE_COMPUTE_BIT;
+
+	// Command pool and buffer.
+	const auto cmdPool		= makeCommandPool(vkd, device, qIndex);
+	const auto cmdBufferPtr	= allocateCommandBuffer(vkd, device, cmdPool.get(), VK_COMMAND_BUFFER_LEVEL_PRIMARY);
+	const auto cmdBuffer	= cmdBufferPtr.get();
+
+	beginCommandBuffer(vkd, cmdBuffer);
+
+	// Build acceleration structures.
+	auto topLevelAS		= makeTopLevelAccelerationStructure();
+	auto bottomLevelAS	= makeBottomLevelAccelerationStructure();
+
+	const std::vector<tcu::Vec3> triangle =
+	{
+		tcu::Vec3(        0.0f, -kXYCoordAbs, kZCoord),
+		tcu::Vec3(-kXYCoordAbs,  kXYCoordAbs, kZCoord),
+		tcu::Vec3( kXYCoordAbs,  kXYCoordAbs, kZCoord),
+	};
+
+	bottomLevelAS->addGeometry(triangle, true/*is triangles*/, VK_GEOMETRY_NO_DUPLICATE_ANY_HIT_INVOCATION_BIT_KHR);
+	bottomLevelAS->createAndBuild(vkd, device, cmdBuffer, alloc);
+	de::SharedPtr<BottomLevelAccelerationStructure> blasSharedPtr (bottomLevelAS.release());
+
+	topLevelAS->setInstanceCount(1);
+	topLevelAS->addInstance(blasSharedPtr, identityMatrix3x4, 0, 0xFFu, 0u, VK_GEOMETRY_INSTANCE_TRIANGLE_FACING_CULL_DISABLE_BIT_KHR);
+	topLevelAS->createAndBuild(vkd, device, cmdBuffer, alloc);
+
+	// Uniform buffer for directions.
+	const auto directionsBufferSize		= static_cast<VkDeviceSize>(sizeof(tcu::Vec4) * kNumRays);
+	const auto directionsBufferInfo		= makeBufferCreateInfo(directionsBufferSize, VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT);
+	BufferWithMemory directionsBuffer	(vkd, device, alloc, directionsBufferInfo, MemoryRequirement::HostVisible);
+	auto& directionsBufferAlloc			= directionsBuffer.getAllocation();
+	void* directionsBufferData			= directionsBufferAlloc.getHostPtr();
+
+	// Generate rays towards the 3 triangle coordinates (avoiding exact vertices) and additional coordinates.
+	std::vector<tcu::Vec4> directions;
+	std::vector<tcu::Vec4> expectedOutputCoordinates;
+	directions.reserve(kNumRays);
+	expectedOutputCoordinates.reserve(kNumRays);
+
+	const auto barycentricABC = getBarycentricVertex();
+
+	directions.push_back(extendToV4(calcCoordinates(triangle, barycentricABC.x(), barycentricABC.y())));
+	directions.push_back(extendToV4(calcCoordinates(triangle, barycentricABC.y(), barycentricABC.x())));
+	directions.push_back(extendToV4(calcCoordinates(triangle, barycentricABC.y(), barycentricABC.z())));
+
+	expectedOutputCoordinates.push_back(tcu::Vec4(barycentricABC.x(), barycentricABC.y(), 0.0f, 0.0f));
+	expectedOutputCoordinates.push_back(tcu::Vec4(barycentricABC.y(), barycentricABC.x(), 0.0f, 0.0f));
+	expectedOutputCoordinates.push_back(tcu::Vec4(barycentricABC.y(), barycentricABC.z(), 0.0f, 0.0f));
+
+	de::Random rnd(m_params.seed);
+	while (directions.size() < kNumRays)
+	{
+		// Avoid 0.0 when choosing b and c.
+		float b;
+		while ((b = rnd.getFloat()) == 0.0f)
+			;
+		float c;
+		while ((c = rnd.getFloat(0.0f, 1.0f - b)) == 0.0f)
+			;
+
+		expectedOutputCoordinates.push_back(tcu::Vec4(b, c, 0.0f, 0.0f));
+		directions.push_back(extendToV4(calcCoordinates(triangle, b, c)));
+	}
+
+	deMemcpy(directionsBufferData, directions.data(), directionsBufferSize);
+	flushAlloc(vkd, device, directionsBufferAlloc);
+
+	// Storage buffer for output barycentric coordinates.
+	const auto barycoordsBufferSize		= static_cast<VkDeviceSize>(sizeof(tcu::Vec4) * kNumRays);
+	const auto barycoordsBufferInfo		= makeBufferCreateInfo(barycoordsBufferSize, VK_BUFFER_USAGE_STORAGE_BUFFER_BIT);
+	BufferWithMemory barycoordsBuffer	(vkd, device, alloc, barycoordsBufferInfo, MemoryRequirement::HostVisible);
+	auto& barycoordsBufferAlloc			= barycoordsBuffer.getAllocation();
+	void* barycoordsBufferData			= barycoordsBufferAlloc.getHostPtr();
+	deMemset(barycoordsBufferData, 0, static_cast<size_t>(barycoordsBufferSize));
+	flushAlloc(vkd, device, barycoordsBufferAlloc);
+
+	// Descriptor set layout.
+	DescriptorSetLayoutBuilder dsLayoutBuilder;
+	dsLayoutBuilder.addSingleBinding(VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR, stages);
+	dsLayoutBuilder.addSingleBinding(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, stages);
+	dsLayoutBuilder.addSingleBinding(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, stages);
+	const auto setLayout = dsLayoutBuilder.build(vkd, device);
+
+	// Pipeline layout.
+	const auto pipelineLayout = makePipelineLayout(vkd, device, setLayout.get());
+
+	// Descriptor pool and set.
+	DescriptorPoolBuilder poolBuilder;
+	poolBuilder.addType(VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR);
+	poolBuilder.addType(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER);
+	poolBuilder.addType(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER);
+	const auto descriptorPool	= poolBuilder.build(vkd, device, VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT, 1u);
+	const auto descriptorSet	= makeDescriptorSet(vkd, device, descriptorPool.get(), setLayout.get());
+
+	// Update descriptor set.
+	{
+		const VkWriteDescriptorSetAccelerationStructureKHR accelDescInfo =
+		{
+			VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR,
+			nullptr,
+			1u,
+			topLevelAS.get()->getPtr(),
+		};
+		const auto uniformBufferInfo = makeDescriptorBufferInfo(directionsBuffer.get(), 0ull, VK_WHOLE_SIZE);
+		const auto storageBufferInfo = makeDescriptorBufferInfo(barycoordsBuffer.get(), 0ull, VK_WHOLE_SIZE);
+
+		DescriptorSetUpdateBuilder updateBuilder;
+		updateBuilder.writeSingle(descriptorSet.get(), DescriptorSetUpdateBuilder::Location::binding(0u), VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR, &accelDescInfo);
+		updateBuilder.writeSingle(descriptorSet.get(), DescriptorSetUpdateBuilder::Location::binding(1u), VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, &uniformBufferInfo);
+		updateBuilder.writeSingle(descriptorSet.get(), DescriptorSetUpdateBuilder::Location::binding(2u), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, &storageBufferInfo);
+		updateBuilder.update(vkd, device);
+	}
+
+	// Shader module.
+	const auto compModule = createShaderModule(vkd, device, m_context.getBinaryCollection().get("comp"), 0);
+
+	// Pipeline.
+	const VkPipelineShaderStageCreateInfo shaderInfo =
+	{
+		VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO,	//	VkStructureType						sType;
+		nullptr,												//	const void*							pNext;
+		0u,														//	VkPipelineShaderStageCreateFlags	flags;
+		VK_SHADER_STAGE_COMPUTE_BIT,							//	VkShaderStageFlagBits				stage;
+		compModule.get(),										//	VkShaderModule						module;
+		"main",													//	const char*							pName;
+		nullptr,												//	const VkSpecializationInfo*			pSpecializationInfo;
+	};
+	const VkComputePipelineCreateInfo pipelineInfo =
+	{
+		VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO,	//	VkStructureType					sType;
+		nullptr,										//	const void*						pNext;
+		0u,												//	VkPipelineCreateFlags			flags;
+		shaderInfo,										//	VkPipelineShaderStageCreateInfo	stage;
+		pipelineLayout.get(),							//	VkPipelineLayout				layout;
+		DE_NULL,										//	VkPipeline						basePipelineHandle;
+		0,												//	deInt32							basePipelineIndex;
+	};
+	const auto pipeline = createComputePipeline(vkd, device, DE_NULL, &pipelineInfo);
+
+	// Dispatch work with ray queries.
+	vkd.cmdBindPipeline(cmdBuffer, VK_PIPELINE_BIND_POINT_COMPUTE, pipeline.get());
+	vkd.cmdBindDescriptorSets(cmdBuffer, VK_PIPELINE_BIND_POINT_COMPUTE, pipelineLayout.get(), 0u, 1u, &descriptorSet.get(), 0u, nullptr);
+	vkd.cmdDispatch(cmdBuffer, 1u, 1u, 1u);
+
+	// Barrier for the output buffer.
+	const auto bufferBarrier = makeMemoryBarrier(VK_ACCESS_SHADER_WRITE_BIT, VK_ACCESS_HOST_READ_BIT);
+	vkd.cmdPipelineBarrier(cmdBuffer, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, VK_PIPELINE_STAGE_HOST_BIT, 0u, 1u, &bufferBarrier, 0u, nullptr, 0u, nullptr);
+
+	endCommandBuffer(vkd, cmdBuffer);
+	submitCommandsAndWait(vkd, device, queue, cmdBuffer);
+
+	// Verify results.
+	std::vector<tcu::Vec4>	outputData				(expectedOutputCoordinates.size());
+	const auto				barycoordsBufferSizeSz	= static_cast<size_t>(barycoordsBufferSize);
+
+	invalidateAlloc(vkd, device, barycoordsBufferAlloc);
+	DE_ASSERT(de::dataSize(outputData) == barycoordsBufferSizeSz);
+	deMemcpy(outputData.data(), barycoordsBufferData, barycoordsBufferSizeSz);
+
+	for (size_t i = 0; i < outputData.size(); ++i)
+	{
+		const auto& outVal		= outputData[i];
+		const auto& expectedVal	= expectedOutputCoordinates[i];
+
+		if (outVal.z() != 0.0f || outVal.w() != 0.0f || de::abs(outVal.x() - expectedVal.x()) > kThreshold || de::abs(outVal.y() - expectedVal.y()) > kThreshold)
+		{
+			std::ostringstream msg;
+			msg << "Unexpected value found for ray " << i << ": expected " << expectedVal << " and found " << outVal << ";";
+			TCU_FAIL(msg.str());
+		}
+	}
+
+	return tcu::TestStatus::pass("Pass");
+}
+
+} // anonymous
+
+tcu::TestCaseGroup*	createBarycentricCoordinatesTests (tcu::TestContext& testCtx)
+{
+	using GroupPtr = de::MovePtr<tcu::TestCaseGroup>;
+
+	GroupPtr mainGroup(new tcu::TestCaseGroup(testCtx, "barycentric_coordinates", "Test barycentric coordinates reported by the ray query"));
+
+	deUint32 seed = 1614674687u;
+	mainGroup->addChild(new BarycentricCoordinatesCase(testCtx, "compute", "", TestParams{seed++}));
+
+	return mainGroup.release();
+}
+
+} // RayQuery
+} // vkt
+
diff --git a/external/vulkancts/modules/vulkan/pipeline/vktPipelineVertexOnlyTests.hpp b/external/vulkancts/modules/vulkan/ray_query/vktRayQueryBarycentricCoordinatesTests.hpp
similarity index 66%
copy from external/vulkancts/modules/vulkan/pipeline/vktPipelineVertexOnlyTests.hpp
copy to external/vulkancts/modules/vulkan/ray_query/vktRayQueryBarycentricCoordinatesTests.hpp
index 1a85ebf..77ae0f2 100644
--- a/external/vulkancts/modules/vulkan/pipeline/vktPipelineVertexOnlyTests.hpp
+++ b/external/vulkancts/modules/vulkan/ray_query/vktRayQueryBarycentricCoordinatesTests.hpp
@@ -1,11 +1,11 @@
-#ifndef _VKTPIPELINEVERTEXONLYTESTS_HPP
-#define _VKTPIPELINEVERTEXONLYTESTS_HPP
-/*------------------------------------------------------------------------
+#ifndef _VKTRAYQUERYBARYCENTRICCOORDINATESTESTS_HPP
+#define _VKTRAYQUERYBARYCENTRICCOORDINATESTESTS_HPP
+/*-------------------------------------------------------------------------
  * Vulkan Conformance Tests
  * ------------------------
  *
- * Copyright (c) 2019 Google LLC
- * Copyright (c) 2019 The Khronos Group Inc.
+ * Copyright (c) 2021 The Khronos Group Inc.
+ * Copyright (c) 2021 Valve Corporation.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -21,7 +21,7 @@
  *
  *//*!
  * \file
- * \brief Tests using only vertex shader in a graphics pipeline
+ * \brief Ray Query Barycentric Coordinates Tests
  *//*--------------------------------------------------------------------*/
 
 #include "tcuDefs.hpp"
@@ -29,12 +29,12 @@
 
 namespace vkt
 {
-namespace pipeline
+namespace RayQuery
 {
 
-tcu::TestCaseGroup*	createVertexOnlyTests (tcu::TestContext& testCtx);
+tcu::TestCaseGroup*	createBarycentricCoordinatesTests (tcu::TestContext& testCtx);
 
-} // pipeline
+} // RayQuery
 } // vkt
 
-#endif // _VKTPIPELINEVERTEXONLYTESTS_HPP
+#endif // _VKTRAYQUERYBARYCENTRICCOORDINATESTESTS_HPP
diff --git a/external/vulkancts/modules/vulkan/ray_query/vktRayQueryBuiltinTests.cpp b/external/vulkancts/modules/vulkan/ray_query/vktRayQueryBuiltinTests.cpp
index 0d1ed87..f387b4e 100644
--- a/external/vulkancts/modules/vulkan/ray_query/vktRayQueryBuiltinTests.cpp
+++ b/external/vulkancts/modules/vulkan/ray_query/vktRayQueryBuiltinTests.cpp
@@ -26,6 +26,7 @@
 #include "vkDefs.hpp"
 
 #include "vktTestCase.hpp"
+#include "vktCustomInstancesDevices.hpp"
 #include "vktTestGroupUtil.hpp"
 #include "vkCmdUtil.hpp"
 #include "vkObjUtil.hpp"
@@ -40,6 +41,7 @@
 #include "tcuTextureUtil.hpp"
 #include "tcuTestLog.hpp"
 #include "tcuImageCompare.hpp"
+#include "tcuCommandLine.hpp"
 
 #include "vkRayTracingUtil.hpp"
 
@@ -105,6 +107,21 @@
 
 			struct TestParams;
 
+			// Similar to a subset of the test context but allows us to plug in a custom device when needed.
+			// Note TestEnvironment objects do not own the resources they point to.
+			struct TestEnvironment
+			{
+				const InstanceInterface*	vki;
+				VkPhysicalDevice			physicalDevice;
+				const DeviceInterface*		vkd;
+				VkDevice					device;
+				Allocator*					allocator;
+				VkQueue						queue;
+				deUint32					queueFamilyIndex;
+				BinaryCollection*			binaryCollection;
+				tcu::TestLog*				log;
+			};
+
 			typedef void (*CheckSupportFunc)(Context& context, const TestParams& testParams);
 			typedef void (*InitProgramsFunc)(SourceCollections& programCollection, const TestParams& testParams);
 			typedef const std::string(*ShaderBodyTextFunc)(const TestParams& testParams);
@@ -115,9 +132,9 @@
 				PipelineConfiguration() {};
 				virtual			~PipelineConfiguration() {};
 
-				virtual void	initConfiguration(Context& context,
+				virtual void	initConfiguration(const TestEnvironment& env,
 					TestParams& testParams) = 0;
-				virtual void	fillCommandBuffer(Context& context,
+				virtual void	fillCommandBuffer(const TestEnvironment& env,
 					TestParams& testParams,
 					VkCommandBuffer					commandBuffer,
 					const VkAccelerationStructureKHR* rayQueryTopAccelerationStructurePtr,
@@ -127,49 +144,50 @@
 			class TestConfiguration
 			{
 			public:
-				TestConfiguration()
+				TestConfiguration(Context& context)
 					: m_bottomAccelerationStructures()
 					, m_topAccelerationStructure()
 					, m_expected()
+					, m_testEnvironment()
 				{
+					prepareTestEnvironment(context);
 				}
 				virtual															~TestConfiguration()
 				{
 				}
 
-				virtual const VkAccelerationStructureKHR* initAccelerationStructures(Context& context,
-					TestParams& testParams,
-					VkCommandBuffer					cmdBuffer) = 0;
-				virtual bool													verify(BufferWithMemory* resultBuffer,
-					Context& context,
-					TestParams& testParams);
+				const TestEnvironment&						getTestEnvironment			() const;
+				virtual const VkAccelerationStructureKHR*	initAccelerationStructures	(TestParams& testParams, VkCommandBuffer cmdBuffer) = 0;
+				virtual bool								verify						(BufferWithMemory* resultBuffer, TestParams& testParams);
 
 			protected:
+				void										prepareTestEnvironment		(Context& context);
+
 				std::vector<de::SharedPtr<BottomLevelAccelerationStructure>>	m_bottomAccelerationStructures;
 				de::SharedPtr<TopLevelAccelerationStructure>					m_topAccelerationStructure;
 				std::vector<deInt32>											m_expected;
+				de::MovePtr<TestEnvironment>									m_testEnvironment;
 			};
 
 			class TestConfigurationFloat : public TestConfiguration
 			{
 			public:
-				TestConfigurationFloat()
-					: TestConfiguration()
+				TestConfigurationFloat(Context& context)
+					: TestConfiguration(context)
 				{
 				}
 				virtual															~TestConfigurationFloat()
 				{
 				}
 				virtual bool													verify(BufferWithMemory* resultBuffer,
-					Context& context,
 					TestParams& testParams) override;
 			};
 
 			class TestConfigurationVector : public TestConfiguration
 			{
 			public:
-				TestConfigurationVector(bool useStrictComponentMatching = true)
-					: TestConfiguration(),
+				TestConfigurationVector(Context& context, bool useStrictComponentMatching = true)
+					: TestConfiguration(context),
 					m_useStrictComponentMatching(useStrictComponentMatching)
 				{
 				}
@@ -177,7 +195,6 @@
 				{
 				}
 				virtual bool													verify(BufferWithMemory* resultBuffer,
-					Context& context,
 					TestParams& testParams) override;
 
 			private:
@@ -187,15 +204,14 @@
 			class TestConfigurationMatrix : public TestConfiguration
 			{
 			public:
-				TestConfigurationMatrix()
-					: TestConfiguration()
+				TestConfigurationMatrix(Context& context)
+					: TestConfiguration(context)
 				{
 				}
 				virtual															~TestConfigurationMatrix()
 				{
 				}
 				virtual bool													verify(BufferWithMemory* resultBuffer,
-					Context& context,
 					TestParams& testParams) override;
 			};
 
@@ -365,13 +381,13 @@
 				GraphicsConfiguration();
 				virtual							~GraphicsConfiguration() {};
 
-				void							initVertexBuffer(Context& context,
+				void							initVertexBuffer(const TestEnvironment& env,
 					TestParams& testParams);
-				Move<VkPipeline>				makeGraphicsPipeline(Context& context,
+				Move<VkPipeline>				makeGraphicsPipeline(const TestEnvironment& env,
 					TestParams& testParams);
-				virtual void					initConfiguration(Context& context,
+				virtual void					initConfiguration(const TestEnvironment& env,
 					TestParams& testParams) override;
-				virtual void					fillCommandBuffer(Context& context,
+				virtual void					fillCommandBuffer(const TestEnvironment& env,
 					TestParams& testParams,
 					VkCommandBuffer					commandBuffer,
 					const VkAccelerationStructureKHR* rayQueryTopAccelerationStructurePtr,
@@ -744,14 +760,14 @@
 				}
 			}
 
-			void GraphicsConfiguration::initVertexBuffer(Context& context,
+			void GraphicsConfiguration::initVertexBuffer(const TestEnvironment& env,
 				TestParams& testParams)
 			{
-				const DeviceInterface& vkd = context.getDeviceInterface();
-				const VkDevice			device = context.getDevice();
+				const DeviceInterface&	vkd = *env.vkd;
+				const VkDevice			device = env.device;
+				Allocator&				allocator = *env.allocator;
 				const deUint32			width = testParams.width;
 				const deUint32			height = testParams.height;
-				Allocator& allocator = context.getDefaultAllocator();
 				std::vector<tcu::Vec4>	vertices;
 
 				switch (testParams.stage)
@@ -879,11 +895,11 @@
 				}
 			}
 
-			Move<VkPipeline> GraphicsConfiguration::makeGraphicsPipeline(Context& context,
+			Move<VkPipeline> GraphicsConfiguration::makeGraphicsPipeline(const TestEnvironment& env,
 				TestParams& testParams)
 			{
-				const DeviceInterface& vkd = context.getDeviceInterface();
-				const VkDevice					device = context.getDevice();
+				const DeviceInterface&			vkd = *env.vkd;
+				const VkDevice					device = env.device;
 				const bool						tessStageTest = (testParams.stage == VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT || testParams.stage == VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT);
 				const VkPrimitiveTopology		topology = tessStageTest ? VK_PRIMITIVE_TOPOLOGY_PATCH_LIST : VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST;
 				const deUint32					patchControlPoints = tessStageTest ? 4 : 0;
@@ -906,13 +922,13 @@
 					patchControlPoints);
 			}
 
-			void GraphicsConfiguration::initConfiguration(Context& context,
+			void GraphicsConfiguration::initConfiguration(const TestEnvironment& env,
 				TestParams& testParams)
 			{
-				const DeviceInterface& vkd = context.getDeviceInterface();
-				const VkDevice			device = context.getDevice();
-				Allocator& allocator = context.getDefaultAllocator();
-				vk::BinaryCollection& collection = context.getBinaryCollection();
+				const DeviceInterface&	vkd = *env.vkd;
+				const VkDevice			device = env.device;
+				Allocator&				allocator = *env.allocator;
+				vk::BinaryCollection&	collection = *env.binaryCollection;
 				VkShaderStageFlags		shaders = static_cast<VkShaderStageFlags>(0);
 				deUint32				shaderCount = 0;
 
@@ -949,21 +965,21 @@
 				m_renderPass = makeRenderPass(vkd, device, m_framebufferFormat);
 				m_framebuffer = makeFramebuffer(vkd, device, *m_renderPass, *m_framebufferAttachment, testParams.width, testParams.height);
 				m_pipelineLayout = makePipelineLayout(vkd, device, m_descriptorSetLayout.get());
-				m_pipeline = makeGraphicsPipeline(context, testParams);
+				m_pipeline = makeGraphicsPipeline(env, testParams);
 
-				initVertexBuffer(context, testParams);
+				initVertexBuffer(env, testParams);
 			}
 
-			void GraphicsConfiguration::fillCommandBuffer(Context& context,
+			void GraphicsConfiguration::fillCommandBuffer(const TestEnvironment& env,
 				TestParams& testParams,
 				VkCommandBuffer						cmdBuffer,
 				const VkAccelerationStructureKHR* rayQueryTopAccelerationStructurePtr,
 				const VkDescriptorImageInfo& resultImageInfo)
 			{
-				const DeviceInterface& vkd = context.getDeviceInterface();
-				const VkDevice										device = context.getDevice();
-				const VkDeviceSize									vertexBufferOffset = 0;
-				const VkWriteDescriptorSetAccelerationStructureKHR	rayQueryAccelerationStructureWriteDescriptorSet =
+				const DeviceInterface&								vkd												= *env.vkd;
+				const VkDevice										device											= env.device;
+				const VkDeviceSize									vertexBufferOffset								= 0;
+				const VkWriteDescriptorSetAccelerationStructureKHR	rayQueryAccelerationStructureWriteDescriptorSet	=
 				{
 					VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR,	//  VkStructureType						sType;
 					DE_NULL,															//  const void*							pNext;
@@ -998,9 +1014,9 @@
 				static void					initPrograms(SourceCollections& programCollection,
 					const TestParams& testParams);
 
-				virtual void				initConfiguration(Context& context,
+				virtual void				initConfiguration(const TestEnvironment& env,
 					TestParams& testParams) override;
-				virtual void				fillCommandBuffer(Context& context,
+				virtual void				fillCommandBuffer(const TestEnvironment& env,
 					TestParams& testParams,
 					VkCommandBuffer					commandBuffer,
 					const VkAccelerationStructureKHR* rayQueryTopAccelerationStructurePtr,
@@ -1073,14 +1089,14 @@
 				}
 			}
 
-			void ComputeConfiguration::initConfiguration(Context& context,
+			void ComputeConfiguration::initConfiguration(const TestEnvironment& env,
 				TestParams& testParams)
 			{
 				DE_UNREF(testParams);
 
-				const DeviceInterface& vkd = context.getDeviceInterface();
-				const VkDevice			device = context.getDevice();
-				vk::BinaryCollection& collection = context.getBinaryCollection();
+				const DeviceInterface&	vkd = *env.vkd;
+				const VkDevice			device = env.device;
+				vk::BinaryCollection&	collection = *env.binaryCollection;
 
 				m_descriptorSetLayout = DescriptorSetLayoutBuilder()
 					.addSingleBinding(VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, VK_SHADER_STAGE_COMPUTE_BIT)
@@ -1096,15 +1112,15 @@
 				m_pipeline = makeComputePipeline(vkd, device, *m_pipelineLayout, *m_shaderModule);
 			}
 
-			void ComputeConfiguration::fillCommandBuffer(Context& context,
+			void ComputeConfiguration::fillCommandBuffer(const TestEnvironment& env,
 				TestParams& testParams,
 				VkCommandBuffer					cmdBuffer,
 				const VkAccelerationStructureKHR* rayQueryTopAccelerationStructurePtr,
 				const VkDescriptorImageInfo& resultImageInfo)
 			{
-				const DeviceInterface& vkd = context.getDeviceInterface();
-				const VkDevice										device = context.getDevice();
-				const VkWriteDescriptorSetAccelerationStructureKHR	rayQueryAccelerationStructureWriteDescriptorSet =
+				const DeviceInterface&								vkd												= *env.vkd;
+				const VkDevice										device											= env.device;
+				const VkWriteDescriptorSetAccelerationStructureKHR	rayQueryAccelerationStructureWriteDescriptorSet	=
 				{
 					VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR,	//  VkStructureType						sType;
 					DE_NULL,															//  const void*							pNext;
@@ -1135,9 +1151,9 @@
 				static void										initPrograms(SourceCollections& programCollection,
 					const TestParams& testParams);
 
-				virtual void									initConfiguration(Context& context,
+				virtual void									initConfiguration(const TestEnvironment& env,
 					TestParams& testParams) override;
-				virtual void									fillCommandBuffer(Context& context,
+				virtual void									fillCommandBuffer(const TestEnvironment& env,
 					TestParams& testParams,
 					VkCommandBuffer					commandBuffer,
 					const VkAccelerationStructureKHR* rayQueryTopAccelerationStructurePtr,
@@ -1446,17 +1462,17 @@
 				return shaderBindingTable;
 			}
 
-			void RayTracingConfiguration::initConfiguration(Context& context,
+			void RayTracingConfiguration::initConfiguration(const TestEnvironment& env,
 				TestParams& testParams)
 			{
 				DE_UNREF(testParams);
 
-				const InstanceInterface& vki = context.getInstanceInterface();
-				const DeviceInterface& vkd = context.getDeviceInterface();
-				const VkDevice				device = context.getDevice();
-				const VkPhysicalDevice		physicalDevice = context.getPhysicalDevice();
-				vk::BinaryCollection& collection = context.getBinaryCollection();
-				Allocator& allocator = context.getDefaultAllocator();
+				const InstanceInterface&	vki = *env.vki;
+				const DeviceInterface&		vkd = *env.vkd;
+				const VkDevice				device = env.device;
+				const VkPhysicalDevice		physicalDevice = env.physicalDevice;
+				vk::BinaryCollection&		collection = *env.binaryCollection;
+				Allocator&					allocator = *env.allocator;
 				const deUint32				shaderGroupHandleSize = getShaderGroupHandleSize(vki, physicalDevice);
 				const VkShaderStageFlags	hitStages = VK_SHADER_STAGE_ANY_HIT_BIT_KHR | VK_SHADER_STAGE_CLOSEST_HIT_BIT_KHR | VK_SHADER_STAGE_INTERSECTION_BIT_KHR;
 				deUint32					shaderCount = 0;
@@ -1523,17 +1539,17 @@
 				m_callableShaderBindingTableRegion = m_callableShaderBindingTable.get() != NULL ? makeStridedDeviceAddressRegionKHR(getBufferDeviceAddress(vkd, device, m_callableShaderBindingTable->get(), 0), shaderGroupHandleSize, shaderGroupHandleSize) : makeStridedDeviceAddressRegionKHR(DE_NULL, 0, 0);
 			}
 
-			void RayTracingConfiguration::fillCommandBuffer(Context& context,
+			void RayTracingConfiguration::fillCommandBuffer(const TestEnvironment& env,
 				TestParams& testParams,
 				VkCommandBuffer					commandBuffer,
 				const VkAccelerationStructureKHR* rayQueryTopAccelerationStructurePtr,
 				const VkDescriptorImageInfo& resultImageInfo)
 			{
-				const DeviceInterface& vkd = context.getDeviceInterface();
-				const VkDevice									device = context.getDevice();
-				Allocator& allocator = context.getDefaultAllocator();
-				de::MovePtr<BottomLevelAccelerationStructure>	bottomLevelAccelerationStructure = makeBottomLevelAccelerationStructure();
-				de::MovePtr<TopLevelAccelerationStructure>		topLevelAccelerationStructure = makeTopLevelAccelerationStructure();
+				const DeviceInterface&							vkd									= *env.vkd;
+				const VkDevice									device								= env.device;
+				Allocator&										allocator							= *env.allocator;
+				de::MovePtr<BottomLevelAccelerationStructure>	bottomLevelAccelerationStructure	= makeBottomLevelAccelerationStructure();
+				de::MovePtr<TopLevelAccelerationStructure>		topLevelAccelerationStructure		= makeTopLevelAccelerationStructure();
 
 				m_bottomLevelAccelerationStructure = de::SharedPtr<BottomLevelAccelerationStructure>(bottomLevelAccelerationStructure.release());
 				m_bottomLevelAccelerationStructure->setDefaultGeometryData(testParams.stage);
@@ -1579,9 +1595,31 @@
 					testParams.width, testParams.height, 1);
 			}
 
-			bool TestConfiguration::verify(BufferWithMemory* resultBuffer, Context& context, TestParams& testParams)
+			void TestConfiguration::prepareTestEnvironment (Context& context)
 			{
-				tcu::TestLog& log = context.getTestContext().getLog();
+				// By default, all data comes from the context.
+				m_testEnvironment = de::MovePtr<TestEnvironment>(new TestEnvironment
+				{
+					&context.getInstanceInterface(),		//	const InstanceInterface*	vki;
+					context.getPhysicalDevice(),			//	VkPhysicalDevice			physicalDevice;
+					&context.getDeviceInterface(),			//	const DeviceInterface*		vkd;
+					context.getDevice(),					//	VkDevice					device;
+					&context.getDefaultAllocator(),			//	Allocator*					allocator;
+					context.getUniversalQueue(),			//	VkQueue						queue;
+					context.getUniversalQueueFamilyIndex(),	//	deUint32					queueFamilyIndex;
+					&context.getBinaryCollection(),			//	BinaryCollection*			binaryCollection;
+					&context.getTestContext().getLog(),		//	tcu::TestLog*				log;
+				});
+			}
+
+			const TestEnvironment& TestConfiguration::getTestEnvironment () const
+			{
+				return *m_testEnvironment;
+			}
+
+			bool TestConfiguration::verify(BufferWithMemory* resultBuffer, TestParams& testParams)
+			{
+				tcu::TestLog&	log = *(m_testEnvironment->log);
 				const deUint32	width = testParams.width;
 				const deUint32	height = testParams.height;
 				const deInt32* resultPtr = (deInt32*)resultBuffer->getAllocation().getHostPtr();
@@ -1631,9 +1669,9 @@
 				return (failures == 0);
 			}
 
-			bool TestConfigurationFloat::verify(BufferWithMemory* resultBuffer, Context& context, TestParams& testParams)
+			bool TestConfigurationFloat::verify(BufferWithMemory* resultBuffer, TestParams& testParams)
 			{
-				tcu::TestLog& log = context.getTestContext().getLog();
+				tcu::TestLog&	log = *(m_testEnvironment->log);
 				const float		eps = float(FIXED_POINT_ALLOWED_ERROR) / float(FIXED_POINT_DIVISOR);
 				const deUint32	width = testParams.width;
 				const deUint32	height = testParams.height;
@@ -1690,9 +1728,9 @@
 				return (failures == 0);
 			}
 
-			bool TestConfigurationVector::verify(BufferWithMemory* resultBuffer, Context& context, TestParams& testParams)
+			bool TestConfigurationVector::verify(BufferWithMemory* resultBuffer, TestParams& testParams)
 			{
-				tcu::TestLog& log = context.getTestContext().getLog();
+				tcu::TestLog&	log = *(m_testEnvironment->log);
 				const float		eps = float(FIXED_POINT_ALLOWED_ERROR) / float(FIXED_POINT_DIVISOR);
 				const deUint32	width = testParams.width;
 				const deUint32	height = testParams.height;
@@ -1812,9 +1850,9 @@
 				return failures == 0;
 			}
 
-			bool TestConfigurationMatrix::verify(BufferWithMemory* resultBuffer, Context& context, TestParams& testParams)
+			bool TestConfigurationMatrix::verify(BufferWithMemory* resultBuffer, TestParams& testParams)
 			{
-				tcu::TestLog& log = context.getTestContext().getLog();
+				tcu::TestLog&	log = *(m_testEnvironment->log);
 				const float		eps = float(FIXED_POINT_ALLOWED_ERROR) / float(FIXED_POINT_DIVISOR);
 				const deUint32	width = testParams.width;
 				const deUint32	height = testParams.height;
@@ -1884,20 +1922,20 @@
 			class TestConfigurationFlow : public TestConfiguration
 			{
 			public:
+				TestConfigurationFlow (Context& context) : TestConfiguration(context) {}
+
 				static const std::string					getShaderBodyText(const TestParams& testParams);
 
-				virtual const VkAccelerationStructureKHR* initAccelerationStructures(Context& context,
-					TestParams& testParams,
+				virtual const VkAccelerationStructureKHR* initAccelerationStructures(TestParams& testParams,
 					VkCommandBuffer					cmdBuffer) override;
 			};
 
-			const VkAccelerationStructureKHR* TestConfigurationFlow::initAccelerationStructures(Context& context,
-				TestParams& testParams,
+			const VkAccelerationStructureKHR* TestConfigurationFlow::initAccelerationStructures(TestParams& testParams,
 				VkCommandBuffer	cmdBuffer)
 			{
-				const DeviceInterface& vkd = context.getDeviceInterface();
-				const VkDevice								device = context.getDevice();
-				Allocator& allocator = context.getDefaultAllocator();
+				const DeviceInterface&						vkd = *m_testEnvironment->vkd;
+				const VkDevice								device = m_testEnvironment->device;
+				Allocator&									allocator = *m_testEnvironment->allocator;
 				const deUint32								width = testParams.width;
 				const deUint32								height = testParams.height;
 				const deUint32								instancesGroupCount = testParams.instancesGroupCount;
@@ -2042,20 +2080,19 @@
 			class TestConfigurationPrimitiveId : public TestConfiguration
 			{
 			public:
+				TestConfigurationPrimitiveId (Context& context) : TestConfiguration(context) {}
 				static const std::string					getShaderBodyText(const TestParams& testParams);
 
-				virtual const VkAccelerationStructureKHR* initAccelerationStructures(Context& context,
-					TestParams& testParams,
+				virtual const VkAccelerationStructureKHR* initAccelerationStructures(TestParams& testParams,
 					VkCommandBuffer					cmdBuffer) override;
 			};
 
-			const VkAccelerationStructureKHR* TestConfigurationPrimitiveId::initAccelerationStructures(Context& context,
-				TestParams& testParams,
+			const VkAccelerationStructureKHR* TestConfigurationPrimitiveId::initAccelerationStructures(TestParams& testParams,
 				VkCommandBuffer	cmdBuffer)
 			{
-				const DeviceInterface& vkd = context.getDeviceInterface();
-				const VkDevice								device = context.getDevice();
-				Allocator& allocator = context.getDefaultAllocator();
+				const DeviceInterface&						vkd = *m_testEnvironment->vkd;
+				const VkDevice								device = m_testEnvironment->device;
+				Allocator&									allocator = *m_testEnvironment->allocator;
 				const deUint32								width = testParams.width;
 				const deUint32								height = testParams.height;
 				const deUint32								instancesGroupCount = testParams.instancesGroupCount;
@@ -2204,18 +2241,18 @@
 			class TestConfigurationGetRayTMin : public TestConfiguration
 			{
 			public:
+				TestConfigurationGetRayTMin (Context& context) : TestConfiguration(context) {}
 				static const std::string					getShaderBodyText(const TestParams& testParams);
 
-				virtual const VkAccelerationStructureKHR* initAccelerationStructures(Context& context,
-					TestParams& testParams,
+				virtual const VkAccelerationStructureKHR* initAccelerationStructures(TestParams& testParams,
 					VkCommandBuffer					cmdBuffer) override;
 			};
 
-			const VkAccelerationStructureKHR* TestConfigurationGetRayTMin::initAccelerationStructures(Context& context, TestParams& testParams, VkCommandBuffer cmdBuffer)
+			const VkAccelerationStructureKHR* TestConfigurationGetRayTMin::initAccelerationStructures(TestParams& testParams, VkCommandBuffer cmdBuffer)
 			{
-				const DeviceInterface& vkd = context.getDeviceInterface();
-				const VkDevice								device = context.getDevice();
-				Allocator& allocator = context.getDefaultAllocator();
+				const DeviceInterface&						vkd = *m_testEnvironment->vkd;
+				const VkDevice								device = m_testEnvironment->device;
+				Allocator&									allocator = *m_testEnvironment->allocator;
 				const deUint32								width = testParams.width;
 				const deUint32								height = testParams.height;
 				const deUint32								instancesGroupCount = testParams.instancesGroupCount;
@@ -2328,18 +2365,18 @@
 			class TestConfigurationGetWorldRayOrigin : public TestConfigurationVector
 			{
 			public:
+				TestConfigurationGetWorldRayOrigin (Context& context) : TestConfigurationVector(context) {}
 				static const std::string					getShaderBodyText(const TestParams& testParams);
 
-				virtual const VkAccelerationStructureKHR* initAccelerationStructures(Context& context,
-					TestParams& testParams,
+				virtual const VkAccelerationStructureKHR* initAccelerationStructures(TestParams& testParams,
 					VkCommandBuffer					cmdBuffer) override;
 			};
 
-			const VkAccelerationStructureKHR* TestConfigurationGetWorldRayOrigin::initAccelerationStructures(Context& context, TestParams& testParams, VkCommandBuffer cmdBuffer)
+			const VkAccelerationStructureKHR* TestConfigurationGetWorldRayOrigin::initAccelerationStructures(TestParams& testParams, VkCommandBuffer cmdBuffer)
 			{
-				const DeviceInterface& vkd = context.getDeviceInterface();
-				const VkDevice								device = context.getDevice();
-				Allocator& allocator = context.getDefaultAllocator();
+				const DeviceInterface&						vkd = *m_testEnvironment->vkd;
+				const VkDevice								device = m_testEnvironment->device;
+				Allocator&									allocator = *m_testEnvironment->allocator;
 				const deUint32								width = testParams.width;
 				const deUint32								height = testParams.height;
 				const deUint32								instancesGroupCount = testParams.instancesGroupCount;
@@ -2481,18 +2518,18 @@
 			class TestConfigurationGetWorldRayDirection : public TestConfigurationVector
 			{
 			public:
+				TestConfigurationGetWorldRayDirection (Context& context) : TestConfigurationVector(context) {}
 				static const std::string					getShaderBodyText(const TestParams& testParams);
 
-				virtual const VkAccelerationStructureKHR* initAccelerationStructures(Context& context,
-					TestParams& testParams,
+				virtual const VkAccelerationStructureKHR* initAccelerationStructures(TestParams& testParams,
 					VkCommandBuffer					cmdBuffer) override;
 			};
 
-			const VkAccelerationStructureKHR* TestConfigurationGetWorldRayDirection::initAccelerationStructures(Context& context, TestParams& testParams, VkCommandBuffer cmdBuffer)
+			const VkAccelerationStructureKHR* TestConfigurationGetWorldRayDirection::initAccelerationStructures(TestParams& testParams, VkCommandBuffer cmdBuffer)
 			{
-				const DeviceInterface& vkd = context.getDeviceInterface();
-				const VkDevice								device = context.getDevice();
-				Allocator& allocator = context.getDefaultAllocator();
+				const DeviceInterface&						vkd = *m_testEnvironment->vkd;
+				const VkDevice								device = m_testEnvironment->device;
+				Allocator&									allocator = *m_testEnvironment->allocator;
 				const deUint32								width = testParams.width;
 				const deUint32								height = testParams.height;
 				const deUint32								instancesGroupCount = testParams.instancesGroupCount;
@@ -2639,20 +2676,19 @@
 			class TestConfigurationInstanceId : public TestConfiguration
 			{
 			public:
+				TestConfigurationInstanceId (Context& context) : TestConfiguration(context) {}
 				static const std::string					getShaderBodyText(const TestParams& testParams);
 
-				virtual const VkAccelerationStructureKHR* initAccelerationStructures(Context& context,
-					TestParams& testParams,
+				virtual const VkAccelerationStructureKHR* initAccelerationStructures(TestParams& testParams,
 					VkCommandBuffer					cmdBuffer) override;
 			};
 
-			const VkAccelerationStructureKHR* TestConfigurationInstanceId::initAccelerationStructures(Context& context,
-				TestParams& testParams,
+			const VkAccelerationStructureKHR* TestConfigurationInstanceId::initAccelerationStructures(TestParams& testParams,
 				VkCommandBuffer	cmdBuffer)
 			{
-				const DeviceInterface& vkd = context.getDeviceInterface();
-				const VkDevice								device = context.getDevice();
-				Allocator& allocator = context.getDefaultAllocator();
+				const DeviceInterface&						vkd = *m_testEnvironment->vkd;
+				const VkDevice								device = m_testEnvironment->device;
+				Allocator&									allocator = *m_testEnvironment->allocator;
 				const deUint32								width = testParams.width;
 				const deUint32								height = testParams.height;
 				const deUint32								instancesGroupCount = testParams.instancesGroupCount;
@@ -2801,20 +2837,19 @@
 			class TestConfigurationInstanceCustomIndex : public TestConfiguration
 			{
 			public:
+				TestConfigurationInstanceCustomIndex (Context& context) : TestConfiguration(context) {}
 				static const std::string					getShaderBodyText(const TestParams& testParams);
 
-				virtual const VkAccelerationStructureKHR* initAccelerationStructures(Context& context,
-					TestParams& testParams,
+				virtual const VkAccelerationStructureKHR* initAccelerationStructures(TestParams& testParams,
 					VkCommandBuffer					cmdBuffer) override;
 			};
 
-			const VkAccelerationStructureKHR* TestConfigurationInstanceCustomIndex::initAccelerationStructures(Context& context,
-				TestParams& testParams,
+			const VkAccelerationStructureKHR* TestConfigurationInstanceCustomIndex::initAccelerationStructures(TestParams& testParams,
 				VkCommandBuffer	cmdBuffer)
 			{
-				const DeviceInterface& vkd = context.getDeviceInterface();
-				const VkDevice								device = context.getDevice();
-				Allocator& allocator = context.getDefaultAllocator();
+				const DeviceInterface&						vkd = *m_testEnvironment->vkd;
+				const VkDevice								device = m_testEnvironment->device;
+				Allocator&									allocator = *m_testEnvironment->allocator;
 				const deUint32								width = testParams.width;
 				const deUint32								height = testParams.height;
 				const deUint32								instancesGroupCount = testParams.instancesGroupCount;
@@ -2963,20 +2998,19 @@
 			class TestConfigurationIntersectionT : public TestConfigurationFloat
 			{
 			public:
+				TestConfigurationIntersectionT (Context& context) : TestConfigurationFloat(context) {}
 				static const std::string					getShaderBodyText(const TestParams& testParams);
 
-				virtual const VkAccelerationStructureKHR* initAccelerationStructures(Context& context,
-					TestParams& testParams,
+				virtual const VkAccelerationStructureKHR* initAccelerationStructures(TestParams& testParams,
 					VkCommandBuffer					cmdBuffer) override;
 			};
 
-			const VkAccelerationStructureKHR* TestConfigurationIntersectionT::initAccelerationStructures(Context& context,
-				TestParams& testParams,
+			const VkAccelerationStructureKHR* TestConfigurationIntersectionT::initAccelerationStructures(TestParams& testParams,
 				VkCommandBuffer	cmdBuffer)
 			{
-				const DeviceInterface& vkd = context.getDeviceInterface();
-				const VkDevice								device = context.getDevice();
-				Allocator& allocator = context.getDefaultAllocator();
+				const DeviceInterface&						vkd = *m_testEnvironment->vkd;
+				const VkDevice								device = m_testEnvironment->device;
+				Allocator&									allocator = *m_testEnvironment->allocator;
 				const deUint32								width = testParams.width;
 				const deUint32								height = testParams.height;
 				const bool									triangles = (testParams.geomType == GEOM_TYPE_TRIANGLES);
@@ -3130,20 +3164,19 @@
 			class TestConfigurationObjectRayOrigin : public TestConfigurationVector
 			{
 			public:
+				TestConfigurationObjectRayOrigin (Context& context) : TestConfigurationVector(context) {}
 				static const std::string					getShaderBodyText(const TestParams& testParams);
 
-				virtual const VkAccelerationStructureKHR* initAccelerationStructures(Context& context,
-					TestParams& testParams,
+				virtual const VkAccelerationStructureKHR* initAccelerationStructures(TestParams& testParams,
 					VkCommandBuffer					cmdBuffer) override;
 			};
 
-			const VkAccelerationStructureKHR* TestConfigurationObjectRayOrigin::initAccelerationStructures(Context& context,
-				TestParams& testParams,
+			const VkAccelerationStructureKHR* TestConfigurationObjectRayOrigin::initAccelerationStructures(TestParams& testParams,
 				VkCommandBuffer	cmdBuffer)
 			{
-				const DeviceInterface& vkd = context.getDeviceInterface();
-				const VkDevice								device = context.getDevice();
-				Allocator& allocator = context.getDefaultAllocator();
+				const DeviceInterface&						vkd = *m_testEnvironment->vkd;
+				const VkDevice								device = m_testEnvironment->device;
+				Allocator&									allocator = *m_testEnvironment->allocator;
 				const deUint32								width = testParams.width;
 				const deUint32								height = testParams.height;
 				const deUint32								depth = testParams.depth;
@@ -3311,20 +3344,19 @@
 			class TestConfigurationObjectRayDirection : public TestConfigurationVector
 			{
 			public:
+				TestConfigurationObjectRayDirection (Context& context) : TestConfigurationVector(context) {}
 				static const std::string					getShaderBodyText(const TestParams& testParams);
 
-				virtual const VkAccelerationStructureKHR* initAccelerationStructures(Context& context,
-					TestParams& testParams,
+				virtual const VkAccelerationStructureKHR* initAccelerationStructures(TestParams& testParams,
 					VkCommandBuffer					cmdBuffer) override;
 			};
 
-			const VkAccelerationStructureKHR* TestConfigurationObjectRayDirection::initAccelerationStructures(Context& context,
-				TestParams& testParams,
+			const VkAccelerationStructureKHR* TestConfigurationObjectRayDirection::initAccelerationStructures(TestParams& testParams,
 				VkCommandBuffer	cmdBuffer)
 			{
-				const DeviceInterface& vkd = context.getDeviceInterface();
-				const VkDevice								device = context.getDevice();
-				Allocator& allocator = context.getDefaultAllocator();
+				const DeviceInterface&						vkd = *m_testEnvironment->vkd;
+				const VkDevice								device = m_testEnvironment->device;
+				Allocator&									allocator = *m_testEnvironment->allocator;
 				const deUint32								width = testParams.width;
 				const deUint32								height = testParams.height;
 				const deUint32								depth = testParams.depth;
@@ -3492,20 +3524,19 @@
 			class TestConfigurationObjectToWorld : public TestConfigurationMatrix
 			{
 			public:
+				TestConfigurationObjectToWorld (Context& context) : TestConfigurationMatrix(context) {}
 				static const std::string					getShaderBodyText(const TestParams& testParams);
 
-				virtual const VkAccelerationStructureKHR* initAccelerationStructures(Context& context,
-					TestParams& testParams,
+				virtual const VkAccelerationStructureKHR* initAccelerationStructures(TestParams& testParams,
 					VkCommandBuffer					cmdBuffer) override;
 			};
 
-			const VkAccelerationStructureKHR* TestConfigurationObjectToWorld::initAccelerationStructures(Context& context,
-				TestParams& testParams,
+			const VkAccelerationStructureKHR* TestConfigurationObjectToWorld::initAccelerationStructures(TestParams& testParams,
 				VkCommandBuffer	cmdBuffer)
 			{
-				const DeviceInterface& vkd = context.getDeviceInterface();
-				const VkDevice								device = context.getDevice();
-				Allocator& allocator = context.getDefaultAllocator();
+				const DeviceInterface&						vkd = *m_testEnvironment->vkd;
+				const VkDevice								device = m_testEnvironment->device;
+				Allocator&									allocator = *m_testEnvironment->allocator;
 				const deUint32								width = testParams.width;
 				const deUint32								height = testParams.height;
 				const bool									triangles = (testParams.geomType == GEOM_TYPE_TRIANGLES);
@@ -3709,20 +3740,19 @@
 			class TestConfigurationWorldToObject : public TestConfigurationMatrix
 			{
 			public:
+				TestConfigurationWorldToObject (Context& context) : TestConfigurationMatrix(context) {}
 				static const std::string					getShaderBodyText(const TestParams& testParams);
 
-				virtual const VkAccelerationStructureKHR* initAccelerationStructures(Context& context,
-					TestParams& testParams,
+				virtual const VkAccelerationStructureKHR* initAccelerationStructures(TestParams& testParams,
 					VkCommandBuffer					cmdBuffer) override;
 			};
 
-			const VkAccelerationStructureKHR* TestConfigurationWorldToObject::initAccelerationStructures(Context& context,
-				TestParams& testParams,
+			const VkAccelerationStructureKHR* TestConfigurationWorldToObject::initAccelerationStructures(TestParams& testParams,
 				VkCommandBuffer	cmdBuffer)
 			{
-				const DeviceInterface& vkd = context.getDeviceInterface();
-				const VkDevice								device = context.getDevice();
-				Allocator& allocator = context.getDefaultAllocator();
+				const DeviceInterface&						vkd = *m_testEnvironment->vkd;
+				const VkDevice								device = m_testEnvironment->device;
+				Allocator&									allocator = *m_testEnvironment->allocator;
 				const deUint32								width = testParams.width;
 				const deUint32								height = testParams.height;
 				const bool									triangles = (testParams.geomType == GEOM_TYPE_TRIANGLES);
@@ -3926,35 +3956,39 @@
 			class TestConfigurationNullASStruct : public TestConfiguration
 			{
 			public:
-				TestConfigurationNullASStruct();
+				TestConfigurationNullASStruct(Context& context);
 				~TestConfigurationNullASStruct();
 
-				static const std::string					getShaderBodyText(const TestParams& testParams);
-				static void									checkSupport(Context& context,
-					const TestParams& testParams);
+				static const std::string					getShaderBodyText			(const TestParams& testParams);
+				static void									checkSupport				(Context& context, const TestParams& testParams);
 
-				virtual const VkAccelerationStructureKHR* initAccelerationStructures(Context& context,
-					TestParams& testParams,
-					VkCommandBuffer					cmdBuffer) override;
+				virtual const VkAccelerationStructureKHR*	initAccelerationStructures	(TestParams& testParams, VkCommandBuffer cmdBuffer) override;
 			protected:
+				void										prepareTestEnvironment		(Context& context);
 				Move<VkAccelerationStructureKHR>			m_emptyAccelerationStructure;
+
+				Move<VkDevice>								m_device;
+				de::MovePtr<DeviceDriver>					m_vkd;
+				de::MovePtr<SimpleAllocator>				m_allocator;
 			};
 
-			TestConfigurationNullASStruct::TestConfigurationNullASStruct()
-				: TestConfiguration()
+			TestConfigurationNullASStruct::TestConfigurationNullASStruct(Context& context)
+				: TestConfiguration(context)
 				, m_emptyAccelerationStructure()
+				, m_device()
+				, m_vkd()
+				, m_allocator()
 			{
+				prepareTestEnvironment(context);
 			}
 
 			TestConfigurationNullASStruct::~TestConfigurationNullASStruct()
 			{
 			}
 
-			const VkAccelerationStructureKHR* TestConfigurationNullASStruct::initAccelerationStructures(Context& context,
-				TestParams& testParams,
+			const VkAccelerationStructureKHR* TestConfigurationNullASStruct::initAccelerationStructures(TestParams& testParams,
 				VkCommandBuffer	cmdBuffer)
 			{
-				DE_UNREF(context);
 				DE_UNREF(cmdBuffer);
 
 				m_expected = std::vector<deInt32>(testParams.width * testParams.height, 1);
@@ -3967,12 +4001,136 @@
 			{
 				DE_UNREF(testParams);
 
-				context.requireDeviceFunctionality("VK_EXT_robustness2");
+				// Check if the physical device supports VK_EXT_robustness2 and the nullDescriptor feature.
+				const auto&	vki					= context.getInstanceInterface();
+				const auto	physicalDevice		= context.getPhysicalDevice();
+				const auto	supportedExtensions	= enumerateDeviceExtensionProperties(vki, physicalDevice, nullptr);
 
-				const vk::VkPhysicalDeviceRobustness2FeaturesEXT& robustness2FeaturesEXT = context.getRobustness2FeaturesEXT();
+				if (!isExtensionSupported(supportedExtensions, RequiredExtension("VK_EXT_robustness2")))
+					TCU_THROW(NotSupportedError, "VK_EXT_robustness2 not supported");
 
-				if (!robustness2FeaturesEXT.nullDescriptor)
-					TCU_THROW(NotSupportedError, "Requires VkPhysicalDeviceRobustness2FeaturesEXT::nullDescriptor");
+				VkPhysicalDeviceRobustness2FeaturesEXT	robustness2Features	= initVulkanStructure();
+				VkPhysicalDeviceFeatures2				features2			= initVulkanStructure(&robustness2Features);
+
+				vki.getPhysicalDeviceFeatures2(physicalDevice, &features2);
+				if (!robustness2Features.nullDescriptor)
+					TCU_THROW(NotSupportedError, "VkPhysicalDeviceRobustness2FeaturesEXT::nullDescriptor not supported");
+			}
+
+			void TestConfigurationNullASStruct::prepareTestEnvironment (Context& context)
+			{
+				// Check if the physical device supports VK_EXT_robustness2 and the nullDescriptor feature.
+				const auto&	vkp					= context.getPlatformInterface();
+				const auto&	vki					= context.getInstanceInterface();
+				const auto	instance			= context.getInstance();
+				const auto	physicalDevice		= context.getPhysicalDevice();
+				const auto	supportedExtensions	= enumerateDeviceExtensionProperties(vki, physicalDevice, nullptr);
+				const auto	queueFamilyIndex	= context.getUniversalQueueFamilyIndex();
+				const auto	queuePriority		= 1.0f;
+				bool		accelStructSupport	= false;
+
+				// Add anything that's supported and may be needed, including nullDescriptor.
+				VkPhysicalDeviceFeatures2							features2						= initVulkanStructure();
+				VkPhysicalDeviceBufferDeviceAddressFeaturesKHR		deviceAddressFeatures			= initVulkanStructure();
+				VkPhysicalDeviceAccelerationStructureFeaturesKHR	accelerationStructureFeatures	= initVulkanStructure();
+				VkPhysicalDeviceRayQueryFeaturesKHR					rayQueryFeatures				= initVulkanStructure();
+				VkPhysicalDeviceRayTracingPipelineFeaturesKHR		raytracingPipelineFeatures		= initVulkanStructure();
+				VkPhysicalDeviceRobustness2FeaturesEXT				robustness2Features				= initVulkanStructure();
+				std::vector<const char*>							deviceExtensions;
+
+				if (isExtensionSupported(supportedExtensions, RequiredExtension("VK_KHR_deferred_host_operations")))
+				{
+					deviceExtensions.push_back("VK_KHR_deferred_host_operations");
+				}
+
+				if (isExtensionSupported(supportedExtensions, RequiredExtension("VK_KHR_buffer_device_address")))
+				{
+					deviceAddressFeatures.pNext = features2.pNext;
+					features2.pNext = &deviceAddressFeatures;
+					deviceExtensions.push_back("VK_KHR_buffer_device_address");
+				}
+
+				if (isExtensionSupported(supportedExtensions, RequiredExtension("VK_KHR_acceleration_structure")))
+				{
+					accelerationStructureFeatures.pNext = features2.pNext;
+					features2.pNext = &accelerationStructureFeatures;
+					deviceExtensions.push_back("VK_KHR_acceleration_structure");
+					accelStructSupport = true;
+				}
+
+				if (isExtensionSupported(supportedExtensions, RequiredExtension("VK_KHR_ray_query")))
+				{
+					rayQueryFeatures.pNext = features2.pNext;
+					features2.pNext = &rayQueryFeatures;
+					deviceExtensions.push_back("VK_KHR_ray_query");
+				}
+
+				if (isExtensionSupported(supportedExtensions, RequiredExtension("VK_KHR_ray_tracing_pipeline")))
+				{
+					raytracingPipelineFeatures.pNext = features2.pNext;
+					features2.pNext = &raytracingPipelineFeatures;
+					deviceExtensions.push_back("VK_KHR_ray_tracing_pipeline");
+				}
+
+				vki.getPhysicalDeviceFeatures2(physicalDevice, &features2);
+
+				// Add robustness2 features to the chain and make sure robustBufferAccess is consistent with robustBufferAccess2.
+				features2.features.robustBufferAccess = VK_FALSE;
+				robustness2Features.nullDescriptor = VK_TRUE;
+				robustness2Features.pNext = features2.pNext;
+				features2.pNext = &robustness2Features;
+
+				// Add more needed extensions.
+				deviceExtensions.push_back("VK_EXT_robustness2");
+				if (accelStructSupport)
+				{
+					// Not promoted yet in Vulkan 1.1.
+					deviceExtensions.push_back("VK_EXT_descriptor_indexing");
+					deviceExtensions.push_back("VK_KHR_spirv_1_4");
+					deviceExtensions.push_back("VK_KHR_shader_float_controls");
+				}
+
+				const VkDeviceQueueCreateInfo queueInfo =
+				{
+					VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO,	//	VkStructureType				sType;
+					nullptr,									//	const void*					pNext;
+					0u,											//	VkDeviceQueueCreateFlags	flags;
+					queueFamilyIndex,							//	deUint32					queueFamilyIndex;
+					1u,											//	deUint32					queueCount;
+					&queuePriority,								//	const float*				pQueuePriorities;
+				};
+
+				const VkDeviceCreateInfo createInfo =
+				{
+					VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO,				//	VkStructureType					sType;
+					features2.pNext,									//	const void*						pNext;
+					0u,													//	VkDeviceCreateFlags				flags;
+					1u,													//	deUint32						queueCreateInfoCount;
+					&queueInfo,											//	const VkDeviceQueueCreateInfo*	pQueueCreateInfos;
+					0u,													//	deUint32						enabledLayerCount;
+					nullptr,											//	const char* const*				ppEnabledLayerNames;
+					static_cast<deUint32>(deviceExtensions.size()),		//	deUint32						enabledExtensionCount;
+					deviceExtensions.data(),							//	const char* const*				ppEnabledExtensionNames;
+					&features2.features,								//	const VkPhysicalDeviceFeatures*	pEnabledFeatures;
+				};
+
+				m_device			= createCustomDevice(context.getTestContext().getCommandLine().isValidationEnabled(), vkp, instance, vki, physicalDevice, &createInfo);
+				m_vkd				= de::MovePtr<DeviceDriver>(new DeviceDriver(vkp, instance, m_device.get()));
+				const auto queue	= getDeviceQueue(*m_vkd, *m_device, queueFamilyIndex, 0u);
+				m_allocator			= de::MovePtr<SimpleAllocator>(new SimpleAllocator(*m_vkd, m_device.get(), getPhysicalDeviceMemoryProperties(vki, physicalDevice)));
+
+				m_testEnvironment	= de::MovePtr<TestEnvironment>(new TestEnvironment
+				{
+					&vki,									//	const InstanceInterface*	vki;
+					physicalDevice,							//	VkPhysicalDevice			physicalDevice;
+					m_vkd.get(),							//	const DeviceInterface*		vkd;
+					m_device.get(),							//	VkDevice					device;
+					m_allocator.get(),						//	Allocator*					allocator;
+					queue,									//	VkQueue						queue;
+					queueFamilyIndex,						//	deUint32					queueFamilyIndex;
+					&context.getBinaryCollection(),			//	BinaryCollection*			binaryCollection;
+					&context.getTestContext().getLog(),		//	tcu::TestLog*				log;
+				});
 			}
 
 			const std::string TestConfigurationNullASStruct::getShaderBodyText(const TestParams& testParams)
@@ -4006,18 +4164,18 @@
 			class TestConfigurationGetIntersectionCandidateAABBOpaque : public TestConfiguration
 			{
 			public:
+				TestConfigurationGetIntersectionCandidateAABBOpaque (Context& context) : TestConfiguration(context) {}
 				static const std::string					getShaderBodyText(const TestParams& testParams);
 
-				virtual const VkAccelerationStructureKHR* initAccelerationStructures(Context& context,
-					TestParams& testParams,
+				virtual const VkAccelerationStructureKHR* initAccelerationStructures(TestParams& testParams,
 					VkCommandBuffer					cmdBuffer) override;
 			};
 
-			const VkAccelerationStructureKHR* TestConfigurationGetIntersectionCandidateAABBOpaque::initAccelerationStructures(Context& context, TestParams& testParams, VkCommandBuffer cmdBuffer)
+			const VkAccelerationStructureKHR* TestConfigurationGetIntersectionCandidateAABBOpaque::initAccelerationStructures(TestParams& testParams, VkCommandBuffer cmdBuffer)
 			{
-				const DeviceInterface& vkd = context.getDeviceInterface();
-				const VkDevice								device = context.getDevice();
-				Allocator& allocator = context.getDefaultAllocator();
+				const DeviceInterface&						vkd = *m_testEnvironment->vkd;
+				const VkDevice								device = m_testEnvironment->device;
+				Allocator&									allocator = *m_testEnvironment->allocator;
 				const deUint32								width = testParams.width;
 				const deUint32								height = testParams.height;
 				const deUint32								instancesGroupCount = testParams.instancesGroupCount;
@@ -4133,19 +4291,19 @@
 			class TestConfigurationGetIntersectionFrontFace : public TestConfiguration
 			{
 			public:
+				TestConfigurationGetIntersectionFrontFace (Context& context) : TestConfiguration(context) {}
 				static const std::string					getShaderBodyTextCandidate(const TestParams& testParams);
 				static const std::string					getShaderBodyTextCommitted(const TestParams& testParams);
 
-				virtual const VkAccelerationStructureKHR* initAccelerationStructures(Context& context,
-					TestParams& testParams,
+				virtual const VkAccelerationStructureKHR* initAccelerationStructures(TestParams& testParams,
 					VkCommandBuffer					cmdBuffer) override;
 			};
 
-			const VkAccelerationStructureKHR* TestConfigurationGetIntersectionFrontFace::initAccelerationStructures(Context& context, TestParams& testParams, VkCommandBuffer cmdBuffer)
+			const VkAccelerationStructureKHR* TestConfigurationGetIntersectionFrontFace::initAccelerationStructures(TestParams& testParams, VkCommandBuffer cmdBuffer)
 			{
-				const DeviceInterface& vkd = context.getDeviceInterface();
-				const VkDevice								device = context.getDevice();
-				Allocator& allocator = context.getDefaultAllocator();
+				const DeviceInterface&						vkd = *m_testEnvironment->vkd;
+				const VkDevice								device = m_testEnvironment->device;
+				Allocator&									allocator = *m_testEnvironment->allocator;
 				const deUint32								width = testParams.width;
 				const deUint32								height = testParams.height;
 				const deUint32								instancesGroupCount = testParams.instancesGroupCount;
@@ -4298,19 +4456,19 @@
 			class TestConfigurationGetIntersectionGeometryIndex : public TestConfiguration
 			{
 			public:
+				TestConfigurationGetIntersectionGeometryIndex (Context& context) : TestConfiguration(context) {}
 				static const std::string					getShaderBodyTextCandidate(const TestParams& testParams);
 				static const std::string					getShaderBodyTextCommitted(const TestParams& testParams);
 
-				virtual const VkAccelerationStructureKHR* initAccelerationStructures(Context& context,
-					TestParams& testParams,
+				virtual const VkAccelerationStructureKHR* initAccelerationStructures(TestParams& testParams,
 					VkCommandBuffer					cmdBuffer) override;
 			};
 
-			const VkAccelerationStructureKHR* TestConfigurationGetIntersectionGeometryIndex::initAccelerationStructures(Context& context, TestParams& testParams, VkCommandBuffer cmdBuffer)
+			const VkAccelerationStructureKHR* TestConfigurationGetIntersectionGeometryIndex::initAccelerationStructures(TestParams& testParams, VkCommandBuffer cmdBuffer)
 			{
-				const DeviceInterface& vkd = context.getDeviceInterface();
-				const VkDevice								device = context.getDevice();
-				Allocator& allocator = context.getDefaultAllocator();
+				const DeviceInterface&						vkd = *m_testEnvironment->vkd;
+				const VkDevice								device = m_testEnvironment->device;
+				Allocator&									allocator = *m_testEnvironment->allocator;
 				const deUint32								width = testParams.width;
 				const deUint32								height = testParams.height;
 				const deUint32								instancesGroupCount = testParams.instancesGroupCount;
@@ -4463,8 +4621,8 @@
 			class TestConfigurationGetIntersectionBarycentrics : public TestConfigurationVector
 			{
 			public:
-				TestConfigurationGetIntersectionBarycentrics()
-					: TestConfigurationVector(false)
+				TestConfigurationGetIntersectionBarycentrics(Context& context)
+					: TestConfigurationVector(context, false)
 				{
 					/* Stub */
 				}
@@ -4472,16 +4630,15 @@
 				static const std::string	getShaderBodyTextCandidate(const TestParams& testParams);
 				static const std::string	getShaderBodyTextCommitted(const TestParams& testParams);
 
-				virtual const VkAccelerationStructureKHR* initAccelerationStructures(Context& context,
-					TestParams& testParams,
+				virtual const VkAccelerationStructureKHR* initAccelerationStructures(TestParams& testParams,
 					VkCommandBuffer					cmdBuffer) override;
 			};
 
-			const VkAccelerationStructureKHR* TestConfigurationGetIntersectionBarycentrics::initAccelerationStructures(Context& context, TestParams& testParams, VkCommandBuffer cmdBuffer)
+			const VkAccelerationStructureKHR* TestConfigurationGetIntersectionBarycentrics::initAccelerationStructures(TestParams& testParams, VkCommandBuffer cmdBuffer)
 			{
-				const DeviceInterface& vkd = context.getDeviceInterface();
-				const VkDevice								device = context.getDevice();
-				Allocator& allocator = context.getDefaultAllocator();
+				const DeviceInterface&						vkd = *m_testEnvironment->vkd;
+				const VkDevice								device = m_testEnvironment->device;
+				Allocator&									allocator = *m_testEnvironment->allocator;
 				const deUint32								width = testParams.width;
 				const deUint32								height = testParams.height;
 				const deUint32								instancesGroupCount = testParams.instancesGroupCount;
@@ -4663,19 +4820,19 @@
 			class TestConfigurationGetIntersectionInstanceShaderBindingTableRecordOffset : public TestConfiguration
 			{
 			public:
+				TestConfigurationGetIntersectionInstanceShaderBindingTableRecordOffset (Context& context) : TestConfiguration(context) {}
 				static const std::string					getShaderBodyTextCandidate(const TestParams& testParams);
 				static const std::string					getShaderBodyTextCommitted(const TestParams& testParams);
 
-				virtual const VkAccelerationStructureKHR* initAccelerationStructures(Context& context,
-					TestParams& testParams,
+				virtual const VkAccelerationStructureKHR* initAccelerationStructures(TestParams& testParams,
 					VkCommandBuffer					cmdBuffer) override;
 			};
 
-			const VkAccelerationStructureKHR* TestConfigurationGetIntersectionInstanceShaderBindingTableRecordOffset::initAccelerationStructures(Context& context, TestParams& testParams, VkCommandBuffer cmdBuffer)
+			const VkAccelerationStructureKHR* TestConfigurationGetIntersectionInstanceShaderBindingTableRecordOffset::initAccelerationStructures(TestParams& testParams, VkCommandBuffer cmdBuffer)
 			{
-				const DeviceInterface& vkd = context.getDeviceInterface();
-				const VkDevice								device = context.getDevice();
-				Allocator& allocator = context.getDefaultAllocator();
+				const DeviceInterface&						vkd = *m_testEnvironment->vkd;
+				const VkDevice								device = m_testEnvironment->device;
+				Allocator&									allocator = *m_testEnvironment->allocator;
 				const deUint32								width = testParams.width;
 				const deUint32								height = testParams.height;
 				const deUint32								instancesGroupCount = testParams.instancesGroupCount;
@@ -4825,10 +4982,10 @@
 			class TestConfigurationRayQueryTerminate: public TestConfiguration
 			{
 			public:
+				TestConfigurationRayQueryTerminate (Context& context) : TestConfiguration(context) {}
 				static const std::string getShaderBodyText(const TestParams& testParams);
 
-				virtual const VkAccelerationStructureKHR* initAccelerationStructures(Context& context,
-					TestParams& testParams,
+				virtual const VkAccelerationStructureKHR* initAccelerationStructures(TestParams& testParams,
 					VkCommandBuffer					cmdBuffer) override;
 
 				private:
@@ -4837,11 +4994,11 @@
 
 			const deUint32 TestConfigurationRayQueryTerminate::N_RAY_QUERIES_TO_USE = 8;
 
-			const VkAccelerationStructureKHR* TestConfigurationRayQueryTerminate::initAccelerationStructures(Context& context, TestParams& testParams, VkCommandBuffer cmdBuffer)
+			const VkAccelerationStructureKHR* TestConfigurationRayQueryTerminate::initAccelerationStructures(TestParams& testParams, VkCommandBuffer cmdBuffer)
 			{
-				const DeviceInterface& vkd = context.getDeviceInterface();
-				const VkDevice								device = context.getDevice();
-				Allocator& allocator = context.getDefaultAllocator();
+				const DeviceInterface&						vkd = *m_testEnvironment->vkd;
+				const VkDevice								device = m_testEnvironment->device;
+				Allocator&									allocator = *m_testEnvironment->allocator;
 				const deUint32								width = testParams.width;
 				const deUint32								height = testParams.height;
 				const deUint32								instancesGroupCount = testParams.instancesGroupCount;
@@ -5005,19 +5162,19 @@
 			class TestConfigurationGetIntersectionType : public TestConfiguration
 			{
 			public:
+				TestConfigurationGetIntersectionType (Context& context) : TestConfiguration(context) {}
 				static const std::string	getShaderBodyTextCandidate(const TestParams& testParams);
 				static const std::string	getShaderBodyTextCommitted(const TestParams& testParams);
 
-				virtual const VkAccelerationStructureKHR* initAccelerationStructures(Context& context,
-					TestParams& testParams,
+				virtual const VkAccelerationStructureKHR* initAccelerationStructures(TestParams& testParams,
 					VkCommandBuffer					cmdBuffer) override;
 			};
 
-			const VkAccelerationStructureKHR* TestConfigurationGetIntersectionType::initAccelerationStructures(Context& context, TestParams& testParams, VkCommandBuffer cmdBuffer)
+			const VkAccelerationStructureKHR* TestConfigurationGetIntersectionType::initAccelerationStructures(TestParams& testParams, VkCommandBuffer cmdBuffer)
 			{
-				const DeviceInterface& vkd = context.getDeviceInterface();
-				const VkDevice								device = context.getDevice();
-				Allocator& allocator = context.getDefaultAllocator();
+				const DeviceInterface&						vkd = *m_testEnvironment->vkd;
+				const VkDevice								device = m_testEnvironment->device;
+				Allocator&									allocator = *m_testEnvironment->allocator;
 				const deUint32								width = testParams.width;
 				const deUint32								height = testParams.height;
 				const deUint32								instancesGroupCount = testParams.instancesGroupCount;
@@ -5191,18 +5348,18 @@
 			class TestConfigurationUsingWrapperFunction : public TestConfiguration
 			{
 			public:
-				virtual const VkAccelerationStructureKHR*	initAccelerationStructures(Context&				context,
-																					   TestParams&			testParams,
+				TestConfigurationUsingWrapperFunction (Context& context) : TestConfiguration(context) {}
+				virtual const VkAccelerationStructureKHR*	initAccelerationStructures(TestParams&			testParams,
 																					   VkCommandBuffer		cmdBuffer) override;
 
 				static const std::string getShaderBodyText(const TestParams& testParams);
 			};
 
-			const VkAccelerationStructureKHR* TestConfigurationUsingWrapperFunction::initAccelerationStructures(Context& context, TestParams& testParams, VkCommandBuffer cmdBuffer)
+			const VkAccelerationStructureKHR* TestConfigurationUsingWrapperFunction::initAccelerationStructures(TestParams& testParams, VkCommandBuffer cmdBuffer)
 			{
-				const DeviceInterface&	vkd = context.getDeviceInterface();
-				const VkDevice			device = context.getDevice();
-				Allocator&				allocator = context.getDefaultAllocator();
+				const DeviceInterface&	vkd = *m_testEnvironment->vkd;
+				const VkDevice			device = m_testEnvironment->device;
+				Allocator&				allocator = *m_testEnvironment->allocator;
 				const deUint32			width = testParams.width;
 				const deUint32			height = testParams.height;
 				const deUint32			instancesGroupCount = testParams.instancesGroupCount;
@@ -5462,32 +5619,32 @@
 			{
 				switch (m_data.testType)
 				{
-				case TEST_TYPE_FLOW:																	m_testConfig = de::MovePtr<TestConfiguration>(new TestConfigurationFlow());														break;
-				case TEST_TYPE_PRIMITIVE_ID:															m_testConfig = de::MovePtr<TestConfiguration>(new TestConfigurationPrimitiveId());												break;
-				case TEST_TYPE_INSTANCE_ID:																m_testConfig = de::MovePtr<TestConfiguration>(new TestConfigurationInstanceId());												break;
-				case TEST_TYPE_INSTANCE_CUSTOM_INDEX:													m_testConfig = de::MovePtr<TestConfiguration>(new TestConfigurationInstanceCustomIndex());										break;
-				case TEST_TYPE_INTERSECTION_T_KHR:														m_testConfig = de::MovePtr<TestConfiguration>(new TestConfigurationIntersectionT());											break;
-				case TEST_TYPE_OBJECT_RAY_ORIGIN_KHR:													m_testConfig = de::MovePtr<TestConfiguration>(new TestConfigurationObjectRayOrigin());											break;
-				case TEST_TYPE_OBJECT_RAY_DIRECTION_KHR:												m_testConfig = de::MovePtr<TestConfiguration>(new TestConfigurationObjectRayDirection());										break;
-				case TEST_TYPE_OBJECT_TO_WORLD_KHR:														m_testConfig = de::MovePtr<TestConfiguration>(new TestConfigurationObjectToWorld());											break;
-				case TEST_TYPE_WORLD_TO_OBJECT_KHR:														m_testConfig = de::MovePtr<TestConfiguration>(new TestConfigurationWorldToObject());											break;
-				case TEST_TYPE_NULL_ACCELERATION_STRUCTURE:												m_testConfig = de::MovePtr<TestConfiguration>(new TestConfigurationNullASStruct());												break;
-				case TEST_TYPE_USING_WRAPPER_FUNCTION:													m_testConfig = de::MovePtr<TestConfiguration>(new TestConfigurationUsingWrapperFunction());										break;
-				case TEST_TYPE_GET_RAY_TMIN:															m_testConfig = de::MovePtr<TestConfiguration>(new TestConfigurationGetRayTMin());												break;
-				case TEST_TYPE_GET_WORLD_RAY_ORIGIN:													m_testConfig = de::MovePtr<TestConfiguration>(new TestConfigurationGetWorldRayOrigin());										break;
-				case TEST_TYPE_GET_WORLD_RAY_DIRECTION:													m_testConfig = de::MovePtr<TestConfiguration>(new TestConfigurationGetWorldRayDirection());										break;
-				case TEST_TYPE_GET_INTERSECTION_CANDIDATE_AABB_OPAQUE:									m_testConfig = de::MovePtr<TestConfiguration>(new TestConfigurationGetIntersectionCandidateAABBOpaque());						break;
-				case TEST_TYPE_GET_INTERSECTION_FRONT_FACE_CANDIDATE:									m_testConfig = de::MovePtr<TestConfiguration>(new TestConfigurationGetIntersectionFrontFace());									break;
-				case TEST_TYPE_GET_INTERSECTION_FRONT_FACE_COMMITTED:									m_testConfig = de::MovePtr<TestConfiguration>(new TestConfigurationGetIntersectionFrontFace());									break;
-				case TEST_TYPE_GET_INTERSECTION_GEOMETRY_INDEX_CANDIDATE:								m_testConfig = de::MovePtr<TestConfiguration>(new TestConfigurationGetIntersectionGeometryIndex());								break;
-				case TEST_TYPE_GET_INTERSECTION_GEOMETRY_INDEX_COMMITTED:								m_testConfig = de::MovePtr<TestConfiguration>(new TestConfigurationGetIntersectionGeometryIndex());								break;
-				case TEST_TYPE_GET_INTERSECTION_BARYCENTRICS_CANDIDATE:									m_testConfig = de::MovePtr<TestConfiguration>(new TestConfigurationGetIntersectionBarycentrics());								break;
-				case TEST_TYPE_GET_INTERSECTION_BARYCENTRICS_COMMITTED:									m_testConfig = de::MovePtr<TestConfiguration>(new TestConfigurationGetIntersectionBarycentrics());								break;
-				case TEST_TYPE_GET_INTERSECTION_INSTANCE_SHADER_BINDING_TABLE_RECORD_OFFSET_CANDIDATE:	m_testConfig = de::MovePtr<TestConfiguration>(new TestConfigurationGetIntersectionInstanceShaderBindingTableRecordOffset());	break;
-				case TEST_TYPE_GET_INTERSECTION_INSTANCE_SHADER_BINDING_TABLE_RECORD_OFFSET_COMMITTED:	m_testConfig = de::MovePtr<TestConfiguration>(new TestConfigurationGetIntersectionInstanceShaderBindingTableRecordOffset());	break;
-				case TEST_TYPE_RAY_QUERY_TERMINATE:														m_testConfig = de::MovePtr<TestConfiguration>(new TestConfigurationRayQueryTerminate());										break;
-				case TEST_TYPE_GET_INTERSECTION_TYPE_CANDIDATE:											m_testConfig = de::MovePtr<TestConfiguration>(new TestConfigurationGetIntersectionType());										break;
-				case TEST_TYPE_GET_INTERSECTION_TYPE_COMMITTED:											m_testConfig = de::MovePtr<TestConfiguration>(new TestConfigurationGetIntersectionType());										break;
+				case TEST_TYPE_FLOW:																	m_testConfig = de::MovePtr<TestConfiguration>(new TestConfigurationFlow(context));													break;
+				case TEST_TYPE_PRIMITIVE_ID:															m_testConfig = de::MovePtr<TestConfiguration>(new TestConfigurationPrimitiveId(context));											break;
+				case TEST_TYPE_INSTANCE_ID:																m_testConfig = de::MovePtr<TestConfiguration>(new TestConfigurationInstanceId(context));											break;
+				case TEST_TYPE_INSTANCE_CUSTOM_INDEX:													m_testConfig = de::MovePtr<TestConfiguration>(new TestConfigurationInstanceCustomIndex(context));									break;
+				case TEST_TYPE_INTERSECTION_T_KHR:														m_testConfig = de::MovePtr<TestConfiguration>(new TestConfigurationIntersectionT(context));											break;
+				case TEST_TYPE_OBJECT_RAY_ORIGIN_KHR:													m_testConfig = de::MovePtr<TestConfiguration>(new TestConfigurationObjectRayOrigin(context));										break;
+				case TEST_TYPE_OBJECT_RAY_DIRECTION_KHR:												m_testConfig = de::MovePtr<TestConfiguration>(new TestConfigurationObjectRayDirection(context));									break;
+				case TEST_TYPE_OBJECT_TO_WORLD_KHR:														m_testConfig = de::MovePtr<TestConfiguration>(new TestConfigurationObjectToWorld(context));											break;
+				case TEST_TYPE_WORLD_TO_OBJECT_KHR:														m_testConfig = de::MovePtr<TestConfiguration>(new TestConfigurationWorldToObject(context));											break;
+				case TEST_TYPE_NULL_ACCELERATION_STRUCTURE:												m_testConfig = de::MovePtr<TestConfiguration>(new TestConfigurationNullASStruct(context));											break;
+				case TEST_TYPE_USING_WRAPPER_FUNCTION:													m_testConfig = de::MovePtr<TestConfiguration>(new TestConfigurationUsingWrapperFunction(context));									break;
+				case TEST_TYPE_GET_RAY_TMIN:															m_testConfig = de::MovePtr<TestConfiguration>(new TestConfigurationGetRayTMin(context));											break;
+				case TEST_TYPE_GET_WORLD_RAY_ORIGIN:													m_testConfig = de::MovePtr<TestConfiguration>(new TestConfigurationGetWorldRayOrigin(context));										break;
+				case TEST_TYPE_GET_WORLD_RAY_DIRECTION:													m_testConfig = de::MovePtr<TestConfiguration>(new TestConfigurationGetWorldRayDirection(context));									break;
+				case TEST_TYPE_GET_INTERSECTION_CANDIDATE_AABB_OPAQUE:									m_testConfig = de::MovePtr<TestConfiguration>(new TestConfigurationGetIntersectionCandidateAABBOpaque(context));					break;
+				case TEST_TYPE_GET_INTERSECTION_FRONT_FACE_CANDIDATE:									m_testConfig = de::MovePtr<TestConfiguration>(new TestConfigurationGetIntersectionFrontFace(context));								break;
+				case TEST_TYPE_GET_INTERSECTION_FRONT_FACE_COMMITTED:									m_testConfig = de::MovePtr<TestConfiguration>(new TestConfigurationGetIntersectionFrontFace(context));								break;
+				case TEST_TYPE_GET_INTERSECTION_GEOMETRY_INDEX_CANDIDATE:								m_testConfig = de::MovePtr<TestConfiguration>(new TestConfigurationGetIntersectionGeometryIndex(context));							break;
+				case TEST_TYPE_GET_INTERSECTION_GEOMETRY_INDEX_COMMITTED:								m_testConfig = de::MovePtr<TestConfiguration>(new TestConfigurationGetIntersectionGeometryIndex(context));							break;
+				case TEST_TYPE_GET_INTERSECTION_BARYCENTRICS_CANDIDATE:									m_testConfig = de::MovePtr<TestConfiguration>(new TestConfigurationGetIntersectionBarycentrics(context));							break;
+				case TEST_TYPE_GET_INTERSECTION_BARYCENTRICS_COMMITTED:									m_testConfig = de::MovePtr<TestConfiguration>(new TestConfigurationGetIntersectionBarycentrics(context));							break;
+				case TEST_TYPE_GET_INTERSECTION_INSTANCE_SHADER_BINDING_TABLE_RECORD_OFFSET_CANDIDATE:	m_testConfig = de::MovePtr<TestConfiguration>(new TestConfigurationGetIntersectionInstanceShaderBindingTableRecordOffset(context));	break;
+				case TEST_TYPE_GET_INTERSECTION_INSTANCE_SHADER_BINDING_TABLE_RECORD_OFFSET_COMMITTED:	m_testConfig = de::MovePtr<TestConfiguration>(new TestConfigurationGetIntersectionInstanceShaderBindingTableRecordOffset(context));	break;
+				case TEST_TYPE_RAY_QUERY_TERMINATE:														m_testConfig = de::MovePtr<TestConfiguration>(new TestConfigurationRayQueryTerminate(context));										break;
+				case TEST_TYPE_GET_INTERSECTION_TYPE_CANDIDATE:											m_testConfig = de::MovePtr<TestConfiguration>(new TestConfigurationGetIntersectionType(context));									break;
+				case TEST_TYPE_GET_INTERSECTION_TYPE_COMMITTED:											m_testConfig = de::MovePtr<TestConfiguration>(new TestConfigurationGetIntersectionType(context));									break;
 
 				default: TCU_THROW(InternalError, "Unknown test type");
 				}
@@ -5532,11 +5689,12 @@
 
 			tcu::TestStatus RayQueryBuiltinTestInstance::iterate (void)
 			{
-				const DeviceInterface&				vkd									= m_context.getDeviceInterface();
-				const VkDevice						device								= m_context.getDevice();
-				const VkQueue						queue								= m_context.getUniversalQueue();
-				Allocator&							allocator							= m_context.getDefaultAllocator();
-				const deUint32						queueFamilyIndex					= m_context.getUniversalQueueFamilyIndex();
+				const TestEnvironment&				testEnv								= m_testConfig->getTestEnvironment();
+				const DeviceInterface&				vkd									= *testEnv.vkd;
+				const VkDevice						device								= testEnv.device;
+				const VkQueue						queue								= testEnv.queue;
+				Allocator&							allocator							= *testEnv.allocator;
+				const deUint32						queueFamilyIndex					= testEnv.queueFamilyIndex;
 
 				const deUint32						width								= m_data.width;
 				const deUint32						height								= m_data.height;
@@ -5558,7 +5716,7 @@
 				const Move<VkCommandBuffer>			cmdBuffer							= allocateCommandBuffer(vkd, device, *cmdPool, VK_COMMAND_BUFFER_LEVEL_PRIMARY);
 				const VkAccelerationStructureKHR*	topAccelerationStructurePtr			= DE_NULL;
 
-				m_pipelineConfig->initConfiguration(m_context, m_data);
+				m_pipelineConfig->initConfiguration(testEnv, m_data);
 
 				beginCommandBuffer(vkd, *cmdBuffer, 0u);
 				{
@@ -5572,9 +5730,9 @@
 					vkd.cmdClearColorImage(*cmdBuffer, **image, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, &clearValue.color, 1, &imageSubresourceRange);
 					cmdPipelineImageMemoryBarrier(vkd, *cmdBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR, &postImageBarrier);
 
-					topAccelerationStructurePtr = m_testConfig->initAccelerationStructures(m_context, m_data, *cmdBuffer);
+					topAccelerationStructurePtr = m_testConfig->initAccelerationStructures(m_data, *cmdBuffer);
 
-					m_pipelineConfig->fillCommandBuffer(m_context, m_data, *cmdBuffer, topAccelerationStructurePtr, resultImageInfo);
+					m_pipelineConfig->fillCommandBuffer(testEnv, m_data, *cmdBuffer, topAccelerationStructurePtr, resultImageInfo);
 
 					cmdPipelineMemoryBarrier(vkd, *cmdBuffer, VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, &postTestMemoryBarrier);
 
@@ -5588,7 +5746,7 @@
 
 				invalidateMappedMemoryRange(vkd, device, resultBuffer->getAllocation().getMemory(), resultBuffer->getAllocation().getOffset(), VK_WHOLE_SIZE);
 
-				if (m_testConfig->verify(resultBuffer.get(), m_context, m_data))
+				if (m_testConfig->verify(resultBuffer.get(), m_data))
 					return tcu::TestStatus::pass("Pass");
 				else
 					return tcu::TestStatus::fail("Fail");
@@ -5602,7 +5760,7 @@
 
 				virtual void			checkSupport(Context& context) const;
 				virtual	void			initPrograms(SourceCollections& programCollection) const;
-				virtual TestInstance* createInstance(Context& context) const;
+				virtual TestInstance*	createInstance(Context& context) const;
 
 			private:
 				TestParams				m_data;
diff --git a/external/vulkancts/modules/vulkan/ray_query/vktRayQueryDirectionTests.cpp b/external/vulkancts/modules/vulkan/ray_query/vktRayQueryDirectionTests.cpp
new file mode 100644
index 0000000..359510b
--- /dev/null
+++ b/external/vulkancts/modules/vulkan/ray_query/vktRayQueryDirectionTests.cpp
@@ -0,0 +1,515 @@
+/*-------------------------------------------------------------------------
+ * Vulkan Conformance Tests
+ * ------------------------
+ *
+ * Copyright (c) 2021 The Khronos Group Inc.
+ * Copyright (c) 2021 Valve Corporation.
+ *
+ * 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 Ray Query Direction Tests
+ *//*--------------------------------------------------------------------*/
+
+#include "vktRayQueryDirectionTests.hpp"
+#include "vktTestCase.hpp"
+
+#include "vkObjUtil.hpp"
+#include "vkCmdUtil.hpp"
+#include "vkTypeUtil.hpp"
+#include "vkBuilderUtil.hpp"
+#include "vkRayTracingUtil.hpp"
+#include "vkBufferWithMemory.hpp"
+#include "vkBarrierUtil.hpp"
+
+#include "tcuVector.hpp"
+#include "tcuMatrix.hpp"
+
+#include "deUniquePtr.hpp"
+#include "deRandom.hpp"
+#include "deStringUtil.hpp"
+#include "deDefs.hpp"
+
+#include <vector>
+#include <cmath>
+#include <sstream>
+#include <utility>
+#include <algorithm>
+#include <limits>
+
+namespace vkt
+{
+namespace RayQuery
+{
+
+namespace
+{
+
+using namespace vk;
+
+using GeometryData = std::vector<tcu::Vec3>;
+
+struct SpaceObjects
+{
+	tcu::Vec3		origin;
+	tcu::Vec3		direction;
+	GeometryData	geometry;
+
+	SpaceObjects (VkGeometryTypeKHR geometryType)
+		: origin	(0.0f, 0.0f, 1.0f)	// Origin of the ray at (0, 0, 1).
+		, direction	(0.0f, 0.0f, 1.0f)	// Shooting towards (0, 0, 1).
+		, geometry	()
+	{
+		// Triangle or AABB around (0, 0, 5).
+		DE_ASSERT(geometryType == VK_GEOMETRY_TYPE_TRIANGLES_KHR || geometryType == VK_GEOMETRY_TYPE_AABBS_KHR);
+		if (geometryType == VK_GEOMETRY_TYPE_TRIANGLES_KHR)
+		{
+			geometry.reserve(3u);
+			geometry.push_back(tcu::Vec3( 0.0f,  0.5f, 5.0f));
+			geometry.push_back(tcu::Vec3(-0.5f, -0.5f, 5.0f));
+			geometry.push_back(tcu::Vec3( 0.5f, -0.5f, 5.0f));
+		}
+		else
+		{
+			geometry.reserve(2u);
+			geometry.push_back(tcu::Vec3(-0.5f, -0.5f, 5.0f));
+			geometry.push_back(tcu::Vec3( 0.5f,  0.5f, 5.0f));
+		}
+	}
+
+	static float getDefaultDistance (void)
+	{
+		// Consistent with the Z coordinates of the origin, direction and points in the default constructor.
+		return 4.0f;
+	}
+
+	// Calculates expected distance given the direction scaling factor.
+	static float getExpectedDistance (float directionScale)
+	{
+		return getDefaultDistance() / directionScale;
+	}
+};
+
+// Default test tolerance for distance values.
+constexpr float kDefaultTolerance = 0.001f;
+
+// Calculates appropriate values for Tmin/Tmax given the expected distance.
+std::pair<float, float> calcTminTmax (float expectedDistance)
+{
+	const auto margin = kDefaultTolerance / 2.0f;
+	return std::make_pair(de::max(expectedDistance - margin, 0.0f), expectedDistance + margin);
+}
+
+// Get matrix to scale a point with the given scale factor.
+tcu::Mat3 getScaleMatrix (float scaleFactor)
+{
+	const float scaleDirectionMatrixData[] =
+	{
+		scaleFactor,		0.f,			0.f,
+		0.f,				scaleFactor,	0.f,
+		0.f,				0.f,			scaleFactor,
+	};
+	return tcu::Mat3(scaleDirectionMatrixData);
+}
+
+// Get a matrix to rotate a point around the X and Y axis by the given angles in radians.
+tcu::Mat3 getRotationMatrix (float rotationX, float rotationY)
+{
+	const float cosA = std::cos(rotationX);
+	const float sinA = std::sin(rotationX);
+
+	const float cosB = std::cos(rotationY);
+	const float sinB = std::sin(rotationY);
+
+	const float rotationMatrixDataX[] =
+	{
+		1.0f, 0.0f, 0.0f,
+		0.0f, cosA,-sinA,
+		0.0f, sinA, cosA,
+	};
+	const tcu::Mat3 rotationMatrixX (rotationMatrixDataX);
+
+	const float rotationMatrixDataY[] =
+	{
+		cosB, 0.0f,-sinB,
+		0.0f, 1.0f, 0.0f,
+		sinB, 0.0f, cosB,
+	};
+	const tcu::Mat3 rotationMatrixY (rotationMatrixDataY);
+
+	return rotationMatrixX * rotationMatrixY;
+}
+
+// Converts transformation matrix to the expected KHR format.
+VkTransformMatrixKHR toTransformMatrixKHR (const tcu::Mat3& mat3)
+{
+	VkTransformMatrixKHR result;
+
+	deMemset(result.matrix, 0, sizeof(result.matrix));
+	for (int y = 0; y < 3; ++y)
+	for (int x = 0; x < 3; ++x)
+		result.matrix[x][y] = mat3[x][y];
+
+	return result;
+}
+
+struct TestParams
+{
+	SpaceObjects			spaceObjects;
+	float					directionScale;
+	float					rotationX;
+	float					rotationY;
+	VkGeometryTypeKHR		geometryType;
+};
+
+class DirectionTestCase : public vkt::TestCase
+{
+public:
+							DirectionTestCase		(tcu::TestContext& testCtx, const std::string& name, const std::string& description, const TestParams& params);
+	virtual					~DirectionTestCase		(void) {}
+
+	virtual void			checkSupport			(Context& context) const;
+	virtual void			initPrograms			(vk::SourceCollections& programCollection) const;
+	virtual TestInstance*	createInstance			(Context& context) const;
+
+protected:
+	TestParams				m_params;
+};
+
+class DirectionTestInstance : public vkt::TestInstance
+{
+public:
+								DirectionTestInstance	(Context& context, const TestParams& params);
+	virtual						~DirectionTestInstance	(void) {}
+
+	virtual tcu::TestStatus		iterate					(void);
+
+protected:
+	TestParams					m_params;
+};
+
+
+DirectionTestCase::DirectionTestCase(tcu::TestContext& testCtx, const std::string& name, const std::string& description, const TestParams& params)
+	: vkt::TestCase	(testCtx, name, description)
+	, m_params		(params)
+{}
+
+void DirectionTestCase::checkSupport (Context& context) const
+{
+	context.requireDeviceFunctionality("VK_KHR_acceleration_structure");
+	context.requireDeviceFunctionality("VK_KHR_ray_query");
+}
+
+// Push constants. They need to match the shaders.
+// Note: origin and direction will be used as a Vec3. Declaring them as Vec4 eases matching alignments.
+struct PushConstants
+{
+	tcu::Vec4	origin;
+	tcu::Vec4	direction;
+	float		tmix;
+	float		tmax;
+};
+
+tcu::Vec4 toVec4 (const tcu::Vec3& vec3)
+{
+	return tcu::Vec4(vec3.x(), vec3.y(), vec3.z(), 0.0f);
+}
+
+void DirectionTestCase::initPrograms (vk::SourceCollections& programCollection) const
+{
+	const vk::ShaderBuildOptions buildOptions (programCollection.usedVulkanVersion, vk::SPIRV_VERSION_1_4, 0u, true);
+
+	std::ostringstream comp;
+	comp
+		<< "#version 460 core\n"
+		<< "#extension GL_EXT_ray_query : require\n"
+		<< "\n"
+		<< "layout(local_size_x=1, local_size_y=1, local_size_z=1) in;\n"
+		<< "\n"
+		<< "layout(set=0, binding=0) uniform accelerationStructureEXT topLevelAS;\n"
+		<< "layout(set=0, binding=1, std430) buffer OutBuffer { float val; } outBuffer;\n"
+		// Needs to match the PushConstants struct above.
+		<< "layout(push_constant, std430) uniform PushConstants {\n"
+		<< "  vec4 origin;\n"
+		<< "  vec4 direction;\n"
+		<< "  float tmin;\n"
+		<< "  float tmax;\n"
+		<< "} pc;\n"
+		<< "\n"
+		<< "void main()\n"
+		<< "{\n"
+		<< "  const uint  cullMask = 0xFF;\n"
+		<< "  float       outVal   = -10000.0f;\n"
+		<< "  rayQueryEXT rq;\n"
+		<< "  rayQueryInitializeEXT(rq, topLevelAS, gl_RayFlagsNoneEXT, cullMask, pc.origin.xyz, pc.tmin, pc.direction.xyz, pc.tmax);\n"
+		<< "  while (rayQueryProceedEXT(rq)) {\n"
+		<< "    const uint candidateType = rayQueryGetIntersectionTypeEXT(rq, false);\n"
+		<< "    if (candidateType == gl_RayQueryCandidateIntersectionTriangleEXT) {\n"
+		<< "      outVal = rayQueryGetIntersectionTEXT(rq, false);\n"
+		<< "    }\n"
+		<< "    else if (candidateType == gl_RayQueryCandidateIntersectionAABBEXT) {\n"
+		<< "      outVal = pc.tmax;\n"
+		<< "    }\n"
+		<< "  }\n"
+		<< "  outBuffer.val = outVal;\n"
+		<< "}\n"
+		;
+
+	programCollection.glslSources.add("comp") << glu::ComputeSource(updateRayTracingGLSL(comp.str())) << buildOptions;
+}
+
+TestInstance* DirectionTestCase::createInstance (Context& context) const
+{
+	return new DirectionTestInstance(context, m_params);
+}
+
+DirectionTestInstance::DirectionTestInstance (Context& context, const TestParams& params)
+	: vkt::TestInstance	(context)
+	, m_params			(params)
+{}
+
+tcu::TestStatus DirectionTestInstance::iterate (void)
+{
+	const auto&	vkd		= m_context.getDeviceInterface();
+	const auto	device	= m_context.getDevice();
+	auto&		alloc	= m_context.getDefaultAllocator();
+	const auto	qIndex	= m_context.getUniversalQueueFamilyIndex();
+	const auto	queue	= m_context.getUniversalQueue();
+	const auto	stages	= VK_SHADER_STAGE_COMPUTE_BIT;
+	const auto	pcSize	= static_cast<deUint32>(sizeof(PushConstants));
+
+	const auto	scaleMatrix		= getScaleMatrix(m_params.directionScale);
+	const auto	rotationMatrix	= getRotationMatrix(m_params.rotationX, m_params.rotationY);
+	const auto	transformMatrix	= toTransformMatrixKHR(rotationMatrix);
+
+	// Command pool and buffer.
+	const auto cmdPool		= makeCommandPool(vkd, device, qIndex);
+	const auto cmdBufferPtr	= allocateCommandBuffer(vkd, device, cmdPool.get(), VK_COMMAND_BUFFER_LEVEL_PRIMARY);
+	const auto cmdBuffer	= cmdBufferPtr.get();
+
+	beginCommandBuffer(vkd, cmdBuffer);
+
+	// Build acceleration structures.
+	auto topLevelAS		= makeTopLevelAccelerationStructure();
+	auto bottomLevelAS	= makeBottomLevelAccelerationStructure();
+
+	const bool							isTriangles		= (m_params.geometryType == VK_GEOMETRY_TYPE_TRIANGLES_KHR);
+	const VkGeometryInstanceFlagsKHR	instanceFlags	= (isTriangles ? VK_GEOMETRY_INSTANCE_TRIANGLE_FACING_CULL_DISABLE_BIT_KHR : 0);
+
+	bottomLevelAS->addGeometry(m_params.spaceObjects.geometry, isTriangles, VK_GEOMETRY_NO_DUPLICATE_ANY_HIT_INVOCATION_BIT_KHR);
+	bottomLevelAS->createAndBuild(vkd, device, cmdBuffer, alloc);
+
+	de::SharedPtr<BottomLevelAccelerationStructure> blasSharedPtr (bottomLevelAS.release());
+	topLevelAS->setInstanceCount(1);
+	topLevelAS->addInstance(blasSharedPtr, transformMatrix, 0, 0xFFu, 0u, instanceFlags);
+	topLevelAS->createAndBuild(vkd, device, cmdBuffer, alloc);
+
+	// Create output buffer.
+	const auto			bufferSize			= static_cast<VkDeviceSize>(sizeof(float));
+	const auto			bufferCreateInfo	= makeBufferCreateInfo(bufferSize, VK_BUFFER_USAGE_STORAGE_BUFFER_BIT);
+	BufferWithMemory	buffer				(vkd, device, alloc, bufferCreateInfo, MemoryRequirement::HostVisible);
+	auto&				bufferAlloc			= buffer.getAllocation();
+
+	// Fill output buffer with an initial value.
+	deMemset(bufferAlloc.getHostPtr(), 0, sizeof(float));
+	flushAlloc(vkd, device, bufferAlloc);
+
+	// Descriptor set layout and pipeline layout.
+	DescriptorSetLayoutBuilder setLayoutBuilder;
+	setLayoutBuilder.addSingleBinding(VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR, stages);
+	setLayoutBuilder.addSingleBinding(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, stages);
+	const auto setLayout = setLayoutBuilder.build(vkd, device);
+
+	const auto pcRange = makePushConstantRange(stages, 0u, pcSize);
+	const auto pipelineLayout = makePipelineLayout(vkd, device, 1u, &setLayout.get(), 1u, &pcRange);
+
+	// Descriptor pool and set.
+	DescriptorPoolBuilder poolBuilder;
+	poolBuilder.addType(VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR);
+	poolBuilder.addType(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, 1u);
+	const auto descriptorPool	= poolBuilder.build(vkd, device, VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT, 1u);
+	const auto descriptorSet	= makeDescriptorSet(vkd, device, descriptorPool.get(), setLayout.get());
+
+	// Update descriptor set.
+	{
+		const VkWriteDescriptorSetAccelerationStructureKHR accelDescInfo =
+		{
+			VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR,
+			nullptr,
+			1u,
+			topLevelAS.get()->getPtr(),
+		};
+
+		const auto bufferDescInfo = makeDescriptorBufferInfo(buffer.get(), 0ull, VK_WHOLE_SIZE);
+
+		DescriptorSetUpdateBuilder updateBuilder;
+		updateBuilder.writeSingle(descriptorSet.get(), DescriptorSetUpdateBuilder::Location::binding(0u), VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR, &accelDescInfo);
+		updateBuilder.writeSingle(descriptorSet.get(), DescriptorSetUpdateBuilder::Location::binding(1u), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, &bufferDescInfo);
+		updateBuilder.update(vkd, device);
+	}
+
+	// Shader module and pipeline.
+	const auto compModule = createShaderModule(vkd, device, m_context.getBinaryCollection().get("comp"), 0);
+
+	const VkPipelineShaderStageCreateInfo shaderInfo =
+	{
+		VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO,	//	VkStructureType						sType;
+		nullptr,												//	const void*							pNext;
+		0u,														//	VkPipelineShaderStageCreateFlags	flags;
+		VK_SHADER_STAGE_COMPUTE_BIT,							//	VkShaderStageFlagBits				stage;
+		compModule.get(),										//	VkShaderModule						module;
+		"main",													//	const char*							pName;
+		nullptr,												//	const VkSpecializationInfo*			pSpecializationInfo;
+	};
+	const VkComputePipelineCreateInfo pipelineInfo =
+	{
+		VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO,			//	VkStructureType					sType;
+		nullptr,												//	const void*						pNext;
+		0u,														//	VkPipelineCreateFlags			flags;
+		shaderInfo,												//	VkPipelineShaderStageCreateInfo	stage;
+		pipelineLayout.get(),									//	VkPipelineLayout				layout;
+		DE_NULL,												//	VkPipeline						basePipelineHandle;
+		0,														//	deInt32							basePipelineIndex;
+	};
+	const auto pipeline = createComputePipeline(vkd, device, DE_NULL, &pipelineInfo);
+
+	// Push constants.
+	const auto			rotatedOrigin		= m_params.spaceObjects.origin * rotationMatrix;
+	const auto			finalDirection		= m_params.spaceObjects.direction * scaleMatrix * rotationMatrix;
+	const auto			expectedDistance	= SpaceObjects::getExpectedDistance(m_params.directionScale);
+	const auto			tMinMax				= calcTminTmax(expectedDistance);
+	const PushConstants	pcData				=
+	{
+		toVec4(rotatedOrigin),	//	tcu::Vec4	origin;
+		toVec4(finalDirection),	//	tcu::Vec4	direction;
+		tMinMax.first,			//	float		tmix;
+		tMinMax.second,			//	float		tmax;
+	};
+
+	// Trace rays.
+	vkd.cmdBindPipeline(cmdBuffer, VK_PIPELINE_BIND_POINT_COMPUTE, pipeline.get());
+	vkd.cmdBindDescriptorSets(cmdBuffer, VK_PIPELINE_BIND_POINT_COMPUTE, pipelineLayout.get(), 0u, 1u, &descriptorSet.get(), 0u, nullptr);
+	vkd.cmdPushConstants(cmdBuffer, pipelineLayout.get(), stages, 0u, pcSize, &pcData);
+	vkd.cmdDispatch(cmdBuffer, 1u, 1u, 1u);
+
+	// Barrier for the output buffer.
+	const auto bufferBarrier = makeMemoryBarrier(VK_ACCESS_SHADER_WRITE_BIT, VK_ACCESS_HOST_READ_BIT);
+	vkd.cmdPipelineBarrier(cmdBuffer, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, VK_PIPELINE_STAGE_HOST_BIT, 0u, 1u, &bufferBarrier, 0u, nullptr, 0u, nullptr);
+
+	endCommandBuffer(vkd, cmdBuffer);
+	submitCommandsAndWait(vkd, device, queue, cmdBuffer);
+
+	// Read value back from the buffer.
+	float bufferValue = 0.0f;
+	invalidateAlloc(vkd, device, bufferAlloc);
+	deMemcpy(&bufferValue, bufferAlloc.getHostPtr(), sizeof(bufferValue));
+
+	if (de::abs(bufferValue - expectedDistance) > kDefaultTolerance)
+	{
+		std::ostringstream msg;
+		msg << "Result distance (" << bufferValue << ") differs from expected distance (" << expectedDistance << ", tolerance " << kDefaultTolerance << ")";
+		TCU_FAIL(msg.str());
+	}
+
+	return tcu::TestStatus::pass("Pass");
+}
+
+} // anonymous
+
+tcu::TestCaseGroup*	createDirectionTests(tcu::TestContext& testCtx)
+{
+	using GroupPtr = de::MovePtr<tcu::TestCaseGroup>;
+
+	GroupPtr directionGroup (new tcu::TestCaseGroup(testCtx, "direction_length", "Test direction vector length when using ray queries"));
+
+	struct
+	{
+		VkGeometryTypeKHR		geometryType;
+		const char*				name;
+	} geometryTypes[] =
+	{
+		{ VK_GEOMETRY_TYPE_TRIANGLES_KHR,	"triangles"	},
+		{ VK_GEOMETRY_TYPE_AABBS_KHR,		"aabbs"		},
+	};
+
+	const float kPi2				= DE_PI * 2.0f;
+	const float kMinScalingFactor	= 0.5f;
+	const float kMaxScalingFactor	= 10.0f;
+
+	const int kNumRandomScalingFactors	= 5;
+	const int kNumRandomRotations		= 4;
+
+	de::Random rnd(1614686501u);
+
+	// Scaling factors: 1.0 and some randomly-generated ones.
+	std::vector<float> scalingFactors;
+
+	scalingFactors.reserve(kNumRandomScalingFactors + 1);
+	scalingFactors.push_back(1.0f);
+
+	for (int i = 0; i < kNumRandomScalingFactors; ++i)
+		scalingFactors.push_back(rnd.getFloat() * (kMaxScalingFactor - kMinScalingFactor) + kMinScalingFactor);
+
+	// Rotations: 0.0 on both axis and some randomly-generated ones.
+	std::vector<std::pair<float, float>> rotationAngles;
+
+	rotationAngles.reserve(kNumRandomRotations + 1);
+	rotationAngles.push_back(std::make_pair(0.0f, 0.0f));
+
+	for (int i = 0; i < kNumRandomRotations; ++i)
+		rotationAngles.push_back(std::make_pair(rnd.getFloat() * kPi2, rnd.getFloat() * kPi2));
+
+	for (int geometryTypeIdx = 0; geometryTypeIdx < DE_LENGTH_OF_ARRAY(geometryTypes); ++geometryTypeIdx)
+	{
+		const auto& gType = geometryTypes[geometryTypeIdx];
+
+		GroupPtr geomGroup (new tcu::TestCaseGroup(testCtx, gType.name, ""));
+
+		for (size_t scalingIdx = 0; scalingIdx < scalingFactors.size(); ++scalingIdx)
+		{
+			const auto scale		= scalingFactors[scalingIdx];
+			const auto scaleName	= "scaling_factor_" + de::toString(scalingIdx);
+			GroupPtr factorGroup (new tcu::TestCaseGroup(testCtx, scaleName.c_str(), ""));
+
+			for (size_t rotationIdx = 0; rotationIdx < rotationAngles.size(); ++rotationIdx)
+			{
+				const auto angles		= rotationAngles[rotationIdx];
+				const auto angleName	= "rotation_" + de::toString(rotationIdx);
+				const auto geometryType	= gType.geometryType;
+
+				SpaceObjects spaceObjects(geometryType);
+
+				TestParams params =
+				{
+					spaceObjects,			//		SpaceObjects			spaceObjects;
+					scale,					//		float					directionScale;
+					angles.first,			//		float					rotationX;
+					angles.second,			//		float					rotationY;
+					geometryType,			//		VkGeometryTypeKHR		geometryType;
+				};
+
+				factorGroup->addChild(new DirectionTestCase(testCtx, angleName, "", params));
+			}
+
+			geomGroup->addChild(factorGroup.release());
+		}
+
+		directionGroup->addChild(geomGroup.release());
+	}
+
+	return directionGroup.release();
+}
+
+} // RayQuery
+} // vkt
diff --git a/external/vulkancts/modules/vulkan/pipeline/vktPipelineVertexOnlyTests.hpp b/external/vulkancts/modules/vulkan/ray_query/vktRayQueryDirectionTests.hpp
similarity index 69%
copy from external/vulkancts/modules/vulkan/pipeline/vktPipelineVertexOnlyTests.hpp
copy to external/vulkancts/modules/vulkan/ray_query/vktRayQueryDirectionTests.hpp
index 1a85ebf..a929ebe 100644
--- a/external/vulkancts/modules/vulkan/pipeline/vktPipelineVertexOnlyTests.hpp
+++ b/external/vulkancts/modules/vulkan/ray_query/vktRayQueryDirectionTests.hpp
@@ -1,11 +1,11 @@
-#ifndef _VKTPIPELINEVERTEXONLYTESTS_HPP
-#define _VKTPIPELINEVERTEXONLYTESTS_HPP
-/*------------------------------------------------------------------------
+#ifndef _VKTRAYQUERYDIRECTIONTESTS_HPP
+#define _VKTRAYQUERYDIRECTIONTESTS_HPP
+/*-------------------------------------------------------------------------
  * Vulkan Conformance Tests
  * ------------------------
  *
- * Copyright (c) 2019 Google LLC
- * Copyright (c) 2019 The Khronos Group Inc.
+ * Copyright (c) 2021 The Khronos Group Inc.
+ * Copyright (c) 2021 Valve Corporation.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -21,7 +21,7 @@
  *
  *//*!
  * \file
- * \brief Tests using only vertex shader in a graphics pipeline
+ * \brief Ray Query Direction Tests
  *//*--------------------------------------------------------------------*/
 
 #include "tcuDefs.hpp"
@@ -29,12 +29,12 @@
 
 namespace vkt
 {
-namespace pipeline
+namespace RayQuery
 {
 
-tcu::TestCaseGroup*	createVertexOnlyTests (tcu::TestContext& testCtx);
+tcu::TestCaseGroup*	createDirectionTests(tcu::TestContext& testCtx);
 
-} // pipeline
+} // RayQuery
 } // vkt
 
-#endif // _VKTPIPELINEVERTEXONLYTESTS_HPP
+#endif // _VKTRAYQUERYDIRECTIONTESTS_HPP
diff --git a/external/vulkancts/modules/vulkan/ray_query/vktRayQueryMiscTests.cpp b/external/vulkancts/modules/vulkan/ray_query/vktRayQueryMiscTests.cpp
new file mode 100644
index 0000000..d0a1f5e
--- /dev/null
+++ b/external/vulkancts/modules/vulkan/ray_query/vktRayQueryMiscTests.cpp
@@ -0,0 +1,360 @@
+/*-------------------------------------------------------------------------
+ * Vulkan Conformance Tests
+ * ------------------------
+ *
+ * Copyright (c) 2020 The Khronos Group Inc.
+ * Copyright (c) 2020 Valve Corporation.
+ *
+ * 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 Ray Query miscellaneous tests
+ *//*--------------------------------------------------------------------*/
+
+#include "vktRayQueryMiscTests.hpp"
+#include "vktTestCase.hpp"
+
+#include "vkRayTracingUtil.hpp"
+#include "vkBufferWithMemory.hpp"
+#include "vkObjUtil.hpp"
+#include "vkBuilderUtil.hpp"
+#include "vkTypeUtil.hpp"
+#include "vkCmdUtil.hpp"
+#include "vkBarrierUtil.hpp"
+
+#include "tcuVector.hpp"
+
+#include "deUniquePtr.hpp"
+#include "deRandom.hpp"
+
+#include <sstream>
+#include <limits>
+#include <vector>
+
+namespace vkt
+{
+namespace RayQuery
+{
+
+namespace
+{
+
+using namespace vk;
+
+class DynamicIndexingCase : public vkt::TestCase
+{
+public:
+							DynamicIndexingCase		(tcu::TestContext& testCtx, const std::string& name, const std::string& description);
+	virtual					~DynamicIndexingCase	(void) {}
+
+	virtual void			initPrograms			(vk::SourceCollections& programCollection) const override;
+	virtual void			checkSupport			(Context& context) const override;
+	virtual TestInstance*	createInstance			(Context& context) const override;
+
+	// Constants and data types.
+	static constexpr deUint32	kLocalSizeX	= 48u;
+	static constexpr deUint32	kNumQueries	= 48u;
+
+	// This must match the shader.
+	struct InputData
+	{
+		deUint32 goodQueryIndex;
+		deUint32 proceedQueryIndex;
+	};
+};
+
+class DynamicIndexingInstance : public vkt::TestInstance
+{
+public:
+								DynamicIndexingInstance		(Context& context);
+	virtual						~DynamicIndexingInstance	(void) {}
+
+	virtual tcu::TestStatus		iterate						(void);
+};
+
+DynamicIndexingCase::DynamicIndexingCase (tcu::TestContext& testCtx, const std::string& name, const std::string& description)
+	: vkt::TestCase (testCtx, name, description)
+{}
+
+void DynamicIndexingCase::initPrograms (vk::SourceCollections& programCollection) const
+{
+	const vk::ShaderBuildOptions buildOptions(programCollection.usedVulkanVersion, vk::SPIRV_VERSION_1_4, 0u, true);
+
+	std::ostringstream src;
+
+	src
+		<< "#version 460\n"
+		<< "#extension GL_EXT_ray_query : require\n"
+		<< "#extension GL_EXT_ray_tracing : require\n"
+		<< "\n"
+		<< "layout (local_size_x=" << kLocalSizeX << ", local_size_y=1, local_size_z=1) in; \n"
+		<< "\n"
+		<< "struct InputData {\n"
+		<< "    uint goodQueryIndex;\n"
+		<< "    uint proceedQueryIndex; // Note: same index as the one above in practice.\n"
+		<< "};\n"
+		<< "\n"
+		<< "layout (set=0, binding=0) uniform accelerationStructureEXT topLevelAS;\n"
+		<< "layout (set=0, binding=1, std430) buffer InputBlock {\n"
+		<< "    InputData inputData[];\n"
+		<< "} inputBlock;\n"
+		<< "layout (set=0, binding=2, std430) buffer OutputBlock {\n"
+		<< "    uint outputData[];\n"
+		<< "} outputBlock;\n"
+		<< "\n"
+		<< "void main()\n"
+		<< "{\n"
+		<< "    const uint numQueries = " << kNumQueries << ";\n"
+		<< "\n"
+		<< "    const uint rayFlags = 0u; \n"
+		<< "    const uint cullMask = 0xFFu;\n"
+		<< "    const float tmin = 0.1;\n"
+		<< "    const float tmax = 10.0;\n"
+		<< "    const vec3 direct = vec3(0, 0, 1); \n"
+		<< "\n"
+		<< "    rayQueryEXT rayQueries[numQueries];\n"
+		<< "    vec3 origin;\n"
+		<< "\n"
+		<< "    InputData inputValues = inputBlock.inputData[gl_LocalInvocationID.x];\n"
+		<< "\n"
+		<< "    // Initialize all queries. Only goodQueryIndex will have the right origin for a hit.\n"
+		<< "    for (int i = 0; i < numQueries; i++) {\n"
+		<< "        origin = ((i == inputValues.goodQueryIndex) ? vec3(0, 0, 0) : vec3(5, 5, 0));\n"
+		<< "        rayQueryInitializeEXT(rayQueries[i], topLevelAS, rayFlags, cullMask, origin, tmin, direct, tmax);\n"
+		<< "    }\n"
+		<< "\n"
+		<< "    // Attempt to proceed with the good query to confirm a hit.\n"
+		<< "    while (rayQueryProceedEXT(rayQueries[inputValues.proceedQueryIndex]))\n"
+		<< "        outputBlock.outputData[gl_LocalInvocationID.x] = 1u; \n"
+		<< "}\n"
+		;
+
+	programCollection.glslSources.add("comp") << glu::ComputeSource(updateRayTracingGLSL(src.str())) << buildOptions;
+}
+
+void DynamicIndexingCase::checkSupport (Context& context) const
+{
+	context.requireDeviceFunctionality("VK_KHR_acceleration_structure");
+	context.requireDeviceFunctionality("VK_KHR_ray_query");
+
+	const auto& rayQueryFeaturesKHR = context.getRayQueryFeatures();
+	if (!rayQueryFeaturesKHR.rayQuery)
+		TCU_THROW(NotSupportedError, "Ray queries not supported");
+
+	const auto& accelerationStructureFeaturesKHR = context.getAccelerationStructureFeatures();
+	if (!accelerationStructureFeaturesKHR.accelerationStructure)
+		TCU_FAIL("Acceleration structures not supported but ray queries supported");
+}
+
+vkt::TestInstance* DynamicIndexingCase::createInstance (Context& context) const
+{
+	return new DynamicIndexingInstance(context);
+}
+
+DynamicIndexingInstance::DynamicIndexingInstance (Context& context)
+	: vkt::TestInstance(context)
+{}
+
+deUint32 getRndIndex (de::Random& rng, deUint32 size)
+{
+	DE_ASSERT(size > 0u);
+	DE_ASSERT(size <= static_cast<deUint32>(std::numeric_limits<int>::max()));
+
+	const int	iMin = 0;
+	const int	iMax = static_cast<int>(size) - 1;
+
+	return static_cast<deUint32>(rng.getInt(iMin, iMax));
+}
+
+tcu::TestStatus DynamicIndexingInstance::iterate (void)
+{
+	using InputData = DynamicIndexingCase::InputData;
+	constexpr auto	kLocalSizeX		= DynamicIndexingCase::kLocalSizeX;
+	constexpr auto	kNumQueries		= DynamicIndexingCase::kNumQueries;
+
+	const auto&	vkd		= m_context.getDeviceInterface();
+	const auto	device	= m_context.getDevice();
+	auto&		alloc	= m_context.getDefaultAllocator();
+	const auto	queue	= m_context.getUniversalQueue();
+	const auto	qIndex	= m_context.getUniversalQueueFamilyIndex();
+
+	de::Random rng (1604936737u);
+	InputData inputDataArray[kLocalSizeX];
+	deUint32 outputDataArray[kLocalSizeX];
+
+	// Prepare input buffer.
+	for (int i = 0; i < DE_LENGTH_OF_ARRAY(inputDataArray); ++i)
+	{
+		// The two values will contain the same query index.
+		inputDataArray[i].goodQueryIndex	= getRndIndex(rng, kNumQueries);
+		inputDataArray[i].proceedQueryIndex	= inputDataArray[i].goodQueryIndex;
+	}
+
+	const auto			inputBufferSize		= static_cast<VkDeviceSize>(sizeof(inputDataArray));
+	const auto			inputBufferInfo		= makeBufferCreateInfo(inputBufferSize, VK_BUFFER_USAGE_STORAGE_BUFFER_BIT);
+	BufferWithMemory	inputBuffer			(vkd, device, alloc, inputBufferInfo, MemoryRequirement::HostVisible);
+	auto&				inputBufferAlloc	= inputBuffer.getAllocation();
+	void*				inputBufferPtr		= inputBufferAlloc.getHostPtr();
+
+	deMemcpy(inputBufferPtr, inputDataArray, static_cast<size_t>(inputBufferSize));
+	flushAlloc(vkd, device, inputBufferAlloc);
+
+	// Prepare output buffer.
+	const auto			outputBufferSize	= static_cast<VkDeviceSize>(sizeof(outputDataArray));
+	const auto			outputBufferInfo	= makeBufferCreateInfo(outputBufferSize, VK_BUFFER_USAGE_STORAGE_BUFFER_BIT);
+	BufferWithMemory	outputBuffer		(vkd, device, alloc, outputBufferInfo, MemoryRequirement::HostVisible);
+	auto&				outputBufferAlloc	= outputBuffer.getAllocation();
+	void*				outputBufferPtr		= outputBufferAlloc.getHostPtr();
+
+	deMemset(outputBufferPtr, 0, static_cast<size_t>(outputBufferSize));
+	flushAlloc(vkd, device, outputBufferAlloc);
+
+	// Prepare acceleration structures.
+	const auto cmdPool		= makeCommandPool(vkd, device, qIndex);
+	const auto cmdBufferPtr	= allocateCommandBuffer(vkd, device, cmdPool.get(), VK_COMMAND_BUFFER_LEVEL_PRIMARY);
+	const auto cmdBuffer	= cmdBufferPtr.get();
+	beginCommandBuffer(vkd, cmdBuffer);
+
+	de::SharedPtr<TopLevelAccelerationStructure>	topLevelAS		(makeTopLevelAccelerationStructure().release());
+	de::SharedPtr<BottomLevelAccelerationStructure>	bottomLevelAS	(makeBottomLevelAccelerationStructure().release());
+
+	// These need to match the origin and direction in the shader for a hit.
+	const std::vector<tcu::Vec3> vertices =
+	{
+		tcu::Vec3(-1.0f, -1.0f, 1.0f),
+		tcu::Vec3(-1.0f,  1.0f, 1.0f),
+		tcu::Vec3( 1.0f, -1.0f, 1.0f),
+
+		tcu::Vec3(-1.0f,  1.0f, 1.0f),
+		tcu::Vec3( 1.0f,  1.0f, 1.0f),
+		tcu::Vec3( 1.0f, -1.0f, 1.0f),
+	};
+
+	bottomLevelAS->addGeometry(vertices, /*triangles*/true, VK_GEOMETRY_NO_DUPLICATE_ANY_HIT_INVOCATION_BIT_KHR);
+	bottomLevelAS->createAndBuild(vkd, device, cmdBuffer, alloc);
+
+	topLevelAS->addInstance(bottomLevelAS);
+	topLevelAS->createAndBuild(vkd, device, cmdBuffer, alloc);
+
+	// Descriptor set layout.
+	const VkShaderStageFlagBits stageBit = VK_SHADER_STAGE_COMPUTE_BIT;
+
+	DescriptorSetLayoutBuilder layoutBuilder;
+	layoutBuilder.addSingleBinding(VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR, stageBit);
+	layoutBuilder.addSingleBinding(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, stageBit);
+	layoutBuilder.addSingleBinding(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, stageBit);
+	const auto descriptorSetLayout = layoutBuilder.build(vkd, device);
+
+	// Shader module.
+	const auto shaderModule = createShaderModule(vkd, device, m_context.getBinaryCollection().get("comp"), 0u);
+
+	// Pipeline layout.
+	const auto pipelineLayout = makePipelineLayout(vkd, device, descriptorSetLayout.get());
+
+	const VkPipelineShaderStageCreateInfo shaderStageInfo =
+	{
+		VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO,	//	VkStructureType						sType;
+		nullptr,												//	const void*							pNext;
+		0u,														//	VkPipelineShaderStageCreateFlags	flags;
+		stageBit,												//	VkShaderStageFlagBits				stage;
+		shaderModule.get(),										//	VkShaderModule						module;
+		"main",													//	const char*							pName;
+		nullptr,												//	const VkSpecializationInfo*			pSpecializationInfo;
+	};
+
+	const VkComputePipelineCreateInfo pipelineInfo =
+	{
+		VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO,	//	VkStructureType					sType;
+		nullptr,										//	const void*						pNext;
+		0u,												//	VkPipelineCreateFlags			flags;
+		shaderStageInfo,								//	VkPipelineShaderStageCreateInfo	stage;
+		pipelineLayout.get(),							//	VkPipelineLayout				layout;
+		DE_NULL,										//	VkPipeline						basePipelineHandle;
+		0,												//	deInt32							basePipelineIndex;
+	};
+
+	const auto pipeline = createComputePipeline(vkd, device, DE_NULL, &pipelineInfo);
+
+	// Create and update descriptor set.
+	DescriptorPoolBuilder poolBuilder;
+	poolBuilder.addType(VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR);
+	poolBuilder.addType(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, 2u);
+
+	const auto descriptorPool	= poolBuilder.build(vkd, device, VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT, 1u);
+	const auto descriptorSetPtr	= makeDescriptorSet(vkd, device, descriptorPool.get(), descriptorSetLayout.get());
+	const auto descriptorSet	= descriptorSetPtr.get();
+
+	const VkWriteDescriptorSetAccelerationStructureKHR asWrite =
+	{
+		VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR,	//	VkStructureType						sType;
+		nullptr,															//	const void*							pNext;
+		1u,																	//	deUint32							accelerationStructureCount;
+		topLevelAS->getPtr(),												//	const VkAccelerationStructureKHR*	pAccelerationStructures;
+	};
+
+	const auto inputBufferWriteInfo		= makeDescriptorBufferInfo(inputBuffer.get(), 0ull, inputBufferSize);
+	const auto outputBufferWriteInfo	= makeDescriptorBufferInfo(outputBuffer.get(), 0ull, outputBufferSize);
+
+	DescriptorSetUpdateBuilder updateBuilder;
+	updateBuilder.writeSingle(descriptorSet, DescriptorSetUpdateBuilder::Location::binding(0u), VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR, &asWrite);
+	updateBuilder.writeSingle(descriptorSet, DescriptorSetUpdateBuilder::Location::binding(1u), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, &inputBufferWriteInfo);
+	updateBuilder.writeSingle(descriptorSet, DescriptorSetUpdateBuilder::Location::binding(2u), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, &outputBufferWriteInfo);
+	updateBuilder.update(vkd, device);
+
+	// Use pipeline.
+	vkd.cmdBindPipeline(cmdBuffer, VK_PIPELINE_BIND_POINT_COMPUTE, pipeline.get());
+	vkd.cmdBindDescriptorSets(cmdBuffer, VK_PIPELINE_BIND_POINT_COMPUTE, pipelineLayout.get(), 0u, 1u, &descriptorSet, 0u, nullptr);
+	vkd.cmdDispatch(cmdBuffer, 1u, 1u, 1u);
+
+	const auto memBarrier = makeMemoryBarrier(VK_ACCESS_SHADER_WRITE_BIT, VK_ACCESS_HOST_READ_BIT);
+	vkd.cmdPipelineBarrier(cmdBuffer, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, VK_PIPELINE_STAGE_HOST_BIT, 0u, 1u, &memBarrier, 0u, nullptr, 0u, nullptr);
+
+	// Submit recorded commands.
+	endCommandBuffer(vkd, cmdBuffer);
+	submitCommandsAndWait(vkd, device, queue, cmdBuffer);
+
+	// Check output buffer.
+	invalidateAlloc(vkd, device, outputBufferAlloc);
+	deMemcpy(outputDataArray, outputBufferPtr, static_cast<size_t>(outputBufferSize));
+
+	for (int i = 0; i < DE_LENGTH_OF_ARRAY(outputDataArray); ++i)
+	{
+		constexpr auto	expected	= 1u;
+		const auto&		value		= outputDataArray[i];
+
+		if (value != expected)
+		{
+			std::ostringstream msg;
+			msg << "Unexpected value found at position " << i << " in the output buffer: expected " << expected << " but found " << value;
+			TCU_FAIL(msg.str());
+		}
+	}
+
+	return tcu::TestStatus::pass("Pass");
+}
+
+} // anonymous
+
+tcu::TestCaseGroup*	createMiscTests	(tcu::TestContext& testCtx)
+{
+	de::MovePtr<tcu::TestCaseGroup> group (new tcu::TestCaseGroup(testCtx, "misc", "Miscellaneous ray query tests"));
+
+	group->addChild(new DynamicIndexingCase(testCtx, "dynamic_indexing", "Dynamic indexing of ray queries"));
+
+	return group.release();
+}
+
+} // RayQuery
+} // vkt
+
diff --git a/external/vulkancts/modules/vulkan/pipeline/vktPipelineVertexOnlyTests.hpp b/external/vulkancts/modules/vulkan/ray_query/vktRayQueryMiscTests.hpp
similarity index 69%
copy from external/vulkancts/modules/vulkan/pipeline/vktPipelineVertexOnlyTests.hpp
copy to external/vulkancts/modules/vulkan/ray_query/vktRayQueryMiscTests.hpp
index 1a85ebf..16ea566 100644
--- a/external/vulkancts/modules/vulkan/pipeline/vktPipelineVertexOnlyTests.hpp
+++ b/external/vulkancts/modules/vulkan/ray_query/vktRayQueryMiscTests.hpp
@@ -1,11 +1,11 @@
-#ifndef _VKTPIPELINEVERTEXONLYTESTS_HPP
-#define _VKTPIPELINEVERTEXONLYTESTS_HPP
-/*------------------------------------------------------------------------
+#ifndef _VKTRAYQUERYMISCTESTS_HPP
+#define _VKTRAYQUERYMISCTESTS_HPP
+/*-------------------------------------------------------------------------
  * Vulkan Conformance Tests
  * ------------------------
  *
- * Copyright (c) 2019 Google LLC
- * Copyright (c) 2019 The Khronos Group Inc.
+ * Copyright (c) 2020 The Khronos Group Inc.
+ * Copyright (c) 2020 Valve Corporation.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -21,7 +21,7 @@
  *
  *//*!
  * \file
- * \brief Tests using only vertex shader in a graphics pipeline
+ * \brief Ray Query miscellaneous tests
  *//*--------------------------------------------------------------------*/
 
 #include "tcuDefs.hpp"
@@ -29,12 +29,12 @@
 
 namespace vkt
 {
-namespace pipeline
+namespace RayQuery
 {
 
-tcu::TestCaseGroup*	createVertexOnlyTests (tcu::TestContext& testCtx);
+tcu::TestCaseGroup*	createMiscTests	(tcu::TestContext& testCtx);
 
-} // pipeline
+} // RayQuery
 } // vkt
 
-#endif // _VKTPIPELINEVERTEXONLYTESTS_HPP
+#endif // _VKTRAYQUERYMISCTESTS_HPP
diff --git a/external/vulkancts/modules/vulkan/ray_query/vktRayQueryProceduralGeometryTests.cpp b/external/vulkancts/modules/vulkan/ray_query/vktRayQueryProceduralGeometryTests.cpp
new file mode 100644
index 0000000..2b72d94
--- /dev/null
+++ b/external/vulkancts/modules/vulkan/ray_query/vktRayQueryProceduralGeometryTests.cpp
@@ -0,0 +1,495 @@
+/*------------------------------------------------------------------------
+ * Vulkan Conformance Tests
+ * ------------------------
+ *
+ * Copyright (c) 2020 The Khronos Group Inc.
+ *
+ * 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 Test procedural geometry with complex bouding box sets
+ *//*--------------------------------------------------------------------*/
+
+#include "vktRayQueryProceduralGeometryTests.hpp"
+#include "vkDefs.hpp"
+#include "vktTestCase.hpp"
+#include "vktTestGroupUtil.hpp"
+#include "vkCmdUtil.hpp"
+#include "vkObjUtil.hpp"
+#include "vkBuilderUtil.hpp"
+#include "vkBarrierUtil.hpp"
+#include "vkBufferWithMemory.hpp"
+#include "vkImageWithMemory.hpp"
+#include "vkTypeUtil.hpp"
+#include "vkImageUtil.hpp"
+#include "vkRayTracingUtil.hpp"
+#include "tcuVectorUtil.hpp"
+#include "tcuTexture.hpp"
+#include "tcuTestLog.hpp"
+#include "tcuImageCompare.hpp"
+#include "tcuFloat.hpp"
+
+namespace vkt
+{
+namespace RayQuery
+{
+namespace
+{
+using namespace vk;
+using namespace vkt;
+
+enum class TestType
+{
+	OBJECT_BEHIND_BOUNDING_BOX = 0,
+	TRIANGLE_IN_BETWEEN
+};
+
+class RayQueryProceduralGeometryTestBase : public TestInstance
+{
+public:
+
+	RayQueryProceduralGeometryTestBase	(Context& context);
+	~RayQueryProceduralGeometryTestBase	(void) = default;
+
+	tcu::TestStatus iterate				(void) override;
+
+protected:
+
+	virtual void setupAccelerationStructures() = 0;
+
+private:
+
+	VkWriteDescriptorSetAccelerationStructureKHR	makeASWriteDescriptorSet	(const VkAccelerationStructureKHR* pAccelerationStructure);
+	void											clearBuffer					(de::SharedPtr<BufferWithMemory> buffer, VkDeviceSize bufferSize);
+
+protected:
+
+	Move<VkCommandPool>		m_cmdPool;
+	Move<VkCommandBuffer>	m_cmdBuffer;
+
+	std::vector<de::SharedPtr<BottomLevelAccelerationStructure> >	m_blasVect;
+	de::SharedPtr<TopLevelAccelerationStructure>					m_referenceTLAS;
+	de::SharedPtr<TopLevelAccelerationStructure>					m_resultTLAS;
+};
+
+RayQueryProceduralGeometryTestBase::RayQueryProceduralGeometryTestBase(Context& context)
+	: vkt::TestInstance	(context)
+	, m_referenceTLAS	(makeTopLevelAccelerationStructure().release())
+	, m_resultTLAS		(makeTopLevelAccelerationStructure().release())
+{
+}
+
+tcu::TestStatus RayQueryProceduralGeometryTestBase::iterate(void)
+{
+	const DeviceInterface&	vkd					= m_context.getDeviceInterface();
+	const VkDevice			device				= m_context.getDevice();
+	const deUint32			queueFamilyIndex	= m_context.getUniversalQueueFamilyIndex();
+	const VkQueue			queue				= m_context.getUniversalQueue();
+	Allocator&				allocator			= m_context.getDefaultAllocator();
+	const deUint32			imageSize			= 64u;
+
+	const Move<VkDescriptorPool> descriptorPool = DescriptorPoolBuilder()
+		.addType(VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR, 2u)
+		.addType(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, 2u)
+		.build(vkd, device, VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT, 2u);
+
+	Move<VkDescriptorSetLayout> descriptorSetLayout = DescriptorSetLayoutBuilder()
+		.addSingleBinding(VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR, VK_SHADER_STAGE_COMPUTE_BIT)	// as with single/four aabb's
+		.addSingleBinding(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, VK_SHADER_STAGE_COMPUTE_BIT)				// ssbo with result/reference values
+		.build(vkd, device);
+
+	const Move<VkDescriptorSet>			referenceDescriptorSet	= makeDescriptorSet(vkd, device, *descriptorPool, *descriptorSetLayout);
+	const Move<VkDescriptorSet>			resultDescriptorSet		= makeDescriptorSet(vkd, device, *descriptorPool, *descriptorSetLayout);
+
+	const VkDeviceSize					resultBufferSize		= imageSize * imageSize * sizeof(int);
+	const VkBufferCreateInfo			resultBufferCreateInfo	= makeBufferCreateInfo(resultBufferSize, VK_BUFFER_USAGE_STORAGE_BUFFER_BIT | VK_BUFFER_USAGE_TRANSFER_SRC_BIT);
+	de::SharedPtr<BufferWithMemory>		referenceBuffer			= de::SharedPtr<BufferWithMemory>(new BufferWithMemory(vkd, device, allocator, resultBufferCreateInfo, MemoryRequirement::HostVisible));
+	de::SharedPtr<BufferWithMemory>		resultBuffer			= de::SharedPtr<BufferWithMemory>(new BufferWithMemory(vkd, device, allocator, resultBufferCreateInfo, MemoryRequirement::HostVisible));
+
+	Move<VkShaderModule>				shaderModule		= createShaderModule(vkd, device, m_context.getBinaryCollection().get("comp"), 0u);
+	const Move<VkPipelineLayout>		pipelineLayout		= makePipelineLayout(vkd, device, descriptorSetLayout.get());
+	const VkComputePipelineCreateInfo	pipelineCreateInfo
+	{
+		VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO,			// VkStructureType						sType
+		DE_NULL,												// const void*							pNext
+		0u,														// VkPipelineCreateFlags				flags
+		{														// VkPipelineShaderStageCreateInfo		stage
+			VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO,
+			DE_NULL,
+			(VkPipelineShaderStageCreateFlags)0,
+			VK_SHADER_STAGE_COMPUTE_BIT,
+			*shaderModule,
+			"main",
+			DE_NULL
+		},
+		*pipelineLayout,										// VkPipelineLayout						layout
+		DE_NULL,												// VkPipeline							basePipelineHandle
+		0,														// deInt32								basePipelineIndex
+	};
+	Move<VkPipeline> pipeline = createComputePipeline(vkd, device, DE_NULL, &pipelineCreateInfo);
+
+	m_cmdPool	= createCommandPool(vkd, device, 0, queueFamilyIndex);
+	m_cmdBuffer	= allocateCommandBuffer(vkd, device, *m_cmdPool, VK_COMMAND_BUFFER_LEVEL_PRIMARY);
+
+	// clear result and reference buffers
+	clearBuffer(resultBuffer, resultBufferSize);
+	clearBuffer(referenceBuffer, resultBufferSize);
+
+	beginCommandBuffer(vkd, *m_cmdBuffer, 0u);
+	{
+		setupAccelerationStructures();
+
+		// update descriptor sets
+		{
+			typedef DescriptorSetUpdateBuilder::Location DSL;
+
+			const VkWriteDescriptorSetAccelerationStructureKHR	referenceAS		= makeASWriteDescriptorSet(m_referenceTLAS->getPtr());
+			const VkDescriptorBufferInfo						referenceSSBO	= makeDescriptorBufferInfo(**referenceBuffer, 0u, VK_WHOLE_SIZE);
+			DescriptorSetUpdateBuilder()
+				.writeSingle(*referenceDescriptorSet, DSL::binding(0u), VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR, &referenceAS)
+				.writeSingle(*referenceDescriptorSet, DSL::binding(1u), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, &referenceSSBO)
+				.update(vkd, device);
+
+			const VkWriteDescriptorSetAccelerationStructureKHR	resultAS	= makeASWriteDescriptorSet(m_resultTLAS->getPtr());
+			const VkDescriptorBufferInfo						resultSSBO	= makeDescriptorBufferInfo(**resultBuffer, 0u, VK_WHOLE_SIZE);
+			DescriptorSetUpdateBuilder()
+				.writeSingle(*resultDescriptorSet, DSL::binding(0u), VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR, &resultAS)
+				.writeSingle(*resultDescriptorSet, DSL::binding(1u), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, &resultSSBO)
+				.update(vkd, device);
+		}
+
+		// wait for data transfers
+		const VkMemoryBarrier bufferUploadBarrier = makeMemoryBarrier(VK_ACCESS_TRANSFER_WRITE_BIT, VK_ACCESS_SHADER_READ_BIT);
+		cmdPipelineMemoryBarrier(vkd, *m_cmdBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, &bufferUploadBarrier, 1u);
+
+		// wait for as build
+		const VkMemoryBarrier asBuildBarrier = makeMemoryBarrier(VK_ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_KHR, VK_ACCESS_SHADER_READ_BIT);
+		cmdPipelineMemoryBarrier(vkd, *m_cmdBuffer, VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, &asBuildBarrier, 1u);
+
+		vkd.cmdBindPipeline(*m_cmdBuffer, VK_PIPELINE_BIND_POINT_COMPUTE, *pipeline);
+
+		// generate reference
+		vkd.cmdBindDescriptorSets(*m_cmdBuffer, VK_PIPELINE_BIND_POINT_COMPUTE, *pipelineLayout, 0, 1, &referenceDescriptorSet.get(), 0, DE_NULL);
+		vkd.cmdDispatch(*m_cmdBuffer, imageSize, imageSize, 1);
+
+		// generate result
+		vkd.cmdBindDescriptorSets(*m_cmdBuffer, VK_PIPELINE_BIND_POINT_COMPUTE, *pipelineLayout, 0, 1, &resultDescriptorSet.get(), 0, DE_NULL);
+		vkd.cmdDispatch(*m_cmdBuffer, imageSize, imageSize, 1);
+
+		const VkMemoryBarrier postTraceMemoryBarrier = makeMemoryBarrier(VK_ACCESS_SHADER_WRITE_BIT, VK_ACCESS_TRANSFER_READ_BIT);
+		cmdPipelineMemoryBarrier(vkd, *m_cmdBuffer, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, &postTraceMemoryBarrier);
+	}
+	endCommandBuffer(vkd, *m_cmdBuffer);
+
+	submitCommandsAndWait(vkd, device, queue, m_cmdBuffer.get());
+
+	// verify result buffer
+	auto referenceAllocation = referenceBuffer->getAllocation();
+	invalidateMappedMemoryRange(vkd, device, referenceAllocation.getMemory(), referenceAllocation.getOffset(), resultBufferSize);
+
+	auto resultAllocation = resultBuffer->getAllocation();
+	invalidateMappedMemoryRange(vkd, device, resultAllocation.getMemory(), resultAllocation.getOffset(), resultBufferSize);
+
+	tcu::TextureFormat		imageFormat		(vk::mapVkFormat(VK_FORMAT_R8G8B8A8_UNORM));
+	tcu::PixelBufferAccess	referenceAccess	(imageFormat, imageSize, imageSize, 1, referenceAllocation.getHostPtr());
+	tcu::PixelBufferAccess	resultAccess	(imageFormat, imageSize, imageSize, 1, resultAllocation.getHostPtr());
+
+	if (tcu::intThresholdCompare(m_context.getTestContext().getLog(), "Result comparison", "", referenceAccess, resultAccess, tcu::UVec4(0), tcu::COMPARE_LOG_EVERYTHING))
+		return tcu::TestStatus::pass("Pass");
+	return tcu::TestStatus::fail("Fail");
+}
+
+VkWriteDescriptorSetAccelerationStructureKHR RayQueryProceduralGeometryTestBase::makeASWriteDescriptorSet(const VkAccelerationStructureKHR* pAccelerationStructure)
+{
+	return
+	{
+		VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR,	// VkStructureType						sType
+		DE_NULL,															// const void*							pNext
+		1u,																	// deUint32								accelerationStructureCount
+		pAccelerationStructure												// const VkAccelerationStructureKHR*	pAccelerationStructures
+	};
+}
+
+void RayQueryProceduralGeometryTestBase::clearBuffer(de::SharedPtr<BufferWithMemory> buffer, VkDeviceSize bufferSize)
+{
+	const DeviceInterface&	vkd				= m_context.getDeviceInterface();
+	const VkDevice			device			= m_context.getDevice();
+	auto&					bufferAlloc		= buffer->getAllocation();
+	void*					bufferPtr		= bufferAlloc.getHostPtr();
+
+	deMemset(bufferPtr, 1, static_cast<size_t>(bufferSize));
+	vk::flushAlloc(vkd, device, bufferAlloc);
+}
+
+class ObjectBehindBoundingBoxInstance : public RayQueryProceduralGeometryTestBase
+{
+public:
+
+	ObjectBehindBoundingBoxInstance(Context& context);
+	void setupAccelerationStructures() override;
+};
+
+ObjectBehindBoundingBoxInstance::ObjectBehindBoundingBoxInstance(Context& context)
+	: RayQueryProceduralGeometryTestBase(context)
+{
+}
+
+void ObjectBehindBoundingBoxInstance::setupAccelerationStructures()
+{
+	const DeviceInterface&	vkd			= m_context.getDeviceInterface();
+	const VkDevice			device		= m_context.getDevice();
+	Allocator&				allocator	= m_context.getDefaultAllocator();
+
+	// build reference acceleration structure - single aabb big enough to fit whole procedural geometry
+	de::SharedPtr<BottomLevelAccelerationStructure> referenceBLAS(makeBottomLevelAccelerationStructure().release());
+	referenceBLAS->setGeometryData(
+		{
+			{  0.0,  0.0, -64.0 },
+			{ 64.0, 64.0, -16.0 },
+		},
+		false,
+		0
+		);
+	referenceBLAS->createAndBuild(vkd, device, *m_cmdBuffer, allocator);
+	m_blasVect.push_back(referenceBLAS);
+
+	m_referenceTLAS->setInstanceCount(1);
+	m_referenceTLAS->addInstance(m_blasVect.back());
+	m_referenceTLAS->createAndBuild(vkd, device, *m_cmdBuffer, allocator);
+
+	// build result acceleration structure - wall of 4 aabb's and generated object is actualy behind it (as it is just 1.0 unit thick)
+	de::SharedPtr<BottomLevelAccelerationStructure> resultBLAS(makeBottomLevelAccelerationStructure().release());
+	resultBLAS->setGeometryData(
+		{
+			{  0.0,  0.0, 0.0 },	// |  |
+			{ 32.0, 32.0, 1.0 },	// |* |
+			{ 32.0,  0.0, 0.0 },	//    |  |
+			{ 64.0, 32.0, 1.0 },	//    | *|
+			{  0.0, 32.0, 0.0 },	// |* |
+			{ 32.0, 64.0, 1.0 },	// |  |
+			{ 32.0, 32.0, 0.0 },	//    | *|
+			{ 64.0, 64.0, 1.0 },	//    |  |
+		},
+		false,
+		0
+		);
+	resultBLAS->createAndBuild(vkd, device, *m_cmdBuffer, allocator);
+	m_blasVect.push_back(resultBLAS);
+
+	m_resultTLAS->setInstanceCount(1);
+	m_resultTLAS->addInstance(m_blasVect.back());
+	m_resultTLAS->createAndBuild(vkd, device, *m_cmdBuffer, allocator);
+}
+
+class TriangleInBeteenInstance : public RayQueryProceduralGeometryTestBase
+{
+public:
+
+	TriangleInBeteenInstance(Context& context);
+	void setupAccelerationStructures() override;
+};
+
+TriangleInBeteenInstance::TriangleInBeteenInstance(Context& context)
+	: RayQueryProceduralGeometryTestBase(context)
+{
+}
+
+void TriangleInBeteenInstance::setupAccelerationStructures()
+{
+	const DeviceInterface&	vkd			= m_context.getDeviceInterface();
+	const VkDevice			device		= m_context.getDevice();
+	Allocator&				allocator	= m_context.getDefaultAllocator();
+
+	de::SharedPtr<BottomLevelAccelerationStructure> triangleBLAS(makeBottomLevelAccelerationStructure().release());
+	triangleBLAS->setGeometryData(
+		{
+			{ 16.0, 16.0, -8.0 },
+			{ 56.0, 32.0, -8.0 },
+			{ 32.0, 48.0, -8.0 },
+		},
+		true,
+		VK_GEOMETRY_OPAQUE_BIT_KHR
+		);
+	triangleBLAS->createAndBuild(vkd, device, *m_cmdBuffer, allocator);
+	m_blasVect.push_back(triangleBLAS);
+
+	de::SharedPtr<BottomLevelAccelerationStructure> fullElipsoidBLAS(makeBottomLevelAccelerationStructure().release());
+	fullElipsoidBLAS->setGeometryData(
+		{
+			{  0.0,  0.0, -64.0 },
+			{ 64.0, 64.0, -16.0 },
+		},
+		false,
+		0
+		);
+	fullElipsoidBLAS->createAndBuild(vkd, device, *m_cmdBuffer, allocator);
+	m_blasVect.push_back(fullElipsoidBLAS);
+
+	// build reference acceleration structure - triangle and a single aabb big enough to fit whole procedural geometry
+	m_referenceTLAS->setInstanceCount(2);
+	m_referenceTLAS->addInstance(fullElipsoidBLAS);
+	m_referenceTLAS->addInstance(triangleBLAS);
+	m_referenceTLAS->createAndBuild(vkd, device, *m_cmdBuffer, allocator);
+
+	de::SharedPtr<BottomLevelAccelerationStructure> elipsoidWallBLAS(makeBottomLevelAccelerationStructure().release());
+	elipsoidWallBLAS->setGeometryData(
+		{
+			{  0.0,  0.0, 0.0 },	// |*  |
+			{ 20.0, 64.0, 1.0 },
+			{ 20.0,  0.0, 0.0 },	// | * |
+			{ 44.0, 64.0, 1.0 },
+			{ 44.0,  0.0, 0.0 },	// |  *|
+			{ 64.0, 64.0, 1.0 },
+		},
+		false,
+		0
+		);
+	elipsoidWallBLAS->createAndBuild(vkd, device, *m_cmdBuffer, allocator);
+	m_blasVect.push_back(elipsoidWallBLAS);
+
+	// build result acceleration structure - triangle and a three aabb's (they are in front of triangle but generate intersections behind it)
+	m_resultTLAS->setInstanceCount(2);
+	m_resultTLAS->addInstance(elipsoidWallBLAS);
+	m_resultTLAS->addInstance(triangleBLAS);
+	m_resultTLAS->createAndBuild(vkd, device, *m_cmdBuffer, allocator);
+}
+
+class RayQueryProceduralGeometryTestCase : public TestCase
+{
+public:
+	RayQueryProceduralGeometryTestCase		(tcu::TestContext& context, const char* name, TestType testType);
+	~RayQueryProceduralGeometryTestCase		(void) = default;
+
+	void				checkSupport			(Context& context) const override;
+	void				initPrograms			(SourceCollections& programCollection) const override;
+	TestInstance*		createInstance			(Context& context) const override;
+
+protected:
+	TestType m_testType;
+};
+
+RayQueryProceduralGeometryTestCase::RayQueryProceduralGeometryTestCase(tcu::TestContext& context, const char* name, TestType testType)
+	: TestCase		(context, name, "")
+	, m_testType	(testType)
+{
+}
+
+void RayQueryProceduralGeometryTestCase::checkSupport(Context& context) const
+{
+	context.requireDeviceFunctionality("VK_KHR_acceleration_structure");
+	context.requireDeviceFunctionality("VK_KHR_ray_query");
+
+	if (!context.getRayQueryFeatures().rayQuery)
+		TCU_THROW(NotSupportedError, "Requires VkPhysicalDeviceRayQueryFeaturesKHR.rayQuery");
+
+	if (!context.getAccelerationStructureFeatures().accelerationStructure)
+		TCU_THROW(TestError, "Requires VkPhysicalDeviceAccelerationStructureFeaturesKHR.accelerationStructure");
+}
+
+void RayQueryProceduralGeometryTestCase::initPrograms(SourceCollections& programCollection) const
+{
+	const vk::ShaderBuildOptions glslBuildOptions(programCollection.usedVulkanVersion, vk::SPIRV_VERSION_1_4, 0u, true);
+
+	std::string compSource =
+		"#version 460 core\n"
+		"#extension GL_EXT_ray_query : require\n"
+
+		"layout(set = 0, binding = 0) uniform accelerationStructureEXT tlas;\n"
+		"layout(set = 0, binding = 1, std430) writeonly buffer Result {\n"
+		"    int value[];\n"
+		"} result;\n"
+
+		"void main()\n"
+		"{\n"
+		"  float tmin          = 0.0;\n"
+		"  float tmax          = 50.0;\n"
+		"  vec3  rayOrigin     = vec3(float(gl_GlobalInvocationID.x) + 0.5f, float(gl_GlobalInvocationID.y) + 0.5f, 2.0);\n"
+		"  vec3  rayDir        = vec3(0.0,0.0,-1.0);\n"
+		"  uint  resultIndex   = gl_GlobalInvocationID.x + gl_GlobalInvocationID.y * gl_NumWorkGroups.x;\n"
+		"  int   payload       = 30;\n"
+
+		// elipsoid center and radii
+		"  vec3 elipsoidOrigin = vec3(32.0, 32.0, -30.0);\n"
+		"  vec3 elipsoidRadii  = vec3(30.0, 15.0, 5.0);\n"
+
+		"  rayQueryEXT rq;\n"
+		"  rayQueryInitializeEXT(rq, tlas, gl_RayFlagsCullBackFacingTrianglesEXT, 0xFF, rayOrigin, tmin, rayDir, tmax);\n"
+
+		"  while (rayQueryProceedEXT(rq))\n"
+		"  {\n"
+		"    uint intersectionType = rayQueryGetIntersectionTypeEXT(rq, false);\n"
+		"    if (intersectionType == gl_RayQueryCandidateIntersectionAABBEXT)\n"
+		"    {\n"
+		// simplify to ray sphere intersection
+		"      vec3  eliDir = rayOrigin - elipsoidOrigin;\n"
+		"      vec3  eliS   = eliDir / elipsoidRadii;\n"
+		"      vec3  rayS   = rayDir / elipsoidRadii;\n"
+
+		"      float a = dot(rayS, rayS);\n"
+		"      float b = dot(eliS, rayS);\n"
+		"      float c = dot(eliS, eliS);\n"
+		"      float h = b * b - a * (c - 1.0);\n"
+		"      if (h >= 0.0)\n"
+		"        rayQueryGenerateIntersectionEXT(rq, (-b - sqrt(h)) / a);\n"
+		"    }\n"
+		"    else if (intersectionType == gl_RayQueryCandidateIntersectionTriangleEXT)\n"
+		"    {\n"
+		"      payload = 250;\n"
+		"      rayQueryConfirmIntersectionEXT(rq);\n"
+		"    }\n"
+		"  }\n"
+		"  if (rayQueryGetIntersectionTypeEXT(rq, true) != gl_RayQueryCommittedIntersectionNoneEXT)\n"
+		"  {\n"
+		"    int instanceId = rayQueryGetIntersectionInstanceIdEXT(rq, true);\n"
+		"    if (instanceId > -1)\n"
+		"    {\n"
+		"      float hitT      = rayQueryGetIntersectionTEXT(rq, true);\n"
+		"      vec3  lightDir  = normalize(vec3(0.0, 0.0, 1.0));\n"
+		"      vec3  hitPos    = rayOrigin + hitT * rayDir;\n"
+		"      vec3  hitNormal = normalize((hitPos - elipsoidOrigin) / elipsoidRadii);\n"
+		"      payload = 50 + int(200.0 * clamp(dot(hitNormal, lightDir), 0.0, 1.0));\n"
+		"    }\n"
+		"  }\n"
+
+		// to be able to display result in cherry this is interpreated as r8g8b8a8 during verification
+		// we are using only red but we need to add alpha (note: r and a may be swapped depending on endianness)
+		"  result.value[resultIndex] = payload + 0xFF000000;\n"
+		"};\n";
+	programCollection.glslSources.add("comp") << glu::ComputeSource(compSource) << glslBuildOptions;
+}
+
+TestInstance* RayQueryProceduralGeometryTestCase::createInstance(Context& context) const
+{
+	if (m_testType == TestType::TRIANGLE_IN_BETWEEN)
+		return new TriangleInBeteenInstance(context);
+
+	// TestType::OBJECT_BEHIND_BOUNDING_BOX
+	return new ObjectBehindBoundingBoxInstance(context);
+}
+
+}	// anonymous
+
+tcu::TestCaseGroup*	createProceduralGeometryTests(tcu::TestContext& testCtx)
+{
+	de::MovePtr<tcu::TestCaseGroup> group(new tcu::TestCaseGroup(testCtx, "procedural_geometry", "Test procedural geometry with complex bouding box sets"));
+
+	group->addChild(new RayQueryProceduralGeometryTestCase(testCtx, "object_behind_bounding_boxes",	TestType::OBJECT_BEHIND_BOUNDING_BOX));
+	group->addChild(new RayQueryProceduralGeometryTestCase(testCtx, "triangle_in_between",			TestType::TRIANGLE_IN_BETWEEN));
+
+	return group.release();
+}
+
+}	// RayQuery
+
+}	// vkt
diff --git a/external/vulkancts/modules/vulkan/pipeline/vktPipelineVertexOnlyTests.hpp b/external/vulkancts/modules/vulkan/ray_query/vktRayQueryProceduralGeometryTests.hpp
similarity index 68%
copy from external/vulkancts/modules/vulkan/pipeline/vktPipelineVertexOnlyTests.hpp
copy to external/vulkancts/modules/vulkan/ray_query/vktRayQueryProceduralGeometryTests.hpp
index 1a85ebf..f0651c2 100644
--- a/external/vulkancts/modules/vulkan/pipeline/vktPipelineVertexOnlyTests.hpp
+++ b/external/vulkancts/modules/vulkan/ray_query/vktRayQueryProceduralGeometryTests.hpp
@@ -1,11 +1,10 @@
-#ifndef _VKTPIPELINEVERTEXONLYTESTS_HPP
-#define _VKTPIPELINEVERTEXONLYTESTS_HPP
-/*------------------------------------------------------------------------
+#ifndef _VKTRAYQUERYPROCEDURALGEOMETRYTESTS_HPP
+#define _VKTRAYQUERYPROCEDURALGEOMETRYTESTS_HPP
+/*-------------------------------------------------------------------------
  * Vulkan Conformance Tests
  * ------------------------
  *
- * Copyright (c) 2019 Google LLC
- * Copyright (c) 2019 The Khronos Group Inc.
+ * Copyright (c) 2020 The Khronos Group Inc.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -21,7 +20,7 @@
  *
  *//*!
  * \file
- * \brief Tests using only vertex shader in a graphics pipeline
+ * \brief Test procedural geometry with complex bouding box sets
  *//*--------------------------------------------------------------------*/
 
 #include "tcuDefs.hpp"
@@ -29,12 +28,12 @@
 
 namespace vkt
 {
-namespace pipeline
+namespace RayQuery
 {
 
-tcu::TestCaseGroup*	createVertexOnlyTests (tcu::TestContext& testCtx);
+tcu::TestCaseGroup* createProceduralGeometryTests (tcu::TestContext& testCtx);
 
-} // pipeline
+} // RayQuery
 } // vkt
 
-#endif // _VKTPIPELINEVERTEXONLYTESTS_HPP
+#endif // _VKTRAYQUERYPROCEDURALGEOMETRYTESTS_HPP
diff --git a/external/vulkancts/modules/vulkan/ray_query/vktRayQueryTests.cpp b/external/vulkancts/modules/vulkan/ray_query/vktRayQueryTests.cpp
index e7613b3..1e4dcf6 100644
--- a/external/vulkancts/modules/vulkan/ray_query/vktRayQueryTests.cpp
+++ b/external/vulkancts/modules/vulkan/ray_query/vktRayQueryTests.cpp
@@ -25,8 +25,12 @@
 #include "vktRayQueryBuiltinTests.hpp"
 #include "vktRayQueryTraversalControlTests.hpp"
 #include "vktRayQueryAccelerationStructuresTests.hpp"
+#include "vktRayQueryProceduralGeometryTests.hpp"
 #include "vktRayQueryWatertightnessTests.hpp"
 #include "vktRayQueryCullRayFlagsTests.hpp"
+#include "vktRayQueryMiscTests.hpp"
+#include "vktRayQueryDirectionTests.hpp"
+#include "vktRayQueryBarycentricCoordinatesTests.hpp"
 
 #include "deUniquePtr.hpp"
 
@@ -44,9 +48,13 @@
 	group->addChild(createBuiltinTests(testCtx));
 	group->addChild(createTraversalControlTests(testCtx));
 	group->addChild(createAccelerationStructuresTests(testCtx));
+	group->addChild(createProceduralGeometryTests(testCtx));
 	group->addChild(createAdvancedTests(testCtx));
 	group->addChild(createWatertightnessTests(testCtx));
 	group->addChild(createCullRayFlagsTests(testCtx));
+	group->addChild(createMiscTests(testCtx));
+	group->addChild(createDirectionTests(testCtx));
+	group->addChild(createBarycentricCoordinatesTests(testCtx));
 
 	return group.release();
 }
diff --git a/external/vulkancts/modules/vulkan/ray_tracing/CMakeLists.txt b/external/vulkancts/modules/vulkan/ray_tracing/CMakeLists.txt
index 4ff590c..5ce603f 100644
--- a/external/vulkancts/modules/vulkan/ray_tracing/CMakeLists.txt
+++ b/external/vulkancts/modules/vulkan/ray_tracing/CMakeLists.txt
@@ -3,6 +3,8 @@
 set(DEQP_VK_RAY_TRACING_SRCS
 	vktRayTracingBarrierTests.cpp
 	vktRayTracingBarrierTests.hpp
+	vktRayTracingBarycentricCoordinatesTests.cpp
+	vktRayTracingBarycentricCoordinatesTests.hpp
 	vktRayTracingBuildIndirectTests.cpp
 	vktRayTracingBuildIndirectTests.hpp
 	vktRayTracingBuiltinTests.cpp
@@ -15,6 +17,10 @@
 	vktRayTracingCallableShadersTests.hpp
 	vktRayTracingComplexControlFlowTests.cpp
 	vktRayTracingComplexControlFlowTests.hpp
+	vktRayTracingDataSpillTests.cpp
+	vktRayTracingDataSpillTests.hpp
+	vktRayTracingDirectionTests.cpp
+	vktRayTracingDirectionTests.hpp
 	vktRayTracingTraceRaysTests.cpp
 	vktRayTracingTraceRaysTests.hpp
 	vktRayTracingMemGuaranteeTests.cpp
@@ -33,6 +39,8 @@
 	vktRayTracingWatertightnessTests.hpp
 	vktRayTracingPipelineLibraryTests.cpp
 	vktRayTracingPipelineLibraryTests.hpp
+	vktRayTracingProceduralGeometryTests.cpp
+	vktRayTracingProceduralGeometryTests.hpp
 	vktRayTracingCaptureReplayTests.cpp
 	vktRayTracingCaptureReplayTests.hpp
 	vktRayTracingTests.cpp
diff --git a/external/vulkancts/modules/vulkan/ray_tracing/vktRayTracingAccelerationStructuresTests.cpp b/external/vulkancts/modules/vulkan/ray_tracing/vktRayTracingAccelerationStructuresTests.cpp
index 1a5c142..1646a3d 100644
--- a/external/vulkancts/modules/vulkan/ray_tracing/vktRayTracingAccelerationStructuresTests.cpp
+++ b/external/vulkancts/modules/vulkan/ray_tracing/vktRayTracingAccelerationStructuresTests.cpp
@@ -25,6 +25,7 @@
 
 #include "vkDefs.hpp"
 #include "deClock.h"
+#include "deRandom.h"
 
 #include "vktTestCase.hpp"
 #include "vktTestGroupUtil.hpp"
@@ -829,6 +830,21 @@
 	return makeClearValueColorF32(32.0f, 0.0f, 0.0f, 0.0f);
 }
 
+void commonASTestsCheckSupport(Context& context)
+{
+	context.requireInstanceFunctionality("VK_KHR_get_physical_device_properties2");
+	context.requireDeviceFunctionality("VK_KHR_acceleration_structure");
+	context.requireDeviceFunctionality("VK_KHR_ray_tracing_pipeline");
+
+	const VkPhysicalDeviceRayTracingPipelineFeaturesKHR&	rayTracingPipelineFeaturesKHR = context.getRayTracingPipelineFeatures();
+	if (rayTracingPipelineFeaturesKHR.rayTracingPipeline == DE_FALSE)
+		TCU_THROW(NotSupportedError, "Requires VkPhysicalDeviceRayTracingPipelineFeaturesKHR.rayTracingPipeline");
+
+	const VkPhysicalDeviceAccelerationStructureFeaturesKHR&	accelerationStructureFeaturesKHR = context.getAccelerationStructureFeatures();
+	if (accelerationStructureFeaturesKHR.accelerationStructure == DE_FALSE)
+		TCU_THROW(TestError, "VK_KHR_ray_tracing_pipeline requires VkPhysicalDeviceAccelerationStructureFeaturesKHR.accelerationStructure");
+}
+
 class RayTracingASBasicTestCase : public TestCase
 {
 public:
@@ -857,7 +873,7 @@
 {
 public:
 																	RayTracingASBasicTestInstance		(Context& context, const TestParams& data);
-																	~RayTracingASBasicTestInstance		(void);
+																	~RayTracingASBasicTestInstance		(void) = default;
 	tcu::TestStatus													iterate								(void) override;
 
 protected:
@@ -880,18 +896,9 @@
 
 void RayTracingASBasicTestCase::checkSupport(Context& context) const
 {
-	context.requireInstanceFunctionality("VK_KHR_get_physical_device_properties2");
-	context.requireDeviceFunctionality("VK_KHR_acceleration_structure");
-	context.requireDeviceFunctionality("VK_KHR_ray_tracing_pipeline");
+	commonASTestsCheckSupport(context);
 
-	const VkPhysicalDeviceRayTracingPipelineFeaturesKHR&	rayTracingPipelineFeaturesKHR		= context.getRayTracingPipelineFeatures();
-	if (rayTracingPipelineFeaturesKHR.rayTracingPipeline == DE_FALSE)
-		TCU_THROW(NotSupportedError, "Requires VkPhysicalDeviceRayTracingPipelineFeaturesKHR.rayTracingPipeline");
-
-	const VkPhysicalDeviceAccelerationStructureFeaturesKHR&	accelerationStructureFeaturesKHR	= context.getAccelerationStructureFeatures();
-	if (accelerationStructureFeaturesKHR.accelerationStructure == DE_FALSE)
-		TCU_THROW(TestError, "VK_KHR_ray_tracing_pipeline requires VkPhysicalDeviceAccelerationStructureFeaturesKHR.accelerationStructure");
-
+	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");
 
@@ -1456,10 +1463,6 @@
 {
 }
 
-RayTracingASBasicTestInstance::~RayTracingASBasicTestInstance (void)
-{
-}
-
 de::MovePtr<BufferWithMemory> RayTracingASBasicTestInstance::runTest(const deUint32 workerThreadsCount)
 {
 	const InstanceInterface&			vki									= m_context.getInstanceInterface();
@@ -1652,8 +1655,12 @@
 
 					if (m_data.buildType == VK_ACCELERATION_STRUCTURE_BUILD_TYPE_DEVICE_KHR)
 					{
-						const VkMemoryBarrier	serializeMemoryBarrier = makeMemoryBarrier(VK_ACCESS_MEMORY_WRITE_BIT, VK_ACCESS_MEMORY_READ_BIT);
-						cmdPipelineMemoryBarrier(vkd, *cmdBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, &serializeMemoryBarrier);
+						endCommandBuffer(vkd, *cmdBuffer);
+
+						submitCommandsAndWait(vkd, device, queue, cmdBuffer.get());
+
+						vkd.resetCommandPool(device, *cmdPool, VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT);
+						beginCommandBuffer(vkd, *cmdBuffer, 0u);
 					}
 
 					de::MovePtr<BottomLevelAccelerationStructure> asCopy = makeBottomLevelAccelerationStructure();
@@ -1747,7 +1754,7 @@
 				}
 				case OP_SERIALIZE:
 				{
-					de::SharedPtr<SerialStorage> storage( new SerialStorage(vkd, device, allocator, m_data.buildType, topBlasSerialSize[0]));
+					de::SharedPtr<SerialStorage> storage = de::SharedPtr<SerialStorage>(new SerialStorage(vkd, device, allocator, m_data.buildType, topBlasSerialSize[0]));
 
 					topLevelAccelerationStructure->setDeferredOperation(htSerialize, workerThreadsCount);
 					topLevelAccelerationStructure->serialize(vkd, device, *cmdBuffer, storage.get());
@@ -1755,8 +1762,12 @@
 
 					if (m_data.buildType == VK_ACCELERATION_STRUCTURE_BUILD_TYPE_DEVICE_KHR)
 					{
-						const VkMemoryBarrier	serializeMemoryBarrier = makeMemoryBarrier(VK_ACCESS_MEMORY_WRITE_BIT, VK_ACCESS_MEMORY_READ_BIT);
-						cmdPipelineMemoryBarrier(vkd, *cmdBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, &serializeMemoryBarrier);
+						endCommandBuffer(vkd, *cmdBuffer);
+
+						submitCommandsAndWait(vkd, device, queue, cmdBuffer.get());
+
+						vkd.resetCommandPool(device, *cmdPool, VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT);
+						beginCommandBuffer(vkd, *cmdBuffer, 0u);
 					}
 
 					topLevelAccelerationStructureCopy = makeTopLevelAccelerationStructure();
@@ -1867,6 +1878,487 @@
 		return tcu::TestStatus::fail("Fail");
 }
 
+// Tests dynamic indexing of acceleration structures
+class RayTracingASDynamicIndexingTestCase : public TestCase
+{
+public:
+						RayTracingASDynamicIndexingTestCase			(tcu::TestContext& context, const char* name);
+						~RayTracingASDynamicIndexingTestCase		(void) = default;
+
+	void				checkSupport								(Context& context) const override;
+	void				initPrograms								(SourceCollections& programCollection) const override;
+	TestInstance*		createInstance								(Context& context) const override;
+};
+
+class RayTracingASDynamicIndexingTestInstance : public TestInstance
+{
+public:
+						RayTracingASDynamicIndexingTestInstance		(Context& context);
+						~RayTracingASDynamicIndexingTestInstance	(void) = default;
+	tcu::TestStatus		iterate										(void) override;
+};
+
+RayTracingASDynamicIndexingTestCase::RayTracingASDynamicIndexingTestCase(tcu::TestContext& context, const char* name)
+	: TestCase(context, name, "")
+{
+}
+
+void RayTracingASDynamicIndexingTestCase::checkSupport(Context& context) const
+{
+	commonASTestsCheckSupport(context);
+	context.requireDeviceFunctionality("VK_EXT_descriptor_indexing");
+}
+
+void RayTracingASDynamicIndexingTestCase::initPrograms(SourceCollections& programCollection) const
+{
+	const vk::SpirVAsmBuildOptions spvBuildOptions(programCollection.usedVulkanVersion, vk::SPIRV_VERSION_1_4, true);
+	const vk::ShaderBuildOptions glslBuildOptions(programCollection.usedVulkanVersion, vk::SPIRV_VERSION_1_4, 0u, true);
+
+	// raygen shader is defined in spir-v as it requires possing pointer to TLAS that was read from ssbo;
+	// original spir-v code was generated using following glsl code but resulting spir-v code was modiifed
+	//
+	// #version 460 core
+	// #extension GL_EXT_ray_tracing : require
+	// #extension GL_EXT_nonuniform_qualifier : enable
+	// #define ARRAY_SIZE 500
+	// layout(location = 0) rayPayloadEXT uvec2 payload;	// offset and flag indicating if we are using descriptors or pointers
+
+	// layout(set = 0, binding = 0) uniform accelerationStructureEXT tlasArray[ARRAY_SIZE];
+	// layout(set = 0, binding = 1) readonly buffer topLevelASPointers {
+	//     uvec2 ptr[];
+	// } tlasPointers;
+	// layout(set = 0, binding = 2) readonly buffer topLevelASIndices {
+	//     uint idx[];
+	// } tlasIndices;
+	// layout(set = 0, binding = 3, std430) writeonly buffer Result {
+	//     uint value[];
+	// } result;
+
+	// void main()
+	// {
+	//   float tmin            = 0.0;\n"
+	//   float tmax            = 2.0;\n"
+	//   vec3  origin          = vec3(0.25f, 0.5f, 1.0);\n"
+	//   vec3  direction       = vec3(0.0,0.0,-1.0);\n"
+	//   uint  activeTlasIndex = gl_LaunchIDEXT.x;\n"
+	//   uint  activeTlasCount = gl_LaunchSizeEXT.x;\n"
+	//   uint  tlasIndex       = tlasIndices.idx[nonuniformEXT(activeTlasIndex)];\n"
+
+	//   atomicAdd(result.value[nonuniformEXT(activeTlasIndex)], 2);\n"
+	//   payload = uvec2(activeTlasIndex + activeTlasCount.x, 0);\n"
+	//   traceRayEXT(tlasArray[nonuniformEXT(tlasIndex)], gl_RayFlagsCullBackFacingTrianglesEXT, 0xFF, 0, 0, 0, origin, tmin, direction, tmax, 0);\n"
+
+	//   atomicAdd(result.value[nonuniformEXT(activeTlasIndex + activeTlasCount * 2)], 5);\n"
+	//   payload = uvec2(activeTlasIndex + activeTlasCount * 3, 1);\n"
+	//   traceRayEXT(tlasArray[nonuniformEXT(tlasIndex)], gl_RayFlagsCullBackFacingTrianglesEXT, 0xFF, 0, 0, 0, origin, tmin, direction, tmax, 0);				// used to generate initial spirv
+	//   //traceRayEXT(*tlasPointers.ptr[nonuniformEXT(tlasIndex)], gl_RayFlagsCullBackFacingTrianglesEXT, 0xFF, 0, 0, 0, origin, tmin, direction, tmax, 0);	// not available in glsl but should be done in spirv
+	// };
+
+	const std::string rgenSource =
+		"OpCapability RayTracingKHR\n"
+		"OpCapability ShaderNonUniform\n"
+		"OpExtension \"SPV_EXT_descriptor_indexing\"\n"
+		"OpExtension \"SPV_KHR_ray_tracing\"\n"
+		"%1 = OpExtInstImport \"GLSL.std.450\"\n"
+		"OpMemoryModel Logical GLSL450\n"
+		"OpEntryPoint RayGenerationKHR %4 \"main\" %27 %33 %var_tlas_indices %var_result %60 %var_as_arr_ptr %var_as_pointers_ssbo\n"
+		"OpDecorate %27 BuiltIn LaunchIdNV\n"
+		"OpDecorate %33 BuiltIn LaunchSizeNV\n"
+		"OpDecorate %37 ArrayStride 4\n"
+		"OpMemberDecorate %38 0 NonWritable\n"
+		"OpMemberDecorate %38 0 Offset 0\n"
+		"OpDecorate %38 Block\n"
+		"OpDecorate %var_tlas_indices DescriptorSet 0\n"
+		"OpDecorate %var_tlas_indices Binding 2\n"
+		"OpDecorate %44 NonUniform\n"
+		"OpDecorate %46 NonUniform\n"
+		"OpDecorate %47 NonUniform\n"
+		"OpDecorate %48 ArrayStride 4\n"
+		"OpMemberDecorate %49 0 NonReadable\n"
+		"OpMemberDecorate %49 0 Offset 0\n"
+		"OpDecorate %49 Block\n"
+		"OpDecorate %var_result DescriptorSet 0\n"
+		"OpDecorate %var_result Binding 3\n"
+		"OpDecorate %53 NonUniform\n"
+		"OpDecorate %60 Location 0\n"
+		"OpDecorate %var_as_arr_ptr DescriptorSet 0\n"
+		"OpDecorate %var_as_arr_ptr Binding 0\n"
+		"OpDecorate %71 NonUniform\n"
+		"OpDecorate %73 NonUniform\n"
+		"OpDecorate %74 NonUniform\n"
+		"OpDecorate %85 NonUniform\n"
+		"OpDecorate %as_index NonUniform\n"
+		"OpDecorate %as_device_addres NonUniform\n"
+		"OpDecorate %104 ArrayStride 8\n"
+		"OpMemberDecorate %105 0 NonWritable\n"
+		"OpMemberDecorate %105 0 Offset 0\n"
+		"OpDecorate %105 Block\n"
+		"OpDecorate %var_as_pointers_ssbo DescriptorSet 0\n"
+		"OpDecorate %var_as_pointers_ssbo Binding 1\n"
+		// types, constants and variables
+		"%2								= OpTypeVoid\n"
+		"%3								= OpTypeFunction %2\n"
+		"%6								= OpTypeFloat 32\n"
+		"%7								= OpTypePointer Function %6\n"
+		"%9								= OpConstant %6 0\n"
+		"%11							= OpConstant %6 2\n"
+		"%12							= OpTypeVector %6 3\n"
+		"%13							= OpTypePointer Function %12\n"
+		"%15							= OpConstant %6 0.25\n"
+		"%16							= OpConstant %6 0.5\n"
+		"%17							= OpConstant %6 1\n"
+		"%18							= OpConstantComposite %12 %15 %16 %17\n"
+		"%20							= OpConstant %6 -1\n"
+		"%21							= OpConstantComposite %12 %9 %9 %20\n"
+		"%type_uint32					= OpTypeInt 32 0\n"
+		"%23							= OpTypePointer Function %type_uint32\n"
+		"%25							= OpTypeVector %type_uint32 3\n"
+		"%26							= OpTypePointer Input %25\n"
+		"%27							= OpVariable %26 Input\n"
+		"%28							= OpConstant %type_uint32 0\n"
+		"%29							= OpTypePointer Input %type_uint32\n"
+		"%33							= OpVariable %26 Input\n"
+		"%37							= OpTypeRuntimeArray %type_uint32\n"
+		"%38							= OpTypeStruct %37\n"
+		"%39							= OpTypePointer StorageBuffer %38\n"
+		"%var_tlas_indices				= OpVariable %39 StorageBuffer\n"
+		"%type_int32					= OpTypeInt 32 1\n"
+		"%c_int32_0						= OpConstant %type_int32 0\n"
+		"%45							= OpTypePointer StorageBuffer %type_uint32\n"
+		"%48							= OpTypeRuntimeArray %type_uint32\n"
+		"%49							= OpTypeStruct %48\n"
+		"%50							= OpTypePointer StorageBuffer %49\n"
+		"%var_result					= OpVariable %50 StorageBuffer\n"
+		"%55							= OpConstant %type_uint32 2\n"
+		"%56							= OpConstant %type_uint32 1\n"
+		"%58							= OpTypeVector %type_uint32 2\n"
+		"%59							= OpTypePointer RayPayloadNV %58\n"
+		"%60							= OpVariable %59 RayPayloadNV\n"
+		"%type_as						= OpTypeAccelerationStructureKHR\n"
+		"%66							= OpConstant %type_uint32 500\n"
+		"%67							= OpTypeArray %type_as %66\n"
+		"%68							= OpTypePointer UniformConstant %67\n"
+		"%var_as_arr_ptr				= OpVariable %68 UniformConstant\n"
+		"%72							= OpTypePointer UniformConstant %type_as\n"
+		"%75							= OpConstant %type_uint32 16\n"
+		"%76							= OpConstant %type_uint32 255\n"
+		"%87							= OpConstant %type_uint32 5\n"
+		"%91							= OpConstant %type_uint32 3\n"
+
+		// <changed_section>
+		"%104							= OpTypeRuntimeArray %58\n"
+		"%105							= OpTypeStruct %104\n"
+		"%106							= OpTypePointer StorageBuffer %105\n"
+		"%var_as_pointers_ssbo			= OpVariable %106 StorageBuffer\n"
+		"%type_uint64_ssbo_ptr			= OpTypePointer StorageBuffer %58\n"
+		// </changed_section>
+
+		// void main()
+		"%4								= OpFunction %2 None %3\n"
+		"%5								= OpLabel\n"
+		"%8								= OpVariable %7 Function\n"
+		"%10							= OpVariable %7 Function\n"
+		"%14							= OpVariable %13 Function\n"
+		"%19							= OpVariable %13 Function\n"
+		"%24							= OpVariable %23 Function\n"
+		"%32							= OpVariable %23 Function\n"
+		"%36							= OpVariable %23 Function\n"
+		"OpStore %8 %9\n"
+		"OpStore %10 %11\n"
+		"OpStore %14 %18\n"
+		"OpStore %19 %21\n"
+		"%30							= OpAccessChain %29 %27 %28\n"
+		"%31							= OpLoad %type_uint32 %30\n"
+		"OpStore %24 %31\n"
+		"%34							= OpAccessChain %29 %33 %28\n"
+		"%35							= OpLoad %type_uint32 %34\n"
+		"OpStore %32 %35\n"
+		"%43							= OpLoad %type_uint32 %24\n"
+		"%44							= OpCopyObject %type_uint32 %43\n"
+		"%46							= OpAccessChain %45 %var_tlas_indices %c_int32_0 %44\n"
+		"%47							= OpLoad %type_uint32 %46\n"
+		"OpStore %36 %47\n"
+		// atomicAdd
+		"%52							= OpLoad %type_uint32 %24\n"
+		"%53							= OpCopyObject %type_uint32 %52\n"
+		"%54							= OpAccessChain %45 %var_result %c_int32_0 %53\n"
+		"%57							= OpAtomicIAdd %type_uint32 %54 %56 %28 %55\n"
+		// setup payload
+		"%61							= OpLoad %type_uint32 %24\n"
+		"%62							= OpLoad %type_uint32 %32\n"
+		"%63							= OpIAdd %type_uint32 %61 %62\n"
+		"%64							= OpCompositeConstruct %58 %63 %28\n"
+		"OpStore %60 %64\n"
+		// trace rays using tlas from array
+		"%70							= OpLoad %type_uint32 %36\n"
+		"%71							= OpCopyObject %type_uint32 %70\n"
+		"%73							= OpAccessChain %72 %var_as_arr_ptr %71\n"
+		"%74							= OpLoad %type_as %73\n"
+		"%77							= OpLoad %12 %14\n"
+		"%78							= OpLoad %6 %8\n"
+		"%79							= OpLoad %12 %19\n"
+		"%80							= OpLoad %6 %10\n"
+		"OpTraceRayKHR %74 %75 %76 %28 %28 %28 %77 %78 %79 %80 %60\n"
+		// atomicAdd
+		"%81							= OpLoad %type_uint32 %24\n"
+		"%82							= OpLoad %type_uint32 %32\n"
+		"%83							= OpIMul %type_uint32 %82 %55\n"
+		"%84							= OpIAdd %type_uint32 %81 %83\n"
+		"%85							= OpCopyObject %type_uint32 %84\n"
+		"%86							= OpAccessChain %45 %var_result %c_int32_0 %85\n"
+		"%88							= OpAtomicIAdd %type_uint32 %86 %56 %28 %87\n"
+		// setup payload
+		"%89							= OpLoad %type_uint32 %24\n"
+		"%90							= OpLoad %type_uint32 %32\n"
+		"%92							= OpIMul %type_uint32 %90 %91\n"
+		"%93							= OpIAdd %type_uint32 %89 %92\n"
+		"%94							= OpCompositeConstruct %58 %93 %56\n"
+		"OpStore %60 %94\n"
+		// trace rays using pointers to tlas
+		"%95							= OpLoad %type_uint32 %36\n"
+		"%as_index						= OpCopyObject %type_uint32 %95\n"
+
+		// <changed_section> OLD
+		"%as_device_addres_ptr			= OpAccessChain %type_uint64_ssbo_ptr %var_as_pointers_ssbo %c_int32_0 %as_index\n"
+		"%as_device_addres				= OpLoad %58 %as_device_addres_ptr\n"
+		"%as_to_use						= OpConvertUToAccelerationStructureKHR %type_as %as_device_addres\n"
+		// </changed_section>
+
+		"%99							= OpLoad %12 %14\n"
+		"%100							= OpLoad %6 %8\n"
+		"%101							= OpLoad %12 %19\n"
+		"%102							= OpLoad %6 %10\n"
+		"OpTraceRayKHR %as_to_use %75 %76 %28 %28 %28 %99 %100 %101 %102 %60\n"
+		"OpReturn\n"
+		"OpFunctionEnd\n";
+	programCollection.spirvAsmSources.add("rgen") << rgenSource << spvBuildOptions;
+
+	std::string chitSource =
+		"#version 460 core\n"
+		"#extension GL_EXT_ray_tracing : require\n"
+		"#extension GL_EXT_nonuniform_qualifier : enable\n"
+		"layout(location = 0) rayPayloadInEXT uvec2 payload;\n"
+		"\n"
+		"layout(set = 0, binding = 3) writeonly buffer Result {\n"
+		"    uint value[];\n"
+		"} result;\n"
+		"void main()\n"
+		"{\n"
+		     // payload.y is 0 or 1 so we will add 3 or 7 (just two prime numbers)
+		"    atomicAdd(result.value[nonuniformEXT(payload.x)], 3 + payload.y * 4);\n"
+		"}\n";
+	programCollection.glslSources.add("chit") << glu::ClosestHitSource(chitSource) << glslBuildOptions;
+}
+
+TestInstance* RayTracingASDynamicIndexingTestCase::createInstance(Context& context) const
+{
+	return new RayTracingASDynamicIndexingTestInstance(context);
+}
+
+RayTracingASDynamicIndexingTestInstance::RayTracingASDynamicIndexingTestInstance(Context& context)
+	: vkt::TestInstance(context)
+{
+}
+
+tcu::TestStatus RayTracingASDynamicIndexingTestInstance::iterate(void)
+{
+	const InstanceInterface&	vki							= m_context.getInstanceInterface();
+	const DeviceInterface&		vkd							= m_context.getDeviceInterface();
+	const VkDevice				device						= m_context.getDevice();
+	const VkPhysicalDevice		physicalDevice				= m_context.getPhysicalDevice();
+	const deUint32				queueFamilyIndex			= m_context.getUniversalQueueFamilyIndex();
+	const VkQueue				queue						= m_context.getUniversalQueue();
+	Allocator&					allocator					= m_context.getDefaultAllocator();
+	const deUint32				shaderGroupHandleSize		= getShaderGroupSize(vki, physicalDevice);
+	const deUint32				shaderGroupBaseAlignment	= getShaderGroupBaseAlignment(vki, physicalDevice);
+	const deUint32				tlasCount					= 500;	// changing this will require also changing shaders
+	const deUint32				activeTlasCount				= 32;	// number of tlas out of <tlasCount> that will be active
+
+	const Move<VkDescriptorSetLayout> descriptorSetLayout = DescriptorSetLayoutBuilder()
+		.addArrayBinding(VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR, tlasCount, ALL_RAY_TRACING_STAGES)
+		.addSingleBinding(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, ALL_RAY_TRACING_STAGES)				// pointers to all acceleration structures
+		.addSingleBinding(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, ALL_RAY_TRACING_STAGES)				// ssbo with indices of all acceleration structures
+		.addSingleBinding(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, ALL_RAY_TRACING_STAGES)				// ssbo with result values
+		.build(vkd, device);
+
+	const Move<VkDescriptorPool> descriptorPool = DescriptorPoolBuilder()
+		.addType(VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR, tlasCount)
+		.addType(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER)
+		.addType(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER)
+		.addType(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER)
+		.build(vkd, device, VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT, 1u);
+	const Move<VkDescriptorSet> descriptorSet = makeDescriptorSet(vkd, device, *descriptorPool, *descriptorSetLayout);
+
+	de::MovePtr<RayTracingPipeline> rayTracingPipeline = de::newMovePtr<RayTracingPipeline>();
+	rayTracingPipeline->addShader(VK_SHADER_STAGE_RAYGEN_BIT_KHR,      createShaderModule(vkd, device, m_context.getBinaryCollection().get("rgen"), 0), 0);
+	rayTracingPipeline->addShader(VK_SHADER_STAGE_CLOSEST_HIT_BIT_KHR, createShaderModule(vkd, device, m_context.getBinaryCollection().get("chit"), 0), 1);
+
+	const Move<VkPipelineLayout>			pipelineLayout						= makePipelineLayout(vkd, device, descriptorSetLayout.get());
+	Move<VkPipeline>						pipeline							= rayTracingPipeline->createPipeline(vkd, device, *pipelineLayout);
+	de::MovePtr<BufferWithMemory>			raygenShaderBindingTable			= rayTracingPipeline->createShaderBindingTable(vkd, device, *pipeline, allocator, shaderGroupHandleSize, shaderGroupBaseAlignment, 0, 1);
+	de::MovePtr<BufferWithMemory>			hitShaderBindingTable				= rayTracingPipeline->createShaderBindingTable(vkd, device, *pipeline, allocator, shaderGroupHandleSize, shaderGroupBaseAlignment, 1, 1);
+
+	const VkStridedDeviceAddressRegionKHR	raygenShaderBindingTableRegion		= makeStridedDeviceAddressRegionKHR(getBufferDeviceAddress(vkd, device, raygenShaderBindingTable->get(), 0), shaderGroupHandleSize, shaderGroupHandleSize);
+	const VkStridedDeviceAddressRegionKHR	missShaderBindingTableRegion		= makeStridedDeviceAddressRegionKHR(DE_NULL, 0, 0);
+	const VkStridedDeviceAddressRegionKHR	hitShaderBindingTableRegion			= makeStridedDeviceAddressRegionKHR(getBufferDeviceAddress(vkd, device, hitShaderBindingTable->get(), 0), shaderGroupHandleSize, shaderGroupHandleSize);
+	const VkStridedDeviceAddressRegionKHR	callableShaderBindingTableRegion	= makeStridedDeviceAddressRegionKHR(DE_NULL, 0, 0);
+
+	const VkDeviceSize						pointerBufferSize		= tlasCount * sizeof(VkDeviceAddress);
+	const VkBufferCreateInfo				pointerBufferCreateInfo	= makeBufferCreateInfo(pointerBufferSize, VK_BUFFER_USAGE_STORAGE_BUFFER_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT);
+	de::MovePtr<BufferWithMemory>			pointerBuffer			= de::MovePtr<BufferWithMemory>(new BufferWithMemory(vkd, device, allocator, pointerBufferCreateInfo, MemoryRequirement::HostVisible | MemoryRequirement::DeviceAddress));
+
+	const VkDeviceSize						indicesBufferSize		= activeTlasCount * sizeof(deUint32);
+	const VkBufferCreateInfo				indicesBufferCreateInfo	= makeBufferCreateInfo(indicesBufferSize, VK_BUFFER_USAGE_STORAGE_BUFFER_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT);
+	de::MovePtr<BufferWithMemory>			indicesBuffer			= de::MovePtr<BufferWithMemory>(new BufferWithMemory(vkd, device, allocator, indicesBufferCreateInfo, MemoryRequirement::HostVisible));
+
+	const VkDeviceSize						resultBufferSize		= activeTlasCount * sizeof(deUint32) * 4;
+	const VkBufferCreateInfo				resultBufferCreateInfo	= makeBufferCreateInfo(resultBufferSize, VK_BUFFER_USAGE_STORAGE_BUFFER_BIT | VK_BUFFER_USAGE_TRANSFER_SRC_BIT);
+	de::MovePtr<BufferWithMemory>			resultBuffer			= de::MovePtr<BufferWithMemory>(new BufferWithMemory(vkd, device, allocator, resultBufferCreateInfo, MemoryRequirement::HostVisible));
+
+	const Move<VkCommandPool>				cmdPool					= createCommandPool(vkd, device, 0, queueFamilyIndex);
+	const Move<VkCommandBuffer>				cmdBuffer				= allocateCommandBuffer(vkd, device, *cmdPool, VK_COMMAND_BUFFER_LEVEL_PRIMARY);
+
+	de::SharedPtr<BottomLevelAccelerationStructure>				blas = de::SharedPtr<BottomLevelAccelerationStructure>(makeBottomLevelAccelerationStructure().release());
+	std::vector<de::MovePtr<TopLevelAccelerationStructure>>		tlasVect(tlasCount);
+	std::vector<VkDeviceAddress>								tlasPtrVect(tlasCount);
+	std::vector<VkAccelerationStructureKHR>						tlasVkVect;
+
+	// randomly scatter active AS across the range
+	deRandom rnd;
+	deRandom_init(&rnd, 123);
+	std::set<deUint32> asIndicesSet;
+	while (asIndicesSet.size() < activeTlasCount)
+		asIndicesSet.insert(deRandom_getUint32(&rnd) % tlasCount);
+
+	// fill indices buffer
+	deUint32 helperIndex = 0;
+	auto& indicesBufferAlloc	= indicesBuffer->getAllocation();
+	deUint32* indicesBufferPtr	= reinterpret_cast<deUint32*>(indicesBufferAlloc.getHostPtr());
+	std::for_each(asIndicesSet.begin(), asIndicesSet.end(),
+		[&helperIndex, indicesBufferPtr](const deUint32& index)
+		{
+			indicesBufferPtr[helperIndex++] = index;
+		});
+	vk::flushAlloc(vkd, device, indicesBufferAlloc);
+
+	// clear result buffer
+	auto& resultBufferAlloc		= resultBuffer->getAllocation();
+	void* resultBufferPtr		= resultBufferAlloc.getHostPtr();
+	deMemset(resultBufferPtr, 0, static_cast<size_t>(resultBufferSize));
+	vk::flushAlloc(vkd, device, resultBufferAlloc);
+
+	beginCommandBuffer(vkd, *cmdBuffer, 0u);
+	{
+		// build bottom level acceleration structure
+		blas->setGeometryData(
+			{
+				{ 0.0, 0.0, 0.0 },
+				{ 1.0, 0.0, 0.0 },
+				{ 0.0, 1.0, 0.0 },
+			},
+			true,
+			VK_GEOMETRY_OPAQUE_BIT_KHR
+		);
+
+		blas->createAndBuild(vkd, device, *cmdBuffer, allocator);
+
+		// build top level acceleration structures
+		for (deUint32 tlasIndex = 0; tlasIndex < tlasCount; ++tlasIndex)
+		{
+			auto& tlas = tlasVect[tlasIndex];
+			tlas = makeTopLevelAccelerationStructure();
+			tlas->setInstanceCount(1);
+			tlas->addInstance(blas);
+			if (!asIndicesSet.count(tlasIndex))
+			{
+				// tlas that are not in asIndicesSet should be empty but it is hard to do
+				// that with current cts utils so we are marking them as inactive instead
+				tlas->setInactiveInstances(true);
+			}
+			tlas->createAndBuild(vkd, device, *cmdBuffer, allocator);
+
+			// get acceleration structure device address
+			const VkAccelerationStructureDeviceAddressInfoKHR addressInfo =
+			{
+				VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_DEVICE_ADDRESS_INFO_KHR,	// VkStructureType				sType
+				DE_NULL,															// const void*					pNext
+				*tlas->getPtr()														// VkAccelerationStructureKHR	accelerationStructure
+			};
+			VkDeviceAddress vkda = vkd.getAccelerationStructureDeviceAddressKHR(device, &addressInfo);
+			tlasPtrVect[tlasIndex] = vkda;
+		}
+
+		// fill pointer buffer
+		vkd.cmdUpdateBuffer(*cmdBuffer, **pointerBuffer, 0, pointerBufferSize, tlasPtrVect.data());
+
+		// wait for data transfers
+		const VkMemoryBarrier bufferUploadBarrier = makeMemoryBarrier(VK_ACCESS_TRANSFER_WRITE_BIT, VK_ACCESS_SHADER_READ_BIT);
+		cmdPipelineMemoryBarrier(vkd, *cmdBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR, &bufferUploadBarrier, 1u);
+
+		// wait for as build
+		const VkMemoryBarrier asBuildBarrier = makeMemoryBarrier(VK_ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_KHR, VK_ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR);
+		cmdPipelineMemoryBarrier(vkd, *cmdBuffer, VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR, VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR, &asBuildBarrier, 1u);
+
+		tlasVkVect.reserve(tlasCount);
+		for (auto& tlas : tlasVect)
+			tlasVkVect.push_back(*tlas->getPtr());
+
+		VkWriteDescriptorSetAccelerationStructureKHR accelerationStructureWriteDescriptorSet =
+		{
+			VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR,	// VkStructureType						sType;
+			DE_NULL,															// const void*							pNext;
+			tlasCount,															// deUint32								accelerationStructureCount;
+			tlasVkVect.data(),													// const VkAccelerationStructureKHR*	pAccelerationStructures;
+		};
+
+		const vk::VkDescriptorBufferInfo pointerBufferInfo	= makeDescriptorBufferInfo(**pointerBuffer, 0u, VK_WHOLE_SIZE);
+		const vk::VkDescriptorBufferInfo indicesBufferInfo	= makeDescriptorBufferInfo(**indicesBuffer, 0u, VK_WHOLE_SIZE);
+		const vk::VkDescriptorBufferInfo resultInfo			= makeDescriptorBufferInfo(**resultBuffer,  0u, VK_WHOLE_SIZE);
+
+		DescriptorSetUpdateBuilder()
+			.writeArray (*descriptorSet, DescriptorSetUpdateBuilder::Location::binding(0u), VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR, tlasCount, &accelerationStructureWriteDescriptorSet)
+			.writeSingle(*descriptorSet, DescriptorSetUpdateBuilder::Location::binding(1u), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, &pointerBufferInfo)
+			.writeSingle(*descriptorSet, DescriptorSetUpdateBuilder::Location::binding(2u), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, &indicesBufferInfo)
+			.writeSingle(*descriptorSet, DescriptorSetUpdateBuilder::Location::binding(3u), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, &resultInfo)
+			.update(vkd, device);
+
+		vkd.cmdBindDescriptorSets(*cmdBuffer, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, *pipelineLayout, 0, 1, &descriptorSet.get(), 0, DE_NULL);
+
+		vkd.cmdBindPipeline(*cmdBuffer, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, *pipeline);
+
+		cmdTraceRays(vkd,
+			*cmdBuffer,
+			&raygenShaderBindingTableRegion,
+			&missShaderBindingTableRegion,
+			&hitShaderBindingTableRegion,
+			&callableShaderBindingTableRegion,
+			activeTlasCount, 1, 1);
+
+		const VkMemoryBarrier postTraceMemoryBarrier = makeMemoryBarrier(VK_ACCESS_SHADER_WRITE_BIT, VK_ACCESS_TRANSFER_READ_BIT);
+		cmdPipelineMemoryBarrier(vkd, *cmdBuffer, VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR, VK_PIPELINE_STAGE_TRANSFER_BIT, &postTraceMemoryBarrier);
+	}
+	endCommandBuffer(vkd, *cmdBuffer);
+
+	submitCommandsAndWait(vkd, device, queue, cmdBuffer.get());
+
+	invalidateMappedMemoryRange(vkd, device, resultBuffer->getAllocation().getMemory(), resultBuffer->getAllocation().getOffset(), resultBufferSize);
+
+	// verify result buffer
+	deUint32		failures	= 0;
+	const deUint32*	resultPtr	= reinterpret_cast<deUint32*>(resultBuffer->getAllocation().getHostPtr());
+	for (deUint32 index = 0; index < activeTlasCount; ++index)
+	{
+		failures += (resultPtr[0 * activeTlasCount + index] != 2) +
+					(resultPtr[1 * activeTlasCount + index] != 3) +
+					(resultPtr[2 * activeTlasCount + index] != 5) +
+					(resultPtr[3 * activeTlasCount + index] != 7);
+	}
+
+	if (failures)
+		return tcu::TestStatus::fail(de::toString(failures) + " failures, " + de::toString(4 * activeTlasCount - failures) + " are ok");
+	return tcu::TestStatus::pass("Pass");
+}
+
 }	// anonymous
 
 void addBasicBuildingTests(tcu::TestCaseGroup* group)
@@ -2397,6 +2889,12 @@
 	}
 }
 
+void addDynamicIndexingTests (tcu::TestCaseGroup* group)
+{
+	auto& ctx = group->getTestContext();
+	group->addChild(new RayTracingASDynamicIndexingTestCase(ctx, "dynamic_indexing"));
+}
+
 void addEmptyAccelerationStructureTests (tcu::TestCaseGroup* group)
 {
 	const struct
@@ -2550,6 +3048,7 @@
 	addTestGroup(group.get(), "host_threading", "Test host threading operations", addHostThreadingOperationTests);
 	addTestGroup(group.get(), "function_argument", "Test using AS as function argument using both pointers and bare values", addFuncArgTests);
 	addTestGroup(group.get(), "instance_triangle_culling", "Test building AS with counterclockwise triangles and/or disabling face culling", addInstanceTriangleCullingTests);
+	addTestGroup(group.get(), "dynamic_indexing", "Exercise dynamic indexing of acceleration structures", addDynamicIndexingTests);
 	addTestGroup(group.get(), "empty", "Test building empty acceleration structures using different methods", addEmptyAccelerationStructureTests);
 	addTestGroup(group.get(), "instance_index", "Test using different values for the instance index and checking them in shaders", addInstanceIndexTests);
 
diff --git a/external/vulkancts/modules/vulkan/ray_tracing/vktRayTracingBarycentricCoordinatesTests.cpp b/external/vulkancts/modules/vulkan/ray_tracing/vktRayTracingBarycentricCoordinatesTests.cpp
new file mode 100644
index 0000000..2ebc1be
--- /dev/null
+++ b/external/vulkancts/modules/vulkan/ray_tracing/vktRayTracingBarycentricCoordinatesTests.cpp
@@ -0,0 +1,444 @@
+/*-------------------------------------------------------------------------
+ * Vulkan Conformance Tests
+ * ------------------------
+ *
+ * Copyright (c) 2021 The Khronos Group Inc.
+ * Copyright (c) 2021 Valve Corporation.
+ *
+ * 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 Ray Tracing Barycentric Coordinates Tests
+ *//*--------------------------------------------------------------------*/
+
+#include "vktRayTracingBarycentricCoordinatesTests.hpp"
+#include "vktTestCase.hpp"
+
+#include "vkRayTracingUtil.hpp"
+#include "vkObjUtil.hpp"
+#include "vkCmdUtil.hpp"
+#include "vkBufferWithMemory.hpp"
+#include "vkBuilderUtil.hpp"
+#include "vkTypeUtil.hpp"
+#include "vkBarrierUtil.hpp"
+
+#include "deUniquePtr.hpp"
+#include "deRandom.hpp"
+
+#include <sstream>
+#include <vector>
+
+namespace vkt
+{
+namespace RayTracing
+{
+
+namespace
+{
+
+using namespace vk;
+
+struct TestParams
+{
+	VkShaderStageFlagBits	stage;
+	deUint32				seed;
+};
+
+VkShaderStageFlags getUsedStages (const TestParams& params)
+{
+	return (VK_SHADER_STAGE_RAYGEN_BIT_KHR | VK_SHADER_STAGE_MISS_BIT_KHR | params.stage);
+}
+
+constexpr float		kZCoord		= 5.0f;
+constexpr float		kXYCoordAbs	= 1.0f;
+
+constexpr float		kThreshold	= 0.001f;				// For the resulting coordinates.
+constexpr float		kTMin		= 1.0f - kThreshold;	// Require the same precision in T.
+constexpr float		kTMax		= 1.0f + kThreshold;	// Ditto.
+constexpr deUint32	kNumRays	= 20u;
+
+class BarycentricCoordinatesCase : public TestCase
+{
+public:
+							BarycentricCoordinatesCase	(tcu::TestContext& testCtx, const std::string& name, const std::string& description, const TestParams& params);
+	virtual					~BarycentricCoordinatesCase	(void) {}
+
+	virtual void			checkSupport				(Context& context) const;
+	virtual void			initPrograms				(vk::SourceCollections& programCollection) const;
+	virtual TestInstance*	createInstance				(Context& context) const;
+
+protected:
+	TestParams				m_params;
+};
+
+class BarycentricCoordinatesInstance : public TestInstance
+{
+public:
+								BarycentricCoordinatesInstance	(Context& context, const TestParams& params);
+	virtual						~BarycentricCoordinatesInstance	(void) {}
+
+	virtual tcu::TestStatus		iterate							(void);
+
+protected:
+	TestParams					m_params;
+};
+
+BarycentricCoordinatesCase::BarycentricCoordinatesCase (tcu::TestContext& testCtx, const std::string& name, const std::string& description, const TestParams& params)
+	: TestCase	(testCtx, name, description)
+	, m_params	(params)
+{}
+
+void BarycentricCoordinatesCase::checkSupport (Context& context) const
+{
+	context.requireDeviceFunctionality("VK_KHR_acceleration_structure");
+	context.requireDeviceFunctionality("VK_KHR_ray_tracing_pipeline");
+}
+
+void BarycentricCoordinatesCase::initPrograms (vk::SourceCollections& programCollection) const
+{
+	const vk::ShaderBuildOptions buildOptions (programCollection.usedVulkanVersion, vk::SPIRV_VERSION_1_4, 0u, true);
+
+	std::ostringstream layoutDecls;
+	layoutDecls
+		<< "layout(set=0, binding=0) uniform accelerationStructureEXT topLevelAS;\n"
+		<< "layout(set=0, binding=1) uniform RayDirections {\n"
+		<< "  vec4 values[" << kNumRays << "];\n"
+		<< "} directions;\n"
+		<< "layout(set=0, binding=2, std430) buffer OutputBarycentrics {\n"
+		<< "  vec4 values[" << kNumRays << "];\n"
+		<< "} coordinates;\n"
+		;
+	const auto layoutDeclsStr = layoutDecls.str();
+
+	std::ostringstream rgen;
+	rgen
+		<< "#version 460 core\n"
+		<< "#extension GL_EXT_ray_tracing : require\n"
+		<< "\n"
+		<< "layout(location=0) rayPayloadEXT vec3 hitValue;\n"
+		<< "\n"
+		<< layoutDeclsStr
+		<< "\n"
+		<< "void main()\n"
+		<< "{\n"
+		<< "  const uint  cullMask  = 0xFF;\n"
+		<< "  const vec3  origin    = vec3(0.0, 0.0, 0.0);\n"
+		<< "  const vec3  direction = directions.values[gl_LaunchIDEXT.x].xyz;\n"
+		<< "  const float tMin      = " << kTMin << ";\n"
+		<< "  const float tMax      = " << kTMax << ";\n"
+		<< "  traceRayEXT(topLevelAS, gl_RayFlagsNoneEXT, cullMask, 0, 0, 0, origin, tMin, direction, tMax, 0);\n"
+		<< "}\n"
+		;
+
+	std::ostringstream hits;
+	hits
+		<< "#version 460 core\n"
+		<< "#extension GL_EXT_ray_tracing : require\n"
+		<< "\n"
+		<< "hitAttributeEXT vec2 baryCoord;\n"
+		<< "\n"
+		<< layoutDeclsStr
+		<< "\n"
+		<< "void main()\n"
+		<< "{\n"
+		<< "  coordinates.values[gl_LaunchIDEXT.x] = vec4(baryCoord, 0.0, 0.0);\n"
+		<< "}\n"
+		;
+
+	std::ostringstream miss;
+	miss
+		<< "#version 460 core\n"
+		<< "#extension GL_EXT_ray_tracing : require\n"
+		<< "layout(location = 0) rayPayloadInEXT vec3 hitValue;\n"
+		<< layoutDeclsStr
+		<< "\n"
+		<< "void main()\n"
+		<< "{\n"
+		<< "  coordinates.values[gl_LaunchIDEXT.x] = vec4(-1.0, -1.0, -1.0, -1.0);\n"
+		<< "}\n";
+		;
+
+	programCollection.glslSources.add("rgen") << glu::RaygenSource(updateRayTracingGLSL(rgen.str())) << buildOptions;
+	programCollection.glslSources.add("miss") << glu::MissSource(updateRayTracingGLSL(miss.str())) << buildOptions;
+
+	if (m_params.stage == VK_SHADER_STAGE_ANY_HIT_BIT_KHR)
+		programCollection.glslSources.add("hits") << glu::AnyHitSource(updateRayTracingGLSL(hits.str())) << buildOptions;
+	else if (m_params.stage == VK_SHADER_STAGE_CLOSEST_HIT_BIT_KHR)
+		programCollection.glslSources.add("hits") << glu::ClosestHitSource(updateRayTracingGLSL(hits.str())) << buildOptions;
+	else
+		DE_ASSERT(false);
+}
+
+TestInstance* BarycentricCoordinatesCase::createInstance (Context& context) const
+{
+	return new BarycentricCoordinatesInstance(context, m_params);
+}
+
+BarycentricCoordinatesInstance::BarycentricCoordinatesInstance (Context& context, const TestParams& params)
+	: TestInstance	(context)
+	, m_params		(params)
+{}
+
+// Calculates coordinates in a triangle given barycentric coordinates b and c.
+tcu::Vec3 calcCoordinates (const std::vector<tcu::Vec3>& triangle, float b, float c)
+{
+	DE_ASSERT(triangle.size() == 3u);
+	DE_ASSERT(b > 0.0f);
+	DE_ASSERT(c > 0.0f);
+	DE_ASSERT(b + c < 1.0f);
+
+	const float a = 1.0f - b - c;
+	DE_ASSERT(a > 0.0f);
+
+	return triangle[0] * a + triangle[1] * b + triangle[2] * c;
+}
+
+// Return a, b, c with a close to 1.0f and (b, c) close to 0.0f.
+tcu::Vec3 getBarycentricVertex (void)
+{
+	const float a = 0.999f;
+	const float aux = 1.0f - a;
+	const float b = aux / 2.0f;
+	const float c = b;
+
+	return tcu::Vec3(a, b, c);
+}
+
+tcu::Vec4 extendToV4 (const tcu::Vec3& vec3)
+{
+	return tcu::Vec4(vec3.x(), vec3.y(), vec3.z(), 0.0f);
+}
+
+tcu::TestStatus BarycentricCoordinatesInstance::iterate (void)
+{
+	const auto&	vki		= m_context.getInstanceInterface();
+	const auto	physDev	= m_context.getPhysicalDevice();
+	const auto&	vkd		= m_context.getDeviceInterface();
+	const auto	device	= m_context.getDevice();
+	auto&		alloc	= m_context.getDefaultAllocator();
+	const auto	qIndex	= m_context.getUniversalQueueFamilyIndex();
+	const auto	queue	= m_context.getUniversalQueue();
+	const auto	stages	= getUsedStages(m_params);
+
+	// Command pool and buffer.
+	const auto cmdPool		= makeCommandPool(vkd, device, qIndex);
+	const auto cmdBufferPtr	= allocateCommandBuffer(vkd, device, cmdPool.get(), VK_COMMAND_BUFFER_LEVEL_PRIMARY);
+	const auto cmdBuffer	= cmdBufferPtr.get();
+
+	beginCommandBuffer(vkd, cmdBuffer);
+
+	// Build acceleration structures.
+	auto topLevelAS		= makeTopLevelAccelerationStructure();
+	auto bottomLevelAS	= makeBottomLevelAccelerationStructure();
+
+	const std::vector<tcu::Vec3> triangle =
+	{
+		tcu::Vec3(        0.0f, -kXYCoordAbs, kZCoord),
+		tcu::Vec3(-kXYCoordAbs,  kXYCoordAbs, kZCoord),
+		tcu::Vec3( kXYCoordAbs,  kXYCoordAbs, kZCoord),
+	};
+
+	bottomLevelAS->addGeometry(triangle, true/*is triangles*/, VK_GEOMETRY_NO_DUPLICATE_ANY_HIT_INVOCATION_BIT_KHR);
+	bottomLevelAS->createAndBuild(vkd, device, cmdBuffer, alloc);
+	de::SharedPtr<BottomLevelAccelerationStructure> blasSharedPtr (bottomLevelAS.release());
+
+	topLevelAS->setInstanceCount(1);
+	topLevelAS->addInstance(blasSharedPtr, identityMatrix3x4, 0, 0xFFu, 0u, VK_GEOMETRY_INSTANCE_TRIANGLE_FACING_CULL_DISABLE_BIT_KHR);
+	topLevelAS->createAndBuild(vkd, device, cmdBuffer, alloc);
+
+	// Uniform buffer for directions.
+	const auto directionsBufferSize		= static_cast<VkDeviceSize>(sizeof(tcu::Vec4) * kNumRays);
+	const auto directionsBufferInfo		= makeBufferCreateInfo(directionsBufferSize, VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT);
+	BufferWithMemory directionsBuffer	(vkd, device, alloc, directionsBufferInfo, MemoryRequirement::HostVisible);
+	auto& directionsBufferAlloc			= directionsBuffer.getAllocation();
+	void* directionsBufferData			= directionsBufferAlloc.getHostPtr();
+
+	// Generate rays towards the 3 triangle coordinates (avoiding exact vertices) and additional coordinates.
+	std::vector<tcu::Vec4> directions;
+	std::vector<tcu::Vec4> expectedOutputCoordinates;
+	directions.reserve(kNumRays);
+	expectedOutputCoordinates.reserve(kNumRays);
+
+	const auto barycentricABC = getBarycentricVertex();
+
+	directions.push_back(extendToV4(calcCoordinates(triangle, barycentricABC.x(), barycentricABC.y())));
+	directions.push_back(extendToV4(calcCoordinates(triangle, barycentricABC.y(), barycentricABC.x())));
+	directions.push_back(extendToV4(calcCoordinates(triangle, barycentricABC.y(), barycentricABC.z())));
+
+	expectedOutputCoordinates.push_back(tcu::Vec4(barycentricABC.x(), barycentricABC.y(), 0.0f, 0.0f));
+	expectedOutputCoordinates.push_back(tcu::Vec4(barycentricABC.y(), barycentricABC.x(), 0.0f, 0.0f));
+	expectedOutputCoordinates.push_back(tcu::Vec4(barycentricABC.y(), barycentricABC.z(), 0.0f, 0.0f));
+
+	de::Random rnd(m_params.seed);
+	while (directions.size() < kNumRays)
+	{
+		// Avoid 0.0 when choosing b and c.
+		float b;
+		while ((b = rnd.getFloat()) == 0.0f)
+			;
+		float c;
+		while ((c = rnd.getFloat(0.0f, 1.0f - b)) == 0.0f)
+			;
+
+		expectedOutputCoordinates.push_back(tcu::Vec4(b, c, 0.0f, 0.0f));
+		directions.push_back(extendToV4(calcCoordinates(triangle, b, c)));
+	}
+
+	deMemcpy(directionsBufferData, directions.data(), directionsBufferSize);
+	flushAlloc(vkd, device, directionsBufferAlloc);
+
+	// Storage buffer for output barycentric coordinates.
+	const auto barycoordsBufferSize		= static_cast<VkDeviceSize>(sizeof(tcu::Vec4) * kNumRays);
+	const auto barycoordsBufferInfo		= makeBufferCreateInfo(barycoordsBufferSize, VK_BUFFER_USAGE_STORAGE_BUFFER_BIT);
+	BufferWithMemory barycoordsBuffer	(vkd, device, alloc, barycoordsBufferInfo, MemoryRequirement::HostVisible);
+	auto& barycoordsBufferAlloc			= barycoordsBuffer.getAllocation();
+	void* barycoordsBufferData			= barycoordsBufferAlloc.getHostPtr();
+	deMemset(barycoordsBufferData, 0, static_cast<size_t>(barycoordsBufferSize));
+	flushAlloc(vkd, device, barycoordsBufferAlloc);
+
+	// Descriptor set layout.
+	DescriptorSetLayoutBuilder dsLayoutBuilder;
+	dsLayoutBuilder.addSingleBinding(VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR, stages);
+	dsLayoutBuilder.addSingleBinding(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, stages);
+	dsLayoutBuilder.addSingleBinding(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, stages);
+	const auto setLayout = dsLayoutBuilder.build(vkd, device);
+
+	// Pipeline layout.
+	const auto pipelineLayout = makePipelineLayout(vkd, device, setLayout.get());
+
+	// Descriptor pool and set.
+	DescriptorPoolBuilder poolBuilder;
+	poolBuilder.addType(VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR);
+	poolBuilder.addType(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER);
+	poolBuilder.addType(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER);
+	const auto descriptorPool	= poolBuilder.build(vkd, device, VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT, 1u);
+	const auto descriptorSet	= makeDescriptorSet(vkd, device, descriptorPool.get(), setLayout.get());
+
+	// Update descriptor set.
+	{
+		const VkWriteDescriptorSetAccelerationStructureKHR accelDescInfo =
+		{
+			VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR,
+			nullptr,
+			1u,
+			topLevelAS.get()->getPtr(),
+		};
+		const auto uniformBufferInfo = makeDescriptorBufferInfo(directionsBuffer.get(), 0ull, VK_WHOLE_SIZE);
+		const auto storageBufferInfo = makeDescriptorBufferInfo(barycoordsBuffer.get(), 0ull, VK_WHOLE_SIZE);
+
+		DescriptorSetUpdateBuilder updateBuilder;
+		updateBuilder.writeSingle(descriptorSet.get(), DescriptorSetUpdateBuilder::Location::binding(0u), VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR, &accelDescInfo);
+		updateBuilder.writeSingle(descriptorSet.get(), DescriptorSetUpdateBuilder::Location::binding(1u), VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, &uniformBufferInfo);
+		updateBuilder.writeSingle(descriptorSet.get(), DescriptorSetUpdateBuilder::Location::binding(2u), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, &storageBufferInfo);
+		updateBuilder.update(vkd, device);
+	}
+
+	// Shader modules.
+	auto rgenModule = createShaderModule(vkd, device, m_context.getBinaryCollection().get("rgen"), 0);
+	auto missModule = createShaderModule(vkd, device, m_context.getBinaryCollection().get("miss"), 0);
+	auto hitsModule = createShaderModule(vkd, device, m_context.getBinaryCollection().get("hits"), 0);
+
+	// Get some ray tracing properties.
+	deUint32 shaderGroupHandleSize		= 0u;
+	deUint32 shaderGroupBaseAlignment	= 1u;
+	{
+		const auto rayTracingPropertiesKHR	= makeRayTracingProperties(vki, physDev);
+		shaderGroupHandleSize				= rayTracingPropertiesKHR->getShaderGroupHandleSize();
+		shaderGroupBaseAlignment			= rayTracingPropertiesKHR->getShaderGroupBaseAlignment();
+	}
+
+	// Create raytracing pipeline and shader binding tables.
+	Move<VkPipeline>				pipeline;
+	de::MovePtr<BufferWithMemory>	raygenSBT;
+	de::MovePtr<BufferWithMemory>	missSBT;
+	de::MovePtr<BufferWithMemory>	hitSBT;
+	de::MovePtr<BufferWithMemory>	callableSBT;
+
+	auto raygenSBTRegion	= makeStridedDeviceAddressRegionKHR(DE_NULL, 0, 0);
+	auto missSBTRegion		= makeStridedDeviceAddressRegionKHR(DE_NULL, 0, 0);
+	auto hitSBTRegion		= makeStridedDeviceAddressRegionKHR(DE_NULL, 0, 0);
+	auto callableSBTRegion	= makeStridedDeviceAddressRegionKHR(DE_NULL, 0, 0);
+
+	{
+		const auto rayTracingPipeline = de::newMovePtr<RayTracingPipeline>();
+		rayTracingPipeline->addShader(VK_SHADER_STAGE_RAYGEN_BIT_KHR, rgenModule, 0);
+		rayTracingPipeline->addShader(VK_SHADER_STAGE_MISS_BIT_KHR, missModule, 1);
+		rayTracingPipeline->addShader(m_params.stage, hitsModule, 2);
+
+		pipeline		= rayTracingPipeline->createPipeline(vkd, device, pipelineLayout.get());
+
+		raygenSBT		= rayTracingPipeline->createShaderBindingTable(vkd, device, pipeline.get(), alloc, shaderGroupHandleSize, shaderGroupBaseAlignment, 0, 1);
+		raygenSBTRegion	= makeStridedDeviceAddressRegionKHR(getBufferDeviceAddress(vkd, device, raygenSBT->get(), 0), shaderGroupHandleSize, shaderGroupHandleSize);
+
+		missSBT			= rayTracingPipeline->createShaderBindingTable(vkd, device, pipeline.get(), alloc, shaderGroupHandleSize, shaderGroupBaseAlignment, 1, 1);
+		missSBTRegion	= makeStridedDeviceAddressRegionKHR(getBufferDeviceAddress(vkd, device, missSBT->get(), 0), shaderGroupHandleSize, shaderGroupHandleSize);
+
+		hitSBT			= rayTracingPipeline->createShaderBindingTable(vkd, device, pipeline.get(), alloc, shaderGroupHandleSize, shaderGroupBaseAlignment, 2, 1);
+		hitSBTRegion	= makeStridedDeviceAddressRegionKHR(getBufferDeviceAddress(vkd, device, hitSBT->get(), 0), shaderGroupHandleSize, shaderGroupHandleSize);
+	}
+
+	// Trace rays.
+	vkd.cmdBindPipeline(cmdBuffer, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, pipeline.get());
+	vkd.cmdBindDescriptorSets(cmdBuffer, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, pipelineLayout.get(), 0u, 1u, &descriptorSet.get(), 0u, nullptr);
+	vkd.cmdTraceRaysKHR(cmdBuffer, &raygenSBTRegion, &missSBTRegion, &hitSBTRegion, &callableSBTRegion, kNumRays, 1u, 1u);
+
+	// Barrier for the output buffer.
+	const auto bufferBarrier = makeMemoryBarrier(VK_ACCESS_SHADER_WRITE_BIT, VK_ACCESS_HOST_READ_BIT);
+	vkd.cmdPipelineBarrier(cmdBuffer, VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR, VK_PIPELINE_STAGE_HOST_BIT, 0u, 1u, &bufferBarrier, 0u, nullptr, 0u, nullptr);
+
+	endCommandBuffer(vkd, cmdBuffer);
+	submitCommandsAndWait(vkd, device, queue, cmdBuffer);
+
+	// Verify results.
+	std::vector<tcu::Vec4>	outputData				(expectedOutputCoordinates.size());
+	const auto				barycoordsBufferSizeSz	= static_cast<size_t>(barycoordsBufferSize);
+
+	invalidateAlloc(vkd, device, barycoordsBufferAlloc);
+	DE_ASSERT(de::dataSize(outputData) == barycoordsBufferSizeSz);
+	deMemcpy(outputData.data(), barycoordsBufferData, barycoordsBufferSizeSz);
+
+	for (size_t i = 0; i < outputData.size(); ++i)
+	{
+		const auto& outVal		= outputData[i];
+		const auto& expectedVal	= expectedOutputCoordinates[i];
+
+		if (outVal.z() != 0.0f || outVal.w() != 0.0f || de::abs(outVal.x() - expectedVal.x()) > kThreshold || de::abs(outVal.y() - expectedVal.y()) > kThreshold)
+		{
+			std::ostringstream msg;
+			msg << "Unexpected value found for ray " << i << ": expected " << expectedVal << " and found " << outVal << ";";
+			TCU_FAIL(msg.str());
+		}
+	}
+
+	return tcu::TestStatus::pass("Pass");
+}
+
+} // anonymous
+
+tcu::TestCaseGroup*	createBarycentricCoordinatesTests (tcu::TestContext& testCtx)
+{
+	using GroupPtr = de::MovePtr<tcu::TestCaseGroup>;
+
+	GroupPtr mainGroup(new tcu::TestCaseGroup(testCtx, "barycentric_coordinates", "Test barycentric coordinates reported in hit attributes"));
+
+	deUint32 seed = 1614343620u;
+	mainGroup->addChild(new BarycentricCoordinatesCase(testCtx, "ahit", "", TestParams{VK_SHADER_STAGE_ANY_HIT_BIT_KHR,		seed++}));
+	mainGroup->addChild(new BarycentricCoordinatesCase(testCtx, "chit", "", TestParams{VK_SHADER_STAGE_CLOSEST_HIT_BIT_KHR,	seed++}));
+
+	return mainGroup.release();
+}
+
+} // RayTracing
+} // vkt
+
diff --git a/external/vulkancts/modules/vulkan/pipeline/vktPipelineVertexOnlyTests.hpp b/external/vulkancts/modules/vulkan/ray_tracing/vktRayTracingBarycentricCoordinatesTests.hpp
similarity index 66%
copy from external/vulkancts/modules/vulkan/pipeline/vktPipelineVertexOnlyTests.hpp
copy to external/vulkancts/modules/vulkan/ray_tracing/vktRayTracingBarycentricCoordinatesTests.hpp
index 1a85ebf..37f3f3b 100644
--- a/external/vulkancts/modules/vulkan/pipeline/vktPipelineVertexOnlyTests.hpp
+++ b/external/vulkancts/modules/vulkan/ray_tracing/vktRayTracingBarycentricCoordinatesTests.hpp
@@ -1,11 +1,11 @@
-#ifndef _VKTPIPELINEVERTEXONLYTESTS_HPP
-#define _VKTPIPELINEVERTEXONLYTESTS_HPP
-/*------------------------------------------------------------------------
+#ifndef _VKTRAYTRACINGBARYCENTRICCOORDINATESTESTS_HPP
+#define _VKTRAYTRACINGBARYCENTRICCOORDINATESTESTS_HPP
+/*-------------------------------------------------------------------------
  * Vulkan Conformance Tests
  * ------------------------
  *
- * Copyright (c) 2019 Google LLC
- * Copyright (c) 2019 The Khronos Group Inc.
+ * Copyright (c) 2021 The Khronos Group Inc.
+ * Copyright (c) 2021 Valve Corporation.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -21,7 +21,7 @@
  *
  *//*!
  * \file
- * \brief Tests using only vertex shader in a graphics pipeline
+ * \brief Ray Tracing Barycentric Coordinates Tests
  *//*--------------------------------------------------------------------*/
 
 #include "tcuDefs.hpp"
@@ -29,12 +29,12 @@
 
 namespace vkt
 {
-namespace pipeline
+namespace RayTracing
 {
 
-tcu::TestCaseGroup*	createVertexOnlyTests (tcu::TestContext& testCtx);
+tcu::TestCaseGroup*	createBarycentricCoordinatesTests (tcu::TestContext& testCtx);
 
-} // pipeline
+} // RayTracing
 } // vkt
 
-#endif // _VKTPIPELINEVERTEXONLYTESTS_HPP
+#endif // _VKTRAYTRACINGBARYCENTRICCOORDINATESTESTS_HPP
diff --git a/external/vulkancts/modules/vulkan/ray_tracing/vktRayTracingBuildIndirectTests.cpp b/external/vulkancts/modules/vulkan/ray_tracing/vktRayTracingBuildIndirectTests.cpp
index 0b7b275..c8fbd75 100644
--- a/external/vulkancts/modules/vulkan/ray_tracing/vktRayTracingBuildIndirectTests.cpp
+++ b/external/vulkancts/modules/vulkan/ray_tracing/vktRayTracingBuildIndirectTests.cpp
@@ -282,7 +282,7 @@
 			"\n"
 			"void main()\n"
 			"{\n"
-			"  uint primitiveCount  = " << m_data.depth << "u;\n"
+			"  uint primitiveCount  = " << m_data.instancesGroupCount << "u;\n"
 			"  uint primitiveOffset = " << 0 << "u;\n"
 			"  uint firstVertex     = " << 0 << "u;\n"
 			"  uint transformOffset = " << 0 << "u;\n"
diff --git a/external/vulkancts/modules/vulkan/ray_tracing/vktRayTracingCaptureReplayTests.cpp b/external/vulkancts/modules/vulkan/ray_tracing/vktRayTracingCaptureReplayTests.cpp
index 4a828f3..123ee79 100644
--- a/external/vulkancts/modules/vulkan/ray_tracing/vktRayTracingCaptureReplayTests.cpp
+++ b/external/vulkancts/modules/vulkan/ray_tracing/vktRayTracingCaptureReplayTests.cpp
@@ -28,6 +28,7 @@
 
 #include "vktTestCase.hpp"
 #include "vktTestGroupUtil.hpp"
+#include "vktCustomInstancesDevices.hpp"
 #include "vkCmdUtil.hpp"
 #include "vkObjUtil.hpp"
 #include "vkBuilderUtil.hpp"
@@ -38,6 +39,8 @@
 
 #include "vkRayTracingUtil.hpp"
 
+#include "tcuCommandLine.hpp"
+
 namespace vkt
 {
 namespace RayTracing
@@ -929,6 +932,7 @@
 	const InstanceInterface&				vki									= m_context.getInstanceInterface();
 	const VkInstance						instance							= m_context.getInstance();
 	const VkPhysicalDevice					physicalDevice						= m_context.getPhysicalDevice();
+	const auto								validationEnabled					= m_context.getTestContext().getCommandLine().isValidationEnabled();
 
 	VkQueue									queue								= DE_NULL;
 	deUint32								queueFamilyIndex					= NO_MATCH_FOUND;
@@ -997,7 +1001,7 @@
 	deviceInfo.pEnabledFeatures													= DE_NULL;
 	deviceInfo.queueCreateInfoCount												= 1;
 	deviceInfo.pQueueCreateInfos												= &queueInfo;
-	Move<VkDevice>							testDevice							= createDevice(vkp, m_context.getInstance(), vki, physicalDevice, &deviceInfo);
+	Move<VkDevice>							testDevice							= createCustomDevice(validationEnabled, vkp, m_context.getInstance(), vki, physicalDevice, &deviceInfo);
 	VkDevice								device								= *testDevice;
 	DeviceDriver							vkd									(vkp, instance, device);
 
@@ -1197,8 +1201,12 @@
 
 					if (m_data.buildType == VK_ACCELERATION_STRUCTURE_BUILD_TYPE_DEVICE_KHR)
 					{
-						const VkMemoryBarrier	serializeMemoryBarrier = makeMemoryBarrier(VK_ACCESS_MEMORY_WRITE_BIT, VK_ACCESS_MEMORY_READ_BIT);
-						cmdPipelineMemoryBarrier(vkd, *cmdBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, &serializeMemoryBarrier);
+						endCommandBuffer(vkd, *cmdBuffer);
+
+						submitCommandsAndWait(vkd, device, queue, cmdBuffer.get());
+
+						vkd.resetCommandPool(device, *cmdPool, VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT);
+						beginCommandBuffer(vkd, *cmdBuffer, 0u);
 					}
 
 					de::MovePtr<BottomLevelAccelerationStructure> asCopy = makeBottomLevelAccelerationStructure();
@@ -1296,8 +1304,12 @@
 
 					if (m_data.buildType == VK_ACCELERATION_STRUCTURE_BUILD_TYPE_DEVICE_KHR)
 					{
-						const VkMemoryBarrier	serializeMemoryBarrier = makeMemoryBarrier(VK_ACCESS_MEMORY_WRITE_BIT, VK_ACCESS_MEMORY_READ_BIT);
-						cmdPipelineMemoryBarrier(vkd, *cmdBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, &serializeMemoryBarrier);
+						endCommandBuffer(vkd, *cmdBuffer);
+
+						submitCommandsAndWait(vkd, device, queue, cmdBuffer.get());
+
+						vkd.resetCommandPool(device, *cmdPool, VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT);
+						beginCommandBuffer(vkd, *cmdBuffer, 0u);
 					}
 
 					topLevelAccelerationStructureCopy = makeTopLevelAccelerationStructure();
diff --git a/external/vulkancts/modules/vulkan/ray_tracing/vktRayTracingComplexControlFlowTests.cpp b/external/vulkancts/modules/vulkan/ray_tracing/vktRayTracingComplexControlFlowTests.cpp
index 2bf869a..bef7ff6 100644
--- a/external/vulkancts/modules/vulkan/ray_tracing/vktRayTracingComplexControlFlowTests.cpp
+++ b/external/vulkancts/modules/vulkan/ray_tracing/vktRayTracingComplexControlFlowTests.cpp
@@ -231,7 +231,6 @@
 																										 const VkShaderStageFlags	shaderStageFlags,
 																										 deUint32&					shaderGroup,
 																										 deUint32&					shaderGroupCount) const;
-	void														checkSupportInInstance					(void) const;
 	PushConstants												getPushConstants						(void) const;
 	std::vector<deUint32>										getExpectedValues						(void) const;
 	de::MovePtr<BufferWithMemory>								runTest									(void);
@@ -359,6 +358,9 @@
 	if (0 != (m_shaders2 & VK_SHADER_STAGE_MISS_BIT_KHR))			rayTracingPipeline->addShader(VK_SHADER_STAGE_MISS_BIT_KHR			, createShaderModule(vkd, device, collection.get("miss2"), 0), m_missShaderGroup + 1);
 	if (0 != (m_shaders2 & VK_SHADER_STAGE_INTERSECTION_BIT_KHR))	rayTracingPipeline->addShader(VK_SHADER_STAGE_INTERSECTION_BIT_KHR	, createShaderModule(vkd, device, collection.get("sect2"), 0), m_hitShaderGroup + 1);
 
+	if (m_data.testOp == TEST_OP_TRACE_RAY && m_data.stage != VK_SHADER_STAGE_RAYGEN_BIT_KHR)
+		rayTracingPipeline->setMaxRecursionDepth(2);
+
 	Move<VkPipeline> pipeline = rayTracingPipeline->createPipeline(vkd, device, pipelineLayout);
 
 	return pipeline;
@@ -636,10 +638,6 @@
 	return buffer;
 }
 
-void RayTracingComplexControlFlowInstance::checkSupportInInstance (void) const
-{
-}
-
 std::vector<deUint32> RayTracingComplexControlFlowInstance::getExpectedValues (void) const
 {
 	const deUint32				plainSize		= m_data.width * m_data.height;
@@ -972,8 +970,6 @@
 
 tcu::TestStatus RayTracingComplexControlFlowInstance::iterate (void)
 {
-	checkSupportInInstance();
-
 	const de::MovePtr<BufferWithMemory>	buffer		= runTest();
 	const deUint32*						bufferPtr	= (deUint32*)buffer->getAllocation().getHostPtr();
 	const vector<deUint32>				expected	= getExpectedValues();
@@ -1041,7 +1037,7 @@
 	static inline const std::string		getMissPassthrough			(void);
 	static inline const std::string		getHitPassthrough			(void);
 
-	CaseDef					m_data;
+	CaseDef								m_data;
 };
 
 ComplexControlFlowTestCase::ComplexControlFlowTestCase (tcu::TestContext& context, const char* name, const char* desc, const CaseDef data)
@@ -1057,15 +1053,26 @@
 void ComplexControlFlowTestCase::checkSupport (Context& context) const
 {
 	context.requireDeviceFunctionality("VK_KHR_acceleration_structure");
+
 	const VkPhysicalDeviceAccelerationStructureFeaturesKHR&	accelerationStructureFeaturesKHR = context.getAccelerationStructureFeatures();
+
 	if (accelerationStructureFeaturesKHR.accelerationStructure == DE_FALSE)
 		TCU_THROW(TestError, "VK_KHR_ray_tracing_pipeline requires VkPhysicalDeviceAccelerationStructureFeaturesKHR.accelerationStructure");
 
 	context.requireDeviceFunctionality("VK_KHR_ray_tracing_pipeline");
+
 	const VkPhysicalDeviceRayTracingPipelineFeaturesKHR&	rayTracingPipelineFeaturesKHR = context.getRayTracingPipelineFeatures();
+
 	if (rayTracingPipelineFeaturesKHR.rayTracingPipeline == DE_FALSE)
 		TCU_THROW(NotSupportedError, "Requires VkPhysicalDeviceRayTracingPipelineFeaturesKHR.rayTracingPipeline");
 
+	const VkPhysicalDeviceRayTracingPipelinePropertiesKHR&	rayTracingPipelinePropertiesKHR = context.getRayTracingPipelineProperties();
+
+	if (m_data.testOp == TEST_OP_TRACE_RAY && m_data.stage != VK_SHADER_STAGE_RAYGEN_BIT_KHR)
+	{
+		if (rayTracingPipelinePropertiesKHR.maxRayRecursionDepth < 2)
+			TCU_THROW(NotSupportedError, "rayTracingPipelinePropertiesKHR.maxRayRecursionDepth is smaller than required");
+	}
 }
 
 
@@ -1685,6 +1692,15 @@
 
 tcu::TestCaseGroup*	createComplexControlFlowTests (tcu::TestContext& testCtx)
 {
+	const VkShaderStageFlagBits	R	= VK_SHADER_STAGE_RAYGEN_BIT_KHR;
+	const VkShaderStageFlagBits	A	= VK_SHADER_STAGE_ANY_HIT_BIT_KHR;
+	const VkShaderStageFlagBits	C	= VK_SHADER_STAGE_CLOSEST_HIT_BIT_KHR;
+	const VkShaderStageFlagBits	M	= VK_SHADER_STAGE_MISS_BIT_KHR;
+	const VkShaderStageFlagBits	I	= VK_SHADER_STAGE_INTERSECTION_BIT_KHR;
+	const VkShaderStageFlagBits	L	= VK_SHADER_STAGE_CALLABLE_BIT_KHR;
+
+	DE_UNREF(A);
+
 	static const struct
 	{
 		const char*				name;
@@ -1701,14 +1717,15 @@
 	};
 	static const struct
 	{
-		const char*	name;
-		TestOp		op;
+		const char*			name;
+		TestOp				op;
+		VkShaderStageFlags	applicableInStages;
 	}
 	testOps[]
 	{
-		{ "execute_callable",		TEST_OP_EXECUTE_CALLABLE	},
-		{ "trace_ray",				TEST_OP_TRACE_RAY			},
-		{ "report_intersection",	TEST_OP_REPORT_INTERSECTION	},
+		{ "execute_callable",		TEST_OP_EXECUTE_CALLABLE,		R |    C | M     | L },
+		{ "trace_ray",				TEST_OP_TRACE_RAY,				R |    C | M         },
+		{ "report_intersection",	TEST_OP_REPORT_INTERSECTION,	               I     },
 	};
 	static const struct
 	{
@@ -1756,36 +1773,9 @@
 					height,					//  deUint32				height;
 				};
 
-				if (testOp == TEST_OP_REPORT_INTERSECTION && testStage != VK_SHADER_STAGE_INTERSECTION_BIT_KHR)
+				if ((testOps[testOpNdx].applicableInStages & static_cast<VkShaderStageFlags>(testStage)) == 0)
 					continue;
 
-				if (testOp == TEST_OP_TRACE_RAY)
-				{
-					switch (testStage)
-					{
-						case VK_SHADER_STAGE_RAYGEN_BIT_KHR:
-						case VK_SHADER_STAGE_CLOSEST_HIT_BIT_KHR:
-						case VK_SHADER_STAGE_MISS_BIT_KHR:
-							break;
-						default:
-							continue;
-					}
-				}
-
-				if (testOp == TEST_OP_EXECUTE_CALLABLE)
-				{
-					switch (testStage)
-					{
-						case VK_SHADER_STAGE_RAYGEN_BIT_KHR:
-						case VK_SHADER_STAGE_CLOSEST_HIT_BIT_KHR:
-						case VK_SHADER_STAGE_MISS_BIT_KHR:
-						case VK_SHADER_STAGE_CALLABLE_BIT_KHR:
-							break;
-						default:
-							continue;
-					}
-				}
-
 				testOpGroup->addChild(new ComplexControlFlowTestCase(testCtx, testName.c_str(), "", caseDef));
 			}
 
diff --git a/external/vulkancts/modules/vulkan/ray_tracing/vktRayTracingDataSpillTests.cpp b/external/vulkancts/modules/vulkan/ray_tracing/vktRayTracingDataSpillTests.cpp
new file mode 100644
index 0000000..07617dd
--- /dev/null
+++ b/external/vulkancts/modules/vulkan/ray_tracing/vktRayTracingDataSpillTests.cpp
@@ -0,0 +1,2819 @@
+/*-------------------------------------------------------------------------
+ * Vulkan Conformance Tests
+ * ------------------------
+ *
+ * Copyright (c) 2020 The Khronos Group Inc.
+ * Copyright (c) 2020 Valve Corporation.
+ *
+ * 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 Ray Tracing Data Spill tests
+ *//*--------------------------------------------------------------------*/
+#include "vktRayTracingDataSpillTests.hpp"
+#include "vktTestCase.hpp"
+
+#include "vkRayTracingUtil.hpp"
+#include "vkObjUtil.hpp"
+#include "vkBufferWithMemory.hpp"
+#include "vkImageWithMemory.hpp"
+#include "vkBuilderUtil.hpp"
+#include "vkCmdUtil.hpp"
+#include "vkTypeUtil.hpp"
+#include "vkBarrierUtil.hpp"
+
+#include "tcuStringTemplate.hpp"
+#include "tcuFloat.hpp"
+
+#include "deUniquePtr.hpp"
+#include "deSTLUtil.hpp"
+
+#include <sstream>
+#include <string>
+#include <map>
+#include <vector>
+#include <array>
+#include <utility>
+
+using namespace vk;
+
+namespace vkt
+{
+namespace RayTracing
+{
+
+namespace
+{
+
+// The type of shader call that will be used.
+enum class CallType
+{
+	TRACE_RAY = 0,
+	EXECUTE_CALLABLE,
+	REPORT_INTERSECTION,
+};
+
+// The type of data that will be checked.
+enum class DataType
+{
+	// These can be made an array or vector.
+	INT32 = 0,
+	UINT32,
+	INT64,
+	UINT64,
+	INT16,
+	UINT16,
+	INT8,
+	UINT8,
+	FLOAT32,
+	FLOAT64,
+	FLOAT16,
+
+	// These are standalone, so the vector type should be scalar.
+	STRUCT,
+	IMAGE,
+	SAMPLER,
+	SAMPLED_IMAGE,
+	PTR_IMAGE,
+	PTR_SAMPLER,
+	PTR_SAMPLED_IMAGE,
+	PTR_TEXEL,
+	OP_NULL,
+	OP_UNDEF,
+};
+
+// The type of vector in use.
+enum class VectorType
+{
+	SCALAR	= 1,
+	V2		= 2,
+	V3		= 3,
+	V4		= 4,
+	A5		= 5,
+};
+
+struct InputStruct
+{
+	deUint32	uintPart;
+	float		floatPart;
+};
+
+constexpr auto			kImageFormat		= VK_FORMAT_R32_UINT;
+const auto				kImageExtent		= makeExtent3D(1u, 1u, 1u);
+
+// For samplers.
+const VkImageUsageFlags	kSampledImageUsage	= (VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_SAMPLED_BIT);
+constexpr size_t		kNumImages			= 4u;
+constexpr size_t		kNumSamplers		= 4u;
+constexpr size_t		kNumCombined		= 2u;
+constexpr size_t		kNumAloneImages		= kNumImages - kNumCombined;
+constexpr size_t		kNumAloneSamplers	= kNumSamplers - kNumCombined;
+
+// For storage images.
+const VkImageUsageFlags	kStorageImageUsage	= (VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_STORAGE_BIT);
+
+// For the pipeline interface tests.
+constexpr size_t		kNumStorageValues	= 6u;
+constexpr deUint32		kShaderRecordSize	= sizeof(tcu::UVec4);
+
+// Get the effective vector length in memory.
+size_t getEffectiveVectorLength (VectorType vectorType)
+{
+	return ((vectorType == VectorType::V3) ? static_cast<size_t>(4) : static_cast<size_t>(vectorType));
+}
+
+// Get the corresponding element size.
+VkDeviceSize getElementSize(DataType dataType, VectorType vectorType)
+{
+	const size_t	length		= getEffectiveVectorLength(vectorType);
+	size_t			dataSize	= 0u;
+
+	switch (dataType)
+	{
+	case DataType::INT32:			dataSize = sizeof(deInt32);			break;
+	case DataType::UINT32:			dataSize = sizeof(deUint32);		break;
+	case DataType::INT64:			dataSize = sizeof(deInt64);			break;
+	case DataType::UINT64:			dataSize = sizeof(deUint64);		break;
+	case DataType::INT16:			dataSize = sizeof(deInt16);			break;
+	case DataType::UINT16:			dataSize = sizeof(deUint16);		break;
+	case DataType::INT8:			dataSize = sizeof(deInt8);			break;
+	case DataType::UINT8:			dataSize = sizeof(deUint8);			break;
+	case DataType::FLOAT32:			dataSize = sizeof(tcu::Float32);	break;
+	case DataType::FLOAT64:			dataSize = sizeof(tcu::Float64);	break;
+	case DataType::FLOAT16:			dataSize = sizeof(tcu::Float16);	break;
+	case DataType::STRUCT:			dataSize = sizeof(InputStruct);		break;
+	case DataType::IMAGE:				// fallthrough.
+	case DataType::SAMPLER:				// fallthrough.
+	case DataType::SAMPLED_IMAGE:		// fallthrough.
+	case DataType::PTR_IMAGE:			// fallthrough.
+	case DataType::PTR_SAMPLER:			// fallthrough.
+	case DataType::PTR_SAMPLED_IMAGE:	// fallthrough.
+									dataSize = sizeof(tcu::Float32);	break;
+	case DataType::PTR_TEXEL:		dataSize = sizeof(deInt32);			break;
+	case DataType::OP_NULL:				// fallthrough.
+	case DataType::OP_UNDEF:			// fallthrough.
+									dataSize = sizeof(deUint32);		break;
+	default: DE_ASSERT(false); break;
+	}
+
+	return static_cast<VkDeviceSize>(dataSize * length);
+}
+
+// Proper stage for generating default geometry.
+VkShaderStageFlagBits getShaderStageForGeometry (CallType type_)
+{
+	VkShaderStageFlagBits bits = VK_SHADER_STAGE_FLAG_BITS_MAX_ENUM;
+
+	switch (type_)
+	{
+	case CallType::TRACE_RAY:			bits = VK_SHADER_STAGE_CLOSEST_HIT_BIT_KHR;		break;
+	case CallType::EXECUTE_CALLABLE:	bits = VK_SHADER_STAGE_CALLABLE_BIT_KHR;		break;
+	case CallType::REPORT_INTERSECTION:	bits = VK_SHADER_STAGE_INTERSECTION_BIT_KHR;	break;
+	default: DE_ASSERT(false); break;
+	}
+
+	DE_ASSERT(bits != VK_SHADER_STAGE_FLAG_BITS_MAX_ENUM);
+	return bits;
+}
+
+VkShaderStageFlags getShaderStages (CallType type_)
+{
+	VkShaderStageFlags flags = VK_SHADER_STAGE_RAYGEN_BIT_KHR;
+
+	switch (type_)
+	{
+	case CallType::EXECUTE_CALLABLE:
+		flags |= VK_SHADER_STAGE_CALLABLE_BIT_KHR;
+		break;
+	case CallType::TRACE_RAY:
+		flags |= VK_SHADER_STAGE_CLOSEST_HIT_BIT_KHR;
+		break;
+	case CallType::REPORT_INTERSECTION:
+		flags |= VK_SHADER_STAGE_INTERSECTION_BIT_KHR;
+		flags |= VK_SHADER_STAGE_ANY_HIT_BIT_KHR;
+		break;
+	default:
+		DE_ASSERT(false);
+		break;
+	}
+
+	return flags;
+}
+
+// Some test types need additional descriptors with samplers, images and combined image samplers.
+bool samplersNeeded (DataType dataType)
+{
+	bool needed = false;
+
+	switch (dataType)
+	{
+	case DataType::IMAGE:
+	case DataType::SAMPLER:
+	case DataType::SAMPLED_IMAGE:
+	case DataType::PTR_IMAGE:
+	case DataType::PTR_SAMPLER:
+	case DataType::PTR_SAMPLED_IMAGE:
+		needed = true;
+		break;
+	default:
+		break;
+	}
+
+	return needed;
+}
+
+// Some test types need an additional descriptor with a storage image.
+bool storageImageNeeded (DataType dataType)
+{
+	return (dataType == DataType::PTR_TEXEL);
+}
+
+// Returns two strings:
+//		.first is an optional GLSL additional type declaration (for structs, basically).
+//		.second is the value declaration inside the input block.
+std::pair<std::string, std::string> getGLSLInputValDecl (DataType dataType, VectorType vectorType)
+{
+	using TypePair	= std::pair<DataType, VectorType>;
+	using TypeMap	= std::map<TypePair, std::string>;
+
+	const std::string	varName		= "val";
+	const auto			dataTypeIdx	= static_cast<int>(dataType);
+
+	if (dataTypeIdx >= static_cast<int>(DataType::INT32) && dataTypeIdx <= static_cast<int>(DataType::FLOAT16))
+	{
+		// Note: A5 uses the same type as the scalar version. The array suffix will be added below.
+		const TypeMap map =
+		{
+			std::make_pair(std::make_pair(DataType::INT32,		VectorType::SCALAR),	"int32_t"),
+			std::make_pair(std::make_pair(DataType::INT32,		VectorType::V2),		"i32vec2"),
+			std::make_pair(std::make_pair(DataType::INT32,		VectorType::V3),		"i32vec3"),
+			std::make_pair(std::make_pair(DataType::INT32,		VectorType::V4),		"i32vec4"),
+			std::make_pair(std::make_pair(DataType::INT32,		VectorType::A5),		"int32_t"),
+			std::make_pair(std::make_pair(DataType::UINT32,		VectorType::SCALAR),	"uint32_t"),
+			std::make_pair(std::make_pair(DataType::UINT32,		VectorType::V2),		"u32vec2"),
+			std::make_pair(std::make_pair(DataType::UINT32,		VectorType::V3),		"u32vec3"),
+			std::make_pair(std::make_pair(DataType::UINT32,		VectorType::V4),		"u32vec4"),
+			std::make_pair(std::make_pair(DataType::UINT32,		VectorType::A5),		"uint32_t"),
+			std::make_pair(std::make_pair(DataType::INT64,		VectorType::SCALAR),	"int64_t"),
+			std::make_pair(std::make_pair(DataType::INT64,		VectorType::V2),		"i64vec2"),
+			std::make_pair(std::make_pair(DataType::INT64,		VectorType::V3),		"i64vec3"),
+			std::make_pair(std::make_pair(DataType::INT64,		VectorType::V4),		"i64vec4"),
+			std::make_pair(std::make_pair(DataType::INT64,		VectorType::A5),		"int64_t"),
+			std::make_pair(std::make_pair(DataType::UINT64,		VectorType::SCALAR),	"uint64_t"),
+			std::make_pair(std::make_pair(DataType::UINT64,		VectorType::V2),		"u64vec2"),
+			std::make_pair(std::make_pair(DataType::UINT64,		VectorType::V3),		"u64vec3"),
+			std::make_pair(std::make_pair(DataType::UINT64,		VectorType::V4),		"u64vec4"),
+			std::make_pair(std::make_pair(DataType::UINT64,		VectorType::A5),		"uint64_t"),
+			std::make_pair(std::make_pair(DataType::INT16,		VectorType::SCALAR),	"int16_t"),
+			std::make_pair(std::make_pair(DataType::INT16,		VectorType::V2),		"i16vec2"),
+			std::make_pair(std::make_pair(DataType::INT16,		VectorType::V3),		"i16vec3"),
+			std::make_pair(std::make_pair(DataType::INT16,		VectorType::V4),		"i16vec4"),
+			std::make_pair(std::make_pair(DataType::INT16,		VectorType::A5),		"int16_t"),
+			std::make_pair(std::make_pair(DataType::UINT16,		VectorType::SCALAR),	"uint16_t"),
+			std::make_pair(std::make_pair(DataType::UINT16,		VectorType::V2),		"u16vec2"),
+			std::make_pair(std::make_pair(DataType::UINT16,		VectorType::V3),		"u16vec3"),
+			std::make_pair(std::make_pair(DataType::UINT16,		VectorType::V4),		"u16vec4"),
+			std::make_pair(std::make_pair(DataType::UINT16,		VectorType::A5),		"uint16_t"),
+			std::make_pair(std::make_pair(DataType::INT8,		VectorType::SCALAR),	"int8_t"),
+			std::make_pair(std::make_pair(DataType::INT8,		VectorType::V2),		"i8vec2"),
+			std::make_pair(std::make_pair(DataType::INT8,		VectorType::V3),		"i8vec3"),
+			std::make_pair(std::make_pair(DataType::INT8,		VectorType::V4),		"i8vec4"),
+			std::make_pair(std::make_pair(DataType::INT8,		VectorType::A5),		"int8_t"),
+			std::make_pair(std::make_pair(DataType::UINT8,		VectorType::SCALAR),	"uint8_t"),
+			std::make_pair(std::make_pair(DataType::UINT8,		VectorType::V2),		"u8vec2"),
+			std::make_pair(std::make_pair(DataType::UINT8,		VectorType::V3),		"u8vec3"),
+			std::make_pair(std::make_pair(DataType::UINT8,		VectorType::V4),		"u8vec4"),
+			std::make_pair(std::make_pair(DataType::UINT8,		VectorType::A5),		"uint8_t"),
+			std::make_pair(std::make_pair(DataType::FLOAT32,	VectorType::SCALAR),	"float32_t"),
+			std::make_pair(std::make_pair(DataType::FLOAT32,	VectorType::V2),		"f32vec2"),
+			std::make_pair(std::make_pair(DataType::FLOAT32,	VectorType::V3),		"f32vec3"),
+			std::make_pair(std::make_pair(DataType::FLOAT32,	VectorType::V4),		"f32vec4"),
+			std::make_pair(std::make_pair(DataType::FLOAT32,	VectorType::A5),		"float32_t"),
+			std::make_pair(std::make_pair(DataType::FLOAT64,	VectorType::SCALAR),	"float64_t"),
+			std::make_pair(std::make_pair(DataType::FLOAT64,	VectorType::V2),		"f64vec2"),
+			std::make_pair(std::make_pair(DataType::FLOAT64,	VectorType::V3),		"f64vec3"),
+			std::make_pair(std::make_pair(DataType::FLOAT64,	VectorType::V4),		"f64vec4"),
+			std::make_pair(std::make_pair(DataType::FLOAT64,	VectorType::A5),		"float64_t"),
+			std::make_pair(std::make_pair(DataType::FLOAT16,	VectorType::SCALAR),	"float16_t"),
+			std::make_pair(std::make_pair(DataType::FLOAT16,	VectorType::V2),		"f16vec2"),
+			std::make_pair(std::make_pair(DataType::FLOAT16,	VectorType::V3),		"f16vec3"),
+			std::make_pair(std::make_pair(DataType::FLOAT16,	VectorType::V4),		"f16vec4"),
+			std::make_pair(std::make_pair(DataType::FLOAT16,	VectorType::A5),		"float16_t"),
+		};
+
+		const auto key		= std::make_pair(dataType, vectorType);
+		const auto found	= map.find(key);
+
+		DE_ASSERT(found != end(map));
+
+		const auto baseType		= found->second;
+		const std::string decl	= baseType + " " + varName + ((vectorType == VectorType::A5) ? "[5]" : "") + ";";
+
+		return std::make_pair(std::string(), decl);
+	}
+	else if (dataType == DataType::STRUCT)
+	{
+		return std::make_pair(std::string("struct InputStruct { uint val1; float val2; };\n"), std::string("InputStruct val;"));
+	}
+	else if (samplersNeeded(dataType))
+	{
+		return std::make_pair(std::string(), std::string("float val;"));
+	}
+	else if (storageImageNeeded(dataType))
+	{
+		return std::make_pair(std::string(), std::string("int val;"));
+	}
+	else if (dataType == DataType::OP_NULL || dataType == DataType::OP_UNDEF)
+	{
+		return std::make_pair(std::string(), std::string("uint val;"));
+	}
+
+	// Unreachable.
+	DE_ASSERT(false);
+	return std::make_pair(std::string(), std::string());
+}
+
+class DataSpillTestCase : public vkt::TestCase
+{
+public:
+	struct TestParams
+	{
+		CallType	callType;
+		DataType	dataType;
+		VectorType	vectorType;
+	};
+
+							DataSpillTestCase		(tcu::TestContext& testCtx, const std::string& name, const std::string& description, const TestParams& testParams);
+	virtual					~DataSpillTestCase		(void) {}
+
+	virtual void			initPrograms			(vk::SourceCollections& programCollection) const;
+	virtual TestInstance*	createInstance			(Context& context) const;
+	virtual void			checkSupport			(Context& context) const;
+
+private:
+	TestParams				m_params;
+};
+
+class DataSpillTestInstance : public vkt::TestInstance
+{
+public:
+	using TestParams = DataSpillTestCase::TestParams;
+
+								DataSpillTestInstance	(Context& context, const TestParams& testParams);
+	virtual						~DataSpillTestInstance	(void) {}
+
+	virtual tcu::TestStatus		iterate					(void);
+
+private:
+	TestParams					m_params;
+};
+
+
+DataSpillTestCase::DataSpillTestCase (tcu::TestContext& testCtx, const std::string& name, const std::string& description, const TestParams& testParams)
+	: vkt::TestCase	(testCtx, name, description)
+	, m_params		(testParams)
+{
+	switch (m_params.dataType)
+	{
+	case DataType::STRUCT:
+	case DataType::IMAGE:
+	case DataType::SAMPLER:
+	case DataType::SAMPLED_IMAGE:
+	case DataType::PTR_IMAGE:
+	case DataType::PTR_SAMPLER:
+	case DataType::PTR_SAMPLED_IMAGE:
+	case DataType::PTR_TEXEL:
+	case DataType::OP_NULL:
+	case DataType::OP_UNDEF:
+		DE_ASSERT(m_params.vectorType == VectorType::SCALAR);
+		break;
+	default:
+		break;
+	}
+
+	// The code assumes at most one of these is needed.
+	DE_ASSERT(!(samplersNeeded(m_params.dataType) && storageImageNeeded(m_params.dataType)));
+}
+
+TestInstance* DataSpillTestCase::createInstance (Context& context) const
+{
+	return new DataSpillTestInstance(context, m_params);
+}
+
+DataSpillTestInstance::DataSpillTestInstance (Context& context, const TestParams& testParams)
+	: vkt::TestInstance	(context)
+	, m_params			(testParams)
+{
+}
+
+// General checks for all tests.
+void commonCheckSupport (Context& context)
+{
+	context.requireDeviceFunctionality("VK_KHR_acceleration_structure");
+	context.requireDeviceFunctionality("VK_KHR_ray_tracing_pipeline");
+
+	const auto& rtFeatures = context.getRayTracingPipelineFeatures();
+	if (!rtFeatures.rayTracingPipeline)
+		TCU_THROW(NotSupportedError, "Ray Tracing pipelines not supported");
+
+	const auto& asFeatures = context.getAccelerationStructureFeatures();
+	if (!asFeatures.accelerationStructure)
+		TCU_FAIL("VK_KHR_acceleration_structure supported without accelerationStructure support");
+
+}
+
+void DataSpillTestCase::checkSupport (Context& context) const
+{
+	// General checks first.
+	commonCheckSupport(context);
+
+	const auto& features			= context.getDeviceFeatures();
+	const auto& featuresStorage16	= context.get16BitStorageFeatures();
+	const auto& featuresF16I8		= context.getShaderFloat16Int8Features();
+	const auto& featuresStorage8	= context.get8BitStorageFeatures();
+
+	if (m_params.dataType == DataType::INT64 || m_params.dataType == DataType::UINT64)
+	{
+		if (!features.shaderInt64)
+			TCU_THROW(NotSupportedError, "64-bit integers not supported");
+	}
+	else if (m_params.dataType == DataType::INT16 || m_params.dataType == DataType::UINT16)
+	{
+		context.requireDeviceFunctionality("VK_KHR_16bit_storage");
+
+		if (!features.shaderInt16)
+			TCU_THROW(NotSupportedError, "16-bit integers not supported");
+
+		if (!featuresStorage16.storageBuffer16BitAccess)
+			TCU_THROW(NotSupportedError, "16-bit storage buffer access not supported");
+	}
+	else if (m_params.dataType == DataType::INT8 || m_params.dataType == DataType::UINT8)
+	{
+		context.requireDeviceFunctionality("VK_KHR_shader_float16_int8");
+		context.requireDeviceFunctionality("VK_KHR_8bit_storage");
+
+		if (!featuresF16I8.shaderInt8)
+			TCU_THROW(NotSupportedError, "8-bit integers not supported");
+
+		if (!featuresStorage8.storageBuffer8BitAccess)
+			TCU_THROW(NotSupportedError, "8-bit storage buffer access not supported");
+	}
+	else if (m_params.dataType == DataType::FLOAT64)
+	{
+		if (!features.shaderFloat64)
+			TCU_THROW(NotSupportedError, "64-bit floats not supported");
+	}
+	else if (m_params.dataType == DataType::FLOAT16)
+	{
+		context.requireDeviceFunctionality("VK_KHR_shader_float16_int8");
+		context.requireDeviceFunctionality("VK_KHR_16bit_storage");
+
+		if (!featuresF16I8.shaderFloat16)
+			TCU_THROW(NotSupportedError, "16-bit floats not supported");
+
+		if (!featuresStorage16.storageBuffer16BitAccess)
+			TCU_THROW(NotSupportedError, "16-bit storage buffer access not supported");
+	}
+	else if (samplersNeeded(m_params.dataType))
+	{
+		context.requireDeviceFunctionality("VK_EXT_descriptor_indexing");
+		const auto indexingFeatures = context.getDescriptorIndexingFeatures();
+		if (!indexingFeatures.shaderSampledImageArrayNonUniformIndexing)
+			TCU_THROW(NotSupportedError, "No support for non-uniform sampled image arrays");
+	}
+}
+
+void DataSpillTestCase::initPrograms (vk::SourceCollections& programCollection) const
+{
+	const vk::ShaderBuildOptions	buildOptions	(programCollection.usedVulkanVersion, vk::SPIRV_VERSION_1_4, 0u, true);
+	const vk::SpirVAsmBuildOptions	spvBuildOptions	(programCollection.usedVulkanVersion, vk::SPIRV_VERSION_1_4, true);
+
+	std::ostringstream spvTemplateStream;
+
+	// This SPIR-V template will be used to generate shaders for different
+	// stages (raygen, callable, etc). The basic mechanism uses 3 SSBOs: one
+	// used strictly as an input, one to write the check result, and one to
+	// verify the shader call has taken place. The latter two SSBOs contain just
+	// a single uint, but the input SSBO typically contains other type of data
+	// that will be filled from the test instance with predetermined values. The
+	// shader will expect this data to have specific values that can be combined
+	// some way to give an expected result (e.g. by adding the 4 components if
+	// it's a vec4). This result will be used in the shader call to make sure
+	// input values are read *before* the call. After the shader call has taken
+	// place, the shader will attempt to read the input buffer again and verify
+	// the value is still correct and matches the previous one. If the result
+	// matches, it will write a confirmation value in the check buffer. In the
+	// mean time, the callee will write a confirmation value in the callee
+	// buffer to verify the shader call took place.
+	//
+	// Some test variants use samplers, images or sampled images. These need
+	// additional bindings of different types and the interesting value is
+	// typically placed in the image instead of the input buffer, while the
+	// input buffer is used for sampling coordinates instead.
+	//
+	// Some important SPIR-V template variables:
+	//
+	// - INPUT_BUFFER_VALUE_TYPE will contain the type of input buffer data.
+	// - CALC_ZERO_FOR_CALLABLE is expected to contain instructions that will
+	//   calculate a value of zero to be used in the shader call instruction.
+	//   This value should be derived from the input data.
+	// - CALL_STATEMENTS will contain the shader call instructions.
+	// - CALC_EQUAL_STATEMENT is expected to contain instructions that will
+	//   set %equal to true as a %bool if the before- and after- data match.
+	//
+	// - %input_val_ptr contains the pointer to the input value.
+	// - %input_val_before contains the value read before the call.
+	// - %input_val_after contains the value read after the call.
+
+	spvTemplateStream
+		<< "                                  OpCapability RayTracingKHR\n"
+		<< "${EXTRA_CAPABILITIES}"
+		<< "                                  OpExtension \"SPV_KHR_ray_tracing\"\n"
+		<< "${EXTRA_EXTENSIONS}"
+		<< "                                  OpMemoryModel Logical GLSL450\n"
+		<< "                                  OpEntryPoint ${ENTRY_POINT} %main \"main\" %topLevelAS %calleeBuffer %outputBuffer %inputBuffer${MAIN_INTERFACE_EXTRAS}\n"
+		<< "${INTERFACE_DECORATIONS}"
+		<< "                                  OpMemberDecorate %InputBlock 0 Offset 0\n"
+		<< "                                  OpDecorate %InputBlock Block\n"
+		<< "                                  OpDecorate %inputBuffer DescriptorSet 0\n"
+		<< "                                  OpDecorate %inputBuffer Binding 3\n"
+		<< "                                  OpMemberDecorate %OutputBlock 0 Offset 0\n"
+		<< "                                  OpDecorate %OutputBlock Block\n"
+		<< "                                  OpDecorate %outputBuffer DescriptorSet 0\n"
+		<< "                                  OpDecorate %outputBuffer Binding 2\n"
+		<< "                                  OpMemberDecorate %CalleeBlock 0 Offset 0\n"
+		<< "                                  OpDecorate %CalleeBlock Block\n"
+		<< "                                  OpDecorate %calleeBuffer DescriptorSet 0\n"
+		<< "                                  OpDecorate %calleeBuffer Binding 1\n"
+		<< "                                  OpDecorate %topLevelAS DescriptorSet 0\n"
+		<< "                                  OpDecorate %topLevelAS Binding 0\n"
+		<< "${EXTRA_BINDINGS}"
+		<< "                          %void = OpTypeVoid\n"
+		<< "                     %void_func = OpTypeFunction %void\n"
+		<< "                           %int = OpTypeInt 32 1\n"
+		<< "                          %uint = OpTypeInt 32 0\n"
+		<< "                         %int_0 = OpConstant %int 0\n"
+		<< "                        %uint_0 = OpConstant %uint 0\n"
+		<< "                        %uint_1 = OpConstant %uint 1\n"
+		<< "                        %uint_2 = OpConstant %uint 2\n"
+		<< "                        %uint_3 = OpConstant %uint 3\n"
+		<< "                        %uint_4 = OpConstant %uint 4\n"
+		<< "                        %uint_5 = OpConstant %uint 5\n"
+		<< "                      %uint_255 = OpConstant %uint 255\n"
+		<< "                          %bool = OpTypeBool\n"
+		<< "                         %float = OpTypeFloat 32\n"
+		<< "                       %float_0 = OpConstant %float 0\n"
+		<< "                       %float_1 = OpConstant %float 1\n"
+		<< "                       %float_9 = OpConstant %float 9\n"
+		<< "                     %float_0_5 = OpConstant %float 0.5\n"
+		<< "                      %float_n1 = OpConstant %float -1\n"
+		<< "                       %v3float = OpTypeVector %float 3\n"
+		<< "                  %origin_const = OpConstantComposite %v3float %float_0_5 %float_0_5 %float_0\n"
+		<< "               %direction_const = OpConstantComposite %v3float %float_0 %float_0 %float_n1\n"
+		<< "${EXTRA_TYPES_AND_CONSTANTS}"
+		<< "                 %data_func_ptr = OpTypePointer Function ${INPUT_BUFFER_VALUE_TYPE}\n"
+		<< "${INTERFACE_TYPES_AND_VARIABLES}"
+		<< "                    %InputBlock = OpTypeStruct ${INPUT_BUFFER_VALUE_TYPE}\n"
+		<< " %_ptr_StorageBuffer_InputBlock = OpTypePointer StorageBuffer %InputBlock\n"
+		<< "                   %inputBuffer = OpVariable %_ptr_StorageBuffer_InputBlock StorageBuffer\n"
+		<< "        %data_storagebuffer_ptr = OpTypePointer StorageBuffer ${INPUT_BUFFER_VALUE_TYPE}\n"
+		<< "                   %OutputBlock = OpTypeStruct %uint\n"
+		<< "%_ptr_StorageBuffer_OutputBlock = OpTypePointer StorageBuffer %OutputBlock\n"
+		<< "                  %outputBuffer = OpVariable %_ptr_StorageBuffer_OutputBlock StorageBuffer\n"
+		<< "       %_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint\n"
+		<< "                   %CalleeBlock = OpTypeStruct %uint\n"
+		<< "%_ptr_StorageBuffer_CalleeBlock = OpTypePointer StorageBuffer %CalleeBlock\n"
+		<< "                  %calleeBuffer = OpVariable %_ptr_StorageBuffer_CalleeBlock StorageBuffer\n"
+		<< "                       %as_type = OpTypeAccelerationStructureKHR\n"
+		<< "        %as_uniformconstant_ptr = OpTypePointer UniformConstant %as_type\n"
+		<< "                    %topLevelAS = OpVariable %as_uniformconstant_ptr UniformConstant\n"
+		<< "${EXTRA_BINDING_VARIABLES}"
+		<< "                          %main = OpFunction %void None %void_func\n"
+		<< "                    %main_label = OpLabel\n"
+		<< "${EXTRA_FUNCTION_VARIABLES}"
+		<< "                 %input_val_ptr = OpAccessChain %data_storagebuffer_ptr %inputBuffer %int_0\n"
+		<< "                %output_val_ptr = OpAccessChain %_ptr_StorageBuffer_uint %outputBuffer %int_0\n"
+		// Note we use Volatile to load the input buffer value before and after the call statements.
+		<< "              %input_val_before = OpLoad ${INPUT_BUFFER_VALUE_TYPE} %input_val_ptr Volatile\n"
+		<< "${CALC_ZERO_FOR_CALLABLE}"
+		<< "${CALL_STATEMENTS}"
+		<< "               %input_val_after = OpLoad ${INPUT_BUFFER_VALUE_TYPE} %input_val_ptr Volatile\n"
+		<< "${CALC_EQUAL_STATEMENT}"
+		<< "                    %output_val = OpSelect %uint %equal %uint_1 %uint_0\n"
+		<< "                                  OpStore %output_val_ptr %output_val\n"
+		<< "                                  OpReturn\n"
+		<< "                                  OpFunctionEnd\n"
+		;
+
+	const tcu::StringTemplate spvTemplate (spvTemplateStream.str());
+
+	std::map<std::string, std::string>	subs;
+	std::string							componentTypeName;
+	std::string							opEqual;
+	const int							numComponents		= static_cast<int>(m_params.vectorType);
+	const auto							isArray				= (numComponents > static_cast<int>(VectorType::V4));
+	const auto							numComponentsStr	= de::toString(numComponents);
+
+	subs["EXTRA_CAPABILITIES"]			= "";
+	subs["EXTRA_EXTENSIONS"]			= "";
+	subs["EXTRA_TYPES_AND_CONSTANTS"]	= "";
+	subs["EXTRA_FUNCTION_VARIABLES"]	= "";
+	subs["EXTRA_BINDINGS"]				= "";
+	subs["EXTRA_BINDING_VARIABLES"]		= "";
+	subs["EXTRA_FUNCTIONS"]				= "";
+
+	// Take into account some of these substitutions will be updated after the if-block.
+
+	if (m_params.dataType == DataType::INT32)
+	{
+		componentTypeName = "int";
+
+		subs["INPUT_BUFFER_VALUE_TYPE"]		=	"%int";
+		subs["EXTRA_TYPES_AND_CONSTANTS"]	+=	"                        %int_37 = OpConstant %int 37\n";
+		subs["CALC_ZERO_FOR_CALLABLE"]		=	"                      %zero_int = OpISub %int %input_val_before %int_37\n"
+												"             %zero_for_callable = OpBitcast %uint %zero_int\n";
+	}
+	else if (m_params.dataType == DataType::UINT32)
+	{
+		componentTypeName = "uint";
+
+		subs["INPUT_BUFFER_VALUE_TYPE"]		=	"%uint";
+		subs["EXTRA_TYPES_AND_CONSTANTS"]	+=	"                       %uint_37 = OpConstant %uint 37\n";
+		subs["CALC_ZERO_FOR_CALLABLE"]		=	"             %zero_for_callable = OpISub %uint %input_val_before %uint_37\n";
+	}
+	else if (m_params.dataType == DataType::INT64)
+	{
+		componentTypeName = "long";
+
+		subs["EXTRA_CAPABILITIES"]			+=	"                                  OpCapability Int64\n";
+		subs["INPUT_BUFFER_VALUE_TYPE"]		=	"%long";
+		subs["EXTRA_TYPES_AND_CONSTANTS"]	+=	"                          %long = OpTypeInt 64 1\n"
+												"                       %long_37 = OpConstant %long 37\n";
+		subs["CALC_ZERO_FOR_CALLABLE"]		=	"                     %zero_long = OpISub %long %input_val_before %long_37\n"
+												"             %zero_for_callable = OpSConvert %uint %zero_long\n";
+	}
+	else if (m_params.dataType == DataType::UINT64)
+	{
+		componentTypeName = "ulong";
+
+		subs["EXTRA_CAPABILITIES"]			+=	"                                  OpCapability Int64\n";
+		subs["INPUT_BUFFER_VALUE_TYPE"]		=	"%ulong";
+		subs["EXTRA_TYPES_AND_CONSTANTS"]	+=	"                         %ulong = OpTypeInt 64 0\n"
+												"                      %ulong_37 = OpConstant %ulong 37\n";
+		subs["CALC_ZERO_FOR_CALLABLE"]		=	"                    %zero_ulong = OpISub %ulong %input_val_before %ulong_37\n"
+												"             %zero_for_callable = OpUConvert %uint %zero_ulong\n";
+	}
+	else if (m_params.dataType == DataType::INT16)
+	{
+		componentTypeName = "short";
+
+		subs["EXTRA_CAPABILITIES"]			+=	"                                  OpCapability Int16\n"
+												"                                  OpCapability StorageBuffer16BitAccess\n";
+		subs["EXTRA_EXTENSIONS"]			+=	"                                  OpExtension \"SPV_KHR_16bit_storage\"\n";
+		subs["INPUT_BUFFER_VALUE_TYPE"]		=	"%short";
+		subs["EXTRA_TYPES_AND_CONSTANTS"]	+=	"                         %short = OpTypeInt 16 1\n"
+												"                      %short_37 = OpConstant %short 37\n";
+		subs["CALC_ZERO_FOR_CALLABLE"]		=	"                    %zero_short = OpISub %short %input_val_before %short_37\n"
+												"             %zero_for_callable = OpSConvert %uint %zero_short\n";
+	}
+	else if (m_params.dataType == DataType::UINT16)
+	{
+		componentTypeName = "ushort";
+
+		subs["EXTRA_CAPABILITIES"]			+=	"                                  OpCapability Int16\n"
+												"                                  OpCapability StorageBuffer16BitAccess\n";
+		subs["EXTRA_EXTENSIONS"]			+=	"                                  OpExtension \"SPV_KHR_16bit_storage\"\n";
+		subs["INPUT_BUFFER_VALUE_TYPE"]		=	"%ushort";
+		subs["EXTRA_TYPES_AND_CONSTANTS"]	+=	"                        %ushort = OpTypeInt 16 0\n"
+												"                     %ushort_37 = OpConstant %ushort 37\n";
+		subs["CALC_ZERO_FOR_CALLABLE"]		=	"                   %zero_ushort = OpISub %ushort %input_val_before %ushort_37\n"
+												"             %zero_for_callable = OpUConvert %uint %zero_ushort\n";
+	}
+	else if (m_params.dataType == DataType::INT8)
+	{
+		componentTypeName = "char";
+
+		subs["EXTRA_CAPABILITIES"]			+=	"                                  OpCapability Int8\n"
+												"                                  OpCapability StorageBuffer8BitAccess\n";
+		subs["EXTRA_EXTENSIONS"]			+=	"                                  OpExtension \"SPV_KHR_8bit_storage\"\n";
+		subs["INPUT_BUFFER_VALUE_TYPE"]		=	"%char";
+		subs["EXTRA_TYPES_AND_CONSTANTS"]	+=	"                          %char = OpTypeInt 8 1\n"
+												"                       %char_37 = OpConstant %char 37\n";
+		subs["CALC_ZERO_FOR_CALLABLE"]		=	"                     %zero_char = OpISub %char %input_val_before %char_37\n"
+												"             %zero_for_callable = OpSConvert %uint %zero_char\n";
+	}
+	else if (m_params.dataType == DataType::UINT8)
+	{
+		componentTypeName = "uchar";
+
+		subs["EXTRA_CAPABILITIES"]			+=	"                                  OpCapability Int8\n"
+												"                                  OpCapability StorageBuffer8BitAccess\n";
+		subs["EXTRA_EXTENSIONS"]			+=	"                                  OpExtension \"SPV_KHR_8bit_storage\"\n";
+		subs["INPUT_BUFFER_VALUE_TYPE"]		=	"%uchar";
+		subs["EXTRA_TYPES_AND_CONSTANTS"]	+=	"                         %uchar = OpTypeInt 8 0\n"
+												"                      %uchar_37 = OpConstant %uchar 37\n";
+		subs["CALC_ZERO_FOR_CALLABLE"]		=	"                    %zero_uchar = OpISub %uchar %input_val_before %uchar_37\n"
+												"             %zero_for_callable = OpUConvert %uint %zero_uchar\n";
+	}
+	else if (m_params.dataType == DataType::FLOAT32)
+	{
+		componentTypeName = "float";
+
+		subs["INPUT_BUFFER_VALUE_TYPE"]		=	"%float";
+		subs["EXTRA_TYPES_AND_CONSTANTS"]	+=	"                      %float_37 = OpConstant %float 37\n";
+		subs["CALC_ZERO_FOR_CALLABLE"]		=	"                    %zero_float = OpFSub %float %input_val_before %float_37\n"
+												"             %zero_for_callable = OpConvertFToU %uint %zero_float\n";
+	}
+	else if (m_params.dataType == DataType::FLOAT64)
+	{
+		componentTypeName = "double";
+
+		subs["EXTRA_CAPABILITIES"]			+=	"                                  OpCapability Float64\n";
+		subs["INPUT_BUFFER_VALUE_TYPE"]		=	"%double";
+		subs["EXTRA_TYPES_AND_CONSTANTS"]	+=	"                        %double = OpTypeFloat 64\n"
+												"                     %double_37 = OpConstant %double 37\n";
+		subs["CALC_ZERO_FOR_CALLABLE"]		=	"                   %zero_double = OpFSub %double %input_val_before %double_37\n"
+												"             %zero_for_callable = OpConvertFToU %uint %zero_double\n";
+	}
+	else if (m_params.dataType == DataType::FLOAT16)
+	{
+		componentTypeName = "half";
+
+		subs["EXTRA_CAPABILITIES"]			+=	"                                  OpCapability Float16\n"
+												"                                  OpCapability StorageBuffer16BitAccess\n";
+		subs["EXTRA_EXTENSIONS"]			+=	"                                  OpExtension \"SPV_KHR_16bit_storage\"\n";
+		subs["INPUT_BUFFER_VALUE_TYPE"]		=	"%half";
+		subs["EXTRA_TYPES_AND_CONSTANTS"]	+=	"                          %half = OpTypeFloat 16\n"
+												"                       %half_37 = OpConstant %half 37\n";
+		subs["CALC_ZERO_FOR_CALLABLE"]		=	"                     %zero_half = OpFSub %half %input_val_before %half_37\n"
+												"             %zero_for_callable = OpConvertFToU %uint %zero_half\n";
+	}
+	else if (m_params.dataType == DataType::STRUCT)
+	{
+		componentTypeName = "InputStruct";
+
+		subs["INPUT_BUFFER_VALUE_TYPE"]		=	"%InputStruct";
+		subs["EXTRA_TYPES_AND_CONSTANTS"]	+=	"                   %InputStruct = OpTypeStruct %uint %float\n"
+												"                      %float_37 = OpConstant %float 37\n"
+												"            %uint_part_ptr_type = OpTypePointer StorageBuffer %uint\n"
+												"           %float_part_ptr_type = OpTypePointer StorageBuffer %float\n"
+												"       %uint_part_func_ptr_type = OpTypePointer Function %uint\n"
+												"      %float_part_func_ptr_type = OpTypePointer Function %float\n"
+												"    %input_struct_func_ptr_type = OpTypePointer Function %InputStruct\n"
+												;
+		subs["INTERFACE_DECORATIONS"]		=	"                                  OpMemberDecorate %InputStruct 0 Offset 0\n"
+												"                                  OpMemberDecorate %InputStruct 1 Offset 4\n";
+
+		// Sum struct members, then substract constant and convert to uint.
+		subs["CALC_ZERO_FOR_CALLABLE"]		=	"                 %uint_part_ptr = OpAccessChain %uint_part_ptr_type %input_val_ptr %uint_0\n"
+												"                %float_part_ptr = OpAccessChain %float_part_ptr_type %input_val_ptr %uint_1\n"
+												"                     %uint_part = OpLoad %uint %uint_part_ptr\n"
+												"                    %float_part = OpLoad %float %float_part_ptr\n"
+												"                 %uint_as_float = OpConvertUToF %float %uint_part\n"
+												"                    %member_sum = OpFAdd %float %float_part %uint_as_float\n"
+												"                    %zero_float = OpFSub %float %member_sum %float_37\n"
+												"             %zero_for_callable = OpConvertFToU %uint %zero_float\n"
+												;
+	}
+	else if (samplersNeeded(m_params.dataType))
+	{
+		// These tests will use additional bindings as arrays of 2 elements:
+		// - 1 array of samplers.
+		// - 1 array of images.
+		// - 1 array of combined image samplers.
+		// Input values are typically used as texture coordinates (normally zeros)
+		// Pixels will contain the expected values instead of them being in the input buffer.
+
+		subs["INPUT_BUFFER_VALUE_TYPE"]		=	"%float";
+		subs["EXTRA_CAPABILITIES"]			+=	"                                  OpCapability SampledImageArrayNonUniformIndexing\n";
+		subs["EXTRA_EXTENSIONS"]			+=	"                                  OpExtension \"SPV_EXT_descriptor_indexing\"\n";
+		subs["MAIN_INTERFACE_EXTRAS"]		+=	" %sampledTexture %textureSampler %combinedImageSampler";
+		subs["EXTRA_BINDINGS"]				+=	"                                  OpDecorate %sampledTexture DescriptorSet 0\n"
+												"                                  OpDecorate %sampledTexture Binding 4\n"
+												"                                  OpDecorate %textureSampler DescriptorSet 0\n"
+												"                                  OpDecorate %textureSampler Binding 5\n"
+												"                                  OpDecorate %combinedImageSampler DescriptorSet 0\n"
+												"                                  OpDecorate %combinedImageSampler Binding 6\n";
+		subs["EXTRA_TYPES_AND_CONSTANTS"]	+=	"                       %uint_37 = OpConstant %uint 37\n"
+												"                        %v4uint = OpTypeVector %uint 4\n"
+												"                       %v2float = OpTypeVector %float 2\n"
+												"                    %image_type = OpTypeImage %uint 2D 0 0 0 1 Unknown\n"
+												"              %image_array_type = OpTypeArray %image_type %uint_2\n"
+												"  %image_array_type_uniform_ptr = OpTypePointer UniformConstant %image_array_type\n"
+												"        %image_type_uniform_ptr = OpTypePointer UniformConstant %image_type\n"
+												"                  %sampler_type = OpTypeSampler\n"
+												"            %sampler_array_type = OpTypeArray %sampler_type %uint_2\n"
+												"%sampler_array_type_uniform_ptr = OpTypePointer UniformConstant %sampler_array_type\n"
+												"      %sampler_type_uniform_ptr = OpTypePointer UniformConstant %sampler_type\n"
+												"            %sampled_image_type = OpTypeSampledImage %image_type\n"
+												"      %sampled_image_array_type = OpTypeArray %sampled_image_type %uint_2\n"
+												"%sampled_image_array_type_uniform_ptr = OpTypePointer UniformConstant %sampled_image_array_type\n"
+												"%sampled_image_type_uniform_ptr = OpTypePointer UniformConstant %sampled_image_type\n"
+												;
+		subs["EXTRA_BINDING_VARIABLES"]		+=	"                %sampledTexture = OpVariable %image_array_type_uniform_ptr UniformConstant\n"
+												"                %textureSampler = OpVariable %sampler_array_type_uniform_ptr UniformConstant\n"
+												"          %combinedImageSampler = OpVariable %sampled_image_array_type_uniform_ptr UniformConstant\n"
+												;
+
+		if (m_params.dataType == DataType::IMAGE || m_params.dataType == DataType::SAMPLER)
+		{
+			// Use the first sampler and sample from the first image.
+			subs["CALC_ZERO_FOR_CALLABLE"]	+=	"%image_0_ptr = OpAccessChain %image_type_uniform_ptr %sampledTexture %uint_0\n"
+												"%sampler_0_ptr = OpAccessChain %sampler_type_uniform_ptr %textureSampler %uint_0\n"
+												"%sampler_0 = OpLoad %sampler_type %sampler_0_ptr\n"
+												"%image_0 = OpLoad %image_type %image_0_ptr\n"
+												"%sampled_image_0 = OpSampledImage %sampled_image_type %image_0 %sampler_0\n"
+												"%texture_coords_0 = OpCompositeConstruct %v2float %input_val_before %input_val_before\n"
+												"%pixel_vec_0 = OpImageSampleExplicitLod %v4uint %sampled_image_0 %texture_coords_0 Lod|ZeroExtend %float_0\n"
+												"%pixel_0 = OpCompositeExtract %uint %pixel_vec_0 0\n"
+												"%zero_for_callable = OpISub %uint %pixel_0 %uint_37\n"
+												;
+		}
+		else if (m_params.dataType == DataType::SAMPLED_IMAGE)
+		{
+			// Use the first combined image sampler.
+			subs["CALC_ZERO_FOR_CALLABLE"]	+=	"%sampled_image_0_ptr = OpAccessChain %sampled_image_type_uniform_ptr %combinedImageSampler %uint_0\n"
+												"%sampled_image_0 = OpLoad %sampled_image_type %sampled_image_0_ptr\n"
+												"%texture_coords_0 = OpCompositeConstruct %v2float %input_val_before %input_val_before\n"
+												"%pixel_vec_0 = OpImageSampleExplicitLod %v4uint %sampled_image_0 %texture_coords_0 Lod|ZeroExtend %float_0\n"
+												"%pixel_0 = OpCompositeExtract %uint %pixel_vec_0 0\n"
+												"%zero_for_callable = OpISub %uint %pixel_0 %uint_37\n"
+												;
+		}
+		else if (m_params.dataType == DataType::PTR_IMAGE)
+		{
+			// We attempt to create the second pointer before the call.
+			subs["CALC_ZERO_FOR_CALLABLE"]		+=	"%image_0_ptr = OpAccessChain %image_type_uniform_ptr %sampledTexture %uint_0\n"
+													"%image_1_ptr = OpAccessChain %image_type_uniform_ptr %sampledTexture %uint_1\n"
+													"%image_0 = OpLoad %image_type %image_0_ptr\n"
+													"%sampler_0_ptr = OpAccessChain %sampler_type_uniform_ptr %textureSampler %uint_0\n"
+													"%sampler_0 = OpLoad %sampler_type %sampler_0_ptr\n"
+													"%sampled_image_0 = OpSampledImage %sampled_image_type %image_0 %sampler_0\n"
+													"%texture_coords_0 = OpCompositeConstruct %v2float %input_val_before %input_val_before\n"
+													"%pixel_vec_0 = OpImageSampleExplicitLod %v4uint %sampled_image_0 %texture_coords_0 Lod|ZeroExtend %float_0\n"
+													"%pixel_0 = OpCompositeExtract %uint %pixel_vec_0 0\n"
+													"%zero_for_callable = OpISub %uint %pixel_0 %uint_37\n"
+													;
+		}
+		else if (m_params.dataType == DataType::PTR_SAMPLER)
+		{
+			// We attempt to create the second pointer before the call.
+			subs["CALC_ZERO_FOR_CALLABLE"]		+=	"%sampler_0_ptr = OpAccessChain %sampler_type_uniform_ptr %textureSampler %uint_0\n"
+													"%sampler_1_ptr = OpAccessChain %sampler_type_uniform_ptr %textureSampler %uint_1\n"
+													"%sampler_0 = OpLoad %sampler_type %sampler_0_ptr\n"
+													"%image_0_ptr = OpAccessChain %image_type_uniform_ptr %sampledTexture %uint_0\n"
+													"%image_0 = OpLoad %image_type %image_0_ptr\n"
+													"%sampled_image_0 = OpSampledImage %sampled_image_type %image_0 %sampler_0\n"
+													"%texture_coords_0 = OpCompositeConstruct %v2float %input_val_before %input_val_before\n"
+													"%pixel_vec_0 = OpImageSampleExplicitLod %v4uint %sampled_image_0 %texture_coords_0 Lod|ZeroExtend %float_0\n"
+													"%pixel_0 = OpCompositeExtract %uint %pixel_vec_0 0\n"
+													"%zero_for_callable = OpISub %uint %pixel_0 %uint_37\n"
+													;
+		}
+		else if (m_params.dataType == DataType::PTR_SAMPLED_IMAGE)
+		{
+			// We attempt to create the second pointer before the call.
+			subs["CALC_ZERO_FOR_CALLABLE"]		+=	"%sampled_image_0_ptr = OpAccessChain %sampled_image_type_uniform_ptr %combinedImageSampler %uint_0\n"
+													"%sampled_image_1_ptr = OpAccessChain %sampled_image_type_uniform_ptr %combinedImageSampler %uint_1\n"
+													"%sampled_image_0 = OpLoad %sampled_image_type %sampled_image_0_ptr\n"
+													"%texture_coords_0 = OpCompositeConstruct %v2float %input_val_before %input_val_before\n"
+													"%pixel_vec_0 = OpImageSampleExplicitLod %v4uint %sampled_image_0 %texture_coords_0 Lod|ZeroExtend %float_0\n"
+													"%pixel_0 = OpCompositeExtract %uint %pixel_vec_0 0\n"
+													"%zero_for_callable = OpISub %uint %pixel_0 %uint_37\n"
+													;
+		}
+		else
+		{
+			DE_ASSERT(false);
+		}
+	}
+	else if (storageImageNeeded(m_params.dataType))
+	{
+		subs["INPUT_BUFFER_VALUE_TYPE"]		=	"%int";
+		subs["MAIN_INTERFACE_EXTRAS"]		+=	" %storageImage";
+		subs["EXTRA_BINDINGS"]				+=	"                                  OpDecorate %storageImage DescriptorSet 0\n"
+												"                                  OpDecorate %storageImage Binding 4\n"
+												;
+		subs["EXTRA_TYPES_AND_CONSTANTS"]	+=	"                       %uint_37 = OpConstant %uint 37\n"
+												"                         %v2int = OpTypeVector %int 2\n"
+												"                    %image_type = OpTypeImage %uint 2D 0 0 0 2 R32ui\n"
+												"        %image_type_uniform_ptr = OpTypePointer UniformConstant %image_type\n"
+												"                  %uint_img_ptr = OpTypePointer Image %uint\n"
+												;
+		subs["EXTRA_BINDING_VARIABLES"]		+=	"                  %storageImage = OpVariable %image_type_uniform_ptr UniformConstant\n"
+												;
+
+		// Load value from the image, expecting it to be 37 and swapping it with 5.
+		subs["CALC_ZERO_FOR_CALLABLE"]	+=	"%coords = OpCompositeConstruct %v2int %input_val_before %input_val_before\n"
+											"%texel_ptr = OpImageTexelPointer %uint_img_ptr %storageImage %coords %uint_0\n"
+											"%texel_value = OpAtomicCompareExchange %uint %texel_ptr %uint_1 %uint_0 %uint_0 %uint_5 %uint_37\n"
+											"%zero_for_callable = OpISub %uint %texel_value %uint_37\n"
+											;
+	}
+	else if (m_params.dataType == DataType::OP_NULL)
+	{
+		subs["INPUT_BUFFER_VALUE_TYPE"]		=	"%uint";
+		subs["EXTRA_TYPES_AND_CONSTANTS"]	+=	"                       %uint_37 = OpConstant %uint 37\n"
+												"                 %constant_null = OpConstantNull %uint\n"
+												;
+
+		// Create a local copy of the null constant global object to work with it.
+		subs["CALC_ZERO_FOR_CALLABLE"]	+=	"%constant_null_copy = OpCopyObject %uint %constant_null\n"
+											"%is_37_before = OpIEqual %bool %input_val_before %uint_37\n"
+											"%zero_for_callable = OpSelect %uint %is_37_before %constant_null_copy %uint_5\n"
+											;
+	}
+	else if (m_params.dataType == DataType::OP_UNDEF)
+	{
+		subs["INPUT_BUFFER_VALUE_TYPE"]		=	"%uint";
+		subs["EXTRA_TYPES_AND_CONSTANTS"]	+=	"                       %uint_37 = OpConstant %uint 37\n"
+												;
+
+		// Extract an undef value and write it to the output buffer to make sure it's used before the call. The value will be overwritten later.
+		subs["CALC_ZERO_FOR_CALLABLE"]	+=	"%undef_var = OpUndef %uint\n"
+											"%undef_val_before = OpCopyObject %uint %undef_var\n"
+											"OpStore %output_val_ptr %undef_val_before Volatile\n"
+											"%zero_for_callable = OpISub %uint %uint_37 %input_val_before\n"
+											;
+	}
+	else
+	{
+		DE_ASSERT(false);
+	}
+
+	// Comparison statement for data before and after the call.
+	switch (m_params.dataType)
+	{
+	case DataType::INT32:
+	case DataType::UINT32:
+	case DataType::INT64:
+	case DataType::UINT64:
+	case DataType::INT16:
+	case DataType::UINT16:
+	case DataType::INT8:
+	case DataType::UINT8:
+		opEqual = "OpIEqual";
+		break;
+	case DataType::FLOAT32:
+	case DataType::FLOAT64:
+	case DataType::FLOAT16:
+		opEqual = "OpFOrdEqual";
+		break;
+	case DataType::STRUCT:
+	case DataType::IMAGE:
+	case DataType::SAMPLER:
+	case DataType::SAMPLED_IMAGE:
+	case DataType::PTR_IMAGE:
+	case DataType::PTR_SAMPLER:
+	case DataType::PTR_SAMPLED_IMAGE:
+	case DataType::PTR_TEXEL:
+	case DataType::OP_NULL:
+	case DataType::OP_UNDEF:
+		// These needs special code for the comparison.
+		opEqual = "INVALID";
+		break;
+	default:
+		DE_ASSERT(false);
+		break;
+	}
+
+	if (m_params.dataType == DataType::STRUCT)
+	{
+		// We need to store the before and after values in a variable in order to be able to access each member individually without accessing the StorageBuffer again.
+		subs["EXTRA_FUNCTION_VARIABLES"]	=	"         %input_val_func_before = OpVariable %input_struct_func_ptr_type Function\n"
+												"          %input_val_func_after = OpVariable %input_struct_func_ptr_type Function\n"
+												;
+		subs["CALC_EQUAL_STATEMENT"]		=	"                                  OpStore %input_val_func_before %input_val_before\n"
+												"                                  OpStore %input_val_func_after %input_val_after\n"
+												"     %uint_part_func_before_ptr = OpAccessChain %uint_part_func_ptr_type %input_val_func_before %uint_0\n"
+												"    %float_part_func_before_ptr = OpAccessChain %float_part_func_ptr_type %input_val_func_before %uint_1\n"
+												"      %uint_part_func_after_ptr = OpAccessChain %uint_part_func_ptr_type %input_val_func_after %uint_0\n"
+												"     %float_part_func_after_ptr = OpAccessChain %float_part_func_ptr_type %input_val_func_after %uint_1\n"
+												"              %uint_part_before = OpLoad %uint %uint_part_func_before_ptr\n"
+												"             %float_part_before = OpLoad %float %float_part_func_before_ptr\n"
+												"               %uint_part_after = OpLoad %uint %uint_part_func_after_ptr\n"
+												"              %float_part_after = OpLoad %float %float_part_func_after_ptr\n"
+												"                    %uint_equal = OpIEqual %bool %uint_part_before %uint_part_after\n"
+												"                   %float_equal = OpFOrdEqual %bool %float_part_before %float_part_after\n"
+												"                         %equal = OpLogicalAnd %bool %uint_equal %float_equal\n"
+												;
+	}
+	else if (m_params.dataType == DataType::IMAGE)
+	{
+		// Use the same image and the second sampler with different coordinates (actually the same).
+		subs["CALC_EQUAL_STATEMENT"]	+=	"%sampler_1_ptr = OpAccessChain %sampler_type_uniform_ptr %textureSampler %uint_1\n"
+											"%sampler_1 = OpLoad %sampler_type %sampler_1_ptr\n"
+											"%sampled_image_1 = OpSampledImage %sampled_image_type %image_0 %sampler_1\n"
+											"%texture_coords_1 = OpCompositeConstruct %v2float %input_val_after %input_val_after\n"
+											"%pixel_vec_1 = OpImageSampleExplicitLod %v4uint %sampled_image_1 %texture_coords_1 Lod|ZeroExtend %float_0\n"
+											"%pixel_1 = OpCompositeExtract %uint %pixel_vec_1 0\n"
+											"%equal = OpIEqual %bool %pixel_0 %pixel_1\n"
+											;
+	}
+	else if (m_params.dataType == DataType::SAMPLER)
+	{
+		// Use the same sampler and sample from the second image with different coordinates (but actually the same).
+		subs["CALC_EQUAL_STATEMENT"]	+=	"%image_1_ptr = OpAccessChain %image_type_uniform_ptr %sampledTexture %uint_1\n"
+											"%image_1 = OpLoad %image_type %image_1_ptr\n"
+											"%sampled_image_1 = OpSampledImage %sampled_image_type %image_1 %sampler_0\n"
+											"%texture_coords_1 = OpCompositeConstruct %v2float %input_val_after %input_val_after\n"
+											"%pixel_vec_1 = OpImageSampleExplicitLod %v4uint %sampled_image_1 %texture_coords_1 Lod|ZeroExtend %float_0\n"
+											"%pixel_1 = OpCompositeExtract %uint %pixel_vec_1 0\n"
+											"%equal = OpIEqual %bool %pixel_0 %pixel_1\n"
+											;
+	}
+	else if (m_params.dataType == DataType::SAMPLED_IMAGE)
+	{
+		// Reuse the same combined image sampler with different coordinates (actually the same).
+		subs["CALC_EQUAL_STATEMENT"]	+=	"%texture_coords_1 = OpCompositeConstruct %v2float %input_val_after %input_val_after\n"
+											"%pixel_vec_1 = OpImageSampleExplicitLod %v4uint %sampled_image_0 %texture_coords_1 Lod|ZeroExtend %float_0\n"
+											"%pixel_1 = OpCompositeExtract %uint %pixel_vec_1 0\n"
+											"%equal = OpIEqual %bool %pixel_0 %pixel_1\n"
+											;
+	}
+	else if (m_params.dataType == DataType::PTR_IMAGE)
+	{
+		// We attempt to use the second pointer only after the call.
+		subs["CALC_EQUAL_STATEMENT"]	+=	"%image_1 = OpLoad %image_type %image_1_ptr\n"
+											"%sampled_image_1 = OpSampledImage %sampled_image_type %image_1 %sampler_0\n"
+											"%texture_coords_1 = OpCompositeConstruct %v2float %input_val_after %input_val_after\n"
+											"%pixel_vec_1 = OpImageSampleExplicitLod %v4uint %sampled_image_1 %texture_coords_1 Lod|ZeroExtend %float_0\n"
+											"%pixel_1 = OpCompositeExtract %uint %pixel_vec_1 0\n"
+											"%equal = OpIEqual %bool %pixel_0 %pixel_1\n"
+											;
+
+	}
+	else if (m_params.dataType == DataType::PTR_SAMPLER)
+	{
+		// We attempt to use the second pointer only after the call.
+		subs["CALC_EQUAL_STATEMENT"]	+=	"%sampler_1 = OpLoad %sampler_type %sampler_1_ptr\n"
+											"%sampled_image_1 = OpSampledImage %sampled_image_type %image_0 %sampler_1\n"
+											"%texture_coords_1 = OpCompositeConstruct %v2float %input_val_after %input_val_after\n"
+											"%pixel_vec_1 = OpImageSampleExplicitLod %v4uint %sampled_image_1 %texture_coords_1 Lod|ZeroExtend %float_0\n"
+											"%pixel_1 = OpCompositeExtract %uint %pixel_vec_1 0\n"
+											"%equal = OpIEqual %bool %pixel_0 %pixel_1\n"
+											;
+	}
+	else if (m_params.dataType == DataType::PTR_SAMPLED_IMAGE)
+	{
+		// We attempt to use the second pointer only after the call.
+		subs["CALC_EQUAL_STATEMENT"]	+=	"%sampled_image_1 = OpLoad %sampled_image_type %sampled_image_1_ptr\n"
+											"%texture_coords_1 = OpCompositeConstruct %v2float %input_val_after %input_val_after\n"
+											"%pixel_vec_1 = OpImageSampleExplicitLod %v4uint %sampled_image_1 %texture_coords_1 Lod|ZeroExtend %float_0\n"
+											"%pixel_1 = OpCompositeExtract %uint %pixel_vec_1 0\n"
+											"%equal = OpIEqual %bool %pixel_0 %pixel_1\n"
+											;
+	}
+	else if (m_params.dataType == DataType::PTR_TEXEL)
+	{
+		// Check value 5 was stored properly.
+		subs["CALC_EQUAL_STATEMENT"]	+=	"%stored_val = OpAtomicLoad %uint %texel_ptr %uint_1 %uint_0\n"
+											"%equal = OpIEqual %bool %stored_val %uint_5\n"
+											;
+	}
+	else if (m_params.dataType == DataType::OP_NULL)
+	{
+		// Reuse the null constant after the call.
+		subs["CALC_EQUAL_STATEMENT"]	+=	"%is_37_after = OpIEqual %bool %input_val_after %uint_37\n"
+											"%writeback_val = OpSelect %uint %is_37_after %constant_null_copy %uint_5\n"
+											"OpStore %input_val_ptr %writeback_val Volatile\n"
+											"%readback_val = OpLoad %uint %input_val_ptr Volatile\n"
+											"%equal = OpIEqual %bool %readback_val %uint_0\n"
+											;
+	}
+	else if (m_params.dataType == DataType::OP_UNDEF)
+	{
+		// Extract another undef value and write it to the input buffer. It will not be checked later.
+		subs["CALC_EQUAL_STATEMENT"]	+=	"%undef_val_after = OpCopyObject %uint %undef_var\n"
+											"OpStore %input_val_ptr %undef_val_after Volatile\n"
+											"%equal = OpIEqual %bool %input_val_after %input_val_before\n"
+											;
+	}
+	else
+	{
+		subs["CALC_EQUAL_STATEMENT"]	+=	"                         %equal = " + opEqual + " %bool %input_val_before %input_val_after\n";
+	}
+
+	// Modifications for vectors and arrays.
+	if (numComponents > 1)
+	{
+		const std::string	vectorTypeName		= "v" + numComponentsStr + componentTypeName;
+		const std::string	opType				= (isArray ? "OpTypeArray" : "OpTypeVector");
+		const std::string	componentCountStr	= (isArray ? ("%uint_" + numComponentsStr) : numComponentsStr);
+
+		// Some extra types are needed.
+		if (!(m_params.dataType == DataType::FLOAT32 && m_params.vectorType == VectorType::V3))
+		{
+			// Note: v3float is already defined in the shader by default.
+			subs["EXTRA_TYPES_AND_CONSTANTS"] += "%" + vectorTypeName + " = " + opType + " %" + componentTypeName + " " + componentCountStr + "\n";
+		}
+		subs["EXTRA_TYPES_AND_CONSTANTS"]	+=	"%v" + numComponentsStr + "bool = " + opType + " %bool " + componentCountStr + "\n";
+		subs["EXTRA_TYPES_AND_CONSTANTS"]	+=	"%comp_ptr = OpTypePointer StorageBuffer %" + componentTypeName + "\n";
+
+		// The input value in the buffer has a different type.
+		subs["INPUT_BUFFER_VALUE_TYPE"]		=	"%" + vectorTypeName;
+
+		// Overwrite the way we calculate the zero used in the call.
+
+		// Proper operations for adding, substracting and converting components.
+		std::string opAdd;
+		std::string opSub;
+		std::string opConvert;
+
+		switch (m_params.dataType)
+		{
+		case DataType::INT32:
+		case DataType::UINT32:
+		case DataType::INT64:
+		case DataType::UINT64:
+		case DataType::INT16:
+		case DataType::UINT16:
+		case DataType::INT8:
+		case DataType::UINT8:
+			opAdd = "OpIAdd";
+			opSub = "OpISub";
+			break;
+		case DataType::FLOAT32:
+		case DataType::FLOAT64:
+		case DataType::FLOAT16:
+			opAdd = "OpFAdd";
+			opSub = "OpFSub";
+			break;
+		default:
+			DE_ASSERT(false);
+			break;
+		}
+
+		switch (m_params.dataType)
+		{
+		case DataType::UINT32:
+			opConvert = "OpCopyObject";
+			break;
+		case DataType::INT32:
+			opConvert = "OpBitcast";
+			break;
+		case DataType::INT64:
+		case DataType::INT16:
+		case DataType::INT8:
+			opConvert = "OpSConvert";
+			break;
+		case DataType::UINT64:
+		case DataType::UINT16:
+		case DataType::UINT8:
+			opConvert = "OpUConvert";
+			break;
+		case DataType::FLOAT32:
+		case DataType::FLOAT64:
+		case DataType::FLOAT16:
+			opConvert = "OpConvertFToU";
+			break;
+		default:
+			DE_ASSERT(false);
+			break;
+		}
+
+		std::ostringstream zeroForCallable;
+
+		// Create pointers to components and load components.
+		for (int i = 0; i < numComponents; ++i)
+		{
+			zeroForCallable
+				<< "%component_ptr_" << i << " = OpAccessChain %comp_ptr %input_val_ptr %uint_" << i << "\n"
+				<< "%component_" << i << " = OpLoad %" << componentTypeName << " %component_ptr_" << i << "\n"
+				;
+		}
+
+		// Sum components together in %total_sum.
+		for (int i = 1; i < numComponents; ++i)
+		{
+			const std::string previous		= ((i == 1) ? "%component_0" : ("%partial_" + de::toString(i-1)));
+			const std::string resultName	= ((i == (numComponents - 1)) ? "%total_sum" : ("%partial_" + de::toString(i)));
+			zeroForCallable << resultName << " = " << opAdd << " %" << componentTypeName << " %component_" << i << " " << previous << "\n";
+		}
+
+		// Recalculate the zero.
+		zeroForCallable
+			<< "%zero_" << componentTypeName << " = " << opSub << " %" << componentTypeName << " %total_sum %" << componentTypeName << "_37\n"
+			<< "%zero_for_callable = " << opConvert << " %uint %zero_" << componentTypeName << "\n"
+			;
+
+		// Finally replace the zero_for_callable statements with the special version for vectors.
+		subs["CALC_ZERO_FOR_CALLABLE"] = zeroForCallable.str();
+
+		// Rework comparison statements.
+		if (isArray)
+		{
+			// Arrays need to be compared per-component.
+			std::ostringstream calcEqual;
+
+			for (int i = 0; i < numComponents; ++i)
+			{
+				calcEqual
+					<< "%component_after_" << i << " = OpLoad %" << componentTypeName << " %component_ptr_" << i << "\n"
+					<< "%equal_" << i << " = " << opEqual << " %bool %component_" << i << " %component_after_" << i << "\n";
+					;
+				if (i > 0)
+					calcEqual << "%and_" << i << " = OpLogicalAnd %bool %equal_" << (i - 1) << " %equal_" << i << "\n";
+				if (i == numComponents - 1)
+					calcEqual << "%equal = OpCopyObject %bool %and_" << i << "\n";
+			}
+
+			subs["CALC_EQUAL_STATEMENT"] = calcEqual.str();
+		}
+		else
+		{
+			// Vectors can be compared using a bool vector and OpAll.
+			subs["CALC_EQUAL_STATEMENT"] =	"                  %equal_vector = " + opEqual + " %v" + numComponentsStr + "bool %input_val_before %input_val_after\n";
+			subs["CALC_EQUAL_STATEMENT"] +=	"                         %equal = OpAll %bool %equal_vector\n";
+		}
+	}
+
+	if (isArray)
+	{
+		// Arrays need an ArrayStride decoration.
+		std::ostringstream interfaceDecorations;
+		interfaceDecorations << "OpDecorate %v" << numComponentsStr << componentTypeName << " ArrayStride " << getElementSize(m_params.dataType, VectorType::SCALAR) << "\n";
+		subs["INTERFACE_DECORATIONS"] = interfaceDecorations.str();
+	}
+
+	const auto inputBlockDecls = getGLSLInputValDecl(m_params.dataType, m_params.vectorType);
+
+	std::ostringstream glslBindings;
+	glslBindings
+		<< inputBlockDecls.first // Additional data types needed.
+		<< "layout(set = 0, binding = 0) uniform accelerationStructureEXT topLevelAS;\n"
+		<< "layout(set = 0, binding = 1) buffer CalleeBlock { uint val; } calleeBuffer;\n"
+		<< "layout(set = 0, binding = 2) buffer OutputBlock { uint val; } outputBuffer;\n"
+		<< "layout(set = 0, binding = 3) buffer InputBlock { " << inputBlockDecls.second << " } inputBuffer;\n"
+		;
+
+	if (samplersNeeded(m_params.dataType))
+	{
+		glslBindings
+			<< "layout(set = 0, binding = 4) uniform utexture2D sampledTexture[2];\n"
+			<< "layout(set = 0, binding = 5) uniform sampler textureSampler[2];\n"
+			<< "layout(set = 0, binding = 6) uniform usampler2D combinedImageSampler[2];\n"
+			;
+	}
+	else if (storageImageNeeded(m_params.dataType))
+	{
+		glslBindings
+			<< "layout(set = 0, binding = 4, r32ui) uniform uimage2D storageImage;\n"
+			;
+	}
+
+	const auto glslBindingsStr	=	glslBindings.str();
+	const auto glslHeaderStr	=	"#version 460 core\n"
+									"#extension GL_EXT_ray_tracing : require\n"
+									"#extension GL_EXT_shader_explicit_arithmetic_types : require\n";
+
+
+	if (m_params.callType == CallType::TRACE_RAY)
+	{
+		subs["ENTRY_POINT"]						=	"RayGenerationKHR";
+		subs["MAIN_INTERFACE_EXTRAS"]			+=	" %hitValue";
+		subs["INTERFACE_DECORATIONS"]			+=	"                                  OpDecorate %hitValue Location 0\n";
+		subs["INTERFACE_TYPES_AND_VARIABLES"]	=	"                   %payload_ptr = OpTypePointer RayPayloadKHR %v3float\n"
+													"                      %hitValue = OpVariable %payload_ptr RayPayloadKHR\n";
+		subs["CALL_STATEMENTS"]					=	"                      %as_value = OpLoad %as_type %topLevelAS\n"
+													"                                  OpTraceRayKHR %as_value %uint_0 %uint_255 %zero_for_callable %zero_for_callable %zero_for_callable %origin_const %float_0 %direction_const %float_9 %hitValue\n";
+
+		const auto rgen = spvTemplate.specialize(subs);
+		programCollection.spirvAsmSources.add("rgen") << rgen << spvBuildOptions;
+
+		std::stringstream chit;
+		chit
+			<< glslHeaderStr
+			<< "layout(location = 0) rayPayloadInEXT vec3 hitValue;\n"
+			<< "hitAttributeEXT vec3 attribs;\n"
+			<< glslBindingsStr
+			<< "void main()\n"
+			<< "{\n"
+			<< "    calleeBuffer.val = 1u;\n"
+			<< "}\n";
+			;
+		programCollection.glslSources.add("chit") << glu::ClosestHitSource(updateRayTracingGLSL(chit.str())) << buildOptions;
+	}
+	else if (m_params.callType == CallType::EXECUTE_CALLABLE)
+	{
+		subs["ENTRY_POINT"]						=	"RayGenerationKHR";
+		subs["MAIN_INTERFACE_EXTRAS"]			+=	" %callableData";
+		subs["INTERFACE_DECORATIONS"]			+=	"                                  OpDecorate %callableData Location 0\n";
+		subs["INTERFACE_TYPES_AND_VARIABLES"]	=	"             %callable_data_ptr = OpTypePointer CallableDataKHR %float\n"
+													"                  %callableData = OpVariable %callable_data_ptr CallableDataKHR\n";
+		subs["CALL_STATEMENTS"]					=	"                                  OpExecuteCallableKHR %zero_for_callable %callableData\n";
+
+		const auto rgen = spvTemplate.specialize(subs);
+		programCollection.spirvAsmSources.add("rgen") << rgen << spvBuildOptions;
+
+		std::ostringstream call;
+		call
+			<< glslHeaderStr
+			<< "layout(location = 0) callableDataInEXT float callableData;\n"
+			<< glslBindingsStr
+			<< "void main()\n"
+			<< "{\n"
+			<< "    calleeBuffer.val = 1u;\n"
+			<< "}\n"
+			;
+
+		programCollection.glslSources.add("call") << glu::CallableSource(updateRayTracingGLSL(call.str())) << buildOptions;
+	}
+	else if (m_params.callType == CallType::REPORT_INTERSECTION)
+	{
+		subs["ENTRY_POINT"]						=	"IntersectionKHR";
+		subs["MAIN_INTERFACE_EXTRAS"]			+=	" %attribs";
+		subs["INTERFACE_DECORATIONS"]			+=	"";
+		subs["INTERFACE_TYPES_AND_VARIABLES"]	=	"             %hit_attribute_ptr = OpTypePointer HitAttributeKHR %v3float\n"
+													"                       %attribs = OpVariable %hit_attribute_ptr HitAttributeKHR\n";
+		subs["CALL_STATEMENTS"]					=	"              %intersection_ret = OpReportIntersectionKHR %bool %float_1 %zero_for_callable\n";
+
+		const auto rint = spvTemplate.specialize(subs);
+		programCollection.spirvAsmSources.add("rint") << rint << spvBuildOptions;
+
+		std::ostringstream rgen;
+		rgen
+			<< glslHeaderStr
+			<< "layout(location = 0) rayPayloadEXT vec3 hitValue;\n"
+			<< glslBindingsStr
+			<< "void main()\n"
+			<< "{\n"
+			<< "  traceRayEXT(topLevelAS, 0u, 0xFFu, 0, 0, 0, vec3(0.5, 0.5, 0.0), 0.0, vec3(0.0, 0.0, -1.0), 9.0, 0);\n"
+			<< "}\n"
+			;
+		programCollection.glslSources.add("rgen") << glu::RaygenSource(updateRayTracingGLSL(rgen.str())) << buildOptions;
+
+		std::stringstream ahit;
+		ahit
+			<< glslHeaderStr
+			<< "layout(location = 0) rayPayloadInEXT vec3 hitValue;\n"
+			<< "hitAttributeEXT vec3 attribs;\n"
+			<< glslBindingsStr
+			<< "void main()\n"
+			<< "{\n"
+			<< "    calleeBuffer.val = 1u;\n"
+			<< "}\n";
+			;
+		programCollection.glslSources.add("ahit") << glu::AnyHitSource(updateRayTracingGLSL(ahit.str())) << buildOptions;
+	}
+	else
+	{
+		DE_ASSERT(false);
+	}
+}
+
+using v2i32 = tcu::Vector<deInt32, 2>;
+using v3i32 = tcu::Vector<deInt32, 3>;
+using v4i32 = tcu::Vector<deInt32, 4>;
+using a5i32 = std::array<deInt32, 5>;
+
+using v2u32 = tcu::Vector<deUint32, 2>;
+using v3u32 = tcu::Vector<deUint32, 3>;
+using v4u32 = tcu::Vector<deUint32, 4>;
+using a5u32 = std::array<deUint32, 5>;
+
+using v2i64 = tcu::Vector<deInt64, 2>;
+using v3i64 = tcu::Vector<deInt64, 3>;
+using v4i64 = tcu::Vector<deInt64, 4>;
+using a5i64 = std::array<deInt64, 5>;
+
+using v2u64 = tcu::Vector<deUint64, 2>;
+using v3u64 = tcu::Vector<deUint64, 3>;
+using v4u64 = tcu::Vector<deUint64, 4>;
+using a5u64 = std::array<deUint64, 5>;
+
+using v2i16 = tcu::Vector<deInt16, 2>;
+using v3i16 = tcu::Vector<deInt16, 3>;
+using v4i16 = tcu::Vector<deInt16, 4>;
+using a5i16 = std::array<deInt16, 5>;
+
+using v2u16 = tcu::Vector<deUint16, 2>;
+using v3u16 = tcu::Vector<deUint16, 3>;
+using v4u16 = tcu::Vector<deUint16, 4>;
+using a5u16 = std::array<deUint16, 5>;
+
+using v2i8 = tcu::Vector<deInt8, 2>;
+using v3i8 = tcu::Vector<deInt8, 3>;
+using v4i8 = tcu::Vector<deInt8, 4>;
+using a5i8 = std::array<deInt8, 5>;
+
+using v2u8 = tcu::Vector<deUint8, 2>;
+using v3u8 = tcu::Vector<deUint8, 3>;
+using v4u8 = tcu::Vector<deUint8, 4>;
+using a5u8 = std::array<deUint8, 5>;
+
+using v2f32 = tcu::Vector<tcu::Float32, 2>;
+using v3f32 = tcu::Vector<tcu::Float32, 3>;
+using v4f32 = tcu::Vector<tcu::Float32, 4>;
+using a5f32 = std::array<tcu::Float32, 5>;
+
+using v2f64 = tcu::Vector<tcu::Float64, 2>;
+using v3f64 = tcu::Vector<tcu::Float64, 3>;
+using v4f64 = tcu::Vector<tcu::Float64, 4>;
+using a5f64 = std::array<tcu::Float64, 5>;
+
+using v2f16 = tcu::Vector<tcu::Float16, 2>;
+using v3f16 = tcu::Vector<tcu::Float16, 3>;
+using v4f16 = tcu::Vector<tcu::Float16, 4>;
+using a5f16 = std::array<tcu::Float16, 5>;
+
+// Scalar types get filled with value 37, matching the value that will be substracted in the shader.
+#define GEN_SCALAR_FILL(DATA_TYPE)											\
+	do {																	\
+		const auto inputBufferValue = static_cast<DATA_TYPE>(37.0);			\
+		deMemcpy(bufferPtr, &inputBufferValue, sizeof(inputBufferValue));	\
+	} while (0)
+
+// Vector types get filled with values that add up to 37, matching the value that will be substracted in the shader.
+#define GEN_V2_FILL(DATA_TYPE)												\
+	do {																	\
+		DATA_TYPE inputBufferValue;											\
+		inputBufferValue.x() = static_cast<DATA_TYPE::Element>(21.0);		\
+		inputBufferValue.y() = static_cast<DATA_TYPE::Element>(16.0);		\
+		deMemcpy(bufferPtr, &inputBufferValue, sizeof(inputBufferValue));	\
+	} while (0)
+
+#define GEN_V3_FILL(DATA_TYPE)												\
+	do {																	\
+		DATA_TYPE inputBufferValue;											\
+		inputBufferValue.x() = static_cast<DATA_TYPE::Element>(11.0);		\
+		inputBufferValue.y() = static_cast<DATA_TYPE::Element>(19.0);		\
+		inputBufferValue.z() = static_cast<DATA_TYPE::Element>(7.0);		\
+		deMemcpy(bufferPtr, &inputBufferValue, sizeof(inputBufferValue));	\
+	} while (0)
+
+#define GEN_V4_FILL(DATA_TYPE)												\
+	do {																	\
+		DATA_TYPE inputBufferValue;											\
+		inputBufferValue.x() = static_cast<DATA_TYPE::Element>(9.0);		\
+		inputBufferValue.y() = static_cast<DATA_TYPE::Element>(11.0);		\
+		inputBufferValue.z() = static_cast<DATA_TYPE::Element>(3.0);		\
+		inputBufferValue.w() = static_cast<DATA_TYPE::Element>(14.0);		\
+		deMemcpy(bufferPtr, &inputBufferValue, sizeof(inputBufferValue));	\
+	} while (0)
+
+#define GEN_A5_FILL(DATA_TYPE)															\
+	do {																				\
+		DATA_TYPE inputBufferValue;														\
+		inputBufferValue[0] = static_cast<DATA_TYPE::value_type>(13.0);					\
+		inputBufferValue[1] = static_cast<DATA_TYPE::value_type>(6.0);					\
+		inputBufferValue[2] = static_cast<DATA_TYPE::value_type>(2.0);					\
+		inputBufferValue[3] = static_cast<DATA_TYPE::value_type>(5.0);					\
+		inputBufferValue[4] = static_cast<DATA_TYPE::value_type>(11.0);					\
+		deMemcpy(bufferPtr, inputBufferValue.data(), de::dataSize(inputBufferValue));	\
+	} while (0)
+
+void fillInputBuffer (DataType dataType, VectorType vectorType, void* bufferPtr)
+{
+	if (vectorType == VectorType::SCALAR)
+	{
+		if		(dataType == DataType::INT32)	GEN_SCALAR_FILL(deInt32);
+		else if	(dataType == DataType::UINT32)	GEN_SCALAR_FILL(deUint32);
+		else if	(dataType == DataType::INT64)	GEN_SCALAR_FILL(deInt64);
+		else if	(dataType == DataType::UINT64)	GEN_SCALAR_FILL(deUint64);
+		else if	(dataType == DataType::INT16)	GEN_SCALAR_FILL(deInt16);
+		else if	(dataType == DataType::UINT16)	GEN_SCALAR_FILL(deUint16);
+		else if	(dataType == DataType::INT8)	GEN_SCALAR_FILL(deInt8);
+		else if	(dataType == DataType::UINT8)	GEN_SCALAR_FILL(deUint8);
+		else if	(dataType == DataType::FLOAT32)	GEN_SCALAR_FILL(tcu::Float32);
+		else if	(dataType == DataType::FLOAT64)	GEN_SCALAR_FILL(tcu::Float64);
+		else if	(dataType == DataType::FLOAT16)	GEN_SCALAR_FILL(tcu::Float16);
+		else if (dataType == DataType::STRUCT)
+		{
+			InputStruct data = { 12u, 25.0f };
+			deMemcpy(bufferPtr, &data, sizeof(data));
+		}
+		else if (dataType == DataType::OP_NULL)		GEN_SCALAR_FILL(deUint32);
+		else if (dataType == DataType::OP_UNDEF)	GEN_SCALAR_FILL(deUint32);
+		else
+		{
+			DE_ASSERT(false);
+		}
+	}
+	else if (vectorType == VectorType::V2)
+	{
+		if		(dataType == DataType::INT32)	GEN_V2_FILL(v2i32);
+		else if	(dataType == DataType::UINT32)	GEN_V2_FILL(v2u32);
+		else if	(dataType == DataType::INT64)	GEN_V2_FILL(v2i64);
+		else if	(dataType == DataType::UINT64)	GEN_V2_FILL(v2u64);
+		else if	(dataType == DataType::INT16)	GEN_V2_FILL(v2i16);
+		else if	(dataType == DataType::UINT16)	GEN_V2_FILL(v2u16);
+		else if	(dataType == DataType::INT8)	GEN_V2_FILL(v2i8);
+		else if	(dataType == DataType::UINT8)	GEN_V2_FILL(v2u8);
+		else if	(dataType == DataType::FLOAT32)	GEN_V2_FILL(v2f32);
+		else if	(dataType == DataType::FLOAT64)	GEN_V2_FILL(v2f64);
+		else if	(dataType == DataType::FLOAT16)	GEN_V2_FILL(v2f16);
+		else
+		{
+			DE_ASSERT(false);
+		}
+	}
+	else if (vectorType == VectorType::V3)
+	{
+		if		(dataType == DataType::INT32)	GEN_V3_FILL(v3i32);
+		else if	(dataType == DataType::UINT32)	GEN_V3_FILL(v3u32);
+		else if	(dataType == DataType::INT64)	GEN_V3_FILL(v3i64);
+		else if	(dataType == DataType::UINT64)	GEN_V3_FILL(v3u64);
+		else if	(dataType == DataType::INT16)	GEN_V3_FILL(v3i16);
+		else if	(dataType == DataType::UINT16)	GEN_V3_FILL(v3u16);
+		else if	(dataType == DataType::INT8)	GEN_V3_FILL(v3i8);
+		else if	(dataType == DataType::UINT8)	GEN_V3_FILL(v3u8);
+		else if	(dataType == DataType::FLOAT32)	GEN_V3_FILL(v3f32);
+		else if	(dataType == DataType::FLOAT64)	GEN_V3_FILL(v3f64);
+		else if	(dataType == DataType::FLOAT16)	GEN_V3_FILL(v3f16);
+		else
+		{
+			DE_ASSERT(false);
+		}
+	}
+	else if (vectorType == VectorType::V4)
+	{
+		if		(dataType == DataType::INT32)	GEN_V4_FILL(v4i32);
+		else if	(dataType == DataType::UINT32)	GEN_V4_FILL(v4u32);
+		else if	(dataType == DataType::INT64)	GEN_V4_FILL(v4i64);
+		else if	(dataType == DataType::UINT64)	GEN_V4_FILL(v4u64);
+		else if	(dataType == DataType::INT16)	GEN_V4_FILL(v4i16);
+		else if	(dataType == DataType::UINT16)	GEN_V4_FILL(v4u16);
+		else if	(dataType == DataType::INT8)	GEN_V4_FILL(v4i8);
+		else if	(dataType == DataType::UINT8)	GEN_V4_FILL(v4u8);
+		else if	(dataType == DataType::FLOAT32)	GEN_V4_FILL(v4f32);
+		else if	(dataType == DataType::FLOAT64)	GEN_V4_FILL(v4f64);
+		else if	(dataType == DataType::FLOAT16)	GEN_V4_FILL(v4f16);
+		else
+		{
+			DE_ASSERT(false);
+		}
+	}
+	else if (vectorType == VectorType::A5)
+	{
+		if		(dataType == DataType::INT32)	GEN_A5_FILL(a5i32);
+		else if	(dataType == DataType::UINT32)	GEN_A5_FILL(a5u32);
+		else if	(dataType == DataType::INT64)	GEN_A5_FILL(a5i64);
+		else if	(dataType == DataType::UINT64)	GEN_A5_FILL(a5u64);
+		else if	(dataType == DataType::INT16)	GEN_A5_FILL(a5i16);
+		else if	(dataType == DataType::UINT16)	GEN_A5_FILL(a5u16);
+		else if	(dataType == DataType::INT8)	GEN_A5_FILL(a5i8);
+		else if	(dataType == DataType::UINT8)	GEN_A5_FILL(a5u8);
+		else if	(dataType == DataType::FLOAT32)	GEN_A5_FILL(a5f32);
+		else if	(dataType == DataType::FLOAT64)	GEN_A5_FILL(a5f64);
+		else if	(dataType == DataType::FLOAT16)	GEN_A5_FILL(a5f16);
+		else
+		{
+			DE_ASSERT(false);
+		}
+	}
+	else
+	{
+		DE_ASSERT(false);
+	}
+}
+
+tcu::TestStatus DataSpillTestInstance::iterate (void)
+{
+	const auto& vki						= m_context.getInstanceInterface();
+	const auto	physicalDevice			= m_context.getPhysicalDevice();
+	const auto&	vkd						= m_context.getDeviceInterface();
+	const auto	device					= m_context.getDevice();
+	const auto	queue					= m_context.getUniversalQueue();
+	const auto	familyIndex				= m_context.getUniversalQueueFamilyIndex();
+	auto&		alloc					= m_context.getDefaultAllocator();
+	const auto	shaderStages			= getShaderStages(m_params.callType);
+
+	// Command buffer.
+	const auto cmdPool		= makeCommandPool(vkd, device, familyIndex);
+	const auto cmdBufferPtr	= allocateCommandBuffer(vkd, device, cmdPool.get(), VK_COMMAND_BUFFER_LEVEL_PRIMARY);
+	const auto cmdBuffer	= cmdBufferPtr.get();
+
+	beginCommandBuffer(vkd, cmdBuffer);
+
+	// Callee, input and output buffers.
+	const auto calleeBufferSize	= getElementSize(DataType::UINT32, VectorType::SCALAR);
+	const auto outputBufferSize	= getElementSize(DataType::UINT32, VectorType::SCALAR);
+	const auto inputBufferSize	= getElementSize(m_params.dataType, m_params.vectorType);
+
+	const auto calleeBufferInfo	= makeBufferCreateInfo(calleeBufferSize, VK_BUFFER_USAGE_STORAGE_BUFFER_BIT);
+	const auto outputBufferInfo	= makeBufferCreateInfo(outputBufferSize, VK_BUFFER_USAGE_STORAGE_BUFFER_BIT);
+	const auto inputBufferInfo	= makeBufferCreateInfo(inputBufferSize, VK_BUFFER_USAGE_STORAGE_BUFFER_BIT);
+
+	BufferWithMemory calleeBuffer	(vkd, device, alloc, calleeBufferInfo, MemoryRequirement::HostVisible);
+	BufferWithMemory outputBuffer	(vkd, device, alloc, outputBufferInfo, MemoryRequirement::HostVisible);
+	BufferWithMemory inputBuffer	(vkd, device, alloc, inputBufferInfo, MemoryRequirement::HostVisible);
+
+	// Fill buffers with values.
+	auto& calleeBufferAlloc	= calleeBuffer.getAllocation();
+	auto* calleeBufferPtr	= calleeBufferAlloc.getHostPtr();
+	auto& outputBufferAlloc	= outputBuffer.getAllocation();
+	auto* outputBufferPtr	= outputBufferAlloc.getHostPtr();
+	auto& inputBufferAlloc	= inputBuffer.getAllocation();
+	auto* inputBufferPtr	= inputBufferAlloc.getHostPtr();
+
+	deMemset(calleeBufferPtr, 0, static_cast<size_t>(calleeBufferSize));
+	deMemset(outputBufferPtr, 0, static_cast<size_t>(outputBufferSize));
+
+	if (samplersNeeded(m_params.dataType) || storageImageNeeded(m_params.dataType))
+	{
+		// The input buffer for these cases will be filled with zeros (sampling coordinates), and the input textures will contain the interesting input value.
+		deMemset(inputBufferPtr, 0, static_cast<size_t>(inputBufferSize));
+	}
+	else
+	{
+		// We want to fill the input buffer with values that will be consistently used in the shader to obtain a result of zero.
+		fillInputBuffer(m_params.dataType, m_params.vectorType, inputBufferPtr);
+	}
+
+	flushAlloc(vkd, device, calleeBufferAlloc);
+	flushAlloc(vkd, device, outputBufferAlloc);
+	flushAlloc(vkd, device, inputBufferAlloc);
+
+	// Acceleration structures.
+	de::MovePtr<BottomLevelAccelerationStructure>	bottomLevelAccelerationStructure;
+	de::MovePtr<TopLevelAccelerationStructure>		topLevelAccelerationStructure;
+
+	bottomLevelAccelerationStructure = makeBottomLevelAccelerationStructure();
+	bottomLevelAccelerationStructure->setDefaultGeometryData(getShaderStageForGeometry(m_params.callType), VK_GEOMETRY_NO_DUPLICATE_ANY_HIT_INVOCATION_BIT_KHR);
+	bottomLevelAccelerationStructure->createAndBuild(vkd, device, cmdBuffer, alloc);
+
+	topLevelAccelerationStructure = makeTopLevelAccelerationStructure();
+	topLevelAccelerationStructure->setInstanceCount(1);
+	topLevelAccelerationStructure->addInstance(de::SharedPtr<BottomLevelAccelerationStructure>(bottomLevelAccelerationStructure.release()));
+	topLevelAccelerationStructure->createAndBuild(vkd, device, cmdBuffer, alloc);
+
+	// Get some ray tracing properties.
+	deUint32 shaderGroupHandleSize		= 0u;
+	deUint32 shaderGroupBaseAlignment	= 1u;
+	{
+		const auto rayTracingPropertiesKHR	= makeRayTracingProperties(vki, physicalDevice);
+		shaderGroupHandleSize				= rayTracingPropertiesKHR->getShaderGroupHandleSize();
+		shaderGroupBaseAlignment			= rayTracingPropertiesKHR->getShaderGroupBaseAlignment();
+	}
+
+	// Textures and samplers if needed.
+	de::MovePtr<BufferWithMemory>				textureData;
+	std::vector<de::MovePtr<ImageWithMemory>>	textures;
+	std::vector<Move<VkImageView>>				textureViews;
+	std::vector<Move<VkSampler>>				samplers;
+
+	if (samplersNeeded(m_params.dataType) || storageImageNeeded(m_params.dataType))
+	{
+		// Create texture data with the expected contents.
+		{
+			const auto textureDataSize			= static_cast<VkDeviceSize>(sizeof(deUint32));
+			const auto textureDataCreateInfo	= makeBufferCreateInfo(textureDataSize, VK_BUFFER_USAGE_TRANSFER_SRC_BIT);
+
+			textureData = de::MovePtr<BufferWithMemory>(new BufferWithMemory(vkd, device, alloc, textureDataCreateInfo, MemoryRequirement::HostVisible));
+			auto& textureDataAlloc = textureData->getAllocation();
+			auto* textureDataPtr = textureDataAlloc.getHostPtr();
+
+			fillInputBuffer(DataType::UINT32, VectorType::SCALAR, textureDataPtr);
+			flushAlloc(vkd, device, textureDataAlloc);
+		}
+
+		// Images will be created like this with different usages.
+		VkImageCreateInfo imageCreateInfo =
+		{
+			VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO,	//	VkStructureType			sType;
+			nullptr,								//	const void*				pNext;
+			0u,										//	VkImageCreateFlags		flags;
+			VK_IMAGE_TYPE_2D,						//	VkImageType				imageType;
+			kImageFormat,							//	VkFormat				format;
+			kImageExtent,							//	VkExtent3D				extent;
+			1u,										//	deUint32				mipLevels;
+			1u,										//	deUint32				arrayLayers;
+			VK_SAMPLE_COUNT_1_BIT,					//	VkSampleCountFlagBits	samples;
+			VK_IMAGE_TILING_OPTIMAL,				//	VkImageTiling			tiling;
+			kSampledImageUsage,						//	VkImageUsageFlags		usage;
+			VK_SHARING_MODE_EXCLUSIVE,				//	VkSharingMode			sharingMode;
+			0u,										//	deUint32				queueFamilyIndexCount;
+			nullptr,								//	const deUint32*			pQueueFamilyIndices;
+			VK_IMAGE_LAYOUT_UNDEFINED,				//	VkImageLayout			initialLayout;
+		};
+
+		const auto imageSubresourceRange	= makeImageSubresourceRange(VK_IMAGE_ASPECT_COLOR_BIT, 0u, 1u, 0u, 1u);
+		const auto imageSubresourceLayers	= makeImageSubresourceLayers(VK_IMAGE_ASPECT_COLOR_BIT, 0u, 0u, 1u);
+
+		if (samplersNeeded(m_params.dataType))
+		{
+			// All samplers will be created like this.
+			const VkSamplerCreateInfo samplerCreateInfo =
+			{
+				VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO,	//	VkStructureType			sType;
+				nullptr,								//	const void*				pNext;
+				0u,										//	VkSamplerCreateFlags	flags;
+				VK_FILTER_NEAREST,						//	VkFilter				magFilter;
+				VK_FILTER_NEAREST,						//	VkFilter				minFilter;
+				VK_SAMPLER_MIPMAP_MODE_NEAREST,			//	VkSamplerMipmapMode		mipmapMode;
+				VK_SAMPLER_ADDRESS_MODE_REPEAT,			//	VkSamplerAddressMode	addressModeU;
+				VK_SAMPLER_ADDRESS_MODE_REPEAT,			//	VkSamplerAddressMode	addressModeV;
+				VK_SAMPLER_ADDRESS_MODE_REPEAT,			//	VkSamplerAddressMode	addressModeW;
+				0.0,									//	float					mipLodBias;
+				VK_FALSE,								//	VkBool32				anisotropyEnable;
+				1.0f,									//	float					maxAnisotropy;
+				VK_FALSE,								//	VkBool32				compareEnable;
+				VK_COMPARE_OP_ALWAYS,					//	VkCompareOp				compareOp;
+				0.0f,									//	float					minLod;
+				1.0f,									//	float					maxLod;
+				VK_BORDER_COLOR_INT_OPAQUE_BLACK,		//	VkBorderColor			borderColor;
+				VK_FALSE,								//	VkBool32				unnormalizedCoordinates;
+			};
+
+			// Create textures and samplers.
+			for (size_t i = 0; i < kNumImages; ++i)
+			{
+				textures.emplace_back(new ImageWithMemory(vkd, device, alloc, imageCreateInfo, MemoryRequirement::Any));
+				textureViews.emplace_back(makeImageView(vkd, device, textures.back()->get(), VK_IMAGE_VIEW_TYPE_2D, kImageFormat, imageSubresourceRange));
+			}
+
+			for (size_t i = 0; i < kNumSamplers; ++i)
+				samplers.emplace_back(createSampler(vkd, device, &samplerCreateInfo));
+
+			// Make sure texture data is available in the transfer stage.
+			const auto textureDataBarrier = makeMemoryBarrier(VK_ACCESS_HOST_WRITE_BIT, VK_ACCESS_TRANSFER_READ_BIT);
+			vkd.cmdPipelineBarrier(cmdBuffer, VK_PIPELINE_STAGE_HOST_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, 0u, 1u, &textureDataBarrier, 0u, nullptr, 0u, nullptr);
+
+			const auto bufferImageCopy = makeBufferImageCopy(kImageExtent, imageSubresourceLayers);
+
+			// Fill textures with data and prepare them for the ray tracing pipeline stages.
+			for (size_t i = 0; i < kNumImages; ++i)
+			{
+				const auto texturePreCopyBarrier	= makeImageMemoryBarrier(0u, VK_ACCESS_TRANSFER_WRITE_BIT, VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, textures[i]->get(), imageSubresourceRange);
+				const auto texturePostCopyBarrier	= makeImageMemoryBarrier(VK_ACCESS_TRANSFER_WRITE_BIT, VK_ACCESS_SHADER_READ_BIT, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL, textures[i]->get(), imageSubresourceRange);
+
+				vkd.cmdPipelineBarrier(cmdBuffer, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, 0u, 0u, nullptr, 0u, nullptr, 1u, &texturePreCopyBarrier);
+				vkd.cmdCopyBufferToImage(cmdBuffer, textureData->get(), textures[i]->get(), VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 1u, &bufferImageCopy);
+				vkd.cmdPipelineBarrier(cmdBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR, 0u, 0u, nullptr, 0u, nullptr, 1u, &texturePostCopyBarrier);
+			}
+		}
+		else if (storageImageNeeded(m_params.dataType))
+		{
+			// Image will be used for storage.
+			imageCreateInfo.usage = kStorageImageUsage;
+
+			textures.emplace_back(new ImageWithMemory(vkd, device, alloc, imageCreateInfo, MemoryRequirement::Any));
+			textureViews.emplace_back(makeImageView(vkd, device, textures.back()->get(), VK_IMAGE_VIEW_TYPE_2D, kImageFormat, imageSubresourceRange));
+
+			// Make sure texture data is available in the transfer stage.
+			const auto textureDataBarrier = makeMemoryBarrier(VK_ACCESS_HOST_WRITE_BIT, VK_ACCESS_TRANSFER_READ_BIT);
+			vkd.cmdPipelineBarrier(cmdBuffer, VK_PIPELINE_STAGE_HOST_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, 0u, 1u, &textureDataBarrier, 0u, nullptr, 0u, nullptr);
+
+			const auto bufferImageCopy			= makeBufferImageCopy(kImageExtent, imageSubresourceLayers);
+			const auto texturePreCopyBarrier	= makeImageMemoryBarrier(0u, VK_ACCESS_TRANSFER_WRITE_BIT, VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, textures.back()->get(), imageSubresourceRange);
+			const auto texturePostCopyBarrier	= makeImageMemoryBarrier(VK_ACCESS_TRANSFER_WRITE_BIT, (VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_SHADER_WRITE_BIT), VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, VK_IMAGE_LAYOUT_GENERAL, textures.back()->get(), imageSubresourceRange);
+
+			// Fill texture with data and prepare them for the ray tracing pipeline stages.
+			vkd.cmdPipelineBarrier(cmdBuffer, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, 0u, 0u, nullptr, 0u, nullptr, 1u, &texturePreCopyBarrier);
+			vkd.cmdCopyBufferToImage(cmdBuffer, textureData->get(), textures.back()->get(), VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 1u, &bufferImageCopy);
+			vkd.cmdPipelineBarrier(cmdBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR, 0u, 0u, nullptr, 0u, nullptr, 1u, &texturePostCopyBarrier);
+		}
+		else
+		{
+			DE_ASSERT(false);
+		}
+	}
+
+	// Descriptor set layout.
+	DescriptorSetLayoutBuilder dslBuilder;
+	dslBuilder.addBinding(VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR, 1u, shaderStages, nullptr);
+	dslBuilder.addBinding(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, 1u, shaderStages, nullptr);	// Callee buffer.
+	dslBuilder.addBinding(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, 1u, shaderStages, nullptr);	// Output buffer.
+	dslBuilder.addBinding(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, 1u, shaderStages, nullptr);	// Input buffer.
+	if (samplersNeeded(m_params.dataType))
+	{
+		dslBuilder.addBinding(VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, 2u, shaderStages, nullptr);
+		dslBuilder.addBinding(VK_DESCRIPTOR_TYPE_SAMPLER, 2u, shaderStages, nullptr);
+		dslBuilder.addBinding(VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 2u, shaderStages, nullptr);
+	}
+	else if (storageImageNeeded(m_params.dataType))
+	{
+		dslBuilder.addBinding(VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, 1u, shaderStages, nullptr);
+	}
+	const auto descriptorSetLayout = dslBuilder.build(vkd, device);
+
+	// Pipeline layout.
+	const auto pipelineLayout = makePipelineLayout(vkd, device, descriptorSetLayout.get());
+
+	// Descriptor pool and set.
+	DescriptorPoolBuilder poolBuilder;
+	poolBuilder.addType(VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR);
+	poolBuilder.addType(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, 3u);
+	if (samplersNeeded(m_params.dataType))
+	{
+		poolBuilder.addType(VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, 2u);
+		poolBuilder.addType(VK_DESCRIPTOR_TYPE_SAMPLER, 2u);
+		poolBuilder.addType(VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 2u);
+	}
+	else if (storageImageNeeded(m_params.dataType))
+	{
+		poolBuilder.addType(VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, 1u);
+	}
+	const auto descriptorPool = poolBuilder.build(vkd, device, VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT, 1u);
+	const auto descriptorSet = makeDescriptorSet(vkd, device, descriptorPool.get(), descriptorSetLayout.get());
+
+	// Update descriptor set.
+	{
+		const VkWriteDescriptorSetAccelerationStructureKHR writeASInfo =
+		{
+			VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR,
+			nullptr,
+			1u,
+			topLevelAccelerationStructure.get()->getPtr(),
+		};
+
+		DescriptorSetUpdateBuilder updateBuilder;
+
+		const auto ds = descriptorSet.get();
+
+		const auto calleeBufferDescriptorInfo	= makeDescriptorBufferInfo(calleeBuffer.get(), 0ull, VK_WHOLE_SIZE);
+		const auto outputBufferDescriptorInfo	= makeDescriptorBufferInfo(outputBuffer.get(), 0ull, VK_WHOLE_SIZE);
+		const auto inputBufferDescriptorInfo	= makeDescriptorBufferInfo(inputBuffer.get(), 0ull, VK_WHOLE_SIZE);
+
+		updateBuilder.writeSingle(ds, DescriptorSetUpdateBuilder::Location::binding(0u), VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR, &writeASInfo);
+		updateBuilder.writeSingle(ds, DescriptorSetUpdateBuilder::Location::binding(1u), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, &calleeBufferDescriptorInfo);
+		updateBuilder.writeSingle(ds, DescriptorSetUpdateBuilder::Location::binding(2u), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, &outputBufferDescriptorInfo);
+		updateBuilder.writeSingle(ds, DescriptorSetUpdateBuilder::Location::binding(3u), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, &inputBufferDescriptorInfo);
+
+		if (samplersNeeded(m_params.dataType))
+		{
+			// Update textures, samplers and combined image samplers.
+			std::vector<VkDescriptorImageInfo> textureDescInfos;
+			std::vector<VkDescriptorImageInfo> textureSamplerInfos;
+			std::vector<VkDescriptorImageInfo> combinedSamplerInfos;
+
+			for (size_t i = 0; i < kNumAloneImages; ++i)
+				textureDescInfos.push_back(makeDescriptorImageInfo(DE_NULL, textureViews[i].get(), VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL));
+			for (size_t i = 0; i < kNumAloneSamplers; ++i)
+				textureSamplerInfos.push_back(makeDescriptorImageInfo(samplers[i].get(), DE_NULL, VK_IMAGE_LAYOUT_UNDEFINED));
+
+			for (size_t i = 0; i < kNumCombined; ++i)
+				combinedSamplerInfos.push_back(makeDescriptorImageInfo(samplers[i + kNumAloneSamplers].get(), textureViews[i + kNumAloneImages].get(), VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL));
+
+			updateBuilder.writeArray(ds, DescriptorSetUpdateBuilder::Location::binding(4u), VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, kNumAloneImages, textureDescInfos.data());
+			updateBuilder.writeArray(ds, DescriptorSetUpdateBuilder::Location::binding(5u), VK_DESCRIPTOR_TYPE_SAMPLER, kNumAloneSamplers, textureSamplerInfos.data());
+			updateBuilder.writeArray(ds, DescriptorSetUpdateBuilder::Location::binding(6u), VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, kNumCombined, combinedSamplerInfos.data());
+		}
+		else if (storageImageNeeded(m_params.dataType))
+		{
+			const auto storageImageDescriptorInfo = makeDescriptorImageInfo(DE_NULL, textureViews.back().get(), VK_IMAGE_LAYOUT_GENERAL);
+			updateBuilder.writeSingle(ds, DescriptorSetUpdateBuilder::Location::binding(4u), VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, &storageImageDescriptorInfo);
+		}
+
+		updateBuilder.update(vkd, device);
+	}
+
+	// Create raytracing pipeline and shader binding tables.
+	Move<VkPipeline>				pipeline;
+
+	de::MovePtr<BufferWithMemory>	raygenShaderBindingTable;
+	de::MovePtr<BufferWithMemory>	missShaderBindingTable;
+	de::MovePtr<BufferWithMemory>	hitShaderBindingTable;
+	de::MovePtr<BufferWithMemory>	callableShaderBindingTable;
+
+	VkStridedDeviceAddressRegionKHR	raygenShaderBindingTableRegion		= makeStridedDeviceAddressRegionKHR(DE_NULL, 0, 0);
+	VkStridedDeviceAddressRegionKHR	missShaderBindingTableRegion		= makeStridedDeviceAddressRegionKHR(DE_NULL, 0, 0);
+	VkStridedDeviceAddressRegionKHR	hitShaderBindingTableRegion			= makeStridedDeviceAddressRegionKHR(DE_NULL, 0, 0);
+	VkStridedDeviceAddressRegionKHR	callableShaderBindingTableRegion	= makeStridedDeviceAddressRegionKHR(DE_NULL, 0, 0);
+
+	{
+		const auto rayTracingPipeline = de::newMovePtr<RayTracingPipeline>();
+		const auto callType = m_params.callType;
+
+		// Every case uses a ray generation shader.
+		rayTracingPipeline->addShader(VK_SHADER_STAGE_RAYGEN_BIT_KHR, createShaderModule(vkd, device, m_context.getBinaryCollection().get("rgen"), 0), 0);
+
+		if (callType == CallType::TRACE_RAY)
+		{
+			rayTracingPipeline->addShader(VK_SHADER_STAGE_CLOSEST_HIT_BIT_KHR, createShaderModule(vkd, device, m_context.getBinaryCollection().get("chit"), 0), 1);
+		}
+		else if (callType == CallType::EXECUTE_CALLABLE)
+		{
+			rayTracingPipeline->addShader(VK_SHADER_STAGE_CALLABLE_BIT_KHR, createShaderModule(vkd, device, m_context.getBinaryCollection().get("call"), 0), 1);
+		}
+		else if (callType == CallType::REPORT_INTERSECTION)
+		{
+			rayTracingPipeline->addShader(VK_SHADER_STAGE_INTERSECTION_BIT_KHR, createShaderModule(vkd, device, m_context.getBinaryCollection().get("rint"), 0), 1);
+			rayTracingPipeline->addShader(VK_SHADER_STAGE_ANY_HIT_BIT_KHR, createShaderModule(vkd, device, m_context.getBinaryCollection().get("ahit"), 0), 1);
+		}
+		else
+		{
+			DE_ASSERT(false);
+		}
+
+		pipeline = rayTracingPipeline->createPipeline(vkd, device, pipelineLayout.get());
+
+		raygenShaderBindingTable			= rayTracingPipeline->createShaderBindingTable(vkd, device, pipeline.get(), alloc, shaderGroupHandleSize, shaderGroupBaseAlignment, 0, 1);
+		raygenShaderBindingTableRegion		= makeStridedDeviceAddressRegionKHR(getBufferDeviceAddress(vkd, device, raygenShaderBindingTable->get(), 0), shaderGroupHandleSize, shaderGroupHandleSize);
+
+		if (callType == CallType::EXECUTE_CALLABLE)
+		{
+			callableShaderBindingTable			= rayTracingPipeline->createShaderBindingTable(vkd, device, pipeline.get(), alloc, shaderGroupHandleSize, shaderGroupBaseAlignment, 1, 1);
+			callableShaderBindingTableRegion	= makeStridedDeviceAddressRegionKHR(getBufferDeviceAddress(vkd, device, callableShaderBindingTable->get(), 0), shaderGroupHandleSize, shaderGroupHandleSize);
+		}
+		else if (callType == CallType::TRACE_RAY || callType == CallType::REPORT_INTERSECTION)
+		{
+			hitShaderBindingTable			= rayTracingPipeline->createShaderBindingTable(vkd, device, pipeline.get(), alloc, shaderGroupHandleSize, shaderGroupBaseAlignment, 1, 1);
+			hitShaderBindingTableRegion		= makeStridedDeviceAddressRegionKHR(getBufferDeviceAddress(vkd, device, hitShaderBindingTable->get(), 0), shaderGroupHandleSize, shaderGroupHandleSize);
+		}
+		else
+		{
+			DE_ASSERT(false);
+		}
+	}
+
+	// Use ray tracing pipeline.
+	vkd.cmdBindPipeline(cmdBuffer, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, pipeline.get());
+	vkd.cmdBindDescriptorSets(cmdBuffer, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, pipelineLayout.get(), 0u, 1u, &descriptorSet.get(), 0u, nullptr);
+	vkd.cmdTraceRaysKHR(cmdBuffer, &raygenShaderBindingTableRegion, &missShaderBindingTableRegion, &hitShaderBindingTableRegion, &callableShaderBindingTableRegion, 1u, 1u, 1u);
+
+	// Synchronize output and callee buffers.
+	const auto memBarrier = makeMemoryBarrier(VK_ACCESS_SHADER_WRITE_BIT, VK_ACCESS_HOST_READ_BIT);
+	vkd.cmdPipelineBarrier(cmdBuffer, VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR, VK_PIPELINE_STAGE_HOST_BIT, 0u, 1u, &memBarrier, 0u, nullptr, 0u, nullptr);
+
+	endCommandBuffer(vkd, cmdBuffer);
+	submitCommandsAndWait(vkd, device, queue, cmdBuffer);
+
+	// Verify output and callee buffers.
+	invalidateAlloc(vkd, device, outputBufferAlloc);
+	invalidateAlloc(vkd, device, calleeBufferAlloc);
+
+	std::map<std::string, void*> bufferPtrs;
+	bufferPtrs["output"] = outputBufferPtr;
+	bufferPtrs["callee"] = calleeBufferPtr;
+
+	for (const auto& ptr : bufferPtrs)
+	{
+		const auto& bufferName	= ptr.first;
+		const auto& bufferPtr	= ptr.second;
+
+		deUint32 outputVal;
+		deMemcpy(&outputVal, bufferPtr, sizeof(outputVal));
+
+		if (outputVal != 1u)
+			return tcu::TestStatus::fail("Unexpected value found in " + bufferName + " buffer: " + de::toString(outputVal));
+	}
+
+	return tcu::TestStatus::pass("Pass");
+}
+
+enum class InterfaceType
+{
+	RAY_PAYLOAD = 0,
+	CALLABLE_DATA,
+	HIT_ATTRIBUTES,
+	SHADER_RECORD_BUFFER_RGEN,
+	SHADER_RECORD_BUFFER_CALL,
+	SHADER_RECORD_BUFFER_MISS,
+	SHADER_RECORD_BUFFER_HIT,
+};
+
+// Separate class to ease testing pipeline interface variables.
+class DataSpillPipelineInterfaceTestCase : public vkt::TestCase
+{
+public:
+	struct TestParams
+	{
+		InterfaceType	interfaceType;
+	};
+
+							DataSpillPipelineInterfaceTestCase		(tcu::TestContext& testCtx, const std::string& name, const std::string& description, const TestParams& testParams);
+	virtual					~DataSpillPipelineInterfaceTestCase		(void) {}
+
+	virtual void			initPrograms							(vk::SourceCollections& programCollection) const;
+	virtual TestInstance*	createInstance							(Context& context) const;
+	virtual void			checkSupport							(Context& context) const;
+
+private:
+	TestParams				m_params;
+};
+
+class DataSpillPipelineInterfaceTestInstance : public vkt::TestInstance
+{
+public:
+	using TestParams = DataSpillPipelineInterfaceTestCase::TestParams;
+
+						DataSpillPipelineInterfaceTestInstance	(Context& context, const TestParams& testParams);
+						~DataSpillPipelineInterfaceTestInstance	(void) {}
+
+	tcu::TestStatus		iterate									(void);
+
+private:
+	TestParams			m_params;
+};
+
+DataSpillPipelineInterfaceTestCase::DataSpillPipelineInterfaceTestCase (tcu::TestContext& testCtx, const std::string& name, const std::string& description, const TestParams& testParams)
+	: vkt::TestCase	(testCtx, name, description)
+	, m_params		(testParams)
+{
+}
+
+TestInstance* DataSpillPipelineInterfaceTestCase::createInstance (Context& context) const
+{
+	return new DataSpillPipelineInterfaceTestInstance (context, m_params);
+}
+
+DataSpillPipelineInterfaceTestInstance::DataSpillPipelineInterfaceTestInstance (Context& context, const TestParams& testParams)
+	: vkt::TestInstance	(context)
+	, m_params			(testParams)
+{
+}
+
+void DataSpillPipelineInterfaceTestCase::checkSupport (Context& context) const
+{
+	commonCheckSupport(context);
+}
+
+void DataSpillPipelineInterfaceTestCase::initPrograms (vk::SourceCollections& programCollection) const
+{
+	const vk::ShaderBuildOptions buildOptions (programCollection.usedVulkanVersion, vk::SPIRV_VERSION_1_4, 0u, true);
+
+	const std::string glslHeader =
+		"#version 460 core\n"
+		"#extension GL_EXT_ray_tracing : require\n"
+		;
+
+	const std::string glslBindings =
+		"layout(set = 0, binding = 0) uniform accelerationStructureEXT topLevelAS;\n"
+		"layout(set = 0, binding = 1) buffer StorageBlock { uint val[" + std::to_string(kNumStorageValues) + "]; } storageBuffer;\n"
+		;
+
+	if (m_params.interfaceType == InterfaceType::RAY_PAYLOAD)
+	{
+		// The closest hit shader will store 100 in the second array position.
+		// The ray gen shader will store 103 in the first array position using the hitValue after the traceRayExt() call.
+
+		std::ostringstream rgen;
+		rgen
+			<< glslHeader
+			<< "layout(location = 0) rayPayloadEXT vec3 hitValue;\n"
+			<< glslBindings
+			<< "void main()\n"
+			<< "{\n"
+			<< "  hitValue = vec3(10.0, 30.0, 60.0);\n"
+			<< "  traceRayEXT(topLevelAS, 0u, 0xFFu, 0, 0, 0, vec3(0.5, 0.5, 0.0), 0.0, vec3(0.0, 0.0, -1.0), 9.0, 0);\n"
+			<< "  storageBuffer.val[0] = uint(hitValue.x + hitValue.y + hitValue.z);\n"
+			<< "}\n"
+			;
+		programCollection.glslSources.add("rgen") << glu::RaygenSource(updateRayTracingGLSL(rgen.str())) << buildOptions;
+
+		std::stringstream chit;
+		chit
+			<< glslHeader
+			<< "layout(location = 0) rayPayloadInEXT vec3 hitValue;\n"
+			<< "hitAttributeEXT vec3 attribs;\n"
+			<< glslBindings
+			<< "void main()\n"
+			<< "{\n"
+			<< "  storageBuffer.val[1] = uint(hitValue.x + hitValue.y + hitValue.z);\n"
+			<< "  hitValue = vec3(hitValue.x + 1.0, hitValue.y + 1.0, hitValue.z + 1.0);\n"
+			<< "}\n";
+			;
+		programCollection.glslSources.add("chit") << glu::ClosestHitSource(updateRayTracingGLSL(chit.str())) << buildOptions;
+	}
+	else if (m_params.interfaceType == InterfaceType::CALLABLE_DATA)
+	{
+		// The callable shader shader will store 100 in the second array position.
+		// The ray gen shader will store 200 in the first array position using the callable data after the executeCallableEXT() call.
+
+		std::ostringstream rgen;
+		rgen
+			<< glslHeader
+			<< "layout(location = 0) callableDataEXT float callableData;\n"
+			<< glslBindings
+			<< "void main()\n"
+			<< "{\n"
+			<< "  callableData = 100.0;\n"
+			<< "  executeCallableEXT(0, 0);\n"
+			<< "  storageBuffer.val[0] = uint(callableData);\n"
+			<< "}\n"
+			;
+		programCollection.glslSources.add("rgen") << glu::RaygenSource(updateRayTracingGLSL(rgen.str())) << buildOptions;
+
+		std::ostringstream call;
+		call
+			<< glslHeader
+			<< "layout(location = 0) callableDataInEXT float callableData;\n"
+			<< glslBindings
+			<< "void main()\n"
+			<< "{\n"
+			<< "    storageBuffer.val[1] = uint(callableData);\n"
+			<< "    callableData = callableData * 2.0;\n"
+			<< "}\n"
+			;
+
+		programCollection.glslSources.add("call") << glu::CallableSource(updateRayTracingGLSL(call.str())) << buildOptions;
+	}
+	else if (m_params.interfaceType == InterfaceType::HIT_ATTRIBUTES)
+	{
+		// The ray gen shader will store value 300 in the first storage buffer position.
+		// The intersection shader will store value 315 in the second storage buffer position.
+		// The closes hit shader will store value 330 in the third storage buffer position using the hit attributes.
+
+		std::ostringstream rgen;
+		rgen
+			<< glslHeader
+			<< "layout(location = 0) rayPayloadEXT vec3 hitValue;\n"
+			<< glslBindings
+			<< "void main()\n"
+			<< "{\n"
+			<< "  traceRayEXT(topLevelAS, 0u, 0xFFu, 0, 0, 0, vec3(0.5, 0.5, 0.0), 0.0, vec3(0.0, 0.0, -1.0), 9.0, 0);\n"
+			<< "  storageBuffer.val[0] = 300u;\n"
+			<< "}\n"
+			;
+		programCollection.glslSources.add("rgen") << glu::RaygenSource(updateRayTracingGLSL(rgen.str())) << buildOptions;
+
+		std::stringstream rint;
+		rint
+			<< glslHeader
+			<< "hitAttributeEXT vec3 attribs;\n"
+			<< glslBindings
+			<< "void main()\n"
+			<< "{\n"
+			<< "  attribs = vec3(140.0, 160.0, 30.0);\n"
+			<< "  storageBuffer.val[1] = 315u;\n"
+			<< "  reportIntersectionEXT(1.0f, 0);\n"
+			<< "}\n"
+			;
+
+		programCollection.glslSources.add("rint") << glu::IntersectionSource(updateRayTracingGLSL(rint.str())) << buildOptions;
+
+		std::stringstream chit;
+		chit
+			<< glslHeader
+			<< "layout(location = 0) rayPayloadInEXT vec3 hitValue;\n"
+			<< "hitAttributeEXT vec3 attribs;\n"
+			<< glslBindings
+			<< "void main()\n"
+			<< "{\n"
+			<< "  storageBuffer.val[2] = uint(attribs.x + attribs.y + attribs.z);\n"
+			<< "}\n";
+			;
+		programCollection.glslSources.add("chit") << glu::ClosestHitSource(updateRayTracingGLSL(chit.str())) << buildOptions;
+
+	}
+	else if (m_params.interfaceType == InterfaceType::SHADER_RECORD_BUFFER_RGEN)
+	{
+		// The ray gen shader will have a uvec4 in the shader record buffer with contents 400, 401, 402, 403.
+		// The shader will call a callable shader indicating a position in that vec4 (0, 1, 2, 3). For example, let's use position 1.
+		// The callable shader will return the indicated position+1 modulo 4, so it will return 2 in our case.
+		// *After* returning from the callable shader, the raygen shader will use that reply to access position 2 and write a 402 in the first output buffer position.
+		// The callable shader will store 450 in the second output buffer position.
+
+		std::ostringstream rgen;
+		rgen
+			<< glslHeader
+			<< "layout(shaderRecordEXT) buffer ShaderRecordStruct {\n"
+			<< "  uvec4 info;\n"
+			<< "};\n"
+			<< "layout(location = 0) callableDataEXT uint callableData;\n"
+			<< glslBindings
+			<< "void main()\n"
+			<< "{\n"
+			<< "  callableData = 1u;"
+			<< "  executeCallableEXT(0, 0);\n"
+			<< "  if      (callableData == 0u) storageBuffer.val[0] = info.x;\n"
+			<< "  else if (callableData == 1u) storageBuffer.val[0] = info.y;\n"
+			<< "  else if (callableData == 2u) storageBuffer.val[0] = info.z;\n"
+			<< "  else if (callableData == 3u) storageBuffer.val[0] = info.w;\n"
+			<< "}\n"
+			;
+		programCollection.glslSources.add("rgen") << glu::RaygenSource(updateRayTracingGLSL(rgen.str())) << buildOptions;
+
+		std::ostringstream call;
+		call
+			<< glslHeader
+			<< "layout(location = 0) callableDataInEXT uint callableData;\n"
+			<< glslBindings
+			<< "void main()\n"
+			<< "{\n"
+			<< "    storageBuffer.val[1] = 450u;\n"
+			<< "    callableData = (callableData + 1u) % 4u;\n"
+			<< "}\n"
+			;
+
+		programCollection.glslSources.add("call") << glu::CallableSource(updateRayTracingGLSL(call.str())) << buildOptions;
+	}
+	else if (m_params.interfaceType == InterfaceType::SHADER_RECORD_BUFFER_CALL)
+	{
+		// Similar to the previous case, with a twist:
+		//   * rgen passes the vector position.
+		//   * call increases that by one.
+		//   * subcall increases again and does the modulo operation, also writing 450 in the third output buffer value.
+		//   * call is the one accessing the vector at the returned position, writing 403 in this case to the second output buffer value.
+		//   * call passes this value back doubled to rgen, which writes it to the first output buffer value (806).
+
+		std::ostringstream rgen;
+		rgen
+			<< glslHeader
+			<< "layout(location = 0) callableDataEXT uint callableData;\n"
+			<< glslBindings
+			<< "void main()\n"
+			<< "{\n"
+			<< "  callableData = 1u;\n"
+			<< "  executeCallableEXT(0, 0);\n"
+			<< "  storageBuffer.val[0] = callableData;\n"
+			<< "}\n"
+			;
+		programCollection.glslSources.add("rgen") << glu::RaygenSource(updateRayTracingGLSL(rgen.str())) << buildOptions;
+
+		std::ostringstream call;
+		call
+			<< glslHeader
+			<< "layout(shaderRecordEXT) buffer ShaderRecordStruct {\n"
+			<< "  uvec4 info;\n"
+			<< "};\n"
+			<< "layout(location = 0) callableDataInEXT uint callableDataIn;\n"
+			<< "layout(location = 1) callableDataEXT uint callableDataOut;\n"
+			<< glslBindings
+			<< "void main()\n"
+			<< "{\n"
+			<< "  callableDataOut = callableDataIn + 1u;\n"
+			<< "  executeCallableEXT(1, 1);\n"
+			<< "  uint outputBufferValue = 777u;\n"
+			<< "  if      (callableDataOut == 0u) outputBufferValue = info.x;\n"
+			<< "  else if (callableDataOut == 1u) outputBufferValue = info.y;\n"
+			<< "  else if (callableDataOut == 2u) outputBufferValue = info.z;\n"
+			<< "  else if (callableDataOut == 3u) outputBufferValue = info.w;\n"
+			<< "  storageBuffer.val[1] = outputBufferValue;\n"
+			<< "  callableDataIn = outputBufferValue * 2u;\n"
+			<< "}\n"
+			;
+
+		programCollection.glslSources.add("call") << glu::CallableSource(updateRayTracingGLSL(call.str())) << buildOptions;
+
+		std::ostringstream subcall;
+		subcall
+			<< glslHeader
+			<< "layout(location = 1) callableDataInEXT uint callableData;\n"
+			<< glslBindings
+			<< "void main()\n"
+			<< "{\n"
+			<< "  callableData = (callableData + 1u) % 4u;\n"
+			<< "  storageBuffer.val[2] = 450u;\n"
+			<< "}\n"
+			;
+
+		programCollection.glslSources.add("subcall") << glu::CallableSource(updateRayTracingGLSL(subcall.str())) << buildOptions;
+	}
+	else if (m_params.interfaceType == InterfaceType::SHADER_RECORD_BUFFER_MISS || m_params.interfaceType == InterfaceType::SHADER_RECORD_BUFFER_HIT)
+	{
+		// Similar to the previous one, but the intermediate call shader has been replaced with a miss or closest hit shader.
+		// The rgen shader will communicate with the miss/chit shader using the ray payload instead of the callable data.
+		// Also, the initial position will be 2, so it will wrap around in this case. The numbers will also change.
+
+		std::ostringstream rgen;
+		rgen
+			<< glslHeader
+			<< "layout(location = 0) rayPayloadEXT uint rayPayload;\n"
+			<< glslBindings
+			<< "void main()\n"
+			<< "{\n"
+			<< "  rayPayload = 2u;\n"
+			<< "  traceRayEXT(topLevelAS, 0u, 0xFFu, 0, 0, 0, vec3(0.5, 0.5, 0.0), 0.0, vec3(0.0, 0.0, -1.0), 9.0, 0);\n"
+			<< "  storageBuffer.val[0] = rayPayload;\n"
+			<< "}\n"
+			;
+		programCollection.glslSources.add("rgen") << glu::RaygenSource(updateRayTracingGLSL(rgen.str())) << buildOptions;
+
+		std::ostringstream chitOrMiss;
+		chitOrMiss
+			<< glslHeader
+			<< "layout(shaderRecordEXT) buffer ShaderRecordStruct {\n"
+			<< "  uvec4 info;\n"
+			<< "};\n"
+			<< "layout(location = 0) rayPayloadInEXT uint rayPayload;\n"
+			<< "layout(location = 0) callableDataEXT uint callableData;\n"
+			<< glslBindings
+			<< "void main()\n"
+			<< "{\n"
+			<< "  callableData = rayPayload + 1u;\n"
+			<< "  executeCallableEXT(0, 0);\n"
+			<< "  uint outputBufferValue = 777u;\n"
+			<< "  if      (callableData == 0u) outputBufferValue = info.x;\n"
+			<< "  else if (callableData == 1u) outputBufferValue = info.y;\n"
+			<< "  else if (callableData == 2u) outputBufferValue = info.z;\n"
+			<< "  else if (callableData == 3u) outputBufferValue = info.w;\n"
+			<< "  storageBuffer.val[1] = outputBufferValue;\n"
+			<< "  rayPayload = outputBufferValue * 3u;\n"
+			<< "}\n"
+			;
+
+		if (m_params.interfaceType == InterfaceType::SHADER_RECORD_BUFFER_MISS)
+			programCollection.glslSources.add("miss") << glu::MissSource(updateRayTracingGLSL(chitOrMiss.str())) << buildOptions;
+		else if (m_params.interfaceType == InterfaceType::SHADER_RECORD_BUFFER_HIT)
+			programCollection.glslSources.add("chit") << glu::ClosestHitSource(updateRayTracingGLSL(chitOrMiss.str())) << buildOptions;
+		else
+			DE_ASSERT(false);
+
+		std::ostringstream call;
+		call
+			<< glslHeader
+			<< "layout(location = 0) callableDataInEXT uint callableData;\n"
+			<< glslBindings
+			<< "void main()\n"
+			<< "{\n"
+			<< "    storageBuffer.val[2] = 490u;\n"
+			<< "    callableData = (callableData + 1u) % 4u;\n"
+			<< "}\n"
+			;
+
+		programCollection.glslSources.add("call") << glu::CallableSource(updateRayTracingGLSL(call.str())) << buildOptions;
+	}
+	else
+	{
+		DE_ASSERT(false);
+	}
+}
+
+VkShaderStageFlags getShaderStages (InterfaceType type_)
+{
+	VkShaderStageFlags flags = VK_SHADER_STAGE_RAYGEN_BIT_KHR;
+
+	switch (type_)
+	{
+	case InterfaceType::HIT_ATTRIBUTES:
+		flags |= VK_SHADER_STAGE_INTERSECTION_BIT_KHR;
+		// fallthrough.
+	case InterfaceType::RAY_PAYLOAD:
+		flags |= VK_SHADER_STAGE_CLOSEST_HIT_BIT_KHR;
+		break;
+	case InterfaceType::CALLABLE_DATA:
+	case InterfaceType::SHADER_RECORD_BUFFER_RGEN:
+	case InterfaceType::SHADER_RECORD_BUFFER_CALL:
+		flags |= VK_SHADER_STAGE_CALLABLE_BIT_KHR;
+		break;
+	case InterfaceType::SHADER_RECORD_BUFFER_MISS:
+		flags |= VK_SHADER_STAGE_CALLABLE_BIT_KHR;
+		flags |= VK_SHADER_STAGE_MISS_BIT_KHR;
+		break;
+	case InterfaceType::SHADER_RECORD_BUFFER_HIT:
+		flags |= VK_SHADER_STAGE_CALLABLE_BIT_KHR;
+		flags |= VK_SHADER_STAGE_CLOSEST_HIT_BIT_KHR;
+		break;
+	default:
+		DE_ASSERT(false);
+		break;
+	}
+
+	return flags;
+}
+
+// Proper stage for generating default geometry.
+VkShaderStageFlagBits getShaderStageForGeometry (InterfaceType type_)
+{
+	VkShaderStageFlagBits bits = VK_SHADER_STAGE_FLAG_BITS_MAX_ENUM;
+
+	switch (type_)
+	{
+	case InterfaceType::HIT_ATTRIBUTES:				bits = VK_SHADER_STAGE_INTERSECTION_BIT_KHR;	break;
+	case InterfaceType::RAY_PAYLOAD:				bits = VK_SHADER_STAGE_CLOSEST_HIT_BIT_KHR;		break;
+	case InterfaceType::CALLABLE_DATA:				bits = VK_SHADER_STAGE_CALLABLE_BIT_KHR;		break;
+	case InterfaceType::SHADER_RECORD_BUFFER_RGEN:	bits = VK_SHADER_STAGE_CALLABLE_BIT_KHR;		break;
+	case InterfaceType::SHADER_RECORD_BUFFER_CALL:	bits = VK_SHADER_STAGE_CALLABLE_BIT_KHR;		break;
+	case InterfaceType::SHADER_RECORD_BUFFER_MISS:	bits = VK_SHADER_STAGE_MISS_BIT_KHR;			break;
+	case InterfaceType::SHADER_RECORD_BUFFER_HIT:	bits = VK_SHADER_STAGE_CLOSEST_HIT_BIT_KHR;		break;
+	default: DE_ASSERT(false); break;
+	}
+
+	DE_ASSERT(bits != VK_SHADER_STAGE_FLAG_BITS_MAX_ENUM);
+	return bits;
+}
+
+void createSBTWithShaderRecord (const DeviceInterface& vkd, VkDevice device, vk::Allocator &alloc,
+								VkPipeline pipeline, RayTracingPipeline* rayTracingPipeline,
+								deUint32 shaderGroupHandleSize, deUint32 shaderGroupBaseAlignment,
+								deUint32 firstGroup, deUint32 groupCount,
+								de::MovePtr<BufferWithMemory>& shaderBindingTable,
+								VkStridedDeviceAddressRegionKHR& shaderBindingTableRegion)
+{
+	const auto alignedSize		= de::roundUp(shaderGroupHandleSize + kShaderRecordSize, shaderGroupHandleSize);
+	shaderBindingTable			= rayTracingPipeline->createShaderBindingTable(vkd, device, pipeline, alloc, shaderGroupHandleSize, shaderGroupBaseAlignment, firstGroup, groupCount, 0u, 0u, MemoryRequirement::Any, 0u, 0u, kShaderRecordSize);
+	shaderBindingTableRegion	= makeStridedDeviceAddressRegionKHR(getBufferDeviceAddress(vkd, device, shaderBindingTable->get(), 0), alignedSize, groupCount * alignedSize);
+
+	// Fill shader record buffer data.
+	// Note we will only fill the first shader record after the handle.
+	const tcu::UVec4	shaderRecordData	(400u, 401u, 402u, 403u);
+	auto&				sbtAlloc			= shaderBindingTable->getAllocation();
+	auto*				dataPtr				= reinterpret_cast<deUint8*>(sbtAlloc.getHostPtr()) + shaderGroupHandleSize;
+
+	DE_STATIC_ASSERT(sizeof(shaderRecordData) == static_cast<size_t>(kShaderRecordSize));
+	deMemcpy(dataPtr, &shaderRecordData, sizeof(shaderRecordData));
+}
+
+tcu::TestStatus DataSpillPipelineInterfaceTestInstance::iterate (void)
+{
+	const auto& vki						= m_context.getInstanceInterface();
+	const auto	physicalDevice			= m_context.getPhysicalDevice();
+	const auto&	vkd						= m_context.getDeviceInterface();
+	const auto	device					= m_context.getDevice();
+	const auto	queue					= m_context.getUniversalQueue();
+	const auto	familyIndex				= m_context.getUniversalQueueFamilyIndex();
+	auto&		alloc					= m_context.getDefaultAllocator();
+	const auto	shaderStages			= getShaderStages(m_params.interfaceType);
+
+	// Command buffer.
+	const auto cmdPool		= makeCommandPool(vkd, device, familyIndex);
+	const auto cmdBufferPtr	= allocateCommandBuffer(vkd, device, cmdPool.get(), VK_COMMAND_BUFFER_LEVEL_PRIMARY);
+	const auto cmdBuffer	= cmdBufferPtr.get();
+
+	beginCommandBuffer(vkd, cmdBuffer);
+
+	// Storage buffer.
+	std::array<deUint32, kNumStorageValues>	storageBufferData;
+	const auto								storageBufferSize	= de::dataSize(storageBufferData);
+	const auto								storagebufferInfo	= makeBufferCreateInfo(storageBufferSize, VK_BUFFER_USAGE_STORAGE_BUFFER_BIT);
+	BufferWithMemory						storageBuffer		(vkd, device, alloc, storagebufferInfo, MemoryRequirement::HostVisible);
+
+	// Zero-out buffer.
+	auto& storageBufferAlloc	= storageBuffer.getAllocation();
+	auto* storageBufferPtr		= storageBufferAlloc.getHostPtr();
+	deMemset(storageBufferPtr, 0, storageBufferSize);
+	flushAlloc(vkd, device, storageBufferAlloc);
+
+	// Acceleration structures.
+	de::MovePtr<BottomLevelAccelerationStructure>	bottomLevelAccelerationStructure;
+	de::MovePtr<TopLevelAccelerationStructure>		topLevelAccelerationStructure;
+
+	bottomLevelAccelerationStructure = makeBottomLevelAccelerationStructure();
+	bottomLevelAccelerationStructure->setDefaultGeometryData(getShaderStageForGeometry(m_params.interfaceType), VK_GEOMETRY_NO_DUPLICATE_ANY_HIT_INVOCATION_BIT_KHR);
+	bottomLevelAccelerationStructure->createAndBuild(vkd, device, cmdBuffer, alloc);
+
+	topLevelAccelerationStructure = makeTopLevelAccelerationStructure();
+	topLevelAccelerationStructure->setInstanceCount(1);
+	topLevelAccelerationStructure->addInstance(de::SharedPtr<BottomLevelAccelerationStructure>(bottomLevelAccelerationStructure.release()));
+	topLevelAccelerationStructure->createAndBuild(vkd, device, cmdBuffer, alloc);
+
+	// Get some ray tracing properties.
+	deUint32 shaderGroupHandleSize		= 0u;
+	deUint32 shaderGroupBaseAlignment	= 1u;
+	{
+		const auto rayTracingPropertiesKHR	= makeRayTracingProperties(vki, physicalDevice);
+		shaderGroupHandleSize				= rayTracingPropertiesKHR->getShaderGroupHandleSize();
+		shaderGroupBaseAlignment			= rayTracingPropertiesKHR->getShaderGroupBaseAlignment();
+	}
+
+	// Descriptor set layout.
+	DescriptorSetLayoutBuilder dslBuilder;
+	dslBuilder.addBinding(VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR, 1u, shaderStages, nullptr);
+	dslBuilder.addBinding(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, 1u, shaderStages, nullptr);	// Callee buffer.
+	const auto descriptorSetLayout = dslBuilder.build(vkd, device);
+
+	// Pipeline layout.
+	const auto pipelineLayout = makePipelineLayout(vkd, device, descriptorSetLayout.get());
+
+	// Descriptor pool and set.
+	DescriptorPoolBuilder poolBuilder;
+	poolBuilder.addType(VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR);
+	poolBuilder.addType(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER);
+	const auto descriptorPool	= poolBuilder.build(vkd, device, VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT, 1u);
+	const auto descriptorSet	= makeDescriptorSet(vkd, device, descriptorPool.get(), descriptorSetLayout.get());
+
+	// Update descriptor set.
+	{
+		const VkWriteDescriptorSetAccelerationStructureKHR writeASInfo =
+		{
+			VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR,
+			nullptr,
+			1u,
+			topLevelAccelerationStructure.get()->getPtr(),
+		};
+
+		const auto	ds							= descriptorSet.get();
+		const auto	storageBufferDescriptorInfo	= makeDescriptorBufferInfo(storageBuffer.get(), 0ull, VK_WHOLE_SIZE);
+
+		DescriptorSetUpdateBuilder updateBuilder;
+		updateBuilder.writeSingle(ds, DescriptorSetUpdateBuilder::Location::binding(0u), VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR, &writeASInfo);
+		updateBuilder.writeSingle(ds, DescriptorSetUpdateBuilder::Location::binding(1u), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, &storageBufferDescriptorInfo);
+		updateBuilder.update(vkd, device);
+	}
+
+	// Create raytracing pipeline and shader binding tables.
+	const auto						interfaceType	= m_params.interfaceType;
+	Move<VkPipeline>				pipeline;
+
+	de::MovePtr<BufferWithMemory>	raygenShaderBindingTable;
+	de::MovePtr<BufferWithMemory>	missShaderBindingTable;
+	de::MovePtr<BufferWithMemory>	hitShaderBindingTable;
+	de::MovePtr<BufferWithMemory>	callableShaderBindingTable;
+
+	VkStridedDeviceAddressRegionKHR	raygenShaderBindingTableRegion		= makeStridedDeviceAddressRegionKHR(DE_NULL, 0, 0);
+	VkStridedDeviceAddressRegionKHR	missShaderBindingTableRegion		= makeStridedDeviceAddressRegionKHR(DE_NULL, 0, 0);
+	VkStridedDeviceAddressRegionKHR	hitShaderBindingTableRegion			= makeStridedDeviceAddressRegionKHR(DE_NULL, 0, 0);
+	VkStridedDeviceAddressRegionKHR	callableShaderBindingTableRegion	= makeStridedDeviceAddressRegionKHR(DE_NULL, 0, 0);
+
+	{
+		const auto rayTracingPipeline = de::newMovePtr<RayTracingPipeline>();
+
+		// Every case uses a ray generation shader.
+		rayTracingPipeline->addShader(VK_SHADER_STAGE_RAYGEN_BIT_KHR, createShaderModule(vkd, device, m_context.getBinaryCollection().get("rgen"), 0), 0);
+
+		if (interfaceType == InterfaceType::RAY_PAYLOAD)
+		{
+			rayTracingPipeline->addShader(VK_SHADER_STAGE_CLOSEST_HIT_BIT_KHR, createShaderModule(vkd, device, m_context.getBinaryCollection().get("chit"), 0), 1);
+		}
+		else if (interfaceType == InterfaceType::CALLABLE_DATA || interfaceType == InterfaceType::SHADER_RECORD_BUFFER_RGEN)
+		{
+			rayTracingPipeline->addShader(VK_SHADER_STAGE_CALLABLE_BIT_KHR, createShaderModule(vkd, device, m_context.getBinaryCollection().get("call"), 0), 1);
+		}
+		else if (interfaceType == InterfaceType::HIT_ATTRIBUTES)
+		{
+			rayTracingPipeline->addShader(VK_SHADER_STAGE_INTERSECTION_BIT_KHR, createShaderModule(vkd, device, m_context.getBinaryCollection().get("rint"), 0), 1);
+			rayTracingPipeline->addShader(VK_SHADER_STAGE_CLOSEST_HIT_BIT_KHR, createShaderModule(vkd, device, m_context.getBinaryCollection().get("chit"), 0), 1);
+		}
+		else if (interfaceType == InterfaceType::SHADER_RECORD_BUFFER_CALL)
+		{
+			rayTracingPipeline->addShader(VK_SHADER_STAGE_CALLABLE_BIT_KHR, createShaderModule(vkd, device, m_context.getBinaryCollection().get("call"), 0), 1);
+			rayTracingPipeline->addShader(VK_SHADER_STAGE_CALLABLE_BIT_KHR, createShaderModule(vkd, device, m_context.getBinaryCollection().get("subcall"), 0), 2);
+		}
+		else if (interfaceType == InterfaceType::SHADER_RECORD_BUFFER_MISS)
+		{
+			rayTracingPipeline->addShader(VK_SHADER_STAGE_MISS_BIT_KHR, createShaderModule(vkd, device, m_context.getBinaryCollection().get("miss"), 0), 1);
+			rayTracingPipeline->addShader(VK_SHADER_STAGE_CALLABLE_BIT_KHR, createShaderModule(vkd, device, m_context.getBinaryCollection().get("call"), 0), 2);
+		}
+		else if (interfaceType == InterfaceType::SHADER_RECORD_BUFFER_HIT)
+		{
+			rayTracingPipeline->addShader(VK_SHADER_STAGE_CLOSEST_HIT_BIT_KHR, createShaderModule(vkd, device, m_context.getBinaryCollection().get("chit"), 0), 1);
+			rayTracingPipeline->addShader(VK_SHADER_STAGE_CALLABLE_BIT_KHR, createShaderModule(vkd, device, m_context.getBinaryCollection().get("call"), 0), 2);
+		}
+		else
+		{
+			DE_ASSERT(false);
+		}
+
+		pipeline = rayTracingPipeline->createPipeline(vkd, device, pipelineLayout.get());
+
+		if (interfaceType == InterfaceType::SHADER_RECORD_BUFFER_RGEN)
+		{
+			createSBTWithShaderRecord (vkd, device, alloc, pipeline.get(), rayTracingPipeline.get(), shaderGroupHandleSize, shaderGroupBaseAlignment,
+									   0u, 1u, raygenShaderBindingTable, raygenShaderBindingTableRegion);
+		}
+		else
+		{
+			raygenShaderBindingTable		= rayTracingPipeline->createShaderBindingTable(vkd, device, pipeline.get(), alloc, shaderGroupHandleSize, shaderGroupBaseAlignment, 0, 1);
+			raygenShaderBindingTableRegion	= makeStridedDeviceAddressRegionKHR(getBufferDeviceAddress(vkd, device, raygenShaderBindingTable->get(), 0), shaderGroupHandleSize, shaderGroupHandleSize);
+		}
+
+
+		if (interfaceType == InterfaceType::CALLABLE_DATA || interfaceType == InterfaceType::SHADER_RECORD_BUFFER_RGEN)
+		{
+			callableShaderBindingTable			= rayTracingPipeline->createShaderBindingTable(vkd, device, pipeline.get(), alloc, shaderGroupHandleSize, shaderGroupBaseAlignment, 1, 1);
+			callableShaderBindingTableRegion	= makeStridedDeviceAddressRegionKHR(getBufferDeviceAddress(vkd, device, callableShaderBindingTable->get(), 0), shaderGroupHandleSize, shaderGroupHandleSize);
+		}
+		else if (interfaceType == InterfaceType::RAY_PAYLOAD || interfaceType == InterfaceType::HIT_ATTRIBUTES)
+		{
+			hitShaderBindingTable			= rayTracingPipeline->createShaderBindingTable(vkd, device, pipeline.get(), alloc, shaderGroupHandleSize, shaderGroupBaseAlignment, 1, 1);
+			hitShaderBindingTableRegion		= makeStridedDeviceAddressRegionKHR(getBufferDeviceAddress(vkd, device, hitShaderBindingTable->get(), 0), shaderGroupHandleSize, shaderGroupHandleSize);
+		}
+		else if (interfaceType == InterfaceType::SHADER_RECORD_BUFFER_CALL)
+		{
+			createSBTWithShaderRecord (vkd, device, alloc, pipeline.get(), rayTracingPipeline.get(), shaderGroupHandleSize, shaderGroupBaseAlignment,
+									   1u, 2u, callableShaderBindingTable, callableShaderBindingTableRegion);
+		}
+		else if (interfaceType == InterfaceType::SHADER_RECORD_BUFFER_MISS)
+		{
+			createSBTWithShaderRecord (vkd, device, alloc, pipeline.get(), rayTracingPipeline.get(), shaderGroupHandleSize, shaderGroupBaseAlignment,
+									   1u, 1u, missShaderBindingTable, missShaderBindingTableRegion);
+
+			// Callable shader table.
+			callableShaderBindingTable			= rayTracingPipeline->createShaderBindingTable(vkd, device, pipeline.get(), alloc, shaderGroupHandleSize, shaderGroupBaseAlignment, 2, 1);
+			callableShaderBindingTableRegion	= makeStridedDeviceAddressRegionKHR(getBufferDeviceAddress(vkd, device, callableShaderBindingTable->get(), 0), shaderGroupHandleSize, shaderGroupHandleSize);
+		}
+		else if (interfaceType == InterfaceType::SHADER_RECORD_BUFFER_HIT)
+		{
+			createSBTWithShaderRecord (vkd, device, alloc, pipeline.get(), rayTracingPipeline.get(), shaderGroupHandleSize, shaderGroupBaseAlignment,
+									   1u, 1u, hitShaderBindingTable, hitShaderBindingTableRegion);
+
+			// Callable shader table.
+			callableShaderBindingTable			= rayTracingPipeline->createShaderBindingTable(vkd, device, pipeline.get(), alloc, shaderGroupHandleSize, shaderGroupBaseAlignment, 2, 1);
+			callableShaderBindingTableRegion	= makeStridedDeviceAddressRegionKHR(getBufferDeviceAddress(vkd, device, callableShaderBindingTable->get(), 0), shaderGroupHandleSize, shaderGroupHandleSize);
+		}
+		else
+		{
+			DE_ASSERT(false);
+		}
+	}
+
+	// Use ray tracing pipeline.
+	vkd.cmdBindPipeline(cmdBuffer, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, pipeline.get());
+	vkd.cmdBindDescriptorSets(cmdBuffer, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, pipelineLayout.get(), 0u, 1u, &descriptorSet.get(), 0u, nullptr);
+	vkd.cmdTraceRaysKHR(cmdBuffer, &raygenShaderBindingTableRegion, &missShaderBindingTableRegion, &hitShaderBindingTableRegion, &callableShaderBindingTableRegion, 1u, 1u, 1u);
+
+	// Synchronize output and callee buffers.
+	const auto memBarrier = makeMemoryBarrier(VK_ACCESS_SHADER_WRITE_BIT, VK_ACCESS_HOST_READ_BIT);
+	vkd.cmdPipelineBarrier(cmdBuffer, VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR, VK_PIPELINE_STAGE_HOST_BIT, 0u, 1u, &memBarrier, 0u, nullptr, 0u, nullptr);
+
+	endCommandBuffer(vkd, cmdBuffer);
+	submitCommandsAndWait(vkd, device, queue, cmdBuffer);
+
+	// Verify storage buffer.
+	invalidateAlloc(vkd, device, storageBufferAlloc);
+	deMemcpy(storageBufferData.data(), storageBufferPtr, storageBufferSize);
+
+	// These values must match what the shaders store.
+	std::vector<deUint32> expectedData;
+	if (interfaceType == InterfaceType::RAY_PAYLOAD)
+	{
+		expectedData.push_back(103u);
+		expectedData.push_back(100u);
+	}
+	else if (interfaceType == InterfaceType::CALLABLE_DATA)
+	{
+		expectedData.push_back(200u);
+		expectedData.push_back(100u);
+	}
+	else if (interfaceType == InterfaceType::HIT_ATTRIBUTES)
+	{
+		expectedData.push_back(300u);
+		expectedData.push_back(315u);
+		expectedData.push_back(330u);
+	}
+	else if (interfaceType == InterfaceType::SHADER_RECORD_BUFFER_RGEN)
+	{
+		expectedData.push_back(402u);
+		expectedData.push_back(450u);
+	}
+	else if (interfaceType == InterfaceType::SHADER_RECORD_BUFFER_CALL)
+	{
+		expectedData.push_back(806u);
+		expectedData.push_back(403u);
+		expectedData.push_back(450u);
+	}
+	else if (interfaceType == InterfaceType::SHADER_RECORD_BUFFER_MISS || interfaceType == InterfaceType::SHADER_RECORD_BUFFER_HIT)
+	{
+		expectedData.push_back(1200u);
+		expectedData.push_back( 400u);
+		expectedData.push_back( 490u);
+	}
+	else
+	{
+		DE_ASSERT(false);
+	}
+
+	size_t pos;
+	for (pos = 0u; pos < expectedData.size(); ++pos)
+	{
+		const auto& stored		= storageBufferData.at(pos);
+		const auto& expected	= expectedData.at(pos);
+		if (stored != expected)
+		{
+			std::ostringstream msg;
+			msg << "Unexpected output value found at position " << pos << " (expected " << expected << " but got " << stored << ")";
+			return tcu::TestStatus::fail(msg.str());
+		}
+	}
+
+	// Expect zeros in unused positions, as filled on the host.
+	for (; pos < storageBufferData.size(); ++pos)
+	{
+		const auto& stored = storageBufferData.at(pos);
+		if (stored != 0u)
+		{
+			std::ostringstream msg;
+			msg << "Unexpected output value found at position " << pos << " (expected 0 but got " << stored << ")";
+			return tcu::TestStatus::fail(msg.str());
+		}
+	}
+
+	return tcu::TestStatus::pass("Pass");
+}
+
+} // anonymous namespace
+
+tcu::TestCaseGroup*	createDataSpillTests(tcu::TestContext& testCtx)
+{
+	de::MovePtr<tcu::TestCaseGroup> group(new tcu::TestCaseGroup(testCtx, "data_spill", "Ray tracing tests for data spilling and unspilling around shader calls"));
+
+	struct
+	{
+		CallType callType;
+		const char* name;
+	} callTypes[] =
+	{
+		{ CallType::EXECUTE_CALLABLE,		"execute_callable"		},
+		{ CallType::TRACE_RAY,				"trace_ray"				},
+		{ CallType::REPORT_INTERSECTION,	"report_intersection"	},
+	};
+
+	struct
+	{
+		DataType dataType;
+		const char* name;
+	} dataTypes[] =
+	{
+		{ DataType::INT32,				"int32"			},
+		{ DataType::UINT32,				"uint32"		},
+		{ DataType::INT64,				"int64"			},
+		{ DataType::UINT64,				"uint64"		},
+		{ DataType::INT16,				"int16"			},
+		{ DataType::UINT16,				"uint16"		},
+		{ DataType::INT8,				"int8"			},
+		{ DataType::UINT8,				"uint8"			},
+		{ DataType::FLOAT32,			"float32"		},
+		{ DataType::FLOAT64,			"float64"		},
+		{ DataType::FLOAT16,			"float16"		},
+		{ DataType::STRUCT,				"struct"		},
+		{ DataType::SAMPLER,			"sampler"		},
+		{ DataType::IMAGE,				"image"			},
+		{ DataType::SAMPLED_IMAGE,		"combined"		},
+		{ DataType::PTR_IMAGE,			"ptr_image"		},
+		{ DataType::PTR_SAMPLER,		"ptr_sampler"	},
+		{ DataType::PTR_SAMPLED_IMAGE,	"ptr_combined"	},
+		{ DataType::PTR_TEXEL,			"ptr_texel"		},
+		{ DataType::OP_NULL,			"op_null"		},
+		{ DataType::OP_UNDEF,			"op_undef"		},
+	};
+
+	struct
+	{
+		VectorType vectorType;
+		const char* prefix;
+	} vectorTypes[] =
+	{
+		{ VectorType::SCALAR,	""		},
+		{ VectorType::V2,		"v2"	},
+		{ VectorType::V3,		"v3"	},
+		{ VectorType::V4,		"v4"	},
+		{ VectorType::A5,		"a5"	},
+	};
+
+	for (int callTypeIdx = 0; callTypeIdx < DE_LENGTH_OF_ARRAY(callTypes); ++callTypeIdx)
+	{
+		const auto& entryCallTypes = callTypes[callTypeIdx];
+
+		de::MovePtr<tcu::TestCaseGroup> callTypeGroup(new tcu::TestCaseGroup(testCtx, entryCallTypes.name, ""));
+		for (int dataTypeIdx = 0; dataTypeIdx < DE_LENGTH_OF_ARRAY(dataTypes); ++dataTypeIdx)
+		{
+			const auto& entryDataTypes = dataTypes[dataTypeIdx];
+
+			for (int vectorTypeIdx = 0; vectorTypeIdx < DE_LENGTH_OF_ARRAY(vectorTypes); ++vectorTypeIdx)
+			{
+				const auto& entryVectorTypes = vectorTypes[vectorTypeIdx];
+
+				if ((samplersNeeded(entryDataTypes.dataType)
+					 || storageImageNeeded(entryDataTypes.dataType)
+					 || entryDataTypes.dataType == DataType::STRUCT
+					 || entryDataTypes.dataType == DataType::OP_NULL
+					 || entryDataTypes.dataType == DataType::OP_UNDEF)
+					&& entryVectorTypes.vectorType != VectorType::SCALAR)
+				{
+					continue;
+				}
+
+				DataSpillTestCase::TestParams params;
+				params.callType		= entryCallTypes.callType;
+				params.dataType		= entryDataTypes.dataType;
+				params.vectorType	= entryVectorTypes.vectorType;
+
+				const auto testName = std::string(entryVectorTypes.prefix) + entryDataTypes.name;
+
+				callTypeGroup->addChild(new DataSpillTestCase(testCtx, testName, "", params));
+			}
+		}
+
+		group->addChild(callTypeGroup.release());
+	}
+
+	// Pipeline interface tests.
+	de::MovePtr<tcu::TestCaseGroup> pipelineInterfaceGroup(new tcu::TestCaseGroup(testCtx, "pipeline_interface", "Test data spilling and unspilling of pipeline interface variables"));
+
+	struct
+	{
+		InterfaceType	interfaceType;
+		const char*		name;
+	} interfaceTypes[] =
+	{
+		{ InterfaceType::RAY_PAYLOAD,				"ray_payload"				},
+		{ InterfaceType::CALLABLE_DATA,				"callable_data"				},
+		{ InterfaceType::HIT_ATTRIBUTES,			"hit_attributes"			},
+		{ InterfaceType::SHADER_RECORD_BUFFER_RGEN,	"shader_record_buffer_rgen"	},
+		{ InterfaceType::SHADER_RECORD_BUFFER_CALL,	"shader_record_buffer_call"	},
+		{ InterfaceType::SHADER_RECORD_BUFFER_MISS,	"shader_record_buffer_miss"	},
+		{ InterfaceType::SHADER_RECORD_BUFFER_HIT,	"shader_record_buffer_hit"	},
+	};
+
+	for (int idx = 0; idx < DE_LENGTH_OF_ARRAY(interfaceTypes); ++idx)
+	{
+		const auto&										entry	= interfaceTypes[idx];
+		DataSpillPipelineInterfaceTestCase::TestParams	params;
+
+		params.interfaceType = entry.interfaceType;
+
+		pipelineInterfaceGroup->addChild(new DataSpillPipelineInterfaceTestCase(testCtx, entry.name, "", params));
+	}
+
+	group->addChild(pipelineInterfaceGroup.release());
+
+	return group.release();
+}
+
+} // RayTracing
+} // vkt
+
diff --git a/external/vulkancts/modules/vulkan/pipeline/vktPipelineVertexOnlyTests.hpp b/external/vulkancts/modules/vulkan/ray_tracing/vktRayTracingDataSpillTests.hpp
similarity index 69%
copy from external/vulkancts/modules/vulkan/pipeline/vktPipelineVertexOnlyTests.hpp
copy to external/vulkancts/modules/vulkan/ray_tracing/vktRayTracingDataSpillTests.hpp
index 1a85ebf..e9c61cc 100644
--- a/external/vulkancts/modules/vulkan/pipeline/vktPipelineVertexOnlyTests.hpp
+++ b/external/vulkancts/modules/vulkan/ray_tracing/vktRayTracingDataSpillTests.hpp
@@ -1,11 +1,11 @@
-#ifndef _VKTPIPELINEVERTEXONLYTESTS_HPP
-#define _VKTPIPELINEVERTEXONLYTESTS_HPP
-/*------------------------------------------------------------------------
+#ifndef _VKTRAYTRACINGDATASPILLTESTS_HPP
+#define _VKTRAYTRACINGDATASPILLTESTS_HPP
+/*-------------------------------------------------------------------------
  * Vulkan Conformance Tests
  * ------------------------
  *
- * Copyright (c) 2019 Google LLC
- * Copyright (c) 2019 The Khronos Group Inc.
+ * Copyright (c) 2020 The Khronos Group Inc.
+ * Copyright (c) 2020 Valve Corporation.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -21,7 +21,7 @@
  *
  *//*!
  * \file
- * \brief Tests using only vertex shader in a graphics pipeline
+ * \brief Ray Tracing Data Spill tests
  *//*--------------------------------------------------------------------*/
 
 #include "tcuDefs.hpp"
@@ -29,12 +29,12 @@
 
 namespace vkt
 {
-namespace pipeline
+namespace RayTracing
 {
 
-tcu::TestCaseGroup*	createVertexOnlyTests (tcu::TestContext& testCtx);
+tcu::TestCaseGroup*	createDataSpillTests(tcu::TestContext& testCtx);
 
-} // pipeline
+} // RayTracing
 } // vkt
 
-#endif // _VKTPIPELINEVERTEXONLYTESTS_HPP
+#endif // _VKTRAYTRACINGDATASPILLTESTS_HPP
diff --git a/external/vulkancts/modules/vulkan/ray_tracing/vktRayTracingDirectionTests.cpp b/external/vulkancts/modules/vulkan/ray_tracing/vktRayTracingDirectionTests.cpp
new file mode 100644
index 0000000..ac7da38
--- /dev/null
+++ b/external/vulkancts/modules/vulkan/ray_tracing/vktRayTracingDirectionTests.cpp
@@ -0,0 +1,674 @@
+/*-------------------------------------------------------------------------
+ * Vulkan Conformance Tests
+ * ------------------------
+ *
+ * Copyright (c) 2021 The Khronos Group Inc.
+ * Copyright (c) 2021 Valve Corporation.
+ *
+ * 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 Ray Tracing Direction Tests
+ *//*--------------------------------------------------------------------*/
+
+#include "vktRayTracingDirectionTests.hpp"
+#include "vktTestCase.hpp"
+
+#include "vkObjUtil.hpp"
+#include "vkCmdUtil.hpp"
+#include "vkTypeUtil.hpp"
+#include "vkBuilderUtil.hpp"
+#include "vkRayTracingUtil.hpp"
+#include "vkBufferWithMemory.hpp"
+#include "vkBarrierUtil.hpp"
+
+#include "tcuVector.hpp"
+#include "tcuMatrix.hpp"
+
+#include "deUniquePtr.hpp"
+#include "deRandom.hpp"
+#include "deStringUtil.hpp"
+#include "deDefs.hpp"
+
+#include <vector>
+#include <cmath>
+#include <sstream>
+#include <utility>
+#include <algorithm>
+#include <limits>
+
+namespace vkt
+{
+namespace RayTracing
+{
+
+namespace
+{
+
+using namespace vk;
+
+using GeometryData = std::vector<tcu::Vec3>;
+
+struct SpaceObjects
+{
+	tcu::Vec3		origin;
+	tcu::Vec3		direction;
+	GeometryData	geometry;
+
+	SpaceObjects (VkGeometryTypeKHR geometryType)
+		: origin	(0.0f, 0.0f, 1.0f)	// Origin of the ray at (0, 0, 1).
+		, direction	(0.0f, 0.0f, 1.0f)	// Shooting towards (0, 0, 1).
+		, geometry	()
+	{
+		// Triangle or AABB around (0, 0, 5).
+		DE_ASSERT(geometryType == VK_GEOMETRY_TYPE_TRIANGLES_KHR || geometryType == VK_GEOMETRY_TYPE_AABBS_KHR);
+		if (geometryType == VK_GEOMETRY_TYPE_TRIANGLES_KHR)
+		{
+			geometry.reserve(3u);
+			geometry.push_back(tcu::Vec3( 0.0f,  0.5f, 5.0f));
+			geometry.push_back(tcu::Vec3(-0.5f, -0.5f, 5.0f));
+			geometry.push_back(tcu::Vec3( 0.5f, -0.5f, 5.0f));
+		}
+		else
+		{
+			geometry.reserve(2u);
+			geometry.push_back(tcu::Vec3(-0.5f, -0.5f, 5.0f));
+			geometry.push_back(tcu::Vec3( 0.5f,  0.5f, 5.0f));
+		}
+	}
+
+	static float getDefaultDistance (void)
+	{
+		// Consistent with the Z coordinates of the origin, direction and points in the default constructor.
+		return 4.0f;
+	}
+
+	// Calculates expected distance given the direction scaling factor.
+	static float getExpectedDistance (float directionScale)
+	{
+		return getDefaultDistance() / directionScale;
+	}
+};
+
+// Default test tolerance for distance values.
+constexpr float kDefaultTolerance = 0.001f;
+
+// Calculates appropriate values for Tmin/Tmax given the expected distance.
+std::pair<float, float> calcTminTmax (float expectedDistance)
+{
+	const auto margin = kDefaultTolerance / 2.0f;
+	return std::make_pair(de::max(expectedDistance - margin, 0.0f), expectedDistance + margin);
+}
+
+// Get matrix to scale a point with the given scale factor.
+tcu::Mat3 getScaleMatrix (float scaleFactor)
+{
+	const float scaleDirectionMatrixData[] =
+	{
+		scaleFactor,		0.f,			0.f,
+		0.f,				scaleFactor,	0.f,
+		0.f,				0.f,			scaleFactor,
+	};
+	return tcu::Mat3(scaleDirectionMatrixData);
+}
+
+// Get a matrix to rotate a point around the X and Y axis by the given angles in radians.
+tcu::Mat3 getRotationMatrix (float rotationX, float rotationY)
+{
+	const float cosA = std::cos(rotationX);
+	const float sinA = std::sin(rotationX);
+
+	const float cosB = std::cos(rotationY);
+	const float sinB = std::sin(rotationY);
+
+	const float rotationMatrixDataX[] =
+	{
+		1.0f, 0.0f, 0.0f,
+		0.0f, cosA,-sinA,
+		0.0f, sinA, cosA,
+	};
+	const tcu::Mat3 rotationMatrixX (rotationMatrixDataX);
+
+	const float rotationMatrixDataY[] =
+	{
+		cosB, 0.0f,-sinB,
+		0.0f, 1.0f, 0.0f,
+		sinB, 0.0f, cosB,
+	};
+	const tcu::Mat3 rotationMatrixY (rotationMatrixDataY);
+
+	return rotationMatrixX * rotationMatrixY;
+}
+
+// Converts transformation matrix to the expected KHR format.
+VkTransformMatrixKHR toTransformMatrixKHR (const tcu::Mat3& mat3)
+{
+	VkTransformMatrixKHR result;
+
+	deMemset(result.matrix, 0, sizeof(result.matrix));
+	for (int y = 0; y < 3; ++y)
+	for (int x = 0; x < 3; ++x)
+		result.matrix[x][y] = mat3[x][y];
+
+	return result;
+}
+
+struct TestParams
+{
+	SpaceObjects			spaceObjects;
+	float					directionScale;
+	float					rotationX;
+	float					rotationY;
+	VkShaderStageFlagBits	testStage;
+	VkGeometryTypeKHR		geometryType;
+
+	VkShaderStageFlags usedStages (void) const
+	{
+		VkShaderStageFlags flags = (VK_SHADER_STAGE_RAYGEN_BIT_KHR | VK_SHADER_STAGE_MISS_BIT_KHR | testStage);
+
+		if (geometryType == VK_GEOMETRY_TYPE_AABBS_KHR)
+			flags |= VK_SHADER_STAGE_INTERSECTION_BIT_KHR;
+
+		return flags;
+	}
+
+	// True if we are testing the intersection shader.
+	bool isecMain (void) const
+	{
+		return (testStage == VK_SHADER_STAGE_INTERSECTION_BIT_KHR);
+	}
+
+	// True if the intersection shader is needed as an auxiliar shader.
+	bool isecAux (void) const
+	{
+		return (!isecMain() && geometryType == VK_GEOMETRY_TYPE_AABBS_KHR);
+	}
+
+	// True if the intersection shader is used in some capacity.
+	bool isecUsed (void) const
+	{
+		return (isecMain() || isecAux());
+	}
+};
+
+class DirectionTestCase : public vkt::TestCase
+{
+public:
+							DirectionTestCase		(tcu::TestContext& testCtx, const std::string& name, const std::string& description, const TestParams& params);
+	virtual					~DirectionTestCase		(void) {}
+
+	virtual void			checkSupport			(Context& context) const;
+	virtual void			initPrograms			(vk::SourceCollections& programCollection) const;
+	virtual TestInstance*	createInstance			(Context& context) const;
+
+protected:
+	TestParams				m_params;
+};
+
+class DirectionTestInstance : public vkt::TestInstance
+{
+public:
+								DirectionTestInstance	(Context& context, const TestParams& params);
+	virtual						~DirectionTestInstance	(void) {}
+
+	virtual tcu::TestStatus		iterate					(void);
+
+protected:
+	TestParams					m_params;
+};
+
+
+DirectionTestCase::DirectionTestCase(tcu::TestContext& testCtx, const std::string& name, const std::string& description, const TestParams& params)
+	: vkt::TestCase	(testCtx, name, description)
+	, m_params		(params)
+{}
+
+void DirectionTestCase::checkSupport (Context& context) const
+{
+	context.requireDeviceFunctionality("VK_KHR_acceleration_structure");
+	context.requireDeviceFunctionality("VK_KHR_ray_tracing_pipeline");
+}
+
+// Push constants. They need to match the shaders.
+// Note: origin and direction will be used as a Vec3. Declaring them as Vec4 eases matching alignments.
+struct PushConstants
+{
+	tcu::Vec4	origin;
+	tcu::Vec4	direction;
+	float		tmix;
+	float		tmax;
+};
+
+tcu::Vec4 toVec4 (const tcu::Vec3& vec3)
+{
+	return tcu::Vec4(vec3.x(), vec3.y(), vec3.z(), 0.0f);
+}
+
+void DirectionTestCase::initPrograms (vk::SourceCollections& programCollection) const
+{
+	const vk::ShaderBuildOptions buildOptions (programCollection.usedVulkanVersion, vk::SPIRV_VERSION_1_4, 0u, true);
+
+	std::ostringstream rgen;
+	rgen
+		<< "#version 460 core\n"
+		<< "#extension GL_EXT_ray_tracing : require\n"
+		<< "layout(location=0) rayPayloadEXT vec3 hitValue;\n"
+		<< "layout(set=0, binding=0) uniform accelerationStructureEXT topLevelAS;\n"
+		// Needs to match the PushConstants struct above.
+		<< "layout(push_constant, std430) uniform PushConstants {\n"
+		<< "  vec4 origin;\n"
+		<< "  vec4 direction;\n"
+		<< "  float tmin;\n"
+		<< "  float tmax;\n"
+		<< "} pc;\n"
+		<< "\n"
+		<< "void main()\n"
+		<< "{\n"
+		<< "  const uint cullMask = 0xFF;\n"
+		<< "  traceRayEXT(topLevelAS, gl_RayFlagsNoneEXT, cullMask, 0, 0, 0, pc.origin.xyz, pc.tmin, pc.direction.xyz, pc.tmax, 0);\n"
+		<< "}\n"
+		;
+
+	programCollection.glslSources.add("rgen") << glu::RaygenSource(updateRayTracingGLSL(rgen.str())) << buildOptions;
+
+	const bool			isecTest	= m_params.isecMain();
+	const std::string	bufferDecl	= "layout(set=0, binding=1, std430) buffer OutBuffer { float val; } outBuffer;\n";
+
+	std::ostringstream isec;
+	isec
+		<< "#version 460 core\n"
+		<< "#extension GL_EXT_ray_tracing : require\n"
+		<< "hitAttributeEXT vec3 hitAttribute;\n"
+		<< (isecTest ? bufferDecl : "")
+		<< "void main()\n"
+		<< "{\n"
+		<< "  hitAttribute = vec3(0.0f, 0.0f, 0.0f);\n"
+		<< (isecTest ? "  outBuffer.val = gl_RayTmaxEXT;\n" : "")
+		<< "  reportIntersectionEXT(gl_RayTmaxEXT, 0);\n"
+		<< "}\n"
+		;
+
+	std::ostringstream hits;
+	hits
+		<< "#version 460 core\n"
+		<< "#extension GL_EXT_ray_tracing : require\n"
+		<< "layout(location=0) rayPayloadInEXT vec3 hitValue;\n"
+		<< "hitAttributeEXT vec3 attribs;\n"
+		<< bufferDecl
+		<< "\n"
+		<< "void main()\n"
+		<< "{\n"
+		<< "  outBuffer.val = gl_HitTEXT;\n"
+		<< "}\n"
+		;
+
+	switch (m_params.testStage)
+	{
+	case VK_SHADER_STAGE_CLOSEST_HIT_BIT_KHR:
+		programCollection.glslSources.add("hits") << glu::ClosestHitSource(updateRayTracingGLSL(hits.str())) << buildOptions;
+		break;
+	case VK_SHADER_STAGE_ANY_HIT_BIT_KHR:
+		programCollection.glslSources.add("hits") << glu::AnyHitSource(updateRayTracingGLSL(hits.str())) << buildOptions;
+		break;
+	case VK_SHADER_STAGE_INTERSECTION_BIT_KHR:
+		programCollection.glslSources.add("isec") << glu::IntersectionSource(updateRayTracingGLSL(isec.str())) << buildOptions;
+		break;
+	default:
+		DE_ASSERT(false);
+		break;
+	}
+
+	// Also add the intersection shader if needed for AABBs.
+	if (m_params.isecAux())
+		programCollection.glslSources.add("isec") << glu::IntersectionSource(updateRayTracingGLSL(isec.str())) << buildOptions;
+
+	std::ostringstream miss;
+	miss
+		<< "#version 460 core\n"
+		<< "#extension GL_EXT_ray_tracing : require\n"
+		<< "layout(location = 0) rayPayloadInEXT vec3 hitValue;\n"
+		<< bufferDecl
+		<< "\n"
+		<< "void main()\n"
+		<< "{\n"
+		<< "  outBuffer.val = -10000.0f;\n"
+		<< "}\n";
+		;
+
+	programCollection.glslSources.add("miss") << glu::MissSource(updateRayTracingGLSL(miss.str())) << buildOptions;
+}
+
+TestInstance* DirectionTestCase::createInstance (Context& context) const
+{
+	return new DirectionTestInstance(context, m_params);
+}
+
+DirectionTestInstance::DirectionTestInstance (Context& context, const TestParams& params)
+	: vkt::TestInstance	(context)
+	, m_params			(params)
+{}
+
+tcu::TestStatus DirectionTestInstance::iterate (void)
+{
+	const auto&	vki		= m_context.getInstanceInterface();
+	const auto	physDev	= m_context.getPhysicalDevice();
+	const auto&	vkd		= m_context.getDeviceInterface();
+	const auto	device	= m_context.getDevice();
+	auto&		alloc	= m_context.getDefaultAllocator();
+	const auto	qIndex	= m_context.getUniversalQueueFamilyIndex();
+	const auto	queue	= m_context.getUniversalQueue();
+	const auto	stages	= m_params.usedStages();
+	const auto	pcSize	= static_cast<deUint32>(sizeof(PushConstants));
+
+	const auto	scaleMatrix		= getScaleMatrix(m_params.directionScale);
+	const auto	rotationMatrix	= getRotationMatrix(m_params.rotationX, m_params.rotationY);
+	const auto	transformMatrix	= toTransformMatrixKHR(rotationMatrix);
+
+	// Command pool and buffer.
+	const auto cmdPool		= makeCommandPool(vkd, device, qIndex);
+	const auto cmdBufferPtr	= allocateCommandBuffer(vkd, device, cmdPool.get(), VK_COMMAND_BUFFER_LEVEL_PRIMARY);
+	const auto cmdBuffer	= cmdBufferPtr.get();
+
+	beginCommandBuffer(vkd, cmdBuffer);
+
+	// Build acceleration structures.
+	auto topLevelAS		= makeTopLevelAccelerationStructure();
+	auto bottomLevelAS	= makeBottomLevelAccelerationStructure();
+
+	const bool							isTriangles		= (m_params.geometryType == VK_GEOMETRY_TYPE_TRIANGLES_KHR);
+	const VkGeometryInstanceFlagsKHR	instanceFlags	= (isTriangles ? VK_GEOMETRY_INSTANCE_TRIANGLE_FACING_CULL_DISABLE_BIT_KHR : 0);
+
+	bottomLevelAS->addGeometry(m_params.spaceObjects.geometry, isTriangles, VK_GEOMETRY_NO_DUPLICATE_ANY_HIT_INVOCATION_BIT_KHR);
+	bottomLevelAS->createAndBuild(vkd, device, cmdBuffer, alloc);
+
+	de::SharedPtr<BottomLevelAccelerationStructure> blasSharedPtr (bottomLevelAS.release());
+	topLevelAS->setInstanceCount(1);
+	topLevelAS->addInstance(blasSharedPtr, transformMatrix, 0, 0xFFu, 0u, instanceFlags);
+	topLevelAS->createAndBuild(vkd, device, cmdBuffer, alloc);
+
+	// Create output buffer.
+	const auto			bufferSize			= static_cast<VkDeviceSize>(sizeof(float));
+	const auto			bufferCreateInfo	= makeBufferCreateInfo(bufferSize, VK_BUFFER_USAGE_STORAGE_BUFFER_BIT);
+	BufferWithMemory	buffer				(vkd, device, alloc, bufferCreateInfo, MemoryRequirement::HostVisible);
+	auto&				bufferAlloc			= buffer.getAllocation();
+
+	// Fill output buffer with an initial value.
+	deMemset(bufferAlloc.getHostPtr(), 0, sizeof(float));
+	flushAlloc(vkd, device, bufferAlloc);
+
+	// Descriptor set layout and pipeline layout.
+	DescriptorSetLayoutBuilder setLayoutBuilder;
+	setLayoutBuilder.addSingleBinding(VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR, stages);
+	setLayoutBuilder.addSingleBinding(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, stages);
+	const auto setLayout = setLayoutBuilder.build(vkd, device);
+
+	const VkPushConstantRange pcRange =
+	{
+		stages,	//	VkShaderStageFlags	stageFlags;
+		0u,		//	deUint32			offset;
+		pcSize,	//	deUint32			size;
+	};
+
+	const VkPipelineLayoutCreateInfo pipelineLayoutInfo =
+	{
+		VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO,	//	VkStructureType					sType;
+		nullptr,										//	const void*						pNext;
+		0u,												//	VkPipelineLayoutCreateFlags		flags;
+		1u,												//	deUint32						setLayoutCount;
+		&setLayout.get(),								//	const VkDescriptorSetLayout*	pSetLayouts;
+		1u,												//	deUint32						pushConstantRangeCount;
+		&pcRange,										//	const VkPushConstantRange*		pPushConstantRanges;
+	};
+	const auto pipelineLayout = createPipelineLayout(vkd, device, &pipelineLayoutInfo);
+
+	// Descriptor pool and set.
+	DescriptorPoolBuilder poolBuilder;
+	poolBuilder.addType(VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR);
+	poolBuilder.addType(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, 1u);
+	const auto descriptorPool	= poolBuilder.build(vkd, device, VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT, 1u);
+	const auto descriptorSet	= makeDescriptorSet(vkd, device, descriptorPool.get(), setLayout.get());
+
+	// Update descriptor set.
+	{
+		const VkWriteDescriptorSetAccelerationStructureKHR accelDescInfo =
+		{
+			VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR,
+			nullptr,
+			1u,
+			topLevelAS.get()->getPtr(),
+		};
+
+		const auto bufferDescInfo = makeDescriptorBufferInfo(buffer.get(), 0ull, VK_WHOLE_SIZE);
+
+		DescriptorSetUpdateBuilder updateBuilder;
+		updateBuilder.writeSingle(descriptorSet.get(), DescriptorSetUpdateBuilder::Location::binding(0u), VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR, &accelDescInfo);
+		updateBuilder.writeSingle(descriptorSet.get(), DescriptorSetUpdateBuilder::Location::binding(1u), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, &bufferDescInfo);
+		updateBuilder.update(vkd, device);
+	}
+
+	// Shader modules.
+	Move<VkShaderModule> rgenModule;
+	Move<VkShaderModule> missModule;
+	Move<VkShaderModule> hitsModule;
+	Move<VkShaderModule> isecModule;
+
+	rgenModule = createShaderModule(vkd, device, m_context.getBinaryCollection().get("rgen"), 0);
+	missModule = createShaderModule(vkd, device, m_context.getBinaryCollection().get("miss"), 0);
+
+	if (!m_params.isecMain())
+		hitsModule = createShaderModule(vkd, device, m_context.getBinaryCollection().get("hits"), 0);
+
+	if (m_params.isecUsed())
+		isecModule = createShaderModule(vkd, device, m_context.getBinaryCollection().get("isec"), 0);
+
+	// Get some ray tracing properties.
+	deUint32 shaderGroupHandleSize		= 0u;
+	deUint32 shaderGroupBaseAlignment	= 1u;
+	{
+		const auto rayTracingPropertiesKHR	= makeRayTracingProperties(vki, physDev);
+		shaderGroupHandleSize				= rayTracingPropertiesKHR->getShaderGroupHandleSize();
+		shaderGroupBaseAlignment			= rayTracingPropertiesKHR->getShaderGroupBaseAlignment();
+	}
+
+	// Create raytracing pipeline and shader binding tables.
+	Move<VkPipeline>				pipeline;
+
+	de::MovePtr<BufferWithMemory>	raygenSBT;
+	de::MovePtr<BufferWithMemory>	missSBT;
+	de::MovePtr<BufferWithMemory>	hitSBT;
+	de::MovePtr<BufferWithMemory>	callableSBT;
+
+	VkStridedDeviceAddressRegionKHR	raygenSBTRegion		= makeStridedDeviceAddressRegionKHR(DE_NULL, 0, 0);
+	VkStridedDeviceAddressRegionKHR	missSBTRegion		= makeStridedDeviceAddressRegionKHR(DE_NULL, 0, 0);
+	VkStridedDeviceAddressRegionKHR	hitSBTRegion		= makeStridedDeviceAddressRegionKHR(DE_NULL, 0, 0);
+	VkStridedDeviceAddressRegionKHR	callableSBTRegion	= makeStridedDeviceAddressRegionKHR(DE_NULL, 0, 0);
+
+	{
+		const auto	hitModuleCount		= (m_params.isecAux() ? 2 : 1);
+		const auto	rayTracingPipeline	= de::newMovePtr<RayTracingPipeline>();
+
+		rayTracingPipeline->addShader(VK_SHADER_STAGE_RAYGEN_BIT_KHR, rgenModule, 0);
+		rayTracingPipeline->addShader(VK_SHADER_STAGE_MISS_BIT_KHR, missModule, 1);
+
+		if (!m_params.isecMain())
+			rayTracingPipeline->addShader(m_params.testStage, hitsModule, 2);
+
+		if (m_params.isecUsed())
+			rayTracingPipeline->addShader(VK_SHADER_STAGE_INTERSECTION_BIT_KHR, isecModule, 2);
+
+		pipeline = rayTracingPipeline->createPipeline(vkd, device, pipelineLayout.get());
+
+		raygenSBT		= rayTracingPipeline->createShaderBindingTable(vkd, device, pipeline.get(), alloc, shaderGroupHandleSize, shaderGroupBaseAlignment, 0, 1);
+		raygenSBTRegion	= makeStridedDeviceAddressRegionKHR(getBufferDeviceAddress(vkd, device, raygenSBT->get(), 0), shaderGroupHandleSize, shaderGroupHandleSize);
+
+		missSBT			= rayTracingPipeline->createShaderBindingTable(vkd, device, pipeline.get(), alloc, shaderGroupHandleSize, shaderGroupBaseAlignment, 1, 1);
+		missSBTRegion	= makeStridedDeviceAddressRegionKHR(getBufferDeviceAddress(vkd, device, missSBT->get(), 0), shaderGroupHandleSize, shaderGroupHandleSize);
+
+		hitSBT			= rayTracingPipeline->createShaderBindingTable(vkd, device, pipeline.get(), alloc, shaderGroupHandleSize, shaderGroupBaseAlignment, 2, 1);
+		hitSBTRegion	= makeStridedDeviceAddressRegionKHR(getBufferDeviceAddress(vkd, device, hitSBT->get(), 0), shaderGroupHandleSize, shaderGroupHandleSize * hitModuleCount);
+	}
+
+	// Push constants.
+	const auto			rotatedOrigin		= m_params.spaceObjects.origin * rotationMatrix;
+	const auto			finalDirection		= m_params.spaceObjects.direction * scaleMatrix * rotationMatrix;
+	const auto			expectedDistance	= SpaceObjects::getExpectedDistance(m_params.directionScale);
+	const auto			tMinMax				= calcTminTmax(expectedDistance);
+	const PushConstants	pcData				=
+	{
+		toVec4(rotatedOrigin),	//	tcu::Vec4	origin;
+		toVec4(finalDirection),	//	tcu::Vec4	direction;
+		tMinMax.first,			//	float		tmix;
+		tMinMax.second,			//	float		tmax;
+	};
+
+	// Trace rays.
+	vkd.cmdBindPipeline(cmdBuffer, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, pipeline.get());
+	vkd.cmdBindDescriptorSets(cmdBuffer, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, pipelineLayout.get(), 0u, 1u, &descriptorSet.get(), 0u, nullptr);
+	vkd.cmdPushConstants(cmdBuffer, pipelineLayout.get(), stages, 0u, pcSize, &pcData);
+	vkd.cmdTraceRaysKHR(cmdBuffer, &raygenSBTRegion, &missSBTRegion, &hitSBTRegion, &callableSBTRegion, 1u, 1u, 1u);
+
+	// Barrier for the output buffer.
+	const auto bufferBarrier = makeMemoryBarrier(VK_ACCESS_SHADER_WRITE_BIT, VK_ACCESS_HOST_READ_BIT);
+	vkd.cmdPipelineBarrier(cmdBuffer, VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR, VK_PIPELINE_STAGE_HOST_BIT, 0u, 1u, &bufferBarrier, 0u, nullptr, 0u, nullptr);
+
+	endCommandBuffer(vkd, cmdBuffer);
+	submitCommandsAndWait(vkd, device, queue, cmdBuffer);
+
+	// Read value back from the buffer.
+	float bufferValue = 0.0f;
+	invalidateAlloc(vkd, device, bufferAlloc);
+	deMemcpy(&bufferValue, bufferAlloc.getHostPtr(), sizeof(bufferValue));
+
+	if (de::abs(bufferValue - expectedDistance) > kDefaultTolerance)
+	{
+		std::ostringstream msg;
+		msg << "Result distance (" << bufferValue << ") differs from expected distance (" << expectedDistance << ", tolerance " << kDefaultTolerance << ")";
+		TCU_FAIL(msg.str());
+	}
+
+	return tcu::TestStatus::pass("Pass");
+}
+
+} // anonymous
+
+tcu::TestCaseGroup*	createDirectionTests(tcu::TestContext& testCtx)
+{
+	using GroupPtr = de::MovePtr<tcu::TestCaseGroup>;
+
+	GroupPtr directionGroup (new tcu::TestCaseGroup(testCtx, "direction_length", "Test direction vector length when tracing rays"));
+
+	struct
+	{
+		VkShaderStageFlagBits	hitStage;
+		const char*				name;
+	} stages[] =
+	{
+		{ VK_SHADER_STAGE_CLOSEST_HIT_BIT_KHR,	"chit" },
+		{ VK_SHADER_STAGE_ANY_HIT_BIT_KHR,		"ahit" },
+		{ VK_SHADER_STAGE_INTERSECTION_BIT_KHR,	"isec" },
+	};
+
+	struct
+	{
+		VkGeometryTypeKHR		geometryType;
+		const char*				name;
+	} geometryTypes[] =
+	{
+		{ VK_GEOMETRY_TYPE_TRIANGLES_KHR,	"triangles"	},
+		{ VK_GEOMETRY_TYPE_AABBS_KHR,		"aabbs"		},
+	};
+
+	const float kPi2				= DE_PI * 2.0f;
+	const float kMinScalingFactor	= 0.5f;
+	const float kMaxScalingFactor	= 10.0f;
+
+	const int kNumRandomScalingFactors	= 5;
+	const int kNumRandomRotations		= 4;
+
+	de::Random rnd(1613648516u);
+
+	// Scaling factors: 1.0 and some randomly-generated ones.
+	std::vector<float> scalingFactors;
+
+	scalingFactors.reserve(kNumRandomScalingFactors + 1);
+	scalingFactors.push_back(1.0f);
+
+	for (int i = 0; i < kNumRandomScalingFactors; ++i)
+		scalingFactors.push_back(rnd.getFloat() * (kMaxScalingFactor - kMinScalingFactor) + kMinScalingFactor);
+
+	// Rotations: 0.0 on both axis and some randomly-generated ones.
+	std::vector<std::pair<float, float>> rotationAngles;
+
+	rotationAngles.reserve(kNumRandomRotations + 1);
+	rotationAngles.push_back(std::make_pair(0.0f, 0.0f));
+
+	for (int i = 0; i < kNumRandomRotations; ++i)
+		rotationAngles.push_back(std::make_pair(rnd.getFloat() * kPi2, rnd.getFloat() * kPi2));
+
+	for (int stageIdx = 0; stageIdx < DE_LENGTH_OF_ARRAY(stages); ++stageIdx)
+	{
+		const auto& stageData = stages[stageIdx];
+		GroupPtr stageGroup (new tcu::TestCaseGroup(testCtx, stageData.name, ""));
+
+		for (int geometryTypeIdx = 0; geometryTypeIdx < DE_LENGTH_OF_ARRAY(geometryTypes); ++geometryTypeIdx)
+		{
+			const auto& gType = geometryTypes[geometryTypeIdx];
+
+			// We cannot test triangles with the ray intersection stage.
+			if (gType.geometryType == VK_GEOMETRY_TYPE_TRIANGLES_KHR && stageData.hitStage == VK_SHADER_STAGE_INTERSECTION_BIT_KHR)
+				continue;
+
+			GroupPtr geomGroup (new tcu::TestCaseGroup(testCtx, gType.name, ""));
+
+			for (size_t scalingIdx = 0; scalingIdx < scalingFactors.size(); ++scalingIdx)
+			{
+				const auto scale		= scalingFactors[scalingIdx];
+				const auto scaleName	= "scaling_factor_" + de::toString(scalingIdx);
+				GroupPtr factorGroup (new tcu::TestCaseGroup(testCtx, scaleName.c_str(), ""));
+
+				for (size_t rotationIdx = 0; rotationIdx < rotationAngles.size(); ++rotationIdx)
+				{
+					const auto angles		= rotationAngles[rotationIdx];
+					const auto angleName	= "rotation_" + de::toString(rotationIdx);
+					const auto geometryType	= gType.geometryType;
+
+					SpaceObjects spaceObjects(geometryType);
+
+					TestParams params =
+					{
+						spaceObjects,			//		SpaceObjects			spaceObjects;
+						scale,					//		float					directionScale;
+						angles.first,			//		float					rotationX;
+						angles.second,			//		float					rotationY;
+						stageData.hitStage,		//		VkShaderStageFlagBits	hitStage;
+						geometryType,			//		VkGeometryTypeKHR		geometryType;
+					};
+
+					factorGroup->addChild(new DirectionTestCase(testCtx, angleName, "", params));
+				}
+
+				geomGroup->addChild(factorGroup.release());
+			}
+
+			stageGroup->addChild(geomGroup.release());
+		}
+
+		directionGroup->addChild(stageGroup.release());
+	}
+
+	return directionGroup.release();
+}
+
+} // RayTracing
+} // vkt
diff --git a/external/vulkancts/modules/vulkan/pipeline/vktPipelineVertexOnlyTests.hpp b/external/vulkancts/modules/vulkan/ray_tracing/vktRayTracingDirectionTests.hpp
similarity index 69%
copy from external/vulkancts/modules/vulkan/pipeline/vktPipelineVertexOnlyTests.hpp
copy to external/vulkancts/modules/vulkan/ray_tracing/vktRayTracingDirectionTests.hpp
index 1a85ebf..8518d80 100644
--- a/external/vulkancts/modules/vulkan/pipeline/vktPipelineVertexOnlyTests.hpp
+++ b/external/vulkancts/modules/vulkan/ray_tracing/vktRayTracingDirectionTests.hpp
@@ -1,11 +1,11 @@
-#ifndef _VKTPIPELINEVERTEXONLYTESTS_HPP
-#define _VKTPIPELINEVERTEXONLYTESTS_HPP
-/*------------------------------------------------------------------------
+#ifndef _VKTRAYTRACINGDIRECTIONTESTS_HPP
+#define _VKTRAYTRACINGDIRECTIONTESTS_HPP
+/*-------------------------------------------------------------------------
  * Vulkan Conformance Tests
  * ------------------------
  *
- * Copyright (c) 2019 Google LLC
- * Copyright (c) 2019 The Khronos Group Inc.
+ * Copyright (c) 2021 The Khronos Group Inc.
+ * Copyright (c) 2021 Valve Corporation.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -21,7 +21,7 @@
  *
  *//*!
  * \file
- * \brief Tests using only vertex shader in a graphics pipeline
+ * \brief Ray Tracing Direction Tests
  *//*--------------------------------------------------------------------*/
 
 #include "tcuDefs.hpp"
@@ -29,12 +29,12 @@
 
 namespace vkt
 {
-namespace pipeline
+namespace RayTracing
 {
 
-tcu::TestCaseGroup*	createVertexOnlyTests (tcu::TestContext& testCtx);
+tcu::TestCaseGroup*	createDirectionTests(tcu::TestContext& testCtx);
 
-} // pipeline
+} // RayTracing
 } // vkt
 
-#endif // _VKTPIPELINEVERTEXONLYTESTS_HPP
+#endif // _VKTRAYTRACINGDIRECTIONTESTS_HPP
diff --git a/external/vulkancts/modules/vulkan/ray_tracing/vktRayTracingMiscTests.cpp b/external/vulkancts/modules/vulkan/ray_tracing/vktRayTracingMiscTests.cpp
index 341cf96..9749982 100644
--- a/external/vulkancts/modules/vulkan/ray_tracing/vktRayTracingMiscTests.cpp
+++ b/external/vulkancts/modules/vulkan/ray_tracing/vktRayTracingMiscTests.cpp
@@ -108,6 +108,7 @@
 	NO_DUPLICATE_ANY_HIT,
 	REPORT_INTERSECTION_RESULT,
 	RAY_PAYLOAD_IN,
+	RECURSIVE_TRACES_0,
 	RECURSIVE_TRACES_1,
 	RECURSIVE_TRACES_2,
 	RECURSIVE_TRACES_3,
@@ -161,6 +162,12 @@
 	SHADER_RECORD_BLOCK_STD430_4,
 	SHADER_RECORD_BLOCK_STD430_5,
 	SHADER_RECORD_BLOCK_STD430_6,
+	IGNORE_ANY_HIT_STATICALLY,
+	IGNORE_ANY_HIT_DYNAMICALLY,
+	TERMINATE_ANY_HIT_STATICALLY,
+	TERMINATE_ANY_HIT_DYNAMICALLY,
+	TERMINATE_INTERSECTION_STATICALLY,
+	TERMINATE_INTERSECTION_DYNAMICALLY,
 
 	COUNT
 };
@@ -947,6 +954,72 @@
 	tcu::Vec3		m_gridStartXYZ;
 };
 
+/* Provides an AS holding a single {(0, 0, 0), (-1, 1, 0), {1, 1, 0} tri. */
+class TriASProvider : public ASProviderBase
+{
+public:
+	TriASProvider()
+	{
+		/* Stub*/
+	}
+
+	std::unique_ptr<TopLevelAccelerationStructure> createTLAS(	Context&							context,
+																const AccelerationStructureLayout&	/* asLayout */,
+																VkCommandBuffer						cmdBuffer,
+																const VkGeometryFlagsKHR&			bottomLevelGeometryFlags,
+																const ASPropertyProvider*			optASPropertyProviderPtr,
+																IGridASFeedback*					/* optASFeedbackPtr */) const final
+	{
+		Allocator&										allocator		= context.getDefaultAllocator		();
+		const DeviceInterface&							deviceInterface	= context.getDeviceInterface		();
+		const VkDevice									deviceVk		= context.getDevice					();
+		std::unique_ptr<TopLevelAccelerationStructure>	resultPtr;
+		de::MovePtr<TopLevelAccelerationStructure>		tlPtr			= makeTopLevelAccelerationStructure ();
+
+		{
+
+			const auto	cullMask				= (optASPropertyProviderPtr != nullptr)		? optASPropertyProviderPtr->getCullMask(0, 0)
+																							: static_cast<deUint8>(0xFF);
+			const auto	instanceCustomIndex		= (optASPropertyProviderPtr != nullptr)		? optASPropertyProviderPtr->getInstanceCustomIndex(0, 0)
+																							: 0;
+
+			tlPtr->setInstanceCount(1);
+
+			{
+				de::MovePtr<BottomLevelAccelerationStructure>	blPtr		= makeBottomLevelAccelerationStructure();
+				const std::vector<tcu::Vec3>					vertexVec	= {tcu::Vec3(0, 0, 0), tcu::Vec3(-1, 1, 0), tcu::Vec3(1, 1, 0) };
+
+				blPtr->setGeometryCount	(1u);
+				blPtr->addGeometry		(vertexVec,
+										 true, /* triangles */
+										 bottomLevelGeometryFlags);
+
+				blPtr->createAndBuild(	deviceInterface,
+										deviceVk,
+										cmdBuffer,
+										allocator);
+
+				tlPtr->addInstance(	de::SharedPtr<BottomLevelAccelerationStructure>(blPtr.release() ),
+									identityMatrix3x4,
+									instanceCustomIndex,
+									cullMask);
+			}
+		}
+
+		tlPtr->createAndBuild(	deviceInterface,
+								deviceVk,
+								cmdBuffer,
+								allocator);
+
+		resultPtr = decltype(resultPtr)(tlPtr.release() );
+		return resultPtr;
+	}
+
+	deUint32 getNPrimitives() const final
+	{
+		return 1;
+	}
+};
 
 /* Test logic providers ==> */
 class TestBase
@@ -1025,6 +1098,11 @@
 									descriptorSetLayout);
 	}
 
+	virtual std::vector<deUint8> getResultBufferStartData() const
+	{
+		return std::vector<deUint8>();
+	}
+
 	virtual const void* getShaderRecordData(const ShaderGroups& /* shaderGroup */) const
 	{
 		return nullptr;
@@ -4070,7 +4148,7 @@
 				(testType == TestType::SHADER_RECORD_BLOCK_EXPLICIT_SCALAR_OFFSET_3)	||
 				(testType == TestType::SHADER_RECORD_BLOCK_EXPLICIT_SCALAR_OFFSET_4)	||
 				(testType == TestType::SHADER_RECORD_BLOCK_EXPLICIT_SCALAR_OFFSET_5)	||
-				(testType == TestType::SHADER_RECORD_BLOCK_EXPLICIT_STD430_OFFSET_6)	||
+				(testType == TestType::SHADER_RECORD_BLOCK_EXPLICIT_SCALAR_OFFSET_6)	||
 				(testType == TestType::SHADER_RECORD_BLOCK_EXPLICIT_STD430_OFFSET_1)	||
 				(testType == TestType::SHADER_RECORD_BLOCK_EXPLICIT_STD430_OFFSET_2)	||
 				(testType == TestType::SHADER_RECORD_BLOCK_EXPLICIT_STD430_OFFSET_3)	||
@@ -6026,7 +6104,6 @@
 
 	deUint32 getResultBufferSize() const final
 	{
-		DE_ASSERT(m_depthToUse	!= 0);
 		DE_ASSERT(m_depthToUse  <  30); //< due to how nItemsExpectedPerRay is stored.
 		DE_ASSERT(m_nRaysToTest	!= 0);
 
@@ -6066,8 +6143,6 @@
 	bool init(	vkt::Context&			/* context    */,
 				RayTracingProperties*	/* rtPropsPtr */) final
 	{
-		DE_ASSERT(m_depthToUse != 0);
-
 		m_specializationEntry.constantID	= 1;
 		m_specializationEntry.offset		= 0;
 		m_specializationEntry.size			= sizeof(deUint32);
@@ -6349,6 +6424,8 @@
 		}
 
 		{
+			const std::string rayPayloadDefinition = ((m_depthToUse == 0u) ? "" : rayPayloadDefinitionVec.at(0));
+
 			std::stringstream css;
 
 			css <<
@@ -6359,7 +6436,7 @@
 				"layout(set = 0, binding = 1) uniform accelerationStructureEXT accelerationStructure;\n"
 				"\n"
 				+	de::toString(resultBufferDefinition)
-				+	rayPayloadDefinitionVec.at(0)			+
+				+	rayPayloadDefinition +
 				"void main()\n"
 				"{\n"
 				"    uint  nInvocation  = gl_LaunchIDEXT.z * gl_LaunchSizeEXT.x * gl_LaunchSizeEXT.y + gl_LaunchIDEXT.y * gl_LaunchSizeEXT.x + gl_LaunchIDEXT.x;\n"
@@ -6386,12 +6463,14 @@
 				"        resultItems[nItem].shaderStage      = 3;\n"
 				"    }\n"
 				"\n"
-				"    currentDepth      = 0;\n"
-				"    currentNOriginRay = nInvocation;\n"
-				"    currentResultItem = nItem;\n"
-				"\n"
-				"    traceRayEXT(accelerationStructure, rayFlags, cullMask, 0, 0, 0, origin, tmin, directionHit,  tmax, 0);\n"
-				"    traceRayEXT(accelerationStructure, rayFlags, cullMask, 0, 0, 0, origin, tmin, directionMiss, tmax, 0);\n"
+				+ ((m_depthToUse == 0u) ? "" :
+					"    currentDepth      = 0;\n"
+					"    currentNOriginRay = nInvocation;\n"
+					"    currentResultItem = nItem;\n"
+					"\n"
+					"    traceRayEXT(accelerationStructure, rayFlags, cullMask, 0, 0, 0, origin, tmin, directionHit,  tmax, 0);\n"
+					"    traceRayEXT(accelerationStructure, rayFlags, cullMask, 0, 0, 0, origin, tmin, directionMiss, tmax, 0);\n"
+				) +
 				"}\n";
 
 			programCollection.glslSources.add("rgen") << glu::RaygenSource(css.str() ) << buildOptions;
@@ -6499,7 +6578,7 @@
 				}
 			}
 
-			if (resultItemPtr->depth >= m_depthToUse)
+			if (resultItemPtr->depth >= m_depthToUse && m_depthToUse > 0u)
 			{
 				DE_ASSERT(resultItemPtr->depth < m_depthToUse);
 
@@ -6604,14 +6683,14 @@
 						if (	currentResultItemPtr->stage == VK_SHADER_STAGE_RAYGEN_BIT_KHR ||
 								currentNLevel				!= m_depthToUse - 1)
 						{
-							if (currentResultItemPtr->childCHitNodePtr == nullptr)
+							if (currentResultItemPtr->childCHitNodePtr == nullptr && m_depthToUse > 0u)
 							{
 								DE_ASSERT(currentResultItemPtr->childCHitNodePtr != nullptr);
 
 								goto end;
 							}
 
-							if (currentResultItemPtr->childMissNodePtr == nullptr)
+							if (currentResultItemPtr->childMissNodePtr == nullptr && m_depthToUse > 0u)
 							{
 								DE_ASSERT(currentResultItemPtr->childMissNodePtr != nullptr);
 
@@ -7295,6 +7374,492 @@
 	VkSpecializationMapEntry	m_specializationInfoMapEntry;
 };
 
+class TerminationTest : public TestBase
+{
+public:
+	enum class Mode
+	{
+		IGNORE_ANY_HIT_STATICALLY,
+		IGNORE_ANY_HIT_DYNAMICALLY,
+		TERMINATE_ANY_HIT_STATICALLY,
+		TERMINATE_ANY_HIT_DYNAMICALLY,
+		TERMINATE_INTERSECTION_STATICALLY,
+		TERMINATE_INTERSECTION_DYNAMICALLY,
+
+		UNKNOWN
+	};
+
+	static Mode getModeFromTestType(const TestType& testType)
+	{
+		Mode result = Mode::UNKNOWN;
+
+		switch (testType)
+		{
+			case TestType::IGNORE_ANY_HIT_DYNAMICALLY:			result = Mode::IGNORE_ANY_HIT_DYNAMICALLY;			break;
+			case TestType::IGNORE_ANY_HIT_STATICALLY:			result = Mode::IGNORE_ANY_HIT_STATICALLY;			break;
+			case TestType::TERMINATE_ANY_HIT_DYNAMICALLY:		result = Mode::TERMINATE_ANY_HIT_DYNAMICALLY;		break;
+			case TestType::TERMINATE_ANY_HIT_STATICALLY:		result = Mode::TERMINATE_ANY_HIT_STATICALLY;		break;
+			case TestType::TERMINATE_INTERSECTION_DYNAMICALLY:	result = Mode::TERMINATE_INTERSECTION_DYNAMICALLY;	break;
+			case TestType::TERMINATE_INTERSECTION_STATICALLY:	result = Mode::TERMINATE_INTERSECTION_STATICALLY;	break;
+
+			default:
+			{
+				DE_ASSERT(false && "This should never happen");
+			}
+		}
+
+		return result;
+	}
+
+	TerminationTest(const Mode& mode)
+		:m_mode(mode)
+	{
+		/* Stub */
+	}
+
+	~TerminationTest()
+	{
+		/* Stub */
+	}
+
+	std::vector<std::string> getCHitShaderCollectionShaderNames() const final
+	{
+		return {};
+	}
+
+	tcu::UVec3 getDispatchSize() const final
+	{
+		return tcu::UVec3(1, 1, 1);
+	}
+
+	std::vector<deUint8> getResultBufferStartData() const final
+	{
+		auto resultU8Vec		= std::vector<deUint8>			(getResultBufferSize	() );
+		auto resultU32DataPtr	= reinterpret_cast<deUint32*>	(resultU8Vec.data		() );
+
+		memset(	resultU8Vec.data(),
+				0,
+				resultU8Vec.size() );
+
+		if (m_mode == Mode::IGNORE_ANY_HIT_DYNAMICALLY		||
+			m_mode == Mode::TERMINATE_ANY_HIT_DYNAMICALLY)
+		{
+			resultU32DataPtr[2] = 1;
+		}
+		else
+		if (m_mode == Mode::TERMINATE_INTERSECTION_DYNAMICALLY)
+		{
+			resultU32DataPtr[3] = 1;
+		}
+
+		return resultU8Vec;
+	}
+
+	deUint32 getResultBufferSize() const final
+	{
+		const deUint32 nExtraUints	= (	m_mode == Mode::IGNORE_ANY_HIT_DYNAMICALLY			||
+										m_mode == Mode::TERMINATE_ANY_HIT_DYNAMICALLY		||
+										m_mode == Mode::TERMINATE_INTERSECTION_DYNAMICALLY) ?	1
+																							:	0;
+		const deUint32 nResultUints	= (	m_mode == Mode::TERMINATE_INTERSECTION_DYNAMICALLY	||
+										m_mode == Mode::TERMINATE_INTERSECTION_STATICALLY)	?	3
+																							:	2;
+
+		return static_cast<deUint32>(sizeof(deUint32) ) * (nExtraUints + nResultUints);
+	}
+
+	std::vector<TopLevelAccelerationStructure*>	getTLASPtrVecToBind() const	final
+	{
+		return {m_tlPtr.get() };
+	}
+
+	void resetTLAS() final
+	{
+		m_tlPtr.reset();
+	}
+
+	void initAS(vkt::Context&			context,
+				RayTracingProperties*	/* rtPropertiesPtr */,
+				VkCommandBuffer			commandBuffer) final
+	{
+		if (m_mode == Mode::TERMINATE_INTERSECTION_DYNAMICALLY ||
+			m_mode == Mode::TERMINATE_INTERSECTION_STATICALLY)
+		{
+			const tcu::Vec3		gridCellSizeXYZ			= tcu::Vec3	( 2,  1,  1);
+			const tcu::Vec3		gridInterCellDeltaXYZ	= tcu::Vec3	( 3,  3,  3);
+			const tcu::UVec3	gridSizeXYZ				= tcu::UVec3( 1,  1,  1);
+			const tcu::Vec3		gridStartXYZ			= tcu::Vec3	(-1, -1, -1);
+
+			m_asProviderPtr.reset(
+				new GridASProvider(	gridStartXYZ,
+									gridCellSizeXYZ,
+									gridSizeXYZ,
+									gridInterCellDeltaXYZ,
+									GeometryType::AABB)
+			);
+		}
+		else
+		{
+			m_asProviderPtr.reset(
+				new TriASProvider()
+			);
+		}
+
+		m_tlPtr  = m_asProviderPtr->createTLAS(	context,
+												AccelerationStructureLayout::ONE_TL_ONE_BL_ONE_GEOMETRY,
+												commandBuffer,
+												VK_GEOMETRY_NO_DUPLICATE_ANY_HIT_INVOCATION_BIT_KHR,
+												nullptr,	/* optASPropertyProviderPtr */
+												nullptr);	/* optASFedbackPtr          */
+	}
+
+	void initPrograms(SourceCollections& programCollection) const final
+	{
+		const vk::ShaderBuildOptions	buildOptions(	programCollection.usedVulkanVersion,
+														vk::SPIRV_VERSION_1_4,
+														0u,		/* flags        */
+														true);	/* allowSpirv14 */
+
+		const std::string resultBufferSizeString = de::toString(getResultBufferSize() / sizeof(deUint32) );
+
+		{
+			std::string aHitShader;
+
+			switch (m_mode)
+			{
+				case Mode::IGNORE_ANY_HIT_DYNAMICALLY:
+				{
+					aHitShader =
+						"#version 460 core\n"
+						"\n"
+						"#extension GL_EXT_ray_tracing : require\n"
+						"\n"
+						"hitAttributeEXT vec3 dummyAttribute;\n"
+						"\n"
+						"layout(location = 0) rayPayloadInEXT      dummy { vec3 dummyVec;};\n"
+						"layout(set      = 0, binding = 0, std430) buffer result\n"
+						"{\n"
+						"    uint resultData[" + resultBufferSizeString + "];\n"
+						"};\n"
+						"\n"
+						"void ignoreIntersectionWrapper()\n"
+						"{\n"
+						"    ignoreIntersectionEXT;\n"
+						"}\n"
+						"\n"
+						"void main()\n"
+						"{\n"
+						"\n"
+						"    if (resultData[2] == 1)\n"
+						"    {\n"
+						"        ignoreIntersectionWrapper();\n"
+						"    }\n"
+						"\n"
+						"    resultData[0] = 1;\n"
+						"}\n";
+
+					break;
+				}
+
+				case Mode::IGNORE_ANY_HIT_STATICALLY:
+				{
+					aHitShader =
+						"#version 460 core\n"
+						"\n"
+						"#extension GL_EXT_ray_tracing : require\n"
+						"\n"
+						"hitAttributeEXT vec3 dummyAttribute;\n"
+						"\n"
+						"layout(location = 0) rayPayloadInEXT      dummy { vec3 dummyVec;};\n"
+						"layout(set      = 0, binding = 0, std430) buffer result\n"
+						"{\n"
+						"    uint resultData[" + resultBufferSizeString + "];\n"
+						"};\n"
+						"\n"
+						"void ignoreIntersectionWrapper()\n"
+						"{\n"
+						"    ignoreIntersectionEXT;\n"
+						"}\n"
+						"\n"
+						"void main()\n"
+						"{\n"
+						"    ignoreIntersectionWrapper();\n"
+						"\n"
+						"    resultData[0] = 1;\n"
+						"}\n";
+
+					break;
+				}
+
+				case Mode::TERMINATE_ANY_HIT_DYNAMICALLY:
+				{
+					aHitShader =
+						"#version 460 core\n"
+						"\n"
+						"#extension GL_EXT_ray_tracing : require\n"
+						"\n"
+						"hitAttributeEXT vec3 dummyAttribute;\n"
+						"\n"
+						"layout(location = 0) rayPayloadInEXT      dummy { vec3 dummyVec;};\n"
+						"layout(set      = 0, binding = 0, std430) buffer result\n"
+						"{\n"
+						"    uint resultData[" + resultBufferSizeString + "];\n"
+						"};\n"
+						"\n"
+						"void terminateRayWrapper()\n"
+						"{\n"
+						"    terminateRayEXT;\n"
+						"}\n"
+						"\n"
+						"void main()\n"
+						"{\n"
+						"    if (resultData[2] == 1)\n"
+						"    {\n"
+						"        terminateRayWrapper();\n"
+						"    }\n"
+						"\n"
+						"    resultData[0] = 1;\n"
+						"}\n";
+
+					break;
+				}
+
+				case Mode::TERMINATE_ANY_HIT_STATICALLY:
+				case Mode::TERMINATE_INTERSECTION_STATICALLY:
+				{
+					aHitShader =
+						"#version 460 core\n"
+						"\n"
+						"#extension GL_EXT_ray_tracing : require\n"
+						"\n"
+						"hitAttributeEXT vec3 dummyAttribute;\n"
+						"\n"
+						"layout(location = 0) rayPayloadInEXT      dummy { vec3 dummyVec;};\n"
+						"layout(set      = 0, binding = 0, std430) buffer result\n"
+						"{\n"
+						"    uint resultData[" + resultBufferSizeString + "];\n"
+						"};\n"
+						"\n"
+						"void terminateRayWrapper()\n"
+						"{\n"
+						"    terminateRayEXT;\n"
+						"}\n"
+						"\n"
+						"void main()\n"
+						"{\n"
+						"    terminateRayWrapper();\n"
+						"\n"
+						"    resultData[0] = 1;\n"
+						"}\n";
+
+					break;
+				}
+
+				case Mode::TERMINATE_INTERSECTION_DYNAMICALLY:
+				{
+					aHitShader =
+						"#version 460 core\n"
+						"\n"
+						"#extension GL_EXT_ray_tracing : require\n"
+						"\n"
+						"hitAttributeEXT vec3 dummyAttribute;\n"
+						"\n"
+						"layout(location = 0) rayPayloadInEXT      dummy { vec3 dummyVec;};\n"
+						"layout(set      = 0, binding = 0, std430) buffer result\n"
+						"{\n"
+						"    uint resultData[" + resultBufferSizeString + "];\n"
+						"};\n"
+						"\n"
+						"void terminateRayWrapper()\n"
+						"{\n"
+						"    terminateRayEXT;\n"
+						"}\n"
+						"\n"
+						"void main()\n"
+						"{\n"
+						"    if (resultData[3] == 1)\n"
+						"    {\n"
+						"        terminateRayWrapper();\n"
+						"    }\n"
+						"\n"
+						"    resultData[0] = 1;\n"
+						"}\n";
+
+					break;
+				}
+
+				default:
+				{
+					DE_ASSERT(false);
+				}
+			}
+
+			programCollection.glslSources.add("ahit") << glu::AnyHitSource(aHitShader) << buildOptions;
+		}
+
+		if (m_mode == Mode::TERMINATE_INTERSECTION_DYNAMICALLY ||
+		    m_mode == Mode::TERMINATE_INTERSECTION_STATICALLY)
+		{
+			std::stringstream css;
+
+			css <<
+				"#version 460 core\n"
+				"\n"
+				"#extension GL_EXT_ray_tracing : require\n"
+				"\n"
+				"hitAttributeEXT vec3 hitAttribute;\n"
+				"\n"
+				"layout(set = 0, binding = 0, std430) buffer result\n"
+				"{\n"
+				"    uint resultData[4];\n"
+				"};\n"
+				"\n"
+				"void generateIntersection()\n"
+				"{\n"
+				"    reportIntersectionEXT(0.95f, 0);\n"
+				"}\n"
+				"\n"
+				"void main()\n"
+				"{\n";
+
+			if (m_mode == Mode::TERMINATE_INTERSECTION_DYNAMICALLY)
+			{
+				css <<	"    if (resultData[3] == 1)\n"
+						"    {\n";
+			}
+
+			css <<	"    generateIntersection();\n";
+
+			if (m_mode == Mode::TERMINATE_INTERSECTION_DYNAMICALLY)
+			{
+				css <<	"    }\n";
+			}
+
+			css <<
+				"\n"
+				"    resultData[2] = 1;\n"
+				"}\n";
+
+			programCollection.glslSources.add("intersection") << glu::IntersectionSource(css.str() ) << buildOptions;
+		}
+
+		{
+			std::stringstream css;
+
+			css <<
+				"#version 460 core\n"
+				"\n"
+				"#extension GL_EXT_ray_tracing : require\n"
+				"\n"
+				"layout(location = 0) rayPayloadInEXT      vec3   dummy;\n"
+				"layout(set      = 0, binding = 0, std430) buffer result\n"
+				"{\n"
+				"    uint resultData[2];\n"
+				"};\n"
+				"\n"
+				"void main()\n"
+				"{\n"
+				"    resultData[1] = 1;\n"
+				"}\n";
+
+			programCollection.glslSources.add("miss") << glu::MissSource(css.str() ) << buildOptions;
+		}
+
+		{
+			std::stringstream css;
+
+			css <<
+				"#version 460 core\n"
+				"\n"
+				"#extension GL_EXT_ray_tracing : require\n"
+				"\n"
+				"layout(location = 0)              rayPayloadEXT vec3                     dummy;\n"
+				"layout(set      = 0, binding = 1) uniform       accelerationStructureEXT topLevelAS;\n"
+				"\n"
+				"void main()\n"
+				"{\n"
+				"    uint  nInvocation = gl_LaunchIDEXT.z * gl_LaunchSizeEXT.x * gl_LaunchSizeEXT.y + gl_LaunchIDEXT.y * gl_LaunchSizeEXT.x + gl_LaunchIDEXT.x;\n"
+				"    uint  rayFlags    = 0;\n"
+				"    uint  cullMask    = 0xFF;\n"
+				"    float tmin        = 0.001;\n"
+				"    float tmax        = 9.0;\n"
+				"    vec3  origin      = vec3(-1,  -1,  -1);\n"
+				"    vec3  target      = vec3(0.5, 0.5,  0);\n"
+				"    vec3  direct      = normalize(target - origin);\n"
+				"\n"
+				"    traceRayEXT(topLevelAS, rayFlags, cullMask, 0, 0, 0, origin, tmin, direct, tmax, 0);\n"
+				"}\n";
+
+			programCollection.glslSources.add("rgen") << glu::RaygenSource(css.str() ) << buildOptions;
+		}
+	}
+
+	bool verifyResultBuffer (const void* resultDataPtr) const final
+	{
+		const deUint32* resultU32DataPtr	= reinterpret_cast<const deUint32*>(resultDataPtr);
+		bool			result				= false;
+
+		switch (m_mode)
+		{
+			case Mode::IGNORE_ANY_HIT_DYNAMICALLY:
+			case Mode::IGNORE_ANY_HIT_STATICALLY:
+			{
+				if (resultU32DataPtr[0] != 0 ||
+					resultU32DataPtr[1] != 1)
+				{
+					goto end;
+				}
+
+				result = true;
+
+				break;
+			}
+
+			case Mode::TERMINATE_ANY_HIT_DYNAMICALLY:
+			case Mode::TERMINATE_ANY_HIT_STATICALLY:
+			{
+				if (resultU32DataPtr[0] != 0 ||
+					resultU32DataPtr[1] != 0)
+				{
+					goto end;
+				}
+
+				result = true;
+
+				break;
+			}
+
+			case Mode::TERMINATE_INTERSECTION_DYNAMICALLY:
+			case Mode::TERMINATE_INTERSECTION_STATICALLY:
+			{
+				if (resultU32DataPtr[0] != 0 ||
+					resultU32DataPtr[1] != 0 ||
+					resultU32DataPtr[2] != 0)
+				{
+					goto end;
+				}
+
+				result = true;
+
+				break;
+			}
+
+			default:
+			{
+				TCU_FAIL("This should never be reached");
+			}
+		}
+
+end:
+		return result;
+	}
+
+private:
+	std::unique_ptr<ASProviderBase>					m_asProviderPtr;
+	const Mode										m_mode;
+	std::unique_ptr<TopLevelAccelerationStructure>	m_tlPtr;
+};
+
 /* Generic misc test instance */
 class RayTracingMiscTestInstance : public TestInstance
 {
@@ -7571,10 +8136,13 @@
 			}
 		}
 
-		missShaderStackSize = deviceInterface.getRayTracingShaderGroupStackSizeKHR(	deviceVk,
-																					*pipelineVkPtr,
-																					static_cast<deUint32>(ShaderGroups::MISS_GROUP),
-																					VK_SHADER_GROUP_SHADER_GENERAL_KHR);
+		if (nMissGroups > 0u)
+		{
+			missShaderStackSize = deviceInterface.getRayTracingShaderGroupStackSizeKHR(	deviceVk,
+																						*pipelineVkPtr,
+																						static_cast<deUint32>(ShaderGroups::MISS_GROUP),
+																						VK_SHADER_GROUP_SHADER_GENERAL_KHR);
+		}
 
 		for (deUint32 nCallableShader = 0; nCallableShader < static_cast<deUint32>(callableShaderCollectionNames.size() ); ++nCallableShader)
 		{
@@ -7626,43 +8194,52 @@
 																								0u,																								/* opaqueCaptureAddress        */
 																								0u);																							/* shaderBindingTableOffset    */
 
-	const void*	missShaderBindingGroupShaderRecordDataPtr	= m_testPtr->getShaderRecordData(					ShaderGroups::MISS_GROUP);
-	const auto	missShaderBindingTablePtr					= rayTracingPipelinePtr->createShaderBindingTable(	deviceInterface,
-																												deviceVk,
-																												*pipelineVkPtr,
-																												allocator,
-																												m_rayTracingPropsPtr->getShaderGroupHandleSize		(),
-																												m_rayTracingPropsPtr->getShaderGroupBaseAlignment	(),
-																												missGroupIndex,
-																												nMissGroups,																					/* groupCount                  */
-																												0u,																								/* additionalBufferCreateFlags */
-																												0u,																								/* additionalBufferUsageFlags  */
-																												MemoryRequirement::Any,
-																												0u,																								/* opaqueCaptureAddress       */
-																												0u,																								/* shaderBindingTableOffset   */
-																												m_testPtr->getShaderRecordSize(ShaderGroups::MISS_GROUP),
-																												&missShaderBindingGroupShaderRecordDataPtr);
+	auto missShaderBindingTablePtr = de::MovePtr<BufferWithMemory>();
+	if (nMissGroups > 0u)
+	{
+		const void*	missShaderBindingGroupShaderRecordDataPtr	= m_testPtr->getShaderRecordData(					ShaderGroups::MISS_GROUP);
+		missShaderBindingTablePtr								= rayTracingPipelinePtr->createShaderBindingTable(	deviceInterface,
+																													deviceVk,
+																													*pipelineVkPtr,
+																													allocator,
+																													m_rayTracingPropsPtr->getShaderGroupHandleSize		(),
+																													m_rayTracingPropsPtr->getShaderGroupBaseAlignment	(),
+																													missGroupIndex,
+																													nMissGroups,																					/* groupCount                  */
+																													0u,																								/* additionalBufferCreateFlags */
+																													0u,																								/* additionalBufferUsageFlags  */
+																													MemoryRequirement::Any,
+																													0u,																								/* opaqueCaptureAddress       */
+																													0u,																								/* shaderBindingTableOffset   */
+																													m_testPtr->getShaderRecordSize(ShaderGroups::MISS_GROUP),
+																													&missShaderBindingGroupShaderRecordDataPtr);
+	}
 
-	const void*	hitShaderBindingGroupShaderRecordDataPtr	= m_testPtr->getShaderRecordData(					ShaderGroups::HIT_GROUP);
-	const auto	hitShaderBindingTablePtr					= rayTracingPipelinePtr->createShaderBindingTable(	deviceInterface,
-																												deviceVk,
-																												*pipelineVkPtr,
-																												allocator,
-																												m_rayTracingPropsPtr->getShaderGroupHandleSize		(),
-																												m_rayTracingPropsPtr->getShaderGroupBaseAlignment	(),
-																												hitGroupIndex,
-																												nHitGroups,																						/* groupCount                  */
-																												0u,																								/* additionalBufferCreateFlags */
-																												0u,																								/* additionalBufferUsageFlags  */
-																												MemoryRequirement::Any,
-																												0u,																								/* opaqueCaptureAddress       */
-																												0u,																								/* shaderBindingTableOffset   */
-																												m_testPtr->getShaderRecordSize(ShaderGroups::HIT_GROUP),
-																												&hitShaderBindingGroupShaderRecordDataPtr);
+	auto hitShaderBindingTablePtr = de::MovePtr<BufferWithMemory>();
+	if (nHitGroups > 0u)
+	{
+		const void*	hitShaderBindingGroupShaderRecordDataPtr	= m_testPtr->getShaderRecordData(					ShaderGroups::HIT_GROUP);
+		hitShaderBindingTablePtr								= rayTracingPipelinePtr->createShaderBindingTable(	deviceInterface,
+																													deviceVk,
+																													*pipelineVkPtr,
+																													allocator,
+																													m_rayTracingPropsPtr->getShaderGroupHandleSize		(),
+																													m_rayTracingPropsPtr->getShaderGroupBaseAlignment	(),
+																													hitGroupIndex,
+																													nHitGroups,																						/* groupCount                  */
+																													0u,																								/* additionalBufferCreateFlags */
+																													0u,																								/* additionalBufferUsageFlags  */
+																													MemoryRequirement::Any,
+																													0u,																								/* opaqueCaptureAddress       */
+																													0u,																								/* shaderBindingTableOffset   */
+																													m_testPtr->getShaderRecordSize(ShaderGroups::HIT_GROUP),
+																													&hitShaderBindingGroupShaderRecordDataPtr);
+	}
 
 	{
-		const auto resultBufferCreateInfo	= makeBufferCreateInfo(	resultBufferSize,
-																	VK_BUFFER_USAGE_STORAGE_BUFFER_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT);
+		const auto resultBufferCreateInfo	= makeBufferCreateInfo					(	resultBufferSize,
+																						VK_BUFFER_USAGE_STORAGE_BUFFER_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT);
+		const auto resultBufferDataVec		= m_testPtr->getResultBufferStartData	();
 
 		resultBufferPtr	= de::MovePtr<BufferWithMemory>(
 			new BufferWithMemory(	deviceInterface,
@@ -7670,6 +8247,22 @@
 									allocator,
 									resultBufferCreateInfo,
 									MemoryRequirement::HostVisible));
+
+		if (resultBufferDataVec.size() > 0)
+		{
+			DE_ASSERT(static_cast<deUint32>(resultBufferDataVec.size() ) == resultBufferSize);
+
+			memcpy(	resultBufferPtr->getAllocation().getHostPtr(),
+					resultBufferDataVec.data(),
+					resultBufferDataVec.size() );
+
+			flushMappedMemoryRange(	deviceInterface,
+									deviceVk,
+									resultBufferPtr->getAllocation().getMemory(),
+									resultBufferPtr->getAllocation().getOffset(),
+									resultBufferSize);
+		}
+
 	}
 
 	beginCommandBuffer(	deviceInterface,
@@ -7688,24 +8281,27 @@
 			tlasVkVec.push_back(*currentTLASPtr->getPtr() );
 		}
 
-		deviceInterface.cmdFillBuffer(	*cmdBufferPtr,
-										**resultBufferPtr,
-										0,					/* dstOffset */
-										VK_WHOLE_SIZE,
-										0);					/* data */
-
+		if (m_testPtr->getResultBufferStartData().size() == 0)
 		{
-			const auto postFillBarrier = makeBufferMemoryBarrier(	VK_ACCESS_TRANSFER_WRITE_BIT,	/* srcAccessMask */
-																	VK_ACCESS_SHADER_WRITE_BIT,		/* dstAccessMask */
-																	**resultBufferPtr,
-																	0, /* offset */
-																	VK_WHOLE_SIZE);
+			deviceInterface.cmdFillBuffer(	*cmdBufferPtr,
+											**resultBufferPtr,
+											0,					/* dstOffset */
+											VK_WHOLE_SIZE,
+											0);					/* data */
 
-			cmdPipelineBufferMemoryBarrier(	deviceInterface,
-											*cmdBufferPtr,
-											VK_PIPELINE_STAGE_TRANSFER_BIT,					/* srcStageMask */
-											VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR,	/* dstStageMask */
-											&postFillBarrier);
+			{
+				const auto postFillBarrier = makeBufferMemoryBarrier(	VK_ACCESS_TRANSFER_WRITE_BIT,	/* srcAccessMask */
+																		VK_ACCESS_SHADER_WRITE_BIT,		/* dstAccessMask */
+																		**resultBufferPtr,
+																		0, /* offset */
+																		VK_WHOLE_SIZE);
+
+				cmdPipelineBufferMemoryBarrier(	deviceInterface,
+												*cmdBufferPtr,
+												VK_PIPELINE_STAGE_TRANSFER_BIT,					/* srcStageMask */
+												VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR,	/* dstStageMask */
+												&postFillBarrier);
+			}
 		}
 
 		{
@@ -7767,18 +8363,24 @@
 																														0 /* offset */),
 																								m_rayTracingPropsPtr->getShaderGroupHandleSize(),
 																								m_rayTracingPropsPtr->getShaderGroupHandleSize() );
-			const auto	missShaderBindingTableRegion		= makeStridedDeviceAddressRegionKHR(getBufferDeviceAddress(	deviceInterface,
-																														deviceVk,
-																														missShaderBindingTablePtr->get(),
-																														0 /* offset */),
-																								m_rayTracingPropsPtr->getShaderGroupHandleSize() + m_testPtr->getShaderRecordSize(ShaderGroups::MISS_GROUP),
-																								m_rayTracingPropsPtr->getShaderGroupHandleSize());
-			const auto	hitShaderBindingTableRegion			= makeStridedDeviceAddressRegionKHR(getBufferDeviceAddress(	deviceInterface,
-																														deviceVk,
-																														hitShaderBindingTablePtr->get(),
-																														0 /* offset */),
-																								m_rayTracingPropsPtr->getShaderGroupHandleSize() + m_testPtr->getShaderRecordSize(ShaderGroups::HIT_GROUP),
-																								m_rayTracingPropsPtr->getShaderGroupHandleSize() );
+			const auto	missShaderBindingTableRegion		= ((nMissGroups > 0u)	?	makeStridedDeviceAddressRegionKHR(getBufferDeviceAddress(	deviceInterface,
+																																					deviceVk,
+																																					missShaderBindingTablePtr->get(),
+																																					0 /* offset */),
+																															m_rayTracingPropsPtr->getShaderGroupHandleSize() + m_testPtr->getShaderRecordSize(ShaderGroups::MISS_GROUP),
+																															m_rayTracingPropsPtr->getShaderGroupHandleSize())
+																					:	makeStridedDeviceAddressRegionKHR(DE_NULL,
+																														  0, /* stride */
+																														  0  /* size   */));
+			const auto	hitShaderBindingTableRegion			= ((nHitGroups > 0u)	?	makeStridedDeviceAddressRegionKHR(getBufferDeviceAddress(	deviceInterface,
+																																					deviceVk,
+																																					hitShaderBindingTablePtr->get(),
+																																					0 /* offset */),
+																															m_rayTracingPropsPtr->getShaderGroupHandleSize() + m_testPtr->getShaderRecordSize(ShaderGroups::HIT_GROUP),
+																															m_rayTracingPropsPtr->getShaderGroupHandleSize() )
+																					:	makeStridedDeviceAddressRegionKHR(DE_NULL,
+																														  0, /* stride */
+																														  0  /* size   */));
 
 			const auto	callableShaderBindingTableRegion	=	(callableShaderCollectionNames.size() > 0)	? makeStridedDeviceAddressRegionKHR(getBufferDeviceAddress(	deviceInterface,
 																																										deviceVk,
@@ -8047,6 +8649,7 @@
 			break;
 		}
 
+		case TestType::RECURSIVE_TRACES_0:
 		case TestType::RECURSIVE_TRACES_1:
 		case TestType::RECURSIVE_TRACES_2:
 		case TestType::RECURSIVE_TRACES_3:
@@ -8077,7 +8680,9 @@
 		case TestType::RECURSIVE_TRACES_28:
 		case TestType::RECURSIVE_TRACES_29:
 		{
-			const auto nLevels = static_cast<deUint32>(m_data.type) - static_cast<deUint32>(TestType::RECURSIVE_TRACES_1) + 1;
+			const auto nLevels	= ((m_data.type == TestType::RECURSIVE_TRACES_0)
+								? 0u
+								: (static_cast<deUint32>(m_data.type) - static_cast<deUint32>(TestType::RECURSIVE_TRACES_1) + 1));
 
 			m_testPtr.reset(
 				new RecursiveTracesTest(m_data.geometryType, m_data.asLayout, nLevels)
@@ -8145,6 +8750,22 @@
 			break;
 		}
 
+		case TestType::IGNORE_ANY_HIT_DYNAMICALLY:
+		case TestType::IGNORE_ANY_HIT_STATICALLY:
+		case TestType::TERMINATE_ANY_HIT_DYNAMICALLY:
+		case TestType::TERMINATE_ANY_HIT_STATICALLY:
+		case TestType::TERMINATE_INTERSECTION_DYNAMICALLY:
+		case TestType::TERMINATE_INTERSECTION_STATICALLY:
+		{
+			m_testPtr.reset(
+				new TerminationTest(TerminationTest::getModeFromTestType(m_data.type) )
+			);
+
+			m_testPtr->initPrograms(programCollection);
+
+			break;
+		}
+
 		default:
 		{
 			deAssertFail(	"This location should never be reached",
@@ -8246,6 +8867,7 @@
 			break;
 		}
 
+		case TestType::RECURSIVE_TRACES_0:
 		case TestType::RECURSIVE_TRACES_1:
 		case TestType::RECURSIVE_TRACES_2:
 		case TestType::RECURSIVE_TRACES_3:
@@ -8276,7 +8898,9 @@
 		case TestType::RECURSIVE_TRACES_28:
 		case TestType::RECURSIVE_TRACES_29:
 		{
-			const auto nLevels = static_cast<deUint32>(m_data.type) - static_cast<deUint32>(TestType::RECURSIVE_TRACES_1) + 1;
+			const auto nLevels	= ((m_data.type == TestType::RECURSIVE_TRACES_0)
+								? 0u
+								: (static_cast<deUint32>(m_data.type) - static_cast<deUint32>(TestType::RECURSIVE_TRACES_1) + 1));
 
 			if (m_testPtr == nullptr)
 			{
@@ -8348,6 +8972,23 @@
 			break;
 		}
 
+		case TestType::IGNORE_ANY_HIT_DYNAMICALLY:
+		case TestType::IGNORE_ANY_HIT_STATICALLY:
+		case TestType::TERMINATE_ANY_HIT_DYNAMICALLY:
+		case TestType::TERMINATE_ANY_HIT_STATICALLY:
+		case TestType::TERMINATE_INTERSECTION_DYNAMICALLY:
+		case TestType::TERMINATE_INTERSECTION_STATICALLY:
+		{
+			if (m_testPtr == nullptr)
+			{
+				m_testPtr.reset(
+					new TerminationTest(TerminationTest::getModeFromTestType(m_data.type) )
+				);
+			}
+
+			break;
+		}
+
 		default:
 		{
 			deAssertFail(	"This location should never be reached",
@@ -8630,6 +9271,16 @@
 	{
 		const std::string newTestCaseName = "recursiveTraces_" + de::toString(getSuffixForGeometryType(currentGeometryType) ) + "_";
 
+		// 0 recursion levels.
+		{
+			auto newTestCasePtr = new RayTracingTestCase(	testCtx,
+															(newTestCaseName + "0").data(),
+															"Verifies that relevant shader stages can correctly read large ray payloads provided by raygen shader stage.",
+															CaseDef{TestType::RECURSIVE_TRACES_0, currentGeometryType, AccelerationStructureLayout::ONE_TL_ONE_BL_ONE_GEOMETRY});
+
+			miscGroupPtr->addChild(newTestCasePtr);
+		}
+
 		// TODO: for (deUint32 nLevels = 1; nLevels <= 29; ++nLevels)
 		for (deUint32 nLevels = 1; nLevels <= 15; ++nLevels)
 		{
@@ -8642,6 +9293,40 @@
 		}
 	}
 
+	{
+		auto newTestCase1Ptr = new RayTracingTestCase(	testCtx,
+														"OpIgnoreIntersectionKHR_AnyHitStatically",
+														"Verifies that OpIgnoreIntersectionKHR works as per spec (static invocations).",
+														CaseDef{static_cast<TestType>(static_cast<deUint32>(TestType::IGNORE_ANY_HIT_STATICALLY) ), GeometryType::TRIANGLES, AccelerationStructureLayout::COUNT});
+		auto newTestCase2Ptr = new RayTracingTestCase(	testCtx,
+														"OpIgnoreIntersectionKHR_AnyHitDynamically",
+														"Verifies that OpIgnoreIntersectionKHR works as per spec (dynamic invocations).",
+														CaseDef{static_cast<TestType>(static_cast<deUint32>(TestType::IGNORE_ANY_HIT_DYNAMICALLY) ), GeometryType::TRIANGLES, AccelerationStructureLayout::COUNT});
+		auto newTestCase3Ptr = new RayTracingTestCase(	testCtx,
+														"OpTerminateRayKHR_AnyHitStatically",
+														"Verifies that OpTerminateRayKHR works as per spec (static invocations).",
+														CaseDef{static_cast<TestType>(static_cast<deUint32>(TestType::TERMINATE_ANY_HIT_STATICALLY) ), GeometryType::TRIANGLES, AccelerationStructureLayout::COUNT});
+		auto newTestCase4Ptr = new RayTracingTestCase(	testCtx,
+														"OpTerminateRayKHR_AnyHitDynamically",
+														"Verifies that OpTerminateRayKHR works as per spec (dynamic invocations).",
+														CaseDef{static_cast<TestType>(static_cast<deUint32>(TestType::TERMINATE_ANY_HIT_DYNAMICALLY) ), GeometryType::TRIANGLES, AccelerationStructureLayout::COUNT});
+		auto newTestCase5Ptr = new RayTracingTestCase(	testCtx,
+														"OpTerminateRayKHR_IntersectionStatically",
+														"Verifies that OpTerminateRayKHR works as per spec (static invocations).",
+														CaseDef{static_cast<TestType>(static_cast<deUint32>(TestType::TERMINATE_INTERSECTION_STATICALLY) ), GeometryType::AABB, AccelerationStructureLayout::COUNT});
+		auto newTestCase6Ptr = new RayTracingTestCase(	testCtx,
+														"OpTerminateRayKHR_IntersectionDynamically",
+														"Verifies that OpTerminateRayKHR works as per spec (dynamic invocations).",
+														CaseDef{static_cast<TestType>(static_cast<deUint32>(TestType::TERMINATE_INTERSECTION_DYNAMICALLY) ), GeometryType::AABB, AccelerationStructureLayout::COUNT});
+
+		miscGroupPtr->addChild(newTestCase1Ptr);
+		miscGroupPtr->addChild(newTestCase2Ptr);
+		miscGroupPtr->addChild(newTestCase3Ptr);
+		miscGroupPtr->addChild(newTestCase4Ptr);
+		miscGroupPtr->addChild(newTestCase5Ptr);
+		miscGroupPtr->addChild(newTestCase6Ptr);
+	}
+
 	return miscGroupPtr.release();
 }
 
diff --git a/external/vulkancts/modules/vulkan/ray_tracing/vktRayTracingProceduralGeometryTests.cpp b/external/vulkancts/modules/vulkan/ray_tracing/vktRayTracingProceduralGeometryTests.cpp
new file mode 100644
index 0000000..b02d804
--- /dev/null
+++ b/external/vulkancts/modules/vulkan/ray_tracing/vktRayTracingProceduralGeometryTests.cpp
@@ -0,0 +1,571 @@
+/*------------------------------------------------------------------------
+ * Vulkan Conformance Tests
+ * ------------------------
+ *
+ * Copyright (c) 2020 The Khronos Group Inc.
+ *
+ * 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 Test procedural geometry with complex bouding box sets
+ *//*--------------------------------------------------------------------*/
+
+#include "vktRayTracingProceduralGeometryTests.hpp"
+#include "vkDefs.hpp"
+#include "vktTestCase.hpp"
+#include "vktTestGroupUtil.hpp"
+#include "vkCmdUtil.hpp"
+#include "vkObjUtil.hpp"
+#include "vkBuilderUtil.hpp"
+#include "vkBarrierUtil.hpp"
+#include "vkBufferWithMemory.hpp"
+#include "vkImageWithMemory.hpp"
+#include "vkTypeUtil.hpp"
+#include "vkImageUtil.hpp"
+#include "vkRayTracingUtil.hpp"
+#include "tcuVectorUtil.hpp"
+#include "tcuTexture.hpp"
+#include "tcuTestLog.hpp"
+#include "tcuImageCompare.hpp"
+#include "tcuFloat.hpp"
+
+namespace vkt
+{
+namespace RayTracing
+{
+namespace
+{
+using namespace vk;
+using namespace vkt;
+
+static const VkFlags	ALL_RAY_TRACING_STAGES	= VK_SHADER_STAGE_RAYGEN_BIT_KHR
+												| VK_SHADER_STAGE_ANY_HIT_BIT_KHR
+												| VK_SHADER_STAGE_CLOSEST_HIT_BIT_KHR
+												| VK_SHADER_STAGE_MISS_BIT_KHR
+												| VK_SHADER_STAGE_INTERSECTION_BIT_KHR
+												| VK_SHADER_STAGE_CALLABLE_BIT_KHR;
+
+enum class TestType
+{
+	OBJECT_BEHIND_BOUNDING_BOX = 0,
+	TRIANGLE_IN_BETWEEN
+};
+
+class RayTracingProceduralGeometryTestBase : public TestInstance
+{
+public:
+
+	RayTracingProceduralGeometryTestBase	(Context& context);
+	~RayTracingProceduralGeometryTestBase	(void) = default;
+
+	tcu::TestStatus iterate					(void) override;
+
+protected:
+
+	virtual void setupRayTracingPipeline() = 0;
+	virtual void setupAccelerationStructures() = 0;
+
+private:
+
+	VkWriteDescriptorSetAccelerationStructureKHR	makeASWriteDescriptorSet	(const VkAccelerationStructureKHR* pAccelerationStructure);
+	void											clearBuffer					(de::SharedPtr<BufferWithMemory> buffer, VkDeviceSize bufferSize);
+
+protected:
+
+	de::MovePtr<RayTracingPipeline>									m_rayTracingPipeline;
+	Move<VkPipelineLayout>											m_pipelineLayout;
+	Move<VkPipeline>												m_pipeline;
+	de::MovePtr<BufferWithMemory>									m_rgenShaderBT;
+	de::MovePtr<BufferWithMemory>									m_chitShaderBT;
+	de::MovePtr<BufferWithMemory>									m_missShaderBT;
+
+	Move<VkDescriptorSetLayout>										m_descriptorSetLayout;
+	Move<VkCommandPool>												m_cmdPool;
+	Move<VkCommandBuffer>											m_cmdBuffer;
+
+	std::vector<de::SharedPtr<BottomLevelAccelerationStructure> >	m_blasVect;
+	de::SharedPtr<TopLevelAccelerationStructure>					m_referenceTLAS;
+	de::SharedPtr<TopLevelAccelerationStructure>					m_resultTLAS;
+};
+
+RayTracingProceduralGeometryTestBase::RayTracingProceduralGeometryTestBase(Context& context)
+	: vkt::TestInstance	(context)
+	, m_referenceTLAS	(makeTopLevelAccelerationStructure().release())
+	, m_resultTLAS		(makeTopLevelAccelerationStructure().release())
+{
+}
+
+tcu::TestStatus RayTracingProceduralGeometryTestBase::iterate(void)
+{
+	const DeviceInterface&	vkd					= m_context.getDeviceInterface();
+	const VkDevice			device				= m_context.getDevice();
+	const deUint32			queueFamilyIndex	= m_context.getUniversalQueueFamilyIndex();
+	const VkQueue			queue				= m_context.getUniversalQueue();
+	Allocator&				allocator			= m_context.getDefaultAllocator();
+	const deUint32			sgHandleSize		= m_context.getRayTracingPipelineProperties().shaderGroupHandleSize;
+	const deUint32			imageSize			= 64u;
+
+	const Move<VkDescriptorPool> descriptorPool = DescriptorPoolBuilder()
+		.addType(VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR, 2u)
+		.addType(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, 2u)
+		.build(vkd, device, VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT, 2u);
+
+	m_descriptorSetLayout = DescriptorSetLayoutBuilder()
+		.addSingleBinding(VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR, ALL_RAY_TRACING_STAGES)	// as with single/four aabb's
+		.addSingleBinding(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, ALL_RAY_TRACING_STAGES)				// ssbo with result/reference values
+		.build(vkd, device);
+
+	const Move<VkDescriptorSet>			referenceDescriptorSet	= makeDescriptorSet(vkd, device, *descriptorPool, *m_descriptorSetLayout);
+	const Move<VkDescriptorSet>			resultDescriptorSet		= makeDescriptorSet(vkd, device, *descriptorPool, *m_descriptorSetLayout);
+
+	const VkDeviceSize					resultBufferSize		= imageSize * imageSize * sizeof(int);
+	const VkBufferCreateInfo			resultBufferCreateInfo	= makeBufferCreateInfo(resultBufferSize, VK_BUFFER_USAGE_STORAGE_BUFFER_BIT | VK_BUFFER_USAGE_TRANSFER_SRC_BIT);
+	de::SharedPtr<BufferWithMemory>		referenceBuffer			= de::SharedPtr<BufferWithMemory>(new BufferWithMemory(vkd, device, allocator, resultBufferCreateInfo, MemoryRequirement::HostVisible));
+	de::SharedPtr<BufferWithMemory>		resultBuffer			= de::SharedPtr<BufferWithMemory>(new BufferWithMemory(vkd, device, allocator, resultBufferCreateInfo, MemoryRequirement::HostVisible));
+
+	m_rayTracingPipeline = de::newMovePtr<RayTracingPipeline>();
+
+	setupRayTracingPipeline();
+
+	const VkStridedDeviceAddressRegionKHR	rgenSBTR		= makeStridedDeviceAddressRegionKHR(getBufferDeviceAddress(vkd, device, m_rgenShaderBT->get(), 0), sgHandleSize, sgHandleSize);
+	const VkStridedDeviceAddressRegionKHR	chitSBTR		= makeStridedDeviceAddressRegionKHR(getBufferDeviceAddress(vkd, device, m_chitShaderBT->get(), 0), sgHandleSize, sgHandleSize);
+	const VkStridedDeviceAddressRegionKHR	missSBTR		= makeStridedDeviceAddressRegionKHR(getBufferDeviceAddress(vkd, device, m_missShaderBT->get(), 0), sgHandleSize, sgHandleSize);
+	const VkStridedDeviceAddressRegionKHR	callableSBTR	= makeStridedDeviceAddressRegionKHR(DE_NULL, 0, 0);
+
+	m_cmdPool	= createCommandPool(vkd, device, 0, queueFamilyIndex);
+	m_cmdBuffer	= allocateCommandBuffer(vkd, device, *m_cmdPool, VK_COMMAND_BUFFER_LEVEL_PRIMARY);
+
+	// clear result and reference buffers
+	clearBuffer(resultBuffer, resultBufferSize);
+	clearBuffer(referenceBuffer, resultBufferSize);
+
+	beginCommandBuffer(vkd, *m_cmdBuffer, 0u);
+	{
+		setupAccelerationStructures();
+
+		// update descriptor sets
+		{
+			typedef DescriptorSetUpdateBuilder::Location DSL;
+
+			const VkWriteDescriptorSetAccelerationStructureKHR	referenceAS		= makeASWriteDescriptorSet(m_referenceTLAS->getPtr());
+			const VkDescriptorBufferInfo						referenceSSBO	= makeDescriptorBufferInfo(**referenceBuffer, 0u, VK_WHOLE_SIZE);
+			DescriptorSetUpdateBuilder()
+				.writeSingle(*referenceDescriptorSet, DSL::binding(0u), VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR, &referenceAS)
+				.writeSingle(*referenceDescriptorSet, DSL::binding(1u), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, &referenceSSBO)
+				.update(vkd, device);
+
+			const VkWriteDescriptorSetAccelerationStructureKHR	resultAS	= makeASWriteDescriptorSet(m_resultTLAS->getPtr());
+			const VkDescriptorBufferInfo						resultSSBO	= makeDescriptorBufferInfo(**resultBuffer, 0u, VK_WHOLE_SIZE);
+			DescriptorSetUpdateBuilder()
+				.writeSingle(*resultDescriptorSet, DSL::binding(0u), VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR, &resultAS)
+				.writeSingle(*resultDescriptorSet, DSL::binding(1u), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, &resultSSBO)
+				.update(vkd, device);
+		}
+
+		// wait for data transfers
+		const VkMemoryBarrier bufferUploadBarrier = makeMemoryBarrier(VK_ACCESS_TRANSFER_WRITE_BIT, VK_ACCESS_SHADER_READ_BIT);
+		cmdPipelineMemoryBarrier(vkd, *m_cmdBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR, &bufferUploadBarrier, 1u);
+
+		// wait for as build
+		const VkMemoryBarrier asBuildBarrier = makeMemoryBarrier(VK_ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_KHR, VK_ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR);
+		cmdPipelineMemoryBarrier(vkd, *m_cmdBuffer, VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR, VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR, &asBuildBarrier, 1u);
+
+		vkd.cmdBindPipeline(*m_cmdBuffer, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, *m_pipeline);
+
+		// generate reference
+		vkd.cmdBindDescriptorSets(*m_cmdBuffer, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, *m_pipelineLayout, 0, 1, &referenceDescriptorSet.get(), 0, DE_NULL);
+		cmdTraceRays(vkd, *m_cmdBuffer, &rgenSBTR, &missSBTR, &chitSBTR, &callableSBTR, imageSize, imageSize, 1);
+
+		// generate result
+		vkd.cmdBindDescriptorSets(*m_cmdBuffer, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, *m_pipelineLayout, 0, 1, &resultDescriptorSet.get(), 0, DE_NULL);
+		cmdTraceRays(vkd, *m_cmdBuffer, &rgenSBTR, &missSBTR, &chitSBTR, &callableSBTR, imageSize, imageSize, 1);
+
+		const VkMemoryBarrier postTraceMemoryBarrier = makeMemoryBarrier(VK_ACCESS_SHADER_WRITE_BIT, VK_ACCESS_TRANSFER_READ_BIT);
+		cmdPipelineMemoryBarrier(vkd, *m_cmdBuffer, VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR, VK_PIPELINE_STAGE_TRANSFER_BIT, &postTraceMemoryBarrier);
+	}
+	endCommandBuffer(vkd, *m_cmdBuffer);
+
+	submitCommandsAndWait(vkd, device, queue, m_cmdBuffer.get());
+
+	// verify result buffer
+	auto referenceAllocation = referenceBuffer->getAllocation();
+	invalidateMappedMemoryRange(vkd, device, referenceAllocation.getMemory(), referenceAllocation.getOffset(), resultBufferSize);
+
+	auto resultAllocation = resultBuffer->getAllocation();
+	invalidateMappedMemoryRange(vkd, device, resultAllocation.getMemory(), resultAllocation.getOffset(), resultBufferSize);
+
+	tcu::TextureFormat		imageFormat		(vk::mapVkFormat(VK_FORMAT_R8G8B8A8_UNORM));
+	tcu::PixelBufferAccess	referenceAccess	(imageFormat, imageSize, imageSize, 1, referenceAllocation.getHostPtr());
+	tcu::PixelBufferAccess	resultAccess	(imageFormat, imageSize, imageSize, 1, resultAllocation.getHostPtr());
+
+	if (tcu::intThresholdCompare(m_context.getTestContext().getLog(), "Result comparison", "", referenceAccess, resultAccess, tcu::UVec4(0), tcu::COMPARE_LOG_EVERYTHING))
+		return tcu::TestStatus::pass("Pass");
+	return tcu::TestStatus::fail("Fail");
+}
+
+VkWriteDescriptorSetAccelerationStructureKHR RayTracingProceduralGeometryTestBase::makeASWriteDescriptorSet(const VkAccelerationStructureKHR* pAccelerationStructure)
+{
+	return
+	{
+		VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR,	// VkStructureType						sType
+		DE_NULL,															// const void*							pNext
+		1u,																	// deUint32								accelerationStructureCount
+		pAccelerationStructure												// const VkAccelerationStructureKHR*	pAccelerationStructures
+	};
+}
+
+void RayTracingProceduralGeometryTestBase::clearBuffer(de::SharedPtr<BufferWithMemory> buffer, VkDeviceSize bufferSize)
+{
+	const DeviceInterface&	vkd				= m_context.getDeviceInterface();
+	const VkDevice			device			= m_context.getDevice();
+	auto&					bufferAlloc		= buffer->getAllocation();
+	void*					bufferPtr		= bufferAlloc.getHostPtr();
+
+	deMemset(bufferPtr, 1, static_cast<size_t>(bufferSize));
+	vk::flushAlloc(vkd, device, bufferAlloc);
+}
+
+class ObjectBehindBoundingBoxInstance : public RayTracingProceduralGeometryTestBase
+{
+public:
+
+	ObjectBehindBoundingBoxInstance(Context& context);
+
+	void setupRayTracingPipeline() override;
+	void setupAccelerationStructures() override;
+};
+
+ObjectBehindBoundingBoxInstance::ObjectBehindBoundingBoxInstance(Context& context)
+	: RayTracingProceduralGeometryTestBase(context)
+{
+}
+
+void ObjectBehindBoundingBoxInstance::setupRayTracingPipeline()
+{
+	const DeviceInterface&	vkd				= m_context.getDeviceInterface();
+	const VkDevice			device			= m_context.getDevice();
+	Allocator&				allocator		= m_context.getDefaultAllocator();
+	vk::BinaryCollection&	bc				= m_context.getBinaryCollection();
+	const deUint32			sgHandleSize	= m_context.getRayTracingPipelineProperties().shaderGroupHandleSize;
+	const deUint32			sgBaseAlignment	= m_context.getRayTracingPipelineProperties().shaderGroupBaseAlignment;
+
+	m_rayTracingPipeline->addShader(VK_SHADER_STAGE_RAYGEN_BIT_KHR,			createShaderModule(vkd, device, bc.get("rgen"), 0), 0);
+	m_rayTracingPipeline->addShader(VK_SHADER_STAGE_INTERSECTION_BIT_KHR,	createShaderModule(vkd, device, bc.get("isec"), 0), 1);
+	m_rayTracingPipeline->addShader(VK_SHADER_STAGE_CLOSEST_HIT_BIT_KHR,	createShaderModule(vkd, device, bc.get("chit"), 0), 1);
+	m_rayTracingPipeline->addShader(VK_SHADER_STAGE_MISS_BIT_KHR,			createShaderModule(vkd, device, bc.get("miss"), 0), 2);
+
+	m_pipelineLayout	= makePipelineLayout(vkd, device, m_descriptorSetLayout.get());
+	m_pipeline			= m_rayTracingPipeline->createPipeline(vkd, device, *m_pipelineLayout);
+	m_rgenShaderBT		= m_rayTracingPipeline->createShaderBindingTable(vkd, device, *m_pipeline, allocator, sgHandleSize, sgBaseAlignment, 0, 1);
+	m_chitShaderBT		= m_rayTracingPipeline->createShaderBindingTable(vkd, device, *m_pipeline, allocator, sgHandleSize, sgBaseAlignment, 1, 1);
+	m_missShaderBT		= m_rayTracingPipeline->createShaderBindingTable(vkd, device, *m_pipeline, allocator, sgHandleSize, sgBaseAlignment, 2, 1);
+}
+
+void ObjectBehindBoundingBoxInstance::setupAccelerationStructures()
+{
+	const DeviceInterface&	vkd			= m_context.getDeviceInterface();
+	const VkDevice			device		= m_context.getDevice();
+	Allocator&				allocator	= m_context.getDefaultAllocator();
+
+	// build reference acceleration structure - single aabb big enough to fit whole procedural geometry
+	de::SharedPtr<BottomLevelAccelerationStructure> referenceBLAS(makeBottomLevelAccelerationStructure().release());
+	referenceBLAS->setGeometryData(
+		{
+			{  0.0,  0.0, -64.0 },
+			{ 64.0, 64.0, -16.0 },
+		},
+		false,
+		0
+		);
+	referenceBLAS->createAndBuild(vkd, device, *m_cmdBuffer, allocator);
+	m_blasVect.push_back(referenceBLAS);
+
+	m_referenceTLAS->setInstanceCount(1);
+	m_referenceTLAS->addInstance(m_blasVect.back());
+	m_referenceTLAS->createAndBuild(vkd, device, *m_cmdBuffer, allocator);
+
+	// build result acceleration structure - wall of 4 aabb's and generated object is actualy behind it (as it is just 1.0 unit thick)
+	de::SharedPtr<BottomLevelAccelerationStructure> resultBLAS(makeBottomLevelAccelerationStructure().release());
+	resultBLAS->setGeometryData(
+		{
+			{  0.0,  0.0, 0.0 },	// |  |
+			{ 32.0, 32.0, 1.0 },	// |* |
+			{ 32.0,  0.0, 0.0 },	//    |  |
+			{ 64.0, 32.0, 1.0 },	//    | *|
+			{  0.0, 32.0, 0.0 },	// |* |
+			{ 32.0, 64.0, 1.0 },	// |  |
+			{ 32.0, 32.0, 0.0 },	//    | *|
+			{ 64.0, 64.0, 1.0 },	//    |  |
+		},
+		false,
+		0
+		);
+	resultBLAS->createAndBuild(vkd, device, *m_cmdBuffer, allocator);
+	m_blasVect.push_back(resultBLAS);
+
+	m_resultTLAS->setInstanceCount(1);
+	m_resultTLAS->addInstance(m_blasVect.back());
+	m_resultTLAS->createAndBuild(vkd, device, *m_cmdBuffer, allocator);
+}
+
+class TriangleInBeteenInstance : public RayTracingProceduralGeometryTestBase
+{
+public:
+
+	TriangleInBeteenInstance(Context& context);
+
+	void setupRayTracingPipeline() override;
+	void setupAccelerationStructures() override;
+};
+
+TriangleInBeteenInstance::TriangleInBeteenInstance(Context& context)
+	: RayTracingProceduralGeometryTestBase(context)
+{
+}
+
+void TriangleInBeteenInstance::setupRayTracingPipeline()
+{
+	const DeviceInterface&	vkd				= m_context.getDeviceInterface();
+	const VkDevice			device			= m_context.getDevice();
+	Allocator&				allocator		= m_context.getDefaultAllocator();
+	vk::BinaryCollection&	bc				= m_context.getBinaryCollection();
+	const deUint32			sgHandleSize	= m_context.getRayTracingPipelineProperties().shaderGroupHandleSize;
+	const deUint32			sgBaseAlignment = m_context.getRayTracingPipelineProperties().shaderGroupBaseAlignment;
+
+	m_rayTracingPipeline->addShader(VK_SHADER_STAGE_RAYGEN_BIT_KHR,			createShaderModule(vkd, device, bc.get("rgen"), 0), 0);
+	m_rayTracingPipeline->addShader(VK_SHADER_STAGE_INTERSECTION_BIT_KHR,	createShaderModule(vkd, device, bc.get("isec"), 0), 1);
+	m_rayTracingPipeline->addShader(VK_SHADER_STAGE_CLOSEST_HIT_BIT_KHR,	createShaderModule(vkd, device, bc.get("chit"), 0), 1);
+	m_rayTracingPipeline->addShader(VK_SHADER_STAGE_CLOSEST_HIT_BIT_KHR,	createShaderModule(vkd, device, bc.get("chit_triangle"), 0), 2);
+	m_rayTracingPipeline->addShader(VK_SHADER_STAGE_MISS_BIT_KHR,			createShaderModule(vkd, device, bc.get("miss"), 0), 3);
+
+	m_pipelineLayout	= makePipelineLayout(vkd, device, m_descriptorSetLayout.get());
+	m_pipeline			= m_rayTracingPipeline->createPipeline(vkd, device, *m_pipelineLayout);
+	m_rgenShaderBT		= m_rayTracingPipeline->createShaderBindingTable(vkd, device, *m_pipeline, allocator, sgHandleSize, sgBaseAlignment, 0, 1);
+	m_chitShaderBT		= m_rayTracingPipeline->createShaderBindingTable(vkd, device, *m_pipeline, allocator, sgHandleSize, sgBaseAlignment, 1, 2);
+	m_missShaderBT		= m_rayTracingPipeline->createShaderBindingTable(vkd, device, *m_pipeline, allocator, sgHandleSize, sgBaseAlignment, 3, 1);
+}
+
+void TriangleInBeteenInstance::setupAccelerationStructures()
+{
+	const DeviceInterface&	vkd			= m_context.getDeviceInterface();
+	const VkDevice			device		= m_context.getDevice();
+	Allocator&				allocator	= m_context.getDefaultAllocator();
+
+	de::SharedPtr<BottomLevelAccelerationStructure> triangleBLAS(makeBottomLevelAccelerationStructure().release());
+	triangleBLAS->setGeometryData(
+		{
+			{ 16.0, 16.0, -8.0 },
+			{ 56.0, 32.0, -8.0 },
+			{ 32.0, 48.0, -8.0 },
+		},
+		true,
+		VK_GEOMETRY_OPAQUE_BIT_KHR
+		);
+	triangleBLAS->createAndBuild(vkd, device, *m_cmdBuffer, allocator);
+	m_blasVect.push_back(triangleBLAS);
+
+	de::SharedPtr<BottomLevelAccelerationStructure> fullElipsoidBLAS(makeBottomLevelAccelerationStructure().release());
+	fullElipsoidBLAS->setGeometryData(
+		{
+			{  0.0,  0.0, -64.0 },
+			{ 64.0, 64.0, -16.0 },
+		},
+		false,
+		0
+		);
+	fullElipsoidBLAS->createAndBuild(vkd, device, *m_cmdBuffer, allocator);
+	m_blasVect.push_back(fullElipsoidBLAS);
+
+	// build reference acceleration structure - triangle and a single aabb big enough to fit whole procedural geometry
+	m_referenceTLAS->setInstanceCount(2);
+	m_referenceTLAS->addInstance(fullElipsoidBLAS);
+	m_referenceTLAS->addInstance(triangleBLAS);
+	m_referenceTLAS->createAndBuild(vkd, device, *m_cmdBuffer, allocator);
+
+	de::SharedPtr<BottomLevelAccelerationStructure> elipsoidWallBLAS(makeBottomLevelAccelerationStructure().release());
+	elipsoidWallBLAS->setGeometryData(
+		{
+			{  0.0,  0.0, 0.0 },	// |*  |
+			{ 20.0, 64.0, 1.0 },
+			{ 20.0,  0.0, 0.0 },	// | * |
+			{ 44.0, 64.0, 1.0 },
+			{ 44.0,  0.0, 0.0 },	// |  *|
+			{ 64.0, 64.0, 1.0 },
+		},
+		false,
+		0
+		);
+	elipsoidWallBLAS->createAndBuild(vkd, device, *m_cmdBuffer, allocator);
+	m_blasVect.push_back(elipsoidWallBLAS);
+
+	// build result acceleration structure - triangle and a three aabb's (they are in front of triangle but generate intersections behind it)
+	m_resultTLAS->setInstanceCount(2);
+	m_resultTLAS->addInstance(elipsoidWallBLAS);
+	m_resultTLAS->addInstance(triangleBLAS);
+	m_resultTLAS->createAndBuild(vkd, device, *m_cmdBuffer, allocator);
+}
+
+class RayTracingProceduralGeometryTestCase : public TestCase
+{
+public:
+	RayTracingProceduralGeometryTestCase		(tcu::TestContext& context, const char* name, TestType testType);
+	~RayTracingProceduralGeometryTestCase		(void) = default;
+
+	void				checkSupport			(Context& context) const override;
+	void				initPrograms			(SourceCollections& programCollection) const override;
+	TestInstance*		createInstance			(Context& context) const override;
+
+protected:
+	TestType m_testType;
+};
+
+RayTracingProceduralGeometryTestCase::RayTracingProceduralGeometryTestCase(tcu::TestContext& context, const char* name, TestType testType)
+	: TestCase		(context, name, "")
+	, m_testType	(testType)
+{
+}
+
+void RayTracingProceduralGeometryTestCase::checkSupport(Context& context) const
+{
+	context.requireDeviceFunctionality("VK_KHR_ray_tracing_pipeline");
+	context.requireDeviceFunctionality("VK_KHR_acceleration_structure");
+
+	if (!context.getRayTracingPipelineFeatures().rayTracingPipeline)
+		TCU_THROW(NotSupportedError, "Requires VkPhysicalDeviceRayTracingPipelineFeaturesKHR.rayTracingPipeline");
+
+	if (!context.getAccelerationStructureFeatures().accelerationStructure)
+		TCU_THROW(TestError, "VK_KHR_ray_tracing_pipeline requires VkPhysicalDeviceAccelerationStructureFeaturesKHR.accelerationStructure");
+}
+
+void RayTracingProceduralGeometryTestCase::initPrograms(SourceCollections& programCollection) const
+{
+	const vk::ShaderBuildOptions glslBuildOptions(programCollection.usedVulkanVersion, vk::SPIRV_VERSION_1_4, 0u, true);
+
+	std::string rgenSource =
+		"#version 460 core\n"
+		"#extension GL_EXT_ray_tracing : require\n"
+		"layout(location = 0) rayPayloadEXT int payload;\n"
+
+		"layout(set = 0, binding = 0) uniform accelerationStructureEXT tlas;\n"
+		"layout(set = 0, binding = 1, std430) writeonly buffer Result {\n"
+		"    int value[];\n"
+		"} result;\n"
+
+		"void main()\n"
+		"{\n"
+		"  float tmin        = 0.0;\n"
+		"  float tmax        = 50.0;\n"
+		"  vec3  origin      = vec3(float(gl_LaunchIDEXT.x) + 0.5f, float(gl_LaunchIDEXT.y) + 0.5f, 2.0);\n"
+		"  vec3  direction   = vec3(0.0,0.0,-1.0);\n"
+		"  uint  resultIndex = gl_LaunchIDEXT.x + gl_LaunchIDEXT.y * gl_LaunchSizeEXT.x;\n"
+
+		"  traceRayEXT(tlas, gl_RayFlagsCullBackFacingTrianglesEXT, 0xFF, 0, 0, 0, origin, tmin, direction, tmax, 0);\n"
+		// to be able to display result in cherry this is interpreated as r8g8b8a8 during verification
+		// we are using only red but we need to add alpha (note: r and a may be swapped depending on endianness)
+		"  result.value[resultIndex] = payload + 0xFF000000;\n"
+		"};\n";
+	programCollection.glslSources.add("rgen") << glu::RaygenSource(rgenSource) << glslBuildOptions;
+
+	std::string isecSource =
+		"#version 460 core\n"
+		"#extension GL_EXT_ray_tracing : require\n"
+
+		"void main()\n"
+		"{\n"
+		// note: same elipsoid center and radii are also defined in chit shader
+		"  vec3 center = vec3(32.0, 32.0, -30.0);\n"
+		"  vec3 radii  = vec3(30.0, 15.0, 5.0);\n"
+
+		// simplify to ray sphere intersection
+		"  vec3  eliDir = gl_WorldRayOriginEXT - center;\n"
+		"  vec3  eliS   = eliDir / radii;\n"
+		"  vec3  rayS   = gl_WorldRayDirectionEXT / radii;\n"
+
+		"  float a = dot(rayS, rayS);\n"
+		"  float b = dot(eliS, rayS);\n"
+		"  float c = dot(eliS, eliS);\n"
+		"  float h = b * b - a * (c - 1.0);\n"
+		"  if (h < 0.0)\n"
+		"    return;\n"
+		"  reportIntersectionEXT((-b - sqrt(h)) / a, 0);\n"
+		"}\n";
+	programCollection.glslSources.add("isec") << glu::IntersectionSource(isecSource) << glslBuildOptions;
+
+	std::string chitSource =
+		"#version 460 core\n"
+		"#extension GL_EXT_ray_tracing : require\n"
+		"layout(location = 0) rayPayloadInEXT int payload;\n"
+		"\n"
+		"void main()\n"
+		"{\n"
+		// note: same elipsoid center and radii are also defined in chit shader
+		"  vec3 center    = vec3(32.0, 32.0, -30.0);\n"
+		"  vec3 radii     = vec3(30.0, 15.0, 5.0);\n"
+		"  vec3 lightDir  = normalize(vec3(0.0, 0.0, 1.0));\n"
+		"  vec3 hitPos    = gl_WorldRayOriginEXT + gl_HitTEXT * gl_WorldRayDirectionEXT;\n"
+		"  vec3 hitNormal = normalize((hitPos - center) / radii);\n"
+
+		"  payload = 50 + int(200.0 * clamp(dot(hitNormal, lightDir), 0.0, 1.0));\n"
+		"}\n";
+	programCollection.glslSources.add("chit") << glu::ClosestHitSource(chitSource) << glslBuildOptions;
+
+	if (m_testType == TestType::TRIANGLE_IN_BETWEEN)
+	{
+		std::string chitTriangleSource =
+			"#version 460 core\n"
+			"#extension GL_EXT_ray_tracing : require\n"
+			"layout(location = 0) rayPayloadInEXT int payload;\n"
+			"\n"
+			"void main()\n"
+			"{\n"
+			"  payload = 250;\n"
+			"}\n";
+		programCollection.glslSources.add("chit_triangle") << glu::ClosestHitSource(chitTriangleSource) << glslBuildOptions;
+	}
+
+	std::string missSource =
+		"#version 460 core\n"
+		"#extension GL_EXT_ray_tracing : require\n"
+		"layout(location = 0) rayPayloadInEXT int payload;\n"
+		"void main()\n"
+		"{\n"
+		"  payload = 30;\n"
+		"}\n";
+	programCollection.glslSources.add("miss") << glu::MissSource(missSource) << glslBuildOptions;
+}
+
+TestInstance* RayTracingProceduralGeometryTestCase::createInstance(Context& context) const
+{
+	if (m_testType == TestType::TRIANGLE_IN_BETWEEN)
+		return new TriangleInBeteenInstance(context);
+
+	// TestType::OBJECT_BEHIND_BOUNDING_BOX
+	return new ObjectBehindBoundingBoxInstance(context);
+}
+
+}	// anonymous
+
+tcu::TestCaseGroup*	createProceduralGeometryTests(tcu::TestContext& testCtx)
+{
+	de::MovePtr<tcu::TestCaseGroup> group(new tcu::TestCaseGroup(testCtx, "procedural_geometry", "Test procedural geometry with complex bouding box sets"));
+
+	group->addChild(new RayTracingProceduralGeometryTestCase(testCtx, "object_behind_bounding_boxes",	TestType::OBJECT_BEHIND_BOUNDING_BOX));
+	group->addChild(new RayTracingProceduralGeometryTestCase(testCtx, "triangle_in_between",			TestType::TRIANGLE_IN_BETWEEN));
+
+	return group.release();
+}
+
+}	// RayTracing
+
+}	// vkt
diff --git a/external/vulkancts/modules/vulkan/pipeline/vktPipelineVertexOnlyTests.hpp b/external/vulkancts/modules/vulkan/ray_tracing/vktRayTracingProceduralGeometryTests.hpp
similarity index 68%
copy from external/vulkancts/modules/vulkan/pipeline/vktPipelineVertexOnlyTests.hpp
copy to external/vulkancts/modules/vulkan/ray_tracing/vktRayTracingProceduralGeometryTests.hpp
index 1a85ebf..829e099 100644
--- a/external/vulkancts/modules/vulkan/pipeline/vktPipelineVertexOnlyTests.hpp
+++ b/external/vulkancts/modules/vulkan/ray_tracing/vktRayTracingProceduralGeometryTests.hpp
@@ -1,11 +1,10 @@
-#ifndef _VKTPIPELINEVERTEXONLYTESTS_HPP
-#define _VKTPIPELINEVERTEXONLYTESTS_HPP
-/*------------------------------------------------------------------------
+#ifndef _VKTRAYTRACINGPROCEDURALGEOMETRYTESTS_HPP
+#define _VKTRAYTRACINGPROCEDURALGEOMETRYTESTS_HPP
+/*-------------------------------------------------------------------------
  * Vulkan Conformance Tests
  * ------------------------
  *
- * Copyright (c) 2019 Google LLC
- * Copyright (c) 2019 The Khronos Group Inc.
+ * Copyright (c) 2020 The Khronos Group Inc.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -21,7 +20,7 @@
  *
  *//*!
  * \file
- * \brief Tests using only vertex shader in a graphics pipeline
+ * \brief Test procedural geometry with complex bouding box sets
  *//*--------------------------------------------------------------------*/
 
 #include "tcuDefs.hpp"
@@ -29,12 +28,12 @@
 
 namespace vkt
 {
-namespace pipeline
+namespace RayTracing
 {
 
-tcu::TestCaseGroup*	createVertexOnlyTests (tcu::TestContext& testCtx);
+tcu::TestCaseGroup* createProceduralGeometryTests (tcu::TestContext& testCtx);
 
-} // pipeline
+} // RayTracing
 } // vkt
 
-#endif // _VKTPIPELINEVERTEXONLYTESTS_HPP
+#endif // _VKTRAYTRACINGPROCEDURALGEOMETRYTESTS_HPP
diff --git a/external/vulkancts/modules/vulkan/ray_tracing/vktRayTracingTests.cpp b/external/vulkancts/modules/vulkan/ray_tracing/vktRayTracingTests.cpp
index baf670e..ac61d4b 100644
--- a/external/vulkancts/modules/vulkan/ray_tracing/vktRayTracingTests.cpp
+++ b/external/vulkancts/modules/vulkan/ray_tracing/vktRayTracingTests.cpp
@@ -30,6 +30,7 @@
 #include "vktRayTracingShaderBindingTableTests.hpp"
 #include "vktRayTracingTraversalControlTests.hpp"
 #include "vktRayTracingAccelerationStructuresTests.hpp"
+#include "vktRayTracingProceduralGeometryTests.hpp"
 #include "vktRayTracingBuildIndirectTests.hpp"
 #include "vktRayTracingWatertightnessTests.hpp"
 #include "vktRayTracingPipelineLibraryTests.hpp"
@@ -39,6 +40,9 @@
 #include "vktRayTracingMiscTests.hpp"
 #include "vktRayTracingComplexControlFlowTests.hpp"
 #include "vktRayTracingBarrierTests.hpp"
+#include "vktRayTracingDataSpillTests.hpp"
+#include "vktRayTracingDirectionTests.hpp"
+#include "vktRayTracingBarycentricCoordinatesTests.hpp"
 
 #include "deUniquePtr.hpp"
 
@@ -62,6 +66,7 @@
 	group->addChild(createShaderBindingTableTests(testCtx));
 	group->addChild(createTraversalControlTests(testCtx));
 	group->addChild(createAccelerationStructuresTests(testCtx));
+	group->addChild(createProceduralGeometryTests(testCtx));
 	group->addChild(createBuildIndirectTests(testCtx));
 	group->addChild(createWatertightnessTests(testCtx));
 	group->addChild(createPipelineLibraryTests(testCtx));
@@ -71,6 +76,9 @@
 	group->addChild(createMiscTests(testCtx));
 	group->addChild(createComplexControlFlowTests(testCtx));
 	group->addChild(createBarrierTests(testCtx));
+	group->addChild(createDataSpillTests(testCtx));
+	group->addChild(createDirectionTests(testCtx));
+	group->addChild(createBarycentricCoordinatesTests(testCtx));
 
 	return group.release();
 }
diff --git a/external/vulkancts/modules/vulkan/ray_tracing/vktRayTracingWatertightnessTests.cpp b/external/vulkancts/modules/vulkan/ray_tracing/vktRayTracingWatertightnessTests.cpp
index 7e26593..a4aba4d 100644
--- a/external/vulkancts/modules/vulkan/ray_tracing/vktRayTracingWatertightnessTests.cpp
+++ b/external/vulkancts/modules/vulkan/ray_tracing/vktRayTracingWatertightnessTests.cpp
@@ -38,6 +38,8 @@
 
 #include "deRandom.hpp"
 
+#include <sstream>
+
 namespace vkt
 {
 	namespace RayTracing
@@ -66,6 +68,27 @@
 				deUint32    useManyBottomASes;
 			};
 
+			VkFormat getImageFormat (void)
+			{
+				return VK_FORMAT_R32_UINT;
+			}
+
+			VkImageType getImageType (deUint32 depth)
+			{
+				DE_ASSERT(depth > 0u);
+				return ((depth == 1u) ? VK_IMAGE_TYPE_2D : VK_IMAGE_TYPE_3D);
+			}
+
+			VkImageTiling getImageTiling (void)
+			{
+				return VK_IMAGE_TILING_OPTIMAL;
+			}
+
+			VkImageUsageFlags getImageUsage (void)
+			{
+				return (VK_IMAGE_USAGE_STORAGE_BIT | VK_IMAGE_USAGE_TRANSFER_SRC_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT);
+			}
+
 			enum ShaderGroups
 			{
 				FIRST_GROUP = 0,
@@ -126,23 +149,19 @@
 
 			VkImageCreateInfo makeImageCreateInfo(deUint32 width, deUint32 height, deUint32 depth, VkFormat format)
 			{
-				const VkImageUsageFlags	usage		= VK_IMAGE_USAGE_STORAGE_BIT | VK_IMAGE_USAGE_TRANSFER_SRC_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT;
-				const auto				imageType	= (depth == 1)	? VK_IMAGE_TYPE_2D
-																	: VK_IMAGE_TYPE_3D;
-
 				const VkImageCreateInfo	imageCreateInfo =
 				{
 					VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO,	// VkStructureType			sType;
 					DE_NULL,								// const void*				pNext;
-					(VkImageCreateFlags)0u,					// VkImageCreateFlags		flags;
-					imageType,
+					0u,										// VkImageCreateFlags		flags;
+					getImageType(depth),
 					format,									// VkFormat					format;
 					makeExtent3D(width, height, depth),		// VkExtent3D				extent;
 					1u,										// deUint32					mipLevels;
 					1u,										// deUint32					arrayLayers;
 					VK_SAMPLE_COUNT_1_BIT,					// VkSampleCountFlagBits	samples;
-					VK_IMAGE_TILING_OPTIMAL,				// VkImageTiling			tiling;
-					usage,									// VkImageUsageFlags		usage;
+					getImageTiling(),						// VkImageTiling			tiling;
+					getImageUsage(),						// VkImageUsageFlags		usage;
 					VK_SHARING_MODE_EXCLUSIVE,				// VkSharingMode			sharingMode;
 					0u,										// deUint32					queueFamilyIndexCount;
 					DE_NULL,								// const deUint32*			pQueueFamilyIndices;
@@ -222,6 +241,19 @@
 				const VkPhysicalDeviceAccelerationStructureFeaturesKHR& accelerationStructureFeaturesKHR = context.getAccelerationStructureFeatures();
 				if (accelerationStructureFeaturesKHR.accelerationStructure == DE_FALSE)
 					TCU_THROW(TestError, "VK_KHR_ray_tracing_pipeline requires VkPhysicalDeviceAccelerationStructureFeaturesKHR.accelerationStructure");
+
+				const auto&	vki			= context.getInstanceInterface();
+				const auto	physDev		= context.getPhysicalDevice();
+				const auto	format		= getImageFormat();
+				const auto	formatProps	= getPhysicalDeviceImageFormatProperties(vki, physDev, format, getImageType(m_data.depth), getImageTiling(), getImageUsage(), 0u);
+				const auto&	maxExtent	= formatProps.maxExtent;
+
+				if (m_data.width > maxExtent.width || m_data.height > maxExtent.height || m_data.depth > maxExtent.depth)
+				{
+					std::ostringstream msg;
+					msg << "Result image dimensions not supported (" << getFormatName(format) << " " << m_data.width << "x" << m_data.height << "x" << m_data.depth << ")";
+					TCU_THROW(NotSupportedError, msg.str());
+				}
 			}
 
 			void RayTracingTestCase::initPrograms(SourceCollections& programCollection) const
@@ -572,7 +604,7 @@
 				const deUint32						queueFamilyIndex = m_context.getUniversalQueueFamilyIndex();
 				const VkQueue						queue = m_context.getUniversalQueue();
 				Allocator& allocator = m_context.getDefaultAllocator();
-				const VkFormat						format = VK_FORMAT_R32_UINT;
+				const VkFormat						format = getImageFormat();
 				const deUint32						pixelCount = m_data.width * m_data.height * m_data.depth;
 				const deUint32						shaderGroupHandleSize = getShaderGroupSize(vki, physicalDevice);
 				const deUint32						shaderGroupBaseAlignment = getShaderGroupBaseAlignment(vki, physicalDevice);
@@ -686,7 +718,7 @@
 
 				submitCommandsAndWait(vkd, device, queue, cmdBuffer.get());
 
-				invalidateMappedMemoryRange(vkd, device, buffer->getAllocation().getMemory(), buffer->getAllocation().getOffset(), pixelCount * sizeof(deUint32));
+				invalidateAlloc(vkd, device, buffer->getAllocation());
 
 				return buffer;
 			}
@@ -720,8 +752,8 @@
 
 				const de::MovePtr<BufferWithMemory>	bufferGPU				= runTest();
 				const deUint32*						bufferPtrGPU			= (deUint32*)bufferGPU->getAllocation().getHostPtr();
-				deUint32							failures				= 0;
-				deUint32							qualityWarningIssued	= 0;
+				deUint32							failures				= 0u;
+				deUint32							qualityWarningIssued	= 0u;
 				if (!m_useClosedFan)
 				{
 					deUint32	pos = 0;
@@ -742,20 +774,19 @@
 					// See the miss shader for explanation of the magic number.
 					for (deUint32 pos = 0; pos < m_data.width * m_data.height * m_data.depth; ++pos)
 					{
-						if (bufferPtrGPU[pos] == 10000)
+						if (bufferPtrGPU[pos] == 10000u)
 						{
-							failures++;
+							qualityWarningIssued	= 1u;
 						}
 						else
-						if (bufferPtrGPU[pos] > 1)
+						if (bufferPtrGPU[pos] > 1u)
 						{
 							failures				++;
-							qualityWarningIssued	= 1;
 						}
 					}
 				}
 
-				if (failures == 0)
+				if (failures == 0u)
 				{
 					if (qualityWarningIssued)
 						return tcu::TestStatus(QP_TEST_RESULT_QUALITY_WARNING, "Miss shader invoked for a shared edge/vertex.");
diff --git a/external/vulkancts/modules/vulkan/renderpass/vktRenderPassDepthStencilResolveTests.cpp b/external/vulkancts/modules/vulkan/renderpass/vktRenderPassDepthStencilResolveTests.cpp
index 3fc8f1d..7a3dd9b 100644
--- a/external/vulkancts/modules/vulkan/renderpass/vktRenderPassDepthStencilResolveTests.cpp
+++ b/external/vulkancts/modules/vulkan/renderpass/vktRenderPassDepthStencilResolveTests.cpp
@@ -915,6 +915,7 @@
 			VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER,
 			DE_NULL,
 
+			// Note: as per the spec, depth/stencil *resolve* operations are synchronized using the color attachment write access.
 			VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,
 			VK_ACCESS_TRANSFER_READ_BIT,
 
diff --git a/external/vulkancts/modules/vulkan/renderpass/vktRenderPassFragmentDensityMapTests.cpp b/external/vulkancts/modules/vulkan/renderpass/vktRenderPassFragmentDensityMapTests.cpp
index d664478..a9fd7bc 100644
--- a/external/vulkancts/modules/vulkan/renderpass/vktRenderPassFragmentDensityMapTests.cpp
+++ b/external/vulkancts/modules/vulkan/renderpass/vktRenderPassFragmentDensityMapTests.cpp
@@ -1177,6 +1177,13 @@
 
 	if ((imageFormatProperties.sampleCounts & m_testParams.colorSamples) == 0)
 		TCU_THROW(NotSupportedError, "Color image type not supported");
+
+	if (context.isDeviceFunctionalitySupported("VK_KHR_portability_subset") &&
+		!context.getPortabilitySubsetFeatures().multisampleArrayImage &&
+		(m_testParams.colorSamples != VK_SAMPLE_COUNT_1_BIT) && (m_testParams.viewCount != 1))
+	{
+		TCU_THROW(NotSupportedError, "VK_KHR_portability_subset: Implementation does not support image array with multiple samples per texel");
+	}
 }
 
 FragmentDensityMapTestInstance::FragmentDensityMapTestInstance(Context&				context,
diff --git a/external/vulkancts/modules/vulkan/renderpass/vktRenderPassMultisampleResolveTests.cpp b/external/vulkancts/modules/vulkan/renderpass/vktRenderPassMultisampleResolveTests.cpp
index 4904ffb..8df2b9c 100644
--- a/external/vulkancts/modules/vulkan/renderpass/vktRenderPassMultisampleResolveTests.cpp
+++ b/external/vulkancts/modules/vulkan/renderpass/vktRenderPassMultisampleResolveTests.cpp
@@ -2576,6 +2576,16 @@
 	}
 };
 
+void checkSupport(Context& context, TestConfig config)
+{
+	if (context.isDeviceFunctionalitySupported("VK_KHR_portability_subset") &&
+		!context.getPortabilitySubsetFeatures().multisampleArrayImage &&
+		(config.sampleCount != VK_SAMPLE_COUNT_1_BIT) && (config.layerCount != 1))
+	{
+		TCU_THROW(NotSupportedError, "VK_KHR_portability_subset: Implementation does not support image array with multiple samples per texel");
+	}
+}
+
 std::string formatToName (VkFormat format)
 {
 	const std::string	formatStr	= de::toString(format);
@@ -2682,7 +2692,7 @@
 					renderPassType
 				};
 
-				formatGroup->addChild(new InstanceFactory1<MultisampleRenderPassTestInstance, TestConfig, Programs>(testCtx, tcu::NODETYPE_SELF_VALIDATE, testName.c_str(), testName.c_str(), testConfig));
+				formatGroup->addChild(new InstanceFactory1WithSupport<MultisampleRenderPassTestInstance, TestConfig, FunctionSupport1<TestConfig>, Programs>(testCtx, tcu::NODETYPE_SELF_VALIDATE, testName.c_str(), testName.c_str(), testConfig, typename FunctionSupport1<TestConfig>::Args(checkSupport, testConfig)));
 
 				// MaxAttachmenstsRenderPassTest is ment to test extreme cases where applications might consume all available on-chip
 				// memory. This is achieved by using maxColorAttachments attachments and two subpasses, but during test creation we
diff --git a/external/vulkancts/modules/vulkan/renderpass/vktRenderPassMultisampleTests.cpp b/external/vulkancts/modules/vulkan/renderpass/vktRenderPassMultisampleTests.cpp
index 28dd49c..a150ea8 100644
--- a/external/vulkancts/modules/vulkan/renderpass/vktRenderPassMultisampleTests.cpp
+++ b/external/vulkancts/modules/vulkan/renderpass/vktRenderPassMultisampleTests.cpp
@@ -716,6 +716,25 @@
 				dependencies.push_back(dependency);
 			}
 		};
+		// the last subpass must synchronize with all prior subpasses
+		for (deUint32 splitSubpassIndex = 0; splitSubpassIndex < (splitSubpassCount - 1); splitSubpassIndex++)
+		{
+				const SubpassDep	dependency																//  VkSubpassDependency							||  VkSubpassDependency2KHR
+				(
+																											//												||	VkStructureType			sType;
+					DE_NULL,																				//												||	const void*				pNext;
+					splitSubpassIndex + 1,																	//  deUint32				srcSubpass;			||	deUint32				srcSubpass;
+					splitSubpassCount,																		//  deUint32				dstSubpass;			||	deUint32				dstSubpass;
+					VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT | VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT
+					| VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT,											//  VkPipelineStageFlags	srcStageMask;		||	VkPipelineStageFlags	srcStageMask;
+					VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT,													//  VkPipelineStageFlags	dstStageMask;		||	VkPipelineStageFlags	dstStageMask;
+					VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT | VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT,	//  VkAccessFlags			srcAccessMask;		||	VkAccessFlags			srcAccessMask;
+					VK_ACCESS_INPUT_ATTACHMENT_READ_BIT,													//  VkAccessFlags			dstAccessMask;		||	VkAccessFlags			dstAccessMask;
+					VK_DEPENDENCY_BY_REGION_BIT,															//  VkDependencyFlags		dependencyFlags;	||	VkDependencyFlags		dependencyFlags;
+					0u																						//												||	deInt32					viewOffset;
+				);
+				dependencies.push_back(dependency);
+		}
 		const RenderPassCreateInfo	renderPassCreator						//  VkRenderPassCreateInfo										||  VkRenderPassCreateInfo2KHR
 		(
 																			//  VkStructureType					sType;						||  VkStructureType						sType;
diff --git a/external/vulkancts/modules/vulkan/renderpass/vktRenderPassSparseRenderTargetTests.cpp b/external/vulkancts/modules/vulkan/renderpass/vktRenderPassSparseRenderTargetTests.cpp
index 85e40e2..840525d 100644
--- a/external/vulkancts/modules/vulkan/renderpass/vktRenderPassSparseRenderTargetTests.cpp
+++ b/external/vulkancts/modules/vulkan/renderpass/vktRenderPassSparseRenderTargetTests.cpp
@@ -117,8 +117,10 @@
 		VK_IMAGE_LAYOUT_UNDEFINED
 	};
 
-	Move<VkImage>			destImage			= createImage(vk, device, &imageCreateInfo);
+	if (!checkSparseImageFormatSupport(physicalDevice, instance, imageCreateInfo))
+		TCU_THROW(NotSupportedError, "The image format does not support sparse operations");
 
+	Move<VkImage> destImage = createImage(vk, device, &imageCreateInfo);
 	allocateAndBindSparseImage(vk, device, physicalDevice, instance, imageCreateInfo, bindSemaphore, sparseQueue, allocator, allocations, mapVkFormat(format), *destImage);
 
 	return destImage;
diff --git a/external/vulkancts/modules/vulkan/renderpass/vktRenderPassSubpassDependencyTests.cpp b/external/vulkancts/modules/vulkan/renderpass/vktRenderPassSubpassDependencyTests.cpp
index 748f7f3..7255ae8 100644
--- a/external/vulkancts/modules/vulkan/renderpass/vktRenderPassSubpassDependencyTests.cpp
+++ b/external/vulkancts/modules/vulkan/renderpass/vktRenderPassSubpassDependencyTests.cpp
@@ -857,7 +857,7 @@
 		{
 			VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER,		// VkStructureType			sType
 			DE_NULL,									// const void*				pNext
-			VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,		// VkAccessFlags			srcAccessMask
+			0,											// VkAccessFlags			srcAccessMask
 			VK_ACCESS_TRANSFER_READ_BIT,				// VkAccessFlags			dstAccessMask
 			VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL,	// VkImageLayout			oldLayout
 			VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,		// VkImageLayout			newLayout
@@ -866,8 +866,11 @@
 			**m_images[m_renderPasses.size() - 1],		// VkImage					image
 			imageSubresourceRange						// VkImageSubresourceRange	subresourceRange
 		};
-
-		vkd.cmdPipelineBarrier(*commandBuffer, VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, 0u, 0u, DE_NULL, 0u, DE_NULL, 1u, &barrier);
+		// Since the implicit 'end' subpass dependency has VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT in its dstStageMask,
+		// we can't form an execution dependency chain with a specific pipeline stage. The cases that provide an explict
+		// 'end' subpass dependency could use a specific pipline stage, but there isn't a way to distinguish between the
+		// implicit and explicit cases here.
+		vkd.cmdPipelineBarrier(*commandBuffer, VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, 0u, 0u, DE_NULL, 0u, DE_NULL, 1u, &barrier);
 	}
 
 	// Copy image memory to buffer
@@ -3924,16 +3927,16 @@
 					deps.push_back(SubpassDependency(VK_SUBPASS_EXTERNAL,										// deUint32				srcPass
 													 0,															// deUint32				dstPass
 													 VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT,				// VkPipelineStageFlags	srcStageMask
-													 VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT,						// VkPipelineStageFlags	dstStageMask
+													 VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT | VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT,						// VkPipelineStageFlags	dstStageMask
 													 VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,						// VkAccessFlags		srcAccessMask
-													 VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_SHADER_WRITE_BIT,	// VkAccessFlags		dstAccessMask
+													 VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_SHADER_WRITE_BIT | VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,	// VkAccessFlags		dstAccessMask
 													 0));														// VkDependencyFlags	flags
 
 					deps.push_back(SubpassDependency(0,															// deUint32				srcPass
 													 VK_SUBPASS_EXTERNAL,										// deUint32				dstPass
-													 VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT,						// VkPipelineStageFlags	srcStageMask
+													 VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT | VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT,						// VkPipelineStageFlags	srcStageMask
 													 VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT,				// VkPipelineStageFlags	dstStageMask
-													 VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_SHADER_WRITE_BIT,	// VkAccessFlags		srcAccessMask
+													 VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_SHADER_WRITE_BIT | VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,	// VkAccessFlags		srcAccessMask
 													 VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,						// VkAccessFlags		dstAccessMask
 													 0));														// VkDependencyFlags	flags
 
@@ -4009,10 +4012,10 @@
 				{
 					deps.push_back(SubpassDependency(VK_SUBPASS_EXTERNAL,										// deUint32				srcPass
 													 0,															// deUint32				dstPass
-													 VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT,				// VkPipelineStageFlags	srcStageMask
-													 VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT,						// VkPipelineStageFlags	dstStageMask
-													 VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,						// VkAccessFlags		srcAccessMask
-													 VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_SHADER_WRITE_BIT,	// VkAccessFlags		dstAccessMask
+													 VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT,				// VkPipelineStageFlags	srcStageMask
+													 VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT | VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT,						// VkPipelineStageFlags	dstStageMask
+													 0,						// VkAccessFlags		srcAccessMask
+													 VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT | VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_SHADER_WRITE_BIT,	// VkAccessFlags		dstAccessMask
 													 0));														// VkDependencyFlags	flags
 				}
 
@@ -4118,6 +4121,13 @@
 															 VK_DEPENDENCY_BY_REGION_BIT));						// VkDependencyFlags	flags
 						}
 					}
+					deps.push_back(SubpassDependency((deUint32)subpassCount - 1,								// deUint32				srcPass
+													 VK_SUBPASS_EXTERNAL,										// deUint32				dstPass
+													 VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT,					// VkPipelineStageFlags	srcStageMask
+													 VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT,					// VkPipelineStageFlags	dstStageMask
+													 VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT,				// VkAccessFlags		srcAccessMask
+													 VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT | VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT, // VkAccessFlags		dstAccessMask
+													 VK_DEPENDENCY_BY_REGION_BIT));								// VkDependencyFlags	flags
 
 					const RenderPass		renderPass	(attachments, subpasses, deps);
 					const SubpassTestConfig	testConfig	(formats[formatNdx], renderSizes[renderSizeNdx], renderPass, renderPassType);
diff --git a/external/vulkancts/modules/vulkan/renderpass/vktRenderPassUnusedAttachmentSparseFillingTests.cpp b/external/vulkancts/modules/vulkan/renderpass/vktRenderPassUnusedAttachmentSparseFillingTests.cpp
index 24a4227..abef672 100644
--- a/external/vulkancts/modules/vulkan/renderpass/vktRenderPassUnusedAttachmentSparseFillingTests.cpp
+++ b/external/vulkancts/modules/vulkan/renderpass/vktRenderPassUnusedAttachmentSparseFillingTests.cpp
@@ -717,6 +717,20 @@
 			DE_NULL												// const deUint32*					pPreserveAttachments
 		),
 	};
+	std::vector<SubpassDep>		subpassDependencies =
+	{
+		SubpassDep (
+			DE_NULL,
+			0u,										// deUint32				srcPass
+			VK_SUBPASS_EXTERNAL,					// deUint32				dstPass
+			VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT,	// VkPipelineStageFlags	srcStageMask
+			VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT,	// VkPipelineStageFlags	dstStageMask
+			VK_ACCESS_SHADER_WRITE_BIT,				// VkAccessFlags		srcAccessMask
+			VK_ACCESS_INDIRECT_COMMAND_READ_BIT,	// VkAccessFlags		dstAccessMask
+			0,										// VkDependencyFlags	flags
+			0										// deInt32				viewOffset
+		),
+	};
 
 	const RenderPassCreateInfo	renderPassInfo					(
 		DE_NULL,												// const void*						pNext
@@ -725,8 +739,8 @@
 		attachmentDescriptions.data(),							// const VkAttachmentDescription*	pAttachments
 		static_cast<deUint32>(subpassDescriptions.size()),		// deUint32							subpassCount
 		subpassDescriptions.data(),								// const VkSubpassDescription*		pSubpasses
-		0u,														// deUint32							dependencyCount
-		DE_NULL,												// const VkSubpassDependency*		pDependencies
+		static_cast<deUint32>(subpassDependencies.size()),		// deUint32							dependencyCount
+		subpassDependencies.data(),								// const VkSubpassDependency*		pDependencies
 		0u,														// deUint32							correlatedViewMaskCount
 		DE_NULL													// const deUint32*					pCorrelatedViewMasks
 	);
diff --git a/external/vulkancts/modules/vulkan/robustness/vktRobustBufferAccessWithVariablePointersTests.cpp b/external/vulkancts/modules/vulkan/robustness/vktRobustBufferAccessWithVariablePointersTests.cpp
index 0982ac8..6ef55cf 100644
--- a/external/vulkancts/modules/vulkan/robustness/vktRobustBufferAccessWithVariablePointersTests.cpp
+++ b/external/vulkancts/modules/vulkan/robustness/vktRobustBufferAccessWithVariablePointersTests.cpp
@@ -219,6 +219,9 @@
 	const auto& pointerFeatures = context.getVariablePointersFeatures();
 	if (!pointerFeatures.variablePointersStorageBuffer)
 		TCU_THROW(NotSupportedError, "VariablePointersStorageBuffer SPIR-V capability not supported");
+
+	if (context.isDeviceFunctionalitySupported("VK_KHR_portability_subset") && !context.getDeviceFeatures().robustBufferAccess)
+		TCU_THROW(NotSupportedError, "VK_KHR_portability_subset: robustBufferAccess not supported by this implementation");
 }
 
 // A subclass for testing reading with variable pointers
@@ -1675,18 +1678,27 @@
 					bool	isOutOfBoundsPartOk  = true;
 					bool	isWithinBoundsPartOk = true;
 
+					deUint32 inBoundPartSize = distanceToOutOfBounds;
+
+					// For cases that partial element is out of bound, the part within the buffer allocated memory can be buffer content per spec.
+					// We need to check it as a whole part.
+					if (offsetInBytes + elementSize > m_inBufferAccess.allocSize)
+					{
+						inBoundPartSize = static_cast<deInt32>(m_inBufferAccess.allocSize) - static_cast<deInt32>(offsetInBytes);
+					}
+
 					if (isReadAccess)
 					{
-						isWithinBoundsPartOk	= isValueWithinBufferOrZero(inDataPtr, m_inBufferAccess.allocSize, outValuePtr, distanceToOutOfBounds);
-						isOutOfBoundsPartOk		= isValueWithinBufferOrZero(inDataPtr, m_inBufferAccess.allocSize, (deUint8*)outValuePtr + distanceToOutOfBounds , outValueSize - distanceToOutOfBounds);
+						isWithinBoundsPartOk	= isValueWithinBufferOrZero(inDataPtr, m_inBufferAccess.allocSize, outValuePtr, inBoundPartSize);
+						isOutOfBoundsPartOk		= isValueWithinBufferOrZero(inDataPtr, m_inBufferAccess.allocSize, (deUint8*)outValuePtr + inBoundPartSize, outValueSize - inBoundPartSize);
 					}
 					else
 					{
-						isWithinBoundsPartOk	= isValueWithinBufferOrZero(inDataPtr, m_inBufferAccess.allocSize, outValuePtr, distanceToOutOfBounds)
-												  || isOutBufferValueUnchanged(offsetInBytes, distanceToOutOfBounds);
+						isWithinBoundsPartOk	= isValueWithinBufferOrZero(inDataPtr, m_inBufferAccess.allocSize, outValuePtr, inBoundPartSize)
+												  || isOutBufferValueUnchanged(offsetInBytes, inBoundPartSize);
 
-						isOutOfBoundsPartOk		= isValueWithinBufferOrZero(inDataPtr, m_inBufferAccess.allocSize, (deUint8*)outValuePtr + distanceToOutOfBounds, outValueSize - distanceToOutOfBounds)
-												  || isOutBufferValueUnchanged(offsetInBytes + distanceToOutOfBounds, outValueSize - distanceToOutOfBounds);
+						isOutOfBoundsPartOk		= isValueWithinBufferOrZero(inDataPtr, m_inBufferAccess.allocSize, (deUint8*)outValuePtr + inBoundPartSize, outValueSize - inBoundPartSize)
+												  || isOutBufferValueUnchanged(offsetInBytes + inBoundPartSize, outValueSize - inBoundPartSize);
 					}
 
 					logMsg << ", first " << distanceToOutOfBounds << " byte(s) " << (isWithinBoundsPartOk ? "OK": "wrong");
diff --git a/external/vulkancts/modules/vulkan/robustness/vktRobustnessBufferAccessTests.cpp b/external/vulkancts/modules/vulkan/robustness/vktRobustnessBufferAccessTests.cpp
index a4da676..7efbc74 100644
--- a/external/vulkancts/modules/vulkan/robustness/vktRobustnessBufferAccessTests.cpp
+++ b/external/vulkancts/modules/vulkan/robustness/vktRobustnessBufferAccessTests.cpp
@@ -82,6 +82,8 @@
 
 	virtual						~RobustBufferAccessTest		(void) {}
 
+	virtual void				checkSupport				(Context& context) const;
+
 private:
 	static void					genBufferShaderAccess		(ShaderType				shaderType,
 															 VkFormat				bufferFormat,
@@ -268,6 +270,12 @@
 	DE_ASSERT(m_shaderStage == VK_SHADER_STAGE_VERTEX_BIT || m_shaderStage == VK_SHADER_STAGE_FRAGMENT_BIT || m_shaderStage == VK_SHADER_STAGE_COMPUTE_BIT);
 }
 
+void RobustBufferAccessTest::checkSupport(Context& context) const
+{
+	if (context.isDeviceFunctionalitySupported("VK_KHR_portability_subset") && !context.getDeviceFeatures().robustBufferAccess)
+		TCU_THROW(NotSupportedError, "VK_KHR_portability_subset: robustBufferAccess not supported by this implementation");
+}
+
 void RobustBufferAccessTest::genBufferShaderAccess (ShaderType			shaderType,
 												    VkFormat			bufferFormat,
 												    bool				readFromStorage,
diff --git a/external/vulkancts/modules/vulkan/robustness/vktRobustnessExtsTests.cpp b/external/vulkancts/modules/vulkan/robustness/vktRobustnessExtsTests.cpp
index d4b6dc2..8d3ab7f 100644
--- a/external/vulkancts/modules/vulkan/robustness/vktRobustnessExtsTests.cpp
+++ b/external/vulkancts/modules/vulkan/robustness/vktRobustnessExtsTests.cpp
@@ -51,6 +51,7 @@
 #include <string>
 #include <sstream>
 #include <algorithm>
+#include <limits>
 
 namespace vkt
 {
@@ -400,6 +401,9 @@
 	if (m_data.stage == STAGE_VERTEX && !features2.features.vertexPipelineStoresAndAtomics)
 		TCU_THROW(NotSupportedError, "Vertex pipeline stores and atomics not supported");
 
+	if (m_data.stage == STAGE_FRAGMENT && !features2.features.fragmentStoresAndAtomics)
+		TCU_THROW(NotSupportedError, "Fragment shader stores not supported");
+
 	if (m_data.stage == STAGE_RAYGEN)
 		context.requireDeviceFunctionality("VK_NV_ray_tracing");
 
@@ -457,6 +461,12 @@
 
 	if (m_data.pushDescriptor)
 		context.requireDeviceFunctionality("VK_KHR_push_descriptor");
+
+	if (m_data.viewType == VK_IMAGE_VIEW_TYPE_CUBE_ARRAY && !features2.features.imageCubeArray)
+		TCU_THROW(NotSupportedError, "Cube array image view type not supported");
+
+	if (context.isDeviceFunctionalitySupported("VK_KHR_portability_subset") && !context.getDeviceFeatures().robustBufferAccess)
+		TCU_THROW(NotSupportedError, "VK_KHR_portability_subset: robustBufferAccess not supported by this implementation");
 }
 
 void generateLayout(Layout &layout, const CaseDef &caseDef)
@@ -759,9 +769,10 @@
 
 	std::stringstream decls, checks;
 
-	const string	r64		= formatIsR64(format) ? "64" : "";
-	const string	i64Type	= formatIsR64(format) ? "64_t" : "";
-	const string	vecType	= formatIsFloat(format) ? "vec4" : (formatIsSignedInt(format) ? ("i" + r64 + "vec4") : ("u" + r64 + "vec4"));
+	const string	r64			= formatIsR64(format) ? "64" : "";
+	const string	i64Type		= formatIsR64(format) ? "64_t" : "";
+	const string	vecType		= formatIsFloat(format) ? "vec4" : (formatIsSignedInt(format) ? ("i" + r64 + "vec4") : ("u" + r64 + "vec4"));
+	const string	qLevelType	= vecType == "vec4" ? "float" : ((vecType == "ivec4") | (vecType == "i64vec4")) ? ("int" + i64Type) : ("uint" + i64Type);
 
 	decls << "uvec4 abs(uvec4 x) { return x; }\n";
 	if (formatIsR64(format))
@@ -885,12 +896,33 @@
 	else
 		bufType = imgprefix + "vec" + std::to_string(numComponents);
 
+	// For UBO's, which have a declared size in the shader, don't access outside that size.
+	bool declaredSize = false;
+	switch (m_data.descriptorType) {
+	case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC:
+	case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER:
+		declaredSize = true;
+		break;
+	default:
+		break;
+	}
+
 	checks << "  int inboundcoords, clampedLayer;\n";
 	checks << "  " << vecType << " expectedIB2;\n";
 	if (m_data.unroll)
-		checks << "  [[unroll]] for (int c = -10; c <= 10; ++c) {\n";
+	{
+		if (declaredSize)
+			checks << "  [[unroll]] for (int c = 0; c <= 10; ++c) {\n";
+		else
+			checks << "  [[unroll]] for (int c = -10; c <= 10; ++c) {\n";
+	}
 	else
-		checks << "  [[dont_unroll]] for (int c = 1050; c >= -1050; --c) {\n";
+	{
+		if (declaredSize)
+			checks << "  [[dont_unroll]] for (int c = 1023; c >= 0; --c) {\n";
+		else
+			checks << "  [[dont_unroll]] for (int c = 1050; c >= -1050; --c) {\n";
+	}
 
 	if (m_data.descriptorType == VERTEX_ATTRIBUTE_FETCH)
 		checks << "    int idx = smod(gl_VertexIndex * " << numComponents << ", " << refDataNumElements << ");\n";
@@ -910,9 +942,8 @@
 		break;
 	case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC:
 	case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER:
-		decls << "layout(scalar, set = 0, binding = 1) " << vol << "buffer sbodef0_1 { " << bufType << " val[1024]; } ssbo0_1;\n";
-		decls << "layout(scalar, set = 0, binding = 1) " << vol << "buffer sbodef0_1_unsized { " << bufType << " val[]; } ssbo0_1_unsized;\n";
-		decls << "layout(scalar, set = 0, binding = 1) " << vol << "buffer sbodef0_1_unsized_pad { vec4 pad; " << bufType << " val[]; } ssbo0_1_unsized_pad;\n";
+		decls << "layout(scalar, set = 0, binding = 1) " << vol << "buffer sbodef0_1 { " << bufType << " val[]; } ssbo0_1;\n";
+		decls << "layout(scalar, set = 0, binding = 1) " << vol << "buffer sbodef0_1_pad { vec4 pad; " << bufType << " val[]; } ssbo0_1_pad;\n";
 		break;
 	case VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER:
 		switch(format)
@@ -1302,6 +1333,12 @@
 				{
 					checks << "    temp = textureSize(texture0_1, 0)" << sizeswiz <<";\n";
 					checks << "    accum += abs(temp);\n";
+
+					// checking textureSize with clearly out of range LOD values
+					checks << "    temp = textureSize(texture0_1, " << -i << ")" << sizeswiz <<";\n";
+					checks << "    accum += abs(temp);\n";
+					checks << "    temp = textureSize(texture0_1, " << (std::numeric_limits<deInt32>::max() - i) << ")" << sizeswiz <<";\n";
+					checks << "    accum += abs(temp);\n";
 				}
 				else
 				{
@@ -1330,15 +1367,25 @@
 				m_data.descriptorType == VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC)
 			{
 				// expect zero for runtime-sized array .length()
-				checks << "    temp = " << vecType << "(ssbo0_1_unsized.val.length());\n";
+				checks << "    temp = " << vecType << "(ssbo0_1.val.length());\n";
 				checks << "    accum += abs(temp);\n";
-				checks << "    temp = " << vecType << "(ssbo0_1_unsized_pad.val.length());\n";
+				checks << "    temp = " << vecType << "(ssbo0_1_pad.val.length());\n";
 				checks << "    accum += abs(temp);\n";
 			}
 		}
 	}
 	checks << "  }\n";
 
+	// outside the coordinates loop because we only need to call it once
+	if (m_data.nullDescriptor &&
+		m_data.descriptorType == VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER &&
+		m_data.samples == VK_SAMPLE_COUNT_1_BIT)
+	{
+		checks << "  temp_ql = " << qLevelType << "(textureQueryLevels(texture0_1));\n";
+		checks << "  temp = " << vecType << "(temp_ql);\n";
+		checks << "  accum += abs(temp);\n";
+	}
+
 	const bool is64BitFormat = formatIsR64(m_data.format);
 	std::string SupportR64 = (is64BitFormat ?
 							std::string("#extension GL_EXT_shader_explicit_arithmetic_types_int64 : require\n"
@@ -1365,6 +1412,7 @@
 				"{\n"
 				"  " << vecType << " accum = " << vecType << "(0);\n"
 				"  " << vecType << " temp;\n"
+				"  " << qLevelType << " temp_ql;\n"
 				<< checks.str() <<
 				"  " << vecType << " color = (accum != " << vecType << "(0)) ? " << vecType << "(0,0,0,0) : " << vecType << "(1,0,0,1);\n"
 				"  imageStore(image0_0, ivec2(gl_GlobalInvocationID.xy), color);\n"
@@ -1391,6 +1439,7 @@
 			"{\n"
 			"  " << vecType << " accum = " << vecType << "(0);\n"
 			"  " << vecType << " temp;\n"
+			"  " << qLevelType << " temp_ql;\n"
 			<< checks.str() <<
 			"  " << vecType << " color = (accum != " << vecType << "(0)) ? " << vecType << "(0,0,0,0) : " << vecType << "(1,0,0,1);\n"
 			"  imageStore(image0_0, ivec2(gl_LaunchIDNV.xy), color);\n"
@@ -1416,6 +1465,7 @@
 				"{\n"
 				"  " << vecType << " accum = " << vecType << "(0);\n"
 				"  " << vecType << " temp;\n"
+				"  " << qLevelType << " temp_ql;\n"
 				<< checks.str() <<
 				"  " << vecType << " color = (accum != " << vecType << "(0)) ? " << vecType << "(0,0,0,0) : " << vecType << "(1,0,0,1);\n"
 				"  imageStore(image0_0, ivec2(gl_VertexIndex % " << DIM << ", gl_VertexIndex / " << DIM << "), color);\n"
@@ -1429,6 +1479,22 @@
 		}
 	case STAGE_FRAGMENT:
 		{
+			if (m_data.nullDescriptor &&
+				m_data.descriptorType == VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER &&
+				m_data.samples == VK_SAMPLE_COUNT_1_BIT)
+			{
+				// as here we only want to check that textureQueryLod returns 0 when
+				// texture0_1 is null, we don't need to use the actual texture coordinates
+				// (and modify the vertex shader below to do so). Any coordinates are fine.
+				// gl_FragCoord has been selected "randomly", instead of selecting 0 for example.
+				std::string lod_str = (numNormalizedCoords == 1) ? ");" : (numNormalizedCoords == 2) ? "y);" : "yz);";
+				checks << "  vec2 lod = textureQueryLod(texture0_1, gl_FragCoord.x" << lod_str << "\n";
+				checks << "  temp_ql = " << qLevelType <<
+"(ceil(abs(lod.x) + abs(lod.y)));\n";
+				checks << "  temp = " << vecType << "(temp_ql);\n";
+				checks << "  accum += abs(temp);\n";
+			}
+
 			std::stringstream vss;
 			vss <<
 				"#version 450 core\n"
@@ -1455,6 +1521,7 @@
 				"{\n"
 				"  " << vecType << " accum = " << vecType << "(0);\n"
 				"  " << vecType << " temp;\n"
+				"  " << qLevelType << " temp_ql;\n"
 				<< checks.str() <<
 				"  " << vecType << " color = (accum != " << vecType << "(0)) ? " << vecType << "(0,0,0,0) : " << vecType << "(1,0,0,1);\n"
 				"  imageStore(image0_0, ivec2(gl_FragCoord.x, gl_FragCoord.y), color);\n"
@@ -1652,15 +1719,15 @@
 		{
 			size = deIntRoundToPow2((int)size, (int)robustness2Properties.robustUniformBufferAccessSizeAlignment);
 		}
-
-		if (m_data.descriptorType == VK_DESCRIPTOR_TYPE_STORAGE_BUFFER ||
-			m_data.descriptorType == VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC)
+		else if (m_data.descriptorType == VK_DESCRIPTOR_TYPE_STORAGE_BUFFER ||
+				 m_data.descriptorType == VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC)
 		{
 			size = deIntRoundToPow2((int)size, (int)robustness2Properties.robustStorageBufferAccessSizeAlignment);
 		}
-
-		if (m_data.descriptorType == VERTEX_ATTRIBUTE_FETCH)
+		else if (m_data.descriptorType == VERTEX_ATTRIBUTE_FETCH)
+		{
 			size = m_data.bufferLen;
+		}
 
 		buffer = de::MovePtr<BufferWithMemory>(new BufferWithMemory(
 			vk, device, allocator, makeBufferCreateInfo(size,
@@ -1680,8 +1747,8 @@
 		{
 			deMemset(bufferPtr, 0, deIntRoundToPow2(m_data.bufferLen, (int)robustness2Properties.robustUniformBufferAccessSizeAlignment));
 		}
-		if (m_data.descriptorType == VK_DESCRIPTOR_TYPE_STORAGE_BUFFER ||
-			m_data.descriptorType == VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC)
+		else if (m_data.descriptorType == VK_DESCRIPTOR_TYPE_STORAGE_BUFFER ||
+				 m_data.descriptorType == VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC)
 		{
 			deMemset(bufferPtr, 0, deIntRoundToPow2(m_data.bufferLen, (int)robustness2Properties.robustStorageBufferAccessSizeAlignment));
 		}
diff --git a/external/vulkancts/modules/vulkan/robustness/vktRobustnessVertexAccessTests.cpp b/external/vulkancts/modules/vulkan/robustness/vktRobustnessVertexAccessTests.cpp
index ffed377..cada908 100644
--- a/external/vulkancts/modules/vulkan/robustness/vktRobustnessVertexAccessTests.cpp
+++ b/external/vulkancts/modules/vulkan/robustness/vktRobustnessVertexAccessTests.cpp
@@ -63,6 +63,7 @@
 	virtual				~VertexAccessTest	(void) {}
 
 	void				initPrograms		(SourceCollections& programCollection) const;
+	void				checkSupport		(Context& context) const;
 	TestInstance*		createInstance		(Context& context) const = 0;
 
 protected:
@@ -246,6 +247,13 @@
 {
 }
 
+
+void VertexAccessTest::checkSupport(Context& context) const
+{
+	if (context.isDeviceFunctionalitySupported("VK_KHR_portability_subset") && !context.getDeviceFeatures().robustBufferAccess)
+		TCU_THROW(NotSupportedError, "VK_KHR_portability_subset: robustBufferAccess not supported by this implementation");
+}
+
 void VertexAccessTest::initPrograms (SourceCollections& programCollection) const
 {
 	std::ostringstream		attributeDeclaration;
diff --git a/external/vulkancts/modules/vulkan/shaderexecutor/vktAtomicOperationTests.cpp b/external/vulkancts/modules/vulkan/shaderexecutor/vktAtomicOperationTests.cpp
index 4ac28b1..dd16c4c 100644
--- a/external/vulkancts/modules/vulkan/shaderexecutor/vktAtomicOperationTests.cpp
+++ b/external/vulkancts/modules/vulkan/shaderexecutor/vktAtomicOperationTests.cpp
@@ -1000,6 +1000,8 @@
 	default:
 		DE_FATAL("Unsupported shader type");
 	}
+
+	checkSupportShader(ctx, m_shaderType.getType());
 }
 
 void AtomicOperationCase::createShaderSpec (void)
diff --git a/external/vulkancts/modules/vulkan/shaderexecutor/vktOpaqueTypeIndexingTests.cpp b/external/vulkancts/modules/vulkan/shaderexecutor/vktOpaqueTypeIndexingTests.cpp
index cf9d34b..4985620 100644
--- a/external/vulkancts/modules/vulkan/shaderexecutor/vktOpaqueTypeIndexingTests.cpp
+++ b/external/vulkancts/modules/vulkan/shaderexecutor/vktOpaqueTypeIndexingTests.cpp
@@ -185,6 +185,8 @@
 											generateSources(m_shaderType, m_shaderSpec, programCollection);
 										}
 
+	virtual	void						checkSupport				(Context& context) const;
+
 protected:
 	const char*							m_name;
 	const glu::ShaderType				m_shaderType;
@@ -208,6 +210,11 @@
 {
 }
 
+void OpaqueTypeIndexingCase::checkSupport (Context& context) const
+{
+	checkSupportShader(context, m_shaderType);
+}
+
 class OpaqueTypeIndexingTestInstance : public TestInstance
 {
 public:
@@ -1383,6 +1390,7 @@
 	virtual						~BlockArrayIndexingCase		(void);
 
 	virtual TestInstance*		createInstance				(Context& ctx) const;
+	virtual	void				checkSupport				(Context& context) const;
 
 private:
 								BlockArrayIndexingCase		(const BlockArrayIndexingCase&);
@@ -1417,6 +1425,33 @@
 {
 }
 
+void BlockArrayIndexingCase::checkSupport(Context &context) const
+{
+	OpaqueTypeIndexingCase::checkSupport(context);
+
+	uint32_t maxDescriptorStorageBuffers = (uint32_t)(m_inValues.size());
+
+	switch (m_shaderType)
+	{
+	case glu::SHADERTYPE_VERTEX:
+	case glu::SHADERTYPE_TESSELLATION_CONTROL:
+	case glu::SHADERTYPE_TESSELLATION_EVALUATION:
+	case glu::SHADERTYPE_GEOMETRY:
+	case glu::SHADERTYPE_FRAGMENT:
+		// No extra storage buffers
+		break;
+	case glu::SHADERTYPE_COMPUTE:
+		// From ComputerShaderExecutor class
+		maxDescriptorStorageBuffers += 2u;
+		break;
+	default:
+		TCU_THROW(InternalError, "Unsupported shader type");
+	}
+
+	if (maxDescriptorStorageBuffers > context.getDeviceProperties2().properties.limits.maxPerStageDescriptorStorageBuffers)
+		TCU_THROW(NotSupportedError, "Driver supports less maxPerStageDescriptorStorageBuffers than the ones required");
+}
+
 TestInstance* BlockArrayIndexingCase::createInstance (Context& ctx) const
 {
 	return new BlockArrayIndexingCaseInstance(ctx,
diff --git a/external/vulkancts/modules/vulkan/shaderexecutor/vktShaderExecutor.cpp b/external/vulkancts/modules/vulkan/shaderexecutor/vktShaderExecutor.cpp
index b206713..6bcb47c 100644
--- a/external/vulkancts/modules/vulkan/shaderexecutor/vktShaderExecutor.cpp
+++ b/external/vulkancts/modules/vulkan/shaderexecutor/vktShaderExecutor.cpp
@@ -3511,6 +3511,16 @@
 	}
 }
 
+void checkSupportShader(Context& context, const glu::ShaderType shaderType)
+{
+	if (shaderType == glu::SHADERTYPE_TESSELLATION_EVALUATION &&
+		context.isDeviceFunctionalitySupported("VK_KHR_portability_subset") &&
+		!context.getPortabilitySubsetFeatures().tessellationIsolines)
+	{
+		TCU_THROW(NotSupportedError, "VK_KHR_portability_subset: Tessellation iso lines are not supported by this implementation");
+	}
+}
+
 
 } // shaderexecutor
 } // vkt
diff --git a/external/vulkancts/modules/vulkan/shaderexecutor/vktShaderExecutor.hpp b/external/vulkancts/modules/vulkan/shaderexecutor/vktShaderExecutor.hpp
index 7174a25..c29d779 100644
--- a/external/vulkancts/modules/vulkan/shaderexecutor/vktShaderExecutor.hpp
+++ b/external/vulkancts/modules/vulkan/shaderexecutor/vktShaderExecutor.hpp
@@ -118,6 +118,7 @@
 bool				executorSupported	(glu::ShaderType shaderType);
 void				generateSources		(glu::ShaderType shaderType, const ShaderSpec& shaderSpec, vk::SourceCollections& dst);
 ShaderExecutor*		createExecutor		(Context& context, glu::ShaderType shaderType, const ShaderSpec& shaderSpec, vk::VkDescriptorSetLayout extraResourcesLayout = (vk::VkDescriptorSetLayout)0);
+void				checkSupportShader	(Context& context, const glu::ShaderType shaderType);
 
 } // shaderexecutor
 } // vkt
diff --git a/external/vulkancts/modules/vulkan/shaderexecutor/vktShaderIntegerFunctionTests.cpp b/external/vulkancts/modules/vulkan/shaderexecutor/vktShaderIntegerFunctionTests.cpp
index a7d2956..7cf2815 100644
--- a/external/vulkancts/modules/vulkan/shaderexecutor/vktShaderIntegerFunctionTests.cpp
+++ b/external/vulkancts/modules/vulkan/shaderexecutor/vktShaderIntegerFunctionTests.cpp
@@ -296,6 +296,8 @@
 											generateSources(m_shaderType, m_spec, programCollection);
 										}
 
+			void						checkSupport			(Context& context) const;
+
 	virtual TestInstance*				createInstance			(Context& context) const = 0;
 
 protected:
@@ -320,6 +322,11 @@
 {
 }
 
+void IntegerFunctionCase::checkSupport (Context& context) const
+{
+	checkSupportShader(context, m_shaderType);
+}
+
 // IntegerFunctionTestInstance
 
 class IntegerFunctionTestInstance : public TestInstance
diff --git a/external/vulkancts/modules/vulkan/shaderexecutor/vktShaderPackingFunctionTests.cpp b/external/vulkancts/modules/vulkan/shaderexecutor/vktShaderPackingFunctionTests.cpp
index 5a1a5d8..e4e6f8f 100644
--- a/external/vulkancts/modules/vulkan/shaderexecutor/vktShaderPackingFunctionTests.cpp
+++ b/external/vulkancts/modules/vulkan/shaderexecutor/vktShaderPackingFunctionTests.cpp
@@ -75,6 +75,7 @@
 										ShaderPackingFunctionCase			(tcu::TestContext& testCtx, const char* name, const char* description, glu::ShaderType shaderType);
 										~ShaderPackingFunctionCase			(void);
 
+			void						checkSupport						(Context& context) const;
 	virtual	void						initPrograms						(vk::SourceCollections& programCollection) const
 										{
 											generateSources(m_shaderType, m_spec, programCollection);
@@ -99,6 +100,11 @@
 {
 }
 
+void ShaderPackingFunctionCase::checkSupport (Context& context) const
+{
+	checkSupportShader(context, m_shaderType);
+}
+
 // ShaderPackingFunctionTestInstance
 
 class ShaderPackingFunctionTestInstance : public TestInstance
diff --git a/external/vulkancts/modules/vulkan/shaderrender/vktShaderRenderBuiltinVarTests.cpp b/external/vulkancts/modules/vulkan/shaderrender/vktShaderRenderBuiltinVarTests.cpp
index d3f258a..3de7c50 100644
--- a/external/vulkancts/modules/vulkan/shaderrender/vktShaderRenderBuiltinVarTests.cpp
+++ b/external/vulkancts/modules/vulkan/shaderrender/vktShaderRenderBuiltinVarTests.cpp
@@ -207,6 +207,7 @@
 	virtual						~BuiltinGlFrontFacingCase	(void);
 
 	void						initPrograms				(SourceCollections& dst) const;
+	void						checkSupport				(Context& context) const;
 	TestInstance*				createInstance				(Context& context) const;
 
 private:
@@ -257,6 +258,16 @@
 	}
 }
 
+void BuiltinGlFrontFacingCase::checkSupport (Context& context) const
+{
+	if (m_topology == VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN &&
+		context.isDeviceFunctionalitySupported("VK_KHR_portability_subset") &&
+		!context.getPortabilitySubsetFeatures().triangleFans)
+	{
+		TCU_THROW(NotSupportedError, "VK_KHR_portability_subset: Triangle fans are not supported by this implementation");
+	}
+}
+
 TestInstance* BuiltinGlFrontFacingCase::createInstance (Context& context) const
 {
 	return new BuiltinGlFrontFacingCaseInstance(context, m_topology);
@@ -1002,19 +1013,21 @@
 		RENDERWIDTH		= 16,
 		RENDERHEIGHT	= 16
 	};
-				BuiltinFragCoordMsaaCaseInstance	(Context& context, VkSampleCountFlagBits sampleCount);
+				BuiltinFragCoordMsaaCaseInstance	(Context& context, VkSampleCountFlagBits sampleCount, bool useEnable);
 	TestStatus	iterate								(void);
 private:
 	bool		validateSampleLocations				(const ConstPixelBufferAccess& sampleLocationBuffer) const;
 
 	const tcu::UVec2				m_renderSize;
 	const VkSampleCountFlagBits		m_sampleCount;
+	const bool						m_useEnable;
 };
 
-BuiltinFragCoordMsaaCaseInstance::BuiltinFragCoordMsaaCaseInstance (Context& context, VkSampleCountFlagBits sampleCount)
+BuiltinFragCoordMsaaCaseInstance::BuiltinFragCoordMsaaCaseInstance (Context& context, VkSampleCountFlagBits sampleCount, bool useEnable)
 	: TestInstance		(context)
 	, m_renderSize		(RENDERWIDTH, RENDERHEIGHT)
 	, m_sampleCount		(sampleCount)
+	, m_useEnable		(useEnable)
 {
 	const InstanceInterface&	vki					= m_context.getInstanceInterface();
 	const VkPhysicalDevice		physicalDevice		= m_context.getPhysicalDevice();
@@ -1247,7 +1260,7 @@
 		VulkanProgram				vulkanProgram(shaders);
 
 		frameBufferState.numSamples				= m_sampleCount;
-		pipelineState.sampleShadingEnable		= true;
+		pipelineState.sampleShadingEnable		= m_useEnable; // When m_useEnable is false, we rely on the gl_SampleID input to enable sample shading
 		vulkanProgram.descriptorSetLayout	= *descriptorSetLayout;
 		vulkanProgram.descriptorSet			= *descriptorSet;
 
@@ -1355,6 +1368,18 @@
 				const UVec2 pixelAddress	= UVec2(sampleNdx + m_sampleCount * colNdx, rowNdx);
 				const Vec4  pixelData		= sampleLocationBuffer.getPixel(pixelAddress.x(), pixelAddress.y());
 
+				if (pixelData.z() != 0.0f)
+				{
+					log << TestLog::Message << "Pixel (" << colNdx << "," << rowNdx << "): has unexpected .z component, expected: 0.0, got: " << pixelData.z() << TestLog::EndMessage;
+					return false;
+				}
+
+				if (pixelData.w() != 1.0f)
+				{
+					log << TestLog::Message << "Pixel (" << colNdx << "," << rowNdx << "): has unexpected .w component, expected: 1.0, got: " << pixelData.w() << TestLog::EndMessage;
+					return false;
+				}
+
 				locations.push_back(Vec2(pixelData.x(), pixelData.y()));
 			}
 
@@ -1402,17 +1427,19 @@
 class BuiltinFragCoordMsaaTestCase : public TestCase
 {
 public:
-					BuiltinFragCoordMsaaTestCase	(TestContext& testCtx, const char* name, const char* description, VkSampleCountFlagBits sampleCount);
+					BuiltinFragCoordMsaaTestCase	(TestContext& testCtx, const char* name, const char* description, VkSampleCountFlagBits sampleCount, bool useEnable);
 	virtual			~BuiltinFragCoordMsaaTestCase	(void);
 	void			initPrograms					(SourceCollections& sourceCollections) const;
 	TestInstance*	createInstance					(Context& context) const;
 private:
 	const VkSampleCountFlagBits			m_sampleCount;
+	const bool							m_useEnable;
 };
 
-BuiltinFragCoordMsaaTestCase::BuiltinFragCoordMsaaTestCase (TestContext& testCtx, const char* name, const char* description, VkSampleCountFlagBits sampleCount)
+BuiltinFragCoordMsaaTestCase::BuiltinFragCoordMsaaTestCase (TestContext& testCtx, const char* name, const char* description, VkSampleCountFlagBits sampleCount, bool useEnable)
 	: TestCase			(testCtx, name, description)
 	, m_sampleCount		(sampleCount)
+	, m_useEnable		(useEnable)
 {
 }
 
@@ -1444,7 +1471,7 @@
 			<< "{\n"
 			<< "	const int sampleNdx = int(gl_SampleID);\n"
 			<< "	ivec2 imageCoord = ivec2(sampleNdx + int(gl_FragCoord.x) * " << m_sampleCount << ", int(gl_FragCoord.y));\n"
-			<< "	imageStore(storageImage, imageCoord, vec4(gl_FragCoord.xy,vec2(0)));\n"
+			<< "	imageStore(storageImage, imageCoord, gl_FragCoord);\n"
 			<< "	color = vec4(1.0, 0.0, 0.0, 1.0);\n"
 			<< "}\n";
 		programCollection.glslSources.add("FragCoordMsaaFrag") << glu::FragmentSource(fragmentSource.str());
@@ -1453,7 +1480,7 @@
 
 TestInstance* BuiltinFragCoordMsaaTestCase::createInstance (Context& context) const
 {
-	return new BuiltinFragCoordMsaaCaseInstance(context, m_sampleCount);
+	return new BuiltinFragCoordMsaaCaseInstance(context, m_sampleCount, m_useEnable);
 }
 
 class BuiltinFragDepthCase : public TestCase
@@ -2305,6 +2332,7 @@
 	de::MovePtr<TestCaseGroup> frontFacingGroup		(new TestCaseGroup(testCtx, "frontfacing", "Test gl_Frontfacing keyword."));
 	de::MovePtr<TestCaseGroup> fragDepthGroup		(new TestCaseGroup(testCtx, "fragdepth", "Test gl_FragDepth keyword."));
 	de::MovePtr<TestCaseGroup> fragCoordMsaaGroup	(new TestCaseGroup(testCtx, "fragcoord_msaa", "Test interation between gl_FragCoord and msaa"));
+	de::MovePtr<TestCaseGroup> fragCoordMsaaInputGroup	(new TestCaseGroup(testCtx, "fragcoord_msaa_input", "Test interation between gl_FragCoord and msaa"));
 
 	simpleGroup->addChild(new BuiltinGlFragCoordXYZCase(testCtx, "fragcoord_xyz", "FragCoord xyz test"));
 	simpleGroup->addChild(new BuiltinGlFragCoordWCase(testCtx, "fragcoord_w", "FragCoord w test"));
@@ -2331,7 +2359,10 @@
 		};
 
 		for (deUint32 caseNdx = 0; caseNdx < DE_LENGTH_OF_ARRAY(fragCoordMsaaCaseList); caseNdx++)
-			fragCoordMsaaGroup->addChild(new BuiltinFragCoordMsaaTestCase(testCtx, fragCoordMsaaCaseList[caseNdx].name, fragCoordMsaaCaseList[caseNdx].description, fragCoordMsaaCaseList[caseNdx].sampleCount));
+		{
+			fragCoordMsaaGroup->addChild(new BuiltinFragCoordMsaaTestCase(testCtx, fragCoordMsaaCaseList[caseNdx].name, fragCoordMsaaCaseList[caseNdx].description, fragCoordMsaaCaseList[caseNdx].sampleCount, true));
+			fragCoordMsaaInputGroup->addChild(new BuiltinFragCoordMsaaTestCase(testCtx, fragCoordMsaaCaseList[caseNdx].name, fragCoordMsaaCaseList[caseNdx].description, fragCoordMsaaCaseList[caseNdx].sampleCount, false));
+		}
 	}
 
 	// gl_FrontFacing tests
@@ -2406,6 +2437,7 @@
 	builtinGroup->addChild(frontFacingGroup.release());
 	builtinGroup->addChild(fragDepthGroup.release());
 	builtinGroup->addChild(fragCoordMsaaGroup.release());
+	builtinGroup->addChild(fragCoordMsaaInputGroup.release());
 	builtinGroup->addChild(simpleGroup.release());
 
 	for (deUint16 shaderType = 0; shaderType <= (SHADER_INPUT_BUILTIN_BIT | SHADER_INPUT_VARYING_BIT | SHADER_INPUT_CONSTANT_BIT); ++shaderType)
diff --git a/external/vulkancts/modules/vulkan/shaderrender/vktShaderRenderTextureFunctionTests.cpp b/external/vulkancts/modules/vulkan/shaderrender/vktShaderRenderTextureFunctionTests.cpp
index cdeb0f3..3445809 100644
--- a/external/vulkancts/modules/vulkan/shaderrender/vktShaderRenderTextureFunctionTests.cpp
+++ b/external/vulkancts/modules/vulkan/shaderrender/vktShaderRenderTextureFunctionTests.cpp
@@ -1438,6 +1438,7 @@
 enum QueryFunction
 {
 	QUERYFUNCTION_TEXTURESIZE = 0,
+	QUERYFUNCTION_TEXTURESIZEMS,
 	QUERYFUNCTION_TEXTUREQUERYLOD,
 	QUERYFUNCTION_TEXTUREQUERYLEVELS,
 	QUERYFUNCTION_TEXTURESAMPLES,
@@ -1573,14 +1574,14 @@
 	return str.str();
 }
 
-static bool isValidCase (TextureType type, const tcu::IVec3& textureSize, int lod, int lodBase)
+static bool isValidCase (TextureType type, const tcu::IVec3& textureSize, int lodBase)
 {
-	const bool		isSquare		= textureSize.x() == textureSize.y();
-	const bool		isCubeArray		= isSquare && (textureSize.z() % 6) == 0;
-	const int		maxSize			= getMaxTextureSize(type, textureSize);
-	const bool		isLodValid		= (maxSize >> (lod + lodBase)) != 0;
+	const bool	isSquare	= textureSize.x() == textureSize.y();
+	const bool	isCubeArray	= isSquare && (textureSize.z() % 6) == 0;
+	const int	maxSize		= getMaxTextureSize(type, textureSize);
+	const bool	isBaseValid	= (maxSize >> lodBase) != 0;
 
-	if (!isLodValid)
+	if (!isBaseValid)
 		return false;
 	if (type == TEXTURETYPE_CUBE_MAP && !isSquare)
 		return false;
@@ -1770,7 +1771,7 @@
 void TextureSizeInstance::initTexture (void)
 {
 	tcu::TestLog&			log					= m_context.getTestContext().getLog();
-	const int				numLevels			= m_testSize.lod + m_testSize.lodBase + 1;
+	const int				numLevels			= deLog2Floor32(getMaxTextureSize(m_textureSpec.type, m_testSize.textureSize)) + 1;
 	TextureBindingSp		textureBinding;
 
 	log << tcu::TestLog::Message << "Testing image size " << getTextureSizeString(m_textureSpec.type, m_testSize.textureSize) << tcu::TestLog::EndMessage;
@@ -1867,6 +1868,18 @@
 		{ tcu::IVec3(128, 64, 32),		3,		1,	tcu::IVec3(8, 4, 2)			},
 		{ tcu::IVec3(64, 64, 64),		1,		1,	tcu::IVec3(16, 16, 16)		},
 
+		{ tcu::IVec3(100, 31, 18),		1,		2,	tcu::IVec3(12, 3, 2)		},
+		{ tcu::IVec3(100, 31, 18),		2,		2,	tcu::IVec3(6, 1, 1)			},
+		{ tcu::IVec3(100, 31, 18),		1,		4,	tcu::IVec3(3, 1, 1)			},
+
+		// out-of-range mip levels
+		{ tcu::IVec3(1, 3, 2),			-7,		0,	tcu::IVec3(0, 0, 0)			},
+		{ tcu::IVec3(1, 3, 2),			106,	0,	tcu::IVec3(0, 0, 0)			},
+		{ tcu::IVec3(100, 31, 18),		7,		0,	tcu::IVec3(0, 0, 0)			},
+		{ tcu::IVec3(32, 32, 12),		6,		0,	tcu::IVec3(0, 0, 0)			},
+		{ tcu::IVec3(32, 32, 12),		-9,		0,	tcu::IVec3(0, 0, 0)			},
+		{ tcu::IVec3(32, 32, 12),		4396,	0,	tcu::IVec3(0, 0, 0)			},
+
 		// w == h and d % 6 == 0 (for cube array)
 		{ tcu::IVec3(1, 1, 6),			0,		0,	tcu::IVec3(1, 1, 6)			},
 		{ tcu::IVec3(32, 32, 12),		0,		0,	tcu::IVec3(32, 32, 12)		},
@@ -1901,7 +1914,7 @@
 	bool					success			= true;
 
 	// skip incompatible cases
-	if (!isValidCase(m_textureSpec.type, m_testSize.textureSize, m_testSize.lod, m_testSize.lodBase))
+	if (!isValidCase(m_textureSpec.type, m_testSize.textureSize, m_testSize.lodBase))
 		return true;
 
 	// setup texture
@@ -1945,7 +1958,11 @@
 
 		for (int ndx = 0; ndx < resultComponents; ndx++)
 		{
-			if (output[ndx] != m_expectedSize[ndx])
+			// We test all levels, but only compare results for valid LoDs. The others give
+			// undefined values.
+			const int	maxSize		= getMaxTextureSize(m_textureSpec.type, m_testSize.textureSize);
+			const bool	isLodValid	= (maxSize >> (m_testSize.lod + m_testSize.lodBase)) != 0;
+			if (isLodValid && output[ndx] != m_expectedSize[ndx])
 			{
 				success = false;
 				break;
@@ -2009,6 +2026,202 @@
 	}
 }
 
+class TextureSizeMSInstance : public TextureQueryInstance
+{
+public:
+								TextureSizeMSInstance			(Context&					context,
+																 const bool					isVertexCase,
+																 const TextureSpec&			textureSpec);
+	virtual						~TextureSizeMSInstance			(void);
+
+	virtual tcu::TestStatus		iterate							(void);
+
+private:
+	void						initTexture						(vk::VkSampleCountFlagBits samples, const tcu::IVec3 &dim);
+	bool						testSize						(vk::VkSampleCountFlagBits samples, const tcu::IVec3 &dim);
+
+	unsigned								m_iterationCounter;
+	vector<vk::VkSampleCountFlagBits>		m_iterations;
+};
+
+TextureSizeMSInstance::TextureSizeMSInstance	(Context&				context,
+												const bool				isVertexCase,
+												const TextureSpec&		textureSpec)
+	: TextureQueryInstance		(context, isVertexCase, textureSpec)
+	, m_iterationCounter		(0)
+{
+	m_renderSize = tcu::UVec2(1, 1);
+
+	// determine available sample counts
+	{
+		const vk::VkFormat						format			= vk::mapTextureFormat(glu::mapGLInternalFormat(m_textureSpec.format));
+		const vk::VkImageType					imageType		= getVkImageType(m_textureSpec.type);
+		vk::VkImageFormatProperties				properties;
+
+		if (m_context.getInstanceInterface().getPhysicalDeviceImageFormatProperties(m_context.getPhysicalDevice(),
+																					format,
+																					imageType,
+																					vk::VK_IMAGE_TILING_OPTIMAL,
+																					vk::VK_IMAGE_USAGE_SAMPLED_BIT | vk::VK_IMAGE_USAGE_TRANSFER_DST_BIT,
+																					(vk::VkImageCreateFlags)0,
+																					&properties) == vk::VK_ERROR_FORMAT_NOT_SUPPORTED)
+			TCU_THROW(NotSupportedError, "Format not supported");
+
+		// NOTE: The test case initializes MS images (for all supported N of samples), runs a program
+		//       which invokes OpImageQuerySize against the image and checks the result.
+		//
+		//       Multisample images do not support a sample count of 1, so start from 2 samples.
+		static const vk::VkSampleCountFlagBits	sampleFlags[]	=
+		{
+			vk::VK_SAMPLE_COUNT_2_BIT,
+			vk::VK_SAMPLE_COUNT_4_BIT,
+			vk::VK_SAMPLE_COUNT_8_BIT,
+			vk::VK_SAMPLE_COUNT_16_BIT,
+			vk::VK_SAMPLE_COUNT_32_BIT,
+			vk::VK_SAMPLE_COUNT_64_BIT
+		};
+
+		for (int samplesNdx = 0; samplesNdx < DE_LENGTH_OF_ARRAY(sampleFlags); samplesNdx++)
+		{
+			const vk::VkSampleCountFlagBits&	flag			= sampleFlags[samplesNdx];
+
+			if ((properties.sampleCounts & flag) != 0)
+				m_iterations.push_back(flag);
+		}
+
+		if (m_iterations.empty())
+		{
+			// Sampled images of integer formats may support only 1 sample. Exit the test with "Not supported" in these cases.
+			if (tcu::getTextureChannelClass(mapVkFormat(format).type) == tcu::TEXTURECHANNELCLASS_UNSIGNED_INTEGER ||
+				tcu::getTextureChannelClass(mapVkFormat(format).type) == tcu::TEXTURECHANNELCLASS_SIGNED_INTEGER)
+			{
+				TCU_THROW(NotSupportedError, "Skipping validation of integer formats as only VK_SAMPLE_COUNT_1_BIT is supported.");
+			}
+
+			DE_ASSERT(false);
+		}
+	}
+}
+
+TextureSizeMSInstance::~TextureSizeMSInstance (void)
+{
+}
+
+tcu::TestStatus TextureSizeMSInstance::iterate (void)
+{
+	const tcu::IVec3 testSizes[] =
+	{
+		tcu::IVec3(1, 1, 1),
+		tcu::IVec3(1, 2, 1),
+		tcu::IVec3(1, 3, 2),
+		tcu::IVec3(1, 1, 6),
+		tcu::IVec3(32, 32, 12),
+		tcu::IVec3(64, 64, 64),
+		tcu::IVec3(100, 31, 18),
+		tcu::IVec3(100, 128, 32),
+		tcu::IVec3(128, 64, 32),
+	};
+
+	unsigned sampleIdx	= m_iterationCounter / DE_LENGTH_OF_ARRAY(testSizes);
+	unsigned dimIdx		= m_iterationCounter % DE_LENGTH_OF_ARRAY(testSizes);
+
+	if (m_iterationCounter++ <  m_iterations.size() * DE_LENGTH_OF_ARRAY(testSizes))
+	{
+		if (!testSize(m_iterations[sampleIdx], testSizes[dimIdx]))
+			return tcu::TestStatus::fail("Got unexpected result");
+
+		return tcu::TestStatus::incomplete();
+	}
+	else
+		return tcu::TestStatus::pass("Pass");
+}
+
+bool TextureSizeMSInstance::testSize (vk::VkSampleCountFlagBits samples, const tcu::IVec3 &dim)
+{
+	tcu::TestLog&		log		= m_context.getTestContext().getLog();
+
+	// setup texture
+	initTexture(samples, dim);
+
+	// render
+	TextureQueryInstance::render();
+
+	// test
+	{
+		const tcu::TextureLevel&	result				= getResultImage();
+		tcu::IVec4					output				= result.getAccess().getPixelInt(0, 0);
+		const int					resultComponents	= glu::getDataTypeScalarSize(getTextureSizeFuncResultType(m_textureSpec.type));
+
+		bool success = true;
+
+		for (int ndx = 0; ndx < resultComponents; ndx++)
+		{
+			if (output[ndx] != dim[ndx])
+			{
+				success = false;
+				break;
+			}
+		}
+
+		if (success)
+		{
+			// success
+			log << tcu::TestLog::Message << "Passed" << tcu::TestLog::EndMessage;
+			return true;
+		}
+		else
+		{
+			// failure
+			std::stringstream	resultSizeStr;
+			switch (resultComponents)
+			{
+				case 1:
+					resultSizeStr << output[0];
+					break;
+				case 2:
+					resultSizeStr << output.toWidth<2>();
+					break;
+				case 3:
+					resultSizeStr << output.toWidth<3>();
+					break;
+				default:
+					DE_ASSERT(false);
+					break;
+			}
+			log << tcu::TestLog::Message << "Result: " << resultSizeStr.str() << tcu::TestLog::EndMessage;
+			log << tcu::TestLog::Message << "Failed" << tcu::TestLog::EndMessage;
+			return false;
+		}
+	}
+}
+
+void TextureSizeMSInstance::initTexture (vk::VkSampleCountFlagBits samples, const tcu::IVec3 &dim)
+{
+	tcu::TestLog&			log					= m_context.getTestContext().getLog();
+	TextureBindingSp		textureBinding;
+
+	DE_ASSERT(m_textureSpec.type == TEXTURETYPE_2D || m_textureSpec.type == TEXTURETYPE_2D_ARRAY);
+
+	log << tcu::TestLog::Message << "Image size: " << getTextureSizeString(m_textureSpec.type, dim) << ", samples: " << samples << tcu::TestLog::EndMessage;
+
+	textureBinding = createEmptyTexture(m_textureSpec.format, m_textureSpec.type, dim, m_textureSpec.numLevels, 0 /* lodBase */, m_textureSpec.sampler);
+
+	m_textures.clear();
+	m_textures.push_back(textureBinding);
+
+	// update samples count
+	{
+		DE_ASSERT(m_textures.size() == 1);
+
+		TextureBinding::Parameters	params	= m_textures[0]->getParameters();
+
+		params.initialization	= TextureBinding::INIT_CLEAR;
+		params.samples			= samples;
+
+		m_textures[0]->setParameters(params);
+	}
+}
+
 class TextureSamplesInstance : public TextureQueryInstance
 {
 public:
@@ -2286,7 +2499,7 @@
 	bool					success			= true;
 
 	// skip incompatible cases
-	if (!isValidCase(m_textureSpec.type, m_testSize.textureSize, 0, m_testSize.lodBase))
+	if (!isValidCase(m_textureSpec.type, m_testSize.textureSize, m_testSize.lodBase))
 		return true;
 
 	// setup texture
@@ -2685,6 +2898,7 @@
 	switch (m_function)
 	{
 		case QUERYFUNCTION_TEXTURESIZE:				return new TextureSizeInstance(context, m_isVertexCase, m_textureSpec);
+		case QUERYFUNCTION_TEXTURESIZEMS:			return new TextureSizeMSInstance(context, m_isVertexCase, m_textureSpec);
 		case QUERYFUNCTION_TEXTUREQUERYLOD:			return new TextureQueryLodInstance(context, m_isVertexCase, m_textureSpec);
 		case QUERYFUNCTION_TEXTUREQUERYLEVELS:		return new TextureQueryLevelsInstance(context, m_isVertexCase, m_textureSpec);
 		case QUERYFUNCTION_TEXTURESAMPLES:			return new TextureSamplesInstance(context, m_isVertexCase, m_textureSpec);
@@ -2760,6 +2974,18 @@
 				break;
 			}
 
+			case QUERYFUNCTION_TEXTURESIZEMS:
+			{
+				const int		resultComponents	= glu::getDataTypeScalarSize(getTextureSizeFuncResultType(m_textureSpec.type));
+
+				op << "textureSize(u_sampler)";
+				for (int ndx = 0; ndx < 3 - resultComponents; ndx++)
+					op << ", 0.0";
+				op << ", 1.0";
+
+				break;
+			}
+
 			case QUERYFUNCTION_TEXTUREQUERYLOD:
 				op << "textureQueryLod(u_sampler, v_texCoord), 0.0, 1.0";
 				break;
@@ -4299,6 +4525,33 @@
 			queryGroup->addChild(group.release());
 		}
 
+		// textureSize() cases for multisample textures
+		{
+			const TexQueryFuncCaseSpec textureSizeMSCases[] =
+			{
+				{ "sampler2dms_fixed",			"sampler2DMS",				tex2DFixed			},
+				{ "sampler2dms_float",			"sampler2DMS",				tex2DFloat			},
+				{ "isampler2dms",				"isampler2DMS",				tex2DInt			},
+				{ "usampler2dms",				"usampler2DMS",				tex2DUint			},
+				{ "sampler2dmsarray_fixed",		"sampler2DMSArray",			tex2DArrayFixed		},
+				{ "sampler2dmsarray_float",		"sampler2DMSArray",			tex2DArrayFloat		},
+				{ "isampler2dmsarray",			"isampler2DMSArray",		tex2DArrayInt		},
+				{ "usampler2dmsarray",			"usampler2DMSArray",		tex2DArrayUint		},
+			};
+
+			de::MovePtr<tcu::TestCaseGroup>		group		(new tcu::TestCaseGroup(m_testCtx, "texturesizems", "textureSize() Tests for Multisample Textures"));
+
+			for (int ndx = 0; ndx < DE_LENGTH_OF_ARRAY(textureSizeMSCases); ++ndx)
+			{
+				const TexQueryFuncCaseSpec&		caseSpec	= textureSizeMSCases[ndx];
+
+				group->addChild(new TextureQueryCase(m_testCtx, (std::string(caseSpec.name) + "_vertex"),   "", caseSpec.samplerName, caseSpec.textureSpec, true,  QUERYFUNCTION_TEXTURESIZEMS));
+				group->addChild(new TextureQueryCase(m_testCtx, (std::string(caseSpec.name) + "_fragment"), "", caseSpec.samplerName, caseSpec.textureSpec, false, QUERYFUNCTION_TEXTURESIZEMS));
+			}
+
+			queryGroup->addChild(group.release());
+		}
+
 		// textureSamples() cases
 		{
 			const TexQueryFuncCaseSpec textureSamplesCases[] =
diff --git a/external/vulkancts/modules/vulkan/shaderrender/vktShaderRenderTextureGatherTests.cpp b/external/vulkancts/modules/vulkan/shaderrender/vktShaderRenderTextureGatherTests.cpp
index 3c0f70e..eb49f6f 100644
--- a/external/vulkancts/modules/vulkan/shaderrender/vktShaderRenderTextureGatherTests.cpp
+++ b/external/vulkancts/modules/vulkan/shaderrender/vktShaderRenderTextureGatherTests.cpp
@@ -26,6 +26,7 @@
 #include "vktShaderRenderTextureGatherTests.hpp"
 #include "vktShaderRender.hpp"
 #include "vkImageUtil.hpp"
+#include "vkQueryUtil.hpp"
 #include "gluTextureUtil.hpp"
 #include "tcuTexture.hpp"
 #include "tcuTextureUtil.hpp"
@@ -1234,12 +1235,16 @@
 			VK_FALSE,														//	VkBool32		supportsTextureGatherLODBiasAMD;
 		};
 
-		vk::VkImageFormatProperties2 properties2;
-		deMemset(&properties2, 0, sizeof(properties2));
-		properties2.sType = vk::VK_STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2;
+		vk::VkImageFormatProperties2 properties2 = vk::initVulkanStructure();
 		properties2.pNext = &lodGatherProperties;
 
-		VK_CHECK(m_context.getInstanceInterface().getPhysicalDeviceImageFormatProperties2(m_context.getPhysicalDevice(), &formatInfo, &properties2));
+		const auto retCode = m_context.getInstanceInterface().getPhysicalDeviceImageFormatProperties2(m_context.getPhysicalDevice(), &formatInfo, &properties2);
+
+		if (retCode != vk::VK_SUCCESS && retCode != vk::VK_ERROR_FORMAT_NOT_SUPPORTED)
+			TCU_FAIL("vkGetPhysicalDeviceImageFormatProperties2 returned " + de::toString(retCode));
+
+		if (retCode == vk::VK_ERROR_FORMAT_NOT_SUPPORTED)
+			TCU_THROW(NotSupportedError, "Format does not support the required parameters");
 
 		if (!lodGatherProperties.supportsTextureGatherLODBiasAMD)
 			TCU_THROW(NotSupportedError, "Format does not support texture gather LOD/Bias operations");
diff --git a/external/vulkancts/modules/vulkan/sparse_resources/vktSparseResourcesShaderIntrinsicsBase.cpp b/external/vulkancts/modules/vulkan/sparse_resources/vktSparseResourcesShaderIntrinsicsBase.cpp
index 50e9e55..26fe504 100755
--- a/external/vulkancts/modules/vulkan/sparse_resources/vktSparseResourcesShaderIntrinsicsBase.cpp
+++ b/external/vulkancts/modules/vulkan/sparse_resources/vktSparseResourcesShaderIntrinsicsBase.cpp
@@ -361,6 +361,10 @@
 		case VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM:				src <<	"Rgba16";		break;
 		case VK_FORMAT_G16_B16R16_2PLANE_422_UNORM:					src <<	"Rgba16";		break;
 		case VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM:				src <<	"Rgba16";		break;
+		case VK_FORMAT_G8_B8R8_2PLANE_444_UNORM_EXT:				src <<	"Rgba8";		break;
+		case VK_FORMAT_G10X6_B10X6R10X6_2PLANE_444_UNORM_3PACK16_EXT:src <<	"Rgba16";		break;
+		case VK_FORMAT_G12X4_B12X4R12X4_2PLANE_444_UNORM_3PACK16_EXT:src <<	"Rgba16";		break;
+		case VK_FORMAT_G16_B16R16_2PLANE_444_UNORM_EXT:				src <<	"Rgba16";		break;
 
 		default:
 			DE_FATAL("Unexpected texture format");
diff --git a/external/vulkancts/modules/vulkan/sparse_resources/vktSparseResourcesTestsUtil.cpp b/external/vulkancts/modules/vulkan/sparse_resources/vktSparseResourcesTestsUtil.cpp
index a8e6471..6725269 100644
--- a/external/vulkancts/modules/vulkan/sparse_resources/vktSparseResourcesTestsUtil.cpp
+++ b/external/vulkancts/modules/vulkan/sparse_resources/vktSparseResourcesTestsUtil.cpp
@@ -105,7 +105,11 @@
 			{ VK_FORMAT_G16_B16R16_2PLANE_420_UNORM },
 			{ VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM },
 			{ VK_FORMAT_G16_B16R16_2PLANE_422_UNORM },
-			{ VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM }
+			{ VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM },
+			{ VK_FORMAT_G8_B8R8_2PLANE_444_UNORM_EXT },
+			{ VK_FORMAT_G10X6_B10X6R10X6_2PLANE_444_UNORM_3PACK16_EXT },
+			{ VK_FORMAT_G12X4_B12X4R12X4_2PLANE_444_UNORM_3PACK16_EXT },
+			{ VK_FORMAT_G16_B16R16_2PLANE_444_UNORM_EXT },
 		};
 		std::copy(begin(ycbcrFormats), end(ycbcrFormats), std::back_inserter(results));
 	}
@@ -696,6 +700,10 @@
 		case VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM:				return "rgba16";
 		case VK_FORMAT_G16_B16R16_2PLANE_422_UNORM:					return "rgba16";
 		case VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM:				return "rgba16";
+		case VK_FORMAT_G8_B8R8_2PLANE_444_UNORM_EXT:				return "rgba8";
+		case VK_FORMAT_G10X6_B10X6R10X6_2PLANE_444_UNORM_3PACK16_EXT:return "rgba16";
+		case VK_FORMAT_G12X4_B12X4R12X4_2PLANE_444_UNORM_3PACK16_EXT:return "rgba16";
+		case VK_FORMAT_G16_B16R16_2PLANE_444_UNORM_EXT:				return "rgba16";
 
 		default:
 			DE_FATAL("Unexpected texture format");
@@ -776,6 +784,10 @@
 		case VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM:
 		case VK_FORMAT_G16_B16R16_2PLANE_422_UNORM:
 		case VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM:
+		case VK_FORMAT_G8_B8R8_2PLANE_444_UNORM_EXT:
+		case VK_FORMAT_G10X6_B10X6R10X6_2PLANE_444_UNORM_3PACK16_EXT:
+		case VK_FORMAT_G12X4_B12X4R12X4_2PLANE_444_UNORM_3PACK16_EXT:
+		case VK_FORMAT_G16_B16R16_2PLANE_444_UNORM_EXT:
 			return de::toLower(std::string(getFormatName(format)).substr(10));
 
 		default:
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/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 0a8be1a..989ec0b 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>
@@ -7979,7 +7980,7 @@
 
 		"OpDecorate %group1 RelaxedPrecision\n"
 		"OpDecorate %group3 RelaxedPrecision\n"
-		"OpDecorate %group3 Invariant\n"
+		"OpDecorate %group3 Flat\n"
 		"OpDecorate %group3 Restrict\n"
 		"%group0 = OpDecorationGroup\n"
 		"%group1 = OpDecorationGroup\n"
@@ -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"
@@ -18804,7 +18805,8 @@
 
 	const ComparisonCase			amberTests[]	=
 	{
-		{ "modfstruct",	"modf and modfStruct" }
+		{ "modfstruct",		"modf and modfStruct"	},
+		{ "frexpstruct",	"frexp and frexpStruct"	}
 	};
 
 	for (ComparisonCase test : amberTests)
@@ -18846,7 +18848,8 @@
 
 	const ComparisonCase			amberTests[]	=
 	{
-		{ "modfstruct",	"modf and modfStruct" }
+		{ "modfstruct",		"modf and modfStruct"	},
+		{ "frexpstruct",	"frexp and frexpStruct"	}
 	};
 
 	for (ComparisonCase test : amberTests)
@@ -20449,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"));
@@ -20537,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/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 05b324c..dab28d5 100644
--- a/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmVariablePointersTests.cpp
+++ b/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmVariablePointersTests.cpp
@@ -49,6 +49,7 @@
 #include "vktSpvAsmVariablePointersTests.hpp"
 #include "vktTestCaseUtil.hpp"
 #include "vktTestGroupUtil.hpp"
+#include "vktAmberTestCase.hpp"
 
 #include <limits>
 #include <map>
@@ -218,7 +219,7 @@
 
 	stringTemplate +=
 		physPtrs ?
-		"OpExtension \"SPV_EXT_physical_storage_buffer\"\n"
+		"OpExtension \"SPV_KHR_physical_storage_buffer\"\n"
 		:
 		"OpExtension \"SPV_KHR_variable_pointers\"\n";
 
@@ -877,7 +878,7 @@
 
 	stringTemplate +=
 		physPtrs ?
-		"OpExtension \"SPV_EXT_physical_storage_buffer\"\n"
+		"OpExtension \"SPV_KHR_physical_storage_buffer\"\n"
 		:
 		"OpExtension \"SPV_KHR_variable_pointers\"\n";
 
@@ -1398,6 +1399,31 @@
 	}
 }
 
+void addDynamicOffsetComputeGroup (tcu::TestCaseGroup* group)
+{
+	tcu::TestContext &testCtx = group->getTestContext();
+
+	static const char dataDir[] = "spirv_assembly/instruction/compute/variable_pointer/dynamic_offset";
+
+	struct Case
+	{
+		string			name;
+		string			desc;
+	};
+
+	static const Case cases[] =
+	{
+		{ "select_descriptor_array",	"Test accessing a descriptor array using a variable pointer from OpSelect"			},
+	};
+
+	for (const auto& testCase : cases)
+	{
+		const string fileName = testCase.name + ".amber";
+
+		group->addChild(cts_amber::createAmberTestCase(testCtx, testCase.name.c_str(), testCase.desc.c_str(), dataDir, fileName, {"VK_KHR_variable_pointers", "VK_KHR_storage_buffer_storage_class", "VariablePointerFeatures.variablePointers", "VariablePointerFeatures.variablePointersStorageBuffer"}));
+	}
+}
+
 void addVariablePointersGraphicsGroup (tcu::TestCaseGroup* testGroup)
 {
 	tcu::TestContext&				testCtx					= testGroup->getTestContext();
@@ -2725,13 +2751,16 @@
 				 "nullptr_compute",
 				 "Test the usage of nullptr using the variable pointers extension in a compute shader",
 				 addNullptrVariablePointersComputeGroup);
+	addTestGroup(group.get(), "dynamic_offset",
+				 "Testing variable pointers referring to descriptors using dynamic offset",
+				 addDynamicOffsetComputeGroup);
 
 	return group.release();
 }
 
 tcu::TestCaseGroup* createPhysicalPointersComputeGroup (tcu::TestContext& testCtx)
 {
-	de::MovePtr<tcu::TestCaseGroup> group	(new tcu::TestCaseGroup(testCtx, "physical_pointers", "Compute tests for SPV_EXT_physical_storage_buffer extension"));
+	de::MovePtr<tcu::TestCaseGroup> group	(new tcu::TestCaseGroup(testCtx, "physical_pointers", "Compute tests for SPV_KHR_physical_storage_buffer extension"));
 	addTestGroup(group.get(), "compute", "Test the physical storage buffer extension using a compute shader", addPhysicalPointersComputeGroup);
 	addTestGroup(group.get(),
 				 "complex_types_compute",
diff --git a/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmVectorShuffleTests.cpp b/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmVectorShuffleTests.cpp
index 25daa4e..93c8862 100644
--- a/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmVectorShuffleTests.cpp
+++ b/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmVectorShuffleTests.cpp
@@ -38,18 +38,19 @@
 
 	// Shader test files are saved in <path>/external/vulkancts/data/vulkan/amber/<data_dir>/<basename>.amber
 	struct Case {
-		const char* basename;
-		const char* description;
+		const char*                    basename;
+		const char*                    description;
+		std::vector<std::string>       requirements;
 	};
 	const Case cases[] =
 	{
-		{ "vector_shuffle", "OpVectorShuffle with indices including -1" },
+		{ "vector_shuffle", "OpVectorShuffle with indices including -1" , { "VariablePointerFeatures.variablePointers" } },
 	};
 
 	for (unsigned i = 0; i < sizeof(cases)/sizeof(cases[0]) ; ++i)
 	{
 		std::string					file		= std::string(cases[i].basename) + ".amber";
-		cts_amber::AmberTestCase	*testCase	= cts_amber::createAmberTestCase(testCtx, cases[i].basename, cases[i].description, data_dir, file);
+		cts_amber::AmberTestCase	*testCase	= cts_amber::createAmberTestCase(testCtx, cases[i].basename, cases[i].description, data_dir, file, cases[i].requirements);
 
 		tests->addChild(testCase);
 	}
diff --git a/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsArithmeticTests.cpp b/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsArithmeticTests.cpp
index d9182f3..3841d9b 100755
--- a/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsArithmeticTests.cpp
+++ b/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsArithmeticTests.cpp
@@ -289,6 +289,8 @@
 	}
 
 	*caseDef.geometryPointSizeSupported = subgroups::isTessellationAndGeometryPointSizeSupported(context);
+
+	vkt::subgroups::supportedCheckShader(context, caseDef.shaderStage);
 }
 
 tcu::TestStatus noSSBOtest (Context& context, const CaseDefinition caseDef)
diff --git a/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsBallotBroadcastTests.cpp b/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsBallotBroadcastTests.cpp
index 3453168..f7dcdeb 100755
--- a/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsBallotBroadcastTests.cpp
+++ b/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsBallotBroadcastTests.cpp
@@ -310,7 +310,7 @@
 
 	*caseDef.geometryPointSizeSupported = subgroups::isTessellationAndGeometryPointSizeSupported(context);
 
-
+	vkt::subgroups::supportedCheckShader(context, caseDef.shaderStage);
 }
 
 tcu::TestStatus noSSBOtest (Context& context, const CaseDefinition caseDef)
diff --git a/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsBallotMasksTests.cpp b/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsBallotMasksTests.cpp
index c622f7a..7828a4c 100755
--- a/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsBallotMasksTests.cpp
+++ b/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsBallotMasksTests.cpp
@@ -441,6 +441,8 @@
 	}
 
 	*caseDef.geometryPointSizeSupported = subgroups::isTessellationAndGeometryPointSizeSupported(context);
+
+	vkt::subgroups::supportedCheckShader(context, caseDef.shaderStage);
 }
 
 tcu::TestStatus noSSBOtest (Context& context, const CaseDefinition caseDef)
diff --git a/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsBallotOtherTests.cpp b/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsBallotOtherTests.cpp
index eb039a7..a93b61e 100755
--- a/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsBallotOtherTests.cpp
+++ b/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsBallotOtherTests.cpp
@@ -507,6 +507,8 @@
 	}
 
 	*caseDef.geometryPointSizeSupported = subgroups::isTessellationAndGeometryPointSizeSupported(context);
+
+	vkt::subgroups::supportedCheckShader(context, caseDef.shaderStage);
 }
 
 tcu::TestStatus noSSBOtest (Context& context, const CaseDefinition caseDef)
diff --git a/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsBallotTests.cpp b/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsBallotTests.cpp
index b8260e7..0ffb2e5 100755
--- a/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsBallotTests.cpp
+++ b/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsBallotTests.cpp
@@ -955,6 +955,8 @@
 	}
 
 	*caseDef.geometryPointSizeSupported = subgroups::isTessellationAndGeometryPointSizeSupported(context);
+
+	vkt::subgroups::supportedCheckShader(context, caseDef.shaderStage);
 }
 
 tcu::TestStatus noSSBOtest (Context& context, const CaseDefinition caseDef)
diff --git a/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsBasicTests.cpp b/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsBasicTests.cpp
index 9d0b8c9..d347479 100755
--- a/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsBasicTests.cpp
+++ b/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsBasicTests.cpp
@@ -1895,6 +1895,8 @@
 	}
 
 	*caseDef.geometryPointSizeSupported = subgroups::isTessellationAndGeometryPointSizeSupported(context);
+
+	vkt::subgroups::supportedCheckShader(context, caseDef.shaderStage);
 }
 
 tcu::TestStatus noSSBOtest (Context& context, const CaseDefinition caseDef)
diff --git a/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsBuiltinMaskVarTests.cpp b/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsBuiltinMaskVarTests.cpp
index 047ddea..92da08e 100755
--- a/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsBuiltinMaskVarTests.cpp
+++ b/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsBuiltinMaskVarTests.cpp
@@ -146,74 +146,32 @@
 
 std::string subgroupMask (const CaseDefinition& caseDef)
 {
+	std::string comp;
+	if (caseDef.varName == "gl_SubgroupEqMask")
+		comp = "==";
+	else if (caseDef.varName == "gl_SubgroupGeMask")
+		comp = ">=";
+	else if (caseDef.varName == "gl_SubgroupGtMask")
+		comp = ">";
+	else if (caseDef.varName == "gl_SubgroupLeMask")
+		comp = "<=";
+	else if (caseDef.varName == "gl_SubgroupLtMask")
+		comp = "<";
+
 	std::ostringstream bdy;
 
 	bdy << "  uint tempResult = 0x1;\n"
-		<< "  uint bit        = 0x1;\n"
-		<< "  uint bitCount   = 0x0;\n"
 		<< "  uvec4 mask = subgroupBallot(true);\n"
 		<< "  const uvec4 var = " << caseDef.varName << ";\n"
 		<< "  for (uint i = 0; i < gl_SubgroupSize; i++)\n"
-		<< "  {\n";
-
-	if ("gl_SubgroupEqMask" == caseDef.varName)
-	{
-		bdy << "    if ((i == gl_SubgroupInvocationID) ^^ subgroupBallotBitExtract(var, i))\n"
-			<< "    {\n"
-			<< "      tempResult = 0;\n"
-			<< "    }\n";
-	}
-	else if ("gl_SubgroupGeMask" == caseDef.varName)
-	{
-		bdy << "    if ((i >= gl_SubgroupInvocationID) ^^ subgroupBallotBitExtract(var, i))\n"
-			<< "    {\n"
-			<< "      tempResult = 0;\n"
-			<< "    }\n";
-	}
-	else if ("gl_SubgroupGtMask" == caseDef.varName)
-	{
-		bdy << "    if ((i > gl_SubgroupInvocationID) ^^ subgroupBallotBitExtract(var, i))\n"
-			<< "    {\n"
-			<< "      tempResult = 0;\n"
-			<< "    }\n";
-	}
-	else if ("gl_SubgroupLeMask" == caseDef.varName)
-	{
-		bdy << "    if ((i <= gl_SubgroupInvocationID) ^^ subgroupBallotBitExtract(var, i))\n"
-			<< "    {\n"
-			<< "      tempResult = 0;\n"
-			<< "    }\n";
-	}
-	else if ("gl_SubgroupLtMask" == caseDef.varName)
-	{
-		bdy << "    if ((i < gl_SubgroupInvocationID) ^^ subgroupBallotBitExtract(var, i))\n"
-			<< "    {\n"
-			<< "      tempResult = 0;\n"
-			<< "    }\n";
-	}
-
-	bdy << "  }\n"
-		<< "  for (uint i = 0; i < 32; i++)\n"
 		<< "  {\n"
-		<< "    if ((var.x & bit) > 0)\n"
+		<< "    if ((i " << comp << " gl_SubgroupInvocationID) ^^ subgroupBallotBitExtract(var, i))\n"
 		<< "    {\n"
-		<< "      bitCount++;\n"
+		<< "      tempResult = 0;\n"
 		<< "    }\n"
-		<< "    if ((var.y & bit) > 0)\n"
-		<< "    {\n"
-		<< "      bitCount++;\n"
-		<< "    }\n"
-		<< "    if ((var.z & bit) > 0)\n"
-		<< "    {\n"
-		<< "      bitCount++;\n"
-		<< "    }\n"
-		<< "    if ((var.w & bit) > 0)\n"
-		<< "    {\n"
-		<< "      bitCount++;\n"
-		<< "    }\n"
-		<< "    bit = bit<<1;\n"
 		<< "  }\n"
-		<< "  if (subgroupBallotBitCount(var) != bitCount)\n"
+		<< "  uint c = bitCount(var.x) + bitCount(var.y) + bitCount(var.z) + bitCount(var.w);\n"
+		<< "  if (subgroupBallotBitCount(var) != c)\n"
 		<< "  {\n"
 		<< "    tempResult = 0;\n"
 		<< "  }\n";
@@ -1394,6 +1352,8 @@
 	}
 
 	*caseDef.geometryPointSizeSupported = subgroups::isTessellationAndGeometryPointSizeSupported(context);
+
+	vkt::subgroups::supportedCheckShader(context, caseDef.shaderStage);
 }
 
 tcu::TestStatus noSSBOtest(Context& context, const CaseDefinition caseDef)
diff --git a/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsBuiltinVarTests.cpp b/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsBuiltinVarTests.cpp
index afb033b..d9bd964 100755
--- a/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsBuiltinVarTests.cpp
+++ b/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsBuiltinVarTests.cpp
@@ -1624,6 +1624,8 @@
 	}
 
 	*caseDef.geometryPointSizeSupported = subgroups::isTessellationAndGeometryPointSizeSupported(context);
+
+	vkt::subgroups::supportedCheckShader(context, caseDef.shaderStage);
 }
 
 tcu::TestStatus noSSBOtest (Context& context, const CaseDefinition caseDef)
diff --git a/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsClusteredTests.cpp b/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsClusteredTests.cpp
index 1e9ff24..2f6e5e3 100755
--- a/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsClusteredTests.cpp
+++ b/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsClusteredTests.cpp
@@ -208,6 +208,8 @@
 	}
 
 	*caseDef.geometryPointSizeSupported = subgroups::isTessellationAndGeometryPointSizeSupported(context);
+
+	vkt::subgroups::supportedCheckShader(context, caseDef.shaderStage);
 }
 
 tcu::TestStatus noSSBOtest (Context& context, const CaseDefinition caseDef)
diff --git a/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsPartitionedTests.cpp b/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsPartitionedTests.cpp
index 3f0e552..45e8bf1 100755
--- a/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsPartitionedTests.cpp
+++ b/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsPartitionedTests.cpp
@@ -611,6 +611,8 @@
 	}
 
 	*caseDef.geometryPointSizeSupported = subgroups::isTessellationAndGeometryPointSizeSupported(context);
+
+	vkt::subgroups::supportedCheckShader(context, caseDef.shaderStage);
 }
 
 tcu::TestStatus noSSBOtest (Context& context, const CaseDefinition caseDef)
diff --git a/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsQuadTests.cpp b/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsQuadTests.cpp
index 004104b..37175e9 100755
--- a/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsQuadTests.cpp
+++ b/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsQuadTests.cpp
@@ -253,6 +253,8 @@
 	}
 
 	*caseDef.geometryPointSizeSupported = subgroups::isTessellationAndGeometryPointSizeSupported(context);
+
+	vkt::subgroups::supportedCheckShader(context, caseDef.shaderStage);
 }
 
 tcu::TestStatus noSSBOtest (Context& context, const CaseDefinition caseDef)
diff --git a/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsShapeTests.cpp b/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsShapeTests.cpp
index 82a828c..3ef66dd 100755
--- a/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsShapeTests.cpp
+++ b/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsShapeTests.cpp
@@ -505,6 +505,8 @@
 	}
 
 	*caseDef.geometryPointSizeSupported = subgroups::isTessellationAndGeometryPointSizeSupported(context);
+
+	vkt::subgroups::supportedCheckShader(context, caseDef.shaderStage);
 }
 
 tcu::TestStatus noSSBOtest (Context& context, const CaseDefinition caseDef)
diff --git a/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsShuffleTests.cpp b/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsShuffleTests.cpp
index 457167a..c5e4bbc 100755
--- a/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsShuffleTests.cpp
+++ b/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsShuffleTests.cpp
@@ -501,6 +501,8 @@
 	}
 
 	*caseDef.geometryPointSizeSupported = subgroups::isTessellationAndGeometryPointSizeSupported(context);
+
+	vkt::subgroups::supportedCheckShader(context, caseDef.shaderStage);
 }
 
 tcu::TestStatus noSSBOtest (Context& context, const CaseDefinition caseDef)
diff --git a/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsSizeControlTests.cpp b/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsSizeControlTests.cpp
index 29b799d..6d37394 100755
--- a/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsSizeControlTests.cpp
+++ b/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsSizeControlTests.cpp
@@ -660,6 +660,13 @@
 	}
 }
 
+void supportedCheckFeaturesShader (Context& context, CaseDefinition caseDef)
+{
+	supportedCheckFeatures(context, caseDef);
+
+	vkt::subgroups::supportedCheckShader(context, caseDef.shaderStage);
+}
+
 tcu::TestStatus noSSBOtest (Context& context, const CaseDefinition caseDef)
 {
 	struct internalDataStruct internalData =
@@ -1020,12 +1027,12 @@
 		const CaseDefinition caseDefCompute = {VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT, VK_SHADER_STAGE_COMPUTE_BIT, DE_FALSE, REQUIRED_SUBGROUP_SIZE_NONE};
 		addFunctionCaseWithPrograms(computeGroup.get(), "allow_varying_subgroup_size", "", supportedCheckFeatures, initPrograms, test, caseDefCompute);
 		const CaseDefinition caseDefAllGraphics = {VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT, VK_SHADER_STAGE_ALL_GRAPHICS, DE_FALSE, REQUIRED_SUBGROUP_SIZE_NONE};
-		addFunctionCaseWithPrograms(graphicsGroup.get(), "allow_varying_subgroup_size", "", supportedCheckFeatures, initPrograms, test, caseDefAllGraphics);
+		addFunctionCaseWithPrograms(graphicsGroup.get(), "allow_varying_subgroup_size", "", supportedCheckFeaturesShader, initPrograms, test, caseDefAllGraphics);
 
 		for (int stageIndex = 0; stageIndex < DE_LENGTH_OF_ARRAY(stages); ++stageIndex)
 		{
 			const CaseDefinition caseDefStage = {VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT, stages[stageIndex], DE_FALSE, REQUIRED_SUBGROUP_SIZE_NONE};
-			addFunctionCaseWithPrograms(framebufferGroup.get(),  getShaderStageName(caseDefStage.shaderStage) + "_allow_varying_subgroup_size", "", supportedCheckFeatures, initFrameBufferPrograms, noSSBOtest, caseDefStage);
+			addFunctionCaseWithPrograms(framebufferGroup.get(),  getShaderStageName(caseDefStage.shaderStage) + "_allow_varying_subgroup_size", "", supportedCheckFeaturesShader, initFrameBufferPrograms, noSSBOtest, caseDefStage);
 		}
 	}
 
@@ -1045,20 +1052,20 @@
 	// Tests to check setting a required subgroup size value.
 	{
 		const CaseDefinition caseDefAllGraphicsMax = {0u, VK_SHADER_STAGE_ALL_GRAPHICS, DE_FALSE, REQUIRED_SUBGROUP_SIZE_MAX};
-		addFunctionCaseWithPrograms(graphicsGroup.get(), "required_subgroup_size_max", "", supportedCheckFeatures, initPrograms, testRequireSubgroupSize, caseDefAllGraphicsMax);
+		addFunctionCaseWithPrograms(graphicsGroup.get(), "required_subgroup_size_max", "", supportedCheckFeaturesShader, initPrograms, testRequireSubgroupSize, caseDefAllGraphicsMax);
 		const CaseDefinition caseDefComputeMax = {0u, VK_SHADER_STAGE_COMPUTE_BIT, DE_FALSE, REQUIRED_SUBGROUP_SIZE_MAX};
 		addFunctionCaseWithPrograms(computeGroup.get(), "required_subgroup_size_max", "", supportedCheckFeatures, initPrograms, testRequireSubgroupSize, caseDefComputeMax);
 
 		const CaseDefinition caseDefAllGraphicsMin = {0u, VK_SHADER_STAGE_ALL_GRAPHICS, DE_FALSE, REQUIRED_SUBGROUP_SIZE_MIN};
-		addFunctionCaseWithPrograms(graphicsGroup.get(), "required_subgroup_size_min", "", supportedCheckFeatures, initPrograms, testRequireSubgroupSize, caseDefAllGraphicsMin);
+		addFunctionCaseWithPrograms(graphicsGroup.get(), "required_subgroup_size_min", "", supportedCheckFeaturesShader, initPrograms, testRequireSubgroupSize, caseDefAllGraphicsMin);
 		const CaseDefinition caseDefComputeMin = {0u, VK_SHADER_STAGE_COMPUTE_BIT, DE_FALSE, REQUIRED_SUBGROUP_SIZE_MIN};
 		addFunctionCaseWithPrograms(computeGroup.get(), "required_subgroup_size_min", "", supportedCheckFeatures, initPrograms, testRequireSubgroupSize, caseDefComputeMin);
 		for (int stageIndex = 0; stageIndex < DE_LENGTH_OF_ARRAY(stages); ++stageIndex)
 		{
 			const CaseDefinition caseDefStageMax = {0u, stages[stageIndex], DE_FALSE, REQUIRED_SUBGROUP_SIZE_MAX};
-			addFunctionCaseWithPrograms(framebufferGroup.get(),  getShaderStageName(caseDefStageMax.shaderStage) + "_required_subgroup_size_max", "", supportedCheckFeatures, initFrameBufferPrograms, noSSBOtestRequireSubgroupSize, caseDefStageMax);
+			addFunctionCaseWithPrograms(framebufferGroup.get(),  getShaderStageName(caseDefStageMax.shaderStage) + "_required_subgroup_size_max", "", supportedCheckFeaturesShader, initFrameBufferPrograms, noSSBOtestRequireSubgroupSize, caseDefStageMax);
 			const CaseDefinition caseDefStageMin = {0u, stages[stageIndex], DE_FALSE, REQUIRED_SUBGROUP_SIZE_MIN};
-			addFunctionCaseWithPrograms(framebufferGroup.get(),  getShaderStageName(caseDefStageMin.shaderStage) + "_required_subgroup_size_min", "", supportedCheckFeatures, initFrameBufferPrograms, noSSBOtestRequireSubgroupSize, caseDefStageMin);
+			addFunctionCaseWithPrograms(framebufferGroup.get(),  getShaderStageName(caseDefStageMin.shaderStage) + "_required_subgroup_size_min", "", supportedCheckFeaturesShader, initFrameBufferPrograms, noSSBOtestRequireSubgroupSize, caseDefStageMin);
 		}
 	}
 
diff --git a/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsTestsUtils.cpp b/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsTestsUtils.cpp
index b03ecbe..c7264401 100644
--- a/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsTestsUtils.cpp
+++ b/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsTestsUtils.cpp
@@ -4094,3 +4094,13 @@
 	return makeComputeTestRequiredSubgroupSize(context, format, inputs, inputsCount, internalData, checkResult, pipelineShaderStageCreateFlags,
 											   numWorkgroups, requiredSubgroupSize != 0u, subgroupSize, localSizesToTest, localSizesToTestCount);
 }
+
+void vkt::subgroups::supportedCheckShader(Context& context, const vk::VkShaderStageFlags shaderStage)
+{
+	if ((VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT | VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT) & shaderStage &&
+		context.isDeviceFunctionalitySupported("VK_KHR_portability_subset") &&
+		!context.getPortabilitySubsetFeatures().tessellationIsolines)
+	{
+		TCU_THROW(NotSupportedError, "VK_KHR_portability_subset: Tessellation iso lines are not supported by this implementation");
+	}
+}
diff --git a/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsTestsUtils.hpp b/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsTestsUtils.hpp
index 167d42c..0d49ee0 100644
--- a/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsTestsUtils.hpp
+++ b/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsTestsUtils.hpp
@@ -281,6 +281,8 @@
 						deUint32 subgroupSize),
 	const deUint32 pipelineShaderStageCreateFlags, const deUint32 numWorkgroups[3],
 	const deBool isRequiredSubgroupSize, const deUint32 subgroupSize, const deUint32 localSizesToTest[][3], const deUint32 localSizesToTestCount);
+
+void supportedCheckShader(Context& context, const vk::VkShaderStageFlags shaderStage);
 } // subgroups
 } // vkt
 
diff --git a/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsVoteTests.cpp b/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsVoteTests.cpp
index 2228170..1a6e2a4 100755
--- a/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsVoteTests.cpp
+++ b/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsVoteTests.cpp
@@ -679,6 +679,8 @@
 	}
 
 	*caseDef.geometryPointSizeSupported = subgroups::isTessellationAndGeometryPointSizeSupported(context);
+
+	vkt::subgroups::supportedCheckShader(context, caseDef.shaderStage);
 }
 
 tcu::TestStatus noSSBOtest (Context& context, const CaseDefinition caseDef)
diff --git a/external/vulkancts/modules/vulkan/synchronization/vktSynchronizationBasicEventTests.cpp b/external/vulkancts/modules/vulkan/synchronization/vktSynchronizationBasicEventTests.cpp
index 90ac6a2..68f7495 100644
--- a/external/vulkancts/modules/vulkan/synchronization/vktSynchronizationBasicEventTests.cpp
+++ b/external/vulkancts/modules/vulkan/synchronization/vktSynchronizationBasicEventTests.cpp
@@ -47,7 +47,7 @@
 	VkEventCreateFlags		flags;
 };
 
-tcu::TestStatus hostResetSetEventCase (Context& context)
+tcu::TestStatus hostResetSetEventCase (Context& context, TestConfig config)
 {
 	const DeviceInterface&		vk			= context.getDeviceInterface();
 	const VkDevice				device		= context.getDevice();
@@ -60,6 +60,8 @@
 	VkEvent						event;
 	Move<VkEvent>				ptrEvent;
 
+	DE_UNREF(config);
+
 	if (VK_SUCCESS != vk.createEvent(device, &eventInfo, DE_NULL, &event))
 		return tcu::TestStatus::fail("Couldn't create event");
 
@@ -344,6 +346,9 @@
 {
 	if (config.type == SynchronizationType::SYNCHRONIZATION2)
 		context.requireDeviceFunctionality("VK_KHR_synchronization2");
+
+	if (context.isDeviceFunctionalitySupported("VK_KHR_portability_subset") && !context.getPortabilitySubsetFeatures().events)
+		TCU_THROW(NotSupportedError, "VK_KHR_portability_subset: Events are not supported by this implementation");
 }
 
 } // anonymous
@@ -358,7 +363,7 @@
 
 	de::MovePtr<tcu::TestCaseGroup> basicTests (new tcu::TestCaseGroup(testCtx, "event", "Basic event tests"));
 
-	addFunctionCase(basicTests.get(), "host_set_reset", "Basic event tests set and reset on host", hostResetSetEventCase);
+	addFunctionCase(basicTests.get(), "host_set_reset", "Basic event tests set and reset on host", checkSupport, hostResetSetEventCase, config);
 	addFunctionCase(basicTests.get(), "device_set_reset", "Basic event tests set and reset on device", checkSupport, deviceResetSetEventCase, config);
 	addFunctionCase(basicTests.get(), "single_submit_multi_command_buffer", "Wait and set event single submission on device", checkSupport, singleSubmissionCase, config);
 	addFunctionCase(basicTests.get(), "multi_submit_multi_command_buffer", "Wait and set event mutli submission on device", checkSupport, multiSubmissionCase, config);
diff --git a/external/vulkancts/modules/vulkan/synchronization/vktSynchronizationBasicSemaphoreTests.cpp b/external/vulkancts/modules/vulkan/synchronization/vktSynchronizationBasicSemaphoreTests.cpp
index ab67d95..e324e20 100644
--- a/external/vulkancts/modules/vulkan/synchronization/vktSynchronizationBasicSemaphoreTests.cpp
+++ b/external/vulkancts/modules/vulkan/synchronization/vktSynchronizationBasicSemaphoreTests.cpp
@@ -30,10 +30,10 @@
 #include "vkPlatform.hpp"
 #include "vkQueryUtil.hpp"
 #include "vkCmdUtil.hpp"
-
-
 #include "vkRef.hpp"
 
+#include <thread>
+
 #include "tcuCommandLine.hpp"
 
 namespace vkt
@@ -177,9 +177,6 @@
 
 tcu::TestStatus basicChainTimelineCase (Context& context, TestConfig config)
 {
-	if (!context.getTimelineSemaphoreFeatures().timelineSemaphore)
-		TCU_THROW(NotSupportedError, "Timeline semaphore not supported");
-
 	VkResult					err			= VK_SUCCESS;
 	const DeviceInterface&		vk			= context.getDeviceInterface();
 	const VkDevice&				device		= context.getDevice();
@@ -245,6 +242,83 @@
 	return tcu::TestStatus::fail("Basic semaphore chain test failed");
 }
 
+tcu::TestStatus basicThreadTimelineCase(Context& context, TestConfig)
+{
+	const DeviceInterface&				vk				= context.getDeviceInterface();
+	const VkDevice&						device			= context.getDevice();
+	const VkSemaphoreTypeCreateInfo		scti			= { VK_STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO_KHR, DE_NULL, VK_SEMAPHORE_TYPE_TIMELINE_KHR, 0 };
+	const VkSemaphoreCreateInfo			sci				= { VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO, &scti, 0 };
+	const VkFenceCreateInfo				fci				= { VK_STRUCTURE_TYPE_FENCE_CREATE_INFO, DE_NULL, 0 };
+	const vk::Unique<vk::VkSemaphore>	semaphore		(createSemaphore(vk, device, &sci));
+	const Unique<VkFence>				fence			(createFence(vk, device, &fci));
+	const deUint64						waitTimeout		= 50ull * 1000000ull;		// miliseconds
+	VkResult							threadResult	= VK_SUCCESS;
+
+	// helper creating VkSemaphoreSignalInfo
+	auto makeSemaphoreSignalInfo = [&semaphore](deUint64 value) -> VkSemaphoreSignalInfo
+	{
+		return
+		{
+			VK_STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO,		// VkStructureType				sType
+			DE_NULL,										// const void*					pNext
+			*semaphore,										// VkSemaphore					semaphore
+			value											// deUint64						value
+		};
+	};
+
+	// helper creating VkSemaphoreWaitInfo
+	auto makeSemaphoreWaitInfo = [&semaphore](deUint64* valuePtr) -> VkSemaphoreWaitInfo
+	{
+		return
+		{
+			VK_STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO,			// VkStructureType				sType
+			DE_NULL,										// const void*					pNext
+			VK_SEMAPHORE_WAIT_ANY_BIT,						// VkSemaphoreWaitFlags			flags;
+			1u,												// deUint32						semaphoreCount;
+			&*semaphore,									// const VkSemaphore*			pSemaphores;
+			valuePtr										// const deUint64*				pValues;
+		};
+	};
+
+	// start thread - semaphore has value 0
+	de::MovePtr<std::thread> thread(new std::thread([=, &vk, &threadResult]
+	{
+		// wait till semaphore has value 1
+		deUint64 waitValue = 1;
+		VkSemaphoreWaitInfo waitOne = makeSemaphoreWaitInfo(&waitValue);
+		threadResult = vk.waitSemaphores(device, &waitOne, waitTimeout);
+
+		if (threadResult == VK_SUCCESS)
+		{
+			// signal semaphore with value 2
+			VkSemaphoreSignalInfo signalTwo = makeSemaphoreSignalInfo(2);
+			threadResult = vk.signalSemaphore(device, &signalTwo);
+		}
+	}));
+
+	// wait some time to give thread chance to start
+	deSleep(1);		// milisecond
+
+	// signal semaphore with value 1
+	VkSemaphoreSignalInfo signalOne = makeSemaphoreSignalInfo(1);
+	vk.signalSemaphore(device, &signalOne);
+
+	// wait till semaphore has value 2
+	deUint64				waitValue	= 2;
+	VkSemaphoreWaitInfo		waitTwo		= makeSemaphoreWaitInfo(&waitValue);
+	VkResult				mainResult	= vk.waitSemaphores(device, &waitTwo, waitTimeout);
+
+	thread->join();
+
+	if (mainResult == VK_SUCCESS)
+		return tcu::TestStatus::pass("Pass");
+
+	if ((mainResult == VK_TIMEOUT) || (threadResult == VK_TIMEOUT))
+		return tcu::TestStatus(QP_TEST_RESULT_QUALITY_WARNING, "Reached wait timeout");
+
+	return tcu::TestStatus::fail("Fail");
+}
+
 tcu::TestStatus basicMultiQueueCase(Context& context, TestConfig config)
 {
 	enum { NO_MATCH_FOUND = ~((deUint32)0) };
@@ -522,6 +596,10 @@
 	addFunctionCase(basicTests.get(), "multi_queue",	"Basic timeline semaphore tests with multi queue",	checkSupport, basicMultiQueueCase, config);
 	addFunctionCase(basicTests.get(), "chain",			"Timeline semaphore chain test",					checkSupport, basicChainTimelineCase, config);
 
+	// dont repeat this test for synchronization2
+	if (type == SynchronizationType::LEGACY)
+		addFunctionCase(basicTests.get(), "two_threads","Timeline semaphore used by two threads",			checkSupport, basicThreadTimelineCase, config);
+
 	return basicTests.release();
 }
 
diff --git a/external/vulkancts/modules/vulkan/synchronization/vktSynchronizationCrossInstanceSharingTests.cpp b/external/vulkancts/modules/vulkan/synchronization/vktSynchronizationCrossInstanceSharingTests.cpp
index 8e3d305..cf19295 100644
--- a/external/vulkancts/modules/vulkan/synchronization/vktSynchronizationCrossInstanceSharingTests.cpp
+++ b/external/vulkancts/modules/vulkan/synchronization/vktSynchronizationCrossInstanceSharingTests.cpp
@@ -202,6 +202,11 @@
 			{
 				TCU_THROW(NotSupportedError, "Handle requires dedicated allocation, but test uses suballocated memory");
 			}
+
+			if (!(formatProperties.imageFormatProperties.sampleCounts & config.resource.imageSamples)) {
+				TCU_THROW(NotSupportedError, "Specified sample count for format not supported");
+			}
+
 		}
 		else
 		{
diff --git a/external/vulkancts/modules/vulkan/synchronization/vktSynchronizationOperation.cpp b/external/vulkancts/modules/vulkan/synchronization/vktSynchronizationOperation.cpp
index 6951b87..1825d7f 100644
--- a/external/vulkancts/modules/vulkan/synchronization/vktSynchronizationOperation.cpp
+++ b/external/vulkancts/modules/vulkan/synchronization/vktSynchronizationOperation.cpp
@@ -2652,9 +2652,7 @@
 			const DeviceInterface&		vk						= m_context.getDeviceInterface();
 			SynchronizationWrapperPtr	synchronizationWrapper	= getSynchronizationWrapper(m_context.getSynchronizationType(), vk, DE_FALSE);
 
-			const VkImageMemoryBarrier2KHR imageMemoryBarriers2[]
-			{
-				makeImageMemoryBarrier2(
+			const VkImageMemoryBarrier2KHR imageMemoryBarriers2 = makeImageMemoryBarrier2(
 					VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT,				// VkPipelineStageFlags2KHR			srcStageMask
 					(VkAccessFlags)0,								// VkAccessFlags2KHR				srcAccessMask
 					m_pipelineStage,								// VkPipelineStageFlags2KHR			dstStageMask
@@ -2663,18 +2661,7 @@
 					VK_IMAGE_LAYOUT_GENERAL,						// VkImageLayout					newLayout
 					m_outResource.getImage().handle,				// VkImage							image
 					m_outResource.getImage().subresourceRange		// VkImageSubresourceRange			subresourceRange
-				),
-				makeImageMemoryBarrier2(
-					VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT,				// VkPipelineStageFlags2KHR			srcStageMask
-					(VkAccessFlags)0,								// VkAccessFlags2KHR				srcAccessMask
-					m_pipelineStage,								// VkPipelineStageFlags2KHR			dstStageMask
-					VK_ACCESS_2_SHADER_READ_BIT_KHR,				// VkAccessFlags2KHR				dstAccessMask
-					VK_IMAGE_LAYOUT_UNDEFINED,						// VkImageLayout					oldLayout
-					VK_IMAGE_LAYOUT_GENERAL,						// VkImageLayout					newLayout
-					m_inResource.getImage().handle,					// VkImage							image
-					m_inResource.getImage().subresourceRange		// VkImageSubresourceRange			subresourceRange
-				)
-			};
+			);
 			VkDependencyInfoKHR dependencyInfo
 			{
 				VK_STRUCTURE_TYPE_DEPENDENCY_INFO_KHR,				// VkStructureType					sType
@@ -2684,8 +2671,8 @@
 				DE_NULL,											// const VkMemoryBarrier2KHR*		pMemoryBarriers
 				0u,													// deUint32							bufferMemoryBarrierCount
 				DE_NULL,											// const VkBufferMemoryBarrier2KHR* pBufferMemoryBarriers
-				2,													// deUint32							imageMemoryBarrierCount
-				imageMemoryBarriers2								// const VkImageMemoryBarrier2KHR*	pImageMemoryBarriers
+				1,													// deUint32							imageMemoryBarrierCount
+				&imageMemoryBarriers2								// const VkImageMemoryBarrier2KHR*	pImageMemoryBarriers
 			};
 			synchronizationWrapper->cmdPipelineBarrier(cmdBuffer, &dependencyInfo);
 		}
diff --git a/external/vulkancts/modules/vulkan/synchronization/vktSynchronizationOperationSingleQueueTests.cpp b/external/vulkancts/modules/vulkan/synchronization/vktSynchronizationOperationSingleQueueTests.cpp
index 3fb2b80..d5b2d85 100644
--- a/external/vulkancts/modules/vulkan/synchronization/vktSynchronizationOperationSingleQueueTests.cpp
+++ b/external/vulkancts/modules/vulkan/synchronization/vktSynchronizationOperationSingleQueueTests.cpp
@@ -281,7 +281,7 @@
 			&signalSemaphoreSubmitInfo
 		);
 		synchronizationWrapper->addSubmitInfo(
-			0u,
+			1u,
 			&waitSemaphoreSubmitInfo,
 			1u,
 			&commandBufferSubmitInfo[READ],
@@ -640,6 +640,13 @@
 	{
 		if (m_type == SynchronizationType::SYNCHRONIZATION2)
 			context.requireDeviceFunctionality("VK_KHR_synchronization2");
+
+		if (SYNC_PRIMITIVE_EVENT == m_syncPrimitive &&
+			context.isDeviceFunctionalitySupported("VK_KHR_portability_subset") &&
+			!context.getPortabilitySubsetFeatures().events)
+		{
+			TCU_THROW(NotSupportedError, "VK_KHR_portability_subset: Events are not supported by this implementation");
+		}
 	}
 
 	TestInstance* createInstance (Context& context) const
diff --git a/external/vulkancts/modules/vulkan/synchronization/vktSynchronizationSignalOrderTests.cpp b/external/vulkancts/modules/vulkan/synchronization/vktSynchronizationSignalOrderTests.cpp
index 54c95e8..87c2de1 100644
--- a/external/vulkancts/modules/vulkan/synchronization/vktSynchronizationSignalOrderTests.cpp
+++ b/external/vulkancts/modules/vulkan/synchronization/vktSynchronizationSignalOrderTests.cpp
@@ -29,6 +29,7 @@
 #include "vktTestCaseUtil.hpp"
 #include "vktSynchronizationUtil.hpp"
 #include "vktExternalMemoryUtil.hpp"
+#include "vktCustomInstancesDevices.hpp"
 #include "vkBarrierUtil.hpp"
 
 #include "vkDefs.hpp"
@@ -40,6 +41,7 @@
 #include "vkTypeUtil.hpp"
 
 #include "tcuTestLog.hpp"
+#include "tcuCommandLine.hpp"
 
 #include "deRandom.hpp"
 #include "deThread.hpp"
@@ -92,7 +94,7 @@
 	VK_CHECK(vk.signalSemaphore(device, &ssi));
 }
 
-Move<VkDevice> createDevice (const Context& context)
+Move<VkDevice> createTestDevice (const Context& context)
 {
 	const float									priority				= 0.0f;
 	const std::vector<VkQueueFamilyProperties>	queueFamilyProperties	= getPhysicalDeviceQueueFamilyProperties(context.getInstanceInterface(), context.getPhysicalDevice());
@@ -169,7 +171,8 @@
 			0u
 		};
 
-		return createDevice(context.getPlatformInterface(), context.getInstance(), context.getInstanceInterface(), context.getPhysicalDevice(), &createInfo);
+		const auto validation = context.getTestContext().getCommandLine().isValidationEnabled();
+		return createCustomDevice(validation, context.getPlatformInterface(), context.getInstance(), context.getInstanceInterface(), context.getPhysicalDevice(), &createInfo);
 	}
 	catch (const vk::Error& error)
 	{
@@ -184,7 +187,7 @@
 class SingletonDevice
 {
 	SingletonDevice	(const Context& context)
-		: m_logicalDevice	(createDevice(context))
+		: m_logicalDevice	(createTestDevice(context))
 	{
 	}
 
@@ -498,7 +501,7 @@
 		{
 			VK_STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO_KHR,
 			DE_NULL,
-			VK_SEMAPHORE_TYPE_TIMELINE_KHR,
+			semaphoreType,
 			0,
 		};
 		const VkPhysicalDeviceExternalSemaphoreInfo	info				=
diff --git a/external/vulkancts/modules/vulkan/synchronization/vktSynchronizationTimelineSemaphoreTests.cpp b/external/vulkancts/modules/vulkan/synchronization/vktSynchronizationTimelineSemaphoreTests.cpp
index d5f9d75..8440274 100644
--- a/external/vulkancts/modules/vulkan/synchronization/vktSynchronizationTimelineSemaphoreTests.cpp
+++ b/external/vulkancts/modules/vulkan/synchronization/vktSynchronizationTimelineSemaphoreTests.cpp
@@ -29,6 +29,7 @@
 #include "vktTestCaseUtil.hpp"
 #include "vktSynchronizationUtil.hpp"
 #include "vktExternalMemoryUtil.hpp"
+#include "vktCustomInstancesDevices.hpp"
 #include "vkBarrierUtil.hpp"
 
 #include "vkDefs.hpp"
@@ -41,6 +42,7 @@
 #include "vkBufferWithMemory.hpp"
 
 #include "tcuTestLog.hpp"
+#include "tcuCommandLine.hpp"
 
 #include "deClock.h"
 #include "deRandom.hpp"
@@ -632,6 +634,7 @@
 
 	const DeviceInterface&							vk							= context.getDeviceInterface();
 	const VkDevice&									device						= context.getDevice();
+	const VkQueue									queue						= context.getUniversalQueue();
 	const deUint64									maxTimelineValueDifference	= getMaxTimelineSemaphoreValueDifference(context.getInstanceInterface(), context.getPhysicalDevice());
 	de::Random										rng							(1234);
 	const deUint64									nonZeroValue				= 1 + rng.getUint64() % (maxTimelineValueDifference - 1);
@@ -656,6 +659,26 @@
 	if (result != VK_SUCCESS)
 		return tcu::TestStatus::fail("Wait zero initial value failed");
 
+	{
+		VkSemaphoreSubmitInfoKHR	waitSemaphoreSubmitInfo		= makeCommonSemaphoreSubmitInfo(*semaphoreDefaultValue, initialValue, VK_PIPELINE_STAGE_2_TOP_OF_PIPE_BIT_KHR);
+		SynchronizationWrapperPtr	synchronizationWrapper		= getSynchronizationWrapper(type, vk, DE_TRUE);
+
+		synchronizationWrapper->addSubmitInfo(
+			1u,										// deUint32								waitSemaphoreInfoCount
+			&waitSemaphoreSubmitInfo,				// const VkSemaphoreSubmitInfoKHR*		pWaitSemaphoreInfos
+			0u,										// deUint32								commandBufferInfoCount
+			DE_NULL,								// const VkCommandBufferSubmitInfoKHR*	pCommandBufferInfos
+			0u,										// deUint32								signalSemaphoreInfoCount
+			DE_NULL,								// const VkSemaphoreSubmitInfoKHR*		pSignalSemaphoreInfos
+			DE_TRUE,
+			DE_FALSE
+		);
+
+		VK_CHECK(synchronizationWrapper->queueSubmit(queue, DE_NULL));
+
+		VK_CHECK(vk.deviceWaitIdle(device));
+	}
+
 	VK_CHECK(vk.getSemaphoreCounterValue(device, *semaphoreDefaultValue, &value));
 	if (value != initialValue)
 		return tcu::TestStatus::fail("Invalid zero initial value");
@@ -1256,7 +1279,7 @@
 	return infos;
 }
 
-Move<VkDevice> createDevice(const Context& context, SynchronizationType type)
+Move<VkDevice> createTestDevice(const Context& context, SynchronizationType type)
 {
 	const std::vector<VkQueueFamilyProperties>		queueFamilyProperties		= getPhysicalDeviceQueueFamilyProperties(context.getInstanceInterface(), context.getPhysicalDevice());
 	std::vector<VkDeviceQueueCreateInfo>			queueCreateInfos			= getQueueCreateInfo(queueFamilyProperties);
@@ -1302,8 +1325,10 @@
 		queueCreateInfo.pQueuePriorities = &(*queuePriorities.back().get())[0];
 	}
 
-	return createDevice(context.getPlatformInterface(), context.getInstance(),
-						context.getInstanceInterface(), context.getPhysicalDevice(), &deviceInfo);
+	const auto validation = context.getTestContext().getCommandLine().isValidationEnabled();
+
+	return createCustomDevice(validation, context.getPlatformInterface(), context.getInstance(),
+							  context.getInstanceInterface(), context.getPhysicalDevice(), &deviceInfo);
 }
 
 
@@ -1311,7 +1336,7 @@
 class SingletonDevice
 {
 	SingletonDevice	(const Context& context, SynchronizationType type)
-		: m_logicalDevice	(createDevice(context, type))
+		: m_logicalDevice	(createTestDevice(context, type))
 	{
 	}
 
diff --git a/external/vulkancts/modules/vulkan/tessellation/vktTessellationCoordinatesTests.cpp b/external/vulkancts/modules/vulkan/tessellation/vktTessellationCoordinatesTests.cpp
index b1dd73e..26221c8 100644
--- a/external/vulkancts/modules/vulkan/tessellation/vktTessellationCoordinatesTests.cpp
+++ b/external/vulkancts/modules/vulkan/tessellation/vktTessellationCoordinatesTests.cpp
@@ -371,6 +371,7 @@
 												 const bool					executionModeInEvaluationShader = true);
 
 	void						initPrograms	(SourceCollections&			programCollection) const;
+	void						checkSupport	(Context&					context) const;
 	TestInstance*				createInstance	(Context&					context) const;
 
 private:
@@ -390,6 +391,15 @@
 {
 }
 
+void TessCoordTest::checkSupport (Context& context) const
+{
+	if (const vk::VkPhysicalDevicePortabilitySubsetFeaturesKHR* const features = getPortability(context))
+	{
+		checkPointMode(*features);
+		checkPrimitive(*features, m_primitiveType);
+	}
+}
+
 void TessCoordTest::initPrograms (SourceCollections& programCollection) const
 {
 	if (m_executionModeInEvaluationShader)
diff --git a/external/vulkancts/modules/vulkan/tessellation/vktTessellationFractionalSpacingTests.cpp b/external/vulkancts/modules/vulkan/tessellation/vktTessellationFractionalSpacingTests.cpp
index 62d30b2..72e2a5c 100644
--- a/external/vulkancts/modules/vulkan/tessellation/vktTessellationFractionalSpacingTests.cpp
+++ b/external/vulkancts/modules/vulkan/tessellation/vktTessellationFractionalSpacingTests.cpp
@@ -649,6 +649,15 @@
 	return (success ? tcu::TestStatus::pass("OK") : tcu::TestStatus::fail("Failure"));
 }
 
+void checkSupportTess(Context& context, const TestParams)
+{
+	if (const vk::VkPhysicalDevicePortabilitySubsetFeaturesKHR* const features = getPortability(context))
+	{
+		checkPointMode(*features);
+		checkIsolines(*features);
+	}
+}
+
 } // anonymous
 
 //! These tests correspond to dEQP-GLES31.functional.tessellation.fractional_spacing.*
@@ -657,10 +666,10 @@
 {
 	de::MovePtr<tcu::TestCaseGroup> group (new tcu::TestCaseGroup(testCtx, "fractional_spacing", "Test fractional spacing modes"));
 
-	addFunctionCaseWithPrograms(group.get(), "glsl_odd",  "", initPrograms, test, TestParams(SHADER_LANGUAGE_GLSL, SPACINGMODE_FRACTIONAL_ODD));
-	addFunctionCaseWithPrograms(group.get(), "glsl_even", "", initPrograms, test, TestParams(SHADER_LANGUAGE_GLSL, SPACINGMODE_FRACTIONAL_EVEN));
-	addFunctionCaseWithPrograms(group.get(), "hlsl_odd",  "", initPrograms, test, TestParams(SHADER_LANGUAGE_HLSL, SPACINGMODE_FRACTIONAL_ODD));
-	addFunctionCaseWithPrograms(group.get(), "hlsl_even", "", initPrograms, test, TestParams(SHADER_LANGUAGE_HLSL, SPACINGMODE_FRACTIONAL_EVEN));
+	addFunctionCaseWithPrograms(group.get(), "glsl_odd",  "", checkSupportTess, initPrograms, test, TestParams(SHADER_LANGUAGE_GLSL, SPACINGMODE_FRACTIONAL_ODD));
+	addFunctionCaseWithPrograms(group.get(), "glsl_even", "", checkSupportTess, initPrograms, test, TestParams(SHADER_LANGUAGE_GLSL, SPACINGMODE_FRACTIONAL_EVEN));
+	addFunctionCaseWithPrograms(group.get(), "hlsl_odd",  "", checkSupportTess, initPrograms, test, TestParams(SHADER_LANGUAGE_HLSL, SPACINGMODE_FRACTIONAL_ODD));
+	addFunctionCaseWithPrograms(group.get(), "hlsl_even", "", checkSupportTess, initPrograms, test, TestParams(SHADER_LANGUAGE_HLSL, SPACINGMODE_FRACTIONAL_EVEN));
 
 	return group.release();
 }
diff --git a/external/vulkancts/modules/vulkan/tessellation/vktTessellationGeometryPassthroughTests.cpp b/external/vulkancts/modules/vulkan/tessellation/vktTessellationGeometryPassthroughTests.cpp
index b005e6d..2c3ca8c 100644
--- a/external/vulkancts/modules/vulkan/tessellation/vktTessellationGeometryPassthroughTests.cpp
+++ b/external/vulkancts/modules/vulkan/tessellation/vktTessellationGeometryPassthroughTests.cpp
@@ -127,6 +127,7 @@
 {
 public:
 	void			initPrograms	(vk::SourceCollections& programCollection) const;
+	void			checkSupport	(Context& context) const;
 	TestInstance*	createInstance	(Context& context) const;
 
 	IdentityGeometryShaderTestCase (tcu::TestContext& testCtx, const std::string& name, const std::string& description, const TessPrimitiveType primitiveType)
@@ -139,6 +140,11 @@
 	const TessPrimitiveType m_primitiveType;
 };
 
+void IdentityGeometryShaderTestCase::checkSupport (Context& context) const
+{
+	checkSupportPrimitive(context, m_primitiveType);
+}
+
 void IdentityGeometryShaderTestCase::initPrograms (vk::SourceCollections& programCollection) const
 {
 	addVertexAndFragmentShaders(programCollection);
@@ -216,6 +222,7 @@
 {
 public:
 	void			initPrograms	(vk::SourceCollections& programCollection) const;
+	void			checkSupport	(Context& context) const;
 	TestInstance*	createInstance	(Context& context) const;
 
 	IdentityTessellationShaderTestCase (tcu::TestContext& testCtx, const std::string& name, const std::string& description, const TessPrimitiveType primitiveType)
@@ -228,6 +235,11 @@
 	const TessPrimitiveType m_primitiveType;
 };
 
+void IdentityTessellationShaderTestCase::checkSupport (Context& context) const
+{
+	checkSupportPrimitive(context, m_primitiveType);
+}
+
 //! Geometry shader used in passthrough tessellation shader case.
 std::string generateGeometryShader (const TessPrimitiveType primitiveType, const std::string& colorSourceName)
 {
diff --git a/external/vulkancts/modules/vulkan/tessellation/vktTessellationGeometryPointSizeTests.cpp b/external/vulkancts/modules/vulkan/tessellation/vktTessellationGeometryPointSizeTests.cpp
index 5df3ed1..3dc453e 100644
--- a/external/vulkancts/modules/vulkan/tessellation/vktTessellationGeometryPointSizeTests.cpp
+++ b/external/vulkancts/modules/vulkan/tessellation/vktTessellationGeometryPointSizeTests.cpp
@@ -435,6 +435,13 @@
 	return buf.str();
 }
 
+void checkSupportTess (Context& context, const Flags flags)
+{
+	if (isTessellationStage(flags))
+		if (const vk::VkPhysicalDevicePortabilitySubsetFeaturesKHR* const features = getPortability(context))
+			checkPointMode(*features);
+}
+
 } // anonymous
 
 //! Ported from dEQP-GLES31.functional.tessellation_geometry_interaction.point_size.*
@@ -459,7 +466,7 @@
 		const std::string name = getTestCaseName       (caseFlags[ndx]);
 		const std::string desc = getTestCaseDescription(caseFlags[ndx]);
 
-		addFunctionCaseWithPrograms(group.get(), name, desc, initPrograms, test, caseFlags[ndx]);
+		addFunctionCaseWithPrograms(group.get(), name, desc, checkSupportTess, initPrograms, test, caseFlags[ndx]);
 	}
 
 	return group.release();
diff --git a/external/vulkancts/modules/vulkan/tessellation/vktTessellationInvarianceTests.cpp b/external/vulkancts/modules/vulkan/tessellation/vktTessellationInvarianceTests.cpp
index 01cb0ff..3be1785 100644
--- a/external/vulkancts/modules/vulkan/tessellation/vktTessellationInvarianceTests.cpp
+++ b/external/vulkancts/modules/vulkan/tessellation/vktTessellationInvarianceTests.cpp
@@ -1027,6 +1027,12 @@
 		return new OuterEdgeDivisionTestInstance(context, m_caseDef);
 	};
 
+	void checkSupport (Context& context) const
+	{
+		if (const vk::VkPhysicalDevicePortabilitySubsetFeaturesKHR* const features = getPortability(context))
+			checkPointMode(*features);
+	}
+
 private:
 	const CaseDefinition m_caseDef;
 };
@@ -1051,6 +1057,11 @@
 		return new OuterEdgeIndexIndependenceTestInstance(context, m_caseDef);
 	};
 
+	void checkSupport (Context& context) const
+	{
+		checkSupportCase(context, m_caseDef);
+	}
+
 private:
 	const CaseDefinition m_caseDef;
 };
@@ -1075,6 +1086,11 @@
 		return new SymmetricOuterEdgeTestInstance(context, m_caseDef);
 	};
 
+	void checkSupport (Context& context) const
+	{
+		checkSupportCase(context, m_caseDef);
+	}
+
 private:
 	const CaseDefinition m_caseDef;
 };
@@ -1266,6 +1282,7 @@
 	virtual							~InvarianceTestCase			(void) {}
 
 	void							initPrograms				(SourceCollections& programCollection) const;
+	void							checkSupport				(Context& context) const;
 	TestInstance*					createInstance				(Context& context) const;
 
 private:
@@ -1277,6 +1294,11 @@
 	addDefaultPrograms(programCollection, m_caseDef.primitiveType, m_caseDef.spacingMode, m_caseDef.windingUsage, getPointModeUsage(m_caseDef.usePointMode));
 }
 
+void InvarianceTestCase::checkSupport (Context& context) const
+{
+	checkSupportCase(context, m_caseDef);
+}
+
 class InvarianceTestInstance : public TestInstance
 {
 public:
@@ -2137,13 +2159,13 @@
 tcu::TestCase* makeTessCoordRangeTest (tcu::TestContext& testCtx, const std::string& name, const std::string& description, const TessPrimitiveType primitiveType, const SpacingMode spacingMode, const Winding winding, const bool usePointMode)
 {
 	const CaseDefinition caseDef = { CASETYPE_TESS_COORD_RANGE, primitiveType, spacingMode, winding, usePointMode };
-	return createFunctionCaseWithPrograms(testCtx, tcu::NODETYPE_SELF_VALIDATE, name, description, initPrograms, test, caseDef);
+	return createFunctionCaseWithPrograms(testCtx, tcu::NODETYPE_SELF_VALIDATE, name, description, checkSupportCase, initPrograms, test, caseDef);
 }
 
 tcu::TestCase* makeOneMinusTessCoordTest (tcu::TestContext& testCtx, const std::string& name, const std::string& description, const TessPrimitiveType primitiveType, const SpacingMode spacingMode, const Winding winding, const bool usePointMode)
 {
 	const CaseDefinition caseDef = { CASETYPE_ONE_MINUS_TESS_COORD, primitiveType, spacingMode, winding, usePointMode };
-	return createFunctionCaseWithPrograms(testCtx, tcu::NODETYPE_SELF_VALIDATE, name, description, initPrograms, test, caseDef);
+	return createFunctionCaseWithPrograms(testCtx, tcu::NODETYPE_SELF_VALIDATE, name, description, checkSupportCase, initPrograms, test, caseDef);
 }
 
 } // TessCoordComponent ns
diff --git a/external/vulkancts/modules/vulkan/tessellation/vktTessellationMiscDrawTests.cpp b/external/vulkancts/modules/vulkan/tessellation/vktTessellationMiscDrawTests.cpp
index 458d6a7..610628a 100644
--- a/external/vulkancts/modules/vulkan/tessellation/vktTessellationMiscDrawTests.cpp
+++ b/external/vulkancts/modules/vulkan/tessellation/vktTessellationMiscDrawTests.cpp
@@ -585,7 +585,7 @@
 		const SpacingMode spacingMode = static_cast<SpacingMode>(spacingModeNdx);
 		const std::string caseName    = std::string() + "isolines_" + getSpacingModeShaderName(spacingMode);
 
-		addFunctionCaseWithPrograms(group.get(), caseName, "Basic isolines render test",
+		addFunctionCaseWithPrograms(group.get(), caseName, "Basic isolines render test", checkSupportCase,
 									initProgramsIsolinesCase, runTest, makeCaseDefinition(TESSPRIMITIVETYPE_ISOLINES, spacingMode, getReferenceImagePathPrefix(caseName)));
 	}
 
diff --git a/external/vulkancts/modules/vulkan/tessellation/vktTessellationPrimitiveDiscardTests.cpp b/external/vulkancts/modules/vulkan/tessellation/vktTessellationPrimitiveDiscardTests.cpp
index 1927ea9..4b7fd86 100644
--- a/external/vulkancts/modules/vulkan/tessellation/vktTessellationPrimitiveDiscardTests.cpp
+++ b/external/vulkancts/modules/vulkan/tessellation/vktTessellationPrimitiveDiscardTests.cpp
@@ -626,7 +626,7 @@
 									 + (caseDef.usePointMode ? "_point_mode" : "")
 									 + (caseDef.useLessThanOneInnerLevels ? "" : "_valid_levels");
 
-		addFunctionCaseWithPrograms(group.get(), caseName, "", initPrograms, test, caseDef);
+		addFunctionCaseWithPrograms(group.get(), caseName, "", checkSupportCase, initPrograms, test, caseDef);
 	}
 
 	return group.release();
diff --git a/external/vulkancts/modules/vulkan/tessellation/vktTessellationUserDefinedIO.cpp b/external/vulkancts/modules/vulkan/tessellation/vktTessellationUserDefinedIO.cpp
index 19cddc7..7a94043 100644
--- a/external/vulkancts/modules/vulkan/tessellation/vktTessellationUserDefinedIO.cpp
+++ b/external/vulkancts/modules/vulkan/tessellation/vktTessellationUserDefinedIO.cpp
@@ -436,6 +436,7 @@
 public:
 							UserDefinedIOTest	(tcu::TestContext& testCtx, const std::string& name, const std::string& description, const CaseDefinition caseDef);
 	void					initPrograms		(vk::SourceCollections& programCollection) const;
+	void					checkSupport		(Context& context) const;
 	TestInstance*			createInstance		(Context& context) const;
 
 private:
@@ -449,6 +450,11 @@
 	std::string									m_tesStatements;
 };
 
+void UserDefinedIOTest::checkSupport (Context& context) const
+{
+	checkSupportCase(context, m_caseDef);
+}
+
 UserDefinedIOTest::UserDefinedIOTest (tcu::TestContext& testCtx, const std::string& name, const std::string& description, const CaseDefinition caseDef)
 	: TestCase	(testCtx, name, description)
 	, m_caseDef	(caseDef)
diff --git a/external/vulkancts/modules/vulkan/tessellation/vktTessellationUtil.hpp b/external/vulkancts/modules/vulkan/tessellation/vktTessellationUtil.hpp
index 9b7ba42..09c74ea 100644
--- a/external/vulkancts/modules/vulkan/tessellation/vktTessellationUtil.hpp
+++ b/external/vulkancts/modules/vulkan/tessellation/vktTessellationUtil.hpp
@@ -31,6 +31,7 @@
 #include "vkRefUtil.hpp"
 #include "vkQueryUtil.hpp"
 #include "vkObjUtil.hpp"
+#include "vktTestCase.hpp"
 
 #include "tcuVector.hpp"
 #include "tcuMaybe.hpp"
@@ -372,6 +373,37 @@
 	}
 }
 
+static inline const vk::VkPhysicalDevicePortabilitySubsetFeaturesKHR* getPortability (const Context& context)
+{
+	if (context.isDeviceFunctionalitySupported("VK_KHR_portability_subset"))
+		return &context.getPortabilitySubsetFeatures();
+	return DE_NULL;
+}
+
+static inline void checkIsolines (const vk::VkPhysicalDevicePortabilitySubsetFeaturesKHR& features)
+{
+	if (!features.tessellationIsolines)
+		TCU_THROW(NotSupportedError, "VK_KHR_portability_subset: Tessellation iso lines are not supported by this implementation");
+}
+
+static inline void checkPrimitive (const vk::VkPhysicalDevicePortabilitySubsetFeaturesKHR& features, const TessPrimitiveType primitive)
+{
+	if (primitive == TESSPRIMITIVETYPE_ISOLINES)
+		checkIsolines(features);
+}
+
+static inline void checkSupportPrimitive (Context& context, const TessPrimitiveType primitive)
+{
+	if (const vk::VkPhysicalDevicePortabilitySubsetFeaturesKHR* const features = getPortability(context))
+		checkPrimitive(*features, primitive);
+}
+
+static inline void checkPointMode (const vk::VkPhysicalDevicePortabilitySubsetFeaturesKHR& features)
+{
+	if (!features.tessellationPointMode)
+		TCU_THROW(NotSupportedError, "VK_KHR_portability_subset: Tessellation point mode is not supported by this implementation");
+}
+
 template<typename T>
 inline std::size_t sizeInBytes (const std::vector<T>& vec)
 {
@@ -448,6 +480,34 @@
 	return results;
 }
 
+template <typename CaseDef, typename = bool>
+struct PointMode
+{
+	static void check(const vk::VkPhysicalDevicePortabilitySubsetFeaturesKHR&, const CaseDef)
+	{
+	}
+};
+
+template <typename CaseDef>
+struct PointMode<CaseDef, decltype(CaseDef().usePointMode)>
+{
+	static void check(const vk::VkPhysicalDevicePortabilitySubsetFeaturesKHR& features, const CaseDef caseDef)
+	{
+		if (caseDef.usePointMode)
+			checkPointMode(features);
+	}
+};
+
+template <typename CaseDef>
+void checkSupportCase (Context& context, const CaseDef caseDef)
+{
+	if (const vk::VkPhysicalDevicePortabilitySubsetFeaturesKHR* const features = getPortability(context))
+	{
+		PointMode<CaseDef>::check(*features, caseDef);
+		checkPrimitive(*features, caseDef.primitiveType);
+	}
+}
+
 } // tessellation
 } // vkt
 
diff --git a/external/vulkancts/modules/vulkan/texture/vktTextureCompressedFormatTests.cpp b/external/vulkancts/modules/vulkan/texture/vktTextureCompressedFormatTests.cpp
index 9ea2c51..65a2b14 100644
--- a/external/vulkancts/modules/vulkan/texture/vktTextureCompressedFormatTests.cpp
+++ b/external/vulkancts/modules/vulkan/texture/vktTextureCompressedFormatTests.cpp
@@ -392,6 +392,8 @@
 	return isOk ? tcu::TestStatus::pass("Pass") : tcu::TestStatus::fail("Image verification failed");
 }
 
+} // anonymous
+
 void populateTextureCompressedFormatTests (tcu::TestCaseGroup* compressedTextureTests)
 {
 	tcu::TestContext&	testCtx	= compressedTextureTests->getTestContext();
@@ -443,8 +445,6 @@
 	}
 }
 
-} // anonymous
-
 tcu::TestCaseGroup* createTextureCompressedFormatTests (tcu::TestContext& testCtx)
 {
 	return createTestGroup(testCtx, "compressed", "Texture compressed format tests.", populateTextureCompressedFormatTests);
diff --git a/external/vulkancts/modules/vulkan/texture/vktTextureFilteringExplicitLodTests.cpp b/external/vulkancts/modules/vulkan/texture/vktTextureFilteringExplicitLodTests.cpp
index 979103e..0d4e6ab 100644
--- a/external/vulkancts/modules/vulkan/texture/vktTextureFilteringExplicitLodTests.cpp
+++ b/external/vulkancts/modules/vulkan/texture/vktTextureFilteringExplicitLodTests.cpp
@@ -28,6 +28,7 @@
 #include "vktSampleVerifier.hpp"
 #include "vktShaderExecutor.hpp"
 #include "vktTestCaseUtil.hpp"
+#include "vktTextureTestUtil.hpp"
 
 #include "vkDeviceUtil.hpp"
 #include "vkImageUtil.hpp"
@@ -952,6 +953,11 @@
 
 	void initSpec (void);
 
+	void checkSupport (Context& context) const
+	{
+		util::checkTextureSupport(context, m_testCaseData.imParams.format);
+	}
+
 	virtual void initPrograms (vk::SourceCollections& programCollection) const
 	{
 		generateSources(m_testCaseData.shaderType, m_shaderSpec, programCollection);
diff --git a/external/vulkancts/modules/vulkan/texture/vktTextureFilteringTests.cpp b/external/vulkancts/modules/vulkan/texture/vktTextureFilteringTests.cpp
index c7bac52..148a5fc 100644
--- a/external/vulkancts/modules/vulkan/texture/vktTextureFilteringTests.cpp
+++ b/external/vulkancts/modules/vulkan/texture/vktTextureFilteringTests.cpp
@@ -1045,6 +1045,9 @@
 		(tcu::TexVerifierUtil::isLinearFilter(minFilter) || tcu::TexVerifierUtil::isLinearFilter(magFilter) ||
 		 tcu::TexVerifierUtil::isCubicFilter(minFilter)  || tcu::TexVerifierUtil::isCubicFilter(magFilter)));
 }
+
+} // anonymous
+
 void populateTextureFilteringTests (tcu::TestCaseGroup* textureFilteringTests)
 {
 	tcu::TestContext&	testCtx		= textureFilteringTests->getTestContext();
@@ -1781,8 +1784,6 @@
 	}
 }
 
-} // anonymous
-
 tcu::TestCaseGroup*	createTextureFilteringTests	(tcu::TestContext& testCtx)
 {
 	return createTestGroup(testCtx, "filtering", "Texture filtering tests.", populateTextureFilteringTests);
diff --git a/external/vulkancts/modules/vulkan/texture/vktTextureMipmapTests.cpp b/external/vulkancts/modules/vulkan/texture/vktTextureMipmapTests.cpp
index bf637c8..b21c0f8 100644
--- a/external/vulkancts/modules/vulkan/texture/vktTextureMipmapTests.cpp
+++ b/external/vulkancts/modules/vulkan/texture/vktTextureMipmapTests.cpp
@@ -1698,6 +1698,8 @@
 	}
 };
 
+} // anonymous
+
 void populateTextureMipmappingTests (tcu::TestCaseGroup* textureMipmappingTests)
 {
 	tcu::TestContext&	testCtx		= textureMipmappingTests->getTestContext();
@@ -2164,8 +2166,6 @@
 	}
 }
 
-} // anonymous
-
 tcu::TestCaseGroup* createTextureMipmappingTests (tcu::TestContext& testCtx)
 {
 	return createTestGroup(testCtx, "mipmap", "Texture mipmapping tests.", populateTextureMipmappingTests);
diff --git a/external/vulkancts/modules/vulkan/texture/vktTextureShadowTests.cpp b/external/vulkancts/modules/vulkan/texture/vktTextureShadowTests.cpp
index 764167c..3066c43 100644
--- a/external/vulkancts/modules/vulkan/texture/vktTextureShadowTests.cpp
+++ b/external/vulkancts/modules/vulkan/texture/vktTextureShadowTests.cpp
@@ -813,6 +813,8 @@
 	return m_caseNdx < (int)m_cases.size() ? tcu::TestStatus::incomplete() : tcu::TestStatus::pass("Pass");
 }
 
+} // anonymous
+
 void populateTextureShadowTests (tcu::TestCaseGroup* textureShadowTests)
 {
 	tcu::TestContext&				testCtx				= textureShadowTests->getTestContext();
@@ -995,8 +997,6 @@
 	}
 }
 
-} // anonymous
-
 tcu::TestCaseGroup* createTextureShadowTests (tcu::TestContext& testCtx)
 {
 	return createTestGroup(testCtx, "shadow", "Texture shadow tests.", populateTextureShadowTests);
diff --git a/external/vulkancts/modules/vulkan/texture/vktTextureSwizzleTests.cpp b/external/vulkancts/modules/vulkan/texture/vktTextureSwizzleTests.cpp
index 729674f..c01a2bb 100644
--- a/external/vulkancts/modules/vulkan/texture/vktTextureSwizzleTests.cpp
+++ b/external/vulkancts/modules/vulkan/texture/vktTextureSwizzleTests.cpp
@@ -283,6 +283,8 @@
 	return isOk ? tcu::TestStatus::pass("Pass") : tcu::TestStatus::fail("Image verification failed");
 }
 
+} // anonymous
+
 void populateTextureSwizzleTests (tcu::TestCaseGroup* textureSwizzleTests)
 {
 	tcu::TestContext&	testCtx	= textureSwizzleTests->getTestContext();
@@ -523,8 +525,6 @@
 	textureSwizzleTests->addChild(groupTexCoord.release());
 }
 
-} // anonymous
-
 tcu::TestCaseGroup* createTextureSwizzleTests (tcu::TestContext& testCtx)
 {
 	return createTestGroup(testCtx, "swizzle", "Texture swizzle tests.", populateTextureSwizzleTests);
diff --git a/external/vulkancts/modules/vulkan/texture/vktTextureTestUtil.cpp b/external/vulkancts/modules/vulkan/texture/vktTextureTestUtil.cpp
index 14b2cbe..477f5a4 100644
--- a/external/vulkancts/modules/vulkan/texture/vktTextureTestUtil.cpp
+++ b/external/vulkancts/modules/vulkan/texture/vktTextureTestUtil.cpp
@@ -1251,7 +1251,8 @@
 			samplerCreateInfo.maxAnisotropy = maxAnisotropy;
 		}
 
-		if (samplerCreateInfo.magFilter == VK_FILTER_LINEAR || samplerCreateInfo.minFilter == VK_FILTER_LINEAR || samplerCreateInfo.mipmapMode == VK_SAMPLER_MIPMAP_MODE_LINEAR)
+		bool linFilt = (samplerCreateInfo.magFilter == VK_FILTER_LINEAR || samplerCreateInfo.minFilter == VK_FILTER_LINEAR || samplerCreateInfo.mipmapMode == VK_SAMPLER_MIPMAP_MODE_LINEAR);
+		if (linFilt && samplerCreateInfo.compareEnable == VK_FALSE)
 		{
 			const pipeline::TestTexture&	testTexture			= m_textureBindings[texUnit]->getTestTexture();
 			const VkFormat					textureFormat		= testTexture.isCompressed() ? mapCompressedTextureFormat(testTexture.getCompressedLevel(0, 0).getFormat())
diff --git a/external/vulkancts/modules/vulkan/texture/vktTextureTestUtil.hpp b/external/vulkancts/modules/vulkan/texture/vktTextureTestUtil.hpp
index 7acf075..dae4252 100644
--- a/external/vulkancts/modules/vulkan/texture/vktTextureTestUtil.hpp
+++ b/external/vulkancts/modules/vulkan/texture/vktTextureTestUtil.hpp
@@ -171,6 +171,9 @@
 	vk::VkComponentMapping							m_componentMapping;
 };
 
+void checkTextureSupport (Context& context, const vk::VkFormat imageFormat, const vk::VkComponentMapping& imageComponents,
+											const vk::VkFormat viewFormat,  const vk::VkComponentMapping& viewComponents);
+
 typedef de::SharedPtr<TextureBinding>	TextureBindingSp;
 
 class TextureRenderer
@@ -321,6 +324,7 @@
 										{
 											initializePrograms(programCollection, m_testsParameters.texCoordPrecision, m_testsParameters.programs);
 										}
+
 	virtual void						checkSupport				(Context& context) const
 										{
 											checkTextureSupport(context, m_testsParameters);
diff --git a/external/vulkancts/modules/vulkan/transform_feedback/vktTransformFeedbackSimpleTests.cpp b/external/vulkancts/modules/vulkan/transform_feedback/vktTransformFeedbackSimpleTests.cpp
index 19b74c3..0c460b2 100644
--- a/external/vulkancts/modules/vulkan/transform_feedback/vktTransformFeedbackSimpleTests.cpp
+++ b/external/vulkancts/modules/vulkan/transform_feedback/vktTransformFeedbackSimpleTests.cpp
@@ -44,6 +44,7 @@
 #include <iostream>
 #include <functional>
 #include <set>
+#include <algorithm>
 
 namespace vkt
 {
@@ -87,6 +88,7 @@
 	TEST_TYPE_QUERY_GET,
 	TEST_TYPE_QUERY_COPY,
 	TEST_TYPE_QUERY_RESET,
+	TEST_TYPE_MULTIQUERY,
 	TEST_TYPE_LAST
 };
 
@@ -110,6 +112,12 @@
 	bool			noOffsetArray;
 };
 
+struct TransformFeedbackQuery
+{
+	deUint32	written;
+	deUint32	attempts;
+};
+
 const deUint32 MINIMUM_TF_BUFFER_SIZE	= (1<<27);
 const deUint32 IMAGE_SIZE				= 64u;
 
@@ -385,7 +393,6 @@
 													TransformFeedbackTestInstance	(Context& context, const TestParameters& parameters);
 protected:
 	void											validateLimits					();
-	deUint32										getNextChunkSize				(const deUint32 usedBytes, const deUint32 bufBytes);
 	std::vector<VkDeviceSize>						generateSizesList				(const size_t bufBytes, const size_t chunkCount);
 	std::vector<VkDeviceSize>						generateOffsetsList				(const std::vector<VkDeviceSize>& sizesList);
 	void											verifyTransformFeedbackBuffer	(const MovePtr<Allocation>& bufAlloc,
@@ -1011,7 +1018,7 @@
 
 	invalidateAlloc(vk, device, *bufAlloc);
 
-	const deUint32			numPoints	= static_cast<deUint32>(bufBytes / sizeof(float));
+	const deUint32			numPoints	= bufBytes / static_cast<deUint32>(sizeof(float));
 	const deUint8*			tfDataBytes	= (deUint8*)bufAlloc->getHostPtr();
 	const float*			tfData		= (float*)&tfDataBytes[offset];
 
@@ -1880,6 +1887,210 @@
 	return tcu::TestStatus::pass("Pass");
 }
 
+class TransformFeedbackMultiQueryTestInstance : public TransformFeedbackTestInstance
+{
+public:
+								TransformFeedbackMultiQueryTestInstance	(Context& context, const TestParameters& parameters);
+
+protected:
+	std::vector<VkDeviceSize>	generateSizesList							(const size_t bufBytes, const size_t chunkCount);
+	void						verifyTransformFeedbackBuffer				(const MovePtr<Allocation>& bufAlloc, const deUint32 bufBytes, const deUint32 bufOffset, const float expected);
+	tcu::TestStatus				iterate										(void);
+};
+
+TransformFeedbackMultiQueryTestInstance::TransformFeedbackMultiQueryTestInstance (Context& context, const TestParameters& parameters)
+	: TransformFeedbackTestInstance	(context, parameters)
+{
+	const InstanceInterface&								vki							= m_context.getInstanceInterface();
+	const VkPhysicalDevice									physDevice					= m_context.getPhysicalDevice();
+	const VkPhysicalDeviceFeatures							features					= getPhysicalDeviceFeatures(vki, physDevice);
+	const VkPhysicalDeviceTransformFeedbackFeaturesEXT&		transformFeedbackFeatures	= m_context.getTransformFeedbackFeaturesEXT();
+	const deUint32											streamsSupported			= m_transformFeedbackProperties.maxTransformFeedbackStreams;
+	const deUint32											streamsRequired				= m_parameters.streamId + 1;
+	const deUint32											tfBuffersSupported			= m_transformFeedbackProperties.maxTransformFeedbackBuffers;
+	const deUint32											tfBuffersRequired			= m_parameters.partCount;
+	const deUint32											bytesPerVertex				= m_parameters.bufferSize / m_parameters.partCount;
+	const deUint32											tfStreamDataSizeSupported	= m_transformFeedbackProperties.maxTransformFeedbackStreamDataSize;
+	const deUint32											tfBufferDataSizeSupported	= m_transformFeedbackProperties.maxTransformFeedbackBufferDataSize;
+	const deUint32											tfBufferDataStrideSupported	= m_transformFeedbackProperties.maxTransformFeedbackBufferDataStride;
+
+	DE_ASSERT(m_parameters.partCount == 2u);
+
+	if (!features.geometryShader)
+		TCU_THROW(NotSupportedError, "Missing feature: geometryShader");
+
+	if (transformFeedbackFeatures.geometryStreams == DE_FALSE)
+		TCU_THROW(NotSupportedError, "geometryStreams feature is not supported");
+
+	if (streamsSupported < streamsRequired)
+		TCU_THROW(NotSupportedError, std::string("maxTransformFeedbackStreams=" + de::toString(streamsSupported) + ", while test requires " + de::toString(streamsRequired)).c_str());
+
+	if (tfBuffersSupported < tfBuffersRequired)
+		TCU_THROW(NotSupportedError, std::string("maxTransformFeedbackBuffers=" + de::toString(tfBuffersSupported) + ", while test requires " + de::toString(tfBuffersRequired)).c_str());
+
+	if (tfStreamDataSizeSupported < bytesPerVertex)
+		TCU_THROW(NotSupportedError, std::string("maxTransformFeedbackStreamDataSize=" + de::toString(tfStreamDataSizeSupported) + ", while test requires " + de::toString(bytesPerVertex)).c_str());
+
+	if (tfBufferDataSizeSupported < bytesPerVertex)
+		TCU_THROW(NotSupportedError, std::string("maxTransformFeedbackBufferDataSize=" + de::toString(tfBufferDataSizeSupported) + ", while test requires " + de::toString(bytesPerVertex)).c_str());
+
+	if (tfBufferDataStrideSupported < bytesPerVertex)
+		TCU_THROW(NotSupportedError, std::string("maxTransformFeedbackBufferDataStride=" + de::toString(tfBufferDataStrideSupported) + ", while test requires " + de::toString(bytesPerVertex)).c_str());
+
+	if (m_transformFeedbackProperties.transformFeedbackQueries == DE_FALSE)
+		TCU_THROW(NotSupportedError, "transformFeedbackQueries feature is not supported");
+}
+
+std::vector<VkDeviceSize> TransformFeedbackMultiQueryTestInstance::generateSizesList (const size_t bufBytes, const size_t chunkCount)
+{
+	const VkDeviceSize			chunkSize	= bufBytes / chunkCount;
+	std::vector<VkDeviceSize>	result		(chunkCount, chunkSize);
+
+	DE_ASSERT(chunkSize * chunkCount == bufBytes);
+	DE_ASSERT(bufBytes <= MINIMUM_TF_BUFFER_SIZE);
+	DE_ASSERT(bufBytes % sizeof(deUint32) == 0);
+	DE_ASSERT(chunkCount > 0);
+	DE_ASSERT(result.size() == chunkCount);
+
+	return result;
+}
+
+void TransformFeedbackMultiQueryTestInstance::verifyTransformFeedbackBuffer (const MovePtr<Allocation>& bufAlloc, const deUint32 bufBytes, const deUint32 bufOffset, const float expected)
+{
+	const DeviceInterface&	vk			= m_context.getDeviceInterface();
+	const VkDevice			device		= m_context.getDevice();
+
+	invalidateAlloc(vk, device, *bufAlloc);
+
+	const deUint32			numPoints	= bufBytes / static_cast<deUint32>(sizeof(float));
+	const deUint8*			tfDataRaw	= reinterpret_cast<const deUint8*>(bufAlloc->getHostPtr());
+	const float*			tfData		= reinterpret_cast<const float*>(&tfDataRaw[bufOffset]);
+
+	for (deUint32 i = 0; i < numPoints; ++i)
+		if (tfData[i] != expected)
+			TCU_FAIL(std::string("Failed at item ") + de::toString(i) + " received:" + de::toString(tfData[i]) + " expected:" + de::toString(expected));
+}
+
+tcu::TestStatus TransformFeedbackMultiQueryTestInstance::iterate (void)
+{
+	const DeviceInterface&						vk							= m_context.getDeviceInterface();
+	const VkDevice								device						= m_context.getDevice();
+	const deUint32								queueFamilyIndex			= m_context.getUniversalQueueFamilyIndex();
+	const std::vector<deUint32>					queueFamilyIndices			= { queueFamilyIndex };
+	const VkQueue								queue						= m_context.getUniversalQueue();
+	Allocator&									allocator					= m_context.getDefaultAllocator();
+
+	const Unique<VkRenderPass>					renderPass					(makeRenderPass							(vk, device, VK_FORMAT_UNDEFINED));
+
+	const Unique<VkShaderModule>				vertModule					(createShaderModule						(vk, device, m_context.getBinaryCollection().get("vert"), 0u));
+	const Unique<VkShaderModule>				geomModule					(createShaderModule						(vk, device, m_context.getBinaryCollection().get("geom"), 0u));
+
+	const Unique<VkFramebuffer>					framebuffer					(makeFramebuffer						(vk, device, *renderPass, 0u, DE_NULL, m_imageExtent2D.width, m_imageExtent2D.height));
+	const Unique<VkPipelineLayout>				pipelineLayout				(TransformFeedback::makePipelineLayout	(vk, device));
+	const Unique<VkPipeline>					pipeline					(makeGraphicsPipeline					(vk, device, *pipelineLayout, *renderPass, *vertModule, DE_NULL, DE_NULL, *geomModule, DE_NULL, m_imageExtent2D, 0u));
+	const Unique<VkCommandPool>					cmdPool						(createCommandPool						(vk, device, VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT, queueFamilyIndex));
+	const Unique<VkCommandBuffer>				cmdBuffer					(allocateCommandBuffer					(vk, device, *cmdPool, VK_COMMAND_BUFFER_LEVEL_PRIMARY));
+
+	const VkBufferCreateInfo					tfBufCreateInfo				= makeBufferCreateInfo(m_parameters.bufferSize, VK_BUFFER_USAGE_TRANSFER_SRC_BIT | VK_BUFFER_USAGE_TRANSFORM_FEEDBACK_BUFFER_BIT_EXT);
+	const Move<VkBuffer>						tfBuf						= createBuffer(vk, device, &tfBufCreateInfo);
+	const std::vector<VkBuffer>					tfBufArray					= std::vector<VkBuffer>(m_parameters.partCount, *tfBuf);
+	const MovePtr<Allocation>					tfBufAllocation				= allocator.allocate(getBufferMemoryRequirements(vk, device, *tfBuf), MemoryRequirement::HostVisible);
+	const VkMemoryBarrier						tfMemoryBarrier				= makeMemoryBarrier(VK_ACCESS_TRANSFORM_FEEDBACK_WRITE_BIT_EXT, VK_ACCESS_HOST_READ_BIT);
+	const std::vector<VkDeviceSize>				tfBufBindingSizes			= generateSizesList(m_parameters.bufferSize, m_parameters.partCount);
+	const std::vector<VkDeviceSize>				tfBufBindingOffsets			= generateOffsetsList(tfBufBindingSizes);
+	const std::vector<float>					tfBufExpectedValues			= { 0.5f, 0.5f + float(m_parameters.streamId) };
+	const deUint32								maxBufferSizeBytes			= static_cast<deUint32>(*std::max_element(tfBufBindingSizes.begin(), tfBufBindingSizes.end()));
+	const deUint32								bytesPerVertex				= static_cast<deUint32>(4 * sizeof(float));
+	const deUint32								numVerticesInBuffer			= maxBufferSizeBytes / bytesPerVertex;
+	const deUint32								numDrawVertices				= numVerticesInBuffer / 2;
+
+	const deUint32								queryIndex					= 0u;
+	const deUint32								queryCountersNumber			= 2u;
+	const deUint32								queryStride					= sizeof(TransformFeedbackQuery);
+	const deUint32								queryDataSize				= queryCountersNumber * queryStride;
+	const VkQueryPoolCreateInfo					queryPoolCreateInfo			= makeQueryPoolCreateInfo(queryCountersNumber);
+	const Unique<VkQueryPool>					queryPool					(createQueryPool(vk, device, &queryPoolCreateInfo));
+	const deUint32								queryInvalidCounterValue	= 999999u;
+	std::vector<TransformFeedbackQuery>			queryResultData				(queryCountersNumber, TransformFeedbackQuery{ queryInvalidCounterValue, queryInvalidCounterValue });
+	const std::vector<TransformFeedbackQuery>	queryExpectedData			({ TransformFeedbackQuery{ numVerticesInBuffer, 3 * numDrawVertices }, TransformFeedbackQuery{ numDrawVertices, numDrawVertices } });
+
+	const VkBufferCreateInfo					queryBufferCreateInfo		= makeBufferCreateInfo(queryDataSize, VK_BUFFER_USAGE_TRANSFER_DST_BIT, queueFamilyIndices);
+	const Move<VkBuffer>						queryPoolResultsBuffer		= createBuffer(vk, device, &queryBufferCreateInfo);
+	const MovePtr<Allocation>					queryPoolResultsBufferAlloc	= allocator.allocate(getBufferMemoryRequirements(vk, device, *queryPoolResultsBuffer), MemoryRequirement::HostVisible);
+
+	DE_ASSERT(queryCountersNumber == queryExpectedData.size());
+
+	VK_CHECK(vk.bindBufferMemory(device, *queryPoolResultsBuffer, queryPoolResultsBufferAlloc->getMemory(), queryPoolResultsBufferAlloc->getOffset()));
+
+	VK_CHECK(vk.bindBufferMemory(device, *tfBuf, tfBufAllocation->getMemory(), tfBufAllocation->getOffset()));
+
+	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);
+
+			vk.cmdBindTransformFeedbackBuffersEXT(*cmdBuffer, 0u, m_parameters.partCount, &tfBufArray[0], &tfBufBindingOffsets[0], &tfBufBindingSizes[0]);
+
+			vk.cmdBeginQueryIndexedEXT(*cmdBuffer, *queryPool, queryIndex + 0, 0u, 0u);
+			vk.cmdBeginQueryIndexedEXT(*cmdBuffer, *queryPool, queryIndex + 1, 0u, m_parameters.streamId);
+			{
+				vk.cmdBeginTransformFeedbackEXT(*cmdBuffer, 0, 0, DE_NULL, DE_NULL);
+				{
+					vk.cmdDraw(*cmdBuffer, numDrawVertices, 1u, 0u, 0u);
+				}
+				vk.cmdEndTransformFeedbackEXT(*cmdBuffer, 0, 0, DE_NULL, DE_NULL);
+			}
+			vk.cmdEndQueryIndexedEXT(*cmdBuffer, *queryPool, queryIndex + 1, m_parameters.streamId);
+			vk.cmdEndQueryIndexedEXT(*cmdBuffer, *queryPool, queryIndex + 0, 0);
+		}
+		endRenderPass(vk, *cmdBuffer);
+
+		vk.cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT, VK_PIPELINE_STAGE_HOST_BIT, 0u, 1u, &tfMemoryBarrier, 0u, DE_NULL, 0u, DE_NULL);
+	}
+	endCommandBuffer(vk, *cmdBuffer);
+	submitCommandsAndWait(vk, device, queue, *cmdBuffer);
+
+	vk.getQueryPoolResults(device, *queryPool, queryIndex, queryCountersNumber, queryDataSize, queryResultData.data(), queryStride, (vk::VK_QUERY_RESULT_WAIT_BIT));
+
+	DE_ASSERT(queryResultData.size() == queryCountersNumber && queryExpectedData.size() == queryCountersNumber);
+	DE_ASSERT(queryCountersNumber > 0);
+
+	for (size_t counterNdx = 0; counterNdx < queryCountersNumber; ++counterNdx)
+	{
+		const TransformFeedbackQuery&	result		= queryResultData[counterNdx];
+		const TransformFeedbackQuery&	expected	= queryExpectedData[counterNdx];
+
+		DE_ASSERT(expected.written != queryInvalidCounterValue);
+		DE_ASSERT(expected.attempts != queryInvalidCounterValue);
+
+		if (result.written == queryInvalidCounterValue || result.attempts == queryInvalidCounterValue)
+			return tcu::TestStatus::fail("Query counters read failed");
+
+		if (result.written != expected.written)
+		{
+			const std::string	comment	= "At counter " + de::toString(counterNdx) + " vertices written " + de::toString(result.written) + ", while expected " + de::toString(expected.written);
+
+			return tcu::TestStatus::fail(comment.c_str());
+		}
+
+
+		if (result.attempts != expected.attempts)
+		{
+			const std::string	comment = "At counter " + de::toString(counterNdx) + " attempts committed " + de::toString(result.attempts) + ", while expected " + de::toString(expected.attempts);
+
+			return tcu::TestStatus::fail(comment.c_str());
+		}
+
+		verifyTransformFeedbackBuffer(tfBufAllocation, bytesPerVertex * expected.written, static_cast<deUint32>(tfBufBindingOffsets[counterNdx]), tfBufExpectedValues[counterNdx]);
+	}
+
+	return tcu::TestStatus::pass("Pass");
+}
+
+
 class TransformFeedbackTestCase : public vkt::TestCase
 {
 public:
@@ -1960,6 +2171,9 @@
 	    m_parameters.testType == TEST_TYPE_QUERY_RESET)
 		return new TransformFeedbackQueryTestInstance(context, m_parameters);
 
+	if (m_parameters.testType == TEST_TYPE_MULTIQUERY)
+		return new TransformFeedbackMultiQueryTestInstance(context, m_parameters);
+
 	TCU_THROW(InternalError, "Specified test type not found");
 }
 
@@ -2024,7 +2238,6 @@
 				<< "} uInput;\n"
 				<< "void main(void)\n"
 				<< "{\n"
-				<< "    //idx_out = uInput.start + gl_VertexIndex;\n"				// TODO
 				<< "}\n";
 			programCollection.glslSources.add("vert") << glu::VertexSource(src.str());
 		}
@@ -2524,6 +2737,67 @@
 		return;
 	}
 
+	if (m_parameters.testType == TEST_TYPE_MULTIQUERY)
+	{
+		// vertex shader
+		{
+			std::ostringstream src;
+			src << glu::getGLSLVersionDeclaration(glu::GLSL_VERSION_450) << "\n"
+				<< "\n"
+				<< "layout(location = 0) out ivec4 out0;\n"
+				<< "\n"
+				<< "void main(void)\n"
+				<< "{\n"
+				<< "    out0 = ivec4(gl_VertexIndex);\n"
+				<< "}\n";
+
+			programCollection.glslSources.add("vert") << glu::VertexSource(src.str());
+		}
+
+		// geometry shader
+		{
+			const deUint32		s	= m_parameters.streamId;
+			std::ostringstream	src;
+
+			DE_ASSERT(s != 0);
+
+			src << glu::getGLSLVersionDeclaration(glu::GLSL_VERSION_450) << "\n"
+				<< "\n"
+				<< "layout(points) in;\n"
+				<< "\n"
+				<< "layout(points, max_vertices = 4) out;\n"
+				<< "\n"
+				<< "layout(stream = " << 0 << ", xfb_buffer = 0, xfb_offset = 0, xfb_stride = 16, location = 0) out vec4 out0;\n"
+				<< "layout(stream = " << s << ", xfb_buffer = 1, xfb_offset = 0, xfb_stride = 16, location = 1) out vec4 out1;\n"
+				<< "\n"
+				<< "void main(void)\n"
+				<< "{\n"
+				<< "    const int   n0 = 3;\n"
+				<< "    const int   n1 = 1;\n"
+				<< "    const float c0 = 0.5f;\n"
+				<< "    const float c1 = 0.5f + float(" << s << ");\n"
+				<< "\n"
+				<< "    for (int j = 0; j < n0; j++)\n"
+				<< "    {\n"
+				<< "        out0 = vec4(c0);\n"
+				<< "        EmitStreamVertex(0);\n"
+				<< "        EndStreamPrimitive(0);\n"
+				<< "    }\n"
+				<< "\n"
+				<< "    for (int j = 0; j < n1; j++)\n"
+				<< "    {\n"
+				<< "        out1 = vec4(c1);\n"
+				<< "        EmitStreamVertex(" << s << ");\n"
+				<< "        EndStreamPrimitive(" << s << ");\n"
+				<< "    }\n"
+				<< "}\n";
+
+			programCollection.glslSources.add("geom") << glu::GeometrySource(src.str());
+		}
+
+		return;
+	}
+
 	DE_ASSERT(0 && "Unknown test");
 }
 
@@ -2724,6 +2998,21 @@
 			group->addChild(new TransformFeedbackTestCase(group->getTestContext(), (testName + "_" + de::toString(streamId)).c_str(), "Simultaneous multiple streams usage test", parameters));
 		}
 	}
+
+	{
+		const TestType		testType	= TEST_TYPE_MULTIQUERY;
+		const std::string	testName	= "multiquery";
+
+		for (deUint32 bufferCountsNdx = 0; bufferCountsNdx < DE_LENGTH_OF_ARRAY(usedStreamId); ++bufferCountsNdx)
+		{
+			const deUint32			streamId			= usedStreamId[bufferCountsNdx];
+			const deUint32			streamsUsed			= 2u;
+			const deUint32			maxBytesPerVertex	= 256u;
+			const TestParameters	parameters			= { testType, maxBytesPerVertex * streamsUsed, streamsUsed, streamId, 0u, 0u, STREAM_ID_0_NORMAL, false, false };
+
+			group->addChild(new TransformFeedbackTestCase(group->getTestContext(), (testName + "_" + de::toString(streamId)).c_str(), "Simultaneous multiple queries usage test", parameters));
+		}
+	}
 }
 
 void createTransformFeedbackAndStreamsSimpleTests (tcu::TestCaseGroup* group)
diff --git a/external/vulkancts/modules/vulkan/util/CMakeLists.txt b/external/vulkancts/modules/vulkan/util/CMakeLists.txt
index 1c288d9..64e6bcc 100644
--- a/external/vulkancts/modules/vulkan/util/CMakeLists.txt
+++ b/external/vulkancts/modules/vulkan/util/CMakeLists.txt
@@ -7,6 +7,7 @@
 	vktDrawUtil.hpp
 	vktExternalMemoryUtil.cpp
 	vktExternalMemoryUtil.hpp
+	vktConstexprVectorUtil.hpp
 )
 
 set(DEQP_VK_UTIL_LIBS
diff --git a/external/vulkancts/modules/vulkan/util/vktConstexprVectorUtil.hpp b/external/vulkancts/modules/vulkan/util/vktConstexprVectorUtil.hpp
new file mode 100644
index 0000000..792d211
--- /dev/null
+++ b/external/vulkancts/modules/vulkan/util/vktConstexprVectorUtil.hpp
@@ -0,0 +1,87 @@
+#ifndef _VKTCONSTEXPRVECTORUTIL_HPP
+#define _VKTCONSTEXPRVECTORUTIL_HPP
+/*------------------------------------------------------------------------
+ * Vulkan CTS Framework
+ * ------------------------
+ *
+ * Copyright (c) 2020 The Khronos Group Inc.
+ * Copyright (c) 2020 Advanced Micro Devices, Inc.
+ *
+ * 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 Compile time friendly dynamic sized array with maximum capacity
+ */
+/*--------------------------------------------------------------------*/
+
+#include <cstddef>
+#include <array>
+
+namespace vkt
+{
+/*--------------------------------------------------------------------*//*!
+ * \brief Constexpr compatable vector with checked maximum capacity
+ *
+ * \note Unlike std::array, size() and max_size() are different values
+ *       This makes behaviour more similar to that of std::vector.
+ *//*--------------------------------------------------------------------*/
+template<typename _t, size_t CAPACITY>
+class ConstexprVector
+{
+public:
+	using value_type = _t;
+	using size_type = ::std::size_t;
+	using difference_type = ::std::ptrdiff_t;
+	using const_reference = const value_type&;
+	using const_pointer = const value_type*;
+	using const_iterator = const value_type*;
+
+	inline constexpr ConstexprVector() noexcept : values{}, count{0} {};
+
+	/*--------------------------------------------------------------------*//*!
+	 * MSVC v140 chokes on this if it is a raw variadic template list.
+	 * By providing a single argument lead for type deduction it seems to fix
+	 * things. Marking constructor as explicit since this effectively becomes
+	 * a single argument constructor.
+	 *//*--------------------------------------------------------------------*/
+	template<typename _arg_t, typename... _args_t>
+	inline constexpr explicit ConstexprVector(const _arg_t& arg1, const _args_t&... args) noexcept :
+		values{arg1, args...},
+		count{sizeof...(_args_t) + 1}
+	{
+		static_assert((sizeof...(_args_t) + 1) <= CAPACITY, "Not enough capacity to store values");
+	}
+
+	inline constexpr const_reference at(size_type pos) const noexcept { return values[pos]; }
+	inline constexpr const_reference operator[](size_type pos) const noexcept { return values[pos]; }
+	inline constexpr const_reference front() const noexcept { return values[0]; }
+	inline constexpr const_reference back() const noexcept { return values[count - 1];	}
+	inline constexpr const_pointer data() const noexcept { return values; }
+	inline constexpr const_iterator begin() const noexcept { return &values[0]; }
+	inline constexpr const_iterator cbegin() const noexcept { return &values[0]; }
+	inline constexpr const_iterator end() const noexcept { return &values[count]; }
+	inline constexpr const_iterator cend() const noexcept { return &values[count]; }
+	inline constexpr bool empty() const noexcept { return count == 0; }
+	inline constexpr size_type size() const noexcept { return count; }
+	inline constexpr size_type max_size() const noexcept { return CAPACITY; }
+
+private:
+	value_type values[CAPACITY];
+	size_type count;
+};
+
+} // namespace vkt
+
+#endif // _VKTCONSTEXPRVECTORUTIL_HPP
diff --git a/external/vulkancts/modules/vulkan/vktTestCase.cpp b/external/vulkancts/modules/vulkan/vktTestCase.cpp
index 10f3a27..f8a426c 100644
--- a/external/vulkancts/modules/vulkan/vktTestCase.cpp
+++ b/external/vulkancts/modules/vulkan/vktTestCase.cpp
@@ -66,7 +66,9 @@
 		"VK_EXT_",
 		"VK_KHX_",
 		"VK_NV_cooperative_matrix",
+		"VK_EXT_extended_dynamic_state2",
 		"VK_NV_ray_tracing",
+        "VK_NV_inherited_viewport_scissor",
 		"VK_AMD_mixed_attachment_samples",
 		"VK_AMD_shader_fragment_mask",
 		"VK_AMD_buffer_marker",
@@ -367,7 +369,7 @@
 
 deUint32 sanitizeApiVersion(deUint32 v)
 {
-	return VK_MAKE_VERSION( VK_VERSION_MAJOR(v), VK_VERSION_MINOR(v), 0 );
+	return VK_MAKE_VERSION(VK_API_VERSION_MAJOR(v), VK_API_VERSION_MINOR(v), 0 );
 }
 
 de::MovePtr<vk::DebugReportRecorder> createDebugReportRecorder (const vk::PlatformInterface& vkp, const vk::InstanceInterface& vki, vk::VkInstance instance, bool printValidationErrors)
diff --git a/external/vulkancts/modules/vulkan/vktTestPackage.cpp b/external/vulkancts/modules/vulkan/vktTestPackage.cpp
index ef2401b..f937b93 100644
--- a/external/vulkancts/modules/vulkan/vktTestPackage.cpp
+++ b/external/vulkancts/modules/vulkan/vktTestPackage.cpp
@@ -194,6 +194,8 @@
 	virtual tcu::TestNode::IterateResult		iterate				(tcu::TestCase* testCase);
 
 private:
+	void										logUnusedShaders	(tcu::TestCase* testCase);
+
 	bool										spirvVersionSupported(vk::SpirvVersion);
 	vk::BinaryCollection						m_progCollection;
 	vk::BinaryRegistryReader					m_prebuiltBinRegistry;
@@ -340,7 +342,7 @@
 	m_context.resultSetOnValidation(false);
 }
 
-void TestCaseExecutor::deinit (tcu::TestCase*)
+void TestCaseExecutor::deinit (tcu::TestCase* testCase)
 {
 	delete m_instance;
 	m_instance = DE_NULL;
@@ -350,6 +352,46 @@
 	// Collect and report any debug messages
 	if (m_context.hasDebugReportRecorder())
 		collectAndReportDebugMessages(m_context.getDebugReportRecorder(), m_context);
+
+	if (testCase != DE_NULL)
+		logUnusedShaders(testCase);
+}
+
+void TestCaseExecutor::logUnusedShaders (tcu::TestCase* testCase)
+{
+	const qpTestResult	testResult	= testCase->getTestContext().getTestResult();
+
+	if (testResult == QP_TEST_RESULT_PASS || testResult == QP_TEST_RESULT_QUALITY_WARNING || testResult == QP_TEST_RESULT_COMPATIBILITY_WARNING)
+	{
+		bool	unusedShaders	= false;
+
+		for (vk::BinaryCollection::Iterator it = m_progCollection.begin(); it != m_progCollection.end(); ++it)
+		{
+			if (!it.getProgram().getUsed())
+			{
+				unusedShaders = true;
+
+				break;
+			}
+		}
+
+		if (unusedShaders)
+		{
+			std::string message;
+
+			for (vk::BinaryCollection::Iterator it = m_progCollection.begin(); it != m_progCollection.end(); ++it)
+			{
+				if (!it.getProgram().getUsed())
+					message += it.getName() + ",";
+			}
+
+			message.resize(message.size() - 1);
+
+			message = std::string("Unused shaders: ") + message;
+
+			m_context.getTestContext().getLog() << TestLog::Message << message << TestLog::EndMessage;
+		}
+	}
 }
 
 tcu::TestNode::IterateResult TestCaseExecutor::iterate (tcu::TestCase*)
diff --git a/external/vulkancts/modules/vulkan/wsi/vktWsiColorSpaceTests.cpp b/external/vulkancts/modules/vulkan/wsi/vktWsiColorSpaceTests.cpp
index 6bd8962..6339d2a 100644
--- a/external/vulkancts/modules/vulkan/wsi/vktWsiColorSpaceTests.cpp
+++ b/external/vulkancts/modules/vulkan/wsi/vktWsiColorSpaceTests.cpp
@@ -43,6 +43,8 @@
 #include "vkAllocationCallbackUtil.hpp"
 #include "vkCmdUtil.hpp"
 #include "vkObjUtil.hpp"
+#include "tcuSurface.hpp"
+#include "vkImageUtil.hpp"
 
 #include "tcuTestLog.hpp"
 #include "tcuFormatUtil.hpp"
@@ -326,12 +328,31 @@
 													  VkSurfaceKHR				surface,
 													  VkSurfaceFormatKHR		surfaceFormat,
 													  const tcu::UVec2&			desiredSize,
-													  deUint32					desiredImageCount)
+													  deUint32					desiredImageCount,
+													  VkColorSpaceKHR			desiredColorspace = VK_COLOR_SPACE_MAX_ENUM_KHR)
 {
+	bool setColorspaceManually = desiredColorspace != VK_COLOR_SPACE_MAX_ENUM_KHR;
+
 	const VkSurfaceCapabilitiesKHR		capabilities		= getPhysicalDeviceSurfaceCapabilities(vki,
 																								   physicalDevice,
 																								   surface);
 	const PlatformProperties&			platformProperties	= getPlatformProperties(wsiType);
+	const VkSurfaceCapabilitiesKHR		surfaceCapabilities	= getPhysicalDeviceSurfaceCapabilities(vki,physicalDevice, surface);
+
+	// Check that the device has at least one supported alpha compositing mode
+	// and pick the first supported mode to be used.
+	vk::VkCompositeAlphaFlagsKHR		alpha				= 0;
+	for (deUint32 i = 1u; i <= surfaceCapabilities.supportedCompositeAlpha; i <<= 1u)
+	{
+		if ((i & surfaceCapabilities.supportedCompositeAlpha) != 0)
+		{
+			alpha = i;
+			break;
+		}
+	}
+	if (alpha == 0)
+		TCU_THROW(NotSupportedError, "No supported composite alphas available.");
+
 	const VkSurfaceTransformFlagBitsKHR transform			= (capabilities.supportedTransforms & VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR) ? VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR : capabilities.currentTransform;
 	const VkSwapchainCreateInfoKHR		parameters			=
 	{
@@ -341,16 +362,15 @@
 		surface,
 		de::clamp(desiredImageCount, capabilities.minImageCount, capabilities.maxImageCount > 0 ? capabilities.maxImageCount : capabilities.minImageCount + desiredImageCount),
 		surfaceFormat.format,
-		surfaceFormat.colorSpace,
-		(platformProperties.swapchainExtent == PlatformProperties::SWAPCHAIN_EXTENT_MUST_MATCH_WINDOW_SIZE
-			? capabilities.currentExtent : vk::makeExtent2D(desiredSize.x(), desiredSize.y())),
+		(setColorspaceManually ? desiredColorspace : surfaceFormat.colorSpace),
+		(platformProperties.swapchainExtent == PlatformProperties::SWAPCHAIN_EXTENT_MUST_MATCH_WINDOW_SIZE ? capabilities.currentExtent : vk::makeExtent2D(desiredSize.x(), desiredSize.y())),
 		1u,									// imageArrayLayers
-		VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT,
+		VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | VK_IMAGE_USAGE_TRANSFER_SRC_BIT,
 		VK_SHARING_MODE_EXCLUSIVE,
 		0u,
 		(const deUint32*)DE_NULL,
 		transform,
-		VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR,
+		static_cast<VkCompositeAlphaFlagBitsKHR>(alpha),
 		VK_PRESENT_MODE_FIFO_KHR,
 		VK_FALSE,							// clipped
 		(VkSwapchainKHR)0					// oldSwapchain
@@ -401,6 +421,46 @@
 	return buffers;
 }
 
+tcu::Vec4 getPixel (const DeviceInterface&		vkd,
+					const VkDevice				device,
+					const VkQueue				queue,
+					const VkCommandPool&		commandPool,
+					Allocator&					allocator,
+					const tcu::UVec2			size,
+					const tcu::TextureFormat	textureFormat,
+					const VkImage*				image)
+{
+	Move<VkCommandBuffer>		commandBuffer;
+	Move<VkBuffer>				resultBuffer;
+	de::MovePtr<Allocation>		resultBufferMemory;
+
+	commandBuffer = allocateCommandBuffer(vkd, device, commandPool, VK_COMMAND_BUFFER_LEVEL_PRIMARY);
+
+	// Result Buffer
+	{
+		const VkDeviceSize			bufferSize = textureFormat.getPixelSize() * size.x() * size.y();
+		const VkBufferCreateInfo	createInfo = makeBufferCreateInfo(bufferSize, VK_BUFFER_USAGE_TRANSFER_DST_BIT);
+
+		resultBuffer				= createBuffer(vkd, device, &createInfo);
+		resultBufferMemory			= allocator.allocate(getBufferMemoryRequirements(vkd, device, *resultBuffer), MemoryRequirement::HostVisible);
+
+		VK_CHECK(vkd.bindBufferMemory(device, *resultBuffer, resultBufferMemory->getMemory(), resultBufferMemory->getOffset()));
+	}
+
+	beginCommandBuffer(vkd, *commandBuffer, 0u);
+	{
+		copyImageToBuffer(vkd, *commandBuffer, *image, *resultBuffer, tcu::IVec2(size.x(), size.y()), VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, VK_IMAGE_LAYOUT_PRESENT_SRC_KHR);
+	}
+	endCommandBuffer(vkd, *commandBuffer);
+	submitCommandsAndWait(vkd, device, queue, commandBuffer.get());
+
+	tcu::ConstPixelBufferAccess	resultAccess(textureFormat,
+											 tcu::IVec3(size.x(), size.y(), 1),
+											 resultBufferMemory->getHostPtr());
+
+	return (resultAccess.getPixel(128, 128));
+}
+
 tcu::TestStatus basicExtensionTest (Context& context, Type wsiType)
 {
 	const tcu::UVec2				desiredSize		(256, 256);
@@ -432,6 +492,177 @@
 	return tcu::TestStatus::pass("Extension tests succeeded");
 }
 
+struct TestParams
+{
+	Type		wsiType;
+	VkFormat	format;
+};
+
+// Create swapchain with multiple images on different colorspaces and compare pixels on those images.
+tcu::TestStatus colorspaceCompareTest (Context& context, TestParams params)
+{
+	if (!context.isInstanceFunctionalitySupported("VK_EXT_swapchain_colorspace"))
+		TCU_THROW(NotSupportedError, "Extension VK_EXT_swapchain_colorspace not supported");
+
+	const tcu::UVec2					desiredSize				(256, 256);
+	const InstanceHelper				instHelper				(context, params.wsiType);
+	const NativeObjects					native					(context, instHelper.supportedExtensions, params.wsiType, tcu::just(desiredSize));
+	const Unique<VkSurfaceKHR>			surface					(createSurface(instHelper.vki, instHelper.instance, params.wsiType, *native.display, *native.window));
+	const DeviceHelper					devHelper				(context, instHelper.vki, instHelper.instance, *surface);
+
+	const vector<VkSurfaceFormatKHR>	queriedFormats		=	getPhysicalDeviceSurfaceFormats(instHelper.vki,
+																								devHelper.physicalDevice,
+																								*surface);
+
+	vector<vk::VkColorSpaceKHR> supportedColorSpaces;
+	for (const auto& queriedFormat : queriedFormats)
+	{
+		if (queriedFormat.format == params.format)
+		{
+			supportedColorSpaces.push_back(queriedFormat.colorSpace);
+		}
+	}
+
+	// Not supported if there's no color spaces for the format.
+	if(supportedColorSpaces.size() < 2)
+		TCU_THROW(NotSupportedError, "Format not supported");
+
+	// Surface format is used to create the swapchain.
+	VkSurfaceFormatKHR surfaceFormat =
+	{
+		params.format,				// format
+		supportedColorSpaces.at(0)	// colorSpace
+	};
+
+	tcu::Vec4						 referenceColorspacePixel;
+	const tcu::TextureFormat		 textureFormat				= vk::mapVkFormat(surfaceFormat.format);
+	const DeviceInterface&			 vkd						= devHelper.vkd;
+	const VkDevice					 device						= *devHelper.device;
+	SimpleAllocator					 allocator					(vkd,
+																 device,
+																 getPhysicalDeviceMemoryProperties(instHelper.vki,
+																 context.getPhysicalDevice()));
+
+	for (size_t colorspaceNdx = 0; colorspaceNdx < supportedColorSpaces.size(); ++colorspaceNdx)
+	{
+		const VkSwapchainCreateInfoKHR swapchainInfo = getBasicSwapchainParameters(params.wsiType,
+																				   instHelper.vki,
+																				   devHelper.physicalDevice,
+																				   *surface,
+																				   surfaceFormat,
+																				   desiredSize,
+																				   2,
+																				   supportedColorSpaces[colorspaceNdx]);
+		const Unique<VkSwapchainKHR>		swapchain			(createSwapchainKHR(vkd, device, &swapchainInfo));
+		const vector<VkImage>				swapchainImages		= getSwapchainImages(vkd, device, *swapchain);
+		const vector<VkExtensionProperties>	deviceExtensions	(enumerateDeviceExtensionProperties(instHelper.vki, devHelper.physicalDevice, DE_NULL));
+
+		const WsiTriangleRenderer renderer(vkd,
+										   device,
+										   allocator,
+										   context.getBinaryCollection(),
+										   true,
+										   swapchainImages,
+										   swapchainImages,
+										   swapchainInfo.imageFormat,
+										   tcu::UVec2(swapchainInfo.imageExtent.width, swapchainInfo.imageExtent.height));
+
+		const Move<VkCommandPool>	commandPool					(createCommandPool(vkd,
+																				   device,
+																				   VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT,
+																				   devHelper.queueFamilyIndex));
+		const Move<VkSemaphore>		imageReadySemaphore			= createSemaphore(vkd, device);
+		const Move<VkSemaphore>		renderingCompleteSemaphore	= createSemaphore(vkd, device);
+		const Move<VkCommandBuffer>	commandBuffer				= allocateCommandBuffer(vkd,
+																						device,
+																						*commandPool,
+																						VK_COMMAND_BUFFER_LEVEL_PRIMARY);
+
+		try
+		{
+			deUint32 imageNdx = ~0u;
+
+			{
+				const VkResult acquireResult = vkd.acquireNextImageKHR(device,
+																	   *swapchain,
+																	   std::numeric_limits<deUint64>::max(),
+																	   imageReadySemaphore.get(),
+																	   DE_NULL,
+																	   &imageNdx);
+
+				if (acquireResult == VK_SUBOPTIMAL_KHR)
+				{
+					context.getTestContext().getLog() << TestLog::Message << "Got " << acquireResult
+													  << TestLog::EndMessage;
+				}
+				else
+				{
+					VK_CHECK(acquireResult);
+				}
+			}
+
+			TCU_CHECK((size_t) imageNdx < swapchainImages.size());
+
+			{
+				const VkPipelineStageFlags waitDstStage = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT;
+				const VkSubmitInfo submitInfo =
+				{
+					VK_STRUCTURE_TYPE_SUBMIT_INFO,
+					DE_NULL,
+					0u,
+					&imageReadySemaphore.get(),
+					&waitDstStage,
+					1u,
+					&commandBuffer.get(),
+					1u,
+					&renderingCompleteSemaphore.get()
+				};
+				const VkPresentInfoKHR presentInfo =
+				{
+					VK_STRUCTURE_TYPE_PRESENT_INFO_KHR,
+					DE_NULL,
+					1u,
+					&renderingCompleteSemaphore.get(),
+					1u,
+					&swapchain.get(),
+					&imageNdx,
+					(VkResult *) DE_NULL
+				};
+
+				renderer.recordFrame(commandBuffer.get(), imageNdx, 0);
+				VK_CHECK(vkd.queueSubmit(devHelper.queue, 1u, &submitInfo, DE_NULL));
+				VK_CHECK_WSI(vkd.queuePresentKHR(devHelper.queue, &presentInfo));
+			}
+
+			// Set reference pixelBufferAccess for comparison.
+			if (colorspaceNdx == 0)
+			{
+				referenceColorspacePixel = getPixel(vkd, device, devHelper.queue, commandPool.get(),
+													allocator, desiredSize, textureFormat,
+													&swapchainImages[imageNdx]);
+				continue;
+			}
+
+			// Compare pixels from images to make sure the colorspace makes no difference.
+			if (referenceColorspacePixel == getPixel(vkd, device, devHelper.queue, commandPool.get(),
+													 allocator, desiredSize, textureFormat,
+													 &swapchainImages[imageNdx]))
+				continue;
+			else
+				return tcu::TestStatus::fail("Colorspace comparison test failed");
+			VK_CHECK(vkd.deviceWaitIdle(device));
+		}
+		catch (...)
+		{
+			// Make sure device is idle before destroying resources
+			vkd.deviceWaitIdle(device);
+			throw;
+		}
+	}
+
+	return tcu::TestStatus::pass("Colorspace comparison test succeeded");
+}
+
 tcu::TestStatus surfaceFormatRenderTest (Context& context,
 										 Type wsiType,
 										 const InstanceHelper& instHelper,
@@ -457,7 +688,7 @@
 																 device,
 																 allocator,
 																 context.getBinaryCollection(),
-																 false,
+																 true,
 																 swapchainImages,
 																 swapchainImages,
 																 swapchainInfo.imageFormat,
@@ -619,11 +850,17 @@
 	return tcu::TestStatus::pass("Rendering tests succeeded");
 }
 
-void getBasicRenderPrograms (SourceCollections& dst, Type)
+// We need different versions of this function in order to invoke
+// different overloaded versions of addFunctionCaseWithPrograms.
+void getBasicRenderPrograms2 (SourceCollections& dst, TestParams)
 {
 	WsiTriangleRenderer::getPrograms(dst);
 }
 
+void getBasicRenderPrograms (SourceCollections& dst, Type)
+{
+	WsiTriangleRenderer::getPrograms(dst);
+}
 } // anonymous
 
 void createColorSpaceTests (tcu::TestCaseGroup* testGroup, vk::wsi::Type wsiType)
@@ -633,5 +870,30 @@
 	addFunctionCaseWithPrograms(testGroup, "hdr", "Basic Rendering Tests with HDR", getBasicRenderPrograms, surfaceFormatRenderWithHdrTests, wsiType);
 }
 
+void createColorspaceCompareTests (tcu::TestCaseGroup* testGroup, vk::wsi::Type wsiType)
+{
+	const VkFormat formatList[] = {
+									VK_FORMAT_B8G8R8A8_UNORM,
+									VK_FORMAT_R8G8B8A8_UNORM,
+									VK_FORMAT_R8G8B8A8_SRGB,
+									VK_FORMAT_R5G6B5_UNORM_PACK16,
+									VK_FORMAT_A2B10G10R10_UNORM_PACK32,
+									VK_FORMAT_R16G16B16A16_SFLOAT
+									};
+
+	// Create test for every format.
+	for (const VkFormat& format : formatList)
+	{
+		const char* const	enumName	= getFormatName(format);
+		const string		caseName	= de::toLower(string(enumName).substr(10));
+		const TestParams params =
+		{
+			wsiType,
+			format
+		};
+		addFunctionCaseWithPrograms(testGroup, caseName, "", getBasicRenderPrograms2, colorspaceCompareTest, params);
+	}
+}
+
 } // wsi
 } // vkt
diff --git a/external/vulkancts/modules/vulkan/wsi/vktWsiColorSpaceTests.hpp b/external/vulkancts/modules/vulkan/wsi/vktWsiColorSpaceTests.hpp
index 38d688a..86faef6 100644
--- a/external/vulkancts/modules/vulkan/wsi/vktWsiColorSpaceTests.hpp
+++ b/external/vulkancts/modules/vulkan/wsi/vktWsiColorSpaceTests.hpp
@@ -32,7 +32,8 @@
 namespace wsi
 {
 
-void	createColorSpaceTests	(tcu::TestCaseGroup* testGroup, vk::wsi::Type wsiType);
+void	createColorSpaceTests			(tcu::TestCaseGroup* testGroup, vk::wsi::Type wsiType);
+void	createColorspaceCompareTests	(tcu::TestCaseGroup* testGroup, vk::wsi::Type wsiType);
 
 } // wsi
 } // vkt
diff --git a/external/vulkancts/modules/vulkan/wsi/vktWsiDisplayControlTests.cpp b/external/vulkancts/modules/vulkan/wsi/vktWsiDisplayControlTests.cpp
index e95be04..9b0a0be 100644
--- a/external/vulkancts/modules/vulkan/wsi/vktWsiDisplayControlTests.cpp
+++ b/external/vulkancts/modules/vulkan/wsi/vktWsiDisplayControlTests.cpp
@@ -94,15 +94,15 @@
 	return 0;
 }
 
-Move<VkDevice> createDevice (const vk::Platform&		platform,
-							 const PlatformInterface&		vkp,
-							 const VkInstance				instance,
-							 const InstanceInterface&		vki,
-							 VkPhysicalDevice				physicalDevice,
-							 const Extensions&				supportedExtensions,
-							 const deUint32					queueFamilyIndex,
-							 bool							validationEnabled,
-							 const VkAllocationCallbacks*	pAllocator = DE_NULL)
+Move<VkDevice> createTestDevice (const vk::Platform&			platform,
+								 const PlatformInterface&		vkp,
+								 const VkInstance				instance,
+								 const InstanceInterface&		vki,
+								 VkPhysicalDevice				physicalDevice,
+								 const Extensions&				supportedExtensions,
+								 const deUint32					queueFamilyIndex,
+								 bool							validationEnabled,
+								 const VkAllocationCallbacks*	pAllocator = DE_NULL)
 {
 	const float queuePriorities[] = { 1.0f };
 	bool displayAvailable = true;
@@ -715,7 +715,7 @@
 
 	, m_queueFamilyIndex		(chooseQueueFamilyIndex(m_vki, m_physicalDevice, m_surface))
 	, m_deviceExtensions		(enumerateDeviceExtensionProperties(m_vki, m_physicalDevice, DE_NULL))
-	, m_device					(createDevice(context.getTestContext().getPlatform().getVulkanPlatform(), m_vkp, m_instance, m_vki, m_physicalDevice, m_deviceExtensions, m_queueFamilyIndex, context.getTestContext().getCommandLine().isValidationEnabled()))
+	, m_device					(createTestDevice(context.getTestContext().getPlatform().getVulkanPlatform(), m_vkp, m_instance, m_vki, m_physicalDevice, m_deviceExtensions, m_queueFamilyIndex, context.getTestContext().getCommandLine().isValidationEnabled()))
 	, m_vkd						(m_vkp, m_instance, *m_device)
 	, m_queue					(getDeviceQueue(m_vkd, *m_device, m_queueFamilyIndex, 0u))
 
diff --git a/external/vulkancts/modules/vulkan/wsi/vktWsiSwapchainTests.cpp b/external/vulkancts/modules/vulkan/wsi/vktWsiSwapchainTests.cpp
index 9f0db41..bbe49c9 100644
--- a/external/vulkancts/modules/vulkan/wsi/vktWsiSwapchainTests.cpp
+++ b/external/vulkancts/modules/vulkan/wsi/vktWsiSwapchainTests.cpp
@@ -948,6 +948,7 @@
 																			failingAllocator.getCallbacks()));
 		const DeviceHelper						devHelper	(context, instHelper.vki, instHelper.instance, *surface, vector<string>(), failingAllocator.getCallbacks());
 		const vector<VkSwapchainCreateInfoKHR>	allCases	(generateSwapchainParameterCases(params.wsiType, params.dimension, instHelper.vki, devHelper.physicalDevice, *surface));
+		const VkSurfaceCapabilitiesKHR			capabilities(getPhysicalDeviceSurfaceCapabilities(instHelper.vki, devHelper.physicalDevice, *surface));
 
 		if (maxCases < allCases.size())
 			log << TestLog::Message << "Note: Will only test first " << maxCases << " cases out of total of " << allCases.size() << " parameter combinations" << TestLog::EndMessage;
@@ -958,7 +959,11 @@
 
 			for (deUint32 numPassingAllocs = 0; numPassingAllocs <= maxAllocs; ++numPassingAllocs)
 			{
-				bool	gotOOM	= false;
+				bool						gotOOM		= false;
+				VkSwapchainCreateInfoKHR	curParams	= allCases[caseNdx];
+				curParams.surface				= *surface;
+				curParams.queueFamilyIndexCount	= 1u;
+				curParams.pQueueFamilyIndices	= &devHelper.queueFamilyIndex;
 
 				failingAllocator.reset(DeterministicFailAllocator::MODE_COUNT_AND_FAIL, numPassingAllocs);
 
@@ -966,19 +971,11 @@
 
 				try
 				{
-					VkSwapchainCreateInfoKHR	curParams	= allCases[caseNdx];
-
 					// With concurrent sharing mode, at least two queues are needed.
 					if (curParams.imageSharingMode == VK_SHARING_MODE_CONCURRENT)
 						continue;
 
-					curParams.surface				= *surface;
-					curParams.queueFamilyIndexCount	= 1u;
-					curParams.pQueueFamilyIndices	= &devHelper.queueFamilyIndex;
-
-					{
-						const Unique<VkSwapchainKHR>	swapchain	(createSwapchainKHR(devHelper.vkd, *devHelper.device, &curParams, failingAllocator.getCallbacks()));
-					}
+					const Unique<VkSwapchainKHR>	swapchain	(createSwapchainKHR(devHelper.vkd, *devHelper.device, &curParams, failingAllocator.getCallbacks()));
 				}
 				catch (const OutOfMemoryError& e)
 				{
@@ -996,7 +993,16 @@
 					break;
 				}
 				else if (numPassingAllocs == maxAllocs)
+				{
+					// The maxExtents case might not be able to create the requested surface due to insufficient
+					// memory, so in this case *only* we allow the OOM exception upto maxAllocs.
+					if (params.dimension == TEST_DIMENSION_IMAGE_EXTENT &&
+						capabilities.maxImageExtent.width == curParams.imageExtent.width &&
+						capabilities.maxImageExtent.height == curParams.imageExtent.height)
+						break;
+
 					results.addResult(QP_TEST_RESULT_QUALITY_WARNING, "Creating swapchain did not succeed, callback limit exceeded");
+				}
 			}
 
 			context.getTestContext().touchWatchdog();
diff --git a/external/vulkancts/modules/vulkan/wsi/vktWsiTests.cpp b/external/vulkancts/modules/vulkan/wsi/vktWsiTests.cpp
index 167dc3d..aaa0942 100644
--- a/external/vulkancts/modules/vulkan/wsi/vktWsiTests.cpp
+++ b/external/vulkancts/modules/vulkan/wsi/vktWsiTests.cpp
@@ -51,6 +51,7 @@
 	addTestGroup(testGroup, "display_timing",			"Display Timing Tests",						createDisplayTimingTests,			wsiType);
 	addTestGroup(testGroup, "shared_presentable_image",	"VK_KHR_shared_presentable_image tests",	createSharedPresentableImageTests,	wsiType);
 	addTestGroup(testGroup, "colorspace",				"ColorSpace tests",							createColorSpaceTests,				wsiType);
+	addTestGroup(testGroup, "colorspace_compare",		"ColorSpace compare tests",					createColorspaceCompareTests,		wsiType);
 	addTestGroup(testGroup, "full_screen_exclusive",	"VK_EXT_full_screen_exclusive tests",		createFullScreenExclusiveTests,		wsiType);
 }
 
diff --git a/external/vulkancts/modules/vulkan/ycbcr/vktYCbCrConversionTests.cpp b/external/vulkancts/modules/vulkan/ycbcr/vktYCbCrConversionTests.cpp
index f280af9..adc7d87 100644
--- a/external/vulkancts/modules/vulkan/ycbcr/vktYCbCrConversionTests.cpp
+++ b/external/vulkancts/modules/vulkan/ycbcr/vktYCbCrConversionTests.cpp
@@ -1204,7 +1204,11 @@
 		vk::VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM,
 		vk::VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16,
 		vk::VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16,
-		vk::VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM
+		vk::VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM,
+		vk::VK_FORMAT_G8_B8R8_2PLANE_444_UNORM_EXT,
+		vk::VK_FORMAT_G10X6_B10X6R10X6_2PLANE_444_UNORM_3PACK16_EXT,
+		vk::VK_FORMAT_G12X4_B12X4R12X4_2PLANE_444_UNORM_3PACK16_EXT,
+		vk::VK_FORMAT_G16_B16R16_2PLANE_444_UNORM_EXT,
 	};
 	const std::vector<vk::VkFormat> xChromaSubsampledFormats =
 	{
diff --git a/external/vulkancts/modules/vulkan/ycbcr/vktYCbCrCopyTests.cpp b/external/vulkancts/modules/vulkan/ycbcr/vktYCbCrCopyTests.cpp
index aba0dd8..6eca65a 100644
--- a/external/vulkancts/modules/vulkan/ycbcr/vktYCbCrCopyTests.cpp
+++ b/external/vulkancts/modules/vulkan/ycbcr/vktYCbCrCopyTests.cpp
@@ -424,6 +424,10 @@
 		case vk::VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM:
 		case vk::VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM:
 		case vk::VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM:
+		case vk::VK_FORMAT_G8_B8R8_2PLANE_444_UNORM_EXT:
+		case vk::VK_FORMAT_G10X6_B10X6R10X6_2PLANE_444_UNORM_3PACK16_EXT:
+		case vk::VK_FORMAT_G12X4_B12X4R12X4_2PLANE_444_UNORM_3PACK16_EXT:
+		case vk::VK_FORMAT_G16_B16R16_2PLANE_444_UNORM_EXT:
 			DE_FATAL("Plane formats not supported");
 			return ~0u;
 
@@ -642,7 +646,7 @@
 						vk::VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER,
 						DE_NULL,
 						vk::VK_ACCESS_TRANSFER_WRITE_BIT,
-						vk::VK_ACCESS_TRANSFER_WRITE_BIT,
+						vk::VK_ACCESS_TRANSFER_READ_BIT | vk::VK_ACCESS_TRANSFER_WRITE_BIT,
 						vk::VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
 						vk::VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
 						VK_QUEUE_FAMILY_IGNORED,
@@ -870,7 +874,11 @@
 		vk::VK_FORMAT_G16_B16R16_2PLANE_420_UNORM,
 		vk::VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM,
 		vk::VK_FORMAT_G16_B16R16_2PLANE_422_UNORM,
-		vk::VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM
+		vk::VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM,
+		vk::VK_FORMAT_G8_B8R8_2PLANE_444_UNORM_EXT,
+		vk::VK_FORMAT_G10X6_B10X6R10X6_2PLANE_444_UNORM_3PACK16_EXT,
+		vk::VK_FORMAT_G12X4_B12X4R12X4_2PLANE_444_UNORM_3PACK16_EXT,
+		vk::VK_FORMAT_G16_B16R16_2PLANE_444_UNORM_EXT,
 	};
 	const struct
 	{
diff --git a/external/vulkancts/modules/vulkan/ycbcr/vktYCbCrFilteringTests.cpp b/external/vulkancts/modules/vulkan/ycbcr/vktYCbCrFilteringTests.cpp
index e1155e3..6073e0d 100644
--- a/external/vulkancts/modules/vulkan/ycbcr/vktYCbCrFilteringTests.cpp
+++ b/external/vulkancts/modules/vulkan/ycbcr/vktYCbCrFilteringTests.cpp
@@ -63,8 +63,7 @@
 
 protected:
 
-	VkSamplerCreateInfo				getSamplerInfo				(VkFilter								minMagFilter,
-																 const VkSamplerYcbcrConversionInfo*	samplerConversionInfo = DE_NULL);
+	VkSamplerCreateInfo				getSamplerInfo				(const VkSamplerYcbcrConversionInfo*	samplerConversionInfo);
 	Move<VkDescriptorSetLayout>		createDescriptorSetLayout	(VkSampler sampler);
 	Move<VkDescriptorPool>			createDescriptorPool		(const deUint32 combinedSamplerDescriptorCount);
 	Move<VkDescriptorSet>			createDescriptorSet			(VkDescriptorPool		descPool,
@@ -107,15 +106,15 @@
 {
 }
 
-VkSamplerCreateInfo LinearFilteringTestInstance::getSamplerInfo(VkFilter minMagFilter, const VkSamplerYcbcrConversionInfo* samplerConversionInfo)
+VkSamplerCreateInfo LinearFilteringTestInstance::getSamplerInfo(const VkSamplerYcbcrConversionInfo* samplerConversionInfo)
 {
 	return
 	{
 		VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO,
 		samplerConversionInfo,
 		0u,
-		minMagFilter,								// magFilter
-		minMagFilter,								// minFilter
+		VK_FILTER_LINEAR,							// magFilter
+		VK_FILTER_LINEAR,							// minFilter
 		VK_SAMPLER_MIPMAP_MODE_NEAREST,				// mipmapMode
 		VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE,		// addressModeU
 		VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE,		// addressModeV
@@ -294,7 +293,7 @@
 	auto									physicalDevice		(m_context.getPhysicalDevice());
 	const Unique<VkSamplerYcbcrConversion>	conversion			(createYCbCrConversion());
 	const VkSamplerYcbcrConversionInfo		samplerConvInfo		{ VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO, DE_NULL, *conversion };
-	const VkSamplerCreateInfo				samplerCreateInfo	(getSamplerInfo(VK_FILTER_LINEAR, &samplerConvInfo));
+	const VkSamplerCreateInfo				samplerCreateInfo	(getSamplerInfo(&samplerConvInfo));
 	const Unique<VkSampler>					sampler				(createSampler(m_vkd, m_device, &samplerCreateInfo));
 
 	deUint32								combinedSamplerDescriptorCount = 1;
@@ -607,7 +606,8 @@
 	if ((featureFlags & VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT) == 0)
 		TCU_THROW(NotSupportedError, "Linear filtering not supported for format");
 
-	if ((featureFlags & VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT) == 0)
+	if (m_chromaFiltering != VK_FILTER_LINEAR &&
+		(featureFlags & VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT) == 0)
 		TCU_THROW(NotSupportedError, "Different chroma, min, and mag filters not supported for format");
 }
 
diff --git a/external/vulkancts/modules/vulkan/ycbcr/vktYCbCrFormatTests.cpp b/external/vulkancts/modules/vulkan/ycbcr/vktYCbCrFormatTests.cpp
index 2e73821..9b2d7e1 100644
--- a/external/vulkancts/modules/vulkan/ycbcr/vktYCbCrFormatTests.cpp
+++ b/external/vulkancts/modules/vulkan/ycbcr/vktYCbCrFormatTests.cpp
@@ -627,6 +627,14 @@
 
 		group->addChild(createTestGroup<VkFormat>(group->getTestContext(), formatName, "", populatePerFormatGroup, format));
 	}
+
+	for (int formatNdx = VK_FORMAT_G8_B8R8_2PLANE_444_UNORM_EXT; formatNdx <= VK_FORMAT_G16_B16R16_2PLANE_444_UNORM_EXT; formatNdx++)
+	{
+		const VkFormat					format			= (VkFormat)formatNdx;
+		const string					formatName		= de::toLower(de::toString(format).substr(10));
+
+		group->addChild(createTestGroup<VkFormat>(group->getTestContext(), formatName, "", populatePerFormatGroup, format));
+	}
 }
 
 } // namespace
diff --git a/external/vulkancts/modules/vulkan/ycbcr/vktYCbCrImageQueryTests.cpp b/external/vulkancts/modules/vulkan/ycbcr/vktYCbCrImageQueryTests.cpp
index 09d91f8..aa93e01 100644
--- a/external/vulkancts/modules/vulkan/ycbcr/vktYCbCrImageQueryTests.cpp
+++ b/external/vulkancts/modules/vulkan/ycbcr/vktYCbCrImageQueryTests.cpp
@@ -417,6 +417,8 @@
 	};
 
 	deUint32										combinedSamplerDescriptorCount	= 1;
+
+	if (isYCbCrImage)
 	{
 		const VkPhysicalDeviceImageFormatInfo2			imageFormatInfo				=
 		{
@@ -596,6 +598,8 @@
 	};
 
 	deUint32										combinedSamplerDescriptorCount	= 1;
+
+	if (isYCbCrImage)
 	{
 		const VkPhysicalDeviceImageFormatInfo2		imageFormatInfo					=
 		{
@@ -828,6 +832,16 @@
 		if (getPlaneCount(format) > 1)
 			addImageQueryCase(group, TestParameters(params.query, format, (VkImageCreateFlags)VK_IMAGE_CREATE_DISJOINT_BIT, params.shaderType));
 	}
+
+	for (int formatNdx = VK_FORMAT_G8_B8R8_2PLANE_444_UNORM_EXT; formatNdx <= VK_FORMAT_G16_B16R16_2PLANE_444_UNORM_EXT; formatNdx++)
+	{
+		const VkFormat	format	= (VkFormat)formatNdx;
+
+		addImageQueryCase(group, TestParameters(params.query, format, 0u, params.shaderType));
+
+		if (getPlaneCount(format) > 1)
+			addImageQueryCase(group, TestParameters(params.query, format, (VkImageCreateFlags)VK_IMAGE_CREATE_DISJOINT_BIT, params.shaderType));
+	}
 }
 
 void populateQueryGroup (tcu::TestCaseGroup* group, QueryType query)
diff --git a/external/vulkancts/modules/vulkan/ycbcr/vktYCbCrStorageImageWriteTests.cpp b/external/vulkancts/modules/vulkan/ycbcr/vktYCbCrStorageImageWriteTests.cpp
index aa160c5..6265c37 100644
--- a/external/vulkancts/modules/vulkan/ycbcr/vktYCbCrStorageImageWriteTests.cpp
+++ b/external/vulkancts/modules/vulkan/ycbcr/vktYCbCrStorageImageWriteTests.cpp
@@ -587,6 +587,10 @@
 		case VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM:				return "rgba16";
 		case VK_FORMAT_G16_B16R16_2PLANE_422_UNORM:					return "rgba16";
 		case VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM:				return "rgba16";
+		case VK_FORMAT_G8_B8R8_2PLANE_444_UNORM_EXT:				return "rgba8";
+		case VK_FORMAT_G10X6_B10X6R10X6_2PLANE_444_UNORM_3PACK16_EXT:return "rgba16";
+		case VK_FORMAT_G12X4_B12X4R12X4_2PLANE_444_UNORM_3PACK16_EXT:return "rgba16";
+		case VK_FORMAT_G16_B16R16_2PLANE_444_UNORM_EXT:				return "rgba16";
 
 		default:
 			DE_FATAL("Unexpected texture format");
@@ -675,7 +679,7 @@
 {
 	const std::vector<tcu::UVec3>	availableSizes{ tcu::UVec3(512u, 512u, 1u), tcu::UVec3(1024u, 128u, 1u), tcu::UVec3(66u, 32u, 1u) };
 
-	for (int formatNdx = VK_YCBCR_FORMAT_FIRST; formatNdx < VK_YCBCR_FORMAT_LAST; formatNdx++)
+	auto addTests = [&](int formatNdx)
 	{
 		const VkFormat					format				= (VkFormat)formatNdx;
 		tcu::UVec3						imageSizeAlignment	= getImageSizeAlignment(format);
@@ -702,7 +706,18 @@
 			formatGroup->addChild(sizeGroup.release());
 		}
 		testGroup->addChild(formatGroup.release());
+	};
+
+	for (int formatNdx = VK_YCBCR_FORMAT_FIRST; formatNdx < VK_YCBCR_FORMAT_LAST; formatNdx++)
+	{
+		addTests(formatNdx);
 	}
+
+	for (int formatNdx = VK_FORMAT_G8_B8R8_2PLANE_444_UNORM_EXT; formatNdx <= VK_FORMAT_G16_B16R16_2PLANE_444_UNORM_EXT; formatNdx++)
+	{
+		addTests(formatNdx);
+	}
+
 	return testGroup.release();
 }
 
diff --git a/external/vulkancts/modules/vulkan/ycbcr/vktYCbCrUtil.cpp b/external/vulkancts/modules/vulkan/ycbcr/vktYCbCrUtil.cpp
index 77e84e5..354a9fd 100644
--- a/external/vulkancts/modules/vulkan/ycbcr/vktYCbCrUtil.cpp
+++ b/external/vulkancts/modules/vulkan/ycbcr/vktYCbCrUtil.cpp
@@ -394,7 +394,7 @@
 					VK_QUEUE_FAMILY_IGNORED,
 					VK_QUEUE_FAMILY_IGNORED,
 					image,
-					{ aspect, 0u, 1u, arrayLayer, 1u }
+					{ (VkImageAspectFlags)aspect, 0u, 1u, arrayLayer, 1u }
 				};
 
 			vkd.cmdPipelineBarrier(*cmdBuffer,
@@ -423,7 +423,7 @@
 					VK_QUEUE_FAMILY_IGNORED,
 					VK_QUEUE_FAMILY_IGNORED,
 					image,
-					{ aspect, 0u, 1u, arrayLayer, 1u }
+					{ (VkImageAspectFlags)aspect, 0u, 1u, arrayLayer, 1u }
 				};
 
 			vkd.cmdPipelineBarrier(*cmdBuffer,
@@ -1111,6 +1111,7 @@
 		case vk::VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM:
 		case vk::VK_FORMAT_G8_B8R8_2PLANE_422_UNORM:
 		case vk::VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM:
+		case vk::VK_FORMAT_G8_B8R8_2PLANE_444_UNORM_EXT:
 			return tcu::UVec4(8, 8, 8, 0);
 
 		case vk::VK_FORMAT_R10X6_UNORM_PACK16:
@@ -1129,6 +1130,7 @@
 		case vk::VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16:
 		case vk::VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16:
 		case vk::VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16:
+		case vk::VK_FORMAT_G10X6_B10X6R10X6_2PLANE_444_UNORM_3PACK16_EXT:
 			return tcu::UVec4(10, 10, 10, 0);
 
 		case vk::VK_FORMAT_R12X4_UNORM_PACK16:
@@ -1145,6 +1147,7 @@
 		case vk::VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16:
 		case vk::VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16:
 		case vk::VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16:
+		case vk::VK_FORMAT_G12X4_B12X4R12X4_2PLANE_444_UNORM_3PACK16_EXT:
 			return tcu::UVec4(12, 12, 12, 12);
 
 		case vk::VK_FORMAT_G16B16G16R16_422_UNORM:
@@ -1154,6 +1157,7 @@
 		case vk::VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM:
 		case vk::VK_FORMAT_G16_B16R16_2PLANE_422_UNORM:
 		case vk::VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM:
+		case vk::VK_FORMAT_G16_B16R16_2PLANE_444_UNORM_EXT:
 			return tcu::UVec4(16, 16, 16, 0);
 
 		default:
@@ -1200,24 +1204,28 @@
 		case vk::VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16:
 		case vk::VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16:
 		case vk::VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16:
+		case vk::VK_FORMAT_G10X6_B10X6R10X6_2PLANE_444_UNORM_3PACK16_EXT:
 		case vk::VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16:
 		case vk::VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16:
 		case vk::VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16:
 		case vk::VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16:
 		case vk::VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16:
 		case vk::VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16:
+		case vk::VK_FORMAT_G12X4_B12X4R12X4_2PLANE_444_UNORM_3PACK16_EXT:
 		case vk::VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16:
 		case vk::VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16:
 		case vk::VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16:
 		case vk::VK_FORMAT_G16B16G16R16_422_UNORM:
 		case vk::VK_FORMAT_G16_B16R16_2PLANE_420_UNORM:
 		case vk::VK_FORMAT_G16_B16R16_2PLANE_422_UNORM:
+		case vk::VK_FORMAT_G16_B16R16_2PLANE_444_UNORM_EXT:
 		case vk::VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM:
 		case vk::VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM:
 		case vk::VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM:
 		case vk::VK_FORMAT_G8B8G8R8_422_UNORM:
 		case vk::VK_FORMAT_G8_B8R8_2PLANE_420_UNORM:
 		case vk::VK_FORMAT_G8_B8R8_2PLANE_422_UNORM:
+		case vk::VK_FORMAT_G8_B8R8_2PLANE_444_UNORM_EXT:
 		case vk::VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM:
 		case vk::VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM:
 		case vk::VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM:
diff --git a/external/vulkancts/modules/vulkan/ycbcr/vktYCbCrViewTests.cpp b/external/vulkancts/modules/vulkan/ycbcr/vktYCbCrViewTests.cpp
index 0cba5fe..abac440 100644
--- a/external/vulkancts/modules/vulkan/ycbcr/vktYCbCrViewTests.cpp
+++ b/external/vulkancts/modules/vulkan/ycbcr/vktYCbCrViewTests.cpp
@@ -689,13 +689,13 @@
 	const VkImageCreateFlags	baseFlags	= (VkImageCreateFlags)VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT
 											| (viewType == TestParameters::VIEWTYPE_MEMORY_ALIAS ? (VkImageCreateFlags)VK_IMAGE_CREATE_ALIAS_BIT : 0u);
 
-	for (int formatNdx = VK_YCBCR_FORMAT_FIRST; formatNdx < VK_YCBCR_FORMAT_LAST; formatNdx++)
+	auto addTests = [&](int formatNdx)
 	{
 		const VkFormat	format		= (VkFormat)formatNdx;
 		const deUint32	numPlanes	= getPlaneCount(format);
 
 		if (numPlanes == 1)
-			continue; // Plane views not possible
+			return; // Plane views not possible
 
 		for (int isDisjoint = 0; isDisjoint < 2; ++isDisjoint)
 		{
@@ -708,6 +708,16 @@
 			for (deUint32 planeNdx = 0; planeNdx < numPlanes; ++planeNdx)
 				addPlaneViewCase(group, TestParameters(viewType, format, size, flags, planeNdx, shaderType));
 		}
+	};
+
+	for (int formatNdx = VK_YCBCR_FORMAT_FIRST; formatNdx < VK_YCBCR_FORMAT_LAST; formatNdx++)
+	{
+		addTests(formatNdx);
+	}
+
+	for (int formatNdx = VK_FORMAT_G8_B8R8_2PLANE_444_UNORM_EXT; formatNdx < VK_FORMAT_G16_B16R16_2PLANE_444_UNORM_EXT; formatNdx++)
+	{
+		addTests(formatNdx);
 	}
 }
 
diff --git a/external/vulkancts/mustpass/master/vk-default.txt b/external/vulkancts/mustpass/master/vk-default.txt
index 22671db..7e01834 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/mustpass/master/waivers.xml b/external/vulkancts/mustpass/master/waivers.xml
index 9205865..ad24da0 100644
--- a/external/vulkancts/mustpass/master/waivers.xml
+++ b/external/vulkancts/mustpass/master/waivers.xml
@@ -204,13 +204,24 @@
 	<waiver vendorName="Broadcom" vendorId="0x14E4" url="https://gitlab.khronos.org/Tracker/vk-gl-cts/issues/757">
 		<description>On affected devices depth clipping is incorrectly disabled when the viewport minDepth is equal to maxDepth.</description>
 		<device_list>
-			<d>0x8E002214</d>
 			<d>0x001E43CB</d>
 			<d>0xBE485FD3</d>
 		</device_list>
 		<t>dEQP-VK.draw.inverted_depth_ranges.nodepthclamp_deltazero</t>
 	</waiver>
 
+	<waiver vendorName="Broadcom" vendorId="0x14E4" url="https://gitlab.khronos.org/Tracker/vk-gl-cts/issues/2804">
+		<description>On affected devices depth exponent is incorrectly ignored when calculating floating-point depth bias.</description>
+		<device_list>
+			<d>0x001E43CB</d>
+			<d>0xBE485FD3</d>
+			<d>0xC8D064C2</d>
+			<d>0x7BECF276</d>
+			<d>0x1AB5C29F</d>
+		</device_list>
+		<t>dEQP-VK.rasterization.depth_bias.d32_sfloat</t>
+	</waiver>
+
 	<waiver vendorName="NVIDIA" vendorId="0x10DE" url="https://gitlab.khronos.org/Tracker/vk-gl-cts/issues/1356">
 		<description>The affected GPUs are unable to reliably synchronize memory accesses at device scope.</description>
 		<device_list>
@@ -419,4 +430,4 @@
 		<t>dEQP-VK.memory_model.*core11*.device.*</t>
 	</waiver>
 
-</waiver_list>
\ No newline at end of file
+</waiver_list>
diff --git a/external/vulkancts/scripts/gen_framework.py b/external/vulkancts/scripts/gen_framework.py
index cb41ffc..2748f09 100755
--- a/external/vulkancts/scripts/gen_framework.py
+++ b/external/vulkancts/scripts/gen_framework.py
@@ -156,6 +156,8 @@
 	name = name.replace("VULKAN_12_PROPERTIES", "VULKAN_1_2_PROPERTIES")
 	name = name.replace("INT_8_", "INT8_")
 	name = name.replace("AABBNV", "AABB_NV")
+	name = name.replace("_H_264_", "_H264_")
+	name = name.replace("_H_265_", "_H265_")
 
 	return prefix + name
 
@@ -297,6 +299,9 @@
 	def getAsString (self, separator):
 		return '%s%s%s%s%s' % (self.getType(), separator, self.name, self.arraySize, self.fieldWidth)
 
+	def getAsStringForArgumentList (self, separator):
+		return '%s%s%s%s' % (self.getType(), separator, self.name, self.arraySize)
+
 	def __repr__ (self):
 		return '<%s> <%s> <%s>' % (self.type, self.name, self.arraySize)
 
@@ -475,9 +480,9 @@
 	return enums
 
 def parseCompositeType (type, name, src):
-	typeNamePtrn	= r'(' + TYPE_PTRN + r')(\s+' + IDENT_PTRN + r')((\[[^\]]+\]|:[0-9]+)*)\s*;'
+	typeNamePtrn	= r'(' + TYPE_PTRN + r')(\s+' + IDENT_PTRN + r')((\[[^\]]+\]|\s*:\s*[0-9]+)*)\s*;'
 	matches			= re.findall(typeNamePtrn, src)
-	members			= [Variable(t.strip(), n.strip(), a.strip()) for t, n, a, _ in matches]
+	members			= [Variable(t.strip(), n.strip(), a.replace(' ', '')) for t, n, a, _ in matches]
 	return CompositeType(type, name, members)
 
 def parseCompositeTypes (src):
@@ -642,6 +647,7 @@
 		extNameUpper = extNameUpper.replace("VK_EXT_ROBUSTNESS2", "VK_EXT_ROBUSTNESS_2")
 		extNameUpper = extNameUpper.replace("VK_EXT_FRAGMENT_DENSITY_MAP2", "VK_EXT_FRAGMENT_DENSITY_MAP_2")
 		extNameUpper = extNameUpper.replace("VK_AMD_SHADER_CORE_PROPERTIES2", "VK_AMD_SHADER_CORE_PROPERTIES_2")
+		extNameUpper = extNameUpper.replace("VK_EXT_EXTENDED_DYNAMIC_STATE2", "VK_EXT_EXTENDED_DYNAMIC_STATE_2")
 		# SPEC_VERSION enums
 		if definition[0].startswith(extNameUpper) and definition[1].isdigit():
 			return False
@@ -891,8 +897,8 @@
 	yield "typedef deUint32 %s;" % bitfield.name
 
 def genBitfield64Src (bitfield64):
+	yield "typedef deUint64 %s;" % bitfield64.name
 	if len(bitfield64.values) > 0:
-		yield "typedef deUint64 %s;" % bitfield64.name
 		ptrn = "static const " + bitfield64.name + " %s\t= %s;"
 		for line in indentLines([ptrn % v for v in bitfield64.values]):
 			yield line
@@ -1019,7 +1025,7 @@
 	writeInlFile(filename, INL_HEADER, gen())
 
 def argListToStr (args):
-	return ", ".join(v.getAsString(' ') for v in args)
+	return ", ".join(v.getAsStringForArgumentList(' ') for v in args)
 
 def writeInterfaceDecl (api, filename, functionTypes, concrete):
 	def genProtos ():
@@ -1177,9 +1183,10 @@
 					elif member.getType() == PLATFORM_TYPE_NAMESPACE + "::Win32LPCWSTR":
 						valFmt = "getWStr(value.%s)" % member.name
 					elif member.arraySize != '':
+						singleDimensional = not '][' in member.arraySize
 						if member.name in ["extensionName", "deviceName", "layerName", "description"]:
 							valFmt = "(const char*)value.%s" % member.name
-						elif member.getType() == 'char' or member.getType() == 'deUint8':
+						elif singleDimensional and (member.getType() == 'char' or member.getType() == 'deUint8'):
 							newLine = "'\\n' << "
 							valFmt	= "tcu::formatArray(tcu::Format::HexIterator<%s>(DE_ARRAY_BEGIN(value.%s)), tcu::Format::HexIterator<%s>(DE_ARRAY_END(value.%s)))" % (member.getType(), member.name, member.getType(), member.name)
 						else:
@@ -1456,6 +1463,23 @@
 			"VkQueueFamilyProperties",
 			"VkMemoryType",
 			"VkMemoryHeap",
+			"StdVideoH264SpsVuiFlags",
+			"StdVideoH264SpsFlags",
+			"StdVideoH264PpsFlags",
+			"StdVideoDecodeH264PictureInfoFlags",
+			"StdVideoDecodeH264ReferenceInfoFlags",
+			"StdVideoDecodeH264MvcElementFlags",
+			"StdVideoEncodeH264SliceHeaderFlags",
+			"StdVideoEncodeH264PictureInfoFlags",
+			"StdVideoEncodeH264RefMgmtFlags",
+			"StdVideoH265HrdFlags",
+			"StdVideoH265VpsFlags",
+			"StdVideoH265SpsVuiFlags",
+			"StdVideoH265SpsFlags",
+			"StdVideoH265PpsFlags",
+			"StdVideoDecodeH265PictureInfoFlags",
+			"StdVideoDecodeH265ReferenceInfoFlags",
+			"StdVideoEncodeH265PictureInfoFlags"
 		])
 	COMPOSITE_TYPES = set([t.name for t in api.compositeTypes if not t.isAlias])
 
@@ -1483,8 +1507,10 @@
 			if not isSimpleStruct(type) or type.isAlias:
 				continue
 
+			name = type.name[2:] if type.name[:2].lower() == "vk" else type.name
+
 			yield ""
-			yield "inline %s make%s (%s)" % (type.name, type.name[2:], argListToStr(type.members))
+			yield "inline %s make%s (%s)" % (type.name, name, argListToStr(type.members))
 			yield "{"
 			yield "\t%s res;" % type.name
 			for line in indentLines(["\tres.%s\t= %s;" % (m.name, m.name) for m in type.members]):
@@ -1715,7 +1741,8 @@
 		'VkPhysicalDeviceDescriptorIndexingFeatures',
 		'VkPhysicalDeviceTimelineSemaphoreFeatures',
 		'VkPhysicalDeviceFragmentDensityMapFeaturesEXT',
-		'VkPhysicalDeviceFragmentDensityMap2FeaturesEXT'
+		'VkPhysicalDeviceFragmentDensityMap2FeaturesEXT',
+		'VkPhysicalDeviceShaderIntegerDotProductFeaturesKHR',
 	]
 	# helper class used to encapsulate all data needed during generation
 	class StructureDetail:
@@ -2339,16 +2366,36 @@
 	stream.append('};\n')
 	writeInlFile(filename, INL_HEADER, stream)
 
+def preprocessTopInclude(src, dir):
+	pattern = r'#include\s+"([^\n]+)"'
+	while True:
+		inc = re.search(pattern, src)
+		if inc is None:
+			return src
+		incFileName = inc.string[inc.start(1):inc.end(1)]
+		patternIncNamed = r'#include\s+"' + incFileName + '"'
+		incBody = readFile(os.path.join(dir, incFileName)) if incFileName != 'vk_platform.h' else ''
+		incBodySanitized = re.sub(pattern, '', incBody)
+		bodyEndSanitized = re.sub(patternIncNamed, '', src[inc.end(0):])
+		src = src[0:inc.start(0)] + incBodySanitized + bodyEndSanitized
+	return src
+
 if __name__ == "__main__":
 	# Read all .h files, with vulkan_core.h first
 	files			= os.listdir(VULKAN_H_DIR)
 	files			= [f for f in files if f.endswith(".h")]
 	files.sort()
 	files.remove("vulkan_core.h")
-	files.insert(0, "vulkan_core.h")
+	first = ["vk_video/vulkan_video_codecs_common.h", "vulkan_core.h"]
+	files = first + files
+
 	src				= ""
 	for file in files:
-		src += readFile(os.path.join(VULKAN_H_DIR,file))
+		src += preprocessTopInclude(readFile(os.path.join(VULKAN_H_DIR,file)), VULKAN_H_DIR)
+
+	src = re.sub('\s*//[^\n]*', '', src)
+	src = re.sub('\n\n', '\n', src)
+
 	api				= parseAPI(src)
 
 	platformFuncs	= [Function.TYPE_PLATFORM]
diff --git a/external/vulkancts/scripts/gen_framework_c.py b/external/vulkancts/scripts/gen_framework_c.py
index f1c3099..ca99329 100644
--- a/external/vulkancts/scripts/gen_framework_c.py
+++ b/external/vulkancts/scripts/gen_framework_c.py
@@ -22,14 +22,23 @@
 
 import os
 import sys
-
+import re
 
 sys.path.append(os.path.join(os.path.dirname(__file__), "..", "..", "..", "scripts"))
 
 from build.common import DEQP_DIR
 from khr_util.format import writeInlFile
 
-VULKAN_H	= os.path.join(os.path.dirname(__file__), "src", "vulkan_core.h")
+VULKAN_H	= [
+	os.path.join(os.path.dirname(__file__), "src", "vk_video", "vulkan_video_codecs_common.h"),
+	os.path.join(os.path.dirname(__file__), "src", "vk_video", "vulkan_video_codec_h264std.h"),
+	os.path.join(os.path.dirname(__file__), "src", "vk_video", "vulkan_video_codec_h264std_encode.h"),
+	os.path.join(os.path.dirname(__file__), "src", "vk_video", "vulkan_video_codec_h265std.h"),
+	os.path.join(os.path.dirname(__file__), "src", "vk_video", "vulkan_video_codec_h264std_decode.h"),
+	os.path.join(os.path.dirname(__file__), "src", "vk_video", "vulkan_video_codec_h265std_decode.h"),
+	os.path.join(os.path.dirname(__file__), "src", "vulkan_core.h"),
+	]
+#VULKAN_H	= os.path.join(os.path.dirname(__file__), "src", "vulkan_core.h")
 VULKAN_DIR	= os.path.join(os.path.dirname(__file__), "..", "framework", "vulkan")
 
 INL_HEADER = """\
@@ -57,7 +66,7 @@
 
 def writeVulkanCHeader (src, filename):
 	def gen ():
-		dst = src.replace('#include "vk_platform.h"','')
+		dst = re.sub(r'(#include "[^\s,\n}]+")', '', src)
 
 		for old_type, new_type in TYPE_SUBSTITUTIONS:
 			dst = dst.replace(old_type, new_type)
@@ -65,5 +74,8 @@
 	writeInlFile(filename, INL_HEADER, gen())
 
 if __name__ == "__main__":
-	src				= readFile(VULKAN_H)
+	src = ""
+	for file in VULKAN_H:
+		src += readFile(file)
+
 	writeVulkanCHeader				(src, os.path.join(VULKAN_DIR, "vkVulkan_c.inl"))
diff --git a/external/vulkancts/scripts/src/extensions_data.txt b/external/vulkancts/scripts/src/extensions_data.txt
index da4a043..c42025b 100644
--- a/external/vulkancts/scripts/src/extensions_data.txt
+++ b/external/vulkancts/scripts/src/extensions_data.txt
@@ -92,3 +92,5 @@
 VK_KHR_zero_initialize_workgroup_memory		DEVICE
 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 c0e086d..33fb269 100644
--- a/external/vulkancts/scripts/src/mandatory_features.txt
+++ b/external/vulkancts/scripts/src/mandatory_features.txt
@@ -41,11 +41,14 @@
 VkPhysicalDeviceVulkan12Features							FEATURES ( imagelessFramebuffer )								REQUIREMENTS ( "ApiVersion(1, 2, 0)" )
 VkPhysicalDeviceVulkan12Features							FEATURES ( uniformBufferStandardLayout )						REQUIREMENTS ( "ApiVersion(1, 2, 0)" )
 VkPhysicalDeviceSeparateDepthStencilLayoutsFeaturesKHR		FEATURES ( separateDepthStencilLayouts )						REQUIREMENTS ( VK_KHR_separate_depth_stencil_layouts )
+VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT		FEATURES ( pipelineCreationCacheControl )						REQUIREMENTS ( VK_EXT_pipeline_creation_cache_control )
 VkPhysicalDeviceVulkan12Features							FEATURES ( separateDepthStencilLayouts )						REQUIREMENTS ( "ApiVersion(1, 2, 0)" )
 VkPhysicalDeviceHostQueryResetFeaturesEXT					FEATURES ( hostQueryReset )										REQUIREMENTS ( VK_EXT_host_query_reset )
 VkPhysicalDeviceVulkan12Features							FEATURES ( hostQueryReset )										REQUIREMENTS ( "ApiVersion(1, 2, 0)" )
 VkPhysicalDeviceTimelineSemaphoreFeaturesKHR 				FEATURES ( timelineSemaphore )									REQUIREMENTS ( VK_KHR_timeline_semaphore )
 VkPhysicalDeviceVulkan12Features							FEATURES ( timelineSemaphore )									REQUIREMENTS ( "ApiVersion(1, 2, 0)" )
+VkPhysicalDeviceFeatures									FEATURES ( shaderSampledImageArrayDynamicIndexing )				REQUIREMENTS ( "ApiVersion(1, 2, 0)" physicalDeviceVulkan12Features.descriptorIndexing )
+VkPhysicalDeviceFeatures									FEATURES ( shaderStorageBufferArrayDynamicIndexing )			REQUIREMENTS ( "ApiVersion(1, 2, 0)" physicalDeviceVulkan12Features.descriptorIndexing )
 VkPhysicalDeviceVulkan12Features							FEATURES ( shaderUniformTexelBufferArrayDynamicIndexing )		REQUIREMENTS ( "ApiVersion(1, 2, 0)" physicalDeviceVulkan12Features.descriptorIndexing )
 VkPhysicalDeviceVulkan12Features							FEATURES ( shaderStorageTexelBufferArrayDynamicIndexing )		REQUIREMENTS ( "ApiVersion(1, 2, 0)" physicalDeviceVulkan12Features.descriptorIndexing )
 VkPhysicalDeviceVulkan12Features							FEATURES ( shaderSampledImageArrayNonUniformIndexing )			REQUIREMENTS ( "ApiVersion(1, 2, 0)" physicalDeviceVulkan12Features.descriptorIndexing )
@@ -88,6 +91,46 @@
 VkPhysicalDeviceVulkan12Features							FEATURES ( shaderOutputLayer )									REQUIREMENTS ( "ApiVersion(1, 2, 0)" VK_EXT_shader_viewport_index_layer )
 VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR		FEATURES ( shaderTerminateInvocation )							REQUIREMENTS ( VK_KHR_shader_terminate_invocation )
 VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT			FEATURES ( shaderImageInt64Atomics )							REQUIREMENTS ( VK_EXT_shader_image_atomic_int64 )
-VkPhysicalDevice4444FormatsFeaturesEXT			            FEATURES ( formatA4R4G4B4 )										REQUIREMENTS ( VK_EXT_4444_formats )
+VkPhysicalDevice4444FormatsFeaturesEXT						FEATURES ( formatA4R4G4B4 )										REQUIREMENTS ( VK_EXT_4444_formats )
 VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR	FEATURES ( shaderZeroInitializeWorkgroupMemory )				REQUIREMENTS ( VK_KHR_zero_initialize_workgroup_memory )
-VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR		FEATURES ( workgroupMemoryExplicitLayout workgroupMemoryExplicitLayoutScalarBlockLayout workgroupMemoryExplicitLayout8BitAccess workgroupMemoryExplicitLayout16BitAccess )		    REQUIREMENTS ( VK_KHR_workgroup_memory_explicit_layout )
+VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR	FEATURES ( workgroupMemoryExplicitLayout workgroupMemoryExplicitLayoutScalarBlockLayout workgroupMemoryExplicitLayout8BitAccess workgroupMemoryExplicitLayout16BitAccess )		    REQUIREMENTS ( VK_KHR_workgroup_memory_explicit_layout )
+VkPhysicalDeviceAccelerationStructureFeaturesKHR			FEATURES ( accelerationStructure  )								REQUIREMENTS ( VK_KHR_acceleration_structure )
+VkPhysicalDeviceAccelerationStructureFeaturesKHR			FEATURES ( descriptorBindingAccelerationStructureUpdateAfterBind )	REQUIREMENTS ( VK_KHR_acceleration_structure )
+VkPhysicalDeviceFeatures									FEATURES ( shaderSampledImageArrayDynamicIndexing )				REQUIREMENTS ( "ApiVersion(1, 1, 0)" VK_KHR_acceleration_structure )
+VkPhysicalDeviceFeatures									FEATURES ( shaderStorageBufferArrayDynamicIndexing )			REQUIREMENTS ( "ApiVersion(1, 1, 0)" VK_KHR_acceleration_structure )
+VkPhysicalDeviceVulkan12Features							FEATURES ( shaderUniformTexelBufferArrayDynamicIndexing )		REQUIREMENTS ( "ApiVersion(1, 2, 0)" VK_KHR_acceleration_structure )
+VkPhysicalDeviceVulkan12Features							FEATURES ( shaderStorageTexelBufferArrayDynamicIndexing )		REQUIREMENTS ( "ApiVersion(1, 2, 0)" VK_KHR_acceleration_structure )
+VkPhysicalDeviceVulkan12Features							FEATURES ( shaderSampledImageArrayNonUniformIndexing )			REQUIREMENTS ( "ApiVersion(1, 2, 0)" VK_KHR_acceleration_structure )
+VkPhysicalDeviceVulkan12Features							FEATURES ( shaderStorageBufferArrayNonUniformIndexing )			REQUIREMENTS ( "ApiVersion(1, 2, 0)" VK_KHR_acceleration_structure )
+VkPhysicalDeviceVulkan12Features							FEATURES ( shaderUniformTexelBufferArrayNonUniformIndexing )	REQUIREMENTS ( "ApiVersion(1, 2, 0)" VK_KHR_acceleration_structure )
+VkPhysicalDeviceVulkan12Features							FEATURES ( descriptorBindingSampledImageUpdateAfterBind )		REQUIREMENTS ( "ApiVersion(1, 2, 0)" VK_KHR_acceleration_structure )
+VkPhysicalDeviceVulkan12Features							FEATURES ( descriptorBindingStorageImageUpdateAfterBind )		REQUIREMENTS ( "ApiVersion(1, 2, 0)" VK_KHR_acceleration_structure )
+VkPhysicalDeviceVulkan12Features							FEATURES ( descriptorBindingStorageBufferUpdateAfterBind )		REQUIREMENTS ( "ApiVersion(1, 2, 0)" VK_KHR_acceleration_structure )
+VkPhysicalDeviceVulkan12Features							FEATURES ( descriptorBindingUniformTexelBufferUpdateAfterBind )	REQUIREMENTS ( "ApiVersion(1, 2, 0)" VK_KHR_acceleration_structure )
+VkPhysicalDeviceVulkan12Features							FEATURES ( descriptorBindingStorageTexelBufferUpdateAfterBind )	REQUIREMENTS ( "ApiVersion(1, 2, 0)" VK_KHR_acceleration_structure )
+VkPhysicalDeviceVulkan12Features							FEATURES ( descriptorBindingUpdateUnusedWhilePending )			REQUIREMENTS ( "ApiVersion(1, 2, 0)" VK_KHR_acceleration_structure )
+VkPhysicalDeviceVulkan12Features							FEATURES ( descriptorBindingPartiallyBound )					REQUIREMENTS ( "ApiVersion(1, 2, 0)" VK_KHR_acceleration_structure )
+VkPhysicalDeviceVulkan12Features							FEATURES ( runtimeDescriptorArray )								REQUIREMENTS ( "ApiVersion(1, 2, 0)" VK_KHR_acceleration_structure )
+VkPhysicalDeviceVulkan12Features							FEATURES ( bufferDeviceAddress )								REQUIREMENTS ( "ApiVersion(1, 2, 0)" VK_KHR_acceleration_structure )
+VkPhysicalDeviceBufferDeviceAddressFeaturesKHR				FEATURES ( bufferDeviceAddress )								REQUIREMENTS ( "ApiVersion(1, 1, 0)" VK_KHR_acceleration_structure )
+VkPhysicalDeviceDescriptorIndexingFeaturesEXT				FEATURES ( shaderUniformTexelBufferArrayDynamicIndexing )		REQUIREMENTS ( "ApiVersion(1, 1, 0)" VK_KHR_acceleration_structure )
+VkPhysicalDeviceDescriptorIndexingFeaturesEXT				FEATURES ( shaderStorageTexelBufferArrayDynamicIndexing )		REQUIREMENTS ( "ApiVersion(1, 1, 0)" VK_KHR_acceleration_structure )
+VkPhysicalDeviceDescriptorIndexingFeaturesEXT				FEATURES ( shaderSampledImageArrayNonUniformIndexing )			REQUIREMENTS ( "ApiVersion(1, 1, 0)" VK_KHR_acceleration_structure )
+VkPhysicalDeviceDescriptorIndexingFeaturesEXT				FEATURES ( shaderStorageBufferArrayNonUniformIndexing )			REQUIREMENTS ( "ApiVersion(1, 1, 0)" VK_KHR_acceleration_structure )
+VkPhysicalDeviceDescriptorIndexingFeaturesEXT				FEATURES ( shaderUniformTexelBufferArrayNonUniformIndexing )	REQUIREMENTS ( "ApiVersion(1, 1, 0)" VK_KHR_acceleration_structure )
+VkPhysicalDeviceDescriptorIndexingFeaturesEXT				FEATURES ( descriptorBindingSampledImageUpdateAfterBind )		REQUIREMENTS ( "ApiVersion(1, 1, 0)" VK_KHR_acceleration_structure )
+VkPhysicalDeviceDescriptorIndexingFeaturesEXT				FEATURES ( descriptorBindingStorageImageUpdateAfterBind )		REQUIREMENTS ( "ApiVersion(1, 1, 0)" VK_KHR_acceleration_structure )
+VkPhysicalDeviceDescriptorIndexingFeaturesEXT				FEATURES ( descriptorBindingStorageBufferUpdateAfterBind )		REQUIREMENTS ( "ApiVersion(1, 1, 0)" VK_KHR_acceleration_structure )
+VkPhysicalDeviceDescriptorIndexingFeaturesEXT				FEATURES ( descriptorBindingUniformTexelBufferUpdateAfterBind )	REQUIREMENTS ( "ApiVersion(1, 1, 0)" VK_KHR_acceleration_structure )
+VkPhysicalDeviceDescriptorIndexingFeaturesEXT				FEATURES ( descriptorBindingStorageTexelBufferUpdateAfterBind )	REQUIREMENTS ( "ApiVersion(1, 1, 0)" VK_KHR_acceleration_structure )
+VkPhysicalDeviceDescriptorIndexingFeaturesEXT				FEATURES ( descriptorBindingUpdateUnusedWhilePending )			REQUIREMENTS ( "ApiVersion(1, 1, 0)" VK_KHR_acceleration_structure )
+VkPhysicalDeviceDescriptorIndexingFeaturesEXT				FEATURES ( descriptorBindingPartiallyBound )					REQUIREMENTS ( "ApiVersion(1, 1, 0)" VK_KHR_acceleration_structure )
+VkPhysicalDeviceDescriptorIndexingFeaturesEXT				FEATURES ( runtimeDescriptorArray )								REQUIREMENTS ( "ApiVersion(1, 1, 0)" VK_KHR_acceleration_structure )
+VkPhysicalDeviceRayTracingPipelineFeaturesKHR				FEATURES ( rayTracingPipeline rayTracingPipelineTraceRaysIndirect)	REQUIREMENTS ( VK_KHR_ray_tracing_pipeline )
+VkPhysicalDeviceRayTracingPipelineFeaturesKHR				FEATURES ( rayTraversalPrimitiveCulling )						REQUIREMENTS ( VK_KHR_ray_tracing_pipeline VK_KHR_ray_query )
+VkPhysicalDeviceRayQueryFeaturesKHR							FEATURES ( rayQuery )											REQUIREMENTS ( VK_KHR_ray_query )
+VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT			FEATURES ( vertexInputDynamicState )							REQUIREMENTS ( VK_EXT_vertex_input_dynamic_state  )
+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/vk_video/vulkan_video_codec_h264std.h b/external/vulkancts/scripts/src/vk_video/vulkan_video_codec_h264std.h
new file mode 100644
index 0000000..f8c0cef
--- /dev/null
+++ b/external/vulkancts/scripts/src/vk_video/vulkan_video_codec_h264std.h
@@ -0,0 +1,299 @@
+/*
+** Copyright (c) 2019-2021 The Khronos Group Inc.
+**
+** SPDX-License-Identifier: Apache-2.0
+*/
+
+#ifndef VULKAN_VIDEO_CODEC_H264STD_H_
+#define VULKAN_VIDEO_CODEC_H264STD_H_ 1
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "vk_video/vulkan_video_codecs_common.h"
+
+// Vulkan 0.9 provisional Vulkan video H.264 encode and decode std specification version number
+#define VK_STD_VULKAN_VIDEO_CODEC_H264_API_VERSION_0_9 VK_MAKE_VIDEO_STD_VERSION(0, 9, 0) // Patch version should always be set to 0
+
+// Format must be in the form XX.XX where the first two digits are the major and the second two, the minor.
+#define VK_STD_VULKAN_VIDEO_CODEC_H264_SPEC_VERSION   VK_STD_VULKAN_VIDEO_CODEC_H264_API_VERSION_0_9
+#define VK_STD_VULKAN_VIDEO_CODEC_H264_EXTENSION_NAME "VK_STD_vulkan_video_codec_h264"
+
+// *************************************************
+// Video H.264 common definitions:
+// *************************************************
+
+typedef enum StdVideoH264ChromaFormatIdc {
+    std_video_h264_chroma_format_idc_monochrome  = 0,
+    std_video_h264_chroma_format_idc_420         = 1,
+    std_video_h264_chroma_format_idc_422         = 2,
+    std_video_h264_chroma_format_idc_444         = 3,
+} StdVideoH264ChromaFormatIdc;
+
+typedef enum StdVideoH264ProfileIdc {
+    std_video_h264_profile_idc_baseline             = 66, /* Only constrained baseline is supported */
+    std_video_h264_profile_idc_main                 = 77,
+    std_video_h264_profile_idc_high                 = 100,
+    std_video_h264_profile_idc_high_444_predictive  = 244,
+    std_video_h264_profile_idc_invalid              = 0x7FFFFFFF
+} StdVideoH264ProfileIdc;
+
+typedef enum StdVideoH264Level {
+    std_video_h264_level_1_0 = 0,
+    std_video_h264_level_1_1 = 1,
+    std_video_h264_level_1_2 = 2,
+    std_video_h264_level_1_3 = 3,
+    std_video_h264_level_2_0 = 4,
+    std_video_h264_level_2_1 = 5,
+    std_video_h264_level_2_2 = 6,
+    std_video_h264_level_3_0 = 7,
+    std_video_h264_level_3_1 = 8,
+    std_video_h264_level_3_2 = 9,
+    std_video_h264_level_4_0 = 10,
+    std_video_h264_level_4_1 = 11,
+    std_video_h264_level_4_2 = 12,
+    std_video_h264_level_5_0 = 13,
+    std_video_h264_level_5_1 = 14,
+    std_video_h264_level_5_2 = 15,
+    std_video_h264_level_6_0 = 16,
+    std_video_h264_level_6_1 = 17,
+    std_video_h264_level_6_2 = 18,
+    std_video_h264_level_invalid = 0x7FFFFFFF
+} StdVideoH264Level;
+
+typedef enum StdVideoH264PocType {
+    std_video_h264_poc_type_0 = 0,
+    std_video_h264_poc_type_1 = 1,
+    std_video_h264_poc_type_2 = 2,
+    std_video_h264_poc_type_invalid = 0x7FFFFFFF
+} StdVideoH264PocType;
+
+typedef enum StdVideoH264AspectRatioIdc {
+    std_video_h264_aspect_ratio_idc_unspecified = 0,
+    std_video_h264_aspect_ratio_idc_square = 1,
+    std_video_h264_aspect_ratio_idc_12_11 = 2,
+    std_video_h264_aspect_ratio_idc_10_11 = 3,
+    std_video_h264_aspect_ratio_idc_16_11 = 4,
+    std_video_h264_aspect_ratio_idc_40_33 = 5,
+    std_video_h264_aspect_ratio_idc_24_11 = 6,
+    std_video_h264_aspect_ratio_idc_20_11 = 7,
+    std_video_h264_aspect_ratio_idc_32_11 = 8,
+    std_video_h264_aspect_ratio_idc_80_33 = 9,
+    std_video_h264_aspect_ratio_idc_18_11 = 10,
+    std_video_h264_aspect_ratio_idc_15_11 = 11,
+    std_video_h264_aspect_ratio_idc_64_33 = 12,
+    std_video_h264_aspect_ratio_idc_160_99 = 13,
+    std_video_h264_aspect_ratio_idc_4_3 = 14,
+    std_video_h264_aspect_ratio_idc_3_2 = 15,
+    std_video_h264_aspect_ratio_idc_2_1 = 16,
+    std_video_h264_aspect_ratio_idc_extended_sar = 255,
+    std_video_h264_aspect_ratio_idc_invalid = 0x7FFFFFFF
+} StdVideoH264AspectRatioIdc;
+
+typedef enum StdVideoH264WeightedBiPredIdc {
+    std_video_h264_default_weighted_b_slices_prediction_idc = 0,
+    std_video_h264_explicit_weighted_b_slices_prediction_idc = 1,
+    std_video_h264_implicit_weighted_b_slices_prediction_idc = 2,
+    std_video_h264_invalid_weighted_b_slices_prediction_idc = 0x7FFFFFFF
+} StdVideoH264WeightedBiPredIdc;
+
+typedef enum StdVideoH264ModificationOfPicNumsIdc {
+    std_video_h264_modification_of_pic_nums_idc_short_term_subtract = 0,
+    std_video_h264_modification_of_pic_nums_idc_short_term_add = 1,
+    std_video_h264_modification_of_pic_nums_idc_long_term = 2,
+    std_video_h264_modification_of_pic_nums_idc_end = 3,
+    std_video_h264_modification_of_pic_nums_idc_invalid = 0x7FFFFFFF
+} StdVideoH264ModificationOfPicNumsIdc;
+
+typedef enum StdVideoH264MemMgmtControlOp {
+    std_video_h264_mem_mgmt_control_op_end = 0,
+    std_video_h264_mem_mgmt_control_op_unmark_short_term = 1,
+    std_video_h264_mem_mgmt_control_op_unmark_long_term = 2,
+    std_video_h264_mem_mgmt_control_op_mark_long_term = 3,
+    std_video_h264_mem_mgmt_control_op_set_max_long_term_index = 4,
+    std_video_h264_mem_mgmt_control_op_unmark_all = 5,
+    std_video_h264_mem_mgmt_control_op_mark_current_as_long_term = 6,
+    std_video_h264_mem_mgmt_control_op_invalid = 0x7FFFFFFF
+} StdVideoH264MemMgmtControlOp;
+
+typedef enum StdVideoH264CabacInitIdc {
+    std_video_h264_cabac_init_idc_0 = 0,
+    std_video_h264_cabac_init_idc_1 = 1,
+    std_video_h264_cabac_init_idc_2 = 2,
+    std_video_h264_cabac_init_idc_invalid = 0x7FFFFFFF
+} StdVideoH264CabacInitIdc;
+
+typedef enum StdVideoH264DisableDeblockingFilterIdc {
+    std_video_h264_disable_deblocking_filter_idc_disabled = 0,
+    std_video_h264_disable_deblocking_filter_idc_enabled = 1,
+    std_video_h264_disable_deblocking_filter_idc_partial = 2,
+    std_video_h264_disable_deblocking_filter_idc_invalid = 0x7FFFFFFF
+} StdVideoH264DisableDeblockingFilterIdc;
+
+typedef enum StdVideoH264PictureType {
+    std_video_h264_picture_type_i = 0,
+    std_video_h264_picture_type_p = 1,
+    std_video_h264_picture_type_b = 2,
+    std_video_h264_picture_type_invalid = 0x7FFFFFFF
+} StdVideoH264PictureType;
+
+typedef enum StdVideoH264SliceType {
+    std_video_h264_slice_type_i = 0,
+    std_video_h264_slice_type_p = 1,
+    std_video_h264_slice_type_b = 2,
+    std_video_h264_slice_type_invalid = 0x7FFFFFFF
+} StdVideoH264SliceType;
+
+typedef enum StdVideoH264NonVclNaluType {
+    std_video_h264_non_vcl_nalu_type_sps = 0,
+    std_video_h264_non_vcl_nalu_type_pps = 1,
+    std_video_h264_non_vcl_nalu_type_aud = 2,
+    std_video_h264_non_vcl_nalu_type_prefix = 3,
+    std_video_h264_non_vcl_nalu_type_end_of_sequence = 4,
+    std_video_h264_non_vcl_nalu_type_end_of_stream = 5,
+    std_video_h264_non_vcl_nalu_type_precoded = 6,
+    std_video_h264_non_vcl_nalu_type_invalid = 0x7FFFFFFF
+} StdVideoH264NonVclNaluType;
+
+typedef struct StdVideoH264SpsVuiFlags {
+    uint32_t aspect_ratio_info_present_flag:1;
+    uint32_t overscan_info_present_flag:1;
+    uint32_t overscan_appropriate_flag:1;
+    uint32_t video_signal_type_present_flag:1;
+    uint32_t video_full_range_flag:1;
+    uint32_t color_description_present_flag:1;
+    uint32_t chroma_loc_info_present_flag:1;
+    uint32_t timing_info_present_flag:1;
+    uint32_t fixed_frame_rate_flag:1;
+    uint32_t bitstream_restriction_flag:1;
+    uint32_t nal_hrd_parameters_present_flag:1;
+    uint32_t vcl_hrd_parameters_present_flag:1;
+} StdVideoH264SpsVuiFlags;
+
+typedef struct StdVideoH264HrdParameters {
+    uint8_t                    cpb_cnt_minus1;
+    uint8_t                    bit_rate_scale;
+    uint8_t                    cpb_size_scale;
+    uint32_t                   bit_rate_value_minus1[32];
+    uint32_t                   cpb_size_value_minus1[32];
+    uint8_t                    cbr_flag[32];
+    uint32_t                   initial_cpb_removal_delay_length_minus1;
+    uint32_t                   cpb_removal_delay_length_minus1;
+    uint32_t                   dpb_output_delay_length_minus1;
+    uint32_t                   time_offset_length;
+} StdVideoH264HrdParameters;
+
+typedef struct StdVideoH264SequenceParameterSetVui {
+    StdVideoH264AspectRatioIdc  aspect_ratio_idc;
+    uint16_t                    sar_width;
+    uint16_t                    sar_height;
+    uint8_t                     video_format;
+    uint8_t                     color_primaries;
+    uint8_t                     transfer_characteristics;
+    uint8_t                     matrix_coefficients;
+    uint32_t                    num_units_in_tick;
+    uint32_t                    time_scale;
+    StdVideoH264HrdParameters   hrd_parameters;
+    uint8_t                     num_reorder_frames;
+    uint8_t                     max_dec_frame_buffering;
+    StdVideoH264SpsVuiFlags     flags;
+} StdVideoH264SequenceParameterSetVui;
+
+typedef struct StdVideoH264SpsFlags {
+    uint32_t constraint_set0_flag:1;
+    uint32_t constraint_set1_flag:1;
+    uint32_t constraint_set2_flag:1;
+    uint32_t constraint_set3_flag:1;
+    uint32_t constraint_set4_flag:1;
+    uint32_t constraint_set5_flag:1;
+    uint32_t direct_8x8_inference_flag:1;
+    uint32_t mb_adaptive_frame_field_flag:1;
+    uint32_t frame_mbs_only_flag:1;
+    uint32_t delta_pic_order_always_zero_flag:1;
+    uint32_t residual_colour_transform_flag:1;
+    uint32_t gaps_in_frame_num_value_allowed_flag:1;
+    uint32_t first_picture_after_seek_flag:1; // where is this being documented?
+    uint32_t qpprime_y_zero_transform_bypass_flag:1;
+    uint32_t frame_cropping_flag:1;
+    uint32_t scaling_matrix_present_flag:1;
+    uint32_t vui_parameters_present_flag:1;
+} StdVideoH264SpsFlags;
+
+typedef struct StdVideoH264ScalingLists
+{
+    // scaling_list_present_mask has one bit for each
+    // seq_scaling_list_present_flag[i] for SPS OR
+    // pic_scaling_list_present_flag[i] for PPS,
+    // bit 0 - 5 are for each entry of ScalingList4x4
+    // bit 6 - 7 are for each entry plus 6 for ScalingList8x8
+    uint8_t scaling_list_present_mask;
+    // use_default_scaling_matrix_mask has one bit for each
+    // UseDefaultScalingMatrix4x4Flag[ i ] and
+    // UseDefaultScalingMatrix8x8Flag[ i - 6 ] for SPS OR PPS
+    // bit 0 - 5 are for each entry of ScalingList4x4
+    // bit 6 - 7 are for each entry plus 6 for ScalingList8x8
+    uint8_t use_default_scaling_matrix_mask;
+    uint8_t ScalingList4x4[6][16];
+    uint8_t ScalingList8x8[2][64];
+} StdVideoH264ScalingLists;
+
+typedef struct StdVideoH264SequenceParameterSet
+{
+    StdVideoH264ProfileIdc               profile_idc;
+    StdVideoH264Level                    level_idc;
+    uint8_t                              seq_parameter_set_id;
+    StdVideoH264ChromaFormatIdc          chroma_format_idc;
+    uint8_t                              bit_depth_luma_minus8;
+    uint8_t                              bit_depth_chroma_minus8;
+    uint8_t                              log2_max_frame_num_minus4;
+    StdVideoH264PocType                  pic_order_cnt_type;
+    uint8_t                              log2_max_pic_order_cnt_lsb_minus4;
+    int32_t                              offset_for_non_ref_pic;
+    int32_t                              offset_for_top_to_bottom_field;
+    uint8_t                              num_ref_frames_in_pic_order_cnt_cycle;
+    uint8_t                              max_num_ref_frames;
+    uint32_t                             pic_width_in_mbs_minus1;
+    uint32_t                             pic_height_in_map_units_minus1;
+    uint32_t                             frame_crop_left_offset;
+    uint32_t                             frame_crop_right_offset;
+    uint32_t                             frame_crop_top_offset;
+    uint32_t                             frame_crop_bottom_offset;
+    StdVideoH264SpsFlags                 flags;
+    int32_t                              offset_for_ref_frame[255]; // The number of valid values are defined by the num_ref_frames_in_pic_order_cnt_cycle
+    StdVideoH264ScalingLists*            pScalingLists;             // Must be a valid pointer if scaling_matrix_present_flag is set
+    StdVideoH264SequenceParameterSetVui* pSequenceParameterSetVui;  // Must be a valid pointer if StdVideoH264SpsFlags:vui_parameters_present_flag is set
+} StdVideoH264SequenceParameterSet;
+
+typedef struct StdVideoH264PpsFlags {
+    uint32_t transform_8x8_mode_flag:1;
+    uint32_t redundant_pic_cnt_present_flag:1;
+    uint32_t constrained_intra_pred_flag:1;
+    uint32_t deblocking_filter_control_present_flag:1;
+    uint32_t weighted_bipred_idc_flag:1;
+    uint32_t weighted_pred_flag:1;
+    uint32_t pic_order_present_flag:1;
+    uint32_t entropy_coding_mode_flag:1;
+    uint32_t scaling_matrix_present_flag:1;
+} StdVideoH264PpsFlags;
+
+typedef struct StdVideoH264PictureParameterSet
+{
+    uint8_t                       seq_parameter_set_id;
+    uint8_t                       pic_parameter_set_id;
+    uint8_t                       num_ref_idx_l0_default_active_minus1;
+    uint8_t                       num_ref_idx_l1_default_active_minus1;
+    StdVideoH264WeightedBiPredIdc weighted_bipred_idc;
+    int8_t                        pic_init_qp_minus26;
+    int8_t                        pic_init_qs_minus26;
+    int8_t                        chroma_qp_index_offset;
+    int8_t                        second_chroma_qp_index_offset;
+    StdVideoH264PpsFlags          flags;
+    StdVideoH264ScalingLists*     pScalingLists; // Must be a valid pointer if  StdVideoH264PpsFlags::scaling_matrix_present_flag is set.
+} StdVideoH264PictureParameterSet;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // VULKAN_VIDEO_CODEC_H264STD_H_
diff --git a/external/vulkancts/scripts/src/vk_video/vulkan_video_codec_h264std_decode.h b/external/vulkancts/scripts/src/vk_video/vulkan_video_codec_h264std_decode.h
new file mode 100644
index 0000000..2b4fc64
--- /dev/null
+++ b/external/vulkancts/scripts/src/vk_video/vulkan_video_codec_h264std_decode.h
@@ -0,0 +1,87 @@
+/*
+** Copyright (c) 2019-2020 The Khronos Group Inc.
+**
+** SPDX-License-Identifier: Apache-2.0
+*/
+
+#ifndef VULKAN_VIDEO_CODEC_H264STD_DECODE_H_
+#define VULKAN_VIDEO_CODEC_H264STD_DECODE_H_ 1
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "vk_video/vulkan_video_codec_h264std.h"
+
+// *************************************************
+// Video H.264 Decode related parameters:
+// *************************************************
+
+typedef struct StdVideoDecodeH264PictureInfoFlags {
+    uint32_t field_pic_flag:1;             // Is field picture
+    uint32_t is_intra:1;                   // Is intra picture
+    uint32_t bottom_field_flag:1;          // bottom (true) or top (false) field if field_pic_flag is set.
+    uint32_t is_reference:1;               // This only applies to picture info, and not to the DPB lists.
+    uint32_t complementary_field_pair:1;   // complementary field pair, complementary non-reference field pair, complementary reference field pair
+} StdVideoDecodeH264PictureInfoFlags;
+
+typedef struct StdVideoDecodeH264PictureInfo {
+    uint8_t  seq_parameter_set_id;          // Selecting SPS from the Picture Parameters
+    uint8_t  pic_parameter_set_id;          // Selecting PPS from the Picture Parameters and the SPS
+    uint16_t reserved;                      // for structure members 32-bit packing/alignment
+    uint16_t frame_num;                     // 7.4.3 Slice header semantics
+    uint16_t idr_pic_id;                    // 7.4.3 Slice header semantics
+    // PicOrderCnt is based on TopFieldOrderCnt and BottomFieldOrderCnt. See 8.2.1 Decoding process for picture order count type 0 - 2
+    int32_t  PicOrderCnt[2];                // TopFieldOrderCnt and BottomFieldOrderCnt fields.
+    StdVideoDecodeH264PictureInfoFlags flags;
+} StdVideoDecodeH264PictureInfo;
+
+typedef struct StdVideoDecodeH264ReferenceInfoFlags {
+    uint32_t top_field_flag:1;             // Reference is used for top field reference.
+    uint32_t bottom_field_flag:1;          // Reference is used for bottom field reference.
+    uint32_t is_long_term:1;               // this is a long term reference
+    uint32_t is_non_existing:1;            // Must be handled in accordance with 8.2.5.2: Decoding process for gaps in frame_num
+} StdVideoDecodeH264ReferenceInfoFlags;
+
+typedef struct StdVideoDecodeH264ReferenceInfo {
+    // FrameNum = is_long_term ?  long_term_frame_idx : frame_num
+    uint16_t FrameNum;                     // 7.4.3.3 Decoded reference picture marking semantics
+    uint16_t reserved;                     // for structure members 32-bit packing/alignment
+    int32_t  PicOrderCnt[2];               // TopFieldOrderCnt and BottomFieldOrderCnt fields.
+    StdVideoDecodeH264ReferenceInfoFlags flags;
+} StdVideoDecodeH264ReferenceInfo;
+
+typedef struct StdVideoDecodeH264MvcElementFlags {
+    uint32_t non_idr:1;
+    uint32_t anchor_pic:1;
+    uint32_t inter_view:1;
+} StdVideoDecodeH264MvcElementFlags;
+
+typedef struct StdVideoDecodeH264MvcElement {
+    StdVideoDecodeH264MvcElementFlags flags;
+    uint16_t viewOrderIndex;
+    uint16_t viewId;
+    uint16_t temporalId; // move out?
+    uint16_t priorityId; // move out?
+    uint16_t numOfAnchorRefsInL0;
+    uint16_t viewIdOfAnchorRefsInL0[15];
+    uint16_t numOfAnchorRefsInL1;
+    uint16_t viewIdOfAnchorRefsInL1[15];
+    uint16_t numOfNonAnchorRefsInL0;
+    uint16_t viewIdOfNonAnchorRefsInL0[15];
+    uint16_t numOfNonAnchorRefsInL1;
+    uint16_t viewIdOfNonAnchorRefsInL1[15];
+} StdVideoDecodeH264MvcElement;
+
+typedef struct StdVideoDecodeH264Mvc {
+    uint32_t viewId0;
+    uint32_t mvcElementCount;
+    StdVideoDecodeH264MvcElement* pMvcElements;
+} StdVideoDecodeH264Mvc;
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // VULKAN_VIDEO_CODEC_H264STD_DECODE_H_
diff --git a/external/vulkancts/scripts/src/vk_video/vulkan_video_codec_h264std_encode.h b/external/vulkancts/scripts/src/vk_video/vulkan_video_codec_h264std_encode.h
new file mode 100644
index 0000000..7184562
--- /dev/null
+++ b/external/vulkancts/scripts/src/vk_video/vulkan_video_codec_h264std_encode.h
@@ -0,0 +1,94 @@
+/*
+** Copyright (c) 2019-2021 The Khronos Group Inc.
+**
+** SPDX-License-Identifier: Apache-2.0
+*/
+
+#ifndef VULKAN_VIDEO_CODEC_H264STD_ENCODE_H_
+#define VULKAN_VIDEO_CODEC_H264STD_ENCODE_H_ 1
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "vk_video/vulkan_video_codec_h264std.h"
+
+// *************************************************
+// Video H.264 Encode related parameters:
+// *************************************************
+
+typedef struct StdVideoEncodeH264SliceHeaderFlags {
+    uint32_t idr_flag:1;
+    uint32_t is_reference_flag:1;
+    uint32_t num_ref_idx_active_override_flag:1;
+    uint32_t no_output_of_prior_pics_flag:1;
+    uint32_t long_term_reference_flag:1;
+    uint32_t adaptive_ref_pic_marking_mode_flag:1;
+    uint32_t no_prior_references_available_flag:1;
+} StdVideoEncodeH264SliceHeaderFlags;
+
+typedef struct StdVideoEncodeH264PictureInfoFlags {
+    uint32_t idr_flag:1;
+    uint32_t is_reference_flag:1;
+    uint32_t long_term_reference_flag:1;
+} StdVideoEncodeH264PictureInfoFlags;
+
+typedef struct StdVideoEncodeH264RefMgmtFlags {
+    uint32_t ref_pic_list_modification_l0_flag:1;
+    uint32_t ref_pic_list_modification_l1_flag:1;
+} StdVideoEncodeH264RefMgmtFlags;
+
+typedef struct StdVideoEncodeH264RefListModEntry {
+    StdVideoH264ModificationOfPicNumsIdc modification_of_pic_nums_idc;
+    uint16_t                             abs_diff_pic_num_minus1;
+    uint16_t                             long_term_pic_num;
+} StdVideoEncodeH264RefListModEntry;
+
+typedef struct StdVideoEncodeH264RefPicMarkingEntry {
+    StdVideoH264MemMgmtControlOp  operation;
+    uint16_t                      difference_of_pic_nums_minus1;
+    uint16_t                      long_term_pic_num;
+    uint16_t                      long_term_frame_idx;
+    uint16_t                      max_long_term_frame_idx_plus1;
+} StdVideoEncodeH264RefPicMarkingEntry;
+
+typedef struct StdVideoEncodeH264RefMemMgmtCtrlOperations {
+    StdVideoEncodeH264RefMgmtFlags        flags;
+    uint8_t                               refList0ModOpCount;
+    StdVideoEncodeH264RefListModEntry*    pRefList0ModOperations;
+    uint8_t                               refList1ModOpCount;
+    StdVideoEncodeH264RefListModEntry*    pRefList1ModOperations;
+    uint8_t                               refPicMarkingOpCount;
+    StdVideoEncodeH264RefPicMarkingEntry* pRefPicMarkingOperations;
+} StdVideoEncodeH264RefMemMgmtCtrlOperations;
+
+typedef struct StdVideoEncodeH264PictureInfo {
+    StdVideoEncodeH264PictureInfoFlags   flags;
+    StdVideoH264PictureType              pictureType;
+    uint32_t                             frameNum;
+    uint32_t                             pictureOrderCount;
+    uint16_t                             long_term_pic_num;
+    uint16_t                             long_term_frame_idx;
+} StdVideoEncodeH264PictureInfo;
+
+typedef struct StdVideoEncodeH264SliceHeader {
+    StdVideoEncodeH264SliceHeaderFlags          flags;
+    StdVideoH264SliceType                       slice_type;
+    uint8_t                                     seq_parameter_set_id;
+    uint8_t                                     pic_parameter_set_id;
+    uint16_t                                    idr_pic_id;
+    uint8_t                                     num_ref_idx_l0_active_minus1;
+    uint8_t                                     num_ref_idx_l1_active_minus1;
+    StdVideoH264CabacInitIdc                    cabac_init_idc;
+    StdVideoH264DisableDeblockingFilterIdc      disable_deblocking_filter_idc;
+    int8_t                                      slice_alpha_c0_offset_div2;
+    int8_t                                      slice_beta_offset_div2;
+    StdVideoEncodeH264RefMemMgmtCtrlOperations* pMemMgmtCtrlOperations;
+} StdVideoEncodeH264SliceHeader;
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // VULKAN_VIDEO_CODEC_H264STD_ENCODE_H_
diff --git a/external/vulkancts/scripts/src/vk_video/vulkan_video_codec_h265std.h b/external/vulkancts/scripts/src/vk_video/vulkan_video_codec_h265std.h
new file mode 100644
index 0000000..185b550
--- /dev/null
+++ b/external/vulkancts/scripts/src/vk_video/vulkan_video_codec_h265std.h
@@ -0,0 +1,341 @@
+/*
+** Copyright (c) 2019-2021 The Khronos Group Inc.
+**
+** SPDX-License-Identifier: Apache-2.0
+*/
+
+#ifndef VULKAN_VIDEO_CODEC_H265STD_H_
+#define VULKAN_VIDEO_CODEC_H265STD_H_ 1
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "vk_video/vulkan_video_codecs_common.h"
+
+// Vulkan 0.5 version number WIP
+#define VK_STD_VULKAN_VIDEO_CODEC_H265_API_VERSION_0_5 VK_MAKE_VIDEO_STD_VERSION(0, 5, 0) // Patch version should always be set to 0
+
+// Format must be in the form XX.XX where the first two digits are the major and the second two, the minor.
+#define VK_STD_VULKAN_VIDEO_CODEC_H265_SPEC_VERSION   VK_STD_VULKAN_VIDEO_CODEC_H265_API_VERSION_0_5
+#define VK_STD_VULKAN_VIDEO_CODEC_H265_EXTENSION_NAME "VK_STD_vulkan_video_codec_h265"
+
+typedef enum StdVideoH265ChromaFormatIdc {
+    std_video_h265_chroma_format_idc_monochrome  = 0,
+    std_video_h265_chroma_format_idc_420         = 1,
+    std_video_h265_chroma_format_idc_422         = 2,
+    std_video_h265_chroma_format_idc_444         = 3,
+} StdVideoH265ChromaFormatIdc;
+
+typedef enum StdVideoH265ProfileIdc {
+    std_video_h265_profile_idc_main                     = 1,
+    std_video_h265_profile_idc_main_10                  = 2,
+    std_video_h265_profile_idc_main_still_picture       = 3,
+    std_video_h265_profile_idc_format_range_extensions  = 4,
+    std_video_h265_profile_idc_scc_extensions           = 9,
+    std_video_h265_profile_idc_invalid                  = 0x7FFFFFFF
+} StdVideoH265ProfileIdc;
+
+typedef enum StdVideoH265Level {
+    std_video_h265_level_1_0 = 0,
+    std_video_h265_level_2_0 = 1,
+    std_video_h265_level_2_1 = 2,
+    std_video_h265_level_3_0 = 3,
+    std_video_h265_level_3_1 = 4,
+    std_video_h265_level_4_0 = 5,
+    std_video_h265_level_4_1 = 6,
+    std_video_h265_level_5_0 = 7,
+    std_video_h265_level_5_1 = 8,
+    std_video_h265_level_5_2 = 9,
+    std_video_h265_level_6_0 = 10,
+    std_video_h265_level_6_1 = 11,
+    std_video_h265_level_6_2 = 12,
+    std_video_h265_level_invalid = 0x7FFFFFFF
+} StdVideoH265Level;
+
+
+typedef struct StdVideoH265DecPicBufMgr
+{
+    uint32_t max_latency_increase_plus1[7];
+    uint8_t  max_dec_pic_buffering_minus1[7];
+    uint8_t  max_num_reorder_pics[7];
+} StdVideoH265DecPicBufMgr;
+
+typedef struct StdVideoH265SubLayerHrdParameters {
+    uint32_t bit_rate_value_minus1[32];
+    uint32_t cpb_size_value_minus1[32];
+    uint32_t cpb_size_du_value_minus1[32];
+    uint32_t bit_rate_du_value_minus1[32];
+    uint32_t cbr_flag; // each bit represents a range of CpbCounts (bit 0 - cpb_cnt_minus1) per sub-layer
+} StdVideoH265SubLayerHrdParameters;
+
+typedef struct StdVideoH265HrdFlags {
+    uint32_t nal_hrd_parameters_present_flag : 1;
+    uint32_t vcl_hrd_parameters_present_flag : 1;
+    uint32_t sub_pic_hrd_params_present_flag : 1;
+    uint32_t sub_pic_cpb_params_in_pic_timing_sei_flag : 1;
+    uint8_t  fixed_pic_rate_general_flag; // each bit represents a sublayer, bit 0 - vps_max_sub_layers_minus1
+    uint8_t  fixed_pic_rate_within_cvs_flag; // each bit represents a sublayer, bit 0 - vps_max_sub_layers_minus1
+    uint8_t  low_delay_hrd_flag; // each bit represents a sublayer, bit 0 - vps_max_sub_layers_minus1
+} StdVideoH265HrdFlags;
+
+typedef struct StdVideoH265HrdParameters {
+    uint8_t                            tick_divisor_minus2;
+    uint8_t                            du_cpb_removal_delay_increment_length_minus1;
+    uint8_t                            dpb_output_delay_du_length_minus1;
+    uint8_t                            bit_rate_scale;
+    uint8_t                            cpb_size_scale;
+    uint8_t                            cpb_size_du_scale;
+    uint8_t                            initial_cpb_removal_delay_length_minus1;
+    uint8_t                            au_cpb_removal_delay_length_minus1;
+    uint8_t                            dpb_output_delay_length_minus1;
+    uint8_t                            cpb_cnt_minus1[7];
+    uint16_t                           elemental_duration_in_tc_minus1[7];
+    StdVideoH265SubLayerHrdParameters* SubLayerHrdParametersNal[7];
+    StdVideoH265SubLayerHrdParameters* SubLayerHrdParametersVcl[7];
+    StdVideoH265HrdFlags               flags;
+} StdVideoH265HrdParameters;
+
+typedef struct StdVideoH265VpsFlags {
+    uint32_t vps_temporal_id_nesting_flag : 1;
+    uint32_t vps_sub_layer_ordering_info_present_flag : 1;
+    uint32_t vps_timing_info_present_flag : 1;
+    uint32_t vps_poc_proportional_to_timing_flag : 1;
+} StdVideoH265VpsFlags;
+
+typedef struct StdVideoH265VideoParameterSet
+{
+    uint8_t                      vps_video_parameter_set_id;
+    uint8_t                      vps_max_sub_layers_minus1;
+    uint32_t                     vps_num_units_in_tick;
+    uint32_t                     vps_time_scale;
+    uint32_t                     vps_num_ticks_poc_diff_one_minus1;
+    StdVideoH265DecPicBufMgr*    pDecPicBufMgr;
+    StdVideoH265HrdParameters*   hrd_parameters;
+    StdVideoH265VpsFlags         flags;
+} StdVideoH265VideoParameterSet;
+
+typedef struct StdVideoH265ScalingLists
+{
+    uint8_t ScalingList4x4[6][16];       // ScalingList[ 0 ][ MatrixID ][ i ] (sizeID = 0)
+    uint8_t ScalingList8x8[6][64];       // ScalingList[ 1 ][ MatrixID ][ i ] (sizeID = 1)
+    uint8_t ScalingList16x16[6][64];     // ScalingList[ 2 ][ MatrixID ][ i ] (sizeID = 2)
+    uint8_t ScalingList32x32[2][64];     // ScalingList[ 3 ][ MatrixID ][ i ] (sizeID = 3)
+    uint8_t ScalingListDCCoef16x16[6];   // scaling_list_dc_coef_minus8[ sizeID - 2 ][ matrixID ] + 8, sizeID = 2
+    uint8_t ScalingListDCCoef32x32[2];   // scaling_list_dc_coef_minus8[ sizeID - 2 ][ matrixID ] + 8. sizeID = 3
+} StdVideoH265ScalingLists;
+
+typedef struct StdVideoH265SpsVuiFlags {
+    uint32_t aspect_ratio_info_present_flag : 1;
+    uint32_t overscan_info_present_flag : 1;
+    uint32_t overscan_appropriate_flag : 1;
+    uint32_t video_signal_type_present_flag : 1;
+    uint32_t video_full_range_flag : 1;
+    uint32_t colour_description_present_flag : 1;
+    uint32_t chroma_loc_info_present_flag : 1;
+    uint32_t neutral_chroma_indication_flag : 1;
+    uint32_t field_seq_flag : 1;
+    uint32_t frame_field_info_present_flag : 1;
+    uint32_t default_display_window_flag : 1;
+    uint32_t vui_timing_info_present_flag : 1;
+    uint32_t vui_poc_proportional_to_timing_flag : 1;
+    uint32_t vui_hrd_parameters_present_flag : 1;
+    uint32_t bitstream_restriction_flag : 1;
+    uint32_t tiles_fixed_structure_flag : 1;
+    uint32_t motion_vectors_over_pic_boundaries_flag : 1;
+    uint32_t restricted_ref_pic_lists_flag : 1;
+} StdVideoH265SpsVuiFlags;
+
+typedef struct StdVideoH265SequenceParameterSetVui {
+    uint8_t                     aspect_ratio_idc;
+    uint16_t                    sar_width;
+    uint16_t                    sar_height;
+    uint8_t                     video_format;
+    uint8_t                     colour_primaries;
+    uint8_t                     transfer_characteristics;
+    uint8_t                     matrix_coeffs;
+    uint8_t                     chroma_sample_loc_type_top_field;
+    uint8_t                     chroma_sample_loc_type_bottom_field;
+    uint16_t                    def_disp_win_left_offset;
+    uint16_t                    def_disp_win_right_offset;
+    uint16_t                    def_disp_win_top_offset;
+    uint16_t                    def_disp_win_bottom_offset;
+    uint32_t                    vui_num_units_in_tick;
+    uint32_t                    vui_time_scale;
+    uint32_t                    vui_num_ticks_poc_diff_one_minus1;
+    StdVideoH265HrdParameters*  hrd_parameters;
+    uint16_t                    min_spatial_segmentation_idc;
+    uint8_t                     max_bytes_per_pic_denom;
+    uint8_t                     max_bits_per_min_cu_denom;
+    uint8_t                     log2_max_mv_length_horizontal;
+    uint8_t                     log2_max_mv_length_vertical;
+    StdVideoH265SpsVuiFlags     flags;
+} StdVideoH265SequenceParameterSetVui;
+
+typedef struct StdVideoH265PredictorPaletteEntries
+{
+    uint16_t PredictorPaletteEntries[3][128];
+} StdVideoH265PredictorPaletteEntries;
+
+
+typedef struct StdVideoH265SpsFlags {
+    uint32_t sps_temporal_id_nesting_flag : 1;
+    uint32_t separate_colour_plane_flag : 1;
+    uint32_t scaling_list_enabled_flag : 1;
+    uint32_t sps_scaling_list_data_present_flag : 1;
+    uint32_t amp_enabled_flag : 1;
+    uint32_t sample_adaptive_offset_enabled_flag : 1;
+    uint32_t pcm_enabled_flag : 1;
+    uint32_t pcm_loop_filter_disabled_flag : 1;
+    uint32_t long_term_ref_pics_present_flag : 1;
+    uint32_t sps_temporal_mvp_enabled_flag : 1;
+    uint32_t strong_intra_smoothing_enabled_flag : 1;
+    uint32_t vui_parameters_present_flag : 1;
+    uint32_t sps_extension_present_flag : 1;
+    uint32_t sps_range_extension_flag : 1;
+
+    // extension SPS flags, valid when std_video_h265_profile_idc_format_range_extensions is set
+    uint32_t transform_skip_rotation_enabled_flag : 1;
+    uint32_t transform_skip_context_enabled_flag : 1;
+    uint32_t implicit_rdpcm_enabled_flag : 1;
+    uint32_t explicit_rdpcm_enabled_flag : 1;
+    uint32_t extended_precision_processing_flag : 1;
+    uint32_t intra_smoothing_disabled_flag : 1;
+    uint32_t high_precision_offsets_enabled_flag : 1;
+    uint32_t persistent_rice_adaptation_enabled_flag : 1;
+    uint32_t cabac_bypass_alignment_enabled_flag : 1;
+
+    // extension SPS flags, valid when std_video_h265_profile_idc_scc_extensions is set
+    uint32_t sps_curr_pic_ref_enabled_flag : 1;
+    uint32_t palette_mode_enabled_flag : 1;
+    uint32_t sps_palette_predictor_initializer_present_flag : 1;
+    uint32_t intra_boundary_filtering_disabled_flag : 1;
+} StdVideoH265SpsFlags;
+
+typedef struct StdVideoH265SequenceParameterSet
+{
+    StdVideoH265ProfileIdc               profile_idc;
+    StdVideoH265Level                    level_idc;
+    uint32_t                             pic_width_in_luma_samples;
+    uint32_t                             pic_height_in_luma_samples;
+    uint8_t                              sps_video_parameter_set_id;
+    uint8_t                              sps_max_sub_layers_minus1;
+    uint8_t                              sps_seq_parameter_set_id;
+    uint8_t                              chroma_format_idc;
+    uint8_t                              bit_depth_luma_minus8;
+    uint8_t                              bit_depth_chroma_minus8;
+    uint8_t                              log2_max_pic_order_cnt_lsb_minus4;
+    uint8_t                              sps_max_dec_pic_buffering_minus1;
+    uint8_t                              log2_min_luma_coding_block_size_minus3;
+    uint8_t                              log2_diff_max_min_luma_coding_block_size;
+    uint8_t                              log2_min_luma_transform_block_size_minus2;
+    uint8_t                              log2_diff_max_min_luma_transform_block_size;
+    uint8_t                              max_transform_hierarchy_depth_inter;
+    uint8_t                              max_transform_hierarchy_depth_intra;
+    uint8_t                              num_short_term_ref_pic_sets;
+    uint8_t                              num_long_term_ref_pics_sps;
+    uint8_t                              pcm_sample_bit_depth_luma_minus1;
+    uint8_t                              pcm_sample_bit_depth_chroma_minus1;
+    uint8_t                              log2_min_pcm_luma_coding_block_size_minus3;
+    uint8_t                              log2_diff_max_min_pcm_luma_coding_block_size;
+    uint32_t                             conf_win_left_offset;
+    uint32_t                             conf_win_right_offset;
+    uint32_t                             conf_win_top_offset;
+    uint32_t                             conf_win_bottom_offset;
+    StdVideoH265DecPicBufMgr*            pDecPicBufMgr;
+    StdVideoH265SpsFlags                 flags;
+    StdVideoH265ScalingLists*            pScalingLists;             // Must be a valid pointer if sps_scaling_list_data_present_flag is set
+    StdVideoH265SequenceParameterSetVui* pSequenceParameterSetVui;  // Must be a valid pointer if StdVideoH265SpsFlags:vui_parameters_present_flag is set palette_max_size;
+
+    // extension SPS flags, valid when std_video_h265_profile_idc_scc_extensions is set
+    uint8_t                              palette_max_size;
+    uint8_t                              delta_palette_max_predictor_size;
+    uint8_t                              motion_vector_resolution_control_idc;
+    uint8_t                              sps_num_palette_predictor_initializer_minus1;
+    StdVideoH265PredictorPaletteEntries* pPredictorPaletteEntries;  // Must be a valid pointer if sps_palette_predictor_initializer_present_flag is set
+} StdVideoH265SequenceParameterSet;
+
+
+typedef struct StdVideoH265PpsFlags {
+    uint32_t dependent_slice_segments_enabled_flag : 1;
+    uint32_t output_flag_present_flag : 1;
+    uint32_t sign_data_hiding_enabled_flag : 1;
+    uint32_t cabac_init_present_flag : 1;
+    uint32_t constrained_intra_pred_flag : 1;
+    uint32_t transform_skip_enabled_flag : 1;
+    uint32_t cu_qp_delta_enabled_flag : 1;
+    uint32_t pps_slice_chroma_qp_offsets_present_flag : 1;
+    uint32_t weighted_pred_flag : 1;
+    uint32_t weighted_bipred_flag : 1;
+    uint32_t transquant_bypass_enabled_flag : 1;
+    uint32_t tiles_enabled_flag : 1;
+    uint32_t entropy_coding_sync_enabled_flag : 1;
+    uint32_t uniform_spacing_flag : 1;
+    uint32_t loop_filter_across_tiles_enabled_flag : 1;
+    uint32_t pps_loop_filter_across_slices_enabled_flag : 1;
+    uint32_t deblocking_filter_control_present_flag : 1;
+    uint32_t deblocking_filter_override_enabled_flag : 1;
+    uint32_t pps_deblocking_filter_disabled_flag : 1;
+    uint32_t pps_scaling_list_data_present_flag : 1;
+    uint32_t lists_modification_present_flag : 1;
+    uint32_t slice_segment_header_extension_present_flag : 1;
+    uint32_t pps_extension_present_flag : 1;
+
+    // extension PPS flags, valid when std_video_h265_profile_idc_format_range_extensions is set
+    uint32_t cross_component_prediction_enabled_flag : 1;
+    uint32_t chroma_qp_offset_list_enabled_flag : 1;
+
+    // extension PPS flags, valid when std_video_h265_profile_idc_scc_extensions is set
+    uint32_t pps_curr_pic_ref_enabled_flag : 1;
+    uint32_t residual_adaptive_colour_transform_enabled_flag : 1;
+    uint32_t pps_slice_act_qp_offsets_present_flag : 1;
+    uint32_t pps_palette_predictor_initializer_present_flag : 1;
+    uint32_t monochrome_palette_flag : 1;
+    uint32_t pps_range_extension_flag : 1;
+} StdVideoH265PpsFlags;
+
+typedef struct StdVideoH265PictureParameterSet
+{
+    uint8_t                              pps_pic_parameter_set_id;
+    uint8_t                              pps_seq_parameter_set_id;
+    uint8_t                              num_extra_slice_header_bits;
+    uint8_t                              num_ref_idx_l0_default_active_minus1;
+    uint8_t                              num_ref_idx_l1_default_active_minus1;
+    int8_t                               init_qp_minus26;
+    uint8_t                              diff_cu_qp_delta_depth;
+    int8_t                               pps_cb_qp_offset;
+    int8_t                               pps_cr_qp_offset;
+    uint8_t                              num_tile_columns_minus1;
+    uint8_t                              num_tile_rows_minus1;
+    uint16_t                             column_width_minus1[19];
+    uint16_t                             row_height_minus1[21];
+    int8_t                               pps_beta_offset_div2;
+    int8_t                               pps_tc_offset_div2;
+    uint8_t                              log2_parallel_merge_level_minus2;
+    StdVideoH265PpsFlags                 flags;
+    StdVideoH265ScalingLists*            pScalingLists; // Must be a valid pointer if pps_scaling_list_data_present_flag is set
+
+    // extension PPS, valid when std_video_h265_profile_idc_format_range_extensions is set
+    uint8_t                              log2_max_transform_skip_block_size_minus2;
+    uint8_t                              diff_cu_chroma_qp_offset_depth;
+    uint8_t                              chroma_qp_offset_list_len_minus1;
+    int8_t                               cb_qp_offset_list[6];
+    int8_t                               cr_qp_offset_list[6];
+    uint8_t                              log2_sao_offset_scale_luma;
+    uint8_t                              log2_sao_offset_scale_chroma;
+
+    // extension PPS, valid when std_video_h265_profile_idc_scc_extensions is set
+    int8_t                               pps_act_y_qp_offset_plus5;
+    int8_t                               pps_act_cb_qp_offset_plus5;
+    int8_t                               pps_act_cr_qp_offset_plus5;
+    uint8_t                              pps_num_palette_predictor_initializer;
+    uint8_t                              luma_bit_depth_entry_minus8;
+    uint8_t                              chroma_bit_depth_entry_minus8;
+    StdVideoH265PredictorPaletteEntries* pPredictorPaletteEntries;  // Must be a valid pointer if pps_palette_predictor_initializer_present_flag is set
+} StdVideoH265PictureParameterSet;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // VULKAN_VIDEO_CODEC_H265STD_H_
diff --git a/external/vulkancts/scripts/src/vk_video/vulkan_video_codec_h265std_decode.h b/external/vulkancts/scripts/src/vk_video/vulkan_video_codec_h265std_decode.h
new file mode 100644
index 0000000..4be8b5f
--- /dev/null
+++ b/external/vulkancts/scripts/src/vk_video/vulkan_video_codec_h265std_decode.h
@@ -0,0 +1,59 @@
+/*
+** Copyright (c) 2019-2021 The Khronos Group Inc.
+**
+** SPDX-License-Identifier: Apache-2.0
+*/
+
+#ifndef VULKAN_VIDEO_CODEC_H265STD_DECODE_H_
+#define VULKAN_VIDEO_CODEC_H265STD_DECODE_H_ 1
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "vk_video/vulkan_video_codec_h265std.h"
+
+// *************************************************
+// Video h265 Decode related parameters:
+// *************************************************
+
+typedef struct StdVideoDecodeH265PictureInfoFlags {
+    uint32_t IrapPicFlag : 1;
+    uint32_t IdrPicFlag  : 1;
+    uint32_t IsReference : 1;
+    uint32_t short_term_ref_pic_set_sps_flag : 1;
+} StdVideoDecodeH265PictureInfoFlags;
+
+typedef struct StdVideoDecodeH265PictureInfo {
+    uint8_t                            vps_video_parameter_set_id;
+    uint8_t                            sps_seq_parameter_set_id;
+    uint8_t                            pps_pic_parameter_set_id;
+    uint8_t                            num_short_term_ref_pic_sets;
+    int32_t                            PicOrderCntVal;
+    uint16_t                           NumBitsForSTRefPicSetInSlice; // number of bits used in st_ref_pic_set()
+                                                                     //when short_term_ref_pic_set_sps_flag is 0; otherwise set to 0.
+    uint8_t                            NumDeltaPocsOfRefRpsIdx;      // NumDeltaPocs[ RefRpsIdx ] when short_term_ref_pic_set_sps_flag = 1, otherwise 0
+    uint8_t                            RefPicSetStCurrBefore[8];     // slotIndex as used in VkVideoReferenceSlotKHR structures representing
+                                                                     //pReferenceSlots in VkVideoDecodeInfoKHR, 0xff for invalid slotIndex
+    uint8_t                            RefPicSetStCurrAfter[8];      // slotIndex as used in VkVideoReferenceSlotKHR structures representing
+                                                                     //pReferenceSlots in VkVideoDecodeInfoKHR, 0xff for invalid slotIndex
+    uint8_t                            RefPicSetLtCurr[8];           // slotIndex as used in VkVideoReferenceSlotKHR structures representing
+                                                                     //pReferenceSlots in VkVideoDecodeInfoKHR, 0xff for invalid slotIndex
+    StdVideoDecodeH265PictureInfoFlags flags;
+} StdVideoDecodeH265PictureInfo;
+
+typedef struct StdVideoDecodeH265ReferenceInfoFlags {
+    uint32_t is_long_term : 1;
+    uint32_t is_non_existing : 1;
+} StdVideoDecodeH265ReferenceInfoFlags;
+
+typedef struct StdVideoDecodeH265ReferenceInfo {
+    int32_t                              PicOrderCntVal;
+    StdVideoDecodeH265ReferenceInfoFlags flags;
+} StdVideoDecodeH265ReferenceInfo;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // VULKAN_VIDEO_CODEC_H265STD_DECODE_H_
diff --git a/external/vulkancts/scripts/src/vk_video/vulkan_video_codecs_common.h b/external/vulkancts/scripts/src/vk_video/vulkan_video_codecs_common.h
new file mode 100644
index 0000000..8cc227a
--- /dev/null
+++ b/external/vulkancts/scripts/src/vk_video/vulkan_video_codecs_common.h
@@ -0,0 +1,21 @@
+/*
+** Copyright (c) 2019-2021 The Khronos Group Inc.
+**
+** SPDX-License-Identifier: Apache-2.0
+*/
+
+#ifndef VULKAN_VIDEO_CODEC_COMMON_H_
+#define VULKAN_VIDEO_CODEC_COMMON_H_ 1
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define VK_MAKE_VIDEO_STD_VERSION(major, minor, patch) \
+    ((((uint32_t)(major)) << 22) | (((uint32_t)(minor)) << 12) | ((uint32_t)(patch)))
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // VULKAN_VIDEO_CODEC_COMMON_H_
diff --git a/external/vulkancts/scripts/src/vulkan_android.h b/external/vulkancts/scripts/src/vulkan_android.h
index 50ef85f..2160e3e 100644
--- a/external/vulkancts/scripts/src/vulkan_android.h
+++ b/external/vulkancts/scripts/src/vulkan_android.h
@@ -2,7 +2,7 @@
 #define VULKAN_ANDROID_H_ 1
 
 /*
-** Copyright (c) 2015-2020 The Khronos Group Inc.
+** Copyright 2015-2021 The Khronos Group Inc.
 **
 ** SPDX-License-Identifier: Apache-2.0
 */
diff --git a/external/vulkancts/scripts/src/vulkan_beta.h b/external/vulkancts/scripts/src/vulkan_beta.h
index 23513b3..9aebb1a 100644
--- a/external/vulkancts/scripts/src/vulkan_beta.h
+++ b/external/vulkancts/scripts/src/vulkan_beta.h
@@ -2,7 +2,7 @@
 #define VULKAN_BETA_H_ 1
 
 /*
-** Copyright (c) 2015-2020 The Khronos Group Inc.
+** Copyright 2015-2021 The Khronos Group Inc.
 **
 ** SPDX-License-Identifier: Apache-2.0
 */
@@ -19,6 +19,325 @@
 
 
 
+#define VK_KHR_video_queue 1
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkVideoSessionKHR)
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkVideoSessionParametersKHR)
+#define VK_KHR_VIDEO_QUEUE_SPEC_VERSION   1
+#define VK_KHR_VIDEO_QUEUE_EXTENSION_NAME "VK_KHR_video_queue"
+
+typedef enum VkQueryResultStatusKHR {
+    VK_QUERY_RESULT_STATUS_ERROR_KHR = -1,
+    VK_QUERY_RESULT_STATUS_NOT_READY_KHR = 0,
+    VK_QUERY_RESULT_STATUS_COMPLETE_KHR = 1,
+    VK_QUERY_RESULT_STATUS_MAX_ENUM_KHR = 0x7FFFFFFF
+} VkQueryResultStatusKHR;
+
+typedef enum VkVideoCodecOperationFlagBitsKHR {
+    VK_VIDEO_CODEC_OPERATION_INVALID_BIT_KHR = 0,
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_VIDEO_CODEC_OPERATION_ENCODE_H264_BIT_EXT = 0x00010000,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_EXT = 0x00000001,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_EXT = 0x00000002,
+#endif
+    VK_VIDEO_CODEC_OPERATION_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
+} VkVideoCodecOperationFlagBitsKHR;
+typedef VkFlags VkVideoCodecOperationFlagsKHR;
+
+typedef enum VkVideoChromaSubsamplingFlagBitsKHR {
+    VK_VIDEO_CHROMA_SUBSAMPLING_INVALID_BIT_KHR = 0,
+    VK_VIDEO_CHROMA_SUBSAMPLING_MONOCHROME_BIT_KHR = 0x00000001,
+    VK_VIDEO_CHROMA_SUBSAMPLING_420_BIT_KHR = 0x00000002,
+    VK_VIDEO_CHROMA_SUBSAMPLING_422_BIT_KHR = 0x00000004,
+    VK_VIDEO_CHROMA_SUBSAMPLING_444_BIT_KHR = 0x00000008,
+    VK_VIDEO_CHROMA_SUBSAMPLING_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
+} VkVideoChromaSubsamplingFlagBitsKHR;
+typedef VkFlags VkVideoChromaSubsamplingFlagsKHR;
+
+typedef enum VkVideoComponentBitDepthFlagBitsKHR {
+    VK_VIDEO_COMPONENT_BIT_DEPTH_INVALID_KHR = 0,
+    VK_VIDEO_COMPONENT_BIT_DEPTH_8_BIT_KHR = 0x00000001,
+    VK_VIDEO_COMPONENT_BIT_DEPTH_10_BIT_KHR = 0x00000004,
+    VK_VIDEO_COMPONENT_BIT_DEPTH_12_BIT_KHR = 0x00000010,
+    VK_VIDEO_COMPONENT_BIT_DEPTH_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
+} VkVideoComponentBitDepthFlagBitsKHR;
+typedef VkFlags VkVideoComponentBitDepthFlagsKHR;
+
+typedef enum VkVideoCapabilitiesFlagBitsKHR {
+    VK_VIDEO_CAPABILITIES_PROTECTED_CONTENT_BIT_KHR = 0x00000001,
+    VK_VIDEO_CAPABILITIES_SEPARATE_REFERENCE_IMAGES_BIT_KHR = 0x00000002,
+    VK_VIDEO_CAPABILITIES_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
+} VkVideoCapabilitiesFlagBitsKHR;
+typedef VkFlags VkVideoCapabilitiesFlagsKHR;
+
+typedef enum VkVideoSessionCreateFlagBitsKHR {
+    VK_VIDEO_SESSION_CREATE_DEFAULT_KHR = 0,
+    VK_VIDEO_SESSION_CREATE_PROTECTED_CONTENT_BIT_KHR = 0x00000001,
+    VK_VIDEO_SESSION_CREATE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
+} VkVideoSessionCreateFlagBitsKHR;
+typedef VkFlags VkVideoSessionCreateFlagsKHR;
+typedef VkFlags VkVideoBeginCodingFlagsKHR;
+typedef VkFlags VkVideoEndCodingFlagsKHR;
+
+typedef enum VkVideoCodingControlFlagBitsKHR {
+    VK_VIDEO_CODING_CONTROL_DEFAULT_KHR = 0,
+    VK_VIDEO_CODING_CONTROL_RESET_BIT_KHR = 0x00000001,
+    VK_VIDEO_CODING_CONTROL_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
+} VkVideoCodingControlFlagBitsKHR;
+typedef VkFlags VkVideoCodingControlFlagsKHR;
+
+typedef enum VkVideoCodingQualityPresetFlagBitsKHR {
+    VK_VIDEO_CODING_QUALITY_PRESET_DEFAULT_BIT_KHR = 0,
+    VK_VIDEO_CODING_QUALITY_PRESET_NORMAL_BIT_KHR = 0x00000001,
+    VK_VIDEO_CODING_QUALITY_PRESET_POWER_BIT_KHR = 0x00000002,
+    VK_VIDEO_CODING_QUALITY_PRESET_QUALITY_BIT_KHR = 0x00000004,
+    VK_VIDEO_CODING_QUALITY_PRESET_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
+} VkVideoCodingQualityPresetFlagBitsKHR;
+typedef VkFlags VkVideoCodingQualityPresetFlagsKHR;
+typedef struct VkVideoQueueFamilyProperties2KHR {
+    VkStructureType                  sType;
+    void*                            pNext;
+    VkVideoCodecOperationFlagsKHR    videoCodecOperations;
+} VkVideoQueueFamilyProperties2KHR;
+
+typedef struct VkVideoProfileKHR {
+    VkStructureType                     sType;
+    void*                               pNext;
+    VkVideoCodecOperationFlagBitsKHR    videoCodecOperation;
+    VkVideoChromaSubsamplingFlagsKHR    chromaSubsampling;
+    VkVideoComponentBitDepthFlagsKHR    lumaBitDepth;
+    VkVideoComponentBitDepthFlagsKHR    chromaBitDepth;
+} VkVideoProfileKHR;
+
+typedef struct VkVideoProfilesKHR {
+    VkStructureType             sType;
+    void*                       pNext;
+    uint32_t                    profileCount;
+    const VkVideoProfileKHR*    pProfiles;
+} VkVideoProfilesKHR;
+
+typedef struct VkVideoCapabilitiesKHR {
+    VkStructureType                sType;
+    void*                          pNext;
+    VkVideoCapabilitiesFlagsKHR    capabilityFlags;
+    VkDeviceSize                   minBitstreamBufferOffsetAlignment;
+    VkDeviceSize                   minBitstreamBufferSizeAlignment;
+    VkExtent2D                     videoPictureExtentGranularity;
+    VkExtent2D                     minExtent;
+    VkExtent2D                     maxExtent;
+    uint32_t                       maxReferencePicturesSlotsCount;
+    uint32_t                       maxReferencePicturesActiveCount;
+} VkVideoCapabilitiesKHR;
+
+typedef struct VkPhysicalDeviceVideoFormatInfoKHR {
+    VkStructureType              sType;
+    const void*                  pNext;
+    VkImageUsageFlags            imageUsage;
+    const VkVideoProfilesKHR*    pVideoProfiles;
+} VkPhysicalDeviceVideoFormatInfoKHR;
+
+typedef struct VkVideoFormatPropertiesKHR {
+    VkStructureType    sType;
+    void*              pNext;
+    VkFormat           format;
+} VkVideoFormatPropertiesKHR;
+
+typedef struct VkVideoPictureResourceKHR {
+    VkStructureType    sType;
+    const void*        pNext;
+    VkOffset2D         codedOffset;
+    VkExtent2D         codedExtent;
+    uint32_t           baseArrayLayer;
+    VkImageView        imageViewBinding;
+} VkVideoPictureResourceKHR;
+
+typedef struct VkVideoReferenceSlotKHR {
+    VkStructureType                     sType;
+    const void*                         pNext;
+    int8_t                              slotIndex;
+    const VkVideoPictureResourceKHR*    pPictureResource;
+} VkVideoReferenceSlotKHR;
+
+typedef struct VkVideoGetMemoryPropertiesKHR {
+    VkStructureType           sType;
+    const void*               pNext;
+    uint32_t                  memoryBindIndex;
+    VkMemoryRequirements2*    pMemoryRequirements;
+} VkVideoGetMemoryPropertiesKHR;
+
+typedef struct VkVideoBindMemoryKHR {
+    VkStructureType    sType;
+    const void*        pNext;
+    uint32_t           memoryBindIndex;
+    VkDeviceMemory     memory;
+    VkDeviceSize       memoryOffset;
+    VkDeviceSize       memorySize;
+} VkVideoBindMemoryKHR;
+
+typedef struct VkVideoSessionCreateInfoKHR {
+    VkStructureType                 sType;
+    const void*                     pNext;
+    uint32_t                        queueFamilyIndex;
+    VkVideoSessionCreateFlagsKHR    flags;
+    const VkVideoProfileKHR*        pVideoProfile;
+    VkFormat                        pictureFormat;
+    VkExtent2D                      maxCodedExtent;
+    VkFormat                        referencePicturesFormat;
+    uint32_t                        maxReferencePicturesSlotsCount;
+    uint32_t                        maxReferencePicturesActiveCount;
+} VkVideoSessionCreateInfoKHR;
+
+typedef struct VkVideoSessionParametersCreateInfoKHR {
+    VkStructureType                sType;
+    const void*                    pNext;
+    VkVideoSessionParametersKHR    videoSessionParametersTemplate;
+    VkVideoSessionKHR              videoSession;
+} VkVideoSessionParametersCreateInfoKHR;
+
+typedef struct VkVideoSessionParametersUpdateInfoKHR {
+    VkStructureType    sType;
+    const void*        pNext;
+    uint32_t           updateSequenceCount;
+} VkVideoSessionParametersUpdateInfoKHR;
+
+typedef struct VkVideoBeginCodingInfoKHR {
+    VkStructureType                       sType;
+    const void*                           pNext;
+    VkVideoBeginCodingFlagsKHR            flags;
+    VkVideoCodingQualityPresetFlagsKHR    codecQualityPreset;
+    VkVideoSessionKHR                     videoSession;
+    VkVideoSessionParametersKHR           videoSessionParameters;
+    uint32_t                              referenceSlotCount;
+    const VkVideoReferenceSlotKHR*        pReferenceSlots;
+} VkVideoBeginCodingInfoKHR;
+
+typedef struct VkVideoEndCodingInfoKHR {
+    VkStructureType             sType;
+    const void*                 pNext;
+    VkVideoEndCodingFlagsKHR    flags;
+} VkVideoEndCodingInfoKHR;
+
+typedef struct VkVideoCodingControlInfoKHR {
+    VkStructureType                 sType;
+    const void*                     pNext;
+    VkVideoCodingControlFlagsKHR    flags;
+} VkVideoCodingControlInfoKHR;
+
+typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceVideoCapabilitiesKHR)(VkPhysicalDevice physicalDevice, const VkVideoProfileKHR* pVideoProfile, VkVideoCapabilitiesKHR* pCapabilities);
+typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceVideoFormatPropertiesKHR)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceVideoFormatInfoKHR* pVideoFormatInfo, uint32_t* pVideoFormatPropertyCount, VkVideoFormatPropertiesKHR* pVideoFormatProperties);
+typedef VkResult (VKAPI_PTR *PFN_vkCreateVideoSessionKHR)(VkDevice device, const VkVideoSessionCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkVideoSessionKHR* pVideoSession);
+typedef void (VKAPI_PTR *PFN_vkDestroyVideoSessionKHR)(VkDevice device, VkVideoSessionKHR videoSession, const VkAllocationCallbacks* pAllocator);
+typedef VkResult (VKAPI_PTR *PFN_vkGetVideoSessionMemoryRequirementsKHR)(VkDevice device, VkVideoSessionKHR videoSession, uint32_t* pVideoSessionMemoryRequirementsCount, VkVideoGetMemoryPropertiesKHR* pVideoSessionMemoryRequirements);
+typedef VkResult (VKAPI_PTR *PFN_vkBindVideoSessionMemoryKHR)(VkDevice device, VkVideoSessionKHR videoSession, uint32_t videoSessionBindMemoryCount, const VkVideoBindMemoryKHR* pVideoSessionBindMemories);
+typedef VkResult (VKAPI_PTR *PFN_vkCreateVideoSessionParametersKHR)(VkDevice device, const VkVideoSessionParametersCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkVideoSessionParametersKHR* pVideoSessionParameters);
+typedef VkResult (VKAPI_PTR *PFN_vkUpdateVideoSessionParametersKHR)(VkDevice device, VkVideoSessionParametersKHR videoSessionParameters, const VkVideoSessionParametersUpdateInfoKHR* pUpdateInfo);
+typedef void (VKAPI_PTR *PFN_vkDestroyVideoSessionParametersKHR)(VkDevice device, VkVideoSessionParametersKHR videoSessionParameters, const VkAllocationCallbacks* pAllocator);
+typedef void (VKAPI_PTR *PFN_vkCmdBeginVideoCodingKHR)(VkCommandBuffer commandBuffer, const VkVideoBeginCodingInfoKHR* pBeginInfo);
+typedef void (VKAPI_PTR *PFN_vkCmdEndVideoCodingKHR)(VkCommandBuffer commandBuffer, const VkVideoEndCodingInfoKHR* pEndCodingInfo);
+typedef void (VKAPI_PTR *PFN_vkCmdControlVideoCodingKHR)(VkCommandBuffer commandBuffer, const VkVideoCodingControlInfoKHR* pCodingControlInfo);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceVideoCapabilitiesKHR(
+    VkPhysicalDevice                            physicalDevice,
+    const VkVideoProfileKHR*                    pVideoProfile,
+    VkVideoCapabilitiesKHR*                     pCapabilities);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceVideoFormatPropertiesKHR(
+    VkPhysicalDevice                            physicalDevice,
+    const VkPhysicalDeviceVideoFormatInfoKHR*   pVideoFormatInfo,
+    uint32_t*                                   pVideoFormatPropertyCount,
+    VkVideoFormatPropertiesKHR*                 pVideoFormatProperties);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateVideoSessionKHR(
+    VkDevice                                    device,
+    const VkVideoSessionCreateInfoKHR*          pCreateInfo,
+    const VkAllocationCallbacks*                pAllocator,
+    VkVideoSessionKHR*                          pVideoSession);
+
+VKAPI_ATTR void VKAPI_CALL vkDestroyVideoSessionKHR(
+    VkDevice                                    device,
+    VkVideoSessionKHR                           videoSession,
+    const VkAllocationCallbacks*                pAllocator);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetVideoSessionMemoryRequirementsKHR(
+    VkDevice                                    device,
+    VkVideoSessionKHR                           videoSession,
+    uint32_t*                                   pVideoSessionMemoryRequirementsCount,
+    VkVideoGetMemoryPropertiesKHR*              pVideoSessionMemoryRequirements);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkBindVideoSessionMemoryKHR(
+    VkDevice                                    device,
+    VkVideoSessionKHR                           videoSession,
+    uint32_t                                    videoSessionBindMemoryCount,
+    const VkVideoBindMemoryKHR*                 pVideoSessionBindMemories);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateVideoSessionParametersKHR(
+    VkDevice                                    device,
+    const VkVideoSessionParametersCreateInfoKHR* pCreateInfo,
+    const VkAllocationCallbacks*                pAllocator,
+    VkVideoSessionParametersKHR*                pVideoSessionParameters);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkUpdateVideoSessionParametersKHR(
+    VkDevice                                    device,
+    VkVideoSessionParametersKHR                 videoSessionParameters,
+    const VkVideoSessionParametersUpdateInfoKHR* pUpdateInfo);
+
+VKAPI_ATTR void VKAPI_CALL vkDestroyVideoSessionParametersKHR(
+    VkDevice                                    device,
+    VkVideoSessionParametersKHR                 videoSessionParameters,
+    const VkAllocationCallbacks*                pAllocator);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdBeginVideoCodingKHR(
+    VkCommandBuffer                             commandBuffer,
+    const VkVideoBeginCodingInfoKHR*            pBeginInfo);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdEndVideoCodingKHR(
+    VkCommandBuffer                             commandBuffer,
+    const VkVideoEndCodingInfoKHR*              pEndCodingInfo);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdControlVideoCodingKHR(
+    VkCommandBuffer                             commandBuffer,
+    const VkVideoCodingControlInfoKHR*          pCodingControlInfo);
+#endif
+
+
+#define VK_KHR_video_decode_queue 1
+#define VK_KHR_VIDEO_DECODE_QUEUE_SPEC_VERSION 1
+#define VK_KHR_VIDEO_DECODE_QUEUE_EXTENSION_NAME "VK_KHR_video_decode_queue"
+
+typedef enum VkVideoDecodeFlagBitsKHR {
+    VK_VIDEO_DECODE_DEFAULT_KHR = 0,
+    VK_VIDEO_DECODE_RESERVED_0_BIT_KHR = 0x00000001,
+    VK_VIDEO_DECODE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
+} VkVideoDecodeFlagBitsKHR;
+typedef VkFlags VkVideoDecodeFlagsKHR;
+typedef struct VkVideoDecodeInfoKHR {
+    VkStructureType                   sType;
+    const void*                       pNext;
+    VkVideoDecodeFlagsKHR             flags;
+    VkOffset2D                        codedOffset;
+    VkExtent2D                        codedExtent;
+    VkBuffer                          srcBuffer;
+    VkDeviceSize                      srcBufferOffset;
+    VkDeviceSize                      srcBufferRange;
+    VkVideoPictureResourceKHR         dstPictureResource;
+    const VkVideoReferenceSlotKHR*    pSetupReferenceSlot;
+    uint32_t                          referenceSlotCount;
+    const VkVideoReferenceSlotKHR*    pReferenceSlots;
+} VkVideoDecodeInfoKHR;
+
+typedef void (VKAPI_PTR *PFN_vkCmdDecodeVideoKHR)(VkCommandBuffer commandBuffer, const VkVideoDecodeInfoKHR* pFrameInfo);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR void VKAPI_CALL vkCmdDecodeVideoKHR(
+    VkCommandBuffer                             commandBuffer,
+    const VkVideoDecodeInfoKHR*                 pFrameInfo);
+#endif
+
+
 #define VK_KHR_portability_subset 1
 #define VK_KHR_PORTABILITY_SUBSET_SPEC_VERSION 1
 #define VK_KHR_PORTABILITY_SUBSET_EXTENSION_NAME "VK_KHR_portability_subset"
@@ -49,6 +368,335 @@
 } VkPhysicalDevicePortabilitySubsetPropertiesKHR;
 
 
+
+#define VK_KHR_video_encode_queue 1
+#define VK_KHR_VIDEO_ENCODE_QUEUE_SPEC_VERSION 2
+#define VK_KHR_VIDEO_ENCODE_QUEUE_EXTENSION_NAME "VK_KHR_video_encode_queue"
+
+typedef enum VkVideoEncodeFlagBitsKHR {
+    VK_VIDEO_ENCODE_DEFAULT_KHR = 0,
+    VK_VIDEO_ENCODE_RESERVED_0_BIT_KHR = 0x00000001,
+    VK_VIDEO_ENCODE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
+} VkVideoEncodeFlagBitsKHR;
+typedef VkFlags VkVideoEncodeFlagsKHR;
+
+typedef enum VkVideoEncodeRateControlFlagBitsKHR {
+    VK_VIDEO_ENCODE_RATE_CONTROL_DEFAULT_KHR = 0,
+    VK_VIDEO_ENCODE_RATE_CONTROL_RESET_BIT_KHR = 0x00000001,
+    VK_VIDEO_ENCODE_RATE_CONTROL_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
+} VkVideoEncodeRateControlFlagBitsKHR;
+typedef VkFlags VkVideoEncodeRateControlFlagsKHR;
+
+typedef enum VkVideoEncodeRateControlModeFlagBitsKHR {
+    VK_VIDEO_ENCODE_RATE_CONTROL_MODE_NONE_BIT_KHR = 0,
+    VK_VIDEO_ENCODE_RATE_CONTROL_MODE_CBR_BIT_KHR = 1,
+    VK_VIDEO_ENCODE_RATE_CONTROL_MODE_VBR_BIT_KHR = 2,
+    VK_VIDEO_ENCODE_RATE_CONTROL_MODE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
+} VkVideoEncodeRateControlModeFlagBitsKHR;
+typedef VkFlags VkVideoEncodeRateControlModeFlagsKHR;
+typedef struct VkVideoEncodeInfoKHR {
+    VkStructureType                   sType;
+    const void*                       pNext;
+    VkVideoEncodeFlagsKHR             flags;
+    uint32_t                          qualityLevel;
+    VkExtent2D                        codedExtent;
+    VkBuffer                          dstBitstreamBuffer;
+    VkDeviceSize                      dstBitstreamBufferOffset;
+    VkDeviceSize                      dstBitstreamBufferMaxRange;
+    VkVideoPictureResourceKHR         srcPictureResource;
+    const VkVideoReferenceSlotKHR*    pSetupReferenceSlot;
+    uint32_t                          referenceSlotCount;
+    const VkVideoReferenceSlotKHR*    pReferenceSlots;
+} VkVideoEncodeInfoKHR;
+
+typedef struct VkVideoEncodeRateControlInfoKHR {
+    VkStructureType                            sType;
+    const void*                                pNext;
+    VkVideoEncodeRateControlFlagsKHR           flags;
+    VkVideoEncodeRateControlModeFlagBitsKHR    rateControlMode;
+    uint32_t                                   averageBitrate;
+    uint16_t                                   peakToAverageBitrateRatio;
+    uint16_t                                   frameRateNumerator;
+    uint16_t                                   frameRateDenominator;
+    uint32_t                                   virtualBufferSizeInMs;
+} VkVideoEncodeRateControlInfoKHR;
+
+typedef void (VKAPI_PTR *PFN_vkCmdEncodeVideoKHR)(VkCommandBuffer commandBuffer, const VkVideoEncodeInfoKHR* pEncodeInfo);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR void VKAPI_CALL vkCmdEncodeVideoKHR(
+    VkCommandBuffer                             commandBuffer,
+    const VkVideoEncodeInfoKHR*                 pEncodeInfo);
+#endif
+
+
+#define VK_EXT_video_encode_h264 1
+#include "vk_video/vulkan_video_codec_h264std.h"
+#include "vk_video/vulkan_video_codec_h264std_encode.h"
+#define VK_EXT_VIDEO_ENCODE_H264_SPEC_VERSION 1
+#define VK_EXT_VIDEO_ENCODE_H264_EXTENSION_NAME "VK_EXT_video_encode_h264"
+
+typedef enum VkVideoEncodeH264CapabilitiesFlagBitsEXT {
+    VK_VIDEO_ENCODE_H264_CAPABILITY_CABAC_BIT_EXT = 0x00000001,
+    VK_VIDEO_ENCODE_H264_CAPABILITY_CAVLC_BIT_EXT = 0x00000002,
+    VK_VIDEO_ENCODE_H264_CAPABILITY_WEIGHTED_BI_PRED_IMPLICIT_BIT_EXT = 0x00000004,
+    VK_VIDEO_ENCODE_H264_CAPABILITY_TRANSFORM_8X8_BIT_EXT = 0x00000008,
+    VK_VIDEO_ENCODE_H264_CAPABILITY_CHROMA_QP_OFFSET_BIT_EXT = 0x00000010,
+    VK_VIDEO_ENCODE_H264_CAPABILITY_SECOND_CHROMA_QP_OFFSET_BIT_EXT = 0x00000020,
+    VK_VIDEO_ENCODE_H264_CAPABILITY_DEBLOCKING_FILTER_DISABLED_BIT_EXT = 0x00000040,
+    VK_VIDEO_ENCODE_H264_CAPABILITY_DEBLOCKING_FILTER_ENABLED_BIT_EXT = 0x00000080,
+    VK_VIDEO_ENCODE_H264_CAPABILITY_DEBLOCKING_FILTER_PARTIAL_BIT_EXT = 0x00000100,
+    VK_VIDEO_ENCODE_H264_CAPABILITY_MULTIPLE_SLICE_PER_FRAME_BIT_EXT = 0x00000200,
+    VK_VIDEO_ENCODE_H264_CAPABILITY_EVENLY_DISTRIBUTED_SLICE_SIZE_BIT_EXT = 0x00000400,
+    VK_VIDEO_ENCODE_H264_CAPABILITIES_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF
+} VkVideoEncodeH264CapabilitiesFlagBitsEXT;
+typedef VkFlags VkVideoEncodeH264CapabilitiesFlagsEXT;
+
+typedef enum VkVideoEncodeH264InputModeFlagBitsEXT {
+    VK_VIDEO_ENCODE_H264_INPUT_MODE_FRAME_BIT_EXT = 0x00000001,
+    VK_VIDEO_ENCODE_H264_INPUT_MODE_SLICE_BIT_EXT = 0x00000002,
+    VK_VIDEO_ENCODE_H264_INPUT_MODE_NON_VCL_BIT_EXT = 0x00000004,
+    VK_VIDEO_ENCODE_H264_INPUT_MODE_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF
+} VkVideoEncodeH264InputModeFlagBitsEXT;
+typedef VkFlags VkVideoEncodeH264InputModeFlagsEXT;
+
+typedef enum VkVideoEncodeH264OutputModeFlagBitsEXT {
+    VK_VIDEO_ENCODE_H264_OUTPUT_MODE_FRAME_BIT_EXT = 0x00000001,
+    VK_VIDEO_ENCODE_H264_OUTPUT_MODE_SLICE_BIT_EXT = 0x00000002,
+    VK_VIDEO_ENCODE_H264_OUTPUT_MODE_NON_VCL_BIT_EXT = 0x00000004,
+    VK_VIDEO_ENCODE_H264_OUTPUT_MODE_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF
+} VkVideoEncodeH264OutputModeFlagBitsEXT;
+typedef VkFlags VkVideoEncodeH264OutputModeFlagsEXT;
+
+typedef enum VkVideoEncodeH264CreateFlagBitsEXT {
+    VK_VIDEO_ENCODE_H264_CREATE_DEFAULT_EXT = 0,
+    VK_VIDEO_ENCODE_H264_CREATE_RESERVED_0_BIT_EXT = 0x00000001,
+    VK_VIDEO_ENCODE_H264_CREATE_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF
+} VkVideoEncodeH264CreateFlagBitsEXT;
+typedef VkFlags VkVideoEncodeH264CreateFlagsEXT;
+typedef struct VkVideoEncodeH264CapabilitiesEXT {
+    VkStructureType                          sType;
+    const void*                              pNext;
+    VkVideoEncodeH264CapabilitiesFlagsEXT    flags;
+    VkVideoEncodeH264InputModeFlagsEXT       inputModeFlags;
+    VkVideoEncodeH264OutputModeFlagsEXT      outputModeFlags;
+    VkExtent2D                               minPictureSizeInMbs;
+    VkExtent2D                               maxPictureSizeInMbs;
+    VkExtent2D                               inputImageDataAlignment;
+    uint8_t                                  maxNumL0ReferenceForP;
+    uint8_t                                  maxNumL0ReferenceForB;
+    uint8_t                                  maxNumL1Reference;
+    uint8_t                                  qualityLevelCount;
+    VkExtensionProperties                    stdExtensionVersion;
+} VkVideoEncodeH264CapabilitiesEXT;
+
+typedef struct VkVideoEncodeH264SessionCreateInfoEXT {
+    VkStructureType                    sType;
+    const void*                        pNext;
+    VkVideoEncodeH264CreateFlagsEXT    flags;
+    VkExtent2D                         maxPictureSizeInMbs;
+    const VkExtensionProperties*       pStdExtensionVersion;
+} VkVideoEncodeH264SessionCreateInfoEXT;
+
+typedef struct VkVideoEncodeH264SessionParametersAddInfoEXT {
+    VkStructureType                            sType;
+    const void*                                pNext;
+    uint32_t                                   spsStdCount;
+    const StdVideoH264SequenceParameterSet*    pSpsStd;
+    uint32_t                                   ppsStdCount;
+    const StdVideoH264PictureParameterSet*     pPpsStd;
+} VkVideoEncodeH264SessionParametersAddInfoEXT;
+
+typedef struct VkVideoEncodeH264SessionParametersCreateInfoEXT {
+    VkStructureType                                        sType;
+    const void*                                            pNext;
+    uint32_t                                               maxSpsStdCount;
+    uint32_t                                               maxPpsStdCount;
+    const VkVideoEncodeH264SessionParametersAddInfoEXT*    pParametersAddInfo;
+} VkVideoEncodeH264SessionParametersCreateInfoEXT;
+
+typedef struct VkVideoEncodeH264DpbSlotInfoEXT {
+    VkStructureType                         sType;
+    const void*                             pNext;
+    int8_t                                  slotIndex;
+    const StdVideoEncodeH264PictureInfo*    pStdPictureInfo;
+} VkVideoEncodeH264DpbSlotInfoEXT;
+
+typedef struct VkVideoEncodeH264NaluSliceEXT {
+    VkStructureType                           sType;
+    const void*                               pNext;
+    const StdVideoEncodeH264SliceHeader*      pSliceHeaderStd;
+    uint32_t                                  mbCount;
+    uint8_t                                   refFinalList0EntryCount;
+    const VkVideoEncodeH264DpbSlotInfoEXT*    pRefFinalList0Entries;
+    uint8_t                                   refFinalList1EntryCount;
+    const VkVideoEncodeH264DpbSlotInfoEXT*    pRefFinalList1Entries;
+    uint32_t                                  precedingNaluBytes;
+    uint8_t                                   minQp;
+    uint8_t                                   maxQp;
+} VkVideoEncodeH264NaluSliceEXT;
+
+typedef struct VkVideoEncodeH264VclFrameInfoEXT {
+    VkStructureType                           sType;
+    const void*                               pNext;
+    uint8_t                                   refDefaultFinalList0EntryCount;
+    const VkVideoEncodeH264DpbSlotInfoEXT*    pRefDefaultFinalList0Entries;
+    uint8_t                                   refDefaultFinalList1EntryCount;
+    const VkVideoEncodeH264DpbSlotInfoEXT*    pRefDefaultFinalList1Entries;
+    uint32_t                                  naluSliceEntryCount;
+    const VkVideoEncodeH264NaluSliceEXT*      pNaluSliceEntries;
+    const VkVideoEncodeH264DpbSlotInfoEXT*    pCurrentPictureInfo;
+} VkVideoEncodeH264VclFrameInfoEXT;
+
+typedef struct VkVideoEncodeH264EmitPictureParametersEXT {
+    VkStructureType    sType;
+    const void*        pNext;
+    uint8_t            spsId;
+    VkBool32           emitSpsEnable;
+    uint32_t           ppsIdEntryCount;
+    const uint8_t*     ppsIdEntries;
+} VkVideoEncodeH264EmitPictureParametersEXT;
+
+typedef struct VkVideoEncodeH264ProfileEXT {
+    VkStructureType           sType;
+    const void*               pNext;
+    StdVideoH264ProfileIdc    stdProfileIdc;
+} VkVideoEncodeH264ProfileEXT;
+
+
+
+#define VK_EXT_video_decode_h264 1
+#include "vk_video/vulkan_video_codec_h264std_decode.h"
+#define VK_EXT_VIDEO_DECODE_H264_SPEC_VERSION 1
+#define VK_EXT_VIDEO_DECODE_H264_EXTENSION_NAME "VK_EXT_video_decode_h264"
+
+typedef enum VkVideoDecodeH264FieldLayoutFlagBitsEXT {
+    VK_VIDEO_DECODE_H264_PROGRESSIVE_PICTURES_ONLY_EXT = 0,
+    VK_VIDEO_DECODE_H264_FIELD_LAYOUT_LINE_INTERLACED_PLANE_BIT_EXT = 0x00000001,
+    VK_VIDEO_DECODE_H264_FIELD_LAYOUT_SEPARATE_INTERLACED_PLANE_BIT_EXT = 0x00000002,
+    VK_VIDEO_DECODE_H264_FIELD_LAYOUT_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF
+} VkVideoDecodeH264FieldLayoutFlagBitsEXT;
+typedef VkFlags VkVideoDecodeH264FieldLayoutFlagsEXT;
+typedef VkFlags VkVideoDecodeH264CreateFlagsEXT;
+typedef struct VkVideoDecodeH264ProfileEXT {
+    VkStructureType                         sType;
+    const void*                             pNext;
+    StdVideoH264ProfileIdc                  stdProfileIdc;
+    VkVideoDecodeH264FieldLayoutFlagsEXT    fieldLayout;
+} VkVideoDecodeH264ProfileEXT;
+
+typedef struct VkVideoDecodeH264CapabilitiesEXT {
+    VkStructureType          sType;
+    void*                    pNext;
+    uint32_t                 maxLevel;
+    VkOffset2D               fieldOffsetGranularity;
+    VkExtensionProperties    stdExtensionVersion;
+} VkVideoDecodeH264CapabilitiesEXT;
+
+typedef struct VkVideoDecodeH264SessionCreateInfoEXT {
+    VkStructureType                    sType;
+    const void*                        pNext;
+    VkVideoDecodeH264CreateFlagsEXT    flags;
+    const VkExtensionProperties*       pStdExtensionVersion;
+} VkVideoDecodeH264SessionCreateInfoEXT;
+
+typedef struct VkVideoDecodeH264SessionParametersAddInfoEXT {
+    VkStructureType                            sType;
+    const void*                                pNext;
+    uint32_t                                   spsStdCount;
+    const StdVideoH264SequenceParameterSet*    pSpsStd;
+    uint32_t                                   ppsStdCount;
+    const StdVideoH264PictureParameterSet*     pPpsStd;
+} VkVideoDecodeH264SessionParametersAddInfoEXT;
+
+typedef struct VkVideoDecodeH264SessionParametersCreateInfoEXT {
+    VkStructureType                                        sType;
+    const void*                                            pNext;
+    uint32_t                                               maxSpsStdCount;
+    uint32_t                                               maxPpsStdCount;
+    const VkVideoDecodeH264SessionParametersAddInfoEXT*    pParametersAddInfo;
+} VkVideoDecodeH264SessionParametersCreateInfoEXT;
+
+typedef struct VkVideoDecodeH264PictureInfoEXT {
+    VkStructureType                         sType;
+    const void*                             pNext;
+    const StdVideoDecodeH264PictureInfo*    pStdPictureInfo;
+    uint32_t                                slicesCount;
+    const uint32_t*                         pSlicesDataOffsets;
+} VkVideoDecodeH264PictureInfoEXT;
+
+typedef struct VkVideoDecodeH264MvcEXT {
+    VkStructureType                 sType;
+    const void*                     pNext;
+    const StdVideoDecodeH264Mvc*    pStdMvc;
+} VkVideoDecodeH264MvcEXT;
+
+typedef struct VkVideoDecodeH264DpbSlotInfoEXT {
+    VkStructureType                           sType;
+    const void*                               pNext;
+    const StdVideoDecodeH264ReferenceInfo*    pStdReferenceInfo;
+} VkVideoDecodeH264DpbSlotInfoEXT;
+
+
+
+#define VK_EXT_video_decode_h265 1
+#include "vk_video/vulkan_video_codec_h265std.h"
+#include "vk_video/vulkan_video_codec_h265std_decode.h"
+#define VK_EXT_VIDEO_DECODE_H265_SPEC_VERSION 1
+#define VK_EXT_VIDEO_DECODE_H265_EXTENSION_NAME "VK_EXT_video_decode_h265"
+typedef VkFlags VkVideoDecodeH265CreateFlagsEXT;
+typedef struct VkVideoDecodeH265ProfileEXT {
+    VkStructureType           sType;
+    const void*               pNext;
+    StdVideoH265ProfileIdc    stdProfileIdc;
+} VkVideoDecodeH265ProfileEXT;
+
+typedef struct VkVideoDecodeH265CapabilitiesEXT {
+    VkStructureType          sType;
+    void*                    pNext;
+    uint32_t                 maxLevel;
+    VkExtensionProperties    stdExtensionVersion;
+} VkVideoDecodeH265CapabilitiesEXT;
+
+typedef struct VkVideoDecodeH265SessionCreateInfoEXT {
+    VkStructureType                    sType;
+    const void*                        pNext;
+    VkVideoDecodeH265CreateFlagsEXT    flags;
+    const VkExtensionProperties*       pStdExtensionVersion;
+} VkVideoDecodeH265SessionCreateInfoEXT;
+
+typedef struct VkVideoDecodeH265SessionParametersAddInfoEXT {
+    VkStructureType                            sType;
+    const void*                                pNext;
+    uint32_t                                   spsStdCount;
+    const StdVideoH265SequenceParameterSet*    pSpsStd;
+    uint32_t                                   ppsStdCount;
+    const StdVideoH265PictureParameterSet*     pPpsStd;
+} VkVideoDecodeH265SessionParametersAddInfoEXT;
+
+typedef struct VkVideoDecodeH265SessionParametersCreateInfoEXT {
+    VkStructureType                                        sType;
+    const void*                                            pNext;
+    uint32_t                                               maxSpsStdCount;
+    uint32_t                                               maxPpsStdCount;
+    const VkVideoDecodeH265SessionParametersAddInfoEXT*    pParametersAddInfo;
+} VkVideoDecodeH265SessionParametersCreateInfoEXT;
+
+typedef struct VkVideoDecodeH265PictureInfoEXT {
+    VkStructureType                   sType;
+    const void*                       pNext;
+    StdVideoDecodeH265PictureInfo*    pStdPictureInfo;
+    uint32_t                          slicesCount;
+    const uint32_t*                   pSlicesDataOffsets;
+} VkVideoDecodeH265PictureInfoEXT;
+
+typedef struct VkVideoDecodeH265DpbSlotInfoEXT {
+    VkStructureType                           sType;
+    const void*                               pNext;
+    const StdVideoDecodeH265ReferenceInfo*    pStdReferenceInfo;
+} VkVideoDecodeH265DpbSlotInfoEXT;
+
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/external/vulkancts/scripts/src/vulkan_core.h b/external/vulkancts/scripts/src/vulkan_core.h
index 5efc972..f0407fa 100644
--- a/external/vulkancts/scripts/src/vulkan_core.h
+++ b/external/vulkancts/scripts/src/vulkan_core.h
@@ -25,35 +25,71 @@
 #define VK_DEFINE_HANDLE(object) typedef struct object##_T* object;
 
 
-#if !defined(VK_DEFINE_NON_DISPATCHABLE_HANDLE)
-#if defined(__LP64__) || defined(_WIN64) || (defined(__x86_64__) && !defined(__ILP32__) ) || defined(_M_X64) || defined(__ia64) || defined (_M_IA64) || defined(__aarch64__) || defined(__powerpc64__)
-        #define VK_DEFINE_NON_DISPATCHABLE_HANDLE(object) typedef struct object##_T *object;
-#else
-        #define VK_DEFINE_NON_DISPATCHABLE_HANDLE(object) typedef uint64_t object;
-#endif
+#ifndef VK_USE_64_BIT_PTR_DEFINES
+    #if defined(__LP64__) || defined(_WIN64) || (defined(__x86_64__) && !defined(__ILP32__) ) || defined(_M_X64) || defined(__ia64) || defined (_M_IA64) || defined(__aarch64__) || defined(__powerpc64__)
+        #define VK_USE_64_BIT_PTR_DEFINES 1
+    #else
+        #define VK_USE_64_BIT_PTR_DEFINES 0
+    #endif
 #endif
 
+
+#ifndef VK_DEFINE_NON_DISPATCHABLE_HANDLE
+    #if (VK_USE_64_BIT_PTR_DEFINES==1)
+        #if __cplusplus >= 201103L || (defined(_MSVC_LANG) && (_MSVC_LANG >= 201103L))
+            #define VK_NULL_HANDLE nullptr
+        #else
+            #define VK_NULL_HANDLE ((void*)0)
+        #endif
+    #else
+        #define VK_NULL_HANDLE 0ULL
+    #endif
+#endif
+#ifndef VK_NULL_HANDLE
+    #define VK_NULL_HANDLE 0
+#endif
+
+
+#ifndef VK_DEFINE_NON_DISPATCHABLE_HANDLE
+    #if (VK_USE_64_BIT_PTR_DEFINES==1)
+        #define VK_DEFINE_NON_DISPATCHABLE_HANDLE(object) typedef struct object##_T *object;
+    #else
+        #define VK_DEFINE_NON_DISPATCHABLE_HANDLE(object) typedef uint64_t object;
+    #endif
+#endif
+
+// DEPRECATED: This define is deprecated. VK_MAKE_API_VERSION should be used instead.
 #define VK_MAKE_VERSION(major, minor, patch) \
     ((((uint32_t)(major)) << 22) | (((uint32_t)(minor)) << 12) | ((uint32_t)(patch)))
 
 // DEPRECATED: This define has been removed. Specific version defines (e.g. VK_API_VERSION_1_0), or the VK_MAKE_VERSION macro, should be used instead.
 //#define VK_API_VERSION VK_MAKE_VERSION(1, 0, 0) // Patch version should always be set to 0
 
+#define VK_MAKE_API_VERSION(variant, major, minor, patch) \
+    ((((uint32_t)(variant)) << 29) | (((uint32_t)(major)) << 22) | (((uint32_t)(minor)) << 12) | ((uint32_t)(patch)))
+
 // Vulkan 1.0 version number
-#define VK_API_VERSION_1_0 VK_MAKE_VERSION(1, 0, 0)// Patch version should always be set to 0
+#define VK_API_VERSION_1_0 VK_MAKE_API_VERSION(0, 1, 0, 0)// Patch version should always be set to 0
 
 // Version of this file
-#define VK_HEADER_VERSION 170
+#define VK_HEADER_VERSION 176
 
 // Complete version of this file
-#define VK_HEADER_VERSION_COMPLETE VK_MAKE_VERSION(1, 2, VK_HEADER_VERSION)
+#define VK_HEADER_VERSION_COMPLETE VK_MAKE_API_VERSION(0, 1, 2, VK_HEADER_VERSION)
 
+// DEPRECATED: This define is deprecated. VK_API_VERSION_MAJOR should be used instead.
 #define VK_VERSION_MAJOR(version) ((uint32_t)(version) >> 22)
-#define VK_VERSION_MINOR(version) (((uint32_t)(version) >> 12) & 0x3ff)
-#define VK_VERSION_PATCH(version) ((uint32_t)(version) & 0xfff)
 
-#define VK_NULL_HANDLE 0
+// DEPRECATED: This define is deprecated. VK_API_VERSION_MINOR should be used instead.
+#define VK_VERSION_MINOR(version) (((uint32_t)(version) >> 12) & 0x3FFU)
 
+// DEPRECATED: This define is deprecated. VK_API_VERSION_PATCH should be used instead.
+#define VK_VERSION_PATCH(version) ((uint32_t)(version) & 0xFFFU)
+
+#define VK_API_VERSION_VARIANT(version) ((uint32_t)(version) >> 29)
+#define VK_API_VERSION_MAJOR(version) (((uint32_t)(version) >> 22) & 0x7FU)
+#define VK_API_VERSION_MINOR(version) (((uint32_t)(version) >> 12) & 0x3FFU)
+#define VK_API_VERSION_PATCH(version) ((uint32_t)(version) & 0xFFFU)
 typedef uint32_t VkBool32;
 typedef uint64_t VkDeviceAddress;
 typedef uint64_t VkDeviceSize;
@@ -85,20 +121,20 @@
 VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkFramebuffer)
 VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkCommandPool)
 #define VK_ATTACHMENT_UNUSED              (~0U)
-#define VK_FALSE                          0
-#define VK_LOD_CLAMP_NONE                 1000.0f
+#define VK_FALSE                          0U
+#define VK_LOD_CLAMP_NONE                 1000.0F
 #define VK_QUEUE_FAMILY_IGNORED           (~0U)
 #define VK_REMAINING_ARRAY_LAYERS         (~0U)
 #define VK_REMAINING_MIP_LEVELS           (~0U)
 #define VK_SUBPASS_EXTERNAL               (~0U)
-#define VK_TRUE                           1
+#define VK_TRUE                           1U
 #define VK_WHOLE_SIZE                     (~0ULL)
-#define VK_MAX_MEMORY_TYPES               32
-#define VK_MAX_MEMORY_HEAPS               16
-#define VK_MAX_PHYSICAL_DEVICE_NAME_SIZE  256
-#define VK_UUID_SIZE                      16
-#define VK_MAX_EXTENSION_NAME_SIZE        256
-#define VK_MAX_DESCRIPTION_SIZE           256
+#define VK_MAX_MEMORY_TYPES               32U
+#define VK_MAX_MEMORY_HEAPS               16U
+#define VK_MAX_PHYSICAL_DEVICE_NAME_SIZE  256U
+#define VK_UUID_SIZE                      16U
+#define VK_MAX_EXTENSION_NAME_SIZE        256U
+#define VK_MAX_DESCRIPTION_SIZE           256U
 
 typedef enum VkResult {
     VK_SUCCESS = 0,
@@ -334,6 +370,63 @@
     VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_NAME_INFO_EXT = 1000022000,
     VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_TAG_INFO_EXT = 1000022001,
     VK_STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT = 1000022002,
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_STRUCTURE_TYPE_VIDEO_PROFILE_KHR = 1000023000,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_STRUCTURE_TYPE_VIDEO_CAPABILITIES_KHR = 1000023001,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_STRUCTURE_TYPE_VIDEO_PICTURE_RESOURCE_KHR = 1000023002,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_STRUCTURE_TYPE_VIDEO_GET_MEMORY_PROPERTIES_KHR = 1000023003,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_STRUCTURE_TYPE_VIDEO_BIND_MEMORY_KHR = 1000023004,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_STRUCTURE_TYPE_VIDEO_SESSION_CREATE_INFO_KHR = 1000023005,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_STRUCTURE_TYPE_VIDEO_SESSION_PARAMETERS_CREATE_INFO_KHR = 1000023006,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_STRUCTURE_TYPE_VIDEO_SESSION_PARAMETERS_UPDATE_INFO_KHR = 1000023007,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_STRUCTURE_TYPE_VIDEO_BEGIN_CODING_INFO_KHR = 1000023008,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_STRUCTURE_TYPE_VIDEO_END_CODING_INFO_KHR = 1000023009,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_STRUCTURE_TYPE_VIDEO_CODING_CONTROL_INFO_KHR = 1000023010,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_STRUCTURE_TYPE_VIDEO_REFERENCE_SLOT_KHR = 1000023011,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_STRUCTURE_TYPE_VIDEO_QUEUE_FAMILY_PROPERTIES_2_KHR = 1000023012,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_STRUCTURE_TYPE_VIDEO_PROFILES_KHR = 1000023013,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_FORMAT_INFO_KHR = 1000023014,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_STRUCTURE_TYPE_VIDEO_FORMAT_PROPERTIES_KHR = 1000023015,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_STRUCTURE_TYPE_VIDEO_DECODE_INFO_KHR = 1000024000,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_STRUCTURE_TYPE_VIDEO_ENCODE_INFO_KHR = 1000299000,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_STRUCTURE_TYPE_VIDEO_ENCODE_RATE_CONTROL_INFO_KHR = 1000299001,
+#endif
     VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV = 1000026000,
     VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_BUFFER_CREATE_INFO_NV = 1000026001,
     VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV = 1000026002,
@@ -342,6 +435,57 @@
     VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_STREAM_CREATE_INFO_EXT = 1000028002,
     VK_STRUCTURE_TYPE_IMAGE_VIEW_HANDLE_INFO_NVX = 1000030000,
     VK_STRUCTURE_TYPE_IMAGE_VIEW_ADDRESS_PROPERTIES_NVX = 1000030001,
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_CAPABILITIES_EXT = 1000038000,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_SESSION_CREATE_INFO_EXT = 1000038001,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_SESSION_PARAMETERS_CREATE_INFO_EXT = 1000038002,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_SESSION_PARAMETERS_ADD_INFO_EXT = 1000038003,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_VCL_FRAME_INFO_EXT = 1000038004,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_DPB_SLOT_INFO_EXT = 1000038005,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_NALU_SLICE_EXT = 1000038006,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_EMIT_PICTURE_PARAMETERS_EXT = 1000038007,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_PROFILE_EXT = 1000038008,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_CAPABILITIES_EXT = 1000040000,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_SESSION_CREATE_INFO_EXT = 1000040001,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_PICTURE_INFO_EXT = 1000040002,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_MVC_EXT = 1000040003,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_PROFILE_EXT = 1000040004,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_SESSION_PARAMETERS_CREATE_INFO_EXT = 1000040005,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_SESSION_PARAMETERS_ADD_INFO_EXT = 1000040006,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_DPB_SLOT_INFO_EXT = 1000040007,
+#endif
     VK_STRUCTURE_TYPE_TEXTURE_LOD_GATHER_FORMAT_PROPERTIES_AMD = 1000041000,
     VK_STRUCTURE_TYPE_STREAM_DESCRIPTOR_SURFACE_CREATE_INFO_GGP = 1000049000,
     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CORNER_SAMPLED_IMAGE_FEATURES_NV = 1000050000,
@@ -468,8 +612,12 @@
     VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_PROPERTIES_EXT = 1000158005,
     VK_STRUCTURE_TYPE_VALIDATION_CACHE_CREATE_INFO_EXT = 1000160000,
     VK_STRUCTURE_TYPE_SHADER_MODULE_VALIDATION_CACHE_CREATE_INFO_EXT = 1000160001,
+#ifdef VK_ENABLE_BETA_EXTENSIONS
     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PORTABILITY_SUBSET_FEATURES_KHR = 1000163000,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PORTABILITY_SUBSET_PROPERTIES_KHR = 1000163001,
+#endif
     VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_SHADING_RATE_IMAGE_STATE_CREATE_INFO_NV = 1000164000,
     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_FEATURES_NV = 1000164001,
     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_PROPERTIES_NV = 1000164002,
@@ -497,6 +645,27 @@
     VK_STRUCTURE_TYPE_PIPELINE_COMPILER_CONTROL_CREATE_INFO_AMD = 1000183000,
     VK_STRUCTURE_TYPE_CALIBRATED_TIMESTAMP_INFO_EXT = 1000184000,
     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_AMD = 1000185000,
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_CAPABILITIES_EXT = 1000187000,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_SESSION_CREATE_INFO_EXT = 1000187001,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_SESSION_PARAMETERS_CREATE_INFO_EXT = 1000187002,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_SESSION_PARAMETERS_ADD_INFO_EXT = 1000187003,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_PROFILE_EXT = 1000187004,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_PICTURE_INFO_EXT = 1000187005,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_DPB_SLOT_INFO_EXT = 1000187006,
+#endif
     VK_STRUCTURE_TYPE_DEVICE_MEMORY_OVERALLOCATION_CREATE_INFO_AMD = 1000189000,
     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT = 1000190000,
     VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_EXT = 1000190001,
@@ -581,6 +750,10 @@
     VK_STRUCTURE_TYPE_GENERATED_COMMANDS_INFO_NV = 1000277005,
     VK_STRUCTURE_TYPE_GENERATED_COMMANDS_MEMORY_REQUIREMENTS_INFO_NV = 1000277006,
     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,
@@ -614,6 +787,7 @@
     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_PROPERTIES_NV = 1000326000,
     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_FEATURES_NV = 1000326001,
     VK_STRUCTURE_TYPE_PIPELINE_FRAGMENT_SHADING_RATE_ENUM_STATE_CREATE_INFO_NV = 1000326002,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_2_PLANE_444_FORMATS_FEATURES_EXT = 1000330000,
     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_FEATURES_EXT = 1000332000,
     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_PROPERTIES_EXT = 1000332001,
     VK_STRUCTURE_TYPE_COPY_COMMAND_TRANSFORM_INFO_QCOM = 1000333000,
@@ -634,6 +808,18 @@
     VK_STRUCTURE_TYPE_DIRECTFB_SURFACE_CREATE_INFO_EXT = 1000346000,
     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MUTABLE_DESCRIPTOR_TYPE_FEATURES_VALVE = 1000351000,
     VK_STRUCTURE_TYPE_MUTABLE_DESCRIPTOR_TYPE_CREATE_INFO_VALVE = 1000351002,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_INPUT_DYNAMIC_STATE_FEATURES_EXT = 1000352000,
+    VK_STRUCTURE_TYPE_VERTEX_INPUT_BINDING_DESCRIPTION_2_EXT = 1000352001,
+    VK_STRUCTURE_TYPE_VERTEX_INPUT_ATTRIBUTE_DESCRIPTION_2_EXT = 1000352002,
+    VK_STRUCTURE_TYPE_IMPORT_MEMORY_ZIRCON_HANDLE_INFO_FUCHSIA = 1000364000,
+    VK_STRUCTURE_TYPE_MEMORY_ZIRCON_HANDLE_PROPERTIES_FUCHSIA = 1000364001,
+    VK_STRUCTURE_TYPE_MEMORY_GET_ZIRCON_HANDLE_INFO_FUCHSIA = 1000364002,
+    VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_ZIRCON_HANDLE_INFO_FUCHSIA = 1000365000,
+    VK_STRUCTURE_TYPE_SEMAPHORE_GET_ZIRCON_HANDLE_INFO_FUCHSIA = 1000365001,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_2_FEATURES_EXT = 1000377000,
+    VK_STRUCTURE_TYPE_SCREEN_SURFACE_CREATE_INFO_QNX = 1000378000,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COLOR_WRITE_ENABLE_FEATURES_EXT = 1000381000,
+    VK_STRUCTURE_TYPE_PIPELINE_COLOR_WRITE_CREATE_INFO_EXT = 1000381001,
     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES,
     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETER_FEATURES = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES,
     VK_STRUCTURE_TYPE_DEBUG_REPORT_CREATE_INFO_EXT = VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT,
@@ -768,6 +954,24 @@
     VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL = 1000241002,
     VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL = 1000241003,
     VK_IMAGE_LAYOUT_PRESENT_SRC_KHR = 1000001002,
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_IMAGE_LAYOUT_VIDEO_DECODE_DST_KHR = 1000024000,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_IMAGE_LAYOUT_VIDEO_DECODE_SRC_KHR = 1000024001,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_IMAGE_LAYOUT_VIDEO_DECODE_DPB_KHR = 1000024002,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_IMAGE_LAYOUT_VIDEO_ENCODE_DST_KHR = 1000299000,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_IMAGE_LAYOUT_VIDEO_ENCODE_SRC_KHR = 1000299001,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_IMAGE_LAYOUT_VIDEO_ENCODE_DPB_KHR = 1000299002,
+#endif
     VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR = 1000111000,
     VK_IMAGE_LAYOUT_SHADING_RATE_OPTIMAL_NV = 1000164003,
     VK_IMAGE_LAYOUT_FRAGMENT_DENSITY_MAP_OPTIMAL_EXT = 1000218000,
@@ -817,6 +1021,12 @@
     VK_OBJECT_TYPE_DISPLAY_KHR = 1000002000,
     VK_OBJECT_TYPE_DISPLAY_MODE_KHR = 1000002001,
     VK_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT = 1000011000,
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_OBJECT_TYPE_VIDEO_SESSION_KHR = 1000023000,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_OBJECT_TYPE_VIDEO_SESSION_PARAMETERS_KHR = 1000023001,
+#endif
     VK_OBJECT_TYPE_DEBUG_UTILS_MESSENGER_EXT = 1000128000,
     VK_OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR = 1000150000,
     VK_OBJECT_TYPE_VALIDATION_CACHE_EXT = 1000160000,
@@ -1101,6 +1311,10 @@
     VK_FORMAT_ASTC_10x10_SFLOAT_BLOCK_EXT = 1000066011,
     VK_FORMAT_ASTC_12x10_SFLOAT_BLOCK_EXT = 1000066012,
     VK_FORMAT_ASTC_12x12_SFLOAT_BLOCK_EXT = 1000066013,
+    VK_FORMAT_G8_B8R8_2PLANE_444_UNORM_EXT = 1000330000,
+    VK_FORMAT_G10X6_B10X6R10X6_2PLANE_444_UNORM_3PACK16_EXT = 1000330001,
+    VK_FORMAT_G12X4_B12X4R12X4_2PLANE_444_UNORM_3PACK16_EXT = 1000330002,
+    VK_FORMAT_G16_B16R16_2PLANE_444_UNORM_EXT = 1000330003,
     VK_FORMAT_A4R4G4B4_UNORM_PACK16_EXT = 1000340000,
     VK_FORMAT_A4B4G4R4_UNORM_PACK16_EXT = 1000340001,
     VK_FORMAT_G8B8G8R8_422_UNORM_KHR = VK_FORMAT_G8B8G8R8_422_UNORM,
@@ -1167,6 +1381,12 @@
     VK_QUERY_TYPE_OCCLUSION = 0,
     VK_QUERY_TYPE_PIPELINE_STATISTICS = 1,
     VK_QUERY_TYPE_TIMESTAMP = 2,
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_QUERY_TYPE_RESULT_STATUS_ONLY_KHR = 1000023000,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_QUERY_TYPE_VIDEO_ENCODE_BITSTREAM_BUFFER_RANGE_KHR = 1000299000,
+#endif
     VK_QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT = 1000028004,
     VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR = 1000116000,
     VK_QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR = 1000150000,
@@ -1325,6 +1545,13 @@
     VK_DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE_EXT = 1000267009,
     VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE_EXT = 1000267010,
     VK_DYNAMIC_STATE_STENCIL_OP_EXT = 1000267011,
+    VK_DYNAMIC_STATE_VERTEX_INPUT_EXT = 1000352000,
+    VK_DYNAMIC_STATE_PATCH_CONTROL_POINTS_EXT = 1000377000,
+    VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE_EXT = 1000377001,
+    VK_DYNAMIC_STATE_DEPTH_BIAS_ENABLE_EXT = 1000377002,
+    VK_DYNAMIC_STATE_LOGIC_OP_EXT = 1000377003,
+    VK_DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE_EXT = 1000377004,
+    VK_DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXT = 1000381000,
     VK_DYNAMIC_STATE_MAX_ENUM = 0x7FFFFFFF
 } VkDynamicState;
 
@@ -1574,6 +1801,18 @@
     VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT = 0x00800000,
     VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT = 0x00010000,
     VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG = 0x00002000,
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_FORMAT_FEATURE_VIDEO_DECODE_OUTPUT_BIT_KHR = 0x02000000,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_FORMAT_FEATURE_VIDEO_DECODE_DPB_BIT_KHR = 0x04000000,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_FORMAT_FEATURE_VIDEO_ENCODE_INPUT_BIT_KHR = 0x08000000,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_FORMAT_FEATURE_VIDEO_ENCODE_DPB_BIT_KHR = 0x10000000,
+#endif
     VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR = 0x20000000,
     VK_FORMAT_FEATURE_FRAGMENT_DENSITY_MAP_BIT_EXT = 0x01000000,
     VK_FORMAT_FEATURE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR = 0x40000000,
@@ -1639,6 +1878,24 @@
     VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT = 0x00000020,
     VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT = 0x00000040,
     VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT = 0x00000080,
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_IMAGE_USAGE_VIDEO_DECODE_DST_BIT_KHR = 0x00000400,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_IMAGE_USAGE_VIDEO_DECODE_SRC_BIT_KHR = 0x00000800,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_IMAGE_USAGE_VIDEO_DECODE_DPB_BIT_KHR = 0x00001000,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_IMAGE_USAGE_VIDEO_ENCODE_DST_BIT_KHR = 0x00002000,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_IMAGE_USAGE_VIDEO_ENCODE_SRC_BIT_KHR = 0x00004000,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_IMAGE_USAGE_VIDEO_ENCODE_DPB_BIT_KHR = 0x00008000,
+#endif
     VK_IMAGE_USAGE_SHADING_RATE_IMAGE_BIT_NV = 0x00000100,
     VK_IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT = 0x00000200,
     VK_IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR = VK_IMAGE_USAGE_SHADING_RATE_IMAGE_BIT_NV,
@@ -1674,6 +1931,12 @@
     VK_QUEUE_TRANSFER_BIT = 0x00000004,
     VK_QUEUE_SPARSE_BINDING_BIT = 0x00000008,
     VK_QUEUE_PROTECTED_BIT = 0x00000010,
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_QUEUE_VIDEO_DECODE_BIT_KHR = 0x00000020,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_QUEUE_VIDEO_ENCODE_BIT_KHR = 0x00000040,
+#endif
     VK_QUEUE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
 } VkQueueFlagBits;
 typedef VkFlags VkQueueFlags;
@@ -1770,6 +2033,9 @@
     VK_QUERY_RESULT_WAIT_BIT = 0x00000002,
     VK_QUERY_RESULT_WITH_AVAILABILITY_BIT = 0x00000004,
     VK_QUERY_RESULT_PARTIAL_BIT = 0x00000008,
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_QUERY_RESULT_WITH_STATUS_BIT_KHR = 0x00000010,
+#endif
     VK_QUERY_RESULT_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
 } VkQueryResultFlagBits;
 typedef VkFlags VkQueryResultFlags;
@@ -1797,6 +2063,18 @@
     VK_BUFFER_USAGE_VERTEX_BUFFER_BIT = 0x00000080,
     VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT = 0x00000100,
     VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT = 0x00020000,
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_BUFFER_USAGE_VIDEO_DECODE_SRC_BIT_KHR = 0x00002000,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_BUFFER_USAGE_VIDEO_DECODE_DST_BIT_KHR = 0x00004000,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_BUFFER_USAGE_VIDEO_ENCODE_DST_BIT_KHR = 0x00008000,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    VK_BUFFER_USAGE_VIDEO_ENCODE_SRC_BIT_KHR = 0x00010000,
+#endif
     VK_BUFFER_USAGE_TRANSFORM_FEEDBACK_BUFFER_BIT_EXT = 0x00000800,
     VK_BUFFER_USAGE_TRANSFORM_FEEDBACK_COUNTER_BUFFER_BIT_EXT = 0x00001000,
     VK_BUFFER_USAGE_CONDITIONAL_RENDERING_BIT_EXT = 0x00000200,
@@ -4079,13 +4357,13 @@
 
 #define VK_VERSION_1_1 1
 // Vulkan 1.1 version number
-#define VK_API_VERSION_1_1 VK_MAKE_VERSION(1, 1, 0)// Patch version should always be set to 0
+#define VK_API_VERSION_1_1 VK_MAKE_API_VERSION(0, 1, 1, 0)// Patch version should always be set to 0
 
 VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSamplerYcbcrConversion)
 VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDescriptorUpdateTemplate)
-#define VK_MAX_DEVICE_GROUP_SIZE          32
-#define VK_LUID_SIZE                      8
-#define VK_QUEUE_FAMILY_EXTERNAL          (~0U-1)
+#define VK_MAX_DEVICE_GROUP_SIZE          32U
+#define VK_LUID_SIZE                      8U
+#define VK_QUEUE_FAMILY_EXTERNAL          (~1U)
 
 typedef enum VkPointClippingBehavior {
     VK_POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES = 0,
@@ -4192,6 +4470,7 @@
     VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID = 0x00000400,
     VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT = 0x00000080,
     VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT = 0x00000100,
+    VK_EXTERNAL_MEMORY_HANDLE_TYPE_ZIRCON_VMO_BIT_FUCHSIA = 0x00000800,
     VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT_KHR = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT,
     VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT,
     VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_KHR = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT,
@@ -4256,6 +4535,7 @@
     VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT = 0x00000004,
     VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT = 0x00000008,
     VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT = 0x00000010,
+    VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_ZIRCON_EVENT_BIT_FUCHSIA = 0x00000080,
     VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D11_FENCE_BIT = VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT,
     VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT_KHR = VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT,
     VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR = VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT,
@@ -4941,10 +5221,10 @@
 
 #define VK_VERSION_1_2 1
 // Vulkan 1.2 version number
-#define VK_API_VERSION_1_2 VK_MAKE_VERSION(1, 2, 0)// Patch version should always be set to 0
+#define VK_API_VERSION_1_2 VK_MAKE_API_VERSION(0, 1, 2, 0)// Patch version should always be set to 0
 
-#define VK_MAX_DRIVER_NAME_SIZE           256
-#define VK_MAX_DRIVER_INFO_SIZE           256
+#define VK_MAX_DRIVER_NAME_SIZE           256U
+#define VK_MAX_DRIVER_INFO_SIZE           256U
 
 typedef enum VkDriverId {
     VK_DRIVER_ID_AMD_PROPRIETARY = 1,
@@ -4961,6 +5241,8 @@
     VK_DRIVER_ID_BROADCOM_PROPRIETARY = 12,
     VK_DRIVER_ID_MESA_LLVMPIPE = 13,
     VK_DRIVER_ID_MOLTENVK = 14,
+    VK_DRIVER_ID_COREAVI_PROPRIETARY = 15,
+    VK_DRIVER_ID_SAMSUNG_PROPRIETARY = 21,
     VK_DRIVER_ID_AMD_PROPRIETARY_KHR = VK_DRIVER_ID_AMD_PROPRIETARY,
     VK_DRIVER_ID_AMD_OPEN_SOURCE_KHR = VK_DRIVER_ID_AMD_OPEN_SOURCE,
     VK_DRIVER_ID_MESA_RADV_KHR = VK_DRIVER_ID_MESA_RADV,
@@ -6477,7 +6759,7 @@
 
 
 #define VK_KHR_incremental_present 1
-#define VK_KHR_INCREMENTAL_PRESENT_SPEC_VERSION 1
+#define VK_KHR_INCREMENTAL_PRESENT_SPEC_VERSION 2
 #define VK_KHR_INCREMENTAL_PRESENT_EXTENSION_NAME "VK_KHR_incremental_present"
 typedef struct VkRectLayerKHR {
     VkOffset2D    offset;
@@ -7523,6 +7805,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"
@@ -7546,84 +7874,106 @@
 #define VK_KHR_SYNCHRONIZATION_2_EXTENSION_NAME "VK_KHR_synchronization2"
 typedef VkFlags64 VkPipelineStageFlags2KHR;
 
-// Flag bits for VkPipelineStageFlags2KHR
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_NONE_KHR = 0;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_TOP_OF_PIPE_BIT_KHR = 0x00000001;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_DRAW_INDIRECT_BIT_KHR = 0x00000002;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_VERTEX_INPUT_BIT_KHR = 0x00000004;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_VERTEX_SHADER_BIT_KHR = 0x00000008;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_TESSELLATION_CONTROL_SHADER_BIT_KHR = 0x00000010;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_TESSELLATION_EVALUATION_SHADER_BIT_KHR = 0x00000020;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_GEOMETRY_SHADER_BIT_KHR = 0x00000040;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT_KHR = 0x00000080;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT_KHR = 0x00000100;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT_KHR = 0x00000200;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT_KHR = 0x00000400;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT_KHR = 0x00000800;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_ALL_TRANSFER_BIT_KHR = 0x00001000;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_TRANSFER_BIT_KHR = 0x00001000;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_BOTTOM_OF_PIPE_BIT_KHR = 0x00002000;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_HOST_BIT_KHR = 0x00004000;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR = 0x00008000;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR = 0x00010000;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_COPY_BIT_KHR = 0x100000000ULL;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_RESOLVE_BIT_KHR = 0x200000000ULL;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_BLIT_BIT_KHR = 0x400000000ULL;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_CLEAR_BIT_KHR = 0x800000000ULL;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_INDEX_INPUT_BIT_KHR = 0x1000000000ULL;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_VERTEX_ATTRIBUTE_INPUT_BIT_KHR = 0x2000000000ULL;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_PRE_RASTERIZATION_SHADERS_BIT_KHR = 0x4000000000ULL;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT = 0x01000000;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_CONDITIONAL_RENDERING_BIT_EXT = 0x00040000;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_COMMAND_PREPROCESS_BIT_NV = 0x00020000;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR = 0x00400000;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_SHADING_RATE_IMAGE_BIT_NV = 0x00400000;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR = 0x02000000;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_KHR = 0x00200000;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_NV = 0x00200000;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_NV = 0x02000000;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_FRAGMENT_DENSITY_PROCESS_BIT_EXT = 0x00800000;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_TASK_SHADER_BIT_NV = 0x00080000;
-static const VkPipelineStageFlags2KHR VK_PIPELINE_STAGE_2_MESH_SHADER_BIT_NV = 0x00100000;
+// Flag bits for VkPipelineStageFlagBits2KHR
+typedef VkFlags64 VkPipelineStageFlagBits2KHR;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_NONE_KHR = 0ULL;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_TOP_OF_PIPE_BIT_KHR = 0x00000001ULL;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_DRAW_INDIRECT_BIT_KHR = 0x00000002ULL;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_VERTEX_INPUT_BIT_KHR = 0x00000004ULL;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_VERTEX_SHADER_BIT_KHR = 0x00000008ULL;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_TESSELLATION_CONTROL_SHADER_BIT_KHR = 0x00000010ULL;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_TESSELLATION_EVALUATION_SHADER_BIT_KHR = 0x00000020ULL;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_GEOMETRY_SHADER_BIT_KHR = 0x00000040ULL;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT_KHR = 0x00000080ULL;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT_KHR = 0x00000100ULL;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT_KHR = 0x00000200ULL;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT_KHR = 0x00000400ULL;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT_KHR = 0x00000800ULL;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_ALL_TRANSFER_BIT_KHR = 0x00001000ULL;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_TRANSFER_BIT_KHR = 0x00001000;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_BOTTOM_OF_PIPE_BIT_KHR = 0x00002000ULL;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_HOST_BIT_KHR = 0x00004000ULL;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR = 0x00008000ULL;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR = 0x00010000ULL;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_COPY_BIT_KHR = 0x100000000ULL;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_RESOLVE_BIT_KHR = 0x200000000ULL;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_BLIT_BIT_KHR = 0x400000000ULL;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_CLEAR_BIT_KHR = 0x800000000ULL;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_INDEX_INPUT_BIT_KHR = 0x1000000000ULL;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_VERTEX_ATTRIBUTE_INPUT_BIT_KHR = 0x2000000000ULL;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_PRE_RASTERIZATION_SHADERS_BIT_KHR = 0x4000000000ULL;
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_VIDEO_DECODE_BIT_KHR = 0x04000000ULL;
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_VIDEO_ENCODE_BIT_KHR = 0x08000000ULL;
+#endif
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT = 0x01000000ULL;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_CONDITIONAL_RENDERING_BIT_EXT = 0x00040000ULL;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_COMMAND_PREPROCESS_BIT_NV = 0x00020000ULL;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR = 0x00400000ULL;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_SHADING_RATE_IMAGE_BIT_NV = 0x00400000;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR = 0x02000000ULL;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_KHR = 0x00200000ULL;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_NV = 0x00200000;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_NV = 0x02000000;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_FRAGMENT_DENSITY_PROCESS_BIT_EXT = 0x00800000ULL;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_TASK_SHADER_BIT_NV = 0x00080000ULL;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_MESH_SHADER_BIT_NV = 0x00100000ULL;
+static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_FLAG_BITS_2KHR_MAX_ENUM_KHR = 0x7FFFFFFFFFFFFFFFULL;
 
 typedef VkFlags64 VkAccessFlags2KHR;
 
-// Flag bits for VkAccessFlags2KHR
-static const VkAccessFlags2KHR VK_ACCESS_2_NONE_KHR = 0;
-static const VkAccessFlags2KHR VK_ACCESS_2_INDIRECT_COMMAND_READ_BIT_KHR = 0x00000001;
-static const VkAccessFlags2KHR VK_ACCESS_2_INDEX_READ_BIT_KHR = 0x00000002;
-static const VkAccessFlags2KHR VK_ACCESS_2_VERTEX_ATTRIBUTE_READ_BIT_KHR = 0x00000004;
-static const VkAccessFlags2KHR VK_ACCESS_2_UNIFORM_READ_BIT_KHR = 0x00000008;
-static const VkAccessFlags2KHR VK_ACCESS_2_INPUT_ATTACHMENT_READ_BIT_KHR = 0x00000010;
-static const VkAccessFlags2KHR VK_ACCESS_2_SHADER_READ_BIT_KHR = 0x00000020;
-static const VkAccessFlags2KHR VK_ACCESS_2_SHADER_WRITE_BIT_KHR = 0x00000040;
-static const VkAccessFlags2KHR VK_ACCESS_2_COLOR_ATTACHMENT_READ_BIT_KHR = 0x00000080;
-static const VkAccessFlags2KHR VK_ACCESS_2_COLOR_ATTACHMENT_WRITE_BIT_KHR = 0x00000100;
-static const VkAccessFlags2KHR VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_READ_BIT_KHR = 0x00000200;
-static const VkAccessFlags2KHR VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT_KHR = 0x00000400;
-static const VkAccessFlags2KHR VK_ACCESS_2_TRANSFER_READ_BIT_KHR = 0x00000800;
-static const VkAccessFlags2KHR VK_ACCESS_2_TRANSFER_WRITE_BIT_KHR = 0x00001000;
-static const VkAccessFlags2KHR VK_ACCESS_2_HOST_READ_BIT_KHR = 0x00002000;
-static const VkAccessFlags2KHR VK_ACCESS_2_HOST_WRITE_BIT_KHR = 0x00004000;
-static const VkAccessFlags2KHR VK_ACCESS_2_MEMORY_READ_BIT_KHR = 0x00008000;
-static const VkAccessFlags2KHR VK_ACCESS_2_MEMORY_WRITE_BIT_KHR = 0x00010000;
-static const VkAccessFlags2KHR VK_ACCESS_2_SHADER_SAMPLED_READ_BIT_KHR = 0x100000000ULL;
-static const VkAccessFlags2KHR VK_ACCESS_2_SHADER_STORAGE_READ_BIT_KHR = 0x200000000ULL;
-static const VkAccessFlags2KHR VK_ACCESS_2_SHADER_STORAGE_WRITE_BIT_KHR = 0x400000000ULL;
-static const VkAccessFlags2KHR VK_ACCESS_2_TRANSFORM_FEEDBACK_WRITE_BIT_EXT = 0x02000000;
-static const VkAccessFlags2KHR VK_ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT = 0x04000000;
-static const VkAccessFlags2KHR VK_ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT = 0x08000000;
-static const VkAccessFlags2KHR VK_ACCESS_2_CONDITIONAL_RENDERING_READ_BIT_EXT = 0x00100000;
-static const VkAccessFlags2KHR VK_ACCESS_2_COMMAND_PREPROCESS_READ_BIT_NV = 0x00020000;
-static const VkAccessFlags2KHR VK_ACCESS_2_COMMAND_PREPROCESS_WRITE_BIT_NV = 0x00040000;
-static const VkAccessFlags2KHR VK_ACCESS_2_FRAGMENT_SHADING_RATE_ATTACHMENT_READ_BIT_KHR = 0x00800000;
-static const VkAccessFlags2KHR VK_ACCESS_2_SHADING_RATE_IMAGE_READ_BIT_NV = 0x00800000;
-static const VkAccessFlags2KHR VK_ACCESS_2_ACCELERATION_STRUCTURE_READ_BIT_KHR = 0x00200000;
-static const VkAccessFlags2KHR VK_ACCESS_2_ACCELERATION_STRUCTURE_WRITE_BIT_KHR = 0x00400000;
-static const VkAccessFlags2KHR VK_ACCESS_2_ACCELERATION_STRUCTURE_READ_BIT_NV = 0x00200000;
-static const VkAccessFlags2KHR VK_ACCESS_2_ACCELERATION_STRUCTURE_WRITE_BIT_NV = 0x00400000;
-static const VkAccessFlags2KHR VK_ACCESS_2_FRAGMENT_DENSITY_MAP_READ_BIT_EXT = 0x01000000;
-static const VkAccessFlags2KHR VK_ACCESS_2_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT = 0x00080000;
+// Flag bits for VkAccessFlagBits2KHR
+typedef VkFlags64 VkAccessFlagBits2KHR;
+static const VkAccessFlagBits2KHR VK_ACCESS_2_NONE_KHR = 0ULL;
+static const VkAccessFlagBits2KHR VK_ACCESS_2_INDIRECT_COMMAND_READ_BIT_KHR = 0x00000001ULL;
+static const VkAccessFlagBits2KHR VK_ACCESS_2_INDEX_READ_BIT_KHR = 0x00000002ULL;
+static const VkAccessFlagBits2KHR VK_ACCESS_2_VERTEX_ATTRIBUTE_READ_BIT_KHR = 0x00000004ULL;
+static const VkAccessFlagBits2KHR VK_ACCESS_2_UNIFORM_READ_BIT_KHR = 0x00000008ULL;
+static const VkAccessFlagBits2KHR VK_ACCESS_2_INPUT_ATTACHMENT_READ_BIT_KHR = 0x00000010ULL;
+static const VkAccessFlagBits2KHR VK_ACCESS_2_SHADER_READ_BIT_KHR = 0x00000020ULL;
+static const VkAccessFlagBits2KHR VK_ACCESS_2_SHADER_WRITE_BIT_KHR = 0x00000040ULL;
+static const VkAccessFlagBits2KHR VK_ACCESS_2_COLOR_ATTACHMENT_READ_BIT_KHR = 0x00000080ULL;
+static const VkAccessFlagBits2KHR VK_ACCESS_2_COLOR_ATTACHMENT_WRITE_BIT_KHR = 0x00000100ULL;
+static const VkAccessFlagBits2KHR VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_READ_BIT_KHR = 0x00000200ULL;
+static const VkAccessFlagBits2KHR VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT_KHR = 0x00000400ULL;
+static const VkAccessFlagBits2KHR VK_ACCESS_2_TRANSFER_READ_BIT_KHR = 0x00000800ULL;
+static const VkAccessFlagBits2KHR VK_ACCESS_2_TRANSFER_WRITE_BIT_KHR = 0x00001000ULL;
+static const VkAccessFlagBits2KHR VK_ACCESS_2_HOST_READ_BIT_KHR = 0x00002000ULL;
+static const VkAccessFlagBits2KHR VK_ACCESS_2_HOST_WRITE_BIT_KHR = 0x00004000ULL;
+static const VkAccessFlagBits2KHR VK_ACCESS_2_MEMORY_READ_BIT_KHR = 0x00008000ULL;
+static const VkAccessFlagBits2KHR VK_ACCESS_2_MEMORY_WRITE_BIT_KHR = 0x00010000ULL;
+static const VkAccessFlagBits2KHR VK_ACCESS_2_SHADER_SAMPLED_READ_BIT_KHR = 0x100000000ULL;
+static const VkAccessFlagBits2KHR VK_ACCESS_2_SHADER_STORAGE_READ_BIT_KHR = 0x200000000ULL;
+static const VkAccessFlagBits2KHR VK_ACCESS_2_SHADER_STORAGE_WRITE_BIT_KHR = 0x400000000ULL;
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+static const VkAccessFlagBits2KHR VK_ACCESS_2_VIDEO_DECODE_READ_BIT_KHR = 0x800000000ULL;
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+static const VkAccessFlagBits2KHR VK_ACCESS_2_VIDEO_DECODE_WRITE_BIT_KHR = 0x1000000000ULL;
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+static const VkAccessFlagBits2KHR VK_ACCESS_2_VIDEO_ENCODE_READ_BIT_KHR = 0x2000000000ULL;
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+static const VkAccessFlagBits2KHR VK_ACCESS_2_VIDEO_ENCODE_WRITE_BIT_KHR = 0x4000000000ULL;
+#endif
+static const VkAccessFlagBits2KHR VK_ACCESS_2_TRANSFORM_FEEDBACK_WRITE_BIT_EXT = 0x02000000ULL;
+static const VkAccessFlagBits2KHR VK_ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT = 0x04000000ULL;
+static const VkAccessFlagBits2KHR VK_ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT = 0x08000000ULL;
+static const VkAccessFlagBits2KHR VK_ACCESS_2_CONDITIONAL_RENDERING_READ_BIT_EXT = 0x00100000ULL;
+static const VkAccessFlagBits2KHR VK_ACCESS_2_COMMAND_PREPROCESS_READ_BIT_NV = 0x00020000ULL;
+static const VkAccessFlagBits2KHR VK_ACCESS_2_COMMAND_PREPROCESS_WRITE_BIT_NV = 0x00040000ULL;
+static const VkAccessFlagBits2KHR VK_ACCESS_2_FRAGMENT_SHADING_RATE_ATTACHMENT_READ_BIT_KHR = 0x00800000ULL;
+static const VkAccessFlagBits2KHR VK_ACCESS_2_SHADING_RATE_IMAGE_READ_BIT_NV = 0x00800000;
+static const VkAccessFlagBits2KHR VK_ACCESS_2_ACCELERATION_STRUCTURE_READ_BIT_KHR = 0x00200000ULL;
+static const VkAccessFlagBits2KHR VK_ACCESS_2_ACCELERATION_STRUCTURE_WRITE_BIT_KHR = 0x00400000ULL;
+static const VkAccessFlagBits2KHR VK_ACCESS_2_ACCELERATION_STRUCTURE_READ_BIT_NV = 0x00200000;
+static const VkAccessFlagBits2KHR VK_ACCESS_2_ACCELERATION_STRUCTURE_WRITE_BIT_NV = 0x00400000;
+static const VkAccessFlagBits2KHR VK_ACCESS_2_FRAGMENT_DENSITY_MAP_READ_BIT_EXT = 0x01000000ULL;
+static const VkAccessFlagBits2KHR VK_ACCESS_2_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT = 0x00080000ULL;
+static const VkAccessFlagBits2KHR VK_ACCESS_FLAG_BITS_2KHR_MAX_ENUM_KHR = 0x7FFFFFFFFFFFFFFFULL;
 
 
 typedef enum VkSubmitFlagBitsKHR {
@@ -7956,9 +8306,10 @@
     const VkResolveImageInfo2KHR*               pResolveImageInfo);
 #endif
 
+
 #define VK_EXT_debug_report 1
 VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDebugReportCallbackEXT)
-#define VK_EXT_DEBUG_REPORT_SPEC_VERSION  9
+#define VK_EXT_DEBUG_REPORT_SPEC_VERSION  10
 #define VK_EXT_DEBUG_REPORT_EXTENSION_NAME "VK_EXT_debug_report"
 
 typedef enum VkDebugReportObjectTypeEXT {
@@ -8969,7 +9320,7 @@
 #define VK_EXT_queue_family_foreign 1
 #define VK_EXT_QUEUE_FAMILY_FOREIGN_SPEC_VERSION 1
 #define VK_EXT_QUEUE_FAMILY_FOREIGN_EXTENSION_NAME "VK_EXT_queue_family_foreign"
-#define VK_QUEUE_FAMILY_FOREIGN_EXT       (~0U-2)
+#define VK_QUEUE_FAMILY_FOREIGN_EXT       (~2U)
 
 
 #define VK_EXT_debug_utils 1
@@ -10082,7 +10433,7 @@
 
 
 #define VK_EXT_calibrated_timestamps 1
-#define VK_EXT_CALIBRATED_TIMESTAMPS_SPEC_VERSION 1
+#define VK_EXT_CALIBRATED_TIMESTAMPS_SPEC_VERSION 2
 #define VK_EXT_CALIBRATED_TIMESTAMPS_EXTENSION_NAME "VK_EXT_calibrated_timestamps"
 
 typedef enum VkTimeDomainEXT {
@@ -11347,6 +11698,25 @@
 #endif
 
 
+#define VK_NV_inherited_viewport_scissor 1
+#define VK_NV_INHERITED_VIEWPORT_SCISSOR_SPEC_VERSION 1
+#define VK_NV_INHERITED_VIEWPORT_SCISSOR_EXTENSION_NAME "VK_NV_inherited_viewport_scissor"
+typedef struct VkPhysicalDeviceInheritedViewportScissorFeaturesNV {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           inheritedViewportScissor2D;
+} VkPhysicalDeviceInheritedViewportScissorFeaturesNV;
+
+typedef struct VkCommandBufferInheritanceViewportScissorInfoNV {
+    VkStructureType      sType;
+    const void*          pNext;
+    VkBool32             viewportScissor2D;
+    uint32_t             viewportDepthCount;
+    const VkViewport*    pViewportDepths;
+} VkCommandBufferInheritanceViewportScissorInfoNV;
+
+
+
 #define VK_EXT_texel_buffer_alignment 1
 #define VK_EXT_TEXEL_BUFFER_ALIGNMENT_SPEC_VERSION 1
 #define VK_EXT_TEXEL_BUFFER_ALIGNMENT_EXTENSION_NAME "VK_EXT_texel_buffer_alignment"
@@ -11368,7 +11738,7 @@
 
 
 #define VK_QCOM_render_pass_transform 1
-#define VK_QCOM_RENDER_PASS_TRANSFORM_SPEC_VERSION 1
+#define VK_QCOM_RENDER_PASS_TRANSFORM_SPEC_VERSION 2
 #define VK_QCOM_RENDER_PASS_TRANSFORM_EXTENSION_NAME "VK_QCOM_render_pass_transform"
 typedef struct VkRenderPassTransformBeginInfoQCOM {
     VkStructureType                  sType;
@@ -11638,6 +12008,17 @@
 #endif
 
 
+#define VK_EXT_ycbcr_2plane_444_formats 1
+#define VK_EXT_YCBCR_2PLANE_444_FORMATS_SPEC_VERSION 1
+#define VK_EXT_YCBCR_2PLANE_444_FORMATS_EXTENSION_NAME "VK_EXT_ycbcr_2plane_444_formats"
+typedef struct VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           ycbcr2plane444Formats;
+} VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT;
+
+
+
 #define VK_EXT_fragment_density_map2 1
 #define VK_EXT_FRAGMENT_DENSITY_MAP_2_SPEC_VERSION 1
 #define VK_EXT_FRAGMENT_DENSITY_MAP_2_EXTENSION_NAME "VK_EXT_fragment_density_map2"
@@ -11659,7 +12040,7 @@
 
 
 #define VK_QCOM_rotated_copy_commands 1
-#define VK_QCOM_ROTATED_COPY_COMMANDS_SPEC_VERSION 0
+#define VK_QCOM_ROTATED_COPY_COMMANDS_SPEC_VERSION 1
 #define VK_QCOM_ROTATED_COPY_COMMANDS_EXTENSION_NAME "VK_QCOM_rotated_copy_commands"
 typedef struct VkCopyCommandTransformInfoQCOM {
     VkStructureType                  sType;
@@ -11733,6 +12114,111 @@
 
 
 
+#define VK_EXT_vertex_input_dynamic_state 1
+#define VK_EXT_VERTEX_INPUT_DYNAMIC_STATE_SPEC_VERSION 2
+#define VK_EXT_VERTEX_INPUT_DYNAMIC_STATE_EXTENSION_NAME "VK_EXT_vertex_input_dynamic_state"
+typedef struct VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           vertexInputDynamicState;
+} VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT;
+
+typedef struct VkVertexInputBindingDescription2EXT {
+    VkStructureType      sType;
+    void*                pNext;
+    uint32_t             binding;
+    uint32_t             stride;
+    VkVertexInputRate    inputRate;
+    uint32_t             divisor;
+} VkVertexInputBindingDescription2EXT;
+
+typedef struct VkVertexInputAttributeDescription2EXT {
+    VkStructureType    sType;
+    void*              pNext;
+    uint32_t           location;
+    uint32_t           binding;
+    VkFormat           format;
+    uint32_t           offset;
+} VkVertexInputAttributeDescription2EXT;
+
+typedef void (VKAPI_PTR *PFN_vkCmdSetVertexInputEXT)(VkCommandBuffer commandBuffer, uint32_t vertexBindingDescriptionCount, const VkVertexInputBindingDescription2EXT* pVertexBindingDescriptions, uint32_t vertexAttributeDescriptionCount, const VkVertexInputAttributeDescription2EXT* pVertexAttributeDescriptions);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR void VKAPI_CALL vkCmdSetVertexInputEXT(
+    VkCommandBuffer                             commandBuffer,
+    uint32_t                                    vertexBindingDescriptionCount,
+    const VkVertexInputBindingDescription2EXT*  pVertexBindingDescriptions,
+    uint32_t                                    vertexAttributeDescriptionCount,
+    const VkVertexInputAttributeDescription2EXT* pVertexAttributeDescriptions);
+#endif
+
+
+#define VK_EXT_extended_dynamic_state2 1
+#define VK_EXT_EXTENDED_DYNAMIC_STATE_2_SPEC_VERSION 1
+#define VK_EXT_EXTENDED_DYNAMIC_STATE_2_EXTENSION_NAME "VK_EXT_extended_dynamic_state2"
+typedef struct VkPhysicalDeviceExtendedDynamicState2FeaturesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           extendedDynamicState2;
+    VkBool32           extendedDynamicState2LogicOp;
+    VkBool32           extendedDynamicState2PatchControlPoints;
+} VkPhysicalDeviceExtendedDynamicState2FeaturesEXT;
+
+typedef void (VKAPI_PTR *PFN_vkCmdSetPatchControlPointsEXT)(VkCommandBuffer commandBuffer, uint32_t patchControlPoints);
+typedef void (VKAPI_PTR *PFN_vkCmdSetRasterizerDiscardEnableEXT)(VkCommandBuffer commandBuffer, VkBool32 rasterizerDiscardEnable);
+typedef void (VKAPI_PTR *PFN_vkCmdSetDepthBiasEnableEXT)(VkCommandBuffer commandBuffer, VkBool32 depthBiasEnable);
+typedef void (VKAPI_PTR *PFN_vkCmdSetLogicOpEXT)(VkCommandBuffer commandBuffer, VkLogicOp logicOp);
+typedef void (VKAPI_PTR *PFN_vkCmdSetPrimitiveRestartEnableEXT)(VkCommandBuffer commandBuffer, VkBool32 primitiveRestartEnable);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR void VKAPI_CALL vkCmdSetPatchControlPointsEXT(
+    VkCommandBuffer                             commandBuffer,
+    uint32_t                                    patchControlPoints);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdSetRasterizerDiscardEnableEXT(
+    VkCommandBuffer                             commandBuffer,
+    VkBool32                                    rasterizerDiscardEnable);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthBiasEnableEXT(
+    VkCommandBuffer                             commandBuffer,
+    VkBool32                                    depthBiasEnable);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdSetLogicOpEXT(
+    VkCommandBuffer                             commandBuffer,
+    VkLogicOp                                   logicOp);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdSetPrimitiveRestartEnableEXT(
+    VkCommandBuffer                             commandBuffer,
+    VkBool32                                    primitiveRestartEnable);
+#endif
+
+
+#define VK_EXT_color_write_enable 1
+#define VK_EXT_COLOR_WRITE_ENABLE_SPEC_VERSION 1
+#define VK_EXT_COLOR_WRITE_ENABLE_EXTENSION_NAME "VK_EXT_color_write_enable"
+typedef struct VkPhysicalDeviceColorWriteEnableFeaturesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           colorWriteEnable;
+} VkPhysicalDeviceColorWriteEnableFeaturesEXT;
+
+typedef struct VkPipelineColorWriteCreateInfoEXT {
+    VkStructureType    sType;
+    const void*        pNext;
+    uint32_t           attachmentCount;
+    const VkBool32*    pColorWriteEnables;
+} VkPipelineColorWriteCreateInfoEXT;
+
+typedef void                                    (VKAPI_PTR *PFN_vkCmdSetColorWriteEnableEXT)(VkCommandBuffer       commandBuffer, uint32_t                                attachmentCount, const VkBool32*   pColorWriteEnables);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR void                                    VKAPI_CALL vkCmdSetColorWriteEnableEXT(
+    VkCommandBuffer                             commandBuffer,
+    uint32_t                                    attachmentCount,
+    const VkBool32*                             pColorWriteEnables);
+#endif
+
+
 #define VK_KHR_acceleration_structure 1
 VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkAccelerationStructureKHR)
 #define VK_KHR_ACCELERATION_STRUCTURE_SPEC_VERSION 11
diff --git a/external/vulkancts/scripts/src/vulkan_fuchsia.h b/external/vulkancts/scripts/src/vulkan_fuchsia.h
index 03e27cb..d558715 100644
--- a/external/vulkancts/scripts/src/vulkan_fuchsia.h
+++ b/external/vulkancts/scripts/src/vulkan_fuchsia.h
@@ -2,7 +2,7 @@
 #define VULKAN_FUCHSIA_H_ 1
 
 /*
-** Copyright (c) 2015-2020 The Khronos Group Inc.
+** Copyright 2015-2021 The Khronos Group Inc.
 **
 ** SPDX-License-Identifier: Apache-2.0
 */
@@ -40,6 +40,80 @@
     VkSurfaceKHR*                               pSurface);
 #endif
 
+
+#define VK_FUCHSIA_external_memory 1
+#define VK_FUCHSIA_EXTERNAL_MEMORY_SPEC_VERSION 1
+#define VK_FUCHSIA_EXTERNAL_MEMORY_EXTENSION_NAME "VK_FUCHSIA_external_memory"
+typedef struct VkImportMemoryZirconHandleInfoFUCHSIA {
+    VkStructureType                       sType;
+    const void*                           pNext;
+    VkExternalMemoryHandleTypeFlagBits    handleType;
+    zx_handle_t                           handle;
+} VkImportMemoryZirconHandleInfoFUCHSIA;
+
+typedef struct VkMemoryZirconHandlePropertiesFUCHSIA {
+    VkStructureType    sType;
+    void*              pNext;
+    uint32_t           memoryTypeBits;
+} VkMemoryZirconHandlePropertiesFUCHSIA;
+
+typedef struct VkMemoryGetZirconHandleInfoFUCHSIA {
+    VkStructureType                       sType;
+    const void*                           pNext;
+    VkDeviceMemory                        memory;
+    VkExternalMemoryHandleTypeFlagBits    handleType;
+} VkMemoryGetZirconHandleInfoFUCHSIA;
+
+typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryZirconHandleFUCHSIA)(VkDevice device, const VkMemoryGetZirconHandleInfoFUCHSIA* pGetZirconHandleInfo, zx_handle_t* pZirconHandle);
+typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryZirconHandlePropertiesFUCHSIA)(VkDevice device, VkExternalMemoryHandleTypeFlagBits handleType, zx_handle_t zirconHandle, VkMemoryZirconHandlePropertiesFUCHSIA* pMemoryZirconHandleProperties);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryZirconHandleFUCHSIA(
+    VkDevice                                    device,
+    const VkMemoryGetZirconHandleInfoFUCHSIA*   pGetZirconHandleInfo,
+    zx_handle_t*                                pZirconHandle);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryZirconHandlePropertiesFUCHSIA(
+    VkDevice                                    device,
+    VkExternalMemoryHandleTypeFlagBits          handleType,
+    zx_handle_t                                 zirconHandle,
+    VkMemoryZirconHandlePropertiesFUCHSIA*      pMemoryZirconHandleProperties);
+#endif
+
+
+#define VK_FUCHSIA_external_semaphore 1
+#define VK_FUCHSIA_EXTERNAL_SEMAPHORE_SPEC_VERSION 1
+#define VK_FUCHSIA_EXTERNAL_SEMAPHORE_EXTENSION_NAME "VK_FUCHSIA_external_semaphore"
+typedef struct VkImportSemaphoreZirconHandleInfoFUCHSIA {
+    VkStructureType                          sType;
+    const void*                              pNext;
+    VkSemaphore                              semaphore;
+    VkSemaphoreImportFlags                   flags;
+    VkExternalSemaphoreHandleTypeFlagBits    handleType;
+    zx_handle_t                              zirconHandle;
+} VkImportSemaphoreZirconHandleInfoFUCHSIA;
+
+typedef struct VkSemaphoreGetZirconHandleInfoFUCHSIA {
+    VkStructureType                          sType;
+    const void*                              pNext;
+    VkSemaphore                              semaphore;
+    VkExternalSemaphoreHandleTypeFlagBits    handleType;
+} VkSemaphoreGetZirconHandleInfoFUCHSIA;
+
+typedef VkResult (VKAPI_PTR *PFN_vkImportSemaphoreZirconHandleFUCHSIA)(VkDevice device, const VkImportSemaphoreZirconHandleInfoFUCHSIA* pImportSemaphoreZirconHandleInfo);
+typedef VkResult (VKAPI_PTR *PFN_vkGetSemaphoreZirconHandleFUCHSIA)(VkDevice device, const VkSemaphoreGetZirconHandleInfoFUCHSIA* pGetZirconHandleInfo, zx_handle_t* pZirconHandle);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkImportSemaphoreZirconHandleFUCHSIA(
+    VkDevice                                    device,
+    const VkImportSemaphoreZirconHandleInfoFUCHSIA* pImportSemaphoreZirconHandleInfo);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetSemaphoreZirconHandleFUCHSIA(
+    VkDevice                                    device,
+    const VkSemaphoreGetZirconHandleInfoFUCHSIA* pGetZirconHandleInfo,
+    zx_handle_t*                                pZirconHandle);
+#endif
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/external/vulkancts/scripts/src/vulkan_ggp.h b/external/vulkancts/scripts/src/vulkan_ggp.h
index 273c880..9a6a582 100644
--- a/external/vulkancts/scripts/src/vulkan_ggp.h
+++ b/external/vulkancts/scripts/src/vulkan_ggp.h
@@ -2,7 +2,7 @@
 #define VULKAN_GGP_H_ 1
 
 /*
-** Copyright (c) 2015-2020 The Khronos Group Inc.
+** Copyright 2015-2021 The Khronos Group Inc.
 **
 ** SPDX-License-Identifier: Apache-2.0
 */
diff --git a/external/vulkancts/scripts/src/vulkan_ios.h b/external/vulkancts/scripts/src/vulkan_ios.h
index 446a269..6e7e6af 100644
--- a/external/vulkancts/scripts/src/vulkan_ios.h
+++ b/external/vulkancts/scripts/src/vulkan_ios.h
@@ -2,7 +2,7 @@
 #define VULKAN_IOS_H_ 1
 
 /*
-** Copyright (c) 2015-2020 The Khronos Group Inc.
+** Copyright 2015-2021 The Khronos Group Inc.
 **
 ** SPDX-License-Identifier: Apache-2.0
 */
diff --git a/external/vulkancts/scripts/src/vulkan_macos.h b/external/vulkancts/scripts/src/vulkan_macos.h
index 35fcabe..c49b123 100644
--- a/external/vulkancts/scripts/src/vulkan_macos.h
+++ b/external/vulkancts/scripts/src/vulkan_macos.h
@@ -2,7 +2,7 @@
 #define VULKAN_MACOS_H_ 1
 
 /*
-** Copyright (c) 2015-2020 The Khronos Group Inc.
+** Copyright 2015-2021 The Khronos Group Inc.
 **
 ** SPDX-License-Identifier: Apache-2.0
 */
diff --git a/external/vulkancts/scripts/src/vulkan_metal.h b/external/vulkancts/scripts/src/vulkan_metal.h
index 99f097d..5cf4a70 100644
--- a/external/vulkancts/scripts/src/vulkan_metal.h
+++ b/external/vulkancts/scripts/src/vulkan_metal.h
@@ -2,7 +2,7 @@
 #define VULKAN_METAL_H_ 1
 
 /*
-** Copyright (c) 2015-2020 The Khronos Group Inc.
+** Copyright 2015-2021 The Khronos Group Inc.
 **
 ** SPDX-License-Identifier: Apache-2.0
 */
diff --git a/external/vulkancts/scripts/src/vulkan_vi.h b/external/vulkancts/scripts/src/vulkan_vi.h
index 2e62d7d..9e0dcca 100644
--- a/external/vulkancts/scripts/src/vulkan_vi.h
+++ b/external/vulkancts/scripts/src/vulkan_vi.h
@@ -2,7 +2,7 @@
 #define VULKAN_VI_H_ 1
 
 /*
-** Copyright (c) 2015-2020 The Khronos Group Inc.
+** Copyright 2015-2021 The Khronos Group Inc.
 **
 ** SPDX-License-Identifier: Apache-2.0
 */
diff --git a/external/vulkancts/scripts/src/vulkan_wayland.h b/external/vulkancts/scripts/src/vulkan_wayland.h
index f7b307e..2a329be 100644
--- a/external/vulkancts/scripts/src/vulkan_wayland.h
+++ b/external/vulkancts/scripts/src/vulkan_wayland.h
@@ -2,7 +2,7 @@
 #define VULKAN_WAYLAND_H_ 1
 
 /*
-** Copyright (c) 2015-2020 The Khronos Group Inc.
+** Copyright 2015-2021 The Khronos Group Inc.
 **
 ** SPDX-License-Identifier: Apache-2.0
 */
diff --git a/external/vulkancts/scripts/src/vulkan_win32.h b/external/vulkancts/scripts/src/vulkan_win32.h
index 4b561ea..1b680f0 100644
--- a/external/vulkancts/scripts/src/vulkan_win32.h
+++ b/external/vulkancts/scripts/src/vulkan_win32.h
@@ -2,7 +2,7 @@
 #define VULKAN_WIN32_H_ 1
 
 /*
-** Copyright (c) 2015-2020 The Khronos Group Inc.
+** Copyright 2015-2021 The Khronos Group Inc.
 **
 ** SPDX-License-Identifier: Apache-2.0
 */
diff --git a/external/vulkancts/scripts/src/vulkan_xcb.h b/external/vulkancts/scripts/src/vulkan_xcb.h
index c5441b2..5ba2ad8 100644
--- a/external/vulkancts/scripts/src/vulkan_xcb.h
+++ b/external/vulkancts/scripts/src/vulkan_xcb.h
@@ -2,7 +2,7 @@
 #define VULKAN_XCB_H_ 1
 
 /*
-** Copyright (c) 2015-2020 The Khronos Group Inc.
+** Copyright 2015-2021 The Khronos Group Inc.
 **
 ** SPDX-License-Identifier: Apache-2.0
 */
diff --git a/external/vulkancts/scripts/src/vulkan_xlib.h b/external/vulkancts/scripts/src/vulkan_xlib.h
index c54628a..75c75dc 100644
--- a/external/vulkancts/scripts/src/vulkan_xlib.h
+++ b/external/vulkancts/scripts/src/vulkan_xlib.h
@@ -2,7 +2,7 @@
 #define VULKAN_XLIB_H_ 1
 
 /*
-** Copyright (c) 2015-2020 The Khronos Group Inc.
+** Copyright 2015-2021 The Khronos Group Inc.
 **
 ** SPDX-License-Identifier: Apache-2.0
 */
diff --git a/external/vulkancts/scripts/src/vulkan_xlib_xrandr.h b/external/vulkancts/scripts/src/vulkan_xlib_xrandr.h
index 436432f..fa27493 100644
--- a/external/vulkancts/scripts/src/vulkan_xlib_xrandr.h
+++ b/external/vulkancts/scripts/src/vulkan_xlib_xrandr.h
@@ -2,7 +2,7 @@
 #define VULKAN_XLIB_XRANDR_H_ 1
 
 /*
-** Copyright (c) 2015-2020 The Khronos Group Inc.
+** Copyright 2015-2021 The Khronos Group Inc.
 **
 ** SPDX-License-Identifier: Apache-2.0
 */
diff --git a/framework/common/tcuCommandLine.cpp b/framework/common/tcuCommandLine.cpp
index 4e0cbc6..83ec331 100644
--- a/framework/common/tcuCommandLine.cpp
+++ b/framework/common/tcuCommandLine.cpp
@@ -101,6 +101,7 @@
 DE_DECLARE_COMMAND_LINE_OPT(CaseFraction,				std::vector<int>);
 DE_DECLARE_COMMAND_LINE_OPT(CaseFractionMandatoryTests,	std::string);
 DE_DECLARE_COMMAND_LINE_OPT(WaiverFile,					std::string);
+DE_DECLARE_COMMAND_LINE_OPT(RunnerType,					tcu::TestRunnerType);
 
 static void parseIntList (const char* src, std::vector<int>* dst)
 {
@@ -153,6 +154,12 @@
 		{ "180",			SCREENROTATION_180			},
 		{ "270",			SCREENROTATION_270			}
 	};
+	static const NamedValue<tcu::TestRunnerType> s_runnerTypes[] =
+	{
+		{ "any",	tcu::RUNNERTYPE_ANY		},
+		{ "none",	tcu::RUNNERTYPE_NONE	},
+		{ "amber",	tcu::RUNNERTYPE_AMBER	},
+	};
 
 	parser
 		<< Option<CasePath>						("n",		"deqp-case",								"Test case(s) to run, supports wildcards (e.g. dEQP-GLES2.info.*)")
@@ -200,7 +207,8 @@
 		<< Option<RenderDoc>					(DE_NULL,	"deqp-renderdoc",							"Enable RenderDoc frame markers",					s_enableNames,		"disable")
 		<< Option<CaseFraction>					(DE_NULL,	"deqp-fraction",							"Run a fraction of the test cases (e.g. N,M means run group%M==N)",	parseIntList,	"")
 		<< Option<CaseFractionMandatoryTests>	(DE_NULL,	"deqp-fraction-mandatory-caselist-file",	"Case list file that must be run for each fraction",					"")
-		<< Option<WaiverFile>					(DE_NULL,	"deqp-waiver-file",							"Read waived tests from given file",									"");
+		<< Option<WaiverFile>					(DE_NULL,	"deqp-waiver-file",							"Read waived tests from given file",									"")
+		<< Option<RunnerType>					(DE_NULL,	"deqp-runner-type",							"Filter test cases based on runner",				s_runnerTypes,		"any");
 }
 
 void registerLegacyOptions (de::cmdline::Parser& parser)
@@ -851,6 +859,7 @@
 const std::vector<int>&	CommandLine::getCaseFraction				(void) const	{ return m_cmdLine.getOption<opt::CaseFraction>();							}
 const char*				CommandLine::getCaseFractionMandatoryTests	(void) const	{ return m_cmdLine.getOption<opt::CaseFractionMandatoryTests>().c_str();	}
 const char*				CommandLine::getArchiveDir					(void) const	{ return m_cmdLine.getOption<opt::ArchiveDir>().c_str();					}
+tcu::TestRunnerType		CommandLine::getRunnerType					(void) const	{ return m_cmdLine.getOption<opt::RunnerType>();							}
 
 const char* CommandLine::getGLContextType (void) const
 {
@@ -960,12 +969,14 @@
 }
 
 CaseListFilter::CaseListFilter (void)
-	: m_caseTree(DE_NULL)
+	: m_caseTree	(DE_NULL)
+	, m_runnerType	(tcu::RUNNERTYPE_ANY)
 {
 }
 
 CaseListFilter::CaseListFilter (const de::cmdline::CommandLine& cmdLine, const tcu::Archive& archive)
-	: m_caseTree(DE_NULL)
+	: m_caseTree	(DE_NULL)
+	, m_runnerType	(cmdLine.getOption<opt::RunnerType>())
 {
 	if (cmdLine.hasOption<opt::CaseList>())
 	{
diff --git a/framework/common/tcuCommandLine.hpp b/framework/common/tcuCommandLine.hpp
index 22ea2e0..2a7c48e 100644
--- a/framework/common/tcuCommandLine.hpp
+++ b/framework/common/tcuCommandLine.hpp
@@ -25,6 +25,7 @@
 
 #include "tcuDefs.hpp"
 #include "deCommandLine.hpp"
+#include "tcuTestCase.hpp"
 #include "deUniquePtr.hpp"
 
 #include <string>
@@ -114,6 +115,9 @@
 	//! Check if test group passes the case fraction filter.
 	bool							checkCaseFraction			(int i, const std::string& testCaseName) const;
 
+	//! Check if test case runner is of supplied type
+	bool							checkRunnerType				(tcu::TestRunnerType type) const { return ((m_runnerType & type) == m_runnerType); }
+
 private:
 	CaseListFilter												(const CaseListFilter&);	// not allowed!
 	CaseListFilter&					operator=					(const CaseListFilter&);	// not allowed!
@@ -122,6 +126,7 @@
 	de::MovePtr<const CasePaths>	m_casePaths;
 	std::vector<int>				m_caseFraction;
 	de::MovePtr<const CasePaths>	m_caseFractionMandatoryTests;
+	const tcu::TestRunnerType		m_runnerType;
 };
 
 /*--------------------------------------------------------------------*//*!
@@ -258,6 +263,9 @@
 	//! Get archive directory path
 	const char*						getArchiveDir				(void) const;
 
+	//! Get runner type (--deqp-runner-type)
+	tcu::TestRunnerType				getRunnerType				(void) const;
+
 	/*--------------------------------------------------------------------*//*!
 	 * \brief Creates case list filter
 	 * \param archive Resources
diff --git a/framework/common/tcuRasterizationVerifier.cpp b/framework/common/tcuRasterizationVerifier.cpp
index 230aa58..7e15eac 100644
--- a/framework/common/tcuRasterizationVerifier.cpp
+++ b/framework/common/tcuRasterizationVerifier.cpp
@@ -2490,6 +2490,149 @@
 	}
 }
 
+CoverageType calculateUnderestimateLineCoverage (const tcu::Vec4& p0, const tcu::Vec4& p1, const float lineWidth, const tcu::IVec2& pixel, const tcu::IVec2& viewportSize)
+{
+	DE_ASSERT(viewportSize.x() == viewportSize.y() && viewportSize.x() > 0);
+	DE_ASSERT(p0.w() == 1.0f && p1.w() == 1.0f);
+
+	const Vec2		p		= Vec2(p0.x(), p0.y());
+	const Vec2		q		= Vec2(p1.x(), p1.y());
+	const Vec2		pq		= Vec2(p1.x() - p0.x(), p1.y() - p0.y());
+	const Vec2		pqn		= normalize(pq);
+	const Vec2		lw		= 0.5f * lineWidth * pqn;
+	const Vec2		n		= Vec2(lw.y(), -lw.x());
+	const Vec2		vp		= Vec2(float(viewportSize.x()), float(viewportSize.y()));
+	const Vec2		a		= 0.5f * (p + Vec2(1.0f, 1.0f)) * vp + n;
+	const Vec2		b		= 0.5f * (p + Vec2(1.0f, 1.0f)) * vp - n;
+	const Vec2		c		= 0.5f * (q + Vec2(1.0f, 1.0f)) * vp - n;
+	const Vec2		ba		= b - a;
+	const Vec2		bc		= b - c;
+	const float		det		= ba.x() * bc.y() - ba.y() * bc.x();
+	int				within	= 0;
+
+	if (det != 0.0f)
+	{
+		for (int cornerNdx = 0; cornerNdx < 4; ++cornerNdx)
+		{
+			const int		pixelCornerOffsetX	= ((cornerNdx & 1) ? 1 : 0);
+			const int		pixelCornerOffsetY	= ((cornerNdx & 2) ? 1 : 0);
+			const Vec2		f					= Vec2(float(pixel.x() + pixelCornerOffsetX), float(pixel.y() + pixelCornerOffsetY));
+			const Vec2		bf					= b - f;
+			const float		alpha				= (bf.x() * bc.y() - bc.x() * bf.y()) / det;
+			const float		beta				= (ba.x() * bf.y() - bf.x() * ba.y()) / det;
+			bool			cornerWithin		= de::inRange(alpha, 0.0f, 1.0f) && de::inRange(beta, 0.0f, 1.0f);
+
+			if (cornerWithin)
+				within++;
+		}
+	}
+
+	if (within == 0)
+		return COVERAGE_NONE;
+	else if (within == 4)
+		return COVERAGE_FULL;
+	else
+		return COVERAGE_PARTIAL;
+}
+
+CoverageType calculateUnderestimateTriangleCoverage (const tcu::Vec4& p0, const tcu::Vec4& p1, const tcu::Vec4& p2, const tcu::IVec2& pixel, int subpixelBits, const tcu::IVec2& viewportSize)
+{
+	typedef tcu::Vector<deInt64, 2> I64Vec2;
+
+	const deUint64		numSubPixels						= ((deUint64)1) << subpixelBits;
+	const bool			order								= isTriangleClockwise(p0, p1, p2);			//!< clockwise / counter-clockwise
+	const tcu::Vec4&	orderedP0							= p0;										//!< vertices of a clockwise triangle
+	const tcu::Vec4&	orderedP1							= (order) ? (p1) : (p2);
+	const tcu::Vec4&	orderedP2							= (order) ? (p2) : (p1);
+	const tcu::Vec2		triangleNormalizedDeviceSpace[3]	=
+	{
+		tcu::Vec2(orderedP0.x() / orderedP0.w(), orderedP0.y() / orderedP0.w()),
+		tcu::Vec2(orderedP1.x() / orderedP1.w(), orderedP1.y() / orderedP1.w()),
+		tcu::Vec2(orderedP2.x() / orderedP2.w(), orderedP2.y() / orderedP2.w()),
+	};
+	const tcu::Vec2		triangleScreenSpace[3]				=
+	{
+		(triangleNormalizedDeviceSpace[0] + tcu::Vec2(1.0f, 1.0f)) * 0.5f * tcu::Vec2((float)viewportSize.x(), (float)viewportSize.y()),
+		(triangleNormalizedDeviceSpace[1] + tcu::Vec2(1.0f, 1.0f)) * 0.5f * tcu::Vec2((float)viewportSize.x(), (float)viewportSize.y()),
+		(triangleNormalizedDeviceSpace[2] + tcu::Vec2(1.0f, 1.0f)) * 0.5f * tcu::Vec2((float)viewportSize.x(), (float)viewportSize.y()),
+	};
+
+	// Broad bounding box - pixel check
+	{
+		const float minX = de::min(de::min(triangleScreenSpace[0].x(), triangleScreenSpace[1].x()), triangleScreenSpace[2].x());
+		const float minY = de::min(de::min(triangleScreenSpace[0].y(), triangleScreenSpace[1].y()), triangleScreenSpace[2].y());
+		const float maxX = de::max(de::max(triangleScreenSpace[0].x(), triangleScreenSpace[1].x()), triangleScreenSpace[2].x());
+		const float maxY = de::max(de::max(triangleScreenSpace[0].y(), triangleScreenSpace[1].y()), triangleScreenSpace[2].y());
+
+		if ((float)pixel.x() > maxX + 1 ||
+			(float)pixel.y() > maxY + 1 ||
+			(float)pixel.x() < minX - 1 ||
+			(float)pixel.y() < minY - 1)
+			return COVERAGE_NONE;
+	}
+
+	// Accurate intersection for edge pixels
+	{
+		//  In multisampling, the sample points can be anywhere in the pixel, and in single sampling only in the center.
+		const I64Vec2 pixelCorners[4] =
+		{
+			I64Vec2((pixel.x()+0) * numSubPixels, (pixel.y()+0) * numSubPixels),
+			I64Vec2((pixel.x()+1) * numSubPixels, (pixel.y()+0) * numSubPixels),
+			I64Vec2((pixel.x()+1) * numSubPixels, (pixel.y()+1) * numSubPixels),
+			I64Vec2((pixel.x()+0) * numSubPixels, (pixel.y()+1) * numSubPixels),
+		};
+		// both rounding directions
+		const I64Vec2 triangleSubPixelSpaceFloor[3] =
+		{
+			I64Vec2(deFloorFloatToInt32(triangleScreenSpace[0].x() * (float)numSubPixels), deFloorFloatToInt32(triangleScreenSpace[0].y() * (float)numSubPixels)),
+			I64Vec2(deFloorFloatToInt32(triangleScreenSpace[1].x() * (float)numSubPixels), deFloorFloatToInt32(triangleScreenSpace[1].y() * (float)numSubPixels)),
+			I64Vec2(deFloorFloatToInt32(triangleScreenSpace[2].x() * (float)numSubPixels), deFloorFloatToInt32(triangleScreenSpace[2].y() * (float)numSubPixels)),
+		};
+		const I64Vec2 triangleSubPixelSpaceCeil[3] =
+		{
+			I64Vec2(deCeilFloatToInt32(triangleScreenSpace[0].x() * (float)numSubPixels), deCeilFloatToInt32(triangleScreenSpace[0].y() * (float)numSubPixels)),
+			I64Vec2(deCeilFloatToInt32(triangleScreenSpace[1].x() * (float)numSubPixels), deCeilFloatToInt32(triangleScreenSpace[1].y() * (float)numSubPixels)),
+			I64Vec2(deCeilFloatToInt32(triangleScreenSpace[2].x() * (float)numSubPixels), deCeilFloatToInt32(triangleScreenSpace[2].y() * (float)numSubPixels)),
+		};
+
+		// Test if any edge (with any rounding) intersects the pixel (boundary). If it does => Partial. If not => fully inside or outside
+
+		for (int edgeNdx = 0; edgeNdx < 3; ++edgeNdx)
+		for (int startRounding = 0; startRounding < 4; ++startRounding)
+		for (int endRounding = 0; endRounding < 4; ++endRounding)
+		{
+			const int		nextEdgeNdx	= (edgeNdx+1) % 3;
+			const I64Vec2	startPos	((startRounding&0x01)	? (triangleSubPixelSpaceFloor[edgeNdx].x())		: (triangleSubPixelSpaceCeil[edgeNdx].x()),		(startRounding&0x02)	? (triangleSubPixelSpaceFloor[edgeNdx].y())		: (triangleSubPixelSpaceCeil[edgeNdx].y()));
+			const I64Vec2	endPos		((endRounding&0x01)		? (triangleSubPixelSpaceFloor[nextEdgeNdx].x())	: (triangleSubPixelSpaceCeil[nextEdgeNdx].x()),	(endRounding&0x02)		? (triangleSubPixelSpaceFloor[nextEdgeNdx].y())	: (triangleSubPixelSpaceCeil[nextEdgeNdx].y()));
+
+			for (int pixelEdgeNdx = 0; pixelEdgeNdx < 4; ++pixelEdgeNdx)
+			{
+				const int pixelEdgeEnd = (pixelEdgeNdx + 1) % 4;
+
+				if (lineLineIntersect(startPos, endPos, pixelCorners[pixelEdgeNdx], pixelCorners[pixelEdgeEnd]))
+					return COVERAGE_PARTIAL;
+			}
+		}
+
+		// fully inside or outside
+		for (int edgeNdx = 0; edgeNdx < 3; ++edgeNdx)
+		{
+			const int		nextEdgeNdx		= (edgeNdx+1) % 3;
+			const I64Vec2&	startPos		= triangleSubPixelSpaceFloor[edgeNdx];
+			const I64Vec2&	endPos			= triangleSubPixelSpaceFloor[nextEdgeNdx];
+			const I64Vec2	edge			= endPos - startPos;
+			const I64Vec2	v				= pixelCorners[0] - endPos;
+			const deInt64	crossProduct	= (edge.x() * v.y() - edge.y() * v.x());
+
+			// a corner of the pixel is outside => "fully inside" option is impossible
+			if (crossProduct < 0)
+				return COVERAGE_NONE;
+		}
+
+		return COVERAGE_FULL;
+	}
+}
+
 static void logTriangleGroupRasterizationStash (const tcu::Surface& surface, tcu::TestLog& log, VerifyTriangleGroupRasterizationLogStash& logStash)
 {
 	// Output results
diff --git a/framework/common/tcuRasterizationVerifier.hpp b/framework/common/tcuRasterizationVerifier.hpp
index b0663a2..2fcbee7 100644
--- a/framework/common/tcuRasterizationVerifier.hpp
+++ b/framework/common/tcuRasterizationVerifier.hpp
@@ -150,6 +150,18 @@
 CoverageType calculateTriangleCoverage (const tcu::Vec4& p0, const tcu::Vec4& p1, const tcu::Vec4& p2, const tcu::IVec2& pixel, const tcu::IVec2& viewportSize, int subpixelBits, bool multisample);
 
 /*--------------------------------------------------------------------*//*!
+ * \brief Calculates line coverage at given pixel
+ * Calculates the coverage of a reactangle given by line coordinates and width.
+ *//*--------------------------------------------------------------------*/
+CoverageType calculateUnderestimateLineCoverage (const tcu::Vec4& p0, const tcu::Vec4& p1, const float lineWidth, const tcu::IVec2& pixel, const tcu::IVec2& viewportSize);
+
+/*--------------------------------------------------------------------*//*!
+ * \brief Calculates triangle coverage at given pixel
+ * Calculates the coverage of a triangle given by by three vertices.
+ *//*--------------------------------------------------------------------*/
+CoverageType calculateUnderestimateTriangleCoverage (const tcu::Vec4& p0, const tcu::Vec4& p1, const tcu::Vec4& p2, const tcu::IVec2& pixel, int subpixelBits, const tcu::IVec2& viewportSize);
+
+/*--------------------------------------------------------------------*//*!
  * \brief Verify triangle rasterization result
  * Verifies pixels in the surface are rasterized within the bounds given
  * by RasterizationArguments. Triangles should not be z-clipped.
diff --git a/framework/common/tcuStringTemplate.hpp b/framework/common/tcuStringTemplate.hpp
index 31d6a30..8896f47 100644
--- a/framework/common/tcuStringTemplate.hpp
+++ b/framework/common/tcuStringTemplate.hpp
@@ -5,6 +5,8 @@
  * ----------------------------------------
  *
  * Copyright 2014 The Android Open Source Project
+ * Copyright (c) 2020 The Khronos Group Inc.
+ * Copyright (c) 2020 Advanced Micro Devices, Inc.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -23,6 +25,8 @@
  * \brief String template class.
  *//*--------------------------------------------------------------------*/
 
+#include <deStringUtil.hpp>
+
 #include <map>
 #include <string>
 
@@ -40,6 +44,9 @@
 
 	std::string			specialize			(const std::map<std::string, std::string>& params) const;
 
+	template <typename... args_t>
+	std::string			format				(args_t&&... args) const;
+
 private:
 						StringTemplate		(const StringTemplate&);		// not allowed!
 	StringTemplate&		operator=			(const StringTemplate&);		// not allowed!
@@ -47,6 +54,43 @@
 	std::string			m_template;
 } DE_WARN_UNUSED_TYPE;
 
+/*--------------------------------------------------------------------*//*!
+ * Utility to unpack consecutive arguments into a parameter map
+ *//*--------------------------------------------------------------------*/
+namespace detail
+{
+static constexpr const char* TOKENS[] = {
+	"0",  "1",  "2",  "3",  "4",  "5",  "6",  "7",  "8",  "9",  "10",
+	"11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21",
+	"22", "23", "24", "25", "26", "27", "28", "29", "30", "31", "32",
+	"33", "34", "35", "36", "37", "38", "39", "40", "41", "42", "43",
+	"44", "45", "46", "47", "48", "49", "50", "51", "52", "53", "54",
+	"55", "56", "57", "58", "59", "60", "61", "62", "63"};
+
+template <size_t ARG_NUM, typename unpacked_t>
+inline void unpackArgs(unpacked_t&) {}
+
+template <size_t ARG_NUM, typename unpacked_t, typename arg_t, typename... args_t>
+inline void unpackArgs(unpacked_t& unpacked, arg_t&& cur, args_t&&... args)
+{
+	static_assert(ARG_NUM < DE_LENGTH_OF_ARRAY(TOKENS),
+				  "ARG_NUM must be less than DE_LENGTH_OF_ARRAY(TOKENS)");
+	unpacked[TOKENS[ARG_NUM]] = de::toString(cur);
+	unpackArgs<ARG_NUM + 1>(unpacked, ::std::forward<args_t>(args)...);
+}
+} // detail
+
+/*--------------------------------------------------------------------*//*!
+ * \brief Implementation of specialize() using a variable argument list
+ *//*--------------------------------------------------------------------*/
+template <typename... args_t>
+std::string StringTemplate::format(args_t&&... args) const
+{
+	std::map<std::string, std::string> unpacked = {};
+	detail::unpackArgs<0>(unpacked, ::std::forward<args_t>(args)...);
+	return specialize(unpacked);
+}
+
 } // tcu
 
 #endif // _TCUSTRINGTEMPLATE_HPP
diff --git a/framework/common/tcuTestCase.hpp b/framework/common/tcuTestCase.hpp
index 00996c5..16ba9bc 100644
--- a/framework/common/tcuTestCase.hpp
+++ b/framework/common/tcuTestCase.hpp
@@ -51,6 +51,13 @@
 	NODECLASS_LAST
 };
 
+enum TestRunnerType
+{
+	RUNNERTYPE_ANY		= 0u,
+	RUNNERTYPE_NONE		= (1u << 0),
+	RUNNERTYPE_AMBER	= (1u << 1)
+};
+
 inline TestNodeClass getTestNodeTypeClass (TestNodeType type)
 {
 	switch (type)
@@ -118,6 +125,7 @@
 	virtual void			init			(void);
 	virtual void			deinit			(void);
 	virtual IterateResult	iterate			(void) = 0;
+	virtual TestRunnerType	getRunnerType	(void) const	{ return RUNNERTYPE_NONE;		}
 
 protected:
 	TestContext&			m_testCtx;
diff --git a/framework/common/tcuTestHierarchyIterator.cpp b/framework/common/tcuTestHierarchyIterator.cpp
index 5c4ba63..ea0620f 100644
--- a/framework/common/tcuTestHierarchyIterator.cpp
+++ b/framework/common/tcuTestHierarchyIterator.cpp
@@ -175,8 +175,9 @@
 			{
 				const std::string nodePath = buildNodePath(m_sessionStack);
 
-				// Return to parent if name doesn't match filter.
-				if (!(isLeaf ? m_caseListFilter.checkTestCaseName(nodePath.c_str()) : m_caseListFilter.checkTestGroupName(nodePath.c_str())))
+				// Return to parent if name or runner type doesn't match filter.
+				if (!(isLeaf ? (m_caseListFilter.checkRunnerType(node->getRunnerType()) && m_caseListFilter.checkTestCaseName(nodePath.c_str()))
+							 : m_caseListFilter.checkTestGroupName(nodePath.c_str())))
 				{
 					m_sessionStack.pop_back();
 					break;
diff --git a/framework/common/tcuTestHierarchyUtil.cpp b/framework/common/tcuTestHierarchyUtil.cpp
index eaa391c..f52d6aa 100644
--- a/framework/common/tcuTestHierarchyUtil.cpp
+++ b/framework/common/tcuTestHierarchyUtil.cpp
@@ -207,7 +207,7 @@
 		{
 			iter.next();
 		}
-		catch (const tcu::NotSupportedError& e)
+		catch (const tcu::NotSupportedError&)
 		{
 			return;
 		}
diff --git a/framework/common/tcuTexLookupVerifier.cpp b/framework/common/tcuTexLookupVerifier.cpp
index a5be969..1dfd3d8 100644
--- a/framework/common/tcuTexLookupVerifier.cpp
+++ b/framework/common/tcuTexLookupVerifier.cpp
@@ -2203,6 +2203,11 @@
 	return computeFloatingPointError(value, bits);
 }
 
+Vec4 computeColorBitsThreshold(const IVec4& bits, const IVec4& numAccurateBits)
+{
+	return computeColorBitsError(bits, numAccurateBits);
+}
+
 Vec2 computeLodBoundsFromDerivates (const float dudx, const float dvdx, const float dwdx, const float dudy, const float dvdy, const float dwdy, const LodPrecision& prec)
 {
 	const float		mux			= deFloatAbs(dudx);
diff --git a/framework/common/tcuTexLookupVerifier.hpp b/framework/common/tcuTexLookupVerifier.hpp
index d69efca..60dc472 100644
--- a/framework/common/tcuTexLookupVerifier.hpp
+++ b/framework/common/tcuTexLookupVerifier.hpp
@@ -102,6 +102,7 @@
 
 Vec4		computeFixedPointThreshold			(const IVec4& bits);
 Vec4		computeFloatingPointThreshold		(const IVec4& bits, const Vec4& value);
+Vec4		computeColorBitsThreshold			(const IVec4& bits, const IVec4& numAccurateBits);
 
 Vec2		computeLodBoundsFromDerivates		(const float dudx, const float dudy, const LodPrecision& prec);
 Vec2		computeLodBoundsFromDerivates		(const float dudx, const float dvdx, const float dudy, const float dvdy, const LodPrecision& prec);
diff --git a/framework/common/tcuTexVerifierUtil.cpp b/framework/common/tcuTexVerifierUtil.cpp
index 004345d..43d3916 100644
--- a/framework/common/tcuTexVerifierUtil.cpp
+++ b/framework/common/tcuTexVerifierUtil.cpp
@@ -46,6 +46,15 @@
 	return computeFloatingPointError(1.0f, numAccurateBits);
 }
 
+float computeColorBitsError(const int bits, const int numAccurateBits)
+{
+	// Color bits error is not a generic function, it just for compute the error value that cannot be accurately shown in integer data format.
+	//
+	//		"bits" is color bit width, "numAccurateBits" is the number of accurate bits in color bits, "1 << (bits - numAccurateBits)" is the threshold in integer.
+	//		"1.0f / 256.0f" is epsilon value, to make sure the threshold use to calculate in float can be a little bigger than the real value.
+	return (float(1 << (bits - numAccurateBits)) + 1.0f / 256.0f) / float((1 << bits) - 1);
+}
+
 Vec2 computeNonNormalizedCoordBounds (const bool normalizedCoords, const int dim, const float coord, const int coordBits, const int uvBits)
 {
 	const float		coordErr		= computeFloatingPointError(coord, coordBits);
diff --git a/framework/common/tcuTexVerifierUtil.hpp b/framework/common/tcuTexVerifierUtil.hpp
index cb9051d..f52d3f4 100644
--- a/framework/common/tcuTexVerifierUtil.hpp
+++ b/framework/common/tcuTexVerifierUtil.hpp
@@ -35,6 +35,7 @@
 
 float		computeFloatingPointError			(const float value, const int numAccurateBits);
 float		computeFixedPointError				(const int numAccurateBits);
+float		computeColorBitsError				(const int bits, const int numAccurateBits);
 
 template<int Size>
 inline Vector<float, Size> computeFloatingPointError (const Vector<float, Size>& value, const Vector<deInt32, Size>& numAccurateBits)
@@ -54,6 +55,15 @@
 	return res;
 }
 
+template<int Size>
+inline Vector<float, Size> computeColorBitsError(const Vector<deInt32, Size>& bits, const Vector<deInt32, Size>& numAccurateBits)
+{
+	Vector<float, Size> res;
+	for (int ndx = 0; ndx < Size; ndx++)
+		res[ndx] = computeColorBitsError(bits[ndx], numAccurateBits[ndx]);
+	return res;
+}
+
 // Sampler introspection
 
 inline bool isNearestMipmapFilter(const Sampler::FilterMode mode)
diff --git a/framework/common/tcuTextureUtil.cpp b/framework/common/tcuTextureUtil.cpp
index 08b262d..f568388 100644
--- a/framework/common/tcuTextureUtil.cpp
+++ b/framework/common/tcuTextureUtil.cpp
@@ -569,10 +569,12 @@
 		case TextureFormat::SIGNED_INT8:					return IVec4(8);
 		case TextureFormat::SIGNED_INT16:					return IVec4(16);
 		case TextureFormat::SIGNED_INT32:					return IVec4(32);
+		case TextureFormat::SIGNED_INT64:					return IVec4(64);
 		case TextureFormat::UNSIGNED_INT8:					return IVec4(8);
 		case TextureFormat::UNSIGNED_INT16:					return IVec4(16);
 		case TextureFormat::UNSIGNED_INT24:					return IVec4(24);
 		case TextureFormat::UNSIGNED_INT32:					return IVec4(32);
+		case TextureFormat::UNSIGNED_INT64:					return IVec4(64);
 		case TextureFormat::SIGNED_INT_1010102_REV:			return IVec4(10,10,10,2);
 		case TextureFormat::UNSIGNED_INT_1010102_REV:		return IVec4(10,10,10,2);
 		case TextureFormat::UNSIGNED_INT_16_8_8:			return IVec4(16,8,0,0);
@@ -831,7 +833,8 @@
 enum GradientStyle
 {
 	GRADIENT_STYLE_OLD = 0,
-	GRADIENT_STYLE_NEW = 1
+	GRADIENT_STYLE_NEW = 1,
+	GRADIENT_STYLE_PYRAMID = 2
 };
 
 static void fillWithComponentGradients1D (const PixelBufferAccess& access, const Vec4& minVal, const Vec4& maxVal, GradientStyle)
@@ -850,21 +853,59 @@
 	}
 }
 
-static void fillWithComponentGradients2D (const PixelBufferAccess& access, const Vec4& minVal, const Vec4& maxVal, GradientStyle)
+static void fillWithComponentGradients2D (const PixelBufferAccess& access, const Vec4& minVal, const Vec4& maxVal, GradientStyle style)
 {
-	for (int y = 0; y < access.getHeight(); y++)
+	if (style == GRADIENT_STYLE_PYRAMID)
 	{
-		for (int x = 0; x < access.getWidth(); x++)
+		int xedge = deFloorFloatToInt32(float(access.getWidth()) * 0.6f);
+		int yedge = deFloorFloatToInt32(float(access.getHeight()) * 0.6f);
+
+		for (int y = 0; y < access.getHeight(); y++)
 		{
-			float s = ((float)x + 0.5f) / (float)access.getWidth();
-			float t = ((float)y + 0.5f) / (float)access.getHeight();
+			for (int x = 0; x < access.getWidth(); x++)
+			{
+				float s = ((float)x + 0.5f) / (float)access.getWidth();
+				float t = ((float)y + 0.5f) / (float)access.getHeight();
+				float coefR = 0.0f;
+				float coefG = 0.0f;
+				float coefB = 0.0f;
+				float coefA = 0.0f;
 
-			float r = linearInterpolate((      s  +       t) *0.5f, minVal.x(), maxVal.x());
-			float g = linearInterpolate((      s  + (1.0f-t))*0.5f, minVal.y(), maxVal.y());
-			float b = linearInterpolate(((1.0f-s) +       t) *0.5f, minVal.z(), maxVal.z());
-			float a = linearInterpolate(((1.0f-s) + (1.0f-t))*0.5f, minVal.w(), maxVal.w());
+				coefR = (x < xedge) ? s * 0.4f : (1 - s) * 0.6f;
+				coefG = (x < xedge) ? s * 0.4f : (1 - s) * 0.6f;
+				coefB = (x < xedge) ? (1.0f - s) * 0.4f : s * 0.6f - 0.2f;
+				coefA = (x < xedge) ? (1.0f - s) * 0.4f : s * 0.6f - 0.2f;
 
-			access.setPixel(tcu::Vec4(r, g, b, a), x, y);
+				coefR += (y < yedge) ? t * 0.4f : (1 - t) * 0.6f;
+				coefG += (y < yedge) ? (1.0f - t) * 0.4f : t * 0.6f - 0.2f;
+				coefB += (y < yedge) ? t * 0.4f : (1 - t) * 0.6f;
+				coefA += (y < yedge) ? (1.0f - t) * 0.4f : t * 0.6f - 0.2f;
+
+				float r = linearInterpolate(coefR, minVal.x(), maxVal.x());
+				float g = linearInterpolate(coefG, minVal.y(), maxVal.y());
+				float b = linearInterpolate(coefB, minVal.z(), maxVal.z());
+				float a = linearInterpolate(coefA, minVal.w(), maxVal.w());
+
+				access.setPixel(tcu::Vec4(r, g, b, a), x, y);
+			}
+		}
+	}
+	else
+	{
+		for (int y = 0; y < access.getHeight(); y++)
+		{
+			for (int x = 0; x < access.getWidth(); x++)
+			{
+				float s = ((float)x + 0.5f) / (float)access.getWidth();
+				float t = ((float)y + 0.5f) / (float)access.getHeight();
+
+				float r = linearInterpolate((s + t) *0.5f, minVal.x(), maxVal.x());
+				float g = linearInterpolate((s + (1.0f - t))*0.5f, minVal.y(), maxVal.y());
+				float b = linearInterpolate(((1.0f - s) + t) *0.5f, minVal.z(), maxVal.z());
+				float a = linearInterpolate(((1.0f - s) + (1.0f - t))*0.5f, minVal.w(), maxVal.w());
+
+				access.setPixel(tcu::Vec4(r, g, b, a), x, y);
+			}
 		}
 	}
 }
@@ -942,6 +983,11 @@
 	fillWithComponentGradientsStyled(access, minVal, maxVal, GRADIENT_STYLE_NEW);
 }
 
+void fillWithComponentGradients3(const PixelBufferAccess& access, const Vec4& minVal, const Vec4& maxVal)
+{
+	fillWithComponentGradientsStyled(access, minVal, maxVal, GRADIENT_STYLE_PYRAMID);
+}
+
 static void fillWithGrid1D (const PixelBufferAccess& access, int cellSize, const Vec4& colorA, const Vec4& colorB)
 {
 	for (int x = 0; x < access.getWidth(); x++)
diff --git a/framework/common/tcuTextureUtil.hpp b/framework/common/tcuTextureUtil.hpp
index 5512033..be9ed3f 100644
--- a/framework/common/tcuTextureUtil.hpp
+++ b/framework/common/tcuTextureUtil.hpp
@@ -117,6 +117,7 @@
 void	clearStencil					(const PixelBufferAccess& access, int stencil);
 void	fillWithComponentGradients		(const PixelBufferAccess& access, const Vec4& minVal, const Vec4& maxVal);
 void	fillWithComponentGradients2		(const PixelBufferAccess& access, const Vec4& minVal, const Vec4& maxVal);
+void	fillWithComponentGradients3		(const PixelBufferAccess& access, const Vec4& minVal, const Vec4& maxVal);
 void	fillWithGrid					(const PixelBufferAccess& access, int cellSize, const Vec4& colorA, const Vec4& colorB);
 void	fillWithRepeatableGradient		(const PixelBufferAccess& access, const Vec4& colorA, const Vec4& colorB);
 void	fillWithMetaballs				(const PixelBufferAccess& access, int numMetaballs, deUint32 seed);
diff --git a/framework/common/tcuWaiverUtil.cpp b/framework/common/tcuWaiverUtil.cpp
index facaffe..09a1f19 100644
--- a/framework/common/tcuWaiverUtil.cpp
+++ b/framework/common/tcuWaiverUtil.cpp
@@ -438,7 +438,11 @@
 
 bool GLWaiverTreeBuilder::matchVendor(const std::string& vendor) const
 {
-	return m_currentVendor == vendor;
+	return tcu::matchWildcards(vendor.cbegin(),
+							   vendor.cend(),
+							   m_currentVendor.cbegin(),
+							   m_currentVendor.cend(),
+							   false);
 }
 
 bool GLWaiverTreeBuilder::matchDevice(const std::string& device) const
diff --git a/framework/delibs/cmake/Defs.cmake b/framework/delibs/cmake/Defs.cmake
index e65015b..e710856 100644
--- a/framework/delibs/cmake/Defs.cmake
+++ b/framework/delibs/cmake/Defs.cmake
@@ -24,7 +24,7 @@
 # project(deproject)
 # include(delibs/cmake/Defs.cmake NO_POLICY_SCOPE)
 
-cmake_policy(VERSION 2.6)
+cmake_policy(VERSION 3.10.2)
 
 # \todo [pyry] More intelligent detection, perhaps use some script?
 
diff --git a/framework/delibs/debase/deDefs.h b/framework/delibs/debase/deDefs.h
index ed3b917..fa19567 100644
--- a/framework/delibs/debase/deDefs.h
+++ b/framework/delibs/debase/deDefs.h
@@ -340,6 +340,9 @@
 /** Offset of a struct member. */
 #define DE_OFFSET_OF(STRUCT, MEMBER) ((deUint32)(deUintptr)(deUint8*)&(((STRUCT*)0)->MEMBER))
 
+/** Used in enum to easify declarations for struct serialization. Declares 'NAME'_OFFSET, 'NAME'_SIZE, and offsets counter for next enum value by SIZE. */
+#define DE_SERIALIZED_FIELD(NAME, SIZE) NAME ## _OFFSET, NAME ## _SIZE = (SIZE), _DE_TMP_ ## NAME = NAME ## _OFFSET + (SIZE) - 1
+
 /* Pointer size. */
 #if defined(DE_PTR_SIZE)
 	/* nada */
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/framework/delibs/decpp/deSTLUtil.hpp b/framework/delibs/decpp/deSTLUtil.hpp
index 18df99c..348378d 100644
--- a/framework/delibs/decpp/deSTLUtil.hpp
+++ b/framework/delibs/decpp/deSTLUtil.hpp
@@ -29,6 +29,7 @@
 #include <stdexcept>
 #include <utility>
 #include <iterator>
+#include <vector>
 
 namespace de
 {
@@ -114,6 +115,41 @@
 	return ret.second;
 }
 
+// Returns the total size in bytes for contiguous-storage containers.
+template <typename T>
+size_t dataSize (const T& container)
+{
+	return (container.size() * sizeof(typename T::value_type));
+}
+
+// Returns const pointer to data stored in vector or NULL if vector is empty
+template <typename T>
+const T* dataSafe (const std::vector<T>& container)
+{
+	return container.empty() ? static_cast<const T*>(DE_NULL) : container.data();
+}
+
+// Returns pointer to data stored in vector or NULL if vector is empty
+template <typename T>
+T* dataSafe (std::vector<T>& container)
+{
+	return container.empty() ? static_cast<T*>(DE_NULL) : container.data();
+}
+
+// Returns the data pointer or a null pointer if the vector is empty.
+template <typename T>
+T* dataOrNull (std::vector<T>& container)
+{
+	return (container.empty() ? nullptr : container.data());
+}
+
+// Returns the data pointer or a null pointer if the vector is empty.
+template <typename T>
+const T* dataOrNull (const std::vector<T>& container)
+{
+	return (container.empty() ? nullptr : container.data());
+}
+
 } // de
 
 #endif // _DESTLUTIL_HPP
diff --git a/framework/opengl/gluRenderContext.hpp b/framework/opengl/gluRenderContext.hpp
index 2fd4fb4..4c5665b 100644
--- a/framework/opengl/gluRenderContext.hpp
+++ b/framework/opengl/gluRenderContext.hpp
@@ -148,6 +148,8 @@
 	explicit			ContextType		(ApiType apiType, ContextFlags flags = ContextFlags(0));
 
 	ApiType				getAPI			(void) const	{ return ApiType::fromBits(m_bits & ((1u<<TOTAL_API_BITS)-1u));			}
+	void				setAPI			(const ApiType& apiType)	{ m_bits = apiType.getPacked();								}
+
 	ContextFlags		getFlags		(void) const	{ return ContextFlags((m_bits>>FLAGS_SHIFT)	& ((1u<<FLAGS_BITS)-1u));	}
 
 	using ApiType::getMajorVersion;
diff --git a/framework/opengl/gluStateReset.cpp b/framework/opengl/gluStateReset.cpp
index fe159b3..f7e41f2 100644
--- a/framework/opengl/gluStateReset.cpp
+++ b/framework/opengl/gluStateReset.cpp
@@ -1163,6 +1163,27 @@
 		GLU_EXPECT_NO_ERROR(gl.getError(), "Buffer copy state reset failed");
 	}
 
+	// Images.
+	if (contextSupports(type, ApiType::core(4,4)))
+	{
+		int numImageUnits = 0;
+		gl.getIntegerv(GL_MAX_IMAGE_UNITS, &numImageUnits);
+
+		for (int ndx = 0; ndx < numImageUnits; ndx++)
+			gl.bindImageTexture(ndx, 0, 0, GL_FALSE, 0, GL_READ_ONLY, GL_R32UI);
+
+		GLU_EXPECT_NO_ERROR(gl.getError(), "Image state reset failed");
+	}
+
+	// Sample shading state.
+	if (contextSupports(type, ApiType::core(4,0)))
+	{
+		gl.minSampleShading(0.0f);
+		gl.disable(GL_SAMPLE_SHADING);
+
+		GLU_EXPECT_NO_ERROR(gl.getError(), "Sample shading state reset failed");
+	}
+
 	// Debug state
 	if (ctxInfo.isExtensionSupported("GL_KHR_debug"))
 	{
diff --git a/framework/opengl/gluTextureUtil.cpp b/framework/opengl/gluTextureUtil.cpp
index bbf88e1..16d50d9 100644
--- a/framework/opengl/gluTextureUtil.cpp
+++ b/framework/opengl/gluTextureUtil.cpp
@@ -452,6 +452,8 @@
 		case GL_RGB_INTEGER:		return TextureFormat(TextureFormat::RGB,	mapGLChannelType(dataType, false));
 		case GL_RG_INTEGER:			return TextureFormat(TextureFormat::RG,		mapGLChannelType(dataType, false));
 		case GL_RED_INTEGER:		return TextureFormat(TextureFormat::R,		mapGLChannelType(dataType, false));
+		case GL_SRGB:				return TextureFormat(TextureFormat::sRGB,	mapGLChannelType(dataType, false));
+		case GL_SRGB_ALPHA:			return TextureFormat(TextureFormat::sRGBA,	mapGLChannelType(dataType, false));
 
 		case GL_DEPTH_COMPONENT:	return TextureFormat(TextureFormat::D,		mapGLChannelType(dataType, true));
 		case GL_DEPTH_STENCIL:		return TextureFormat(TextureFormat::DS,		mapGLChannelType(dataType, true));
diff --git a/framework/opengl/simplereference/sglrReferenceContext.cpp b/framework/opengl/simplereference/sglrReferenceContext.cpp
index c9378b6..6ac6795 100644
--- a/framework/opengl/simplereference/sglrReferenceContext.cpp
+++ b/framework/opengl/simplereference/sglrReferenceContext.cpp
@@ -30,6 +30,7 @@
 #include "tcuVectorUtil.hpp"
 #include "gluDefs.hpp"
 #include "gluTextureUtil.hpp"
+#include "gluContextInfo.hpp"
 #include "glwFunctions.hpp"
 #include "glwEnums.hpp"
 #include "deMemory.h"
@@ -250,6 +251,17 @@
 {
 	const glw::Functions& gl = renderCtx.getFunctions();
 
+	// When the OpenGL ES's major version bigger than 3, and the expect context version is 3,
+	// we need query the real GL context version and update the real version to reference context.
+	if (glu::IsES3Compatible(gl) && isES2Context(contextType))
+	{
+		int majorVersion = contextType.getMajorVersion();
+		int minorVersion = contextType.getMinorVersion();
+		gl.getIntegerv(GL_MAJOR_VERSION, &majorVersion);
+		gl.getIntegerv(GL_MINOR_VERSION, &minorVersion);
+		contextType.setAPI(glu::ApiType::es(majorVersion, minorVersion));
+	}
+
 	gl.getIntegerv(GL_MAX_TEXTURE_IMAGE_UNITS,		&maxTextureImageUnits);
 	gl.getIntegerv(GL_MAX_TEXTURE_SIZE,				&maxTexture2DSize);
 	gl.getIntegerv(GL_MAX_CUBE_MAP_TEXTURE_SIZE,	&maxTextureCubeSize);
@@ -327,7 +339,7 @@
 	, m_textureUnits					(m_limits.maxTextureImageUnits)
 	, m_emptyTex1D						()
 	, m_emptyTex2D						(isES2Context(limits.contextType))
-	, m_emptyTexCube					()
+	, m_emptyTexCube					(!isES2Context(limits.contextType))
 	, m_emptyTex2DArray					()
 	, m_emptyTex3D						()
 	, m_emptyTexCubeArray				()
@@ -443,6 +455,9 @@
 		m_emptyTexCubeArray.getLevel(0).setPixel(Vec4(0.0f, 0.0f, 0.0f, 1.0f), 0, 0, faceNdx);
 	m_emptyTexCubeArray.updateView(tcu::Sampler::MODE_LAST);
 
+	for (int unitNdx = 0; unitNdx < m_limits.maxTextureImageUnits; unitNdx++)
+		m_textureUnits[unitNdx].defaultCubeTex.getSampler().seamlessCubeMap = !isES2Context(limits.contextType);
+
 	if (glu::isContextTypeGLCore(getType()))
 		m_sRGBUpdateEnabled = false;
 }
@@ -646,14 +661,15 @@
 		else
 		{
 			// New texture object.
+			bool seamlessCubeMap = !isES2Context(m_limits.contextType);
 			switch (target)
 			{
-				case GL_TEXTURE_1D:				texObj = new Texture1D			(texture);	break;
-				case GL_TEXTURE_2D:				texObj = new Texture2D			(texture);	break;
-				case GL_TEXTURE_CUBE_MAP:		texObj = new TextureCube		(texture);	break;
-				case GL_TEXTURE_2D_ARRAY:		texObj = new Texture2DArray		(texture);	break;
-				case GL_TEXTURE_3D:				texObj = new Texture3D			(texture);	break;
-				case GL_TEXTURE_CUBE_MAP_ARRAY:	texObj = new TextureCubeArray	(texture);	break;
+				case GL_TEXTURE_1D:				texObj = new Texture1D			(texture);					break;
+				case GL_TEXTURE_2D:				texObj = new Texture2D			(texture);					break;
+				case GL_TEXTURE_CUBE_MAP:		texObj = new TextureCube		(texture, seamlessCubeMap);	break;
+				case GL_TEXTURE_2D_ARRAY:		texObj = new Texture2DArray		(texture);					break;
+				case GL_TEXTURE_3D:				texObj = new Texture3D			(texture);					break;
+				case GL_TEXTURE_CUBE_MAP_ARRAY:	texObj = new TextureCubeArray	(texture);					break;
 				default:
 					DE_ASSERT(false);
 			}
@@ -4728,7 +4744,7 @@
 		m_effectiveAccess[levelNdx] = tcu::getEffectiveDepthStencilAccess(m_access[levelNdx], mode);
 }
 
-Texture::Texture (deUint32 name, Type type)
+Texture::Texture (deUint32 name, Type type, deBool seamless)
 	: NamedObject	(name)
 	, m_type		(type)
 	, m_immutable	(false)
@@ -4742,7 +4758,7 @@
 					 tcu::Sampler::COMPAREMODE_NONE,
 					 0,					// cmp channel ndx
 					 tcu::Vec4(0.0f),	// border color
-					 true				// seamless cube map \todo [2014-02-19 pyry] Default value ok?
+					 seamless			// seamless cube map, Default value is True.
 					 )
 	, m_baseLevel	(0)
 	, m_maxLevel	(1000)
@@ -4950,8 +4966,8 @@
 	}
 }
 
-TextureCube::TextureCube (deUint32 name)
-	: Texture(name, TYPE_CUBE_MAP)
+TextureCube::TextureCube (deUint32 name, deBool seamless)
+	: Texture(name, TYPE_CUBE_MAP, seamless)
 {
 }
 
diff --git a/framework/opengl/simplereference/sglrReferenceContext.hpp b/framework/opengl/simplereference/sglrReferenceContext.hpp
index b9aca1a..5ddeb60 100644
--- a/framework/opengl/simplereference/sglrReferenceContext.hpp
+++ b/framework/opengl/simplereference/sglrReferenceContext.hpp
@@ -85,7 +85,7 @@
 		TYPE_LAST
 	};
 
-								Texture			(deUint32 name, Type type);
+								Texture			(deUint32 name, Type type, deBool seamless = true);
 	virtual						~Texture		(void) {}
 
 	Type						getType			(void) const	{ return m_type;			}
@@ -193,7 +193,7 @@
 class TextureCube : public Texture
 {
 public:
-										TextureCube		(deUint32 name = 0);
+										TextureCube		(deUint32 name = 0, deBool seamless = true);
 	virtual								~TextureCube	(void);
 
 	void								clearLevels		(void);
diff --git a/framework/platform/CMakeLists.txt b/framework/platform/CMakeLists.txt
index f7858f5..260950a 100644
--- a/framework/platform/CMakeLists.txt
+++ b/framework/platform/CMakeLists.txt
@@ -19,7 +19,7 @@
 			win32/tcuWin32VulkanPlatform.cpp
 			)
 
-	elseif ((DE_OS_IS_UNIX OR DE_OS_IS_OSX) AND (DEQP_USE_X11 OR DEQP_USE_WAYLAND))
+	elseif ((DE_OS_IS_UNIX OR DE_OS_IS_OSX) AND (DEQP_USE_X11 OR DEQP_USE_WAYLAND OR DEQP_USE_HEADLESS))
 
 		set(TCUTIL_PLATFORM_SRCS
 			lnx/tcuLnx.cpp
@@ -83,6 +83,10 @@
 			include_directories(wayland)
 		endif()
 
+		if (DEQP_USE_HEADLESS)
+			add_definitions(-DDEQP_SUPPORT_HEADLESS=1)
+		endif()
+
 	elseif (DE_OS_IS_UNIX AND DEQP_USE_SURFACELESS)
 		set(TCUTIL_PLATFORM_SRCS
 			surfaceless/tcuSurfacelessPlatform.hpp
@@ -101,8 +105,6 @@
 				${TCUTIL_PLATFORM_SRCS}
 				android/tcuAndroidAssets.cpp
 				android/tcuAndroidAssets.hpp
-				android/tcuAndroidInternals.cpp
-				android/tcuAndroidInternals.hpp
 				android/tcuAndroidNativeActivity.cpp
 				android/tcuAndroidNativeActivity.hpp
 				android/tcuAndroidPlatform.cpp
diff --git a/framework/platform/android/tcuAndroidInternals.cpp b/framework/platform/android/tcuAndroidInternals.cpp
deleted file mode 100644
index 8590393..0000000
--- a/framework/platform/android/tcuAndroidInternals.cpp
+++ /dev/null
@@ -1,277 +0,0 @@
-/*-------------------------------------------------------------------------
- * drawElements Quality Program Tester Core
- * ----------------------------------------
- *
- * Copyright 2014 The Android Open Source Project
- *
- * 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 Access to Android internals that are not a part of the NDK.
- *//*--------------------------------------------------------------------*/
-
-#include "tcuAndroidInternals.hpp"
-#include "deMemory.h"
-#include "deStringUtil.hpp"
-
-namespace tcu
-{
-namespace Android
-{
-namespace internal
-{
-
-using std::string;
-using de::DynamicLibrary;
-
-template<typename Func>
-void setFuncPtr (Func*& funcPtr, DynamicLibrary& lib, const string& symname)
-{
-	funcPtr = reinterpret_cast<Func*>(lib.getFunction(symname.c_str()));
-	if (!funcPtr)
-		TCU_THROW(NotSupportedError, ("Unable to look up symbol from shared object: " + symname).c_str());
-}
-
-LibUI::LibUI (void)
-	: m_library	("libui.so")
-{
-	GraphicBufferFunctions& gb = m_functions.graphicBuffer;
-
-	setFuncPtr(gb.constructor,		m_library,	"_ZN7android13GraphicBufferC1Ejjij");
-	setFuncPtr(gb.destructor,		m_library,	"_ZN7android13GraphicBufferD1Ev");
-	setFuncPtr(gb.getNativeBuffer,	m_library,	"_ZNK7android13GraphicBuffer15getNativeBufferEv");
-	setFuncPtr(gb.lock,				m_library,	"_ZN7android13GraphicBuffer4lockEjPPv");
-	setFuncPtr(gb.unlock,			m_library,	"_ZN7android13GraphicBuffer6unlockEv");
-	setFuncPtr(gb.initCheck,		m_library,	"_ZNK7android13GraphicBuffer9initCheckEv");
-}
-
-#define GRAPHICBUFFER_SIZE 1024 // Hopefully enough
-
-typedef void (*GenericFptr)();
-
-//! call constructor with 4 arguments
-template <typename RT, typename T1, typename T2, typename T3, typename T4>
-RT* callConstructor4 (GenericFptr fptr, void* memory, size_t memorySize, T1 param1, T2 param2, T3 param3, T4 param4)
-{
-	DE_UNREF(memorySize);
-
-#if (DE_CPU == DE_CPU_ARM)
-	// C1 constructors return pointer
-	typedef RT* (*ABIFptr)(void*, T1, T2, T3, T4);
-	(void)((ABIFptr)fptr)(memory, param1, param2, param3, param4);
-	return reinterpret_cast<RT*>(memory);
-#elif (DE_CPU == DE_CPU_ARM_64)
-	// C1 constructors return void
-	typedef void (*ABIFptr)(void*, T1, T2, T3, T4);
-	((ABIFptr)fptr)(memory, param1, param2, param3, param4);
-	return reinterpret_cast<RT*>(memory);
-#elif (DE_CPU == DE_CPU_X86)
-	// ctor returns void
-	typedef void (*ABIFptr)(void*, T1, T2, T3, T4);
-	((ABIFptr)fptr)(memory, param1, param2, param3, param4);
-	return reinterpret_cast<RT*>(memory);
-#elif (DE_CPU == DE_CPU_X86_64)
-	// ctor returns void
-	typedef void (*ABIFptr)(void*, T1, T2, T3, T4);
-	((ABIFptr)fptr)(memory, param1, param2, param3, param4);
-	return reinterpret_cast<RT*>(memory);
-#else
-	DE_UNREF(fptr);
-	DE_UNREF(memory);
-	DE_UNREF(param1);
-	DE_UNREF(param2);
-	DE_UNREF(param3);
-	DE_UNREF(param4);
-	TCU_THROW(NotSupportedError, "ABI not supported");
-	return DE_NULL;
-#endif
-}
-
-template <typename T>
-void callDestructor (GenericFptr fptr, T* obj)
-{
-#if (DE_CPU == DE_CPU_ARM)
-	// D1 destructor returns ptr
-	typedef void* (*ABIFptr)(T* obj);
-	(void)((ABIFptr)fptr)(obj);
-#elif (DE_CPU == DE_CPU_ARM_64)
-	// D1 destructor returns void
-	typedef void (*ABIFptr)(T* obj);
-	((ABIFptr)fptr)(obj);
-#elif (DE_CPU == DE_CPU_X86)
-	// dtor returns void
-	typedef void (*ABIFptr)(T* obj);
-	((ABIFptr)fptr)(obj);
-#elif (DE_CPU == DE_CPU_X86_64)
-	// dtor returns void
-	typedef void (*ABIFptr)(T* obj);
-	((ABIFptr)fptr)(obj);
-#else
-	DE_UNREF(fptr);
-	DE_UNREF(obj);
-	TCU_THROW(NotSupportedError, "ABI not supported");
-#endif
-}
-
-template<typename T1, typename T2>
-T1* pointerToOffset (T2* ptr, size_t bytes)
-{
-	return reinterpret_cast<T1*>((deUint8*)ptr + bytes);
-}
-
-static android::android_native_base_t* getAndroidNativeBase (android::GraphicBuffer* gb)
-{
-	// \note: assuming Itanium ABI
-	return pointerToOffset<android::android_native_base_t>(gb, 2 * DE_PTR_SIZE);
-}
-
-//! android_native_base_t::magic for ANativeWindowBuffer
-static deInt32 getExpectedNativeBufferVersion (void)
-{
-#if (DE_PTR_SIZE == 4)
-	return 96;
-#elif (DE_PTR_SIZE == 8)
-	return 168;
-#else
-#	error Invalid DE_PTR_SIZE
-#endif
-}
-
-//! access android_native_base_t::magic
-static deUint32 getNativeBaseMagic (android::android_native_base_t* base)
-{
-	return *pointerToOffset<deUint32>(base, 0);
-}
-
-//! access android_native_base_t::version
-static deUint32 getNativeBaseVersion (android::android_native_base_t* base)
-{
-	return *pointerToOffset<deInt32>(base, 4);
-}
-
-//! access android_native_base_t::incRef
-static NativeBaseFunctions::incRefFunc getNativeBaseIncRefFunc (android::android_native_base_t* base)
-{
-	return *pointerToOffset<NativeBaseFunctions::incRefFunc>(base, 8 + DE_PTR_SIZE*4);
-}
-
-//! access android_native_base_t::decRef
-static NativeBaseFunctions::decRefFunc getNativeBaseDecRefFunc (android::android_native_base_t* base)
-{
-	return *pointerToOffset<NativeBaseFunctions::decRefFunc>(base, 8 + DE_PTR_SIZE*5);
-}
-
-static android::GraphicBuffer* createGraphicBuffer (const GraphicBufferFunctions& functions, NativeBaseFunctions& baseFunctions, deUint32 w, deUint32 h, PixelFormat format, deUint32 usage)
-{
-	// \note: Hopefully uses the same allocator as libui
-	void* const memory = deMalloc(GRAPHICBUFFER_SIZE);
-	if (memory == DE_NULL)
-		TCU_THROW(ResourceError, "Could not alloc for GraphicBuffer");
-	else
-	{
-		try
-		{
-			android::GraphicBuffer* const			gb			= callConstructor4<android::GraphicBuffer, deUint32, deUint32, PixelFormat, deUint32>(functions.constructor,
-																																					  memory,
-																																					  GRAPHICBUFFER_SIZE,
-																																					  w,
-																																					  h,
-																																					  format,
-																																					  usage);
-			android::android_native_base_t* const	base		= getAndroidNativeBase(gb);
-			status_t								ctorStatus	= functions.initCheck(gb);
-
-			if (ctorStatus)
-			{
-				// ctor failed
-				callDestructor<android::GraphicBuffer>(functions.destructor, gb);
-				TCU_THROW(NotSupportedError, ("GraphicBuffer ctor failed, initCheck returned " + de::toString(ctorStatus)).c_str());
-			}
-
-			// check object layout
-			{
-				const deUint32 magic		= getNativeBaseMagic(base);
-				const deUint32 bufferMagic	= 0x5f626672u; // "_bfr"
-
-				if (magic != bufferMagic)
-					TCU_THROW(NotSupportedError, "GraphicBuffer layout unexpected");
-			}
-
-			// check object version
-			{
-				const deInt32 version			= getNativeBaseVersion(base);
-				const deInt32 expectedVersion	= getExpectedNativeBufferVersion();
-
-				if (version != expectedVersion)
-					TCU_THROW(NotSupportedError, "GraphicBuffer version unexpected");
-			}
-
-			// locate refcounting functions
-
-			if (!baseFunctions.incRef || !baseFunctions.decRef)
-			{
-				baseFunctions.incRef = getNativeBaseIncRefFunc(base);
-				baseFunctions.decRef = getNativeBaseDecRefFunc(base);
-			}
-
-			// take the initial reference and return
-			baseFunctions.incRef(base);
-			return gb;
-		}
-		catch (...)
-		{
-			deFree(memory);
-			throw;
-		}
-	}
-}
-
-GraphicBuffer::GraphicBuffer (const LibUI& lib, deUint32 width, deUint32 height, PixelFormat format, deUint32 usage)
-	: m_functions	(lib.getFunctions().graphicBuffer)
-	, m_impl		(DE_NULL)
-{
-	m_baseFunctions.incRef = DE_NULL;
-	m_baseFunctions.decRef = DE_NULL;
-
-	// \note createGraphicBuffer updates m_baseFunctions
-	m_impl = createGraphicBuffer(m_functions, m_baseFunctions, width, height, format, usage);
-}
-
-GraphicBuffer::~GraphicBuffer (void)
-{
-	if (m_impl && m_baseFunctions.decRef)
-	{
-		m_baseFunctions.decRef(getAndroidNativeBase(m_impl));
-		m_impl = DE_NULL;
-	}
-}
-
-status_t GraphicBuffer::lock (deUint32 usage, void** vaddr)
-{
-	return m_functions.lock(m_impl, usage, vaddr);
-}
-
-status_t GraphicBuffer::unlock (void)
-{
-	return m_functions.unlock(m_impl);
-}
-
-ANativeWindowBuffer* GraphicBuffer::getNativeBuffer (void) const
-{
-	return m_functions.getNativeBuffer(m_impl);
-}
-
-} // internal
-} // Android
-} // tcu
diff --git a/framework/platform/android/tcuAndroidInternals.hpp b/framework/platform/android/tcuAndroidInternals.hpp
deleted file mode 100644
index b52dd51..0000000
--- a/framework/platform/android/tcuAndroidInternals.hpp
+++ /dev/null
@@ -1,188 +0,0 @@
-#ifndef _TCUANDROIDINTERNALS_HPP
-#define _TCUANDROIDINTERNALS_HPP
-/*-------------------------------------------------------------------------
- * drawElements Quality Program Tester Core
- * ----------------------------------------
- *
- * Copyright 2014 The Android Open Source Project
- *
- * 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 Access to Android internals that are not a part of the NDK.
- *//*--------------------------------------------------------------------*/
-
-#include "tcuDefs.hpp"
-
-#include "deDynamicLibrary.hpp"
-
-#include <vector>
-#include <errno.h>
-
-struct ANativeWindowBuffer;
-
-namespace android
-{
-class GraphicBuffer;
-class android_native_base_t;
-}
-
-namespace tcu
-{
-
-namespace Android
-{
-
-// These classes and enums reflect internal android definitions
-namespace internal
-{
-
-// utils/Errors.h
-enum
-{
-	OK					= 0,
-	UNKNOWN_ERROR		= (-2147483647-1),
-	NO_MEMORY			= -ENOMEM,
-	INVALID_OPERATION	= -ENOSYS,
-	BAD_VALUE			= -EINVAL,
-	BAD_TYPE			= (UNKNOWN_ERROR + 1),
-	NAME_NOT_FOUND		= -ENOENT,
-	PERMISSION_DENIED	= -EPERM,
-	NO_INIT				= -ENODEV,
-	ALREADY_EXISTS		= -EEXIST,
-	DEAD_OBJECT			= -EPIPE,
-	FAILED_TRANSACTION	= (UNKNOWN_ERROR + 2),
-	BAD_INDEX			= -E2BIG,
-	NOT_ENOUGH_DATA		= (UNKNOWN_ERROR + 3),
-	WOULD_BLOCK			= (UNKNOWN_ERROR + 4),
-	TIMED_OUT			= (UNKNOWN_ERROR + 5),
-	UNKNOWN_TRANSACTION = (UNKNOWN_ERROR + 6),
-	FDS_NOT_ALLOWED		= (UNKNOWN_ERROR + 7),
-};
-
-typedef deInt32 status_t;
-
-// ui/PixelFormat.h, system/graphics.h
-enum
-{
-	PIXEL_FORMAT_UNKNOWN				= 0,
-	PIXEL_FORMAT_NONE					= 0,
-	PIXEL_FORMAT_CUSTOM					= -4,
-	PIXEL_FORMAT_TRANSLUCENT			= -3,
-	PIXEL_FORMAT_TRANSPARENT			= -2,
-	PIXEL_FORMAT_OPAQUE					= -1,
-	PIXEL_FORMAT_RGBA_8888				= 1,
-	PIXEL_FORMAT_RGBX_8888				= 2,
-	PIXEL_FORMAT_RGB_888				= 3,
-	PIXEL_FORMAT_RGB_565				= 4,
-	PIXEL_FORMAT_BGRA_8888				= 5,
-	PIXEL_FORMAT_RGBA_5551				= 6,
-	PIXEL_FORMAT_RGBA_4444				= 7,
-};
-
-typedef deInt32 PixelFormat;
-
-// ui/GraphicBuffer.h
-struct GraphicBufferFunctions
-{
-	typedef void					(*genericFunc)			();
-	typedef status_t				(*initCheckFunc)		(android::GraphicBuffer* buffer);
-	typedef status_t				(*lockFunc)				(android::GraphicBuffer* buffer, deUint32 usage, void** vaddr);
-	typedef status_t				(*unlockFunc)			(android::GraphicBuffer* buffer);
-	typedef ANativeWindowBuffer*	(*getNativeBufferFunc)	(const android::GraphicBuffer* buffer);
-
-	genericFunc						constructor;
-	genericFunc						destructor;
-	lockFunc						lock;
-	unlockFunc						unlock;
-	getNativeBufferFunc				getNativeBuffer;
-	initCheckFunc					initCheck;
-};
-
-// system/window.h
-struct NativeBaseFunctions
-{
-	typedef void	(*incRefFunc)			(android::android_native_base_t* base);
-	typedef void	(*decRefFunc)			(android::android_native_base_t* base);
-
-	incRefFunc		incRef;
-	decRefFunc		decRef;
-};
-
-struct LibUIFunctions
-{
-	GraphicBufferFunctions graphicBuffer;
-};
-
-class LibUI
-{
-public:
-	struct Functions
-	{
-		GraphicBufferFunctions graphicBuffer;
-	};
-
-							LibUI			(void);
-	const Functions&		getFunctions	(void) const { return m_functions; }
-
-private:
-	Functions				m_functions;
-	de::DynamicLibrary		m_library;
-};
-
-class GraphicBuffer
-{
-public:
-	// ui/GraphicBuffer.h, hardware/gralloc.h
-	enum {
-		USAGE_SW_READ_NEVER		= 0x00000000,
-		USAGE_SW_READ_RARELY	= 0x00000002,
-		USAGE_SW_READ_OFTEN		= 0x00000003,
-		USAGE_SW_READ_MASK		= 0x0000000f,
-
-		USAGE_SW_WRITE_NEVER	= 0x00000000,
-		USAGE_SW_WRITE_RARELY	= 0x00000020,
-		USAGE_SW_WRITE_OFTEN	= 0x00000030,
-		USAGE_SW_WRITE_MASK		= 0x000000f0,
-
-		USAGE_SOFTWARE_MASK		= USAGE_SW_READ_MASK | USAGE_SW_WRITE_MASK,
-
-		USAGE_PROTECTED			= 0x00004000,
-
-		USAGE_HW_TEXTURE		= 0x00000100,
-		USAGE_HW_RENDER			= 0x00000200,
-		USAGE_HW_2D				= 0x00000400,
-		USAGE_HW_COMPOSER		= 0x00000800,
-		USAGE_HW_VIDEO_ENCODER	= 0x00010000,
-		USAGE_HW_MASK			= 0x00071F00,
-	};
-
-									GraphicBuffer			(const LibUI& lib, deUint32 width, deUint32 height, PixelFormat format, deUint32 usage);
-									~GraphicBuffer			();
-
-	status_t						lock					(deUint32 usage, void** vaddr);
-	status_t						unlock					(void);
-	ANativeWindowBuffer*			getNativeBuffer			(void) const;
-
-private:
-	const GraphicBufferFunctions&	m_functions;
-	NativeBaseFunctions				m_baseFunctions;
-	android::GraphicBuffer*			m_impl;
-};
-
-} // internal
-} // Android
-} // tcu
-
-#endif // _TCUANDROIDINTERNALS_HPP
diff --git a/framework/platform/lnx/tcuLnxVulkanPlatform.cpp b/framework/platform/lnx/tcuLnxVulkanPlatform.cpp
index 2c44fdb..a4dffc2 100644
--- a/framework/platform/lnx/tcuLnxVulkanPlatform.cpp
+++ b/framework/platform/lnx/tcuLnxVulkanPlatform.cpp
@@ -193,6 +193,31 @@
 };
 #endif // DEQP_SUPPORT_WAYLAND
 
+#if defined (DEQP_SUPPORT_HEADLESS)
+
+struct VulkanWindowHeadless : public vk::wsi::Window
+{
+public:
+	void resize (const UVec2&)
+	{
+	}
+};
+
+class VulkanDisplayHeadless : public vk::wsi::Display
+{
+public:
+	VulkanDisplayHeadless ()
+	{
+	}
+
+	vk::wsi::Window* createWindow (const Maybe<UVec2>&) const
+	{
+		return new VulkanWindowHeadless();
+	}
+};
+
+#endif // DEQP_SUPPORT_HEADLESS
+
 class VulkanLibrary : public vk::Library
 {
 public:
@@ -246,6 +271,11 @@
 		return new VulkanDisplayWayland(MovePtr<wayland::Display>(new wayland::Display(m_eventState, WAYLAND_DISPLAY)));
 		break;
 #endif // DEQP_SUPPORT_WAYLAND
+#if defined (DEQP_SUPPORT_HEADLESS)
+	case vk::wsi::TYPE_HEADLESS:
+		return new VulkanDisplayHeadless();
+		break;
+#endif // DEQP_SUPPORT_HEADLESS
 
 	default:
 		TCU_THROW(NotSupportedError, "WSI type not supported");
@@ -268,6 +298,10 @@
 	case vk::wsi::TYPE_WAYLAND:
 		return wayland::Display::hasDisplay(WAYLAND_DISPLAY);
 #endif // DEQP_SUPPORT_WAYLAND
+#if defined (DEQP_SUPPORT_HEADLESS)
+       case vk::wsi::TYPE_HEADLESS:
+               return true;
+#endif // DEQP_SUPPORT_HEADLESS
 	default:
 		return false;
 
diff --git a/modules/egl/teglAndroidUtil.cpp b/modules/egl/teglAndroidUtil.cpp
index c5969fc..2e1ac47 100644
--- a/modules/egl/teglAndroidUtil.cpp
+++ b/modules/egl/teglAndroidUtil.cpp
@@ -30,16 +30,13 @@
 #include "eglwLibrary.hpp"
 #include "eglwEnums.hpp"
 
-#if (DE_OS == DE_OS_ANDROID)
-#	include "tcuAndroidInternals.hpp"
-#endif
-
 namespace deqp
 {
 namespace egl
 {
 namespace Image
 {
+
 using std::string;
 using de::MovePtr;
 using tcu::PixelBufferAccess;
@@ -58,88 +55,220 @@
 
 #else // DE_OS == DE_OS_ANDROID
 
-using tcu::Android::internal::LibUI;
-using tcu::Android::internal::GraphicBuffer;
-using tcu::Android::internal::PixelFormat;
-using tcu::Android::internal::status_t;
+namespace
+{
 
-PixelFormat getPixelFormat (GLenum format)
+#if defined(__ANDROID_API_O__) && (DE_ANDROID_API >= __ANDROID_API_O__)
+#	include <sys/system_properties.h>
+#	include <android/hardware_buffer.h>
+#	include "deDynamicLibrary.hpp"
+#	define BUILT_WITH_ANDROID_HARDWARE_BUFFER 1
+#endif
+
+#if defined(__ANDROID_API_P__) && (DE_ANDROID_API >= __ANDROID_API_P__)
+#	define BUILT_WITH_ANDROID_P_HARDWARE_BUFFER 1
+#endif
+
+deInt32 androidGetSdkVersion (void)
+{
+	static deInt32 sdkVersion = -1;
+	if (sdkVersion < 0)
+	{
+		char value[128] = {0};
+		__system_property_get("ro.build.version.sdk", value);
+		sdkVersion = static_cast<deInt32>(strtol(value, DE_NULL, 10));
+		printf("SDK Version is %d\n", sdkVersion);
+	}
+	return sdkVersion;
+}
+
+typedef int		(*pfnAHardwareBuffer_allocate)(const AHardwareBuffer_Desc* desc, AHardwareBuffer** outBuffer);
+typedef void	(*pfnAHardwareBuffer_describe)(const AHardwareBuffer* buffer, AHardwareBuffer_Desc* outDesc);
+typedef void	(*pfnAHardwareBuffer_acquire)(AHardwareBuffer* buffer);
+typedef void	(*pfnAHardwareBuffer_release)(AHardwareBuffer* buffer);
+typedef int		(*pfnAHardwareBuffer_isSupported)(const AHardwareBuffer_Desc* desc);
+
+struct AhbFunctions
+{
+	pfnAHardwareBuffer_allocate		allocate;
+	pfnAHardwareBuffer_describe		describe;
+	pfnAHardwareBuffer_acquire		acquire;
+	pfnAHardwareBuffer_release		release;
+	pfnAHardwareBuffer_isSupported	isSupported;
+};
+
+AhbFunctions ahbFunctions;
+
+bool ahbFunctionsLoaded (AhbFunctions* pAhbFunctions)
+{
+	static bool ahbApiLoaded = false;
+	if (ahbApiLoaded ||
+			((pAhbFunctions->allocate != DE_NULL) &&
+			 (pAhbFunctions->describe != DE_NULL) &&
+			 (pAhbFunctions->acquire  != DE_NULL) &&
+			 (pAhbFunctions->release  != DE_NULL) &&
+			 (pAhbFunctions->isSupported  != DE_NULL)))
+	{
+		ahbApiLoaded = true;
+		return true;
+	}
+	return false;
+}
+
+bool loadAhbDynamicApis (deInt32 sdkVersion)
+{
+	if (sdkVersion >= __ANDROID_API_O__)
+	{
+		if (!ahbFunctionsLoaded(&ahbFunctions))
+		{
+			static de::DynamicLibrary libnativewindow("libnativewindow.so");
+			ahbFunctions.allocate = reinterpret_cast<pfnAHardwareBuffer_allocate>(libnativewindow.getFunction("AHardwareBuffer_allocate"));
+			ahbFunctions.describe = reinterpret_cast<pfnAHardwareBuffer_describe>(libnativewindow.getFunction("AHardwareBuffer_describe"));
+			ahbFunctions.acquire  = reinterpret_cast<pfnAHardwareBuffer_acquire>(libnativewindow.getFunction("AHardwareBuffer_acquire"));
+			ahbFunctions.release  = reinterpret_cast<pfnAHardwareBuffer_release>(libnativewindow.getFunction("AHardwareBuffer_release"));
+			ahbFunctions.isSupported  = reinterpret_cast<pfnAHardwareBuffer_isSupported>(libnativewindow.getFunction("AHardwareBuffer_isSupported"));
+
+			return ahbFunctionsLoaded(&ahbFunctions);
+		}
+		else
+		{
+			return true;
+		}
+	}
+
+	return false;
+}
+
+AHardwareBuffer_Format getPixelFormat (GLenum format)
 {
 	switch (format)
 	{
-		case GL_RGB565:		return tcu::Android::internal::PIXEL_FORMAT_RGB_565;
-		case GL_RGB8:		return tcu::Android::internal::PIXEL_FORMAT_RGB_888;
-		case GL_RGBA4:		return tcu::Android::internal::PIXEL_FORMAT_RGBA_4444;
-		case GL_RGB5_A1:	return tcu::Android::internal::PIXEL_FORMAT_RGBA_5551;
-		case GL_RGBA8:		return tcu::Android::internal::PIXEL_FORMAT_RGBA_8888;
-		default:			TCU_THROW(NotSupportedError, "Texture format unsupported by Android");
+		case GL_RGB565:				return AHARDWAREBUFFER_FORMAT_R5G6B5_UNORM;
+		case GL_RGB8:				return AHARDWAREBUFFER_FORMAT_R8G8B8_UNORM;
+		case GL_RGBA8:				return AHARDWAREBUFFER_FORMAT_R8G8B8A8_UNORM;
+		case GL_DEPTH_COMPONENT16:	return AHARDWAREBUFFER_FORMAT_D16_UNORM;
+		case GL_DEPTH_COMPONENT24:	return AHARDWAREBUFFER_FORMAT_D24_UNORM;
+		case GL_DEPTH24_STENCIL8:	return AHARDWAREBUFFER_FORMAT_D24_UNORM_S8_UINT;
+		case GL_DEPTH_COMPONENT32F:	return AHARDWAREBUFFER_FORMAT_D32_FLOAT;
+		case GL_DEPTH32F_STENCIL8:	return AHARDWAREBUFFER_FORMAT_D32_FLOAT_S8_UINT;
+		case GL_RGB10_A2:			return AHARDWAREBUFFER_FORMAT_R10G10B10A2_UNORM;
+		case GL_RGBA16F:			return AHARDWAREBUFFER_FORMAT_R16G16B16A16_FLOAT;
+		case GL_STENCIL_INDEX8:		return AHARDWAREBUFFER_FORMAT_S8_UINT;
+
+		default:					TCU_THROW(NotSupportedError, "Texture format unsupported by Android");
 	}
 }
 
 class AndroidNativeClientBuffer : public ClientBuffer
 {
 public:
-							AndroidNativeClientBuffer	(const LibUI& lib, GLenum format);
-	EGLClientBuffer			get							(void) const { return reinterpret_cast<EGLClientBuffer>(m_windowBuffer); }
-	GraphicBuffer&			getGraphicBuffer			(void) { return m_graphicBuffer; }
+						AndroidNativeClientBuffer	(const Library& egl, GLenum format);
+						~AndroidNativeClientBuffer	(void);
+	EGLClientBuffer		get							(void) const;
+	void				lock						(void** data);
+	void				unlock						(void);
 
 private:
-	GraphicBuffer			m_graphicBuffer;
-	ANativeWindowBuffer*	m_windowBuffer;
+	const Library&		m_egl;
+	AHardwareBuffer*	m_hardwareBuffer;
 };
 
-AndroidNativeClientBuffer::AndroidNativeClientBuffer (const LibUI& lib, GLenum format)
-	: m_graphicBuffer	(lib, 64, 64, getPixelFormat(format),
-						 GraphicBuffer::USAGE_SW_READ_OFTEN		|
-						 GraphicBuffer::USAGE_SW_WRITE_RARELY	|
-						 GraphicBuffer::USAGE_HW_TEXTURE		|
-						 GraphicBuffer::USAGE_HW_RENDER)
-	, m_windowBuffer	(m_graphicBuffer.getNativeBuffer())
+AndroidNativeClientBuffer::AndroidNativeClientBuffer (const Library& egl, GLenum format)
+	: m_egl(egl)
 {
+	//deInt32 sdkVersion = checkAnbApiBuild();
+	deInt32 sdkVersion = androidGetSdkVersion();
+#if defined(BUILT_WITH_ANDROID_P_HARDWARE_BUFFER)
+	// When testing AHB on Android-P and newer the CTS must be compiled against API28 or newer.
+	DE_TEST_ASSERT(sdkVersion >= 28); /*__ANDROID_API_P__ */
+#else
+	// When testing AHB on Android-O and newer the CTS must be compiled against API26 or newer.
+	DE_TEST_ASSERT(sdkVersion >= 26); /* __ANDROID_API_O__ */
+#endif // !defined(BUILT_WITH_ANDROID_P_HARDWARE_BUFFER)
+
+	if (sdkVersion >= __ANDROID_API_O__)
+	{
+#if defined(BUILT_WITH_ANDROID_HARDWARE_BUFFER)
+		if (!loadAhbDynamicApis(sdkVersion))
+		{
+			// Couldn't load Android AHB system APIs.
+			DE_TEST_ASSERT(false);
+		}
+#else
+		// Invalid Android AHB APIs configuration. Please check the instructions on how to build NDK for Android.
+		DE_TEST_ASSERT(false);
+#endif // defined(BUILT_WITH_ANDROID_HARDWARE_BUFFER)
+	}
+
+	AHardwareBuffer_Desc hbufferdesc = {
+		64u,
+		64u,
+		1u,		// number of images
+		getPixelFormat(format),
+		AHARDWAREBUFFER_USAGE_CPU_READ_OFTEN	|
+		AHARDWAREBUFFER_USAGE_CPU_WRITE_RARELY	|
+		AHARDWAREBUFFER_USAGE_GPU_SAMPLED_IMAGE	|
+		AHARDWAREBUFFER_USAGE_GPU_FRAMEBUFFER,
+		0u,		// Stride in pixels, ignored for AHardwareBuffer_allocate()
+		0u,		// Initialize to zero, reserved for future use
+		0u		// Initialize to zero, reserved for future use
+	};
+
+	if (!ahbFunctions.isSupported(&hbufferdesc))
+		TCU_THROW(NotSupportedError, "Texture format unsupported");
+
+	ahbFunctions.allocate(&hbufferdesc, &m_hardwareBuffer);
+}
+
+AndroidNativeClientBuffer::~AndroidNativeClientBuffer (void)
+{
+	ahbFunctions.release(m_hardwareBuffer);
+}
+
+EGLClientBuffer AndroidNativeClientBuffer::get (void) const
+{
+	typedef EGLW_APICALL EGLClientBuffer (EGLW_APIENTRY* eglGetNativeClientBufferANDROIDFunc) (const struct AHardwareBuffer *buffer);
+	return ((eglGetNativeClientBufferANDROIDFunc)m_egl.getProcAddress("eglGetNativeClientBufferANDROID"))(m_hardwareBuffer);
+}
+
+void AndroidNativeClientBuffer::lock(void** data)
+{
+	const int status = AHardwareBuffer_lock(m_hardwareBuffer, AHARDWAREBUFFER_USAGE_CPU_WRITE_RARELY, -1, DE_NULL, data);
+
+	if (status != 0)
+		TCU_FAIL(("AHardwareBuffer_lock failed with error: " + de::toString(status)).c_str());
+}
+
+void AndroidNativeClientBuffer::unlock(void)
+{
+	const int status = AHardwareBuffer_unlock(m_hardwareBuffer, DE_NULL);
+
+	if (status != 0)
+		TCU_FAIL(("AHardwareBuffer_unlock failed with error: " + de::toString(status)).c_str());
 }
 
 class AndroidNativeImageSource : public ImageSource
 {
 public:
-							AndroidNativeImageSource	(GLenum format) : m_format(format), m_libui(DE_NULL) {}
+							AndroidNativeImageSource	(GLenum format) : m_format(format) {}
 							~AndroidNativeImageSource	(void);
-	MovePtr<ClientBuffer>	createBuffer				(const glw::Functions&, Texture2D*) const;
-	string					getRequiredExtension		(void) const { return "EGL_ANDROID_image_native_buffer"; }
+	MovePtr<ClientBuffer>	createBuffer				(const Library& egl, const glw::Functions&, Texture2D*) const;
+	string					getRequiredExtension		(void) const { return "EGL_ANDROID_get_native_client_buffer"; }
 	EGLImageKHR				createImage					(const Library& egl, EGLDisplay dpy, EGLContext ctx, EGLClientBuffer clientBuffer) const;
 	GLenum					getEffectiveFormat			(void) const { return m_format; }
 
 protected:
 	GLenum					m_format;
-
-	const LibUI&			getLibUI					(void) const;
-
-private:
-	mutable LibUI*			m_libui;
 };
 
 AndroidNativeImageSource::~AndroidNativeImageSource (void)
 {
-	delete m_libui;
 }
 
-const LibUI& AndroidNativeImageSource::getLibUI (void) const
+MovePtr<ClientBuffer> AndroidNativeImageSource::createBuffer (const Library& egl, const glw::Functions&, Texture2D* ref) const
 {
-	if (!m_libui)
-		m_libui = new LibUI();
+	MovePtr<AndroidNativeClientBuffer> buffer (new AndroidNativeClientBuffer(egl, m_format));
 
-	return *m_libui;
-}
-
-void checkStatus (status_t status)
-{
-	if (status != tcu::Android::internal::OK)
-		TCU_FAIL(("Android error: status code " + de::toString(status)).c_str());
-}
-
-MovePtr<ClientBuffer> AndroidNativeImageSource::createBuffer (const glw::Functions&, Texture2D* ref) const
-{
-	MovePtr<AndroidNativeClientBuffer>	buffer			(new AndroidNativeClientBuffer(getLibUI(), m_format));
-	GraphicBuffer&						graphicBuffer	= buffer->getGraphicBuffer();
 	if (ref != DE_NULL)
 	{
 		const TextureFormat	texFormat	= glu::mapGLInternalFormat(m_format);
@@ -150,25 +279,27 @@
 		tcu::fillWithComponentGradients(ref->getLevel(0),
 										tcu::Vec4(0.0f, 0.0f, 0.0f, 0.0f),
 										tcu::Vec4(1.0f, 1.0f, 1.0f, 1.0f));
-		checkStatus(graphicBuffer.lock(GraphicBuffer::USAGE_SW_WRITE_RARELY, &bufferData));
+        buffer->lock(&bufferData);
 		{
 			PixelBufferAccess nativeBuffer(texFormat, 64, 64, 1, bufferData);
 			tcu::copy(nativeBuffer, ref->getLevel(0));
 		}
-		checkStatus(graphicBuffer.unlock());
+        buffer->unlock();
 	}
 	return MovePtr<ClientBuffer>(buffer);
 }
 
 EGLImageKHR AndroidNativeImageSource::createImage (const Library& egl, EGLDisplay dpy, EGLContext, EGLClientBuffer clientBuffer) const
 {
-	static const EGLint attribs[] = { EGL_IMAGE_PRESERVED_KHR, EGL_TRUE, EGL_NONE };
+	static const EGLint	attribs[]	= { EGL_IMAGE_PRESERVED_KHR, EGL_TRUE, EGL_NONE };
 	const EGLImageKHR	image		= egl.createImageKHR(dpy, EGL_NO_CONTEXT, EGL_NATIVE_BUFFER_ANDROID, clientBuffer, attribs);
 
 	EGLU_CHECK_MSG(egl, "eglCreateImageKHR()");
 	return image;
 }
 
+} // anonymous
+
 MovePtr<ImageSource> createAndroidNativeImageSource	(GLenum format)
 {
 	try
diff --git a/modules/egl/teglGetFrameTimestampsTests.cpp b/modules/egl/teglGetFrameTimestampsTests.cpp
index da916c0..f846e97 100644
--- a/modules/egl/teglGetFrameTimestampsTests.cpp
+++ b/modules/egl/teglGetFrameTimestampsTests.cpp
@@ -633,7 +633,7 @@
 			check_lt<EGLnsecsANDROID>(m_result, 1000000, frame.compositeInterval, "Reported refresh rate greater than 1kHz.");
 			check_lt<EGLnsecsANDROID>(m_result, frame.compositeInterval, 1000000000, "Reported refresh rate less than 1Hz.");
 			check_lt<EGLnsecsANDROID>(m_result, 0, frame.compositeToPresentLatency, "Composite to present latency must be greater than 0.");
-			check_lt(m_result, frame.compositeToPresentLatency, frame.compositeInterval * 3, "Composite to present latency is more than 3 vsyncs.");
+			check_lt(m_result, frame.compositeToPresentLatency, frame.compositeInterval * 4, "Composite to present latency is more than 4 vsyncs.");
 			const EGLnsecsANDROID minDeadline = now;
 			check_lt(m_result, minDeadline, frame.compositeDeadline, "Next composite deadline is in the past.");
 			const EGLnsecsANDROID maxDeadline = now + frame.compositeInterval * 2;
@@ -652,27 +652,28 @@
 			frame.swapBufferBeginNs = getNanoseconds();
 			EGLU_CHECK_CALL(egl, swapBuffers(display, *surface));
 
-			// All timestamps from 5 frames ago should definitely be available.
-			const size_t frameDelay = 5;
+			// All timestamps from 6 frames ago should definitely be available.
+			const size_t frameDelay = 6;
 			if (i >= frameDelay)
 			{
 				// \todo [2017-01-25 brianderson] Remove this work around once reads done is fixed.
 				const bool verifyReadsDone	=	i > (frameDelay + 3);
-				FrameTimes&		frame5ago	=	frameTimes[i-frameDelay];
+				FrameTimes&		frame6ago	=	frameTimes[i-frameDelay];
 				std::vector<EGLnsecsANDROID> supportedValues(supportedNames.size(), 0);
 
 				CHECK_NAKED_EGL_CALL(egl, m_eglGetFrameTimestampsANDROID(
-					display, *surface, frame5ago.frameId, static_cast<eglw::EGLint>(supportedNames.size()),
+					display, *surface, frame6ago.frameId, static_cast<eglw::EGLint>(supportedNames.size()),
 					&supportedNames[0], &supportedValues[0]));
-				populateFrameTimes(&frame5ago, timestamps, supportedValues);
+				populateFrameTimes(&frame6ago, timestamps, supportedValues);
 
-				verifySingleFrame(frame5ago, m_result, verifyReadsDone);
+				verifySingleFrame(frame6ago, m_result, verifyReadsDone);
 				if (i >= frameDelay + 1)
 				{
-					FrameTimes& frame6ago = frameTimes[i-frameDelay-1];
-					verifyNeighboringFrames(frame6ago, frame5ago, m_result);
+					FrameTimes& frame7ago = frameTimes[i-frameDelay-1];
+					verifyNeighboringFrames(frame7ago, frame6ago, m_result);
 				}
 			}
+			deSleep(static_cast<deUint32>(frame.compositeInterval / 1000000));
 		}
 
 		// All timestamps for the most recently swapped frame should
diff --git a/modules/egl/teglImageFormatTests.cpp b/modules/egl/teglImageFormatTests.cpp
index 1dee13c..2ccba58 100644
--- a/modules/egl/teglImageFormatTests.cpp
+++ b/modules/egl/teglImageFormatTests.cpp
@@ -315,7 +315,7 @@
 
 bool GLES2ImageApi::Create::invokeGLES2 (GLES2ImageApi& api, MovePtr<UniqueImage>& image, tcu::Texture2D& ref) const
 {
-	de::UniquePtr<ClientBuffer>	buffer	(m_imgSource->createBuffer(api.m_gl, &ref));
+	de::UniquePtr<ClientBuffer>	buffer	(m_imgSource->createBuffer(api.m_egl, api.m_gl, &ref));
 
 	GLU_CHECK_GLW_CALL(api.m_gl, finish());
 
@@ -706,22 +706,31 @@
 	tcu::Surface			screen			(reference.getWidth(), reference.getHeight());
 	tcu::Surface			refSurface		(reference.getWidth(), reference.getHeight());
 
-	// Branch only taken in TryAll case
-	if (reference.getFormat().order == tcu::TextureFormat::DS || reference.getFormat().order == tcu::TextureFormat::D)
-		throw IllegalRendererException(); // Skip, GLES2 does not support ReadPixels for depth attachments
-	if (reference.getFormat().order == tcu::TextureFormat::S)
-		throw IllegalRendererException(); // Skip, GLES2 does not support ReadPixels for stencil attachments
+	switch (glu::getInternalFormat(reference.getFormat()))
+	{
+		case GL_RGBA4:
+		case GL_RGB5_A1:
+		case GL_RGB565:
+			break;
+		default:
+			// Skip, not in the list of allowed render buffer formats for GLES2.
+			throw tcu::NotSupportedError("Image format not allowed for glReadPixels.");
+			break;
+	}
 
 	log << tcu::TestLog::Message << "Reading with ReadPixels from renderbuffer" << tcu::TestLog::EndMessage;
 
 	GLU_CHECK_GLW_CALL(gl, bindFramebuffer(GL_FRAMEBUFFER, *framebuffer));
 	GLU_CHECK_GLW_CALL(gl, bindRenderbuffer(GL_RENDERBUFFER, *renderbuffer));
 	imageTargetRenderbuffer(api.m_egl, gl, **img);
+
+	GLU_EXPECT_NO_ERROR(gl.getError(), "imageTargetRenderbuffer");
 	framebufferRenderbuffer(gl, GL_COLOR_ATTACHMENT0, *renderbuffer);
+	GLU_EXPECT_NO_ERROR(gl.getError(), "framebufferRenderbuffer");
 
 	GLU_CHECK_GLW_CALL(gl, viewport(0, 0, reference.getWidth(), reference.getHeight()));
 
-	gl.readPixels(0, 0, screen.getWidth(), screen.getHeight(), GL_RGBA, GL_UNSIGNED_BYTE, screen.getAccess().getDataPtr());
+	GLU_CHECK_GLW_CALL(gl, readPixels(0, 0, screen.getWidth(), screen.getHeight(), GL_RGBA, GL_UNSIGNED_BYTE, screen.getAccess().getDataPtr()));
 
 	GLU_CHECK_GLW_CALL(gl, bindFramebuffer(GL_FRAMEBUFFER, 0));
 	GLU_CHECK_GLW_CALL(gl, bindRenderbuffer(GL_RENDERBUFFER, 0));
@@ -1060,7 +1069,7 @@
 	void			add				(const string& label, MovePtr<Action> action);
 	int				size			(void) const			{ return m_numActions; }
 private:
-	LabeledAction	m_actions[32];
+	LabeledAction	m_actions[64];
 	int				m_numActions;
 };
 
@@ -1134,11 +1143,19 @@
 
 void ImageTests::addCreateAndroidNativeActions (void)
 {
-	addCreateAndroidNative("android_native_rgb565",		GL_RGB565);
-	addCreateAndroidNative("android_native_rgb8",		GL_RGB8);
 	addCreateAndroidNative("android_native_rgba4",		GL_RGBA4);
 	addCreateAndroidNative("android_native_rgb5_a1",	GL_RGB5_A1);
+	addCreateAndroidNative("android_native_rgb565",		GL_RGB565);
+	addCreateAndroidNative("android_native_rgb8",		GL_RGB8);
 	addCreateAndroidNative("android_native_rgba8",		GL_RGBA8);
+	addCreateAndroidNative("android_native_d16",		GL_DEPTH_COMPONENT16);
+	addCreateAndroidNative("android_native_d24",		GL_DEPTH_COMPONENT24);
+	addCreateAndroidNative("android_native_d24s8",		GL_DEPTH24_STENCIL8);
+	addCreateAndroidNative("android_native_d32f",		GL_DEPTH_COMPONENT32F);
+	addCreateAndroidNative("android_native_d32fs8",		GL_DEPTH32F_STENCIL8);
+	addCreateAndroidNative("android_native_rgb10a2",	GL_RGB10_A2);
+	addCreateAndroidNative("android_native_rgba16f",	GL_RGBA16F);
+	addCreateAndroidNative("android_native_s8",			GL_STENCIL_INDEX8);
 }
 
 class RenderTests : public ImageTests
@@ -1177,9 +1194,16 @@
 		case GL_RGBA4:
 		case GL_RGBA8:
 		case GL_RGB5_A1:
+		case GL_RGB10_A2:
+		case GL_RGBA16F:
 			return false;
 
 		case GL_DEPTH_COMPONENT16:
+		case GL_DEPTH_COMPONENT24:
+		case GL_DEPTH_COMPONENT32:
+		case GL_DEPTH_COMPONENT32F:
+		case GL_DEPTH24_STENCIL8:
+		case GL_DEPTH32F_STENCIL8:
 			return true;
 
 		case GL_STENCIL_INDEX8:
@@ -1202,12 +1226,19 @@
 		case GL_RGBA4:
 		case GL_RGBA8:
 		case GL_RGB5_A1:
+		case GL_RGB10_A2:
+		case GL_RGBA16F:
 			return false;
 
 		case GL_DEPTH_COMPONENT16:
+		case GL_DEPTH_COMPONENT24:
+		case GL_DEPTH_COMPONENT32:
+		case GL_DEPTH_COMPONENT32F:
 			return false;
 
 		case GL_STENCIL_INDEX8:
+		case GL_DEPTH24_STENCIL8:
+		case GL_DEPTH32F_STENCIL8:
 			return true;
 
 		default:
@@ -1439,9 +1470,9 @@
 
 void MultiContextRenderTests::addClearActions (void)
 {
-	m_clearActions.add("renderbuffer_clear_color",		MovePtr<Action>(new GLES2ImageApi::ModifyRenderbufferClearColor(tcu::Vec4(0.8f, 0.2f, 0.9f, 1.0f))));
-	m_clearActions.add("renderbuffer_clear_depth",		MovePtr<Action>(new GLES2ImageApi::ModifyRenderbufferClearDepth(0.75f)));
-	m_clearActions.add("renderbuffer_clear_stencil",	MovePtr<Action>(new GLES2ImageApi::ModifyRenderbufferClearStencil(97)));
+	m_clearActions.add("clear_color",	MovePtr<Action>(new GLES2ImageApi::ModifyRenderbufferClearColor(tcu::Vec4(0.8f, 0.2f, 0.9f, 1.0f))));
+	m_clearActions.add("clear_depth",	MovePtr<Action>(new GLES2ImageApi::ModifyRenderbufferClearDepth(0.75f)));
+	m_clearActions.add("clear_stencil",	MovePtr<Action>(new GLES2ImageApi::ModifyRenderbufferClearStencil(97)));
 }
 
 void MultiContextRenderTests::init (void)
@@ -1469,6 +1500,15 @@
 			continue;
 
 		spec.name = std::string("gles2_") + createAction.label + "_" + renderAction.label;
+
+		const GLenum createFormat = dynamic_cast<const GLES2ImageApi::Create*>(createAction.action.get())->getEffectiveFormat();
+		if (isDepthFormat(createFormat) && isStencilFormat(createFormat))
+		{
+			// Combined depth and stencil format. Add the clear action label to avoid test
+			// name clashes.
+			spec.name += std::string("_") + clearAction.label;
+		}
+
 		spec.desc = spec.name;
 
 		spec.contexts.push_back(TestSpec::API_GLES2);
diff --git a/modules/egl/teglImageTests.cpp b/modules/egl/teglImageTests.cpp
index 6e146a4..57bb6c7 100644
--- a/modules/egl/teglImageTests.cpp
+++ b/modules/egl/teglImageTests.cpp
@@ -352,7 +352,13 @@
 			case GL_LUMINANCE_ALPHA:	return "luminance_alpha";
 			case GL_RGB:				return "rgb";
 			case GL_RGBA:				return "rgba";
+			case GL_RGBA16F:			return "rgba16f";
 			case GL_DEPTH_COMPONENT16:	return "depth_component_16";
+			case GL_DEPTH_COMPONENT24:	return "depth_component_24";
+			case GL_DEPTH_COMPONENT32F:	return "depth_component_32f";
+			case GL_DEPTH24_STENCIL8:	return "depth24_stencil8";
+			case GL_DEPTH32F_STENCIL8:	return "depth32f_stencil8";
+			case GL_RGB10_A2:			return "rgb10_a2";
 			case GL_RGBA4:				return "rgba4";
 			case GL_RGB5_A1:			return "rgb5_a1";
 			case GL_RGB565:				return "rgb565";
@@ -422,7 +428,7 @@
 
 		log << TestLog::Message << "Using EGL config " << eglu::getConfigID(egl, dpy, context.getConfig()) << TestLog::EndMessage;
 
-		UniquePtr<ClientBuffer>	clientBuffer	(m_source->createBuffer(context.gl()));
+		UniquePtr<ClientBuffer>	clientBuffer	(m_source->createBuffer(egl, context.gl()));
 		const EGLImageKHR		image			= m_source->createImage(egl, dpy, eglContext, clientBuffer->get());
 
 		if (image == EGL_NO_IMAGE_KHR)
@@ -590,9 +596,17 @@
 		{
 			GL_RGB565,
 			GL_RGB8,
+			GL_RGBA8,
 			GL_RGBA4,
 			GL_RGB5_A1,
-			GL_RGBA8,
+			GL_DEPTH_COMPONENT16,
+			GL_DEPTH_COMPONENT24,
+			GL_DEPTH24_STENCIL8,
+			GL_DEPTH_COMPONENT32F,
+			GL_DEPTH32F_STENCIL8,
+			GL_RGB10_A2,
+			GL_RGBA16F,
+			GL_STENCIL_INDEX8
 		};
 
 		for (int formatNdx = 0; formatNdx < DE_LENGTH_OF_ARRAY(androidFormats); ++formatNdx)
diff --git a/modules/egl/teglImageUtil.cpp b/modules/egl/teglImageUtil.cpp
index 234c227..b423cb4 100644
--- a/modules/egl/teglImageUtil.cpp
+++ b/modules/egl/teglImageUtil.cpp
@@ -179,7 +179,7 @@
 {
 public:
 							TextureImageSource	(GLenum internalFormat, GLenum format, GLenum type, bool useTexLevel0) : m_internalFormat(internalFormat), m_format(format), m_type(type), m_useTexLevel0(useTexLevel0) {}
-	MovePtr<ClientBuffer>	createBuffer		(const glw::Functions& gl, Texture2D* reference) const;
+	MovePtr<ClientBuffer>	createBuffer		(const eglw::Library& egl, const glw::Functions& gl, Texture2D* reference) const;
 	GLenum					getEffectiveFormat	(void) const;
 	GLenum					getInternalFormat	(void) const { return m_internalFormat; }
 
@@ -229,8 +229,10 @@
 	return ret;
 }
 
-MovePtr<ClientBuffer> TextureImageSource::createBuffer (const glw::Functions& gl, Texture2D* ref) const
+MovePtr<ClientBuffer> TextureImageSource::createBuffer (const eglw::Library& egl, const glw::Functions& gl, Texture2D* ref) const
 {
+	DE_UNREF(egl);
+
 	MovePtr<TextureClientBuffer>	clientBuffer	(new TextureClientBuffer(gl));
 	const GLuint					texture			= clientBuffer->getName();
 	const GLenum					target			= getGLTarget();
@@ -332,7 +334,7 @@
 							RenderbufferImageSource	(GLenum format) : m_format(format) {}
 
 	string					getRequiredExtension	(void) const	{ return "EGL_KHR_gl_renderbuffer_image"; }
-	MovePtr<ClientBuffer>	createBuffer			(const glw::Functions& gl, Texture2D* reference) const;
+	MovePtr<ClientBuffer>	createBuffer			(const eglw::Library& egl, const glw::Functions& gl, Texture2D* reference) const;
 	GLenum					getEffectiveFormat		(void) const { return m_format; }
 
 protected:
@@ -465,8 +467,10 @@
 												   GL_RENDERBUFFER, 0));
 }
 
-MovePtr<ClientBuffer> RenderbufferImageSource::createBuffer (const glw::Functions& gl, Texture2D* ref) const
+MovePtr<ClientBuffer> RenderbufferImageSource::createBuffer (const eglw::Library& egl, const glw::Functions& gl, Texture2D* ref) const
 {
+	DE_UNREF(egl);
+
 	MovePtr<RenderbufferClientBuffer>	buffer	(new RenderbufferClientBuffer(gl));
 	const GLuint						rbo		= buffer->getName();
 
@@ -516,7 +520,7 @@
 public:
 							UnsupportedImageSource	(const string& message, GLenum format) : m_message(message), m_format(format) {}
 	string					getRequiredExtension	(void) const { fail(); return ""; }
-	MovePtr<ClientBuffer>	createBuffer			(const glw::Functions&, tcu::Texture2D*) const { fail(); return de::MovePtr<ClientBuffer>(); }
+	MovePtr<ClientBuffer>	createBuffer			(const eglw::Library& egl, const glw::Functions&, tcu::Texture2D*) const { DE_UNREF(egl); fail(); return de::MovePtr<ClientBuffer>(); }
 	EGLImageKHR				createImage				(const Library& egl, EGLDisplay dpy, EGLContext ctx, EGLClientBuffer clientBuffer) const;
 	GLenum					getEffectiveFormat		(void) const { return m_format; }
 
diff --git a/modules/egl/teglImageUtil.hpp b/modules/egl/teglImageUtil.hpp
index beca1be..2d63df7 100644
--- a/modules/egl/teglImageUtil.hpp
+++ b/modules/egl/teglImageUtil.hpp
@@ -72,7 +72,7 @@
 public:
 	virtual								~ImageSource		(void) {}
 	virtual std::string					getRequiredExtension(void) const = 0;
-	virtual de::MovePtr<ClientBuffer>	createBuffer		(const glw::Functions& gl, tcu::Texture2D* reference = DE_NULL) const = 0;
+	virtual de::MovePtr<ClientBuffer>	createBuffer		(const eglw::Library& egl, const glw::Functions& gl, tcu::Texture2D* reference = DE_NULL) const = 0;
 	virtual eglw::EGLImageKHR			createImage			(const eglw::Library& egl, eglw::EGLDisplay dpy, eglw::EGLContext ctx, eglw::EGLClientBuffer clientBuffer) const = 0;
 	virtual glw::GLenum					getEffectiveFormat	(void) const = 0;
 };
diff --git a/modules/egl/teglRobustnessTests.cpp b/modules/egl/teglRobustnessTests.cpp
index 4cacea4..1a72464 100644
--- a/modules/egl/teglRobustnessTests.cpp
+++ b/modules/egl/teglRobustnessTests.cpp
@@ -65,7 +65,6 @@
 
 enum ContextResetType
 {
-	CONTEXTRESETTYPE_INFINITE_LOOP,
 	CONTEXTRESETTYPE_SHADER_OOB,
 	CONTEXTRESETTYPE_FIXED_FUNC_OOB,
 };
@@ -218,11 +217,6 @@
 
 							Params					(const string&				name,
 													 const string&				description,
-													 const ContextResetType&	contextResetType,
-													 const ShaderType&			shaderType);
-
-							Params					(const string&				name,
-													 const string&				description,
 													 const RobustAccessType&	robustAccessType,
 													 const ContextResetType&	contextResetType,
 													 const ShaderType&			shaderType,
@@ -285,17 +279,6 @@
 
 RobustnessTestCase::Params::Params (const string&				name,
 									const string&				description,
-									const ContextResetType&		contextResetType,
-									const ShaderType&			shaderType)
-	: m_name				(name)
-	, m_description			(description)
-	, m_contextResetType	(contextResetType)
-	, m_shaderType			(shaderType)
-{
-}
-
-RobustnessTestCase::Params::Params (const string&				name,
-									const string&				description,
 									const RobustAccessType&		robustAccessType,
 									const ContextResetType&		contextResetType,
 									const ShaderType&			shaderType,
@@ -568,7 +551,6 @@
 {
 public:
 						ContextReset				(glw::Functions& gl, tcu::TestLog& log, FixedFunctionType fixedFunctionType);
-						ContextReset				(glw::Functions& gl, tcu::TestLog& log, ShaderType shaderType);
 						ContextReset				(glw::Functions& gl, tcu::TestLog& log, ShaderType shaderType, ResourceType resourceType, ReadWriteType readWriteType);
 
 	virtual				~ContextReset				(void) {};
@@ -578,14 +560,9 @@
 	virtual void		teardown					(void) = 0;
 
 	void				finish						(void);
-	void				createSyncObject			(void);
-	glw::GLint			getSyncStatus				(void);
 
-	void				beginQuery					(void);
-	void				endQuery					(void);
 	glw::GLint			getError					(void);
 	glw::GLint			getGraphicsResetStatus		(void);
-	glw::GLuint			getQueryAvailability		(void);
 
 	glw::GLsync			getSyncObject				(void) const { return m_sync; }
 	glw::GLuint			getQueryID					(void) const { return m_queryID; }
@@ -621,24 +598,11 @@
 {
 }
 
-ContextReset::ContextReset (glw::Functions& gl, tcu::TestLog& log, ShaderType shaderType)
-	: m_gl			(gl)
-	, m_log			(log)
-	, m_shaderType	(shaderType)
-{
-}
-
 void ContextReset::finish (void)
 {
 	GLU_CHECK_GLW_CALL(m_gl, finish());
 }
 
-void ContextReset::createSyncObject (void)
-{
-	m_sync = m_gl.fenceSync(GL_SYNC_GPU_COMMANDS_COMPLETE, 0);
-	GLU_EXPECT_NO_ERROR(m_gl.getError(), "glFenceSync()");
-}
-
 glw::GLint ContextReset::getError (void)
 {
 	glw::GLint error;
@@ -655,257 +619,6 @@
 	return resetStatus;
 }
 
-glw::GLint ContextReset::getSyncStatus (void)
-{
-	glw::GLint syncStatus;
-	m_gl.getSynciv(m_sync, GL_SYNC_STATUS, sizeof(glw::GLint), NULL, &syncStatus);
-
-	return syncStatus;
-}
-
-void ContextReset::beginQuery (void)
-{
-	GLU_CHECK_GLW_CALL(m_gl, genQueries(1, &m_queryID));
-	GLU_CHECK_GLW_CALL(m_gl, beginQuery(GL_ANY_SAMPLES_PASSED, m_queryID));
-}
-
-void ContextReset::endQuery (void)
-{
-	GLU_CHECK_GLW_CALL(m_gl, endQuery(GL_ANY_SAMPLES_PASSED));
-}
-
-glw::GLuint ContextReset::getQueryAvailability (void)
-{
-	glw::GLuint queryReady = GL_FALSE;
-	m_gl.getQueryObjectuiv(m_queryID, GL_QUERY_RESULT_AVAILABLE, &queryReady);
-
-	return queryReady;
-}
-
-class InfiniteLoop : public ContextReset
-{
-public:
-						InfiniteLoop			(glw::Functions& gl, tcu::TestLog& log, ShaderType shaderType);
-						~InfiniteLoop			(void);
-
-	virtual void		setup					(void);
-	virtual void		draw					(void);
-	virtual void		teardown				(void);
-
-private:
-	glu::ProgramSources genComputeSource		(void);
-	glu::ProgramSources genNonComputeSource		(void);
-	glu::ProgramSources	genSources				(void);
-
-	glw::GLuint			m_outputBuffer;
-	glw::GLuint			m_coordinatesBuffer;
-	glw::GLint			m_coordLocation;
-};
-
-InfiniteLoop::InfiniteLoop (glw::Functions& gl, tcu::TestLog& log, ShaderType shaderType)
-	: ContextReset(gl, log, shaderType)
-	, m_outputBuffer		(0)
-	, m_coordinatesBuffer	(0)
-	, m_coordLocation		(0)
-{
-}
-
-InfiniteLoop::~InfiniteLoop (void)
-{
-	try
-	{
-		// Reset GL_CONTEXT_LOST error before destroying resources
-		m_gl.getGraphicsResetStatus();
-		teardown();
-	}
-	catch (...)
-	{
-		// Ignore GL errors from teardown()
-	}
-}
-
-glu::ProgramSources InfiniteLoop::genSources(void)
-{
-	if (m_shaderType == SHADERTYPE_COMPUTE)
-		return genComputeSource();
-	else
-		return genNonComputeSource();
-}
-
-glu::ProgramSources InfiniteLoop::genComputeSource(void)
-{
-	const char* const computeSource =
-		"#version 310 es\n"
-		"layout(local_size_x = 1, local_size_y = 1) in;\n"
-		"uniform highp int u_iterCount;\n"
-		"writeonly buffer Output { highp int b_output_int; };\n"
-		"void main ()\n"
-		"{\n"
-		"	for (highp int i = 0; i < u_iterCount || u_iterCount < 0; ++i)\n"
-		"		b_output_int = u_iterCount;\n"
-		"}\n";
-
-	return glu::ProgramSources() << glu::ComputeSource(computeSource);
-}
-
-glu::ProgramSources InfiniteLoop::genNonComputeSource (void)
-{
-	const bool isVertCase			= m_shaderType == SHADERTYPE_VERT;
-	const bool isFragCase			= m_shaderType == SHADERTYPE_FRAG;
-	const bool isVertAndFragment	= m_shaderType == SHADERTYPE_VERT_AND_FRAG;
-
-	std::ostringstream vert, frag;
-
-	vert << "#version 300 es\n"
-		 << "in highp vec2 a_position;\n";
-
-	frag << "#version 300 es\n";
-
-	vert << "uniform highp int u_iterCount;\n";
-	if (isFragCase || isVertAndFragment)
-	{
-		vert << "flat out highp int v_iterCount;\n";
-		frag << "flat in highp int v_iterCount;\n";
-	}
-
-	if (isVertCase || isVertAndFragment)
-	{
-		vert << "out mediump vec4 v_color;\n";
-		frag << "in mediump vec4 v_color;\n";
-	}
-
-	frag << "out mediump vec4 o_color;\n";
-
-	vert << "\nvoid main (void)\n{\n"
-		 << "	gl_Position = vec4(a_position, 0.0, 1.0);\n"
-		 << "	gl_PointSize = 1.0;\n";
-
-	if (isFragCase || isVertAndFragment)
-		vert << "	v_iterCount = u_iterCount;\n";
-
-	frag << "\nvoid main (void)\n{\n";
-
-	const std::string	iterCount	= (isVertCase ? "u_iterCount" : "v_iterCount");
-	const std::string	loopHeader	= "	for (highp int i = 0; i < " + iterCount + " || " + iterCount + " < 0; ++i)\n";
-	const char* const	body		= "color = cos(sin(color*1.25)*0.8);";
-
-	if (isVertAndFragment)
-	{
-		vert << "	mediump vec4 color = " << "a_position.xyxy" << ";\n";
-		vert << loopHeader << "		" << body << "\n";
-
-		frag << "	mediump vec4 color = " << "gl_FragCoord" << ";\n";
-		frag << loopHeader << "		" << body << "\n";
-	}
-	else
-	{
-		std::ostringstream&	op			= isVertCase ? vert : frag;
-		op << "	mediump vec4 color = " << (isVertCase ? "a_position.xyxy" : "gl_FragCoord") << ";\n";
-		op << loopHeader << "		" << body << "\n";
-	}
-
-	if (isVertCase || isVertAndFragment)
-	{
-		vert << "	v_color = color;\n";
-		frag << "	o_color = v_color;\n";
-	}
-	else
-		frag << "	o_color = color;\n";
-
-	vert << "}\n";
-	frag << "}\n";
-
-	return glu::ProgramSources() << glu::VertexSource(vert.str()) << glu::FragmentSource(frag.str());
-}
-
-void InfiniteLoop::setup (void)
-{
-	glu::ShaderProgram program (m_gl, genSources());
-	m_log << program;
-
-	if (!program.isOk())
-		TCU_FAIL("Failed to compile shader program");
-
-	GLU_CHECK_GLW_CALL(m_gl, useProgram(program.getProgram()));
-
-	if (m_shaderType == SHADERTYPE_COMPUTE)
-	{
-		// Output buffer setup
-		m_outputBuffer = 0;
-		GLU_CHECK_GLW_CALL(m_gl, genBuffers(1, &m_outputBuffer));
-		GLU_CHECK_GLW_CALL(m_gl, bindBuffer(GL_SHADER_STORAGE_BUFFER, m_outputBuffer));
-		GLU_CHECK_GLW_CALL(m_gl, bufferData(GL_SHADER_STORAGE_BUFFER, sizeof(int), DE_NULL, GL_DYNAMIC_DRAW));
-		GLU_CHECK_GLW_CALL(m_gl, bindBufferBase(GL_SHADER_STORAGE_BUFFER, 0, m_outputBuffer));
-	}
-	else
-	{
-		const glw::GLfloat coords[] =
-		{
-			-1.0f, -1.0f,
-			+1.0f, -1.0f,
-			+1.0f, +1.0f,
-			-1.0f, +1.0f
-		};
-
-		m_coordLocation = m_gl.getAttribLocation(program.getProgram(), "a_position");
-		GLU_CHECK_GLW_MSG(m_gl, "glGetAttribLocation()");
-		TCU_CHECK(m_coordLocation != (glw::GLint)-1);
-
-		// Load the vertex data
-		m_coordinatesBuffer = 0;
-		GLU_CHECK_GLW_CALL(m_gl, genBuffers(1, &m_coordinatesBuffer));
-		GLU_CHECK_GLW_CALL(m_gl, bindBuffer(GL_ARRAY_BUFFER, m_coordinatesBuffer));
-		GLU_CHECK_GLW_CALL(m_gl, bufferData(GL_ARRAY_BUFFER, (glw::GLsizeiptr)sizeof(coords), coords, GL_STATIC_DRAW));
-		GLU_CHECK_GLW_CALL(m_gl, enableVertexAttribArray(m_coordLocation));
-		GLU_CHECK_GLW_CALL(m_gl, vertexAttribPointer(m_coordLocation, 2, GL_FLOAT, GL_FALSE, 0, DE_NULL));
-	}
-
-	glw::GLint iterCountLocation = m_gl.getUniformLocation(program.getProgram(), "u_iterCount");
-	GLU_CHECK_GLW_MSG(m_gl, "glGetUniformLocation()");
-	TCU_CHECK(iterCountLocation != (glw::GLint)-1);
-
-	// Set the iteration count (infinite)
-	glw::GLint iterCount = -1;
-	GLU_CHECK_GLW_CALL(m_gl, uniform1i(iterCountLocation, iterCount));
-}
-
-void InfiniteLoop::draw (void)
-{
-	if (m_shaderType == SHADERTYPE_COMPUTE)
-		m_gl.dispatchCompute(1, 1, 1);
-	else
-	{
-		const glw::GLushort indices[] = { 0, 1, 2, 2, 3, 0 };
-		m_gl.drawElements(GL_TRIANGLES, 6, GL_UNSIGNED_SHORT, indices);
-	}
-}
-
-void InfiniteLoop::teardown (void)
-{
-	if (m_shaderType != SHADERTYPE_COMPUTE)
-	{
-		if (m_coordLocation)
-		{
-			GLU_CHECK_GLW_CALL(m_gl, disableVertexAttribArray(m_coordLocation));
-			m_coordLocation = 0;
-		}
-	}
-
-	if (m_outputBuffer)
-	{
-		GLU_CHECK_GLW_CALL(m_gl, deleteBuffers(1, &m_outputBuffer));
-		m_outputBuffer = 0;
-	}
-
-	if (m_coordinatesBuffer)
-	{
-		GLU_CHECK_GLW_CALL(m_gl, deleteBuffers(1, &m_coordinatesBuffer));
-		m_coordinatesBuffer = 0;
-	}
-
-	GLU_CHECK_GLW_CALL(m_gl, useProgram(0));
-}
-
 class FixedFunctionOOB : public ContextReset
 {
 public:
@@ -1582,9 +1295,6 @@
 
 de::SharedPtr<ContextReset> contextResetFactory (const RobustnessTestCase::Params params, glw::Functions& gl, tcu::TestLog& log)
 {
-	if (params.getContextResetType() == CONTEXTRESETTYPE_INFINITE_LOOP)
-		return de::SharedPtr<ContextReset>(new InfiniteLoop(gl, log, params.getShaderType()));
-
 	if (params.getContextResetType() == CONTEXTRESETTYPE_FIXED_FUNC_OOB)
 		return de::SharedPtr<ContextReset>(new FixedFunctionOOB(gl, log, params.getFixedFunctionType()));
 
@@ -1656,37 +1366,7 @@
 	GLU_CHECK_GLW_CALL(gl, getBooleanv(GL_CONTEXT_ROBUST_ACCESS_EXT, &isContextRobust));
 	provokeReset(contextReset);
 
-	if (m_params.getContextResetType() == CONTEXTRESETTYPE_INFINITE_LOOP)
-	{
-		try
-		{
-			waitForReset(contextReset);
-
-			const glw::GLenum	status	= gl.getGraphicsResetStatus();
-
-			if (status == GL_NO_ERROR)
-				m_testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Context was NOT lost");
-			else
-			{
-				m_testCtx.getLog() << tcu::TestLog::Message << "glGetGraphicsResetStatus() returned " << glu::getGraphicsResetStatusStr(status) << tcu::TestLog::EndMessage;
-				m_testCtx.setTestResult(QP_TEST_RESULT_PASS, "Context was lost");
-			}
-		}
-		catch (const glu::Error& error)
-		{
-			if (error.getError() == GL_CONTEXT_LOST)
-				passAndLog(contextReset);
-			else
-			{
-				m_testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Fail");
-
-				m_testCtx.getLog()	<< tcu::TestLog::Message
-									<< "Warning: glGetError() returned wrong value [" << error.what() << ", expected " << glu::getErrorStr(GL_CONTEXT_LOST) << "]"
-									<< tcu::TestLog::EndMessage;
-			}
-		}
-	}
-	else if (m_params.getContextResetType() == CONTEXTRESETTYPE_SHADER_OOB || m_params.getContextResetType() == CONTEXTRESETTYPE_FIXED_FUNC_OOB)
+	if (m_params.getContextResetType() == CONTEXTRESETTYPE_SHADER_OOB || m_params.getContextResetType() == CONTEXTRESETTYPE_FIXED_FUNC_OOB)
 	{
 		try
 		{
@@ -1764,87 +1444,6 @@
 	}
 };
 
-class SyncObjectResetCase : public ContextResetCase
-{
-public:
-	SyncObjectResetCase (EglTestContext& eglTestCtx, const char* name, const char* description, Params params)
-		: ContextResetCase (eglTestCtx, name, description, params) {}
-
-	virtual void provokeReset (de::SharedPtr<ContextReset>& contextReset)
-	{
-		m_testCtx.getLog()	<< tcu::TestLog::Message
-							<< "Check the status of a sync object after a context reset returned by glGetSynciv() equals GL_SIGNALED\n\n"
-							<< tcu::TestLog::EndMessage;
-
-		contextReset->setup();
-		contextReset->draw();
-	}
-
-	virtual void waitForReset (de::SharedPtr<ContextReset>& contextReset)
-	{
-		contextReset->createSyncObject();
-		contextReset->teardown();
-		contextReset->finish();
-	}
-
-	virtual void passAndLog (de::SharedPtr<ContextReset>& contextReset)
-	{
-		const glw::GLint status = contextReset->getSyncStatus();
-		if (status != GL_SIGNALED)
-		{
-			m_testCtx.getLog()	<< tcu::TestLog::Message
-								<< "Test failed! glGetSynciv() returned wrong value [" << glu::getErrorStr(status) << ", expected " << glu::getErrorStr(GL_SIGNALED) << "]"
-								<< tcu::TestLog::EndMessage;
-
-			m_testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Fail");
-		}
-		else
-			m_testCtx.setTestResult(QP_TEST_RESULT_PASS, "Pass");
-	}
-};
-
-class QueryObjectResetCase : public ContextResetCase
-{
-public:
-	QueryObjectResetCase (EglTestContext& eglTestCtx, const char* name, const char* description, Params params)
-		: ContextResetCase (eglTestCtx, name, description, params) {}
-
-	virtual void provokeReset (de::SharedPtr<ContextReset>& contextReset)
-	{
-		m_testCtx.getLog()	<< tcu::TestLog::Message
-							<< "Check the status of a query object after a context reset returned by glGetQueryObjectuiv() equals GL_TRUE\n\n"
-							<< tcu::TestLog::EndMessage;
-
-		contextReset->setup();
-		contextReset->beginQuery();
-		contextReset->draw();
-	}
-
-	virtual void waitForReset (de::SharedPtr<ContextReset>& contextReset)
-	{
-		contextReset->endQuery();
-		contextReset->teardown();
-		contextReset->finish();
-	}
-
-	virtual void passAndLog (de::SharedPtr<ContextReset>& contextReset)
-	{
-		const glw::GLuint queryReady = contextReset->getQueryAvailability();
-		if (queryReady != GL_TRUE)
-		{
-			m_testCtx.getLog()	<< tcu::TestLog::Message
-								<< "Test failed! glGetQueryObjectuiv() returned wrong value [" << glu::getErrorStr(queryReady) << ", expected " << glu::getErrorStr(GL_TRUE) << "]"
-								<< tcu::TestLog::EndMessage;
-
-			m_testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Fail");
-		}
-		else
-		{
-			m_testCtx.setTestResult(QP_TEST_RESULT_PASS, "Pass");
-		}
-	}
-};
-
 class InvalidShareContextCase : public RobustnessTestCase
 {
 public:
@@ -1966,81 +1565,6 @@
 	}
 };
 
-class SharedContextResetCase : public RobustnessTestCase
-{
-public:
-	SharedContextResetCase (EglTestContext& eglTestCtx, const char* name, const char* description, Params params)
-		: RobustnessTestCase (eglTestCtx, name, description, params) {}
-
-	TestCase::IterateResult	iterate	(void)
-	{
-		TestLog&	log		= m_testCtx.getLog();
-
-		log << tcu::TestLog::Message
-			<< "A reset in one context will result in a reset in all other contexts in its share group\n\n"
-			<< tcu::TestLog::EndMessage;
-
-		// Create two share contexts with the same reset notification strategies
-		const EGLint attribListShared[] =
-		{
-			EGL_CONTEXT_CLIENT_VERSION, 3,
-			EGL_CONTEXT_MINOR_VERSION_KHR, 0,
-			EGL_CONTEXT_OPENGL_ROBUST_ACCESS_EXT, EGL_TRUE,
-			EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY_EXT, EGL_LOSE_CONTEXT_ON_RESET,
-			EGL_NONE
-		};
-
-		checkRequiredEGLExtensions(attribListShared);
-
-		log << tcu::TestLog::Message << "Create context A (share_context = EGL_NO_CONTEXT)" << tcu::TestLog::EndMessage;
-		RenderingContext contextA(m_eglTestCtx, attribListShared, m_eglConfig, m_eglDisplay, EGL_NO_CONTEXT);
-
-		log << tcu::TestLog::Message << "Create context B (share_context = context A)" << tcu::TestLog::EndMessage;
-		RenderingContext contextB(m_eglTestCtx, attribListShared, m_eglConfig, m_eglDisplay, contextA.getContext());
-
-		contextA.makeCurrent(m_eglSurface);
-
-		glw::Functions gl;
-		contextA.initGLFunctions(&gl, paramsToApiType(m_params));
-		checkGLSupportForParams(gl, m_params);
-
-		DE_ASSERT(m_params.getContextResetType() == CONTEXTRESETTYPE_INFINITE_LOOP);
-		de::UniquePtr<ContextReset> contextReset(new InfiniteLoop(gl, log, m_params.getShaderType()));
-
-		contextReset->setup();
-		contextReset->draw();
-
-		try
-		{
-			contextReset->teardown();
-			contextReset->finish();
-		}
-		catch (const glu::Error& error)
-		{
-			if (error.getError() == GL_CONTEXT_LOST)
-			{
-				contextB.makeCurrent(m_eglSurface);
-
-				gl.getString(GL_VERSION); // arbitrary gl call
-
-				if (gl.getError() != GL_CONTEXT_LOST)
-				{
-					m_testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Test failed! glGetError() returned wrong value. Expected GL_CONTEXT_LOST in context B");
-					return STOP;
-				}
-			}
-			else
-			{
-				m_testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Test failed! glGetError() returned wrong value. Expected GL_CONTEXT_LOST in context A");
-				return STOP;
-			}
-		}
-
-		m_testCtx.setTestResult(QP_TEST_RESULT_PASS, "Pass");
-		return STOP;
-	}
-};
-
 class InvalidContextCase : public RobustnessTestCase
 {
 public:
@@ -2096,110 +1620,6 @@
 	}
 };
 
-class RecoverFromResetCase : public RobustnessTestCase
-{
-public:
-	RecoverFromResetCase (EglTestContext& eglTestCtx, const char* name, const char* description, Params params)
-		: RobustnessTestCase (eglTestCtx, name, description,  params) {}
-
-	TestCase::IterateResult	iterate	(void)
-	{
-		TestLog&	log		= m_testCtx.getLog();
-
-		log << tcu::TestLog::Message
-			<< "Provoke a context reset and wait for glGetGraphicsResetStatus() to return NO_ERROR_KHR.\n"
-			<< "Destroy the old context and successfully create a new context.\n\n"
-			<< tcu::TestLog::EndMessage;
-
-		const EGLint attribList[] =
-		{
-			EGL_CONTEXT_CLIENT_VERSION, 3,
-			EGL_CONTEXT_MINOR_VERSION_KHR, 0,
-			EGL_CONTEXT_OPENGL_ROBUST_ACCESS_EXT, EGL_TRUE,
-			EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY_EXT, EGL_LOSE_CONTEXT_ON_RESET,
-			EGL_NONE
-		};
-
-		checkRequiredEGLExtensions(attribList);
-
-		log << tcu::TestLog::Message << "Create context A" << tcu::TestLog::EndMessage;
-		RenderingContext contextA(m_eglTestCtx, attribList, m_eglConfig, m_eglDisplay, EGL_NO_CONTEXT);
-		contextA.makeCurrent(m_eglSurface);
-
-		glw::Functions gl;
-		contextA.initGLFunctions(&gl, paramsToApiType(m_params));
-		checkGLSupportForParams(gl, m_params);
-
-		DE_ASSERT(m_params.getContextResetType() == CONTEXTRESETTYPE_INFINITE_LOOP);
-		de::UniquePtr<ContextReset> contextReset(new InfiniteLoop(gl, log, m_params.getShaderType()));
-
-		contextReset->setup();
-		contextReset->draw();
-
-		try
-		{
-			contextReset->teardown();
-			contextReset->finish();
-		}
-		catch (const glu::Error& error)
-		{
-			if (error.getError() == GL_CONTEXT_LOST)
-			{
-				const glw::GLint status = gl.getGraphicsResetStatus();
-				if (status == GL_NO_ERROR)
-				{
-					log << tcu::TestLog::Message
-						<< "Test failed! glGetGraphicsResetStatus() returned wrong value [" << glu::getErrorStr(status) << ", expected " << glu::getErrorStr(GL_GUILTY_CONTEXT_RESET) << "]"
-						<< tcu::TestLog::EndMessage;
-
-					m_testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Fail");
-					return STOP;
-				}
-
-				const int	sleepTimeMs		= 1000;				// (1 second)
-				int			timeout			= sleepTimeMs * 10; // (10 seconds)
-				int			reset_status	= -1;
-
-				// wait for context to reset
-				while ((reset_status = gl.getGraphicsResetStatus() != GL_NO_ERROR) && timeout > 0)
-				{
-					deSleep(sleepTimeMs);
-					timeout -= sleepTimeMs;
-				}
-
-				if (reset_status != GL_NO_ERROR)
-				{
-					log	<< tcu::TestLog::Message
-						<< "Test failed! Context did not reset. glGetGraphicsResetStatus() returned wrong value [" << glu::getErrorStr(reset_status) << ", expected " << glu::getErrorStr(GL_NO_ERROR) << "]"
-						<< tcu::TestLog::EndMessage;
-
-					m_testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Fail");
-					return STOP;
-				}
-			}
-			else
-			{
-				m_testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Test failed! glGetError() returned wrong value. Expected GL_CONTEXT_LOST in context A");
-				return STOP;
-			}
-		}
-
-		try
-		{
-			log << tcu::TestLog::Message << "Create context B" << tcu::TestLog::EndMessage;
-			RenderingContext contextB(m_eglTestCtx, attribList, m_eglConfig, m_eglDisplay, EGL_NO_CONTEXT);
-		}
-		catch (const glu::Error&)
-		{
-			m_testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Test failed! Could not create new context. glGetError() returned wrong value. Expected GL_NO_ERROR");
-			return STOP;
-		}
-
-		m_testCtx.setTestResult(QP_TEST_RESULT_PASS, "Pass");
-		return STOP;
-	}
-};
-
 } // anonymous
 
 // Note: Tests limited to openGLES 3.1 contexts only
@@ -2215,49 +1635,11 @@
 	tcu::TestCaseGroup* const fixedFunctionTestGroup			= new TestCaseGroup(eglTestCtx, "fixed_function_pipeline",				"Fixed function pipeline context reset tests with robust context");
 	tcu::TestCaseGroup* const fixedFunctionNonRobustTestGroup	= new TestCaseGroup(eglTestCtx, "fixed_function_pipeline_non_robust",	"Fixed function pipeline context reset tests with non-robust context");
 
-	tcu::TestCaseGroup* const infiniteLoopTestGroup				= new TestCaseGroup(eglTestCtx, "infinite_loop",						"Infinite loop scenarios");
 	tcu::TestCaseGroup* const outOfBoundsTestGroup				= new TestCaseGroup(eglTestCtx, "out_of_bounds",						"Out of bounds access scenarios with robust context");
 
 	tcu::TestCaseGroup* const outOfBoundsNonRobustTestGroup		= new TestCaseGroup(eglTestCtx, "out_of_bounds_non_robust",				"Out of bounds access scenarios with non-robust context");
 
 	const string resetScenarioDescription	= "query error states and reset notifications";
-	const string syncScenarioDescription	= "query sync status with getSynciv()";
-	const string queryScenarioDescription	= "check availability of query result with getQueryObjectiv()";
-	const string sharedScenarioDescription	= "check reset notification is propagated to shared context";
-	const string recoverScenarioDescription	= "delete the old context and create a new one";
-
-	// infinite loop test cases
-	{
-		tcu::TestCaseGroup* const infiniteLoopResetTestGroup	= new TestCaseGroup(eglTestCtx, "reset_status",				"Tests that query the reset status after a context reset has occurred");
-		tcu::TestCaseGroup* const infiniteLoopSyncTestGroup		= new TestCaseGroup(eglTestCtx, "sync_status",				"Tests that query the sync status after a context reset has occurred");
-		tcu::TestCaseGroup* const infiniteLoopQueryTestGroup	= new TestCaseGroup(eglTestCtx, "query_status",				"Tests that query the state of a query object after a context reset has occurred");
-		tcu::TestCaseGroup* const infiniteLoopSharedTestGroup	= new TestCaseGroup(eglTestCtx, "shared_context_status",	"Tests that query the state of a shared context after a reset has occurred");
-		tcu::TestCaseGroup* const infiniteLoopRecoverTestGroup	= new TestCaseGroup(eglTestCtx, "recover_from_reset",		"Tests that attempt to create a new context after a context has occurred");
-
-		static const RobustnessTestCase::Params s_infiniteLoopCases[] =
-		{
-			RobustnessTestCase::Params("vertex",				"Provoke a context reset in vertex shader and ",				CONTEXTRESETTYPE_INFINITE_LOOP,	SHADERTYPE_VERT),
-			RobustnessTestCase::Params("fragment",				"Provoke a context reset in fragment shader and ",				CONTEXTRESETTYPE_INFINITE_LOOP,	SHADERTYPE_FRAG),
-			RobustnessTestCase::Params("vertex_and_fragment",	"Provoke a context reset in vertex and fragment shader and ",	CONTEXTRESETTYPE_INFINITE_LOOP,	SHADERTYPE_VERT_AND_FRAG),
-			RobustnessTestCase::Params("compute",				"Provoke a context reset in compute shader and ",				CONTEXTRESETTYPE_INFINITE_LOOP,	SHADERTYPE_COMPUTE),
-		};
-
-		for (int testNdx = 0; testNdx < DE_LENGTH_OF_ARRAY(s_infiniteLoopCases); ++testNdx)
-		{
-			const RobustnessTestCase::Params& test = s_infiniteLoopCases[testNdx];
-			infiniteLoopResetTestGroup->addChild	(new BasicResetCase				(eglTestCtx, test.getName().c_str(), (test.getDescription() + resetScenarioDescription).c_str(), test));
-			infiniteLoopSyncTestGroup->addChild		(new SyncObjectResetCase		(eglTestCtx, test.getName().c_str(), (test.getDescription() + syncScenarioDescription).c_str(), test));
-			infiniteLoopQueryTestGroup->addChild	(new QueryObjectResetCase		(eglTestCtx, test.getName().c_str(), (test.getDescription() + queryScenarioDescription).c_str(), test));
-			infiniteLoopSharedTestGroup->addChild	(new SharedContextResetCase		(eglTestCtx, test.getName().c_str(), (test.getDescription() + sharedScenarioDescription).c_str(), test));
-			infiniteLoopRecoverTestGroup->addChild	(new RecoverFromResetCase		(eglTestCtx, test.getName().c_str(), (test.getDescription() + recoverScenarioDescription).c_str(), test));
-		}
-
-		infiniteLoopTestGroup->addChild(infiniteLoopResetTestGroup);
-		infiniteLoopTestGroup->addChild(infiniteLoopSyncTestGroup);
-		infiniteLoopTestGroup->addChild(infiniteLoopQueryTestGroup);
-		infiniteLoopTestGroup->addChild(infiniteLoopSharedTestGroup);
-		infiniteLoopTestGroup->addChild(infiniteLoopRecoverTestGroup);
-	}
 
 	// out-of-bounds test cases
 	{
@@ -2484,7 +1866,6 @@
 		negativeContextTestGroup->addChild(new InvalidNotificationEnumCase	(eglTestCtx, "invalid_notification_strategy_enum",		"Create a robust context using EGL 1.5 only enum with EGL versions <= 1.4" ));
 	}
 
-	shadersTestGroup->addChild(infiniteLoopTestGroup);
 	shadersTestGroup->addChild(outOfBoundsTestGroup);
 	shadersTestGroup->addChild(outOfBoundsNonRobustTestGroup);
 
diff --git a/modules/gles2/functional/CMakeLists.txt b/modules/gles2/functional/CMakeLists.txt
index 43f513f..d9cfcb5 100644
--- a/modules/gles2/functional/CMakeLists.txt
+++ b/modules/gles2/functional/CMakeLists.txt
@@ -29,6 +29,8 @@
 	es2fLifetimeTests.hpp
 	es2fLightAmountTest.cpp
 	es2fLightAmountTest.hpp
+	es2fMultisampledRenderToTextureTests.cpp
+	es2fMultisampledRenderToTextureTests.hpp
 	es2fNegativeBufferApiTests.cpp
 	es2fNegativeBufferApiTests.hpp
 	es2fNegativeFragmentApiTests.cpp
diff --git a/modules/gles2/functional/es2fFboRenderTest.cpp b/modules/gles2/functional/es2fFboRenderTest.cpp
index 0007801..64cbba3 100644
--- a/modules/gles2/functional/es2fFboRenderTest.cpp
+++ b/modules/gles2/functional/es2fFboRenderTest.cpp
@@ -625,7 +625,7 @@
 	}
 
 	// Compare images
-	const float		threshold	= 0.03f;
+	const float		threshold	= 0.05f;
 	bool			imagesOk	= tcu::fuzzyCompare(log, "ComparisonResult", "Image comparison result", refFrame, gles2Frame, threshold, tcu::COMPARE_LOG_RESULT);
 
 	if (!imagesOk && !failReason)
diff --git a/modules/gles2/functional/es2fFunctionalTests.cpp b/modules/gles2/functional/es2fFunctionalTests.cpp
index 7a169db..f62916d 100644
--- a/modules/gles2/functional/es2fFunctionalTests.cpp
+++ b/modules/gles2/functional/es2fFunctionalTests.cpp
@@ -25,6 +25,7 @@
 
 #include "es2fColorClearTest.hpp"
 #include "es2fLightAmountTest.hpp"
+#include "es2fMultisampledRenderToTextureTests.hpp"
 #include "es2fShaderExecuteTest.hpp"
 #include "es2fFboApiTest.hpp"
 #include "es2fFboRenderTest.hpp"
@@ -310,35 +311,36 @@
 
 void FunctionalTests::init (void)
 {
-	addChild(new PrerequisiteTests			(m_context));
-	addChild(new ImplementationLimitTests	(m_context));
-	addChild(new ClipControlTests			(m_context));
-	addChild(new ColorClearTest				(m_context));
-	addChild(new DepthStencilClearTests		(m_context));
-	addChild(new BufferTests				(m_context));
-	addChild(new LightAmountTest			(m_context));
-	addChild(new ShadersTestGroup			(m_context));
-	addChild(new TextureTestGroup			(m_context));
-	addChild(new FragmentOpTests			(m_context));
-	addChild(new FboTestGroup				(m_context));
-	addChild(new VertexArrayTestGroup		(m_context));
-	addChild(new ShaderApiTests				(m_context));
-	addChild(new NegativeApiTestGroup		(m_context));
-	addChild(new RasterizationTests			(m_context));
-	addChild(createAttributeLocationTests	(m_context));
-	addChild(new MultisampleTests			(m_context));
-	addChild(new UniformApiTests			(m_context));
-	addChild(new ReadPixelsTests			(m_context));
-	addChild(new DepthRangeTests			(m_context));
-	addChild(new DitheringTests				(m_context));
-	addChild(new StateQueryTests			(m_context));
-	addChild(new ClippingTests				(m_context));
-	addChild(new PolygonOffsetTests			(m_context));
-	addChild(new DrawTests					(m_context));
-	addChild(new FlushFinishTests			(m_context));
-	addChild(new DefaultVertexAttributeTests(m_context));
-	addChild(createLifetimeTests			(m_context));
-	addChild(createDebugMarkerTests			(m_context));
+	addChild(new PrerequisiteTests					(m_context));
+	addChild(new ImplementationLimitTests			(m_context));
+	addChild(new ClipControlTests					(m_context));
+	addChild(new ColorClearTest						(m_context));
+	addChild(new DepthStencilClearTests				(m_context));
+	addChild(new BufferTests						(m_context));
+	addChild(new LightAmountTest					(m_context));
+	addChild(new MultisampledRenderToTextureTests	(m_context));
+	addChild(new ShadersTestGroup					(m_context));
+	addChild(new TextureTestGroup					(m_context));
+	addChild(new FragmentOpTests					(m_context));
+	addChild(new FboTestGroup						(m_context));
+	addChild(new VertexArrayTestGroup				(m_context));
+	addChild(new ShaderApiTests						(m_context));
+	addChild(new NegativeApiTestGroup				(m_context));
+	addChild(new RasterizationTests					(m_context));
+	addChild(createAttributeLocationTests			(m_context));
+	addChild(new MultisampleTests					(m_context));
+	addChild(new UniformApiTests					(m_context));
+	addChild(new ReadPixelsTests					(m_context));
+	addChild(new DepthRangeTests					(m_context));
+	addChild(new DitheringTests						(m_context));
+	addChild(new StateQueryTests					(m_context));
+	addChild(new ClippingTests						(m_context));
+	addChild(new PolygonOffsetTests					(m_context));
+	addChild(new DrawTests							(m_context));
+	addChild(new FlushFinishTests					(m_context));
+	addChild(new DefaultVertexAttributeTests		(m_context));
+	addChild(createLifetimeTests					(m_context));
+	addChild(createDebugMarkerTests					(m_context));
 }
 
 } // Functional
diff --git a/modules/gles2/functional/es2fMultisampledRenderToTextureTests.cpp b/modules/gles2/functional/es2fMultisampledRenderToTextureTests.cpp
new file mode 100644
index 0000000..9a0582d
--- /dev/null
+++ b/modules/gles2/functional/es2fMultisampledRenderToTextureTests.cpp
@@ -0,0 +1,152 @@
+/*-------------------------------------------------------------------------
+ * drawElements Quality Program OpenGL ES 2.0 Module
+ * -------------------------------------------------
+ *
+ * Copyright 2018 The Android Open Source Project
+ *
+ * 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 GL_EXT_multisample_render_to_texture tests.
+ */ /*--------------------------------------------------------------------*/
+
+#include "es2fMultisampledRenderToTextureTests.hpp"
+
+#include "deString.h"
+#include "deStringUtil.hpp"
+#include "gluContextInfo.hpp"
+#include "gluPixelTransfer.hpp"
+#include "gluShaderProgram.hpp"
+#include "glw.h"
+#include "glwEnums.hpp"
+#include "glwFunctions.hpp"
+#include "tcuRenderTarget.hpp"
+#include "tcuSurface.hpp"
+#include "tcuTestLog.hpp"
+#include "tcuVector.hpp"
+
+using tcu::TestLog;
+using tcu::Vec4;
+
+namespace deqp
+{
+namespace gles2
+{
+namespace Functional
+{
+
+class MultisampledRenderToTextureReadPixelsCase : public TestCase
+{
+public:
+	MultisampledRenderToTextureReadPixelsCase(Context& context, const char* name, const char* description);
+	~MultisampledRenderToTextureReadPixelsCase();
+	void init();
+	IterateResult iterate();
+
+private:
+	MultisampledRenderToTextureReadPixelsCase(const MultisampledRenderToTextureReadPixelsCase& other);
+	MultisampledRenderToTextureReadPixelsCase& operator=(const MultisampledRenderToTextureReadPixelsCase& other);
+};
+
+MultisampledRenderToTextureReadPixelsCase::MultisampledRenderToTextureReadPixelsCase(Context& context, const char* name, const char* description)
+	: TestCase(context, name, description)
+{
+}
+
+MultisampledRenderToTextureReadPixelsCase::~MultisampledRenderToTextureReadPixelsCase()
+{
+}
+
+void MultisampledRenderToTextureReadPixelsCase::init()
+{
+	const glu::ContextInfo& contextInfo = m_context.getContextInfo();
+	if (!contextInfo.isExtensionSupported("GL_EXT_multisampled_render_to_texture"))
+	{
+		TCU_THROW(NotSupportedError, "EXT_multisampled_render_to_texture is not supported");
+	}
+}
+
+MultisampledRenderToTextureReadPixelsCase::IterateResult MultisampledRenderToTextureReadPixelsCase::iterate()
+{
+	// Test for a bug where ReadPixels fails on multisampled textures.
+	// See http://crbug.com/890002
+	// Note that this does not test whether multisampling is working properly,
+	// only that ReadPixels is able to read from the texture.
+	const glw::Functions& gl = m_context.getRenderContext().getFunctions();
+	// Create a framebuffer with a multisampled texture and a depth-stencil
+	// renderbuffer.
+	GLuint framebuffer = 0;
+	GLuint texture = 0;
+	gl.genFramebuffers(1, &framebuffer);
+	gl.genTextures(1, &texture);
+	gl.bindFramebuffer(GL_FRAMEBUFFER, framebuffer);
+	gl.bindTexture(GL_TEXTURE_2D, texture);
+	gl.texImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
+	GLint max_samples = 0;
+	gl.getIntegerv(GL_MAX_SAMPLES_EXT, &max_samples);
+	gl.framebufferTexture2DMultisampleEXT(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture, 0, max_samples);
+	GLuint depthStencil = 0;
+	gl.genRenderbuffers(1, &depthStencil);
+	gl.bindRenderbuffer(GL_RENDERBUFFER, depthStencil);
+	gl.renderbufferStorageMultisampleEXT(GL_RENDERBUFFER, max_samples, GL_DEPTH24_STENCIL8, 1, 1);
+	gl.framebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, depthStencil);
+	gl.framebufferRenderbuffer(GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_RENDERBUFFER, depthStencil);
+	if (gl.checkFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) {
+		TCU_THROW(NotSupportedError, "Framebuffer format not supported.");
+	}
+	gl.clearColor(1, 0, 1, 0);
+	gl.clear(GL_COLOR_BUFFER_BIT);
+	GLU_EXPECT_NO_ERROR(gl.getError(), "init");
+
+	// ReadPixels should implicitly resolve the multisampled buffer.
+	GLubyte pixel[4] = { 0, 1, 0, 1 };
+	gl.readPixels(0, 0, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, &pixel);
+	GLU_EXPECT_NO_ERROR(gl.getError(), "ReadPixels");
+
+	if (pixel[0] != 255 || pixel[1] != 0 || pixel[2] != 255 || pixel[3] != 0)
+	{
+		std::ostringstream msg;
+		msg << "ReadPixels read incorrect values: [" << (int)pixel[0] << ", " << (int)pixel[1] << ", " << (int)pixel[2] << ", " << (int)pixel[3] << "]";
+		m_testCtx.setTestResult(QP_TEST_RESULT_FAIL, msg.str().c_str());
+	}
+	else
+	{
+		m_testCtx.setTestResult(QP_TEST_RESULT_PASS, "Pass");
+	}
+
+	gl.bindFramebuffer(GL_FRAMEBUFFER, 0);
+	gl.bindTexture(GL_TEXTURE_2D, 0);
+	gl.bindRenderbuffer(GL_RENDERBUFFER, 0);
+	gl.deleteFramebuffers(1, &framebuffer);
+	gl.deleteRenderbuffers(1, &depthStencil);
+	gl.deleteTextures(1, &texture);
+	return STOP;
+}
+
+MultisampledRenderToTextureTests::MultisampledRenderToTextureTests(Context& context) : TestCaseGroup(context, "multisampled_render_to_texture", "EXT_multisampled_render_to_texture tests")
+{
+}
+
+MultisampledRenderToTextureTests::~MultisampledRenderToTextureTests()
+{
+}
+
+void MultisampledRenderToTextureTests::init()
+{
+	addChild(new MultisampledRenderToTextureReadPixelsCase(m_context, "readpixels", "Test ReadPixels with EXT_multisampled_render_to_texture"));
+}
+
+} // namespace Functional
+} // namespace gles2
+} // namespace deqp
diff --git a/modules/gles2/functional/es2fMultisampledRenderToTextureTests.hpp b/modules/gles2/functional/es2fMultisampledRenderToTextureTests.hpp
new file mode 100644
index 0000000..a44e2f7
--- /dev/null
+++ b/modules/gles2/functional/es2fMultisampledRenderToTextureTests.hpp
@@ -0,0 +1,53 @@
+#ifndef _ES2FMULTISAMPLEDRENDERTOTEXTURETESTS_HPP
+#define _ES2FMULTISAMPLEDRENDERTOTEXTURETESTS_HPP
+/*-------------------------------------------------------------------------
+ * drawElements Quality Program OpenGL ES 2.0 Module
+ * -------------------------------------------------
+ *
+ * Copyright 2018 The Android Open Source Project
+ *
+ * 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 GL_EXT_multisample_render_to_texture tests.
+*/ /*--------------------------------------------------------------------*/
+
+#include "tcuDefs.hpp"
+#include "tes2TestCase.hpp"
+
+namespace deqp
+{
+namespace gles2
+{
+namespace Functional
+{
+
+class MultisampledRenderToTextureTests : public TestCaseGroup
+{
+public:
+	MultisampledRenderToTextureTests(Context& context);
+	~MultisampledRenderToTextureTests();
+
+	void init();
+
+private:
+	MultisampledRenderToTextureTests(const MultisampledRenderToTextureTests& other);
+	MultisampledRenderToTextureTests& operator=(const MultisampledRenderToTextureTests& other);
+};
+
+} // namespace Functional
+} // namespace gles2
+} // namespace deqp
+
+#endif // _ES2FMULTISAMPLEDRENDERTOTEXTURETESTS_HPP
diff --git a/modules/gles2/functional/es2fTextureWrapTests.cpp b/modules/gles2/functional/es2fTextureWrapTests.cpp
index f776a86..0a3bfa2 100644
--- a/modules/gles2/functional/es2fTextureWrapTests.cpp
+++ b/modules/gles2/functional/es2fTextureWrapTests.cpp
@@ -143,7 +143,16 @@
 
 		// Fill level 0.
 		m_texture->getRefTexture().allocLevel(0);
-		tcu::fillWithComponentGradients(m_texture->getRefTexture().getLevel(0), tcu::Vec4(-0.5f, -0.5f, -0.5f, 2.0f), tcu::Vec4(1.0f, 1.0f, 1.0f, 0.0f));
+		if (m_wrapS == GL_REPEAT ||
+			m_wrapT == GL_REPEAT)
+		{
+			// If run in repeat mode, use conical style texture to avoid edge sample result have a huge difference when coordinate offset in allow range.
+			tcu::fillWithComponentGradients3(m_texture->getRefTexture().getLevel(0), tcu::Vec4(-0.5f, -0.5f, -0.5f, 1.5f), tcu::Vec4(1.0f, 1.0f, 1.0f, 0.0f));
+		}
+		else
+		{
+			tcu::fillWithComponentGradients(m_texture->getRefTexture().getLevel(0), tcu::Vec4(-0.5f, -0.5f, -0.5f, 1.5f), tcu::Vec4(1.0f, 1.0f, 1.0f, 0.0f));
+		}
 
 		m_texture->upload();
 	}
@@ -169,8 +178,18 @@
 	int						leftWidth			= viewport.width / 2;
 	int						rightWidth			= viewport.width - leftWidth;
 	vector<float>			texCoord;
-	tcu::RGBA				threshold			= m_renderCtx.getRenderTarget().getPixelFormat().getColorThreshold()
-												+ (isCompressedTex ? tcu::RGBA(7,7,7,7) : tcu::RGBA(3,3,3,3));
+
+	tcu::RGBA				threshold;
+	if (m_texture->getRefTexture().getFormat().type == tcu::TextureFormat::UNORM_SHORT_4444 ||
+		m_texture->getRefTexture().getFormat().type == tcu::TextureFormat::UNSIGNED_SHORT_4444)
+	{
+		threshold = tcu::PixelFormat(4, 4, 4, 4).getColorThreshold() + tcu::RGBA(1, 1, 1, 1);
+	}
+	else
+	{
+		threshold = m_renderCtx.getRenderTarget().getPixelFormat().getColorThreshold() +
+					(isCompressedTex ? tcu::RGBA(7, 7, 7, 7) : tcu::RGBA(3, 3, 3, 3));
+	}
 
 	// Bind to unit 0.
 	gl.activeTexture(GL_TEXTURE0);
diff --git a/modules/gles3/functional/es3fDitheringTests.cpp b/modules/gles3/functional/es3fDitheringTests.cpp
index 5e52d9e..a677f22 100644
--- a/modules/gles3/functional/es3fDitheringTests.cpp
+++ b/modules/gles3/functional/es3fDitheringTests.cpp
@@ -105,7 +105,7 @@
 	static const char*						getPatternTypeName			(PatternType type);
 
 private:
-	bool									checkColor					(const tcu::Vec4& inputClr, const tcu::RGBA& renderedClr, bool logErrors) const;
+	bool									checkColor					(const tcu::Vec4& inputClr, const tcu::RGBA& renderedClr, bool logErrors, const bool incTol) const;
 
 	bool									drawAndCheckGradient		(bool isVerticallyIncreasing, const tcu::Vec4& highColor) const;
 	bool									drawAndCheckUnicoloredQuad	(const tcu::Vec4& color) const;
@@ -165,7 +165,7 @@
 	m_renderer = DE_NULL;
 }
 
-bool DitheringCase::checkColor (const Vec4& inputClr, const tcu::RGBA& renderedClr, const bool logErrors) const
+bool DitheringCase::checkColor (const Vec4& inputClr, const tcu::RGBA& renderedClr, const bool logErrors, const bool incTol) const
 {
 	const IVec4		channelBits		= pixelFormatToIVec4(m_renderFormat);
 	bool			allChannelsOk	= true;
@@ -182,6 +182,12 @@
 
 		channelChoices.push_back(de::min(channelMax,	(int)deFloatCeil(scaledInput)));
 		channelChoices.push_back(de::max(0,				(int)deFloatCeil(scaledInput) - 1));
+		// Allow for more tolerance for small dimension render targets
+		if (incTol)
+		{
+			channelChoices.push_back(de::max(0,(int)deFloatCeil(scaledInput) - 2));
+			channelChoices.push_back(de::max(0,(int)deFloatCeil(scaledInput) + 1));
+		}
 
 		// If the input color results in a scaled value that is very close to an integer, account for a little bit of possible inaccuracy.
 		if (useRoundingMargin)
@@ -288,8 +294,9 @@
 			{
 				const float		inputF		= ((float)(isVerticallyIncreasing ? y : x) + 0.5f) / (float)(isVerticallyIncreasing ? renderedImg.getHeight() : renderedImg.getWidth());
 				const Vec4		inputClr	= (1.0f-inputF)*quadClr0 + inputF*quadClr1;
+				const bool              increaseTol     = ((renderedImg.getWidth() < 300) || (renderedImg.getHeight() < 300)) ? true : false;
 
-				if (!checkColor(inputClr, renderedImg.getPixel(x, y), colorChoicesOk))
+				if (!checkColor(inputClr, renderedImg.getPixel(x, y), colorChoicesOk, increaseTol))
 				{
 					errorMask.setPixel(x, y, tcu::RGBA::red());
 
@@ -399,7 +406,7 @@
 		{
 			for (int x = 0; x < renderedImg.getWidth(); x++)
 			{
-				if (!checkColor(quadColor, renderedImg.getPixel(x, y), colorChoicesOk))
+				if (!checkColor(quadColor, renderedImg.getPixel(x, y), colorChoicesOk, false))
 				{
 					errorMask.setPixel(x, y, tcu::RGBA::red());
 
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/modules/gles3/functional/es3fNegativeTextureApiTests.cpp b/modules/gles3/functional/es3fNegativeTextureApiTests.cpp
index c3043a4..e096baf 100644
--- a/modules/gles3/functional/es3fNegativeTextureApiTests.cpp
+++ b/modules/gles3/functional/es3fNegativeTextureApiTests.cpp
@@ -2672,7 +2672,8 @@
 			// textures ... result in an INVALID_OPERATION error.
 			// Also, if LDR is supported, formats cannot be invalid enums
 
-			if (m_context.getContextInfo().isExtensionSupported("GL_KHR_texture_compression_astc_hdr") ||
+			if (m_context.getContextInfo().isExtensionSupported("GL_KHR_texture_compression_astc_sliced_3d") ||
+				m_context.getContextInfo().isExtensionSupported("GL_KHR_texture_compression_astc_hdr") ||
 				m_context.getContextInfo().isExtensionSupported("GL_OES_texture_compression_astc"))
 			{
 				m_log.writeMessage("Full ASTC supported. No negative API requirements.");
@@ -3128,7 +3129,8 @@
 			// no effect.
 			// In conclusion: Expect same errors as with TexImage?D
 
-			if (m_context.getContextInfo().isExtensionSupported("GL_KHR_texture_compression_astc_hdr") ||
+			if (m_context.getContextInfo().isExtensionSupported("GL_KHR_texture_compression_astc_sliced_3d") ||
+				m_context.getContextInfo().isExtensionSupported("GL_KHR_texture_compression_astc_hdr") ||
 				m_context.getContextInfo().isExtensionSupported("GL_OES_texture_compression_astc"))
 			{
 				m_log.writeMessage("Full ASTC supported. No negative API requirements.");
diff --git a/modules/gles3/functional/es3fTextureWrapTests.cpp b/modules/gles3/functional/es3fTextureWrapTests.cpp
index a36e4ce..33e0334 100644
--- a/modules/gles3/functional/es3fTextureWrapTests.cpp
+++ b/modules/gles3/functional/es3fTextureWrapTests.cpp
@@ -267,7 +267,16 @@
 
 		// Fill level 0.
 		m_texture->getRefTexture().allocLevel(0);
-		tcu::fillWithComponentGradients(m_texture->getRefTexture().getLevel(0), tcu::Vec4(-0.5f, -0.5f, -0.5f, 2.0f), tcu::Vec4(1.0f, 1.0f, 1.0f, 0.0f));
+		if (m_wrapS == GL_REPEAT ||
+			m_wrapT == GL_REPEAT)
+		{
+			// If run in repeat mode, use conical style texture to avoid edge sample result have a huge difference when coordinate offset in allow range.
+			tcu::fillWithComponentGradients3(m_texture->getRefTexture().getLevel(0), tcu::Vec4(-0.5f, -0.5f, -0.5f, 1.5f), tcu::Vec4(1.0f, 1.0f, 1.0f, 0.0f));
+		}
+		else
+		{
+			tcu::fillWithComponentGradients(m_texture->getRefTexture().getLevel(0), tcu::Vec4(-0.5f, -0.5f, -0.5f, 1.5f), tcu::Vec4(1.0f, 1.0f, 1.0f, 0.0f));
+		}
 
 		m_texture->upload();
 	}
@@ -339,7 +348,7 @@
 
 		lodPrecision.derivateBits		= 18;
 		lodPrecision.lodBits			= 5;
-		lookupPrecision.colorThreshold	= tcu::computeFixedPointThreshold(colorBits) / refParams.colorScale;
+		lookupPrecision.colorThreshold	= tcu::computeColorBitsThreshold(getBitsVec(pixelFormat), colorBits) / refParams.colorScale;
 		lookupPrecision.coordBits		= tcu::IVec3(20,20,0);
 		lookupPrecision.uvwBits			= tcu::IVec3(5,5,0);
 		lookupPrecision.colorMask		= getCompareMask(pixelFormat);
diff --git a/modules/gles3/functional/es3fUniformBlockTests.cpp b/modules/gles3/functional/es3fUniformBlockTests.cpp
index 2671945..520e8f4 100644
--- a/modules/gles3/functional/es3fUniformBlockTests.cpp
+++ b/modules/gles3/functional/es3fUniformBlockTests.cpp
@@ -189,6 +189,50 @@
 	int			m_numInstances;
 };
 
+class BlockSingleNestedStructMixedMatrixPackingCase : public UniformBlockCase
+{
+public:
+	BlockSingleNestedStructMixedMatrixPackingCase (Context& context, const char* name, const char* description, deUint32 blockLayoutFlags, deUint32 matrixLayoutFlags, deUint32 matrixArrayLayoutFlags, BufferMode bufferMode, int numInstances)
+			: UniformBlockCase			(context.getTestContext(), context.getRenderContext(), name, description, glu::GLSL_VERSION_300_ES, bufferMode)
+			, m_blockLayoutFlags		(blockLayoutFlags)
+			, m_matrixLayoutFlags		(matrixLayoutFlags)
+			, m_matrixArrayLayoutFlags	(matrixArrayLayoutFlags)
+			, m_numInstances			(numInstances)
+	{
+	}
+
+	void init (void)
+	{
+		StructType& typeS = m_interface.allocStruct("S");
+		typeS.addMember("a", VarType(glu::TYPE_INT_VEC3, PRECISION_HIGH));
+		typeS.addMember("b", VarType(VarType(glu::TYPE_FLOAT_MAT3, PRECISION_MEDIUM), 4));
+		typeS.addMember("c", VarType(glu::TYPE_FLOAT_VEC4, PRECISION_HIGH), UNUSED_BOTH);
+
+		StructType& typeT = m_interface.allocStruct("T");
+		typeT.addMember("a", VarType(glu::TYPE_FLOAT_MAT3, PRECISION_MEDIUM));
+		typeT.addMember("b", VarType(&typeS));
+
+		UniformBlock& block = m_interface.allocBlock("Block");
+		block.addUniform(Uniform("s", VarType(&typeS, m_matrixArrayLayoutFlags), 0));
+		block.addUniform(Uniform("v", VarType(glu::TYPE_FLOAT_VEC2, PRECISION_LOW), UNUSED_BOTH));
+		block.addUniform(Uniform("t", VarType(&typeT, m_matrixLayoutFlags), 0));
+		block.addUniform(Uniform("u", VarType(glu::TYPE_UINT, PRECISION_HIGH), 0));
+		block.setFlags(m_blockLayoutFlags);
+
+		if (m_numInstances > 0)
+		{
+			block.setInstanceName("block");
+			block.setArraySize(m_numInstances);
+		}
+	}
+
+private:
+	deUint32	m_blockLayoutFlags;
+	deUint32	m_matrixLayoutFlags;
+	deUint32	m_matrixArrayLayoutFlags;
+	int			m_numInstances;
+};
+
 class BlockSingleNestedStructArrayCase : public UniformBlockCase
 {
 public:
@@ -570,6 +614,45 @@
 		}
 	}
 
+	// ubo.single_nested_struct_mixed_matrix_packing
+	{
+		tcu::TestCaseGroup* singleNestedStructMixedMatrixPackingGroup = new tcu::TestCaseGroup(m_testCtx, "single_nested_struct_mixed_matrix_packing", "Nested struct in one uniform block with a mixed matrix packing");
+		addChild(singleNestedStructMixedMatrixPackingGroup);
+
+		for (const auto& bufferMode : bufferModes)
+		{
+			tcu::TestCaseGroup* modeGroup = new tcu::TestCaseGroup(m_testCtx, bufferMode.name, "");
+			singleNestedStructMixedMatrixPackingGroup->addChild(modeGroup);
+
+			for (const auto& layoutFlag : layoutFlags)
+			for (const auto& blockMatrixFlag : matrixFlags)
+			for (const auto& singleMatrixFlag : matrixFlags)
+			for (const auto& arrayMatrixFlag : matrixFlags)
+			for (int isArray = 0; isArray < 2; isArray++)
+			{
+				std::string	baseName	= layoutFlag.name;
+				deUint32	baseFlags	= layoutFlag.flags;
+				deUint32	blockFlags	= baseFlags | blockMatrixFlag.flags;
+
+				baseName += std::string("_block_") + blockMatrixFlag.name;
+				baseName += std::string("_matrix_") + singleMatrixFlag.name;
+				baseName += std::string("_matrixarray_") + arrayMatrixFlag.name;
+
+				if (bufferMode.mode == UniformBlockCase::BUFFERMODE_SINGLE && isArray == 0)
+					continue; // Doesn't make sense to add this variant.
+
+				if (isArray)
+					baseName += "_instance_array";
+
+				modeGroup->addChild(new BlockSingleNestedStructMixedMatrixPackingCase(m_context, (baseName + "_vertex").c_str(), "", blockFlags | DECLARE_VERTEX, singleMatrixFlag.flags, arrayMatrixFlag.flags, bufferMode.mode, isArray ? 3 : 0));
+				modeGroup->addChild(new BlockSingleNestedStructMixedMatrixPackingCase(m_context, (baseName + "_fragment").c_str(), "", blockFlags | DECLARE_FRAGMENT, singleMatrixFlag.flags, arrayMatrixFlag.flags, bufferMode.mode, isArray ? 3 : 0));
+
+				if (!(baseFlags & LAYOUT_PACKED))
+					modeGroup->addChild(new BlockSingleNestedStructMixedMatrixPackingCase(m_context, (baseName + "_both").c_str(), "", blockFlags | DECLARE_VERTEX | DECLARE_FRAGMENT, singleMatrixFlag.flags, arrayMatrixFlag.flags, bufferMode.mode, isArray ? 3 : 0));
+			}
+		}
+	}
+
 	// ubo.single_nested_struct_array
 	{
 		tcu::TestCaseGroup* singleNestedStructArrayGroup = new tcu::TestCaseGroup(m_testCtx, "single_nested_struct_array", "Nested struct array in one uniform block");
diff --git a/modules/gles31/CMakeLists.txt b/modules/gles31/CMakeLists.txt
index 0d4cfc9..42b2859 100644
--- a/modules/gles31/CMakeLists.txt
+++ b/modules/gles31/CMakeLists.txt
@@ -22,6 +22,8 @@
 	tes31TestCase.hpp
 	tes31TestPackage.cpp
 	tes31TestPackage.hpp
+	tgl45TestPackage.cpp
+	tgl45TestPackage.hpp
 	)
 
 set(DEQP_GLES31_LIBS
diff --git a/modules/gles31/functional/es31fAdvancedBlendTests.cpp b/modules/gles31/functional/es31fAdvancedBlendTests.cpp
index 1ce7dcb..a9540b6 100644
--- a/modules/gles31/functional/es31fAdvancedBlendTests.cpp
+++ b/modules/gles31/functional/es31fAdvancedBlendTests.cpp
@@ -312,6 +312,9 @@
 
 			gl.bindFramebuffer(GL_FRAMEBUFFER, m_fbo);
 		}
+
+		if (glu::isContextTypeGLCore(m_context.getRenderContext().getType()) && useSRGB)
+			gl.enable(GL_FRAMEBUFFER_SRGB);
 	}
 	else
 		DE_ASSERT(m_rtType == RENDERTARGETTYPE_DEFAULT);
@@ -364,6 +367,9 @@
 			gl.deleteRenderbuffers(1, &m_resolveFbo);
 			m_resolveFbo = 0;
 		}
+
+		if (glu::isContextTypeGLCore(m_context.getRenderContext().getType()) && RENDERTARGETTYPE_SRGB_FBO == m_rtType)
+			gl.disable(GL_FRAMEBUFFER_SRGB);
 	}
 }
 
@@ -411,6 +417,7 @@
 		const deUint32		program				= m_program->getProgram();
 		const int			posLoc				= gl.getAttribLocation(program, "a_position");
 		const int			colorLoc			= gl.getAttribLocation(program, "a_color");
+		deUint32			vao					= 0;
 		const glu::Buffer	indexBuffer			(renderCtx);
 		const glu::Buffer	positionBuffer		(renderCtx);
 		const glu::Buffer	colorBuffer			(renderCtx);
@@ -434,6 +441,12 @@
 				indices[quadNdx*6 + ndx] = (deUint16)(quadNdx*4 + singleQuadIndices[ndx]);
 		}
 
+		if (!glu::isContextTypeES(renderCtx.getType()))
+		{
+			gl.genVertexArrays(1, &vao);
+			gl.bindVertexArray(vao);
+		}
+
 		gl.bindBuffer(GL_ELEMENT_ARRAY_BUFFER, *indexBuffer);
 		gl.bufferData(GL_ELEMENT_ARRAY_BUFFER, (glw::GLsizeiptr)(indices.size()*sizeof(indices[0])), &indices[0], GL_STATIC_DRAW);
 
@@ -482,6 +495,9 @@
 			}
 		}
 
+		if (vao)
+			gl.deleteVertexArrays(1, &vao);
+
 		gl.flush();
 		GLU_EXPECT_NO_ERROR(gl.getError(), "Render failed");
 	}
@@ -715,13 +731,15 @@
 
 BlendEquationIndexedStateCase::IterateResult BlendEquationIndexedStateCase::iterate (void)
 {
-	if (!glu::contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2)))
+	const auto& renderContext = m_context.getRenderContext();
+	if (!glu::contextSupports(renderContext.getType(), glu::ApiType::es(3, 2)) &&
+		!glu::contextSupports(renderContext.getType(), glu::ApiType::core(4, 5)))
 	{
 		TCU_CHECK_AND_THROW(NotSupportedError, m_context.getContextInfo().isExtensionSupported("GL_KHR_blend_equation_advanced"), "GL_KHR_blend_equation_advanced is not supported");
 		TCU_CHECK_AND_THROW(NotSupportedError, m_context.getContextInfo().isExtensionSupported("GL_EXT_draw_buffers_indexed"), "GL_EXT_draw_buffers_indexed is not supported");
 	}
 
-	glu::CallLogWrapper		gl		(m_context.getRenderContext().getFunctions(), m_testCtx.getLog());
+	glu::CallLogWrapper		gl		(renderContext.getFunctions(), m_testCtx.getLog());
 	tcu::ResultCollector	result	(m_testCtx.getLog(), " // ERROR: ");
 
 	gl.enableLogging(true);
@@ -770,6 +788,7 @@
 		GL_HSL_SATURATION,
 		GL_HSL_COLOR,
 		GL_HSL_LUMINOSITY,
+
 	};
 
 	tcu::TestCaseGroup* const	stateQueryGroup		= new tcu::TestCaseGroup(m_testCtx, "state_query",		"State query tests");
diff --git a/modules/gles31/functional/es31fBasicComputeShaderTests.cpp b/modules/gles31/functional/es31fBasicComputeShaderTests.cpp
index efec5ab..aa3e54e 100644
--- a/modules/gles31/functional/es31fBasicComputeShaderTests.cpp
+++ b/modules/gles31/functional/es31fBasicComputeShaderTests.cpp
@@ -1240,19 +1240,23 @@
 
 	void init (void)
 	{
-		if (!glu::contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2)))
-			if (!m_context.getContextInfo().isExtensionSupported("GL_OES_shader_image_atomic"))
-				throw tcu::NotSupportedError("Test requires OES_shader_image_atomic extension");
+		auto contextType = m_context.getRenderContext().getType();
+		if (!glu::contextSupports(contextType, glu::ApiType::es(3, 2)) &&
+			!glu::contextSupports(contextType, glu::ApiType::core(4, 5)) &&
+			!m_context.getContextInfo().isExtensionSupported("GL_OES_shader_image_atomic"))
+			TCU_THROW(NotSupportedError, "Test requires OES_shader_image_atomic extension");
 	}
 
 	IterateResult iterate (void)
 	{
-		const GLSLVersion			glslVersion		= glu::getContextTypeGLSLVersion(m_context.getRenderContext().getType());
-		const bool					supportsES32	= glu::contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2));
+		glu::ContextType			contextType			= m_context.getRenderContext().getType();
+		const GLSLVersion			glslVersion			= glu::getContextTypeGLSLVersion(contextType);
+		const bool					supportsES32orGL45	= glu::contextSupports(contextType, glu::ApiType::es(3, 2)) ||
+														  glu::contextSupports(contextType, glu::ApiType::core(4, 5));
 		std::ostringstream			src;
 
 		src << getGLSLVersionDeclaration(glslVersion) << "\n"
-			<< (supportsES32 ? "\n" : "#extension GL_OES_shader_image_atomic : require\n")
+			<< (supportsES32orGL45 ? "\n" : "#extension GL_OES_shader_image_atomic : require\n")
 			<< "layout (local_size_x = " << m_localSize << ") in;\n"
 			<< "layout(r32ui, binding = 1) uniform highp uimage2D u_dstImg;\n"
 			<< "buffer Input {\n"
diff --git a/modules/gles31/functional/es31fBooleanStateQueryTests.cpp b/modules/gles31/functional/es31fBooleanStateQueryTests.cpp
index 6395016..57bd0b4 100644
--- a/modules/gles31/functional/es31fBooleanStateQueryTests.cpp
+++ b/modules/gles31/functional/es31fBooleanStateQueryTests.cpp
@@ -70,7 +70,8 @@
 
 	IterateResult iterate (void)
 	{
-		TCU_CHECK_AND_THROW(NotSupportedError, contextSupports(m_context.getRenderContext().getType(), m_minimumVersion), "This test requires a higher context version.");
+		if (!contextSupports(m_context.getRenderContext().getType(), glu::ApiType::core(4, 5)))
+			TCU_CHECK_AND_THROW(NotSupportedError, contextSupports(m_context.getRenderContext().getType(), m_minimumVersion), "This test requires a higher context version.");
 
 		tcu::ResultCollector result(m_testCtx.getLog(), " // ERROR: ");
 		enableLogging(true);
diff --git a/modules/gles31/functional/es31fCopyImageTests.cpp b/modules/gles31/functional/es31fCopyImageTests.cpp
index c117fd2..502dd45 100644
--- a/modules/gles31/functional/es31fCopyImageTests.cpp
+++ b/modules/gles31/functional/es31fCopyImageTests.cpp
@@ -1898,11 +1898,12 @@
 		if (isAstcFormat(glu::mapGLCompressedTexFormat(format)))
 		{
 			DE_ASSERT(target != GL_RENDERBUFFER);
-			if (!info.isExtensionSupported("GL_KHR_texture_compression_astc_hdr") &&
+			if (!info.isExtensionSupported("GL_KHR_texture_compression_astc_sliced_3d") &&
+				!info.isExtensionSupported("GL_KHR_texture_compression_astc_hdr") &&
 				!info.isExtensionSupported("GL_OES_texture_compression_astc"))
 			{
 				if (target == GL_TEXTURE_3D)
-					TCU_THROW(NotSupportedError, "TEXTURE_3D target requires HDR astc support.");
+					TCU_THROW(NotSupportedError, "TEXTURE_3D target not supported.");
 				if (!isES32 && !info.isExtensionSupported("GL_KHR_texture_compression_astc_ldr"))
 					TCU_THROW(NotSupportedError, "Compressed astc texture not supported.");
 			}
diff --git a/modules/gles31/functional/es31fDefaultVertexArrayObjectTests.cpp b/modules/gles31/functional/es31fDefaultVertexArrayObjectTests.cpp
index 2bf9b1d..55cb0cd 100644
--- a/modules/gles31/functional/es31fDefaultVertexArrayObjectTests.cpp
+++ b/modules/gles31/functional/es31fDefaultVertexArrayObjectTests.cpp
@@ -41,6 +41,7 @@
 {
 public:
 					VertexAttributeDivisorCase	(Context& context, const char* name, const char* description);
+	void			init						(void);
 	IterateResult	iterate						(void);
 };
 
@@ -49,6 +50,14 @@
 {
 }
 
+void VertexAttributeDivisorCase::init (void)
+{
+	if (!glu::isContextTypeES(m_context.getRenderContext().getType()))
+	{
+		throw tcu::NotSupportedError("The Use VertexAttribDivisor with default VAO test is not supported in the GL context");
+	}
+}
+
 VertexAttributeDivisorCase::IterateResult VertexAttributeDivisorCase::iterate (void)
 {
 	glu::CallLogWrapper gl		(m_context.getRenderContext().getFunctions(), m_testCtx.getLog());
diff --git a/modules/gles31/functional/es31fDrawBuffersIndexedTests.cpp b/modules/gles31/functional/es31fDrawBuffersIndexedTests.cpp
index d190461..0a1d4cc 100644
--- a/modules/gles31/functional/es31fDrawBuffersIndexedTests.cpp
+++ b/modules/gles31/functional/es31fDrawBuffersIndexedTests.cpp
@@ -182,6 +182,13 @@
 	Maybe<BVec4>									colorMask;
 };
 
+static bool checkES32orGL45Support(Context& ctx)
+{
+	auto ctxType = ctx.getRenderContext().getType();
+	return contextSupports(ctxType, glu::ApiType::es(3, 2)) ||
+		   contextSupports(ctxType, glu::ApiType::core(4, 5));
+}
+
 void setCommonBlendState (const glw::Functions& gl, const BlendState& blend)
 {
 	if (blend.enableBlend)
@@ -1194,9 +1201,9 @@
 
 void DrawBuffersIndexedTest::init (void)
 {
-	const bool supportsES32 = glu::contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2));
+	const bool supportsES32orGL45 = checkES32orGL45Support(m_context);
 
-	if (!supportsES32)
+	if (!supportsES32orGL45)
 	{
 		if (requiresAdvancedBlendEq(m_preCommonBlendState, m_postCommonBlendState, m_drawBuffers) && !m_context.getContextInfo().isExtensionSupported("GL_KHR_blend_equation_advanced"))
 			TCU_THROW(NotSupportedError, "Extension GL_KHR_blend_equation_advanced not supported");
@@ -1303,7 +1310,7 @@
 
 TextureFormat getRandomFormat (de::Random& rng, Context& context)
 {
-	const bool supportsES32 = glu::contextSupports(context.getRenderContext().getType(), glu::ApiType::es(3, 2));
+	const bool supportsES32orGL45 = checkES32orGL45Support(context);
 
 	const deUint32 glFormats[] =
 	{
@@ -1341,7 +1348,7 @@
 		GL_R11F_G11F_B10F
 	};
 
-	if (supportsES32)
+	if (supportsES32orGL45)
 		return glu::mapGLInternalFormat(de::getArrayElement(glFormats, rng.getUint32() % DE_LENGTH_OF_ARRAY(glFormats)));
 	else
 	{
@@ -1413,9 +1420,9 @@
 
 void MaxDrawBuffersIndexedTest::init (void)
 {
-	const bool supportsES32 = glu::contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2));
+	const bool supportsES32orGL45 = checkES32orGL45Support(m_context);
 
-	if (!supportsES32 && !m_context.getContextInfo().isExtensionSupported("GL_EXT_draw_buffers_indexed"))
+	if (!supportsES32orGL45 && !m_context.getContextInfo().isExtensionSupported("GL_EXT_draw_buffers_indexed"))
 		TCU_THROW(NotSupportedError, "Extension GL_EXT_draw_buffers_indexed not supported");
 }
 
@@ -1457,9 +1464,9 @@
 
 void ImplMaxDrawBuffersIndexedTest::init (void)
 {
-	const bool supportsES32 = glu::contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2));
+	const bool supportsES32orGL45 = checkES32orGL45Support(m_context);
 
-	if (!supportsES32 && !m_context.getContextInfo().isExtensionSupported("GL_EXT_draw_buffers_indexed"))
+	if (!supportsES32orGL45 && !m_context.getContextInfo().isExtensionSupported("GL_EXT_draw_buffers_indexed"))
 		TCU_THROW(NotSupportedError, "Extension GL_EXT_draw_buffers_indexed not supported");
 }
 
diff --git a/modules/gles31/functional/es31fDrawElementsBaseVertexTests.cpp b/modules/gles31/functional/es31fDrawElementsBaseVertexTests.cpp
index 7b68587..97e648c 100644
--- a/modules/gles31/functional/es31fDrawElementsBaseVertexTests.cpp
+++ b/modules/gles31/functional/es31fDrawElementsBaseVertexTests.cpp
@@ -125,9 +125,9 @@
 		DE_ASSERT(false);
 }
 
-static void genBasicSpec (gls::DrawTestSpec& spec, gls::DrawTestSpec::DrawMethod method)
+static void genBasicSpec (gls::DrawTestSpec& spec, glu::ContextType& contextType, gls::DrawTestSpec::DrawMethod method)
 {
-	spec.apiType							= glu::ApiType::es(3,1);
+	spec.apiType							= glu::isContextTypeES(contextType) ? glu::ApiType::es(3,1) : contextType.getAPI();
 	spec.primitive							= gls::DrawTestSpec::PRIMITIVE_TRIANGLES;
 	spec.primitiveCount						= 5;
 	spec.drawMethod							= method;
@@ -183,6 +183,7 @@
 private:
 	const glw::Functions&			m_gl;
 	glu::ShaderProgram*				m_program;
+	GLuint							m_vao;
 	GLuint							m_coordinatesBuffer;
 	GLuint							m_elementsBuffer;
 	int								m_iterNdx;
@@ -204,6 +205,7 @@
 	: TestCase				(context, "vertex_id", "gl_VertexID Test")
 	, m_gl					(m_context.getRenderContext().getFunctions())
 	, m_program				(DE_NULL)
+	, m_vao					(0)
 	, m_coordinatesBuffer	(0)
 	, m_elementsBuffer		(0)
 	, m_iterNdx				(0)
@@ -218,12 +220,13 @@
 
 void VertexIDCase::init (void)
 {
+	auto ctxType = m_context.getRenderContext().getType();
 	if (m_method == deqp::gls::DrawTestSpec::DRAWMETHOD_DRAWELEMENTS_BASEVERTEX ||
 		m_method == gls::DrawTestSpec::DRAWMETHOD_DRAWELEMENTS_RANGED_BASEVERTEX ||
 		m_method == gls::DrawTestSpec::DRAWMETHOD_DRAWELEMENTS_INSTANCED_BASEVERTEX)
 	{
-		const bool supportsES32 = contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2));
-		TCU_CHECK_AND_THROW(NotSupportedError, supportsES32 || m_context.getContextInfo().isExtensionSupported("GL_EXT_draw_elements_base_vertex"), "GL_EXT_draw_elements_base_vertex is not supported.");
+		const bool supportsES32orGL45 = contextSupports(ctxType, glu::ApiType::es(3, 2)) || contextSupports(ctxType, glu::ApiType::core(4, 5));
+		TCU_CHECK_AND_THROW(NotSupportedError, supportsES32orGL45 || m_context.getContextInfo().isExtensionSupported("GL_EXT_draw_elements_base_vertex"), "GL_EXT_draw_elements_base_vertex is not supported.");
 	}
 
 	m_testCtx.getLog()	<< TestLog::Message
@@ -263,6 +266,9 @@
 
 	GLU_CHECK_GLW_CALL(m_gl, genBuffers(1, &m_coordinatesBuffer));
 	GLU_CHECK_GLW_CALL(m_gl, genBuffers(1, &m_elementsBuffer));
+
+	if (!glu::isContextTypeES(ctxType))
+		GLU_CHECK_GLW_CALL(m_gl, genVertexArrays(1, &m_vao));
 }
 
 void VertexIDCase::deinit (void)
@@ -281,6 +287,12 @@
 		GLU_CHECK_GLW_CALL(m_gl, deleteBuffers(1, &m_coordinatesBuffer));
 		m_coordinatesBuffer = 0;
 	}
+
+	if (m_vao)
+	{
+		GLU_CHECK_GLW_CALL(m_gl, deleteVertexArrays(1, &m_vao));
+		m_vao = 0;
+	}
 }
 
 void VertexIDCase::draw (GLenum mode, GLsizei count, GLenum type, GLvoid* indices, GLint baseVertex)
@@ -406,6 +418,9 @@
 
 	GLU_CHECK_GLW_CALL(m_gl, bindBuffer(GL_ARRAY_BUFFER, m_coordinatesBuffer));
 	GLU_CHECK_GLW_CALL(m_gl, bufferData(GL_ARRAY_BUFFER, (GLsizeiptr)sizeof(coords), coords, GL_STATIC_DRAW));
+
+	if (m_vao)
+		GLU_CHECK_GLW_CALL(m_gl, bindVertexArray(m_vao));
 	GLU_CHECK_GLW_CALL(m_gl, enableVertexAttribArray(coordLocation));
 	GLU_CHECK_GLW_CALL(m_gl, vertexAttribPointer(coordLocation, 2, GL_FLOAT, GL_FALSE, 0, DE_NULL));
 
@@ -496,7 +511,8 @@
 	};
 
 	gls::DrawTestSpec spec;
-	genBasicSpec(spec, m_method);
+	glu::ContextType contextType = m_context.getRenderContext().getType();
+	genBasicSpec(spec, contextType, m_method);
 
 	spec.indexStorage = gls::DrawTestSpec::STORAGE_BUFFER;
 
@@ -563,7 +579,8 @@
 	};
 
 	gls::DrawTestSpec spec;
-	genBasicSpec(spec, m_method);
+	glu::ContextType contextType = m_context.getRenderContext().getType();
+	genBasicSpec(spec, contextType, m_method);
 
 	spec.indexStorage = gls::DrawTestSpec::STORAGE_BUFFER;
 
@@ -628,8 +645,9 @@
 	{
 		gls::DrawTest*		test				= new gls::DrawTest(m_testCtx, m_context.getRenderContext(), "single_attribute", "Single attribute array.");
 		gls::DrawTestSpec	spec;
+		glu::ContextType	contextType			= m_context.getRenderContext().getType();
 
-		spec.apiType							= glu::ApiType::es(3,1);
+		spec.apiType							= glu::isContextTypeES(contextType) ? glu::ApiType::es(3,1) : contextType.getAPI();
 		spec.primitive							= m_primitive;
 		spec.primitiveCount						= 5;
 		spec.drawMethod							= m_method;
@@ -664,8 +682,9 @@
 	{
 		gls::DrawTest*		test				= new gls::DrawTest(m_testCtx, m_context.getRenderContext(), "multiple_attributes", "Multiple attribute arrays.");
 		gls::DrawTestSpec	spec;
+		glu::ContextType	contextType			= m_context.getRenderContext().getType();
 
-		spec.apiType							= glu::ApiType::es(3,1);
+		spec.apiType							= glu::isContextTypeES(contextType) ? glu::ApiType::es(3,1) : contextType.getAPI();
 		spec.primitive							= m_primitive;
 		spec.primitiveCount						= 5;
 		spec.drawMethod							= m_method;
@@ -711,8 +730,9 @@
 	{
 		gls::DrawTest*		test					= new gls::DrawTest(m_testCtx, m_context.getRenderContext(), "instanced_attributes", "Instanced attribute array.");
 		gls::DrawTestSpec	spec;
+		glu::ContextType	contextType				= m_context.getRenderContext().getType();
 
-		spec.apiType								= glu::ApiType::es(3,1);
+		spec.apiType								= glu::isContextTypeES(contextType) ? glu::ApiType::es(3,1) : contextType.getAPI();
 		spec.primitive								= m_primitive;
 		spec.primitiveCount							= 5;
 		spec.drawMethod								= m_method;
@@ -772,8 +792,9 @@
 	{
 		gls::DrawTest*		test				= new gls::DrawTest(m_testCtx, m_context.getRenderContext(), "default_attribute", "Attribute specified with glVertexAttrib*.");
 		gls::DrawTestSpec	spec;
+		glu::ContextType	contextType			= m_context.getRenderContext().getType();
 
-		spec.apiType							= glu::ApiType::es(3,1);
+		spec.apiType							= glu::isContextTypeES(contextType) ? glu::ApiType::es(3,1) : contextType.getAPI();
 		spec.primitive							= m_primitive;
 		spec.primitiveCount						= 5;
 		spec.drawMethod							= m_method;
diff --git a/modules/gles31/functional/es31fDrawTests.cpp b/modules/gles31/functional/es31fDrawTests.cpp
index 4ca39c7..a3bd67f 100644
--- a/modules/gles31/functional/es31fDrawTests.cpp
+++ b/modules/gles31/functional/es31fDrawTests.cpp
@@ -178,9 +178,9 @@
 		DE_ASSERT(false);
 }
 
-static void genBasicSpec (gls::DrawTestSpec& spec, gls::DrawTestSpec::DrawMethod method)
+static void genBasicSpec (gls::DrawTestSpec& spec, glu::ContextType contextType, gls::DrawTestSpec::DrawMethod method)
 {
-	spec.apiType							= glu::ApiType::es(3,1);
+	spec.apiType							= glu::isContextTypeES(contextType) ? glu::ApiType::es(3, 1) : contextType.getAPI();
 	spec.primitive							= gls::DrawTestSpec::PRIMITIVE_TRIANGLES;
 	spec.primitiveCount						= 5;
 	spec.drawMethod							= method;
@@ -260,9 +260,10 @@
 	// Single attribute
 	{
 		gls::DrawTest*		test				= new gls::DrawTest(m_testCtx, m_context.getRenderContext(), "single_attribute", "Single attribute array.");
+		glu::ContextType	contextType			= m_context.getRenderContext().getType();
 		gls::DrawTestSpec	spec;
 
-		spec.apiType							= glu::ApiType::es(3,1);
+		spec.apiType							= glu::isContextTypeES(contextType) ? glu::ApiType::es(3, 1) : contextType.getAPI();
 		spec.primitive							= m_primitive;
 		spec.primitiveCount						= 5;
 		spec.drawMethod							= m_method;
@@ -296,9 +297,10 @@
 	// Multiple attribute
 	{
 		gls::DrawTest*		test				= new gls::DrawTest(m_testCtx, m_context.getRenderContext(), "multiple_attributes", "Multiple attribute arrays.");
+		glu::ContextType	contextType			= m_context.getRenderContext().getType();
 		gls::DrawTestSpec	spec;
 
-		spec.apiType							= glu::ApiType::es(3,1);
+		spec.apiType							= glu::isContextTypeES(contextType) ? glu::ApiType::es(3, 1) : contextType.getAPI();
 		spec.primitive							= m_primitive;
 		spec.primitiveCount						= 5;
 		spec.drawMethod							= m_method;
@@ -343,9 +345,10 @@
 	// Multiple attribute, second one divided
 	{
 		gls::DrawTest*		test					= new gls::DrawTest(m_testCtx, m_context.getRenderContext(), "instanced_attributes", "Instanced attribute array.");
+		glu::ContextType	contextType				= m_context.getRenderContext().getType();
 		gls::DrawTestSpec	spec;
 
-		spec.apiType								= glu::ApiType::es(3,1);
+		spec.apiType								= glu::isContextTypeES(contextType) ? glu::ApiType::es(3, 1) : contextType.getAPI();
 		spec.primitive								= m_primitive;
 		spec.primitiveCount							= 5;
 		spec.drawMethod								= m_method;
@@ -404,9 +407,10 @@
 	// Multiple attribute, second one default
 	{
 		gls::DrawTest*		test				= new gls::DrawTest(m_testCtx, m_context.getRenderContext(), "default_attribute", "Attribute specified with glVertexAttrib*.");
+		glu::ContextType	contextType			= m_context.getRenderContext().getType();
 		gls::DrawTestSpec	spec;
 
-		spec.apiType							= glu::ApiType::es(3,1);
+		spec.apiType							= glu::isContextTypeES(contextType) ? glu::ApiType::es(3, 1) : contextType.getAPI();
 		spec.primitive							= m_primitive;
 		spec.primitiveCount						= 5;
 		spec.drawMethod							= m_method;
@@ -505,7 +509,7 @@
 	};
 
 	gls::DrawTestSpec spec;
-	genBasicSpec(spec, m_method);
+	genBasicSpec(spec, m_context.getRenderContext().getType(), m_method);
 
 	spec.indexStorage = gls::DrawTestSpec::STORAGE_BUFFER;
 
@@ -572,7 +576,7 @@
 	};
 
 	gls::DrawTestSpec spec;
-	genBasicSpec(spec, m_method);
+	genBasicSpec(spec, m_context.getRenderContext().getType(), m_method);
 
 	spec.indexStorage = gls::DrawTestSpec::STORAGE_BUFFER;
 
@@ -627,7 +631,7 @@
 	};
 
 	gls::DrawTestSpec spec;
-	genBasicSpec(spec, m_method);
+	genBasicSpec(spec, m_context.getRenderContext().getType(), m_method);
 
 	for (int firstNdx = 0; firstNdx < DE_LENGTH_OF_ARRAY(firsts); ++firstNdx)
 	{
@@ -2139,6 +2143,8 @@
 
 	std::set<deUint32>	insertedHashes;
 	size_t				insertedCount = 0;
+	glu::ContextType	contextType = m_context.getRenderContext().getType();
+	glu::ApiType		apiType = glu::isContextTypeES(contextType) ? glu::ApiType::es(3,1) : contextType.getAPI();
 
 	for (int ndx = 0; ndx < numAttempts; ++ndx)
 	{
@@ -2148,7 +2154,7 @@
 		int					drawCommandSize;
 		gls::DrawTestSpec	spec;
 
-		spec.apiType				= glu::ApiType::es(3,1);
+		spec.apiType				= apiType;
 		spec.primitive				= random.chooseWeighted<gls::DrawTestSpec::Primitive>	(DE_ARRAY_BEGIN(primitives),		DE_ARRAY_END(primitives),		primitiveWeights.weights);
 		spec.primitiveCount			= random.chooseWeighted<int, const int*, const float*>	(DE_ARRAY_BEGIN(primitiveCounts),	DE_ARRAY_END(primitiveCounts),	primitiveCountWeights);
 		spec.drawMethod				= random.chooseWeighted<gls::DrawTestSpec::DrawMethod>	(DE_ARRAY_BEGIN(drawMethods),		DE_ARRAY_END(drawMethods),		drawMethodWeights.weights);
@@ -2449,6 +2455,14 @@
 
 void BadStateCase::init (void)
 {
+	if (!glu::isContextTypeES(m_context.getRenderContext().getType()))
+	{
+		if (m_caseType == CASE_CLIENT_BUFFER_VERTEXATTR)
+			throw tcu::NotSupportedError("The negative test for vertex attrib array in the client memory is not supported in the GL context");
+		if (m_caseType == CASE_DEFAULT_VAO)
+			throw tcu::NotSupportedError("The negative test for use with default vao is not supported in the GL context");
+	}
+
 }
 
 void BadStateCase::deinit (void)
diff --git a/modules/gles31/functional/es31fFboColorbufferTests.cpp b/modules/gles31/functional/es31fFboColorbufferTests.cpp
index 2aa857d..5da82a9 100644
--- a/modules/gles31/functional/es31fFboColorbufferTests.cpp
+++ b/modules/gles31/functional/es31fFboColorbufferTests.cpp
@@ -209,7 +209,10 @@
 protected:
 	void preCheck (void)
 	{
-		if (!glu::contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2)) && !m_context.getContextInfo().isExtensionSupported("GL_EXT_texture_cube_map_array"))
+		auto ctxType = m_context.getRenderContext().getType();
+		if (!glu::contextSupports(ctxType, glu::ApiType::core(4, 5)) &&
+			!glu::contextSupports(ctxType, glu::ApiType::es(3, 2)) &&
+			!m_context.getContextInfo().isExtensionSupported("GL_EXT_texture_cube_map_array"))
 			TCU_THROW(NotSupportedError, "Test requires extension GL_EXT_texture_cube_map_array or a context version equal or higher than 3.2");
 
 		checkFormatSupport(m_format);
diff --git a/modules/gles31/functional/es31fFboSRGBWriteControlTests.cpp b/modules/gles31/functional/es31fFboSRGBWriteControlTests.cpp
index 2a84ca6..d94fb83 100644
--- a/modules/gles31/functional/es31fFboSRGBWriteControlTests.cpp
+++ b/modules/gles31/functional/es31fFboSRGBWriteControlTests.cpp
@@ -1353,15 +1353,18 @@
 
 void FboSRGBTestCase::init (void)
 {
-	// extensions requirements for test
-	if (!glu::contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2)))
-		TCU_THROW(NotSupportedError, "Test requires a context version equal or higher than 3.2");
+	if (glu::isContextTypeES(m_context.getRenderContext().getType()))
+	{
+		// extensions requirements for test
+		if (!glu::contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2)))
+			TCU_THROW(NotSupportedError, "Test requires a context version equal or higher than 3.2");
 
-	if (!m_context.getContextInfo().isExtensionSupported("GL_EXT_sRGB_write_control"))
-		TCU_THROW(NotSupportedError, "Test requires extension GL_EXT_sRGB_write_control");
+		if (!m_context.getContextInfo().isExtensionSupported("GL_EXT_sRGB_write_control"))
+			TCU_THROW(NotSupportedError, "Test requires extension GL_EXT_sRGB_write_control");
 
-	if (!m_context.getContextInfo().isExtensionSupported("GL_EXT_texture_sRGB_decode"))
-		TCU_THROW(NotSupportedError, "Test requires GL_EXT_texture_sRGB_decode extension");
+		if (!m_context.getContextInfo().isExtensionSupported("GL_EXT_texture_sRGB_decode"))
+			TCU_THROW(NotSupportedError, "Test requires GL_EXT_texture_sRGB_decode extension");
+	}
 }
 
 void FboSRGBTestCase::deinit (void)
@@ -1770,6 +1773,9 @@
 
 void FboSRGBUnsupportedEnumCase::init (void)
 {
+	if(!glu::isContextTypeES(m_context.getRenderContext().getType()))
+		TCU_THROW(NotSupportedError, "The test is not supported in a non-GLES context");
+
 	// extension requirements for test
 	if (m_context.getContextInfo().isExtensionSupported("GL_EXT_sRGB_write_control"))
 		TCU_THROW(NotSupportedError, "Test requires extension GL_EXT_sRGB_write_control to be unsupported");
diff --git a/modules/gles31/functional/es31fFboTestCase.cpp b/modules/gles31/functional/es31fFboTestCase.cpp
index eef9b96..000bea5 100644
--- a/modules/gles31/functional/es31fFboTestCase.cpp
+++ b/modules/gles31/functional/es31fFboTestCase.cpp
@@ -155,6 +155,7 @@
 static bool isRequiredFormat (deUint32 format, glu::RenderContext& renderContext)
 {
 	const bool supportsES32 = glu::contextSupports(renderContext.getType(), glu::ApiType::es(3, 2));
+	const bool supportsGL45 = glu::contextSupports(renderContext.getType(), glu::ApiType::core(4, 5));
 	switch (format)
 	{
 		// Color-renderable formats
@@ -211,7 +212,9 @@
 		case GL_RGBA16F:
 		case GL_RG16F:
 		case GL_R16F:
-			return supportsES32;
+			return supportsES32 || supportsGL45;
+		case GL_RGB16F:
+			return supportsGL45;
 
 		default:
 			return false;
diff --git a/modules/gles31/functional/es31fFboTestUtil.cpp b/modules/gles31/functional/es31fFboTestUtil.cpp
index c6173ce..14cff7f 100644
--- a/modules/gles31/functional/es31fFboTestUtil.cpp
+++ b/modules/gles31/functional/es31fFboTestUtil.cpp
@@ -309,7 +309,7 @@
 	, m_layer		(0)
 	, m_outputType	(outputType)
 {
-	TCU_CHECK_INTERNAL(glslVersion == glu::GLSL_VERSION_310_ES || glslVersion == glu::GLSL_VERSION_320_ES);
+	TCU_CHECK_INTERNAL(glslVersion == glu::GLSL_VERSION_310_ES || glslVersion == glu::GLSL_VERSION_320_ES || glslVersion == glu::GLSL_VERSION_450);
 }
 
 void TextureCubeArrayShader::setLayer (int layer)
diff --git a/modules/gles31/functional/es31fFunctionalTests.cpp b/modules/gles31/functional/es31fFunctionalTests.cpp
index d2d6aa4..50f894d 100644
--- a/modules/gles31/functional/es31fFunctionalTests.cpp
+++ b/modules/gles31/functional/es31fFunctionalTests.cpp
@@ -397,16 +397,16 @@
 	}
 };
 
-FunctionalTests::FunctionalTests (Context& context)
+GLES31FunctionalTests::GLES31FunctionalTests (Context& context)
 	: TestCaseGroup(context, "functional", "Functionality Tests")
 {
 }
 
-FunctionalTests::~FunctionalTests (void)
+GLES31FunctionalTests::~GLES31FunctionalTests (void)
 {
 }
 
-void FunctionalTests::init (void)
+void GLES31FunctionalTests::init (void)
 {
 	addChild(new ShaderTests							(m_context));
 	addChild(new ComputeTests							(m_context));
@@ -426,12 +426,12 @@
 	addChild(new VertexAttributeBindingTests			(m_context));
 	addChild(new ProgramUniformTests					(m_context));
 	addChild(new AdvancedBlendTests						(m_context));
-	addChild(createSeparateShaderTests					(m_context));
+	addChild(createGLESSeparateShaderTests				(m_context));
 	addChild(new UniformLocationTests					(m_context));
 	addChild(new TessellationGeometryInteractionTests	(m_context));
 	addChild(new DebugTests								(m_context));
 	addChild(new FboTests								(m_context));
-	addChild(new ProgramInterfaceQueryTests				(m_context));
+	addChild(new ProgramInterfaceQueryTests				(m_context, false));
 	addChild(new LayoutBindingTests						(m_context));
 	addChild(new PrimitiveBoundingBoxTests				(m_context));
 	addChild(new AndroidExtensionPackES31ATests			(m_context));
@@ -442,6 +442,49 @@
 	addChild(new DrawElementsBaseVertexTests			(m_context));
 }
 
+GL45FunctionalTests::GL45FunctionalTests (Context& context)
+	: TestCaseGroup(context, "functional", "Functionality Tests")
+{
+}
+
+GL45FunctionalTests::~GL45FunctionalTests (void)
+{
+}
+
+void GL45FunctionalTests::init (void)
+{
+	addChild(new ShaderTests							(m_context));
+	addChild(new ComputeTests							(m_context));
+	addChild(new DrawTests								(m_context));
+	addChild(new TessellationTests						(m_context));
+	addChild(new SSBOTests								(m_context));
+	addChild(new UniformBlockTests						(m_context));
+	addChild(new ShaderImageLoadStoreTests				(m_context));
+	addChild(new AtomicCounterTests						(m_context));
+	addChild(new StencilTexturingTests					(m_context));
+	addChild(new TextureTests							(m_context));
+	addChild(new StateQueryTests						(m_context));
+	addChild(new MultisampleTests						(m_context));
+	addChild(new SynchronizationTests					(m_context));
+	addChild(new GeometryShaderTests					(m_context));
+	addChild(new SampleShadingTests						(m_context));
+	addChild(new VertexAttributeBindingTests			(m_context));
+	addChild(new ProgramUniformTests					(m_context));
+	addChild(new AdvancedBlendTests						(m_context));
+	addChild(createCommonSeparateShaderTests			(m_context));
+	addChild(new UniformLocationTests					(m_context));
+	addChild(new TessellationGeometryInteractionTests	(m_context));
+	addChild(new DebugTests								(m_context));
+	addChild(new FboTests								(m_context));
+	addChild(new ProgramInterfaceQueryTests				(m_context, true));
+	addChild(new LayoutBindingTests						(m_context));
+	addChild(new PrimitiveBoundingBoxTests				(m_context));
+	addChild(createCopyImageTests						(m_context));
+	addChild(createDrawBuffersIndexedTests				(m_context));
+	addChild(new SRGBTextureDecodeTests					(m_context));
+	addChild(new DrawElementsBaseVertexTests			(m_context));
+}
+
 } // Functional
 } // gles31
 } // deqp
diff --git a/modules/gles31/functional/es31fFunctionalTests.hpp b/modules/gles31/functional/es31fFunctionalTests.hpp
index aa6562b..49860e4 100644
--- a/modules/gles31/functional/es31fFunctionalTests.hpp
+++ b/modules/gles31/functional/es31fFunctionalTests.hpp
@@ -33,17 +33,30 @@
 namespace Functional
 {
 
-class FunctionalTests : public TestCaseGroup
+class GLES31FunctionalTests : public TestCaseGroup
 {
 public:
-						FunctionalTests		(Context& context);
-						~FunctionalTests	(void);
+							GLES31FunctionalTests	(Context& context);
+							~GLES31FunctionalTests	(void);
 
-	void				init				(void);
+	void					init					(void);
 
 private:
-						FunctionalTests		(const FunctionalTests& other);
-	FunctionalTests&	operator=			(const FunctionalTests& other);
+							GLES31FunctionalTests	(const GLES31FunctionalTests& other);
+	GLES31FunctionalTests&	operator=				(const GLES31FunctionalTests& other);
+};
+
+class GL45FunctionalTests : public TestCaseGroup
+{
+public:
+							GL45FunctionalTests		(Context& context);
+							~GL45FunctionalTests	(void);
+
+	void					init					(void);
+
+private:
+							GL45FunctionalTests		(const GL45FunctionalTests& other);
+	GL45FunctionalTests&	operator=				(const GL45FunctionalTests& other);
 };
 
 } // Functional
diff --git a/modules/gles31/functional/es31fIndexedStateQueryTests.cpp b/modules/gles31/functional/es31fIndexedStateQueryTests.cpp
index e3c8b41..595b6f8 100644
--- a/modules/gles31/functional/es31fIndexedStateQueryTests.cpp
+++ b/modules/gles31/functional/es31fIndexedStateQueryTests.cpp
@@ -65,6 +65,9 @@
 
 void isExtensionSupported (Context& context, std::string extensionName)
 {
+	if (contextSupports(context.getRenderContext().getType(), glu::ApiType::core(4, 5)))
+		return;
+
 	if (extensionName == "GL_EXT_draw_buffers_indexed" || extensionName == "GL_KHR_blend_equation_advanced")
 	{
 		if (!contextSupports(context.getRenderContext().getType(), glu::ApiType::es(3, 2)) && !context.getContextInfo().isExtensionSupported(extensionName.c_str()))
diff --git a/modules/gles31/functional/es31fIntegerStateQueryTests.cpp b/modules/gles31/functional/es31fIntegerStateQueryTests.cpp
index 461ef4d..662142f 100644
--- a/modules/gles31/functional/es31fIntegerStateQueryTests.cpp
+++ b/modules/gles31/functional/es31fIntegerStateQueryTests.cpp
@@ -119,7 +119,9 @@
 
 void TexBindingCase::init (void)
 {
-	if (contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2)))
+	auto ctxType = m_context.getRenderContext().getType();
+	if (contextSupports(ctxType, glu::ApiType::es(3, 2)) ||
+		contextSupports(ctxType, glu::ApiType::core(4, 5)))
 		return;
 
 	if (m_texTarget == GL_TEXTURE_2D_MULTISAMPLE_ARRAY && !m_context.getContextInfo().isExtensionSupported("GL_OES_texture_storage_multisample_2d_array"))
@@ -204,7 +206,8 @@
 
 MinimumValueCase::IterateResult MinimumValueCase::iterate (void)
 {
-	TCU_CHECK_AND_THROW(NotSupportedError, contextSupports(m_context.getRenderContext().getType(), m_minimumVersion), "Test not supported in this context version.");
+	if (!contextSupports(m_context.getRenderContext().getType(), glu::ApiType::core(4, 5)))
+		TCU_CHECK_AND_THROW(NotSupportedError, contextSupports(m_context.getRenderContext().getType(), m_minimumVersion), "Test not supported in this context version.");
 
 	glu::CallLogWrapper		gl		(m_context.getRenderContext().getFunctions(), m_testCtx.getLog());
 	tcu::ResultCollector	result	(m_testCtx.getLog(), " // ERROR: ");
@@ -258,7 +261,8 @@
 
 AlignmentCase::IterateResult AlignmentCase::iterate (void)
 {
-	TCU_CHECK_AND_THROW(NotSupportedError, contextSupports(m_context.getRenderContext().getType(), m_minimumVersion), "Test not supported in this context.");
+	if (!contextSupports(m_context.getRenderContext().getType(), glu::ApiType::core(4, 5)))
+		TCU_CHECK_AND_THROW(NotSupportedError, contextSupports(m_context.getRenderContext().getType(), m_minimumVersion), "Test not supported in this context.");
 
 	glu::CallLogWrapper		gl		(m_context.getRenderContext().getFunctions(), m_testCtx.getLog());
 	tcu::ResultCollector	result	(m_testCtx.getLog(), " // ERROR: ");
@@ -508,7 +512,8 @@
 
 CombinedUniformComponentsCase::IterateResult CombinedUniformComponentsCase::iterate (void)
 {
-	TCU_CHECK_AND_THROW(NotSupportedError, contextSupports(m_context.getRenderContext().getType(), m_minimumVersion), "Test not supported in this context.");
+	if (!contextSupports(m_context.getRenderContext().getType(), glu::ApiType::core(4, 5)))
+		TCU_CHECK_AND_THROW(NotSupportedError, contextSupports(m_context.getRenderContext().getType(), m_minimumVersion), "Test not supported in this context.");
 
 	glu::CallLogWrapper		gl							(m_context.getRenderContext().getFunctions(), m_testCtx.getLog());
 	tcu::ResultCollector	result						(m_testCtx.getLog(), " // ERROR: ");
diff --git a/modules/gles31/functional/es31fInternalFormatQueryTests.cpp b/modules/gles31/functional/es31fInternalFormatQueryTests.cpp
index af2dfce..7c2597a 100644
--- a/modules/gles31/functional/es31fInternalFormatQueryTests.cpp
+++ b/modules/gles31/functional/es31fInternalFormatQueryTests.cpp
@@ -71,15 +71,17 @@
 
 void FormatSamplesCase::init (void)
 {
-	const bool isTextureTarget	=	(m_target == GL_TEXTURE_2D_MULTISAMPLE) ||
+	const bool	isTextureTarget	=	(m_target == GL_TEXTURE_2D_MULTISAMPLE) ||
 									(m_target == GL_TEXTURE_2D_MULTISAMPLE_ARRAY);
-	const bool supportsES32		=	contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2));
+	auto		ctxType			= m_context.getRenderContext().getType();
+	const bool	isES32orGL45	= glu::contextSupports(ctxType, glu::ApiType::es(3, 2)) ||
+								  glu::contextSupports(ctxType, glu::ApiType::core(4, 5));
 
-	if (!supportsES32 && m_target == GL_TEXTURE_2D_MULTISAMPLE_ARRAY && !m_context.getContextInfo().isExtensionSupported("GL_OES_texture_storage_multisample_2d_array"))
+	if (!isES32orGL45 && m_target == GL_TEXTURE_2D_MULTISAMPLE_ARRAY && !m_context.getContextInfo().isExtensionSupported("GL_OES_texture_storage_multisample_2d_array"))
 		TCU_THROW(NotSupportedError, "Test requires OES_texture_storage_multisample_2d_array extension or a context version equal or higher than 3.2");
 
 	// stencil8 textures are not supported without GL_OES_texture_stencil8 extension
-	if (!supportsES32 && isTextureTarget && m_internalFormat == GL_STENCIL_INDEX8 && !m_context.getContextInfo().isExtensionSupported("GL_OES_texture_stencil8"))
+	if (!isES32orGL45 && isTextureTarget && m_internalFormat == GL_STENCIL_INDEX8 && !m_context.getContextInfo().isExtensionSupported("GL_OES_texture_stencil8"))
 		TCU_THROW(NotSupportedError, "Test requires GL_OES_texture_stencil8 extension or a context version equal or higher than 3.2");
 }
 
@@ -90,9 +92,11 @@
 	bool					error			= false;
 	glw::GLint				maxSamples		= 0;
 	glw::GLint				numSampleCounts	= 0;
-	const bool				supportsES32			= contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2));
+	auto					ctxType			= m_context.getRenderContext().getType();
+	const bool				isES32orGL45	= glu::contextSupports(ctxType, glu::ApiType::es(3, 2)) ||
+											  glu::contextSupports(ctxType, glu::ApiType::core(4, 5));
 
-	if (!supportsES32)
+	if (!isES32orGL45)
 	{
 		if (m_internalFormat == GL_RGBA16F || m_internalFormat == GL_R32F || m_internalFormat == GL_RG32F || m_internalFormat == GL_RGBA32F || m_internalFormat == GL_R16F || m_internalFormat == GL_RG16F || m_internalFormat == GL_R11F_G11F_B10F)
 		{
diff --git a/modules/gles31/functional/es31fLayoutBindingTests.cpp b/modules/gles31/functional/es31fLayoutBindingTests.cpp
index bcb8fd9..e892c1a 100644
--- a/modules/gles31/functional/es31fLayoutBindingTests.cpp
+++ b/modules/gles31/functional/es31fLayoutBindingTests.cpp
@@ -337,6 +337,7 @@
 	const glw::GLenum					m_maxFragmentUnitsEnum;
 	const glw::GLenum					m_maxCombinedUnitsEnum;
 
+	glw::GLuint							m_vao;
 	glw::GLuint							m_vertexBuffer;
 	glw::GLuint							m_indexBuffer;
 	glw::GLint							m_shaderProgramLoc;
@@ -369,6 +370,7 @@
 	, m_maxVertexUnitsEnum			(maxVertexUnitsEnum)
 	, m_maxFragmentUnitsEnum		(maxFragmentUnitsEnum)
 	, m_maxCombinedUnitsEnum		(maxCombinedUnitsEnum)
+	, m_vao							(0)
 	, m_vertexBuffer				(0)
 	, m_indexBuffer					(0)
 	, m_shaderProgramLoc			(0)
@@ -502,6 +504,13 @@
 
 		TCU_CHECK((m_shaderProgramPosLoc >= 0) && (m_shaderProgramArrayNdxLoc >= 0));
 
+		// Generate and bind vao
+		if (!glu::isContextTypeES(m_context.getRenderContext().getType()))
+		{
+			gl.genVertexArrays(1, &m_vao);
+			gl.bindVertexArray(m_vao);
+		}
+
 		// Generate and bind index buffer
 		gl.genBuffers(1, &m_indexBuffer);
 		gl.bindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_indexBuffer);
@@ -529,6 +538,9 @@
 	if (m_shaderProgramPosLoc)
 		m_context.getRenderContext().getFunctions().disableVertexAttribArray(m_shaderProgramPosLoc);
 
+	if (m_vao)
+		m_context.getRenderContext().getFunctions().deleteVertexArrays(1, &m_vao);
+
 	if (m_vertexBuffer)
 	{
 		m_context.getRenderContext().getFunctions().deleteBuffers(1, &m_vertexBuffer);
@@ -771,7 +783,8 @@
 	glw::GLint				maxUnits			= 0;	// Maximum available uniforms for this test
 
 	m_tessSupport = m_context.getContextInfo().isExtensionSupported("GL_EXT_tessellation_shader")
-					|| contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2));
+					|| contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2))
+					|| contextSupports(m_context.getRenderContext().getType(), glu::ApiType::core(4, 5));
 
 	if (!m_tessSupport && (m_shaderType == SHADERTYPE_TESS_EVALUATION || m_shaderType == SHADERTYPE_TESS_CONTROL))
 		TCU_THROW(NotSupportedError, "Tesselation shaders not supported");
diff --git a/modules/gles31/functional/es31fMultisampleShaderRenderCase.cpp b/modules/gles31/functional/es31fMultisampleShaderRenderCase.cpp
index e8a31cd..97a0d04 100644
--- a/modules/gles31/functional/es31fMultisampleShaderRenderCase.cpp
+++ b/modules/gles31/functional/es31fMultisampleShaderRenderCase.cpp
@@ -26,6 +26,7 @@
 #include "tcuSurface.hpp"
 #include "tcuTestLog.hpp"
 #include "tcuStringTemplate.hpp"
+#include "gluContextInfo.hpp"
 #include "gluShaderProgram.hpp"
 #include "gluRenderContext.hpp"
 #include "gluPixelTransfer.hpp"
@@ -116,9 +117,7 @@
 
 		case TARGET_TEXTURE:
 		{
-			deInt32 maxTextureSamples = 0;
-			gl.getInternalformativ(GL_TEXTURE_2D_MULTISAMPLE, GL_RGBA8, GL_SAMPLES, 1, &maxTextureSamples);
-
+			deInt32 maxTextureSamples = getMaxConformantSampleCount(GL_TEXTURE_2D_MULTISAMPLE, GL_RGBA8);
 			if (m_numRequestedSamples > maxTextureSamples)
 				throw tcu::NotSupportedError("Sample count not supported");
 			break;
@@ -126,9 +125,7 @@
 
 		case TARGET_RENDERBUFFER:
 		{
-			deInt32 maxRboSamples = 0;
-			gl.getInternalformativ(GL_RENDERBUFFER, GL_RGBA8, GL_SAMPLES, 1, &maxRboSamples);
-
+			deInt32 maxRboSamples = getMaxConformantSampleCount(GL_RENDERBUFFER, GL_RGBA8);
 			if (m_numRequestedSamples > maxRboSamples)
 				throw tcu::NotSupportedError("Sample count not supported");
 			break;
@@ -783,6 +780,46 @@
 	gl.bufferData(GL_ARRAY_BUFFER, (int)sizeof(fullscreenQuad), fullscreenQuad, GL_STATIC_DRAW);
 }
 
+glw::GLint MultisampleRenderCase::getMaxConformantSampleCount(glw::GLenum target, glw::GLenum internalFormat)
+{
+	deInt32					maxTextureSamples	= 0;
+	const glw::Functions&	gl					= m_context.getRenderContext().getFunctions();
+
+	if (m_context.getContextInfo().isExtensionSupported("GL_NV_internalformat_sample_query"))
+	{
+		glw::GLint gl_sample_counts = 0;
+		gl.getInternalformativ(target, internalFormat, GL_NUM_SAMPLE_COUNTS, 1, &gl_sample_counts);
+		GLU_EXPECT_NO_ERROR(gl.getError(), "glGetInternalformativ() failed for GL_NUM_SAMPLE_COUNTS pname");
+
+		/* Check and return the first conformant sample count */
+		glw::GLint* gl_supported_samples = new glw::GLint[gl_sample_counts];
+		if (gl_supported_samples)
+		{
+			gl.getInternalformativ(target, internalFormat, GL_SAMPLES, gl_sample_counts, gl_supported_samples);
+
+			for (glw::GLint i = 0; i < gl_sample_counts; i++)
+			{
+				glw::GLint isConformant = 0;
+				gl.getInternalformatSampleivNV(target, internalFormat, gl_supported_samples[i], GL_CONFORMANT_NV, 1,
+					&isConformant);
+				GLU_EXPECT_NO_ERROR(gl.getError(), "glGetInternalformatSampleivNV() call(s) failed");
+
+				if (isConformant && gl_supported_samples[i] > maxTextureSamples)
+				{
+					maxTextureSamples = gl_supported_samples[i];
+				}
+			}
+			delete[] gl_supported_samples;
+		}
+	}
+	else
+	{
+		gl.getInternalformativ(target, internalFormat, GL_SAMPLES, 1, &maxTextureSamples);
+	}
+
+	return maxTextureSamples;
+}
+
 } // MultisampleShaderRenderUtil
 } // Functional
 } // gles31
diff --git a/modules/gles31/functional/es31fMultisampleShaderRenderCase.hpp b/modules/gles31/functional/es31fMultisampleShaderRenderCase.hpp
index fab77f6..84ae5ef 100644
--- a/modules/gles31/functional/es31fMultisampleShaderRenderCase.hpp
+++ b/modules/gles31/functional/es31fMultisampleShaderRenderCase.hpp
@@ -97,6 +97,8 @@
 	virtual bool		verifySampleBuffers				(const std::vector<tcu::Surface>& resultBuffers);
 	virtual void		setupRenderData					(void);
 
+	glw::GLint			getMaxConformantSampleCount		(glw::GLenum target, glw::GLenum internalFormat);
+
 protected:
 	struct Attrib
 	{
diff --git a/modules/gles31/functional/es31fNegativeAdvancedBlendEquationTests.cpp b/modules/gles31/functional/es31fNegativeAdvancedBlendEquationTests.cpp
index 2d28dba..e14c9d4 100644
--- a/modules/gles31/functional/es31fNegativeAdvancedBlendEquationTests.cpp
+++ b/modules/gles31/functional/es31fNegativeAdvancedBlendEquationTests.cpp
@@ -175,6 +175,14 @@
 		ctx.isExtensionSupported("GL_KHR_blend_equation_advanced") || contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)),
 		"This test requires support for the extension GL_KHR_blend_equation_advanced or context version 3.2 or higher.");
 
+	glw::GLuint vao = 0;
+	bool isES = glu::isContextTypeES(ctx.getRenderContext().getType());
+	if (!isES)
+	{
+		ctx.glGenVertexArrays(1, &vao);
+		ctx.glBindVertexArray(vao);
+	}
+
 	ctx.beginSection("GL_INVALID_OPERATION is generated if blending is enabled, and the blend qualifier is different from blend_support_all_equations and does not match the blend equation.");
 	for (int ndx = 0; ndx < DE_LENGTH_OF_ARRAY(s_equations); ++ndx)
 	{
@@ -203,6 +211,9 @@
 		}
 	}
 	ctx.endSection();
+
+	if (!isES)
+		ctx.glDeleteVertexArrays(1, &vao);
 }
 
 void attachment_advanced_equation (NegativeTestContext& ctx)
@@ -211,9 +222,17 @@
 		ctx.isExtensionSupported("GL_KHR_blend_equation_advanced") || contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)),
 		"This test requires support for the extension GL_KHR_blend_equation_advanced or context version 3.2 or higher.");
 
+	glw::GLuint			vao				= 0;
 	glw::GLuint			fbo				= 0x1234;
 	glw::GLuint			texture			= 0x1234;
 	const glw::GLenum	attachments[]	= { GL_COLOR_ATTACHMENT0, GL_COLOR_ATTACHMENT1 };
+	const bool			isES			= glu::isContextTypeES(ctx.getRenderContext().getType());
+
+	if (!isES)
+	{
+		ctx.glGenVertexArrays(1, &vao);
+		ctx.glBindVertexArray(vao);
+	}
 
 	ctx.glGenTextures(1, &texture);
 	ctx.glBindTexture(GL_TEXTURE_2D, texture);
@@ -260,6 +279,9 @@
 	}
 	ctx.endSection();
 
+	if (!isES)
+		ctx.glDeleteVertexArrays(1, &vao);
+
 	ctx.glDeleteFramebuffers(1, &fbo);
 	ctx.glDeleteTextures(1, &texture);
 }
diff --git a/modules/gles31/functional/es31fNegativeBufferApiTests.cpp b/modules/gles31/functional/es31fNegativeBufferApiTests.cpp
index 23394ba..bb8a2b2 100644
--- a/modules/gles31/functional/es31fNegativeBufferApiTests.cpp
+++ b/modules/gles31/functional/es31fNegativeBufferApiTests.cpp
@@ -169,7 +169,7 @@
 	std::vector<GLubyte>	ubyteData	(4);
 	GLuint					fbo			= 0x1234;
 
-	ctx.beginSection("GL_INVALID_OPERATION is generated if the combination of format and type is unsupported.");
+	ctx.beginSection("Unsupported combinations of format and type will generate an GL_INVALID_OPERATION error.");
 	ctx.glReadPixels(0, 0, 1, 1, GL_LUMINANCE_ALPHA, GL_UNSIGNED_SHORT_4_4_4_4, &ubyteData[0]);
 	ctx.expectError(GL_INVALID_OPERATION);
 	ctx.endSection();
@@ -201,14 +201,15 @@
 	GLuint					fbo			= 0x1234;
 
 	if (!contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2))
+		&& !contextSupports(ctx.getRenderContext().getType(), glu::ApiType::core(4, 5))
 		&& !ctx.isExtensionSupported("GL_KHR_robustness")
 		&& !ctx.isExtensionSupported("GL_EXT_robustness"))
 	{
 		TCU_THROW(NotSupportedError, "GLES 3.2 or robustness extension not supported");
 	}
 
-	ctx.beginSection("GL_INVALID_OPERATION is generated if the combination of format and type is unsupported.");
-	ctx.glReadnPixels(0, 0, 1, 1, GL_LUMINANCE_ALPHA, GL_UNSIGNED_SHORT_4_4_4_4, (int) ubyteData.size(), &ubyteData[0]);
+	ctx.beginSection("Unsupported combinations of format and type will generate an GL_INVALID_OPERATION error.");
+	ctx.glReadnPixels(0, 0, 1, 1, GL_LUMINANCE_ALPHA, GL_UNSIGNED_SHORT_4_4_4_4, (int)ubyteData.size(), &ubyteData[0]);
 	ctx.expectError(GL_INVALID_OPERATION);
 	ctx.endSection();
 
@@ -246,21 +247,25 @@
 	GLint					readFormat	= 0x1234;
 	GLint					readType	= 0x1234;
 
+
 	ctx.beginSection("Unsupported combinations of format and type will generate an GL_INVALID_OPERATION error.");
-	ctx.glReadPixels(0, 0, 1, 1, GL_RGBA, GL_UNSIGNED_SHORT_5_6_5, &ushortData[0]);
-	ctx.expectError(GL_INVALID_OPERATION);
 	ctx.glReadPixels(0, 0, 1, 1, GL_ALPHA, GL_UNSIGNED_SHORT_5_6_5, &ushortData[0]);
 	ctx.expectError(GL_INVALID_OPERATION);
-	ctx.glReadPixels(0, 0, 1, 1, GL_RGB, GL_UNSIGNED_SHORT_4_4_4_4, &ushortData[0]);
-	ctx.expectError(GL_INVALID_OPERATION);
 	ctx.glReadPixels(0, 0, 1, 1, GL_ALPHA, GL_UNSIGNED_SHORT_4_4_4_4, &ushortData[0]);
 	ctx.expectError(GL_INVALID_OPERATION);
-	ctx.glReadPixels(0, 0, 1, 1, GL_RGB, GL_UNSIGNED_SHORT_5_5_5_1, &ushortData[0]);
-	ctx.expectError(GL_INVALID_OPERATION);
 	ctx.glReadPixels(0, 0, 1, 1, GL_ALPHA, GL_UNSIGNED_SHORT_5_5_5_1, &ushortData[0]);
 	ctx.expectError(GL_INVALID_OPERATION);
 	ctx.endSection();
 
+	ctx.beginSection("Unsupported combinations of format and type will generate an GL_INVALID_OPERATION error.");
+	ctx.glReadPixels(0, 0, 1, 1, GL_RGBA, GL_UNSIGNED_SHORT_5_6_5, &ushortData[0]);
+	ctx.expectError(GL_INVALID_OPERATION);
+	ctx.glReadPixels(0, 0, 1, 1, GL_RGB, GL_UNSIGNED_SHORT_4_4_4_4, &ushortData[0]);
+	ctx.expectError(GL_INVALID_OPERATION);
+	ctx.glReadPixels(0, 0, 1, 1, GL_RGB, GL_UNSIGNED_SHORT_5_5_5_1, &ushortData[0]);
+	ctx.expectError(GL_INVALID_OPERATION);
+	ctx.endSection();
+
 	ctx.beginSection("GL_RGBA/GL_UNSIGNED_BYTE is always accepted and the other acceptable pair can be discovered by querying GL_IMPLEMENTATION_COLOR_READ_FORMAT and GL_IMPLEMENTATION_COLOR_READ_TYPE.");
 	ctx.glReadPixels(0, 0, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, &ubyteData[0]);
 	ctx.expectError(GL_NO_ERROR);
@@ -277,6 +282,7 @@
 	std::vector<float>		floatData(4);
 	deUint32				fbo = 0x1234;
 	deUint32				texture = 0x1234;
+	bool					isES = glu::isContextTypeES(ctx.getRenderContext().getType());
 
 	ctx.glGenTextures			(1, &texture);
 	ctx.glBindTexture			(GL_TEXTURE_2D, texture);
@@ -293,7 +299,7 @@
 	ctx.glCheckFramebufferStatus(GL_FRAMEBUFFER);
 	ctx.expectError				(GL_NO_ERROR);
 	ctx.glReadPixels			(0, 0, 1, 1, GL_RGBA, GL_FLOAT, &floatData[0]);
-	ctx.expectError				(GL_INVALID_OPERATION);
+	ctx.expectError				(isES ? GL_INVALID_OPERATION : GL_NO_ERROR);
 
 	ctx.glTexImage2D			(GL_TEXTURE_2D, 0, GL_RGBA32I, 32, 32, 0, GL_RGBA_INTEGER, GL_INT, NULL);
 	ctx.glFramebufferTexture2D	(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture, 0);
@@ -759,6 +765,7 @@
 	std::vector<deUint32>	values					(maxDrawBuffers+1);
 	std::vector<deUint32>	attachments				(4);
 	std::vector<GLfloat>	data					(32*32);
+	bool					isES					= glu::isContextTypeES(ctx.getRenderContext().getType());
 	values[0]				= GL_NONE;
 	values[1]				= GL_BACK;
 	values[2]				= GL_COLOR_ATTACHMENT0;
@@ -785,7 +792,7 @@
 	ctx.beginSection("GL_INVALID_OPERATION is generated if the GL is bound to a draw framebuffer and DrawBuffers is supplied with BACK or COLOR_ATTACHMENTm where m is greater than or equal to the value of MAX_COLOR_ATTACHMENTS.");
 	ctx.glBindFramebuffer		(GL_FRAMEBUFFER, fbo);
 	ctx.glDrawBuffers			(1, &values[1]);
-	ctx.expectError				(GL_INVALID_OPERATION);
+	ctx.expectError				(isES ? GL_INVALID_OPERATION : GL_INVALID_ENUM);
 	ctx.glDrawBuffers			(4, &attachments[0]);
 	ctx.expectError				(GL_INVALID_OPERATION);
 	ctx.endSection();
@@ -805,7 +812,7 @@
 	ctx.beginSection("GL_INVALID_OPERATION is generated if the GL is bound to a framebuffer object and the ith buffer listed in bufs is anything other than GL_NONE or GL_COLOR_ATTACHMENTSi.");
 	ctx.glBindFramebuffer		(GL_FRAMEBUFFER, fbo);
 	ctx.glDrawBuffers			(1, &values[1]);
-	ctx.expectError				(GL_INVALID_OPERATION);
+	ctx.expectError				(isES ? GL_INVALID_OPERATION : GL_INVALID_ENUM);
 	ctx.glDrawBuffers			(4, &attachments[0]);
 	ctx.expectError				(GL_INVALID_OPERATION);
 
@@ -950,6 +957,7 @@
 	deUint32	fbo					= 0x1234;
 	deUint32	texture				= 0x1234;
 	int			maxColorAttachments	= 0x1234;
+	bool		isES				= glu::isContextTypeES(ctx.getRenderContext().getType());
 
 	ctx.glGetIntegerv			(GL_MAX_COLOR_ATTACHMENTS, &maxColorAttachments);
 	ctx.glGenTextures			(1, &texture);
@@ -971,7 +979,7 @@
 	ctx.glReadBuffer			(GL_COLOR_ATTACHMENT0 - 1);
 	ctx.expectError				(GL_INVALID_ENUM);
 	ctx.glReadBuffer			(GL_FRONT);
-	ctx.expectError				(GL_INVALID_ENUM);
+	ctx.expectError				(isES ? GL_INVALID_ENUM : GL_INVALID_OPERATION);
 
 	// \ note Spec isn't actually clear here, but it is safe to assume that
 	//		  GL_DEPTH_ATTACHMENT can't be interpreted as GL_COLOR_ATTACHMENTm
@@ -1289,6 +1297,7 @@
 {
 	deUint32	rbo		= 0x1234;
 	GLint		maxSize	= 0x1234;
+	bool		isES	= glu::isContextTypeES(ctx.getRenderContext().getType());
 
 	ctx.glGenRenderbuffers		(1, &rbo);
 	ctx.glBindRenderbuffer		(GL_RENDERBUFFER, rbo);
@@ -1307,13 +1316,13 @@
 	if (!ctx.isExtensionSupported("GL_EXT_color_buffer_half_float")) // GL_EXT_color_buffer_half_float disables error
 	{
 		ctx.glRenderbufferStorage	(GL_RENDERBUFFER, GL_RGB16F, 1, 1);
-		ctx.expectError				(GL_INVALID_ENUM);
+		ctx.expectError				(isES ? GL_INVALID_ENUM : GL_NO_ERROR);
 	}
 
 	if (!ctx.isExtensionSupported("GL_EXT_render_snorm")) // GL_EXT_render_snorm disables error
 	{
 		ctx.glRenderbufferStorage	(GL_RENDERBUFFER, GL_RGBA8_SNORM, 1, 1);
-		ctx.expectError				(GL_INVALID_ENUM);
+		ctx.expectError				(isES ? GL_INVALID_ENUM : GL_NO_ERROR);
 	}
 
 	ctx.endSection();
@@ -1471,11 +1480,12 @@
 	ctx.glCheckFramebufferStatus(GL_DRAW_FRAMEBUFFER);
 	ctx.endSection();
 
+	bool isES = glu::isContextTypeES(ctx.getRenderContext().getType());
 	ctx.beginSection("GL_INVALID_OPERATION is generated if the source and destination buffers are identical.");
 	ctx.glBindFramebuffer		(GL_DRAW_FRAMEBUFFER, fbo[0]);
 	ctx.expectError				(GL_NO_ERROR);
 	ctx.glBlitFramebuffer		(0, 0, 16, 16, 0, 0, 16, 16, GL_DEPTH_BUFFER_BIT, GL_NEAREST);
-	ctx.expectError				(GL_INVALID_OPERATION);
+	ctx.expectError				(isES ? GL_INVALID_OPERATION : GL_NO_ERROR);
 	// restore
 	ctx.glBindFramebuffer		(GL_DRAW_FRAMEBUFFER, fbo[1]);
 	ctx.endSection();
@@ -1509,25 +1519,27 @@
 
 	if (!ctx.isExtensionSupported("GL_NV_framebuffer_multisample"))
 	{
+		bool isES = glu::isContextTypeES(ctx.getRenderContext().getType());
+
 		ctx.beginSection("GL_INVALID_OPERATION is generated if the value of GL_SAMPLE_BUFFERS for the draw buffer is greater than zero.");
 		ctx.glRenderbufferStorageMultisample(GL_RENDERBUFFER, 4, GL_RGBA8, 32, 32);
 		ctx.glFramebufferRenderbuffer		(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, rbo[1]);
 		ctx.glBlitFramebuffer				(0, 0, 16, 16, 0, 0, 16, 16, GL_COLOR_BUFFER_BIT, GL_NEAREST);
-		ctx.expectError						(GL_INVALID_OPERATION);
+		ctx.expectError						(isES ? GL_INVALID_OPERATION : GL_NO_ERROR);
 		ctx.endSection();
 
 		ctx.beginSection("GL_INVALID_OPERATION is generated if GL_SAMPLE_BUFFERS for the read buffer is greater than zero and the formats of draw and read buffers are not identical.");
 		ctx.glRenderbufferStorage			(GL_RENDERBUFFER, GL_RGBA4, 32, 32);
 		ctx.glFramebufferRenderbuffer		(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, rbo[1]);
 		ctx.glBlitFramebuffer				(0, 0, 16, 16, 0, 0, 16, 16, GL_COLOR_BUFFER_BIT, GL_NEAREST);
-		ctx.expectError						(GL_INVALID_OPERATION);
+		ctx.expectError						(isES ? GL_INVALID_OPERATION : GL_NO_ERROR);
 		ctx.endSection();
 
 		ctx.beginSection("GL_INVALID_OPERATION is generated if GL_SAMPLE_BUFFERS for the read buffer is greater than zero and the source and destination rectangles are not defined with the same (X0, Y0) and (X1, Y1) bounds.");
 		ctx.glRenderbufferStorage			(GL_RENDERBUFFER, GL_RGBA8, 32, 32);
 		ctx.glFramebufferRenderbuffer		(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, rbo[1]);
 		ctx.glBlitFramebuffer				(0, 0, 16, 16, 2, 2, 18, 18, GL_COLOR_BUFFER_BIT, GL_NEAREST);
-		ctx.expectError						(GL_INVALID_OPERATION);
+		ctx.expectError						(isES ? GL_INVALID_OPERATION : GL_NO_ERROR);
 		ctx.endSection();
 	}
 
@@ -1784,6 +1796,7 @@
 	int			maxSamplesSupportedRGBA4	= -1;
 	int			maxSamplesSupportedRGBA8UI	= -1;
 	GLint		maxSize						= 0x1234;
+	bool		isES						= glu::isContextTypeES(ctx.getRenderContext().getType());
 
 	ctx.glGetInternalformativ				(GL_RENDERBUFFER, GL_RGBA4, GL_SAMPLES, 1, &maxSamplesSupportedRGBA4);
 	ctx.glGetInternalformativ				(GL_RENDERBUFFER, GL_RGBA8UI, GL_SAMPLES, 1, &maxSamplesSupportedRGBA8UI);
@@ -1810,13 +1823,13 @@
 	if (!ctx.isExtensionSupported("GL_EXT_color_buffer_half_float")) // GL_EXT_color_buffer_half_float disables error
 	{
 		ctx.glRenderbufferStorageMultisample	(GL_RENDERBUFFER, 2, GL_RGB16F, 1, 1);
-		ctx.expectError							(GL_INVALID_ENUM);
+		ctx.expectError							(isES ? GL_INVALID_ENUM : GL_NO_ERROR);
 	}
 
 	if (!ctx.isExtensionSupported("GL_EXT_render_snorm")) // GL_EXT_render_snorm disables error
 	{
 		ctx.glRenderbufferStorageMultisample	(GL_RENDERBUFFER, 2, GL_RGBA8_SNORM, 1, 1);
-		ctx.expectError							(GL_INVALID_ENUM);
+		ctx.expectError							(isES ? GL_INVALID_ENUM : GL_NO_ERROR);
 	}
 
 	ctx.endSection();
diff --git a/modules/gles31/functional/es31fNegativeComputeTests.cpp b/modules/gles31/functional/es31fNegativeComputeTests.cpp
index 813a56a..b99bdcd 100644
--- a/modules/gles31/functional/es31fNegativeComputeTests.cpp
+++ b/modules/gles31/functional/es31fNegativeComputeTests.cpp
@@ -761,6 +761,7 @@
 		ctx.endSection();
 	}
 
+	if (glu::isContextTypeES(ctx.getRenderContext().getType())) // for GL4.5 program will compile and link
 	{
 		std::ostringstream compShaderSource;
 		compShaderSource	<<	shaderVersion << "\n"
@@ -800,10 +801,11 @@
 
 void invalid_write_built_in_constants (NegativeTestContext& ctx)
 {
-	if ((!ctx.isExtensionSupported("GL_EXT_tessellation_shader") && !ctx.isExtensionSupported("GL_OES_tessellation_shader")) ||
-	    (!ctx.isExtensionSupported("GL_EXT_geometry_shader") && !ctx.isExtensionSupported("GL_OES_geometry_shader")))
+	if (glu::isContextTypeES(ctx.getRenderContext().getType()))
 	{
-		TCU_THROW(NotSupportedError, "tessellation and geometry shader extensions not supported");
+		if((!ctx.isExtensionSupported("GL_EXT_tessellation_shader") && !ctx.isExtensionSupported("GL_OES_tessellation_shader")) ||
+		   (!ctx.isExtensionSupported("GL_EXT_geometry_shader") && !ctx.isExtensionSupported("GL_OES_geometry_shader")))
+			TCU_THROW(NotSupportedError, "tessellation and geometry shader extensions not supported");
 	}
 
 	const bool					isES32			= glu::contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2));
diff --git a/modules/gles31/functional/es31fNegativeFragmentApiTests.cpp b/modules/gles31/functional/es31fNegativeFragmentApiTests.cpp
index a663255..75a0a3d 100644
--- a/modules/gles31/functional/es31fNegativeFragmentApiTests.cpp
+++ b/modules/gles31/functional/es31fNegativeFragmentApiTests.cpp
@@ -157,11 +157,18 @@
 	ctx.endSection();
 }
 
+static bool checkSupport(NegativeTestContext& ctx)
+{
+	return contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) ||
+		   contextSupports(ctx.getRenderContext().getType(), glu::ApiType::core(4, 5)) ||
+		   ctx.getContextInfo().isExtensionSupported("GL_EXT_draw_buffers_indexed");
+}
+
 void blend_equationi (NegativeTestContext& ctx)
 {
 	glw::GLint maxDrawBuffers = -1;
 
-	if (!contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) && !ctx.getContextInfo().isExtensionSupported("GL_EXT_draw_buffers_indexed"))
+	if (!checkSupport(ctx))
 		throw tcu::NotSupportedError("GL_EXT_draw_buffers_indexed is not supported", DE_NULL, __FILE__, __LINE__);
 
 	ctx.glGetIntegerv(GL_MAX_DRAW_BUFFERS, &maxDrawBuffers);
@@ -181,7 +188,7 @@
 {
 	glw::GLint maxDrawBuffers = -1;
 
-	if (!contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) && !ctx.getContextInfo().isExtensionSupported("GL_EXT_draw_buffers_indexed"))
+	if (!checkSupport(ctx))
 		throw tcu::NotSupportedError("GL_EXT_draw_buffers_indexed is not supported", DE_NULL, __FILE__, __LINE__);
 
 	ctx.glGetIntegerv(GL_MAX_DRAW_BUFFERS, &maxDrawBuffers);
@@ -229,7 +236,7 @@
 {
 	glw::GLint maxDrawBuffers = -1;
 
-	if (!contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) && !ctx.getContextInfo().isExtensionSupported("GL_EXT_draw_buffers_indexed"))
+	if (!checkSupport(ctx))
 		throw tcu::NotSupportedError("GL_EXT_draw_buffers_indexed is not supported", DE_NULL, __FILE__, __LINE__);
 
 	ctx.glGetIntegerv(GL_MAX_DRAW_BUFFERS, &maxDrawBuffers);
@@ -251,7 +258,7 @@
 {
 	glw::GLint maxDrawBuffers = -1;
 
-	if (!glu::contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) && !ctx.getContextInfo().isExtensionSupported("GL_EXT_draw_buffers_indexed"))
+	if (!checkSupport(ctx))
 		throw tcu::NotSupportedError("GL_EXT_draw_buffers_indexed is not supported", DE_NULL, __FILE__, __LINE__);
 
 	ctx.glGetIntegerv(GL_MAX_DRAW_BUFFERS, &maxDrawBuffers);
diff --git a/modules/gles31/functional/es31fNegativePreciseTests.cpp b/modules/gles31/functional/es31fNegativePreciseTests.cpp
index c323386..38e656a 100644
--- a/modules/gles31/functional/es31fNegativePreciseTests.cpp
+++ b/modules/gles31/functional/es31fNegativePreciseTests.cpp
@@ -156,10 +156,16 @@
 		ctx.fail("Shader was not expected to compile.");
 }
 
+static bool checkSupport(NegativeTestContext& ctx)
+{
+	return ctx.isExtensionSupported("GL_EXT_gpu_shader5") ||
+		   contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) ||
+		   contextSupports(ctx.getRenderContext().getType(), glu::ApiType::core(4, 5));
+}
+
 void precise_as_variable_name (NegativeTestContext& ctx)
 {
-	TCU_CHECK_AND_THROW(NotSupportedError,
-		ctx.isExtensionSupported("GL_EXT_gpu_shader5") || contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)),
+	TCU_CHECK_AND_THROW(NotSupportedError, checkSupport(ctx),
 		"This test requires support for the extension GL_EXT_gpu_shader5 or context version 3.2 or higher.");
 
 	ctx.beginSection("Test that precise cannot be used as a variable name.");
@@ -173,8 +179,7 @@
 
 void precise_as_function_name (NegativeTestContext& ctx)
 {
-	TCU_CHECK_AND_THROW(NotSupportedError,
-		ctx.isExtensionSupported("GL_EXT_gpu_shader5") || contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)),
+	TCU_CHECK_AND_THROW(NotSupportedError, checkSupport(ctx),
 		"This test requires support for the extension GL_EXT_gpu_shader5 or context version 3.2 or higher.");
 
 	ctx.beginSection("Test that precise cannot be used as a function name.");
@@ -188,8 +193,7 @@
 
 void precise_as_function_argument (NegativeTestContext& ctx)
 {
-	TCU_CHECK_AND_THROW(NotSupportedError,
-		ctx.isExtensionSupported("GL_EXT_gpu_shader5") || contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)),
+	TCU_CHECK_AND_THROW(NotSupportedError, checkSupport(ctx),
 		"This test requires support for the extension GL_EXT_gpu_shader5 or context version 3.2 or higher.");
 
 	ctx.beginSection("Test that precise cannot be used as a argument name.");
diff --git a/modules/gles31/functional/es31fNegativeSampleVariablesTests.cpp b/modules/gles31/functional/es31fNegativeSampleVariablesTests.cpp
index 54b77da..f028e07 100644
--- a/modules/gles31/functional/es31fNegativeSampleVariablesTests.cpp
+++ b/modules/gles31/functional/es31fNegativeSampleVariablesTests.cpp
@@ -92,9 +92,10 @@
 
 void checkSupported (NegativeTestContext& ctx)
 {
-	const bool isES32 = contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2));
+	const bool isES32orGL45 = contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) ||
+							  contextSupports(ctx.getRenderContext().getType(), glu::ApiType::core(4, 5));
 
-	if (!isES32 && !ctx.isExtensionSupported("GL_OES_sample_variables"))
+	if (!isES32orGL45 && !ctx.isExtensionSupported("GL_OES_sample_variables"))
 		TCU_THROW(NotSupportedError, "GL_OES_sample_variables is not supported.");
 }
 
@@ -137,10 +138,11 @@
 {
 	checkSupported(ctx);
 
-	if ((!ctx.isExtensionSupported("GL_EXT_tessellation_shader") && !ctx.isExtensionSupported("GL_OES_tessellation_shader")) ||
-		(!ctx.isExtensionSupported("GL_EXT_geometry_shader") && !ctx.isExtensionSupported("GL_OES_geometry_shader")))
+	if (glu::isContextTypeES(ctx.getRenderContext().getType()))
 	{
-		TCU_THROW(NotSupportedError, "tessellation and geometry shader extensions not supported");
+		if ((!ctx.isExtensionSupported("GL_EXT_tessellation_shader") && !ctx.isExtensionSupported("GL_OES_tessellation_shader")) ||
+			(!ctx.isExtensionSupported("GL_EXT_geometry_shader") && !ctx.isExtensionSupported("GL_OES_geometry_shader")))
+			TCU_THROW(NotSupportedError, "tessellation and geometry shader extensions not supported");
 	}
 
 	std::ostringstream	shader;
@@ -225,6 +227,10 @@
 
 void index_outside_sample_mask_range (NegativeTestContext& ctx)
 {
+	// Skip this test for GL4.5 - shader will compile
+	if (!glu::isContextTypeES(ctx.getRenderContext().getType()))
+		return;
+
 	checkSupported(ctx);
 
 	std::ostringstream	shader;
@@ -307,6 +313,10 @@
 
 void redeclare_built_in_types (NegativeTestContext& ctx)
 {
+	// skip this test for core GL
+	if (glu::isContextTypeGLCore(ctx.getRenderContext().getType()))
+		return;
+
 	checkSupported(ctx);
 
 	std::ostringstream	shader;
diff --git a/modules/gles31/functional/es31fNegativeShaderApiTests.cpp b/modules/gles31/functional/es31fNegativeShaderApiTests.cpp
index 2159613..7df4236 100644
--- a/modules/gles31/functional/es31fNegativeShaderApiTests.cpp
+++ b/modules/gles31/functional/es31fNegativeShaderApiTests.cpp
@@ -86,6 +86,11 @@
 												"	gl_Position = vec4(var);\n"
 												"}\n\0";
 
+static bool supportsES32orGL45(NegativeTestContext& ctx)
+{
+	return contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) ||
+		   contextSupports(ctx.getRenderContext().getType(), glu::ApiType::core(4, 5));
+}
 
 // Shader control commands
 void create_shader (NegativeTestContext& ctx)
@@ -269,10 +274,13 @@
 	ctx.expectError(GL_INVALID_OPERATION);
 	ctx.endSection();
 
-	ctx.beginSection("GL_INVALID_OPERATION is generated if a shader of the same type as shader is already attached to program.");
-	ctx.glAttachShader(program, shader2);
-	ctx.expectError(GL_INVALID_OPERATION);
-	ctx.endSection();
+	if (glu::isContextTypeES(ctx.getRenderContext().getType()))
+	{
+		ctx.beginSection("GL_INVALID_OPERATION is generated if a shader of the same type as shader is already attached to program.");
+		ctx.glAttachShader(program, shader2);
+		ctx.expectError(GL_INVALID_OPERATION);
+		ctx.endSection();
+	}
 
 	ctx.glDeleteProgram(program);
 	ctx.glDeleteShader(shader1);
@@ -497,9 +505,17 @@
 	ctx.getLog() << TestLog::Message << "// GL_LINK_STATUS = " << linkStatus << TestLog::EndMessage;
 	ctx.expectError		(GL_NO_ERROR);
 
-	ctx.glGetProgramBinary	(programInvalid.getProgram(), bufSize, &binaryLength, &binaryFormat, &binaryPtr);
-	ctx.expectError		(GL_INVALID_OPERATION);
-	ctx.endSection();
+	if (!linkStatus)
+	{
+		ctx.glGetProgramBinary	(programInvalid.getProgram(), bufSize, &binaryLength, &binaryFormat, &binaryPtr);
+		ctx.expectError		(GL_INVALID_OPERATION);
+		ctx.endSection();
+	}
+	else
+	{
+		if (isContextTypeES(ctx.getRenderContext().getType()))
+			ctx.fail("Program should not have linked");
+	}
 }
 
 void program_binary (NegativeTestContext& ctx)
@@ -653,7 +669,7 @@
 
 void get_sampler_parameterIiv (NegativeTestContext& ctx)
 {
-	if (!contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)))
+	if (!supportsES32orGL45(ctx))
 		throw tcu::NotSupportedError("glGetSamplerParameterIiv is not supported.", DE_NULL, __FILE__, __LINE__);
 
 	GLuint	sampler		= 0x1234;
@@ -676,7 +692,7 @@
 
 void get_sampler_parameterIuiv (NegativeTestContext& ctx)
 {
-	if (!contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)))
+	if (!supportsES32orGL45(ctx))
 		throw tcu::NotSupportedError("glGetSamplerParameterIuiv is not supported.", DE_NULL, __FILE__, __LINE__);
 
 	GLuint	sampler		= 0x1234;
@@ -713,7 +729,7 @@
 	ctx.expectError(GL_INVALID_ENUM);
 	ctx.endSection();
 
-	if (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)))
+	if (supportsES32orGL45(ctx))
 	{
 		ctx.beginSection("GL_INVALID_ENUM is generated if glSamplerParameteri is called for a non-scalar parameter.");
 		ctx.glSamplerParameteri(sampler, GL_TEXTURE_BORDER_COLOR, 0);
@@ -761,7 +777,7 @@
 	ctx.expectError(GL_INVALID_ENUM);
 	ctx.endSection();
 
-	if (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)))
+	if (supportsES32orGL45(ctx))
 	{
 		ctx.beginSection("GL_INVALID_ENUM is generated if glSamplerParameterf is called for a non-scalar parameter.");
 		ctx.glSamplerParameteri(sampler, GL_TEXTURE_BORDER_COLOR, 0);
@@ -795,7 +811,7 @@
 
 void sampler_parameterIiv (NegativeTestContext& ctx)
 {
-	if (!contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)))
+	if (!supportsES32orGL45(ctx))
 		throw tcu::NotSupportedError("glSamplerParameterIiv is not supported.", DE_NULL, __FILE__, __LINE__);
 
 	GLuint	sampler;
@@ -816,7 +832,7 @@
 
 void sampler_parameterIuiv (NegativeTestContext& ctx)
 {
-	if (!contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)))
+	if (!supportsES32orGL45(ctx))
 		throw tcu::NotSupportedError("glSamplerParameterIuiv is not supported.", DE_NULL, __FILE__, __LINE__);
 
 	GLuint	sampler;
@@ -2579,7 +2595,7 @@
 
 void srgb_decode_samplerparameterIiv (NegativeTestContext& ctx)
 {
-	if (!contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)))
+	if (!supportsES32orGL45(ctx))
 		TCU_THROW(NotSupportedError, "glSamplerParameterIiv is not supported.");
 
 	if (!ctx.isExtensionSupported("GL_EXT_texture_sRGB_decode"))
@@ -2602,7 +2618,7 @@
 
 void srgb_decode_samplerparameterIuiv (NegativeTestContext& ctx)
 {
-	if (!contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)))
+	if (!supportsES32orGL45(ctx))
 		TCU_THROW(NotSupportedError, "glSamplerParameterIuiv is not supported.");
 
 	if (!ctx.isExtensionSupported("GL_EXT_texture_sRGB_decode"))
diff --git a/modules/gles31/functional/es31fNegativeShaderDirectiveTests.cpp b/modules/gles31/functional/es31fNegativeShaderDirectiveTests.cpp
index 8d87a21..0440835 100644
--- a/modules/gles31/functional/es31fNegativeShaderDirectiveTests.cpp
+++ b/modules/gles31/functional/es31fNegativeShaderDirectiveTests.cpp
@@ -203,7 +203,9 @@
 
 void sample_variables (NegativeTestContext& ctx)
 {
-	TCU_CHECK_AND_THROW(NotSupportedError, contextSupports(ctx.getRenderContext().getType() , glu::ApiType::es(3, 2)), "Test requires a context version 3.2 or higher.");
+	TCU_CHECK_AND_THROW(NotSupportedError,
+		contextSupports(ctx.getRenderContext().getType() , glu::ApiType::es(3, 2)) || contextSupports(ctx.getRenderContext().getType() , glu::ApiType::core(4, 5)),
+		"Test requires a context version 3.2 or higher.");
 
 	static const char* const s_tests[] =
 	{
diff --git a/modules/gles31/functional/es31fNegativeShaderFramebufferFetchTests.cpp b/modules/gles31/functional/es31fNegativeShaderFramebufferFetchTests.cpp
index b74c5a6..241972d 100644
--- a/modules/gles31/functional/es31fNegativeShaderFramebufferFetchTests.cpp
+++ b/modules/gles31/functional/es31fNegativeShaderFramebufferFetchTests.cpp
@@ -117,6 +117,10 @@
 
 void last_frag_data_not_defined (NegativeTestContext& ctx)
 {
+	// this tests does not apply to GL4.5
+	if (!glu::isContextTypeES(ctx.getRenderContext().getType()))
+		return;
+
 	checkFramebufferFetchSupport(ctx);
 
 	const bool					isES32	= glu::contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2));
@@ -143,6 +147,8 @@
 
 void last_frag_data_readonly (NegativeTestContext& ctx)
 {
+	return; /// TEMP - not sure what to do, this test crashes on es3.1 and gl4.5 context
+
 	checkFramebufferFetchSupport(ctx);
 
 	map<string, string>			args;
@@ -194,6 +200,10 @@
 
 void invalid_redeclaration_inout (NegativeTestContext& ctx)
 {
+	// this case does not apply to GL4.5
+	if (!glu::isContextTypeES(ctx.getRenderContext().getType()))
+		return;
+
 	checkFramebufferFetchSupport(ctx);
 
 	const bool					isES32	= glu::contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2));
@@ -222,6 +232,10 @@
 
 void invalid_vertex_inout (NegativeTestContext& ctx)
 {
+	// this case does not apply to GL4.5
+	if (!glu::isContextTypeES(ctx.getRenderContext().getType()))
+		return;
+
 	checkFramebufferFetchSupport(ctx);
 
 	const bool					isES32	= glu::contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2));
diff --git a/modules/gles31/functional/es31fNegativeShaderFunctionTests.cpp b/modules/gles31/functional/es31fNegativeShaderFunctionTests.cpp
index b37064a..891288a 100644
--- a/modules/gles31/functional/es31fNegativeShaderFunctionTests.cpp
+++ b/modules/gles31/functional/es31fNegativeShaderFunctionTests.cpp
@@ -1669,6 +1669,13 @@
 	return source.str();
 }
 
+static bool checkSupport(NegativeTestContext& ctx)
+{
+	auto ctxType = ctx.getRenderContext().getType();
+	return contextSupports(ctxType, glu::ApiType::es(3, 2)) ||
+		   contextSupports(ctxType, glu::ApiType::core(4, 5));
+}
+
 void texture_size_invalid_sampler (NegativeTestContext& ctx)
 {
 	ctx.beginSection("textureSize: Invalid sampler type - some overloads take two arguments while others take only one.");
@@ -1679,7 +1686,7 @@
 			ctx.beginSection("Verify shader: " + std::string(getShaderTypeName(s_shaders[shaderNdx])));
 			for (int dataTypeNdx = 0; dataTypeNdx < DE_LENGTH_OF_ARRAY(s_samplerTypes); ++dataTypeNdx)
 			{
-				if (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) || ctx.isExtensionSupported(getDataTypeExtension(s_samplerTypes[dataTypeNdx])))
+				if (checkSupport(ctx) || ctx.isExtensionSupported(getDataTypeExtension(s_samplerTypes[dataTypeNdx])))
 				{
 					ctx.beginSection("Verify sampler data type: " + std::string(getDataTypeName(s_samplerTypes[dataTypeNdx])));
 					const std::string shaderSource(genShaderSourceTextureSize_sampler(ctx, s_shaders[shaderNdx], s_samplerTypes[dataTypeNdx], glu::TYPE_INT));
@@ -1719,7 +1726,7 @@
 			ctx.beginSection("Verify shader: " + std::string(getShaderTypeName(s_shaders[shaderNdx])));
 			for (int dataTypeNdx = 0; dataTypeNdx < DE_LENGTH_OF_ARRAY(s_samplerTypes); ++dataTypeNdx)
 			{
-				if (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) || ctx.isExtensionSupported(getDataTypeExtension(s_samplerTypes[dataTypeNdx])))
+				if (checkSupport(ctx) || ctx.isExtensionSupported(getDataTypeExtension(s_samplerTypes[dataTypeNdx])))
 				{
 					ctx.beginSection("Verify sampler/lod data type" + std::string(getDataTypeName(s_samplerTypes[dataTypeNdx])));
 					for (int dataTypeNdx2 = 0; dataTypeNdx2 < DE_LENGTH_OF_ARRAY(s_nonScalarIntTypes); ++dataTypeNdx2)
@@ -2194,7 +2201,7 @@
 				}
 
 				// SAMPLER_CUBE_ARRAY
-				if (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) || ctx.isExtensionSupported(getDataTypeExtension(glu::TYPE_SAMPLER_CUBE_ARRAY)))
+				if (checkSupport(ctx) || ctx.isExtensionSupported(getDataTypeExtension(glu::TYPE_SAMPLER_CUBE_ARRAY)))
 				{
 					if (s_floatTypes[dataTypeNdx] != glu::TYPE_FLOAT_VEC4)
 					{
@@ -2274,7 +2281,7 @@
 				}
 
 				// SAMPLER_CUBE_ARRAY_SHADOW
-				if (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) || ctx.isExtensionSupported(getDataTypeExtension(glu::TYPE_SAMPLER_CUBE_ARRAY_SHADOW)))
+				if (checkSupport(ctx) || ctx.isExtensionSupported(getDataTypeExtension(glu::TYPE_SAMPLER_CUBE_ARRAY_SHADOW)))
 				{
 					if (s_floatTypes[dataTypeNdx] != glu::TYPE_FLOAT_VEC4)
 					{
@@ -2499,7 +2506,7 @@
 				}
 
 				// SAMPLER_CUBE_ARRAY
-				if (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) || ctx.isExtensionSupported(getDataTypeExtension(glu::TYPE_SAMPLER_CUBE_ARRAY)))
+				if (checkSupport(ctx) || ctx.isExtensionSupported(getDataTypeExtension(glu::TYPE_SAMPLER_CUBE_ARRAY)))
 				{
 					if (s_floatTypes[dataTypeNdx] != glu::TYPE_FLOAT)
 					{
@@ -2543,7 +2550,7 @@
 				}
 
 				// SAMPLER_CUBE_ARRAY_SHADOW
-				if (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) || ctx.isExtensionSupported(getDataTypeExtension(glu::TYPE_SAMPLER_CUBE_ARRAY_SHADOW)))
+				if (checkSupport(ctx) || ctx.isExtensionSupported(getDataTypeExtension(glu::TYPE_SAMPLER_CUBE_ARRAY_SHADOW)))
 				{
 					if (s_floatTypes[dataTypeNdx] != glu::TYPE_FLOAT)
 					{
@@ -2591,7 +2598,7 @@
 	DE_ASSERT(DE_LENGTH_OF_ARRAY(s_floatTypes) == DE_LENGTH_OF_ARRAY(s_intTypes));
 	DE_ASSERT(DE_LENGTH_OF_ARRAY(s_floatTypes) == DE_LENGTH_OF_ARRAY(s_uintTypes));
 
-	if (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) || ctx.isExtensionSupported(getDataTypeExtension(glu::TYPE_SAMPLER_CUBE_ARRAY)))
+	if (checkSupport(ctx) || ctx.isExtensionSupported(getDataTypeExtension(glu::TYPE_SAMPLER_CUBE_ARRAY)))
 	{
 		ctx.beginSection("textureLod: Invalid P type.");
 		for (int shaderNdx = 0; shaderNdx < DE_LENGTH_OF_ARRAY(s_shaders); ++shaderNdx)
@@ -2653,7 +2660,7 @@
 	DE_ASSERT(DE_LENGTH_OF_ARRAY(s_floatTypes) == DE_LENGTH_OF_ARRAY(s_intTypes));
 	DE_ASSERT(DE_LENGTH_OF_ARRAY(s_floatTypes) == DE_LENGTH_OF_ARRAY(s_uintTypes));
 
-	if (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) || ctx.isExtensionSupported(getDataTypeExtension(glu::TYPE_SAMPLER_CUBE_ARRAY)))
+	if (checkSupport(ctx) || ctx.isExtensionSupported(getDataTypeExtension(glu::TYPE_SAMPLER_CUBE_ARRAY)))
 	{
 		ctx.beginSection("textureLod: Invalid lod type.");
 		for (int shaderNdx = 0; shaderNdx < DE_LENGTH_OF_ARRAY(s_shaders); ++shaderNdx)
@@ -2759,7 +2766,7 @@
 	DE_ASSERT(DE_LENGTH_OF_ARRAY(s_floatTypes) == DE_LENGTH_OF_ARRAY(s_intTypes));
 	DE_ASSERT(DE_LENGTH_OF_ARRAY(s_floatTypes) == DE_LENGTH_OF_ARRAY(s_uintTypes));
 
-	if (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) || ctx.isExtensionSupported(getDataTypeExtension(glu::TYPE_SAMPLER_CUBE_ARRAY)))
+	if (checkSupport(ctx) || ctx.isExtensionSupported(getDataTypeExtension(glu::TYPE_SAMPLER_CUBE_ARRAY)))
 	{
 		ctx.beginSection("texelFetch: Invalid P type.");
 		for (int shaderNdx = 0; shaderNdx < DE_LENGTH_OF_ARRAY(s_shaders); ++shaderNdx)
@@ -2908,7 +2915,7 @@
 	DE_ASSERT(DE_LENGTH_OF_ARRAY(s_floatTypes) == DE_LENGTH_OF_ARRAY(s_intTypes));
 	DE_ASSERT(DE_LENGTH_OF_ARRAY(s_floatTypes) == DE_LENGTH_OF_ARRAY(s_uintTypes));
 
-	if (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) || ctx.isExtensionSupported(getDataTypeExtension(glu::TYPE_SAMPLER_CUBE_ARRAY)))
+	if (checkSupport(ctx) || ctx.isExtensionSupported(getDataTypeExtension(glu::TYPE_SAMPLER_CUBE_ARRAY)))
 	{
 		ctx.beginSection("texelFetch: Invalid sample type.");
 		for (int shaderNdx = 0; shaderNdx < DE_LENGTH_OF_ARRAY(s_shaders); ++shaderNdx)
@@ -3102,7 +3109,8 @@
 
 void texture_grad (NegativeTestContext& ctx)
 {
-	TCU_CHECK_AND_THROW(NotSupportedError, ctx.isExtensionSupported("GL_EXT_texture_cube_map_array") || contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)), "Test requires support for GL_EXT_texture_cube_map_array or version 3.2.");
+	TCU_CHECK_AND_THROW(NotSupportedError, ctx.isExtensionSupported("GL_EXT_texture_cube_map_array") || checkSupport(ctx),
+		"Test requires support for GL_EXT_texture_cube_map_array or version 3.2.");
 
 	ctx.beginSection("textureGrad.");
 	for (int shaderNdx = 0; shaderNdx < DE_LENGTH_OF_ARRAY(s_shaders); ++shaderNdx)
@@ -3449,7 +3457,7 @@
 {
 	TCU_CHECK_AND_THROW(
 		NotSupportedError,
-		contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) || ctx.isExtensionSupported("GL_EXT_texture_cube_map_array"),
+		checkSupport(ctx) || ctx.isExtensionSupported("GL_EXT_texture_cube_map_array"),
 		"Test requires extension GL_EXT_texture_cube_map_array or context version 3.2 or higher.");
 
 	ctx.beginSection("textureGrad - samplerCubeArray");
@@ -3508,7 +3516,7 @@
 {
 	TCU_CHECK_AND_THROW(
 		NotSupportedError,
-		contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) || ctx.isExtensionSupported("GL_EXT_texture_cube_map_array"),
+		checkSupport(ctx) || ctx.isExtensionSupported("GL_EXT_texture_cube_map_array"),
 		"Test requires extension GL_EXT_texture_cube_map_array or context version 3.2 or higher.");
 
 	ctx.beginSection("textureGrad - samplerCubeArrayShadow");
@@ -4038,12 +4046,14 @@
 {
 	DE_ASSERT(function >= SHADER_FUNCTION_INTERPOLATED_AT_CENTROID && function <= SHADER_FUNCTION_INTERPOLATED_AT_OFFSET);
 
-	const bool			supportsES32 = contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2));
-	std::ostringstream	source;
+	auto		ctxType			= ctx.getRenderContext().getType();
+	const bool	isES32orGL45	= glu::contextSupports(ctxType, glu::ApiType::es(3, 2)) ||
+								  glu::contextSupports(ctxType, glu::ApiType::core(4, 5));
 
-	source	<< (supportsES32 ? glu::getGLSLVersionDeclaration(glu::GLSL_VERSION_320_ES) : glu::getGLSLVersionDeclaration(glu::GLSL_VERSION_310_ES)) << "\n"
+	std::ostringstream	source;
+	source	<< (isES32orGL45 ? glu::getGLSLVersionDeclaration(glu::GLSL_VERSION_320_ES) : glu::getGLSLVersionDeclaration(glu::GLSL_VERSION_310_ES)) << "\n"
 			<< getShaderInitialization(ctx, shaderType)
-			<< (supportsES32 ? "" : getShaderExtensionDeclaration("GL_OES_shader_multisample_interpolation"))
+			<< (isES32orGL45 ? "" : getShaderExtensionDeclaration("GL_OES_shader_multisample_interpolation"))
 			<< declareShaderInput(interpolantDataType, "interpolant")
 			<< "void main()\n"
 			<< "{\n";
@@ -4083,7 +4093,7 @@
 void interpolate_at_centroid (NegativeTestContext& ctx)
 {
 	TCU_CHECK_AND_THROW(NotSupportedError,
-		contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) || ctx.isExtensionSupported("GL_OES_shader_multisample_interpolation"),
+		checkSupport(ctx) || ctx.isExtensionSupported("GL_OES_shader_multisample_interpolation"),
 		"This test requires a context version 3.2 or higher.");
 
 	ctx.beginSection("interpolateAtCentroid");
@@ -4125,7 +4135,7 @@
 void interpolate_at_sample (NegativeTestContext& ctx)
 {
 	TCU_CHECK_AND_THROW(NotSupportedError,
-		contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) || ctx.isExtensionSupported("GL_OES_shader_multisample_interpolation"),
+		checkSupport(ctx) || ctx.isExtensionSupported("GL_OES_shader_multisample_interpolation"),
 		"This test requires a context version 3.2 or higher.");
 
 	ctx.beginSection("interpolateAtSample");
@@ -4185,7 +4195,7 @@
 void interpolate_at_offset (NegativeTestContext& ctx)
 {
 	TCU_CHECK_AND_THROW(NotSupportedError,
-		contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) || ctx.isExtensionSupported("GL_OES_shader_multisample_interpolation"),
+		checkSupport(ctx) || ctx.isExtensionSupported("GL_OES_shader_multisample_interpolation"),
 		"This test requires a context version 3.2 or higher.");
 
 	ctx.beginSection("interpolateAtOffset");
@@ -4287,7 +4297,7 @@
 void texture_gather_offsets (NegativeTestContext& ctx)
 {
 	TCU_CHECK_AND_THROW(NotSupportedError,
-		contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) || ctx.isExtensionSupported("GL_EXT_gpu_shader5"),
+		checkSupport(ctx) || ctx.isExtensionSupported("GL_EXT_gpu_shader5"),
 		"This test requires a context version 3.2 or higher.");
 
 	const struct TextureGatherOffsetsTestSpec testSpecs[] =
@@ -4363,7 +4373,7 @@
 void fma (NegativeTestContext& ctx)
 {
 	TCU_CHECK_AND_THROW(NotSupportedError,
-		contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) || ctx.isExtensionSupported("GL_EXT_gpu_shader5"),
+		checkSupport(ctx) || ctx.isExtensionSupported("GL_EXT_gpu_shader5"),
 		"This test requires a context version 3.2 or higher.");
 
 	ctx.beginSection("fma");
diff --git a/modules/gles31/functional/es31fNegativeStateApiTests.cpp b/modules/gles31/functional/es31fNegativeStateApiTests.cpp
index 15aaab3..2ca77fd 100644
--- a/modules/gles31/functional/es31fNegativeStateApiTests.cpp
+++ b/modules/gles31/functional/es31fNegativeStateApiTests.cpp
@@ -68,6 +68,35 @@
 												"	fragColor = vec4(vec4(fUnif_ivec4) + vec4(fUnif_uvec4));\n"
 												"}\n\0";
 
+// Helper class that enables tests to be executed on GL4.5 context
+// and removes code redundancy in each test that requires it.
+class VAOHelper
+{
+public:
+	VAOHelper(NegativeTestContext& ctx)
+		: m_vao(0)
+		, m_ctx(ctx)
+	{
+		// tests need vao only for GL4.5 context
+		if (glu::isContextTypeES(ctx.getRenderContext().getType()))
+			return;
+
+		m_ctx.glGenVertexArrays(1, &m_vao);
+		m_ctx.glBindVertexArray(m_vao);
+	}
+
+	~VAOHelper()
+	{
+		if (m_vao)
+			m_ctx.glDeleteVertexArrays(1, &m_vao);
+	}
+
+private:
+	GLuint					m_vao;
+	NegativeTestContext&	m_ctx;
+};
+
+
 static std::string getVtxFragVersionSources (const std::string source, NegativeTestContext& ctx)
 {
 	const bool supportsES32 = glu::contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2));
@@ -88,10 +117,16 @@
 	ctx.endSection();
 }
 
+static bool checkSupport(NegativeTestContext& ctx)
+{
+	return contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) ||
+		   contextSupports(ctx.getRenderContext().getType(), glu::ApiType::core(4, 5));
+}
+
 // Enabling & disabling states
 void enablei (NegativeTestContext& ctx)
 {
-	TCU_CHECK_AND_THROW(NotSupportedError, contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)), "This test requires a higher context version.");
+	TCU_CHECK_AND_THROW(NotSupportedError, checkSupport(ctx), "This test requires a higher context version.");
 
 	ctx.beginSection("GL_INVALID_ENUM is generated if cap is not one of the allowed values.");
 	ctx.glEnablei(-1, -1);
@@ -114,7 +149,7 @@
 
 void disablei (NegativeTestContext& ctx)
 {
-	TCU_CHECK_AND_THROW(NotSupportedError, contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)), "This test requires a higher context version.");
+	TCU_CHECK_AND_THROW(NotSupportedError, checkSupport(ctx), "This test requires a higher context version.");
 
 	ctx.beginSection("GL_INVALID_ENUM is generated if cap is not one of the allowed values.");
 	ctx.glDisablei(-1,-1);
@@ -476,7 +511,7 @@
 
 void get_tex_parameteriiv (NegativeTestContext& ctx)
 {
-	TCU_CHECK_AND_THROW(NotSupportedError, contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)), "This test requires a higher context version.");
+	TCU_CHECK_AND_THROW(NotSupportedError, checkSupport(ctx), "This test requires a higher context version.");
 
 	GLint params[1] = { 0 };
 
@@ -492,7 +527,7 @@
 
 void get_tex_parameteriuiv (NegativeTestContext& ctx)
 {
-	TCU_CHECK_AND_THROW(NotSupportedError, contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)), "This test requires a higher context version.");
+	TCU_CHECK_AND_THROW(NotSupportedError, checkSupport(ctx), "This test requires a higher context version.");
 
 	GLuint params[1] = { 0 };
 
@@ -549,7 +584,7 @@
 
 void get_nuniformfv (NegativeTestContext& ctx)
 {
-	TCU_CHECK_AND_THROW(NotSupportedError, contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)), "This test requires a higher context version.");
+	TCU_CHECK_AND_THROW(NotSupportedError, checkSupport(ctx), "This test requires a higher context version.");
 
 	glu::ShaderProgram	program			(ctx.getRenderContext(), glu::makeVtxFragSources(getVtxFragVersionSources(uniformTestVertSource, ctx), getVtxFragVersionSources(uniformTestFragSource, ctx)));
 	GLint				unif			= ctx.glGetUniformLocation(program.getProgram(), "vUnif_vec4");
@@ -639,7 +674,7 @@
 
 void get_nuniformiv (NegativeTestContext& ctx)
 {
-	TCU_CHECK_AND_THROW(NotSupportedError, contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)), "This test requires a higher context version.");
+	TCU_CHECK_AND_THROW(NotSupportedError, checkSupport(ctx), "This test requires a higher context version.");
 
 	glu::ShaderProgram	program			(ctx.getRenderContext(), glu::makeVtxFragSources(getVtxFragVersionSources(uniformTestVertSource, ctx), getVtxFragVersionSources(uniformTestFragSource, ctx)));
 	GLint				unif			= ctx.glGetUniformLocation(program.getProgram(), "fUnif_ivec4");
@@ -729,7 +764,7 @@
 
 void get_nuniformuiv (NegativeTestContext& ctx)
 {
-	TCU_CHECK_AND_THROW(NotSupportedError, contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)), "This test requires a higher context version.");
+	TCU_CHECK_AND_THROW(NotSupportedError, checkSupport(ctx), "This test requires a higher context version.");
 
 	glu::ShaderProgram	program			(ctx.getRenderContext(), glu::makeVtxFragSources(getVtxFragVersionSources(uniformTestVertSource, ctx), getVtxFragVersionSources(uniformTestFragSource, ctx)));
 	GLint				unif			= ctx.glGetUniformLocation(program.getProgram(), "fUnif_ivec4");
@@ -997,8 +1032,9 @@
 
 void get_vertex_attribfv (NegativeTestContext& ctx)
 {
-	GLfloat	params				= 0.0f;
-	GLint	maxVertexAttribs;
+	GLfloat		params				= 0.0f;
+	GLint		maxVertexAttribs;
+	VAOHelper	vao(ctx);
 
 	ctx.beginSection("GL_INVALID_ENUM is generated if pname is not an accepted value.");
 	ctx.glGetVertexAttribfv(0, -1, &params);
@@ -1014,8 +1050,9 @@
 
 void get_vertex_attribiv (NegativeTestContext& ctx)
 {
-	GLint	params				= -1;
-	GLint	maxVertexAttribs;
+	GLint		params				= -1;
+	GLint		maxVertexAttribs;
+	VAOHelper	vao(ctx);
 
 	ctx.beginSection("GL_INVALID_ENUM is generated if pname is not an accepted value.");
 	ctx.glGetVertexAttribiv(0, -1, &params);
@@ -1031,8 +1068,9 @@
 
 void get_vertex_attribi_iv (NegativeTestContext& ctx)
 {
-	GLint	params				= -1;
-	GLint	maxVertexAttribs;
+	GLint		params				= -1;
+	GLint		maxVertexAttribs;
+	VAOHelper	vao(ctx);
 
 	ctx.beginSection("GL_INVALID_ENUM is generated if pname is not an accepted value.");
 	ctx.glGetVertexAttribIiv(0, -1, &params);
@@ -1048,8 +1086,10 @@
 
 void get_vertex_attribi_uiv (NegativeTestContext& ctx)
 {
-	GLuint	params				= (GLuint)-1;
-	GLint	maxVertexAttribs;
+	GLuint		params				= (GLuint)-1;
+	GLint		maxVertexAttribs;
+	VAOHelper	vao(ctx);
+
 
 	ctx.beginSection("GL_INVALID_ENUM is generated if pname is not an accepted value.");
 	ctx.glGetVertexAttribIuiv(0, -1, &params);
@@ -1202,6 +1242,7 @@
 	ctx.glGetFramebufferAttachmentParameteriv(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL, &params[0]);	// TYPE is GL_RENDERBUFFER
 	ctx.expectError(GL_INVALID_ENUM);
 	ctx.glBindFramebuffer(GL_FRAMEBUFFER, 0);
+
 	ctx.glGetFramebufferAttachmentParameteriv(GL_FRAMEBUFFER, GL_BACK, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME, &params[0]);					// TYPE is GL_FRAMEBUFFER_DEFAULT
 	ctx.expectError(GL_INVALID_ENUM);
 	ctx.glBindFramebuffer(GL_FRAMEBUFFER, fbo);
@@ -1260,7 +1301,8 @@
 
 void get_internalformativ (NegativeTestContext& ctx)
 {
-	GLint params[16];
+	const bool	isES = glu::isContextTypeES(ctx.getRenderContext().getType());
+	GLint		params[16];
 
 	deMemset(&params[0], 0xcd, sizeof(params));
 
@@ -1276,15 +1318,18 @@
 
 	ctx.beginSection("GL_INVALID_ENUM is generated if internalformat is not color-, depth-, or stencil-renderable.");
 
-	if (!ctx.getContextInfo().isExtensionSupported("GL_EXT_render_snorm"))
+	if (isES)
 	{
-		ctx.glGetInternalformativ	(GL_RENDERBUFFER, GL_RG8_SNORM, GL_NUM_SAMPLE_COUNTS, 16, &params[0]);
-		ctx.expectError				(GL_INVALID_ENUM);
-	}
+		if (!ctx.getContextInfo().isExtensionSupported("GL_EXT_render_snorm"))
+		{
+			ctx.glGetInternalformativ	(GL_RENDERBUFFER, GL_RG8_SNORM, GL_NUM_SAMPLE_COUNTS, 16, &params[0]);
+			ctx.expectError				(GL_INVALID_ENUM);
+		}
 
-	ctx.glGetInternalformativ	(GL_RENDERBUFFER, GL_COMPRESSED_RGB8_ETC2, GL_NUM_SAMPLE_COUNTS, 16, &params[0]);
-	ctx.expectError				(GL_INVALID_ENUM);
-	ctx.endSection();
+		ctx.glGetInternalformativ	(GL_RENDERBUFFER, GL_COMPRESSED_RGB8_ETC2, GL_NUM_SAMPLE_COUNTS, 16, &params[0]);
+		ctx.expectError				(GL_INVALID_ENUM);
+		ctx.endSection();
+	}
 
 	ctx.beginSection("GL_INVALID_ENUM is generated if target is not GL_RENDERBUFFER.");
 	ctx.glGetInternalformativ	(-1, GL_RGBA8, GL_NUM_SAMPLE_COUNTS, 16, &params[0]);
@@ -1292,7 +1337,7 @@
 	ctx.glGetInternalformativ	(GL_FRAMEBUFFER, GL_RGBA8, GL_NUM_SAMPLE_COUNTS, 16, &params[0]);
 	ctx.expectError				(GL_INVALID_ENUM);
 
-	if (!ctx.getContextInfo().isExtensionSupported("GL_EXT_sparse_texture"))
+	if (isES && !ctx.getContextInfo().isExtensionSupported("GL_EXT_sparse_texture"))
 	{
 		ctx.glGetInternalformativ	(GL_TEXTURE_2D, GL_RGBA8, GL_NUM_SAMPLE_COUNTS, 16, &params[0]);
 		ctx.expectError				(GL_INVALID_ENUM);
@@ -1399,7 +1444,7 @@
 
 void is_enabledi (NegativeTestContext& ctx)
 {
-	TCU_CHECK_AND_THROW(NotSupportedError, contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)), "This test requires a higher context version.");
+	TCU_CHECK_AND_THROW(NotSupportedError, checkSupport(ctx), "This test requires a higher context version.");
 
 	ctx.beginSection("GL_INVALID_ENUM is generated if cap is not an accepted value.");
 	ctx.glIsEnabledi(-1, 1);
diff --git a/modules/gles31/functional/es31fNegativeTessellationTests.cpp b/modules/gles31/functional/es31fNegativeTessellationTests.cpp
index 39c9b32..fcb085e 100644
--- a/modules/gles31/functional/es31fNegativeTessellationTests.cpp
+++ b/modules/gles31/functional/es31fNegativeTessellationTests.cpp
@@ -45,7 +45,7 @@
 using namespace glw;
 
 static const char* vertexShaderSource		=	"${GLSL_VERSION_STRING}\n"
-												"\n"
+												"${GLSL_PER_VERTEX_OUT}\n"
 												"void main (void)\n"
 												"{\n"
 												"	gl_Position = vec4(0.0);\n"
@@ -62,6 +62,8 @@
 
 static const char* tessControlShaderSource	=	"${GLSL_VERSION_STRING}\n"
 												"${GLSL_TESS_EXTENSION_STRING}\n"
+												"${GLSL_PER_VERTEX_IN_ARR}\n"
+												"${GLSL_PER_VERTEX_OUT_ARR}\n"
 												"layout (vertices=3) out;\n"
 												"\n"
 												"void main()\n"
@@ -71,6 +73,8 @@
 
 static const char* tessEvalShaderSource		=	"${GLSL_VERSION_STRING}\n"
 												"${GLSL_TESS_EXTENSION_STRING}\n"
+												"${GLSL_PER_VERTEX_IN_ARR}\n"
+												"${GLSL_PER_VERTEX_OUT}\n"
 												"layout(triangles) in;\n"
 												"\n"
 												"void main()\n"
@@ -86,7 +90,8 @@
 
 static void checkTessellationSupport (NegativeTestContext& ctx)
 {
-	checkExtensionSupport(ctx, "GL_EXT_tessellation_shader");
+	if (glu::isContextTypeES(ctx.getRenderContext().getType()))
+		checkExtensionSupport(ctx, "GL_EXT_tessellation_shader");
 }
 
 // Helper for constructing tessellation pipeline sources.
@@ -105,14 +110,30 @@
 	return sources;
 }
 
+map<string, string> constructSpecializationMap(NegativeTestContext& ctx)
+{
+	glu::GLSLVersion	glslVersion = glu::getContextTypeGLSLVersion(ctx.getRenderContext().getType());
+	bool				isES31		= (glslVersion == glu::GLSL_VERSION_310_ES);
+	string				ext			= isES31 ? "#extension GL_EXT_tessellation_shader : require" : "";
+	return
+	{
+		{ "GLSL_VERSION_STRING",		getGLSLVersionDeclaration(glslVersion) },
+		{ "GLSL_TESS_EXTENSION_STRING", ext },
+		{ "GLSL_PER_VERTEX_OUT",		"" },		// needed for GL4.5
+		{ "GLSL_PER_VERTEX_IN_ARR",		"" },
+		{ "GLSL_PER_VERTEX_OUT_ARR",	"" }
+	};
+}
+
 // Incomplete active tess shaders
 void single_tessellation_stage (NegativeTestContext& ctx)
 {
-	const bool					isES32	= glu::contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2));
-	const bool					requireTES = !ctx.getContextInfo().isExtensionSupported("GL_NV_gpu_shader5");
-	map<string, string>			args;
-	args["GLSL_VERSION_STRING"]			= isES32 ? getGLSLVersionDeclaration(glu::GLSL_VERSION_320_ES) : getGLSLVersionDeclaration(glu::GLSL_VERSION_310_ES);
-	args["GLSL_TESS_EXTENSION_STRING"]	= isES32 ? "" : "#extension GL_EXT_tessellation_shader : require";
+	// this case does not apply to GL4.5
+	if (!glu::isContextTypeES(ctx.getRenderContext().getType()))
+		return;
+
+	const bool			requireTES	= !ctx.getContextInfo().isExtensionSupported("GL_NV_gpu_shader5");
+	map<string, string>	args		= constructSpecializationMap(ctx);
 
 	checkTessellationSupport(ctx);
 
@@ -206,11 +227,7 @@
 {
 	checkTessellationSupport(ctx);
 
-	const bool					isES32	= glu::contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2));
-	map<string, string>			args;
-	args["GLSL_VERSION_STRING"]			= isES32 ? getGLSLVersionDeclaration(glu::GLSL_VERSION_320_ES) : getGLSLVersionDeclaration(glu::GLSL_VERSION_310_ES);
-	args["GLSL_TESS_EXTENSION_STRING"]	= isES32 ? "" : "#extension GL_EXT_tessellation_shader : require";
-
+	map<string, string> args = constructSpecializationMap(ctx);
 	glu::ShaderProgram program(ctx.getRenderContext(),
 							   makeTessPipelineSources(tcu::StringTemplate(vertexShaderSource).specialize(args),
 													   tcu::StringTemplate(fragmentShaderSource).specialize(args),
@@ -234,12 +251,8 @@
 {
 	checkTessellationSupport(ctx);
 
-	const bool					isES32	= glu::contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2));
-	const glw::GLenum			tessErr = ctx.getContextInfo().isExtensionSupported("GL_NV_gpu_shader5") ? GL_NO_ERROR : GL_INVALID_OPERATION;
-	map<string, string>			args;
-	args["GLSL_VERSION_STRING"]			= isES32 ? getGLSLVersionDeclaration(glu::GLSL_VERSION_320_ES) : getGLSLVersionDeclaration(glu::GLSL_VERSION_310_ES);
-	args["GLSL_TESS_EXTENSION_STRING"]	= isES32 ? "" : "#extension GL_EXT_tessellation_shader : require";
-
+	const glw::GLenum tessErr = ctx.getContextInfo().isExtensionSupported("GL_NV_gpu_shader5") ? GL_NO_ERROR : GL_INVALID_OPERATION;
+	map<string, string> args = constructSpecializationMap(ctx);
 	glu::ShaderProgram program(ctx.getRenderContext(),
 							   makeTessPipelineSources(tcu::StringTemplate(vertexShaderSource).specialize(args),
 													   tcu::StringTemplate(fragmentShaderSource).specialize(args),
@@ -248,6 +261,13 @@
 	tcu::TestLog& log = ctx.getLog();
 	log << program;
 
+	GLuint vao = 0;
+	if (!glu::isContextTypeES(ctx.getRenderContext().getType()))
+	{
+		ctx.glGenVertexArrays(1, &vao);
+		ctx.glBindVertexArray(vao);
+	}
+
 	ctx.glUseProgram(program.getProgram());
 	ctx.expectError(GL_NO_ERROR);
 
@@ -257,26 +277,35 @@
 	ctx.endSection();
 
 	ctx.glUseProgram(0);
+
+	if (vao)
+		ctx.glDeleteVertexArrays(1, &vao);
 }
 
 void invalid_program_state (NegativeTestContext& ctx)
 {
 	checkTessellationSupport(ctx);
 
-	const bool					isES32	= glu::contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2));
-	map<string, string>			args;
-	args["GLSL_VERSION_STRING"]			= isES32 ? getGLSLVersionDeclaration(glu::GLSL_VERSION_320_ES) : getGLSLVersionDeclaration(glu::GLSL_VERSION_310_ES);
-	args["GLSL_TESS_EXTENSION_STRING"]	= isES32 ? "" : "#extension GL_EXT_tessellation_shader : require";
+	const glu::RenderContext&	rc		= ctx.getRenderContext();
+	map<string, string>			args	= constructSpecializationMap(ctx);
+
+	// for gl4.5 we need to add per vertex sections
+	if (!glu::isContextTypeES(rc.getType()))
+	{
+		args["GLSL_PER_VERTEX_OUT"]		= "out gl_PerVertex { vec4 gl_Position; };\n";
+		args["GLSL_PER_VERTEX_IN_ARR"]	= "in gl_PerVertex { vec4 gl_Position; } gl_in[];\n";
+		args["GLSL_PER_VERTEX_OUT_ARR"] = "out gl_PerVertex { vec4 gl_Position; } gl_out[];\n";
+	}
 
 	glu::FragmentSource frgSource(tcu::StringTemplate(fragmentShaderSource).specialize(args));
 	glu::TessellationControlSource tessCtrlSource(tcu::StringTemplate(tessControlShaderSource).specialize(args));
 	glu::TessellationEvaluationSource tessEvalSource(tcu::StringTemplate(tessEvalShaderSource).specialize(args));
 
-	glu::ProgramPipeline pipeline(ctx.getRenderContext());
+	glu::ProgramPipeline pipeline(rc);
 
-	glu::ShaderProgram	fragProgram	(ctx.getRenderContext(), glu::ProgramSources() << glu::ProgramSeparable(true) << frgSource);
-	glu::ShaderProgram	tessCtrlProgram	(ctx.getRenderContext(), glu::ProgramSources() << glu::ProgramSeparable(true) << tessCtrlSource);
-	glu::ShaderProgram	tessEvalProgram	(ctx.getRenderContext(), glu::ProgramSources() << glu::ProgramSeparable(true) << tessEvalSource);
+	glu::ShaderProgram	fragProgram	(rc, glu::ProgramSources() << glu::ProgramSeparable(true) << frgSource);
+	glu::ShaderProgram	tessCtrlProgram	(rc, glu::ProgramSources() << glu::ProgramSeparable(true) << tessCtrlSource);
+	glu::ShaderProgram	tessEvalProgram	(rc, glu::ProgramSources() << glu::ProgramSeparable(true) << tessEvalSource);
 
 	tcu::TestLog& log = ctx.getLog();
 	log << fragProgram << tessCtrlProgram << tessEvalProgram;
@@ -313,11 +342,7 @@
 														"	gl_out[gl_InvocationID].gl_Position = gl_in[gl_InvocationID].gl_Position;\n"
 														"}\n";
 
-	const bool					isES32	= glu::contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2));
-	map<string, string>			args;
-	args["GLSL_VERSION_STRING"]			= isES32 ? getGLSLVersionDeclaration(glu::GLSL_VERSION_320_ES) : getGLSLVersionDeclaration(glu::GLSL_VERSION_310_ES);
-	args["GLSL_TESS_EXTENSION_STRING"]	= isES32 ? "" : "#extension GL_EXT_tessellation_shader : require";
-
+	map<string, string> args = constructSpecializationMap(ctx);
 	int maxPatchVertices= 0;
 
 	ctx.beginSection("Output vertex count exceeds GL_MAX_PATCH_VERTICES.");
diff --git a/modules/gles31/functional/es31fNegativeTextureApiTests.cpp b/modules/gles31/functional/es31fNegativeTextureApiTests.cpp
index c2f9d47..58c513f 100644
--- a/modules/gles31/functional/es31fNegativeTextureApiTests.cpp
+++ b/modules/gles31/functional/es31fNegativeTextureApiTests.cpp
@@ -75,6 +75,12 @@
 	}
 }
 
+static bool supportsES32orGL45(NegativeTestContext& ctx)
+{
+	return contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) ||
+		   contextSupports(ctx.getRenderContext().getType(), glu::ApiType::core(4, 5));
+}
+
 #define FOR_CUBE_FACES(FACE_GL_VAR, BODY)												\
 	do																					\
 	{																					\
@@ -150,7 +156,7 @@
 	ctx.glBindTexture(GL_TEXTURE_3D, texture[3]);
 	ctx.expectError(GL_INVALID_OPERATION);
 
-	if (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_cube_map_array"))
+	if (supportsES32orGL45(ctx) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_cube_map_array"))
 	{
 		ctx.glBindTexture(GL_TEXTURE_CUBE_MAP_ARRAY, texture[0]);
 		ctx.expectError(GL_INVALID_OPERATION);
@@ -401,55 +407,58 @@
 
 void compressedteximage2d_invalid_border (NegativeTestContext& ctx)
 {
+	bool	isES	= glu::isContextTypeES(ctx.getRenderContext().getType());
+	GLenum	error	= isES ? GL_INVALID_VALUE : GL_INVALID_OPERATION;
+
 	ctx.beginSection("GL_INVALID_VALUE is generated if border is not 0.");
 
 	ctx.beginSection("GL_TEXTURE_2D target");
 	ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0, 1, 0, 0);
-	ctx.expectError(GL_INVALID_VALUE);
+	ctx.expectError(error);
 	ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0, -1, 0, 0);
-	ctx.expectError(GL_INVALID_VALUE);
+	ctx.expectError(error);
 	ctx.endSection();
 
 	ctx.beginSection("GL_TEXTURE_CUBE_MAP_POSITIVE_X target");
 	ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0, 1, 0, 0);
-	ctx.expectError(GL_INVALID_VALUE);
+	ctx.expectError(error);
 	ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0, -1, 0, 0);
-	ctx.expectError(GL_INVALID_VALUE);
+	ctx.expectError(error);
 	ctx.endSection();
 
 	ctx.beginSection("GL_TEXTURE_CUBE_MAP_POSITIVE_Y target");
 	ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0, 1, 0, 0);
-	ctx.expectError(GL_INVALID_VALUE);
+	ctx.expectError(error);
 	ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0, -1, 0, 0);
-	ctx.expectError(GL_INVALID_VALUE);
+	ctx.expectError(error);
 	ctx.endSection();
 
 	ctx.beginSection("GL_TEXTURE_CUBE_MAP_POSITIVE_Z target");
 	ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0, 1, 0, 0);
-	ctx.expectError(GL_INVALID_VALUE);
+	ctx.expectError(error);
 	ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0, -1, 0, 0);
-	ctx.expectError(GL_INVALID_VALUE);
+	ctx.expectError(error);
 	ctx.endSection();
 
 	ctx.beginSection("GL_TEXTURE_CUBE_MAP_NEGATIVE_X target");
 	ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0, 1, 0, 0);
-	ctx.expectError(GL_INVALID_VALUE);
+	ctx.expectError(error);
 	ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0, -1, 0, 0);
-	ctx.expectError(GL_INVALID_VALUE);
+	ctx.expectError(error);
 	ctx.endSection();
 
 	ctx.beginSection("GL_TEXTURE_CUBE_MAP_NEGATIVE_Y target");
 	ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0, 1, 0, 0);
-	ctx.expectError(GL_INVALID_VALUE);
+	ctx.expectError(error);
 	ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0, -1, 0, 0);
-	ctx.expectError(GL_INVALID_VALUE);
+	ctx.expectError(error);
 	ctx.endSection();
 
 	ctx.beginSection("GL_TEXTURE_CUBE_MAP_NEGATIVE_Z target");
 	ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0, 1, 0, 0);
-	ctx.expectError(GL_INVALID_VALUE);
+	ctx.expectError(error);
 	ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0, -1, 0, 0);
-	ctx.expectError(GL_INVALID_VALUE);
+	ctx.expectError(error);
 	ctx.endSection();
 
 	ctx.endSection();
@@ -480,7 +489,7 @@
 	ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC, 1, 1, 0, divRoundUp(1, 4) * divRoundUp(1, 4) * 16 - 1, 0);
 	ctx.expectError(GL_INVALID_VALUE);
 
-	if (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)))
+	if (supportsES32orGL45(ctx))
 	{
 	    ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA_ASTC_4x4, 1, 1, 0, divRoundUp(1, 4) * divRoundUp(1, 4) * 16 - 1, 0);
 	    ctx.expectError(GL_INVALID_VALUE);
@@ -964,6 +973,9 @@
 
 void copytexsubimage2d_texture_internalformat (NegativeTestContext& ctx)
 {
+	if (!glu::isContextTypeES(ctx.getRenderContext().getType()))
+		return;
+
 	GLuint texture = 0x1234;
 	ctx.glGenTextures	(1, &texture);
 	ctx.glBindTexture	(GL_TEXTURE_2D, texture);
@@ -1178,29 +1190,32 @@
 	ctx.expectError(GL_INVALID_OPERATION);
 	ctx.endSection();
 
-	ctx.beginSection("GL_INVALID_OPERATION is generated if the zero level array is stored in a compressed internal format.");
-	ctx.glBindTexture(GL_TEXTURE_2D, texture[1]);
-	ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0, 0, 0, 0);
-	ctx.glGenerateMipmap(GL_TEXTURE_2D);
-	ctx.expectError(GL_INVALID_OPERATION);
-	ctx.endSection();
-
-	ctx.beginSection("GL_INVALID_OPERATION is generated if the level base array was not specified with an unsized internal format or a sized internal format that is both color-renderable and texture-filterable.");
-	ctx.glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB8_SNORM, 0, 0, 0, GL_RGB, GL_BYTE, 0);
-	ctx.glGenerateMipmap(GL_TEXTURE_2D);
-	ctx.expectError(GL_INVALID_OPERATION);
-	ctx.glTexImage2D(GL_TEXTURE_2D, 0, GL_R8I, 0, 0, 0, GL_RED_INTEGER, GL_BYTE, 0);
-	ctx.glGenerateMipmap(GL_TEXTURE_2D);
-	ctx.expectError(GL_INVALID_OPERATION);
-
-	if (!(ctx.getContextInfo().isExtensionSupported("GL_EXT_color_buffer_float") && ctx.getContextInfo().isExtensionSupported("GL_OES_texture_float_linear")))
+	if (glu::isContextTypeES(ctx.getRenderContext().getType()))
 	{
-		ctx.glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA32F, 0, 0, 0, GL_RGBA, GL_FLOAT, 0);
+		ctx.beginSection("GL_INVALID_OPERATION is generated if the zero level array is stored in a compressed internal format.");
+		ctx.glBindTexture(GL_TEXTURE_2D, texture[1]);
+		ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0, 0, 0, 0);
 		ctx.glGenerateMipmap(GL_TEXTURE_2D);
 		ctx.expectError(GL_INVALID_OPERATION);
-	}
+		ctx.endSection();
 
-	ctx.endSection();
+		ctx.beginSection("GL_INVALID_OPERATION is generated if the level base array was not specified with an unsized internal format or a sized internal format that is both color-renderable and texture-filterable.");
+		ctx.glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB8_SNORM, 0, 0, 0, GL_RGB, GL_BYTE, 0);
+		ctx.glGenerateMipmap(GL_TEXTURE_2D);
+		ctx.expectError(GL_INVALID_OPERATION);
+		ctx.glTexImage2D(GL_TEXTURE_2D, 0, GL_R8I, 0, 0, 0, GL_RED_INTEGER, GL_BYTE, 0);
+		ctx.glGenerateMipmap(GL_TEXTURE_2D);
+		ctx.expectError(GL_INVALID_OPERATION);
+
+		if (!(ctx.getContextInfo().isExtensionSupported("GL_EXT_color_buffer_float") && ctx.getContextInfo().isExtensionSupported("GL_OES_texture_float_linear")))
+		{
+			ctx.glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA32F, 0, 0, 0, GL_RGBA, GL_FLOAT, 0);
+			ctx.glGenerateMipmap(GL_TEXTURE_2D);
+			ctx.expectError(GL_INVALID_OPERATION);
+		}
+
+		ctx.endSection();
+	}
 
 	ctx.glDeleteTextures(2, texture);
 }
@@ -1267,16 +1282,19 @@
 	ctx.endSection();
 
 	ctx.beginSection("GL_INVALID_OPERATION is generated if the combination of internalFormat, format and type is invalid.");
-	ctx.glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
-	ctx.expectError(GL_INVALID_OPERATION);
 	ctx.glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 0, GL_RGB, GL_UNSIGNED_SHORT_4_4_4_4, 0);
 	ctx.expectError(GL_INVALID_OPERATION);
 	ctx.glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB5_A1, 1, 1, 0, GL_RGB, GL_UNSIGNED_SHORT_5_5_5_1, 0);
 	ctx.expectError(GL_INVALID_OPERATION);
 	ctx.glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB10_A2, 1, 1, 0, GL_RGB, GL_UNSIGNED_INT_2_10_10_10_REV, 0);
 	ctx.expectError(GL_INVALID_OPERATION);
-	ctx.glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA32UI, 1, 1, 0, GL_RGBA_INTEGER, GL_INT, 0);
-	ctx.expectError(GL_INVALID_OPERATION);
+	if (glu::isContextTypeES(ctx.getRenderContext().getType()))
+	{
+		ctx.glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
+		ctx.expectError(GL_INVALID_OPERATION);
+		ctx.glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA32UI, 1, 1, 0, GL_RGBA_INTEGER, GL_INT, 0);
+		ctx.expectError(GL_INVALID_OPERATION);
+	}
 	ctx.endSection();
 }
 
@@ -1584,8 +1602,11 @@
 	ctx.expectError(GL_INVALID_OPERATION);
 	ctx.glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 4, 4, GL_RGBA_INTEGER, GL_UNSIGNED_INT, 0);
 	ctx.expectError(GL_INVALID_OPERATION);
-	ctx.glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 4, 4, GL_RGB, GL_FLOAT, 0);
-	ctx.expectError(GL_INVALID_OPERATION);
+	if (glu::isContextTypeES(ctx.getRenderContext().getType()))
+	{
+		ctx.glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 4, 4, GL_RGB, GL_FLOAT, 0);
+		ctx.expectError(GL_INVALID_OPERATION);
+	}
 	ctx.endSection();
 
 	ctx.glDeleteTextures	(1, &texture);
@@ -1800,7 +1821,7 @@
 	ctx.expectError(GL_INVALID_VALUE);
 	ctx.endSection();
 
-	if (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)))
+	if (supportsES32orGL45(ctx))
 	{
 		ctx.beginSection("GL_INVALID_ENUM is generated if pname is a non-scalar parameter.");
 		ctx.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_BORDER_COLOR, 0);
@@ -1830,7 +1851,7 @@
 	ctx.glTexParameteri(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_COMPARE_FUNC, textureMode);
 	ctx.expectError(GL_INVALID_ENUM);
 
-	if (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_storage_multisample_2d_array"))
+	if (supportsES32orGL45(ctx) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_storage_multisample_2d_array"))
 	{
 		ctx.glTexParameteri(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_BORDER_COLOR, textureMode);
 		ctx.expectError(GL_INVALID_ENUM);
@@ -1859,7 +1880,7 @@
 	ctx.glTexParameteri(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_BASE_LEVEL, 1);
 	ctx.expectError(GL_INVALID_OPERATION);
 
-	if (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_storage_multisample_2d_array"))
+	if (supportsES32orGL45(ctx) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_storage_multisample_2d_array"))
 	{
 		ctx.glTexParameteri(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_BASE_LEVEL, 1);
 		ctx.expectError(GL_INVALID_OPERATION);
@@ -1921,7 +1942,7 @@
 	ctx.expectError(GL_INVALID_VALUE);
 	ctx.endSection();
 
-	if (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)))
+	if (supportsES32orGL45(ctx))
 	{
 		ctx.beginSection("GL_INVALID_ENUM is generated if pname is a non-scalar parameter.");
 		ctx.glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_BORDER_COLOR, 0.0f);
@@ -1951,7 +1972,7 @@
 	ctx.glTexParameterf(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_COMPARE_FUNC, textureMode);
 	ctx.expectError(GL_INVALID_ENUM);
 
-	if (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_storage_multisample_2d_array"))
+	if (supportsES32orGL45(ctx) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_storage_multisample_2d_array"))
 	{
 		ctx.glTexParameterf(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_BORDER_COLOR, textureMode);
 		ctx.expectError(GL_INVALID_ENUM);
@@ -1980,7 +2001,7 @@
 	ctx.glTexParameterf(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_BASE_LEVEL, 1.0f);
 	ctx.expectError(GL_INVALID_OPERATION);
 
-	if (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_storage_multisample_2d_array"))
+	if (supportsES32orGL45(ctx) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_storage_multisample_2d_array"))
 	{
 		ctx.glTexParameterf(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_BASE_LEVEL, 1.0f);
 		ctx.expectError(GL_INVALID_OPERATION);
@@ -2066,7 +2087,7 @@
 	ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_COMPARE_FUNC, &params[0]);
 	ctx.expectError(GL_INVALID_ENUM);
 
-	if (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_storage_multisample_2d_array"))
+	if (supportsES32orGL45(ctx) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_storage_multisample_2d_array"))
 	{
 		ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_BORDER_COLOR, &params[0]);
 		ctx.expectError(GL_INVALID_ENUM);
@@ -2096,7 +2117,7 @@
 	ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_BASE_LEVEL, &params[0]);
 	ctx.expectError(GL_INVALID_OPERATION);
 
-	if (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_storage_multisample_2d_array"))
+	if (supportsES32orGL45(ctx) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_storage_multisample_2d_array"))
 	{
 		params[0] = 1;
 		ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_BASE_LEVEL, &params[0]);
@@ -2183,7 +2204,7 @@
 	ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_COMPARE_FUNC, &params[0]);
 	ctx.expectError(GL_INVALID_ENUM);
 
-	if (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_storage_multisample_2d_array"))
+	if (supportsES32orGL45(ctx) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_storage_multisample_2d_array"))
 	{
 		ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_BORDER_COLOR, &params[0]);
 		ctx.expectError(GL_INVALID_ENUM);
@@ -2213,7 +2234,7 @@
 	ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_BASE_LEVEL, &params[0]);
 	ctx.expectError(GL_INVALID_OPERATION);
 
-	if (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_storage_multisample_2d_array"))
+	if (supportsES32orGL45(ctx) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_storage_multisample_2d_array"))
 	{
 		params[0] = 1.0f;
 		ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_BASE_LEVEL, &params[0]);
@@ -2228,7 +2249,7 @@
 
 void texparameterIiv (NegativeTestContext& ctx)
 {
-	if (!contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)))
+	if (!supportsES32orGL45(ctx))
 		throw tcu::NotSupportedError("glTexParameterIiv is not supported.", DE_NULL, __FILE__, __LINE__);
 
 	GLint textureMode[] = { GL_DEPTH_COMPONENT, GL_STENCIL_INDEX };
@@ -2338,7 +2359,7 @@
 
 void texparameterIuiv (NegativeTestContext& ctx)
 {
-	if (!contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)))
+	if (!supportsES32orGL45(ctx))
 		throw tcu::NotSupportedError("glTexParameterIuiv is not supported.", DE_NULL, __FILE__, __LINE__);
 
 	GLuint textureMode[] = { GL_DEPTH_COMPONENT, GL_STENCIL_INDEX };
@@ -2682,19 +2703,23 @@
 	ctx.endSection();
 
 	ctx.beginSection("GL_INVALID_OPERATION is generated if the combination of internalFormat, format and type is invalid.");
-	ctx.glTexImage3D(GL_TEXTURE_3D, 0, GL_RGB, 1, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
-	ctx.expectError(GL_INVALID_OPERATION);
 	ctx.glTexImage3D(GL_TEXTURE_3D, 0, GL_RGBA, 1, 1, 1, 0, GL_RGB, GL_UNSIGNED_SHORT_4_4_4_4, 0);
 	ctx.expectError(GL_INVALID_OPERATION);
 	ctx.glTexImage3D(GL_TEXTURE_3D, 0, GL_RGB5_A1, 1, 1, 1, 0, GL_RGB, GL_UNSIGNED_SHORT_5_5_5_1, 0);
 	ctx.expectError(GL_INVALID_OPERATION);
 	ctx.glTexImage3D(GL_TEXTURE_3D, 0, GL_RGB10_A2, 1, 1, 1, 0, GL_RGB, GL_UNSIGNED_INT_2_10_10_10_REV, 0);
 	ctx.expectError(GL_INVALID_OPERATION);
-	ctx.glTexImage3D(GL_TEXTURE_3D, 0, GL_RGBA32UI, 1, 1, 1, 0, GL_RGBA_INTEGER, GL_INT, 0);
-	ctx.expectError(GL_INVALID_OPERATION);
+
+	if (glu::isContextTypeES(ctx.getRenderContext().getType()))
+	{
+		ctx.glTexImage3D(GL_TEXTURE_3D, 0, GL_RGB, 1, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
+		ctx.expectError(GL_INVALID_OPERATION);
+		ctx.glTexImage3D(GL_TEXTURE_3D, 0, GL_RGBA32UI, 1, 1, 1, 0, GL_RGBA_INTEGER, GL_INT, 0);
+		ctx.expectError(GL_INVALID_OPERATION);
+	}
 	ctx.endSection();
 
-	if (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_cube_map_array"))
+	if (supportsES32orGL45(ctx) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_cube_map_array"))
 	{
 		ctx.beginSection("GL_INVALID_VALUE is generated if target is GL_TEXTURE_CUBE_MAP_ARRAY and width and height are not equal.");
 		ctx.glTexImage3D(GL_TEXTURE_CUBE_MAP_ARRAY, 0, GL_RGBA, 2, 1, 6, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
@@ -2716,7 +2741,7 @@
 	ctx.glTexImage3D(GL_TEXTURE_2D_ARRAY, -1, GL_RGB, 1, 1, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
 	ctx.expectError(GL_INVALID_VALUE);
 
-	if (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_cube_map_array"))
+	if (supportsES32orGL45(ctx) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_cube_map_array"))
 	{
 		ctx.glTexImage3D(GL_TEXTURE_CUBE_MAP_ARRAY, -1, GL_RGBA, 1, 1, 6, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
 		ctx.expectError(GL_INVALID_VALUE);
@@ -2762,7 +2787,7 @@
 	ctx.glTexImage3D(GL_TEXTURE_2D_ARRAY, 0, GL_RGBA, -1, -1, -1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
 	ctx.expectError(GL_INVALID_VALUE);
 
-	if (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_cube_map_array"))
+	if (supportsES32orGL45(ctx) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_cube_map_array"))
 	{
 		ctx.glTexImage3D(GL_TEXTURE_CUBE_MAP_ARRAY, 0, GL_RGBA, -1, 1, 6, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
 		ctx.expectError(GL_INVALID_VALUE);
@@ -2817,7 +2842,7 @@
 	ctx.glTexImage3D(GL_TEXTURE_2D_ARRAY, 0, GL_RGB, 1, 1, 1, 2, GL_RGB, GL_UNSIGNED_BYTE, 0);
 	ctx.expectError(GL_INVALID_VALUE);
 
-	if (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_cube_map_array"))
+	if (supportsES32orGL45(ctx) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_cube_map_array"))
 	{
 		ctx.glTexImage3D(GL_TEXTURE_CUBE_MAP_ARRAY, 1, GL_RGBA, 1, 1, 6, -1, GL_RGBA, GL_UNSIGNED_BYTE, 0);
 		ctx.expectError(GL_INVALID_VALUE);
@@ -2903,8 +2928,11 @@
 	ctx.expectError(GL_INVALID_OPERATION);
 	ctx.glTexSubImage3D(GL_TEXTURE_3D, 0, 0, 0, 0, 4, 4, 4, GL_RGBA_INTEGER, GL_UNSIGNED_INT, 0);
 	ctx.expectError(GL_INVALID_OPERATION);
-	ctx.glTexSubImage3D(GL_TEXTURE_3D, 0, 0, 0, 0, 4, 4, 4, GL_RGB, GL_FLOAT, 0);
-	ctx.expectError(GL_INVALID_OPERATION);
+	if (glu::isContextTypeES(ctx.getRenderContext().getType()))
+	{
+		ctx.glTexSubImage3D(GL_TEXTURE_3D, 0, 0, 0, 0, 4, 4, 4, GL_RGB, GL_FLOAT, 0);
+		ctx.expectError(GL_INVALID_OPERATION);
+	}
 	ctx.endSection();
 
 	ctx.glDeleteTextures	(1, &texture);
@@ -2926,7 +2954,7 @@
 	ctx.glTexSubImage3D(GL_TEXTURE_2D_ARRAY, -1, 0, 0, 0, 0, 0, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
 	ctx.expectError(GL_INVALID_VALUE);
 
-	if (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_cube_map_array"))
+	if (supportsES32orGL45(ctx) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_cube_map_array"))
 	{
 		ctx.glBindTexture		(GL_TEXTURE_CUBE_MAP_ARRAY, textures[2]);
 		ctx.glTexImage3D		(GL_TEXTURE_CUBE_MAP_ARRAY, 0, GL_RGBA, 4, 4, 6, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
@@ -2995,7 +3023,7 @@
 	ctx.glTexSubImage3D(GL_TEXTURE_2D_ARRAY, 0, -1, -1, -1, 0, 0, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
 	ctx.expectError(GL_INVALID_VALUE);
 
-	if (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_cube_map_array"))
+	if (supportsES32orGL45(ctx) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_cube_map_array"))
 	{
 		ctx.glBindTexture		(GL_TEXTURE_CUBE_MAP_ARRAY, textures[2]);
 		ctx.glTexImage3D		(GL_TEXTURE_CUBE_MAP_ARRAY, 0, GL_RGBA, 4, 4, 6, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
@@ -3054,7 +3082,7 @@
 	ctx.glTexSubImage3D(GL_TEXTURE_3D, 0, 0, 0, 0, -1, -1, -1, GL_RGBA, GL_UNSIGNED_BYTE, 0);
 	ctx.expectError(GL_INVALID_VALUE);
 
-	if (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_cube_map_array"))
+	if (supportsES32orGL45(ctx) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_cube_map_array"))
 	{
 		ctx.glTexSubImage3D(GL_TEXTURE_CUBE_MAP_ARRAY, 0, 0, 0, 0, -1, 0, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
 		ctx.expectError(GL_INVALID_VALUE);
@@ -3146,7 +3174,7 @@
 	ctx.glCopyTexSubImage3D(GL_TEXTURE_2D_ARRAY, -1, 0, 0, 0, 0, 0, 4, 4);
 	ctx.expectError(GL_INVALID_VALUE);
 
-	if (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_cube_map_array"))
+	if (supportsES32orGL45(ctx) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_cube_map_array"))
 	{
 		ctx.glBindTexture(GL_TEXTURE_CUBE_MAP_ARRAY, textures[2]);
 		ctx.glTexImage3D(GL_TEXTURE_CUBE_MAP_ARRAY, 0, GL_RGBA, 4, 4, 6, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
@@ -3184,7 +3212,7 @@
 	ctx.expectError(GL_INVALID_VALUE);
 	ctx.endSection();
 
-	if (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_cube_map_array"))
+	if (supportsES32orGL45(ctx) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_cube_map_array"))
 	{
 		ctx.glBindTexture(GL_TEXTURE_CUBE_MAP_ARRAY, textures[2]);
 		ctx.glTexImage3D(GL_TEXTURE_CUBE_MAP_ARRAY, 0, GL_RGBA, 4, 4, 6, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
@@ -3350,20 +3378,25 @@
 	ctx.expectError(GL_INVALID_VALUE);
 	ctx.glCompressedTexImage3D(GL_TEXTURE_2D_ARRAY, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, maxTextureSize, 0, 0, 0, 0);
 	ctx.expectError(GL_INVALID_VALUE);
-	ctx.glCompressedTexImage3D(GL_TEXTURE_2D_ARRAY, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0, maxTextureLayers, 0, 0, 0);
-	ctx.expectError(GL_INVALID_VALUE);
 	ctx.glCompressedTexImage3D(GL_TEXTURE_2D_ARRAY, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, maxTextureSize, maxTextureSize, maxTextureLayers, 0, 0, 0);
 	ctx.expectError(GL_INVALID_VALUE);
+	if (glu::isContextTypeES(ctx.getRenderContext().getType()))
+	{
+		ctx.glCompressedTexImage3D(GL_TEXTURE_2D_ARRAY, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0, maxTextureLayers, 0, 0, 0);
+		ctx.expectError(GL_INVALID_VALUE);
+	}
 	ctx.endSection();
 }
 
 void compressedteximage3d_invalid_border (NegativeTestContext& ctx)
 {
+	bool	isES	= glu::isContextTypeES(ctx.getRenderContext().getType());
+	GLenum	error	= isES ? GL_INVALID_VALUE : GL_INVALID_OPERATION;
 	ctx.beginSection("GL_INVALID_VALUE is generated if border is not 0.");
 	ctx.glCompressedTexImage3D(GL_TEXTURE_2D_ARRAY, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0, 0, -1, 0, 0);
-	ctx.expectError(GL_INVALID_VALUE);
+	ctx.expectError(error);
 	ctx.glCompressedTexImage3D(GL_TEXTURE_2D_ARRAY, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0, 0, 1, 0, 0);
-	ctx.expectError(GL_INVALID_VALUE);
+	ctx.expectError(error);
 	ctx.endSection();
 }
 
@@ -3383,7 +3416,7 @@
 
 void compressedteximage3d_invalid_width_height (NegativeTestContext& ctx)
 {
-	if (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_cube_map_array"))
+	if (supportsES32orGL45(ctx) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_cube_map_array"))
 	{
 		const int				width		= 4;
 		const int				height		= 6;
@@ -3656,7 +3689,7 @@
 	ctx.glTexStorage2D(GL_TEXTURE_2D, 1, GL_RGBA8, 0, 0);
 	ctx.expectError(GL_INVALID_VALUE);
 
-	if (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)))
+	if (supportsES32orGL45(ctx))
 	{
 		ctx.glBindTexture(GL_TEXTURE_CUBE_MAP, textures[1]);
 		ctx.expectError(GL_NO_ERROR);
@@ -3676,14 +3709,14 @@
 {
 	deUint32	textures[]		= {0x1234, 0x1234};
 	deInt32		immutable		= 0x1234;
-	const bool	supportsES32	= contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2));
+	const bool	isES32orGL45	= supportsES32orGL45(ctx);
 
 	ctx.beginSection("GL_INVALID_OPERATION is generated if the default texture object is curently bound to target.");
 	ctx.glBindTexture(GL_TEXTURE_2D, 0);
 	ctx.glTexStorage2D(GL_TEXTURE_2D, 1, GL_RGBA8, 16, 16);
 	ctx.expectError(GL_INVALID_OPERATION);
 
-	if (supportsES32)
+	if (isES32orGL45)
 	{
 		ctx.glBindTexture(GL_TEXTURE_CUBE_MAP, 0);
 		ctx.glTexStorage2D(GL_TEXTURE_CUBE_MAP, 1, GL_RGBA8, 16, 16);
@@ -3704,7 +3737,7 @@
 	ctx.glTexStorage2D(GL_TEXTURE_2D, 1, GL_RGBA8, 16, 16);
 	ctx.expectError(GL_INVALID_OPERATION);
 
-	if (supportsES32)
+	if (isES32orGL45)
 	{
 		ctx.glBindTexture(GL_TEXTURE_CUBE_MAP, textures[1]);
 		ctx.glGetTexParameteriv(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_IMMUTABLE_FORMAT, &immutable);
@@ -3725,12 +3758,12 @@
 {
 	deUint32	textures[]		= {0x1234, 0x1234};
 	deUint32	log2MaxSize		= deLog2Floor32(deMax32(16, 16)) + 1 + 1;
-	const bool	supportsES32	= contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2));
+	const bool	isES32orGL45	= supportsES32orGL45(ctx);
 
 	ctx.glGenTextures(2, textures);
 	ctx.glBindTexture(GL_TEXTURE_2D, textures[0]);
 
-	if (supportsES32)
+	if (isES32orGL45)
 		ctx.glBindTexture(GL_TEXTURE_CUBE_MAP, textures[1]);
 
 	ctx.expectError(GL_NO_ERROR);
@@ -3741,7 +3774,7 @@
 	ctx.glTexStorage2D(GL_TEXTURE_2D, 0, GL_RGBA8, 0, 0);
 	ctx.expectError(GL_INVALID_VALUE);
 
-	if (supportsES32)
+	if (isES32orGL45)
 	{
 		ctx.glTexStorage2D(GL_TEXTURE_CUBE_MAP, 0, GL_RGBA8, 16, 16);
 		ctx.expectError(GL_INVALID_VALUE);
@@ -3754,7 +3787,7 @@
 	ctx.glTexStorage2D(GL_TEXTURE_2D, log2MaxSize, GL_RGBA8, 16, 16);
 	ctx.expectError(GL_INVALID_OPERATION);
 
-	if (supportsES32)
+	if (isES32orGL45)
 	{
 		ctx.glTexStorage2D(GL_TEXTURE_CUBE_MAP, log2MaxSize, GL_RGBA8, 16, 16);
 		ctx.expectError(GL_INVALID_OPERATION);
@@ -3800,7 +3833,7 @@
 	ctx.glTexStorage3D(GL_TEXTURE_3D, 1, GL_RGBA8, 0, 0, 0);
 	ctx.expectError(GL_INVALID_VALUE);
 
-	if (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_cube_map_array"))
+	if (supportsES32orGL45(ctx) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_cube_map_array"))
 	{
 		ctx.glBindTexture(GL_TEXTURE_CUBE_MAP_ARRAY, textures[1]);
 		ctx.expectError(GL_NO_ERROR);
@@ -3828,7 +3861,7 @@
 	ctx.glTexStorage3D	(GL_TEXTURE_3D, 1, GL_RGBA8, 4, 4, 4);
 	ctx.expectError		(GL_INVALID_OPERATION);
 
-	if (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_cube_map_array"))
+	if (supportsES32orGL45(ctx) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_cube_map_array"))
 	{
 		ctx.glBindTexture	(GL_TEXTURE_CUBE_MAP_ARRAY, 0);
 		ctx.glTexStorage3D	(GL_TEXTURE_CUBE_MAP_ARRAY, 1, GL_RGBA8, 4, 4, 6);
@@ -3849,7 +3882,7 @@
 	ctx.glTexStorage3D	(GL_TEXTURE_3D, 1, GL_RGBA8, 4, 4, 4);
 	ctx.expectError		(GL_INVALID_OPERATION);
 
-	if (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_cube_map_array"))
+	if (supportsES32orGL45(ctx) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_cube_map_array"))
 	{
 		ctx.glBindTexture	(GL_TEXTURE_CUBE_MAP_ARRAY, textures[1]);
 		ctx.glGetTexParameteriv(GL_TEXTURE_CUBE_MAP_ARRAY, GL_TEXTURE_IMMUTABLE_FORMAT, &immutable);
@@ -3870,7 +3903,7 @@
 {
 	deUint32	textures[]		= {0x1234, 0x1234};
 	deUint32	log2MaxSize		= deLog2Floor32(8) + 1 + 1;
-	const bool	supportsES32	= contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2));
+	const bool	isES32orGL45	= supportsES32orGL45(ctx);
 	ctx.glGenTextures(2, textures);
 	ctx.glBindTexture(GL_TEXTURE_3D, textures[0]);
 
@@ -3880,7 +3913,7 @@
 	ctx.glTexStorage3D(GL_TEXTURE_3D, 0, GL_RGBA8, 0, 0, 0);
 	ctx.expectError(GL_INVALID_VALUE);
 
-	if (supportsES32 || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_cube_map_array"))
+	if (isES32orGL45 || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_cube_map_array"))
 	{
 		ctx.glBindTexture(GL_TEXTURE_CUBE_MAP_ARRAY, textures[1]);
 		ctx.glTexStorage3D(GL_TEXTURE_CUBE_MAP_ARRAY, 0, GL_RGBA8, 4, 4, 6);
@@ -3900,7 +3933,7 @@
 	ctx.glTexStorage3D	(GL_TEXTURE_3D, log2MaxSize, GL_RGBA8, 8, 8, 8);
 	ctx.expectError		(GL_INVALID_OPERATION);
 
-	if (supportsES32 || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_cube_map_array"))
+	if (isES32orGL45 || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_cube_map_array"))
 	{
 		ctx.glTexStorage3D	(GL_TEXTURE_CUBE_MAP_ARRAY, log2MaxSize, GL_RGBA8, 2, 2, 6);
 		ctx.expectError		(GL_INVALID_OPERATION);
@@ -3992,7 +4025,7 @@
 
 void srgb_decode_texparameterIiv (NegativeTestContext& ctx)
 {
-	if (!contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)))
+	if (!supportsES32orGL45(ctx))
 		TCU_THROW(NotSupportedError,"glTexParameterIiv is not supported.");
 
 	if (!ctx.isExtensionSupported("GL_EXT_texture_sRGB_decode"))
@@ -4016,7 +4049,7 @@
 
 void srgb_decode_texparameterIuiv (NegativeTestContext& ctx)
 {
-	if (!contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)))
+	if (!supportsES32orGL45(ctx))
 		TCU_THROW(NotSupportedError,"glTexParameterIuiv is not supported.");
 
 	if (!ctx.isExtensionSupported("GL_EXT_texture_sRGB_decode"))
diff --git a/modules/gles31/functional/es31fNegativeVertexArrayApiTests.cpp b/modules/gles31/functional/es31fNegativeVertexArrayApiTests.cpp
index 977e268..1c49ff5 100644
--- a/modules/gles31/functional/es31fNegativeVertexArrayApiTests.cpp
+++ b/modules/gles31/functional/es31fNegativeVertexArrayApiTests.cpp
@@ -66,6 +66,36 @@
 												"{\n"
 												"}\n";
 
+// Helper class that enables tests to be executed on GL4.5 context
+// and removes code redundancy in each test that requires it.
+class VAOHelper
+{
+public:
+	VAOHelper(NegativeTestContext& ctx, bool isES)
+		: m_vao(0)
+		, m_ctx(ctx)
+	{
+		// tests need vao only for GL4.5 context
+		if (isES)
+			return;
+
+		m_ctx.glGenVertexArrays(1, &m_vao);
+		m_ctx.glBindVertexArray(m_vao);
+		m_ctx.glVertexAttribPointer(0, 1, GL_BYTE, GL_TRUE, 0, NULL);
+		m_ctx.glEnableVertexAttribArray(0);
+	}
+
+	~VAOHelper()
+	{
+		if (m_vao)
+			m_ctx.glDeleteVertexArrays(1, &m_vao);
+	}
+
+private:
+	GLuint					m_vao;
+	NegativeTestContext&	m_ctx;
+};
+
 void vertex_attribf (NegativeTestContext& ctx)
 {
 	ctx.beginSection("GL_INVALID_VALUE is generated if index is greater than or equal to GL_MAX_VERTEX_ATTRIBS.");
@@ -127,6 +157,13 @@
 
 void vertex_attrib_pointer (NegativeTestContext& ctx)
 {
+	GLuint vao = 0;
+	ctx.glGenVertexArrays(1, &vao);
+	if (glu::isContextTypeES(ctx.getRenderContext().getType()))
+		ctx.glBindVertexArray(0);
+	else
+		ctx.glBindVertexArray(vao);
+
 	ctx.beginSection("GL_INVALID_ENUM is generated if type is not an accepted value.");
 	ctx.glVertexAttribPointer(0, 1, 0, GL_TRUE, 0, 0);
 	ctx.expectError(GL_INVALID_ENUM);
@@ -160,9 +197,7 @@
 	ctx.endSection();
 
 	ctx.beginSection("GL_INVALID_OPERATION is generated a non-zero vertex array object is bound, zero is bound to the GL_ARRAY_BUFFER buffer object binding point and the pointer argument is not NULL.");
-	GLuint vao = 0;
 	GLbyte offset = 1;
-	ctx.glGenVertexArrays(1, &vao);
 	ctx.glBindVertexArray(vao);
 	ctx.glBindBuffer(GL_ARRAY_BUFFER, 0);
 	ctx.expectError(GL_NO_ERROR);
@@ -178,6 +213,13 @@
 
 void vertex_attrib_i_pointer (NegativeTestContext& ctx)
 {
+	GLuint vao = 0;
+	ctx.glGenVertexArrays(1, &vao);
+	if (glu::isContextTypeES(ctx.getRenderContext().getType()))
+		ctx.glBindVertexArray(0);
+	else
+		ctx.glBindVertexArray(vao);
+
 	ctx.beginSection("GL_INVALID_ENUM is generated if type is not an accepted value.");
 	ctx.glVertexAttribIPointer(0, 1, 0, 0, 0);
 	ctx.expectError(GL_INVALID_ENUM);
@@ -204,9 +246,7 @@
 	ctx.endSection();
 
 	ctx.beginSection("GL_INVALID_OPERATION is generated a non-zero vertex array object is bound, zero is bound to the GL_ARRAY_BUFFER buffer object binding point and the pointer argument is not NULL.");
-	GLuint vao = 0;
 	GLbyte offset = 1;
-	ctx.glGenVertexArrays(1, &vao);
 	ctx.glBindVertexArray(vao);
 	ctx.glBindBuffer(GL_ARRAY_BUFFER, 0);
 	ctx.expectError(GL_NO_ERROR);
@@ -388,11 +428,13 @@
 
 void draw_arrays (NegativeTestContext& ctx)
 {
-	const bool					isES32	= glu::contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2));
+	const glu::RenderContext&	rc		= ctx.getRenderContext();
+	const bool					isES32	= glu::contextSupports(rc.getType(), glu::ApiType::es(3, 2));
 	GLuint						fbo		= 0;
 	map<string, string>			args;
 	args["GLSL_VERSION_STRING"]			= isES32 ? getGLSLVersionDeclaration(glu::GLSL_VERSION_320_ES) : getGLSLVersionDeclaration(glu::GLSL_VERSION_310_ES);
-	glu::ShaderProgram			program	(ctx.getRenderContext(), glu::makeVtxFragSources(tcu::StringTemplate(vertexShaderSource).specialize(args), tcu::StringTemplate(fragmentShaderSource).specialize(args)));
+	glu::ShaderProgram			program	(rc, glu::makeVtxFragSources(tcu::StringTemplate(vertexShaderSource).specialize(args), tcu::StringTemplate(fragmentShaderSource).specialize(args)));
+	VAOHelper					vao(ctx, glu::isContextTypeES(rc.getType()));
 
 	ctx.glUseProgram(program.getProgram());
 	ctx.expectError(GL_NO_ERROR);
@@ -422,7 +464,9 @@
 
 void draw_arrays_invalid_program (NegativeTestContext& ctx)
 {
-	GLuint fbo = 0;
+	GLuint	fbo		= 0;
+	VAOHelper vao(ctx, glu::isContextTypeES(ctx.getRenderContext().getType()));
+
 	ctx.glUseProgram(0);
 
 	ctx.beginSection("GL_INVALID_ENUM is generated if mode is not an accepted value.");
@@ -448,11 +492,13 @@
 
 void draw_arrays_incomplete_primitive (NegativeTestContext& ctx)
 {
-	const bool					isES32	= glu::contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2));
+	const glu::RenderContext&	rc		= ctx.getRenderContext();
+	const bool					isES32	= glu::contextSupports(rc.getType(), glu::ApiType::es(3, 2));
 	GLuint						fbo		= 0;
 	map<string, string>			args;
 	args["GLSL_VERSION_STRING"]			= isES32 ? getGLSLVersionDeclaration(glu::GLSL_VERSION_320_ES) : getGLSLVersionDeclaration(glu::GLSL_VERSION_310_ES);
-	glu::ShaderProgram			program	(ctx.getRenderContext(), glu::makeVtxFragSources(tcu::StringTemplate(vertexShaderSource).specialize(args), tcu::StringTemplate(fragmentShaderSource).specialize(args)));
+	glu::ShaderProgram			program	(rc, glu::makeVtxFragSources(tcu::StringTemplate(vertexShaderSource).specialize(args), tcu::StringTemplate(fragmentShaderSource).specialize(args)));
+	VAOHelper					vao(ctx, glu::isContextTypeES(rc.getType()));
 
 	ctx.glUseProgram(program.getProgram());
 	ctx.expectError(GL_NO_ERROR);
@@ -482,14 +528,17 @@
 
 void draw_elements (NegativeTestContext& ctx)
 {
-	const bool					isES32	= glu::contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2));
+	const glu::RenderContext&	rc		= ctx.getRenderContext();
+	const bool					isES	= glu::isContextTypeES(rc.getType());
+	const bool					isES32	= glu::contextSupports(rc.getType(), glu::ApiType::es(3, 2));
 	GLuint						fbo		= 0;
 	GLuint						buf		= 0;
 	GLuint						tfID	= 0;
 	GLbyte						indices[1]	= {0};
 	map<string, string>			args;
 	args["GLSL_VERSION_STRING"]			= isES32 ? getGLSLVersionDeclaration(glu::GLSL_VERSION_320_ES) : getGLSLVersionDeclaration(glu::GLSL_VERSION_310_ES);
-	glu::ShaderProgram			program	(ctx.getRenderContext(), glu::makeVtxFragSources(tcu::StringTemplate(vertexShaderSource).specialize(args), tcu::StringTemplate(fragmentShaderSource).specialize(args)));
+	glu::ShaderProgram			program	(rc, glu::makeVtxFragSources(tcu::StringTemplate(vertexShaderSource).specialize(args), tcu::StringTemplate(fragmentShaderSource).specialize(args)));
+	VAOHelper					vao(ctx, isES);
 
 	ctx.glUseProgram(program.getProgram());
 	ctx.expectError(GL_NO_ERROR);
@@ -521,7 +570,7 @@
 	ctx.glDeleteFramebuffers(1, &fbo);
 	ctx.endSection();
 
-	if (!ctx.getContextInfo().isExtensionSupported("GL_EXT_geometry_shader")) // GL_EXT_geometry_shader removes error
+	if (isES && !ctx.getContextInfo().isExtensionSupported("GL_EXT_geometry_shader")) // GL_EXT_geometry_shader removes error
 	{
 		ctx.beginSection("GL_INVALID_OPERATION is generated if transform feedback is active and not paused.");
 		const char* tfVarying = "gl_Position";
@@ -559,8 +608,9 @@
 void draw_elements_invalid_program (NegativeTestContext& ctx)
 {
 	ctx.glUseProgram(0);
-	GLuint	fbo			= 0;
-	GLbyte indices[1]	= {0};
+	GLuint		fbo			= 0;
+	GLbyte		indices[1]	= {0};
+	VAOHelper	vao(ctx, glu::isContextTypeES(ctx.getRenderContext().getType()));
 
 	ctx.beginSection("GL_INVALID_ENUM is generated if mode is not an accepted value.");
 	ctx.glDrawElements(-1, 1, GL_UNSIGNED_BYTE, indices);
@@ -592,14 +642,17 @@
 
 void draw_elements_incomplete_primitive (NegativeTestContext& ctx)
 {
-	const bool					isES32	= glu::contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2));
+	const glu::RenderContext&	rc		= ctx.getRenderContext();
+	bool						isES	= glu::isContextTypeES(rc.getType());
+	const bool					isES32	= glu::contextSupports(rc.getType(), glu::ApiType::es(3, 2));
 	GLuint						fbo		= 0;
 	GLuint						buf		= 0;
 	GLuint						tfID	= 0;
 	GLbyte						indices[1] = {0};
 	map<string, string>			args;
 	args["GLSL_VERSION_STRING"]			= isES32 ? getGLSLVersionDeclaration(glu::GLSL_VERSION_320_ES) : getGLSLVersionDeclaration(glu::GLSL_VERSION_310_ES);
-	glu::ShaderProgram			program	(ctx.getRenderContext(), glu::makeVtxFragSources(tcu::StringTemplate(vertexShaderSource).specialize(args), tcu::StringTemplate(fragmentShaderSource).specialize(args)));
+	glu::ShaderProgram			program	(rc, glu::makeVtxFragSources(tcu::StringTemplate(vertexShaderSource).specialize(args), tcu::StringTemplate(fragmentShaderSource).specialize(args)));
+	VAOHelper					vao(ctx, isES);
 
 	ctx.glUseProgram(program.getProgram());
 	ctx.expectError(GL_NO_ERROR);
@@ -631,7 +684,7 @@
 	ctx.glDeleteFramebuffers(1, &fbo);
 	ctx.endSection();
 
-	if (!ctx.getContextInfo().isExtensionSupported("GL_EXT_geometry_shader")) // GL_EXT_geometry_shader removes error
+	if (isES && !ctx.getContextInfo().isExtensionSupported("GL_EXT_geometry_shader")) // GL_EXT_geometry_shader removes error
 	{
 		ctx.beginSection("GL_INVALID_OPERATION is generated if transform feedback is active and not paused.");
 		const char* tfVarying= "gl_Position";
@@ -666,12 +719,19 @@
 	ctx.glUseProgram(0);
 }
 
+static bool checkSupport(NegativeTestContext& ctx)
+{
+	return contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) ||
+		   contextSupports(ctx.getRenderContext().getType(), glu::ApiType::core(4, 5));
+}
+
 void draw_elements_base_vertex (NegativeTestContext& ctx)
 {
-	TCU_CHECK_AND_THROW(NotSupportedError, contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)), "This test requires a 3.2 context or higher context version.");
+	TCU_CHECK_AND_THROW(NotSupportedError, checkSupport(ctx), "This test requires a 3.2 context or higher context version.");
 
 	GLuint				fbo = 0;
 	GLuint				indices[1] = {0};
+	VAOHelper			vao(ctx, glu::isContextTypeES(ctx.getRenderContext().getType()));
 
 	ctx.beginSection("GL_INVALID_ENUM is generated if mode is not an accepted value.");
 	ctx.glDrawElementsBaseVertex(-1, 1, GL_UNSIGNED_INT, indices, 1);
@@ -703,7 +763,7 @@
 
 void draw_elements_base_vertex_primitive_mode_mismatch (NegativeTestContext& ctx)
 {
-	TCU_CHECK_AND_THROW(NotSupportedError, contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)), "This test requires a 3.2 context or higher context version.");
+	TCU_CHECK_AND_THROW(NotSupportedError, checkSupport(ctx), "This test requires a 3.2 context or higher context version.");
 
 	GLuint						indices[1] = {0};
 	map<string, string>			args;
@@ -722,11 +782,13 @@
 
 void draw_arrays_instanced (NegativeTestContext& ctx)
 {
-	const bool					isES32	= glu::contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2));
+	const glu::RenderContext&	rc		= ctx.getRenderContext();
+	const bool					isES32	= glu::contextSupports(rc.getType(), glu::ApiType::es(3, 2));
 	GLuint						fbo		= 0;
 	map<string, string>			args;
 	args["GLSL_VERSION_STRING"]			= isES32 ? getGLSLVersionDeclaration(glu::GLSL_VERSION_320_ES) : getGLSLVersionDeclaration(glu::GLSL_VERSION_310_ES);
 	glu::ShaderProgram			program	(ctx.getRenderContext(), glu::makeVtxFragSources(tcu::StringTemplate(vertexShaderSource).specialize(args), tcu::StringTemplate(fragmentShaderSource).specialize(args)));
+	VAOHelper					vao		(ctx, glu::isContextTypeES(rc.getType()));
 
 	ctx.glUseProgram(program.getProgram());
 	ctx.expectError(GL_NO_ERROR);
@@ -761,7 +823,10 @@
 void draw_arrays_instanced_invalid_program (NegativeTestContext& ctx)
 {
 	ctx.glUseProgram(0);
-	GLuint fbo = 0;
+
+	GLuint		fbo		= 0;
+	VAOHelper	vao		(ctx, glu::isContextTypeES(ctx.getRenderContext().getType()));
+
 	ctx.glVertexAttribDivisor(0, 1);
 	ctx.expectError(GL_NO_ERROR);
 
@@ -790,11 +855,13 @@
 
 void draw_arrays_instanced_incomplete_primitive (NegativeTestContext& ctx)
 {
-	const bool					isES32	= glu::contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2));
+	const glu::RenderContext&	rc		= ctx.getRenderContext();
+	const bool					isES32	= glu::contextSupports(rc.getType(), glu::ApiType::es(3, 2));
 	GLuint						fbo		= 0;
 	map<string, string>			args;
 	args["GLSL_VERSION_STRING"]			= isES32 ? getGLSLVersionDeclaration(glu::GLSL_VERSION_320_ES) : getGLSLVersionDeclaration(glu::GLSL_VERSION_310_ES);
-	glu::ShaderProgram			program	(ctx.getRenderContext(), glu::makeVtxFragSources(tcu::StringTemplate(vertexShaderSource).specialize(args), tcu::StringTemplate(fragmentShaderSource).specialize(args)));
+	glu::ShaderProgram			program	(rc, glu::makeVtxFragSources(tcu::StringTemplate(vertexShaderSource).specialize(args), tcu::StringTemplate(fragmentShaderSource).specialize(args)));
+	VAOHelper					vao(ctx, glu::isContextTypeES(rc.getType()));
 
 	ctx.glVertexAttribDivisor(0, 1);
 	ctx.expectError(GL_NO_ERROR);
@@ -826,14 +893,17 @@
 
 void draw_elements_instanced (NegativeTestContext& ctx)
 {
-	const bool					isES32	= glu::contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2));
+	const glu::RenderContext&	rc		= ctx.getRenderContext();
+	const bool					isES	= glu::isContextTypeES(rc.getType());
+	const bool					isES32	= glu::contextSupports(rc.getType(), glu::ApiType::es(3, 2));
 	GLuint						fbo		= 0;
 	GLuint						buf		= 0;
 	GLuint						tfID	= 0;
 	GLbyte						indices[1] = {0};
 	map<string, string>			args;
 	args["GLSL_VERSION_STRING"]			= isES32 ? getGLSLVersionDeclaration(glu::GLSL_VERSION_320_ES) : getGLSLVersionDeclaration(glu::GLSL_VERSION_310_ES);
-	glu::ShaderProgram			program	(ctx.getRenderContext(), glu::makeVtxFragSources(tcu::StringTemplate(vertexShaderSource).specialize(args), tcu::StringTemplate(fragmentShaderSource).specialize(args)));
+	glu::ShaderProgram			program	(rc, glu::makeVtxFragSources(tcu::StringTemplate(vertexShaderSource).specialize(args), tcu::StringTemplate(fragmentShaderSource).specialize(args)));
+	VAOHelper					vao(ctx, isES);
 
 	ctx.glUseProgram(program.getProgram());
 	ctx.glVertexAttribDivisor(0, 1);
@@ -868,7 +938,7 @@
 	ctx.glDeleteFramebuffers(1, &fbo);
 	ctx.endSection();
 
-	if (!ctx.getContextInfo().isExtensionSupported("GL_EXT_geometry_shader")) // GL_EXT_geometry_shader removes error
+	if (isES && !ctx.getContextInfo().isExtensionSupported("GL_EXT_geometry_shader")) // GL_EXT_geometry_shader removes error
 	{
 		ctx.beginSection("GL_INVALID_OPERATION is generated if transform feedback is active and not paused.");
 		const char* tfVarying = "gl_Position";
@@ -906,8 +976,11 @@
 void draw_elements_instanced_invalid_program (NegativeTestContext& ctx)
 {
 	ctx.glUseProgram(0);
+
 	GLuint fbo = 0;
 	GLbyte indices[1] = {0};
+	VAOHelper vao(ctx, glu::isContextTypeES(ctx.getRenderContext().getType()));
+
 	ctx.glVertexAttribDivisor(0, 1);
 	ctx.expectError(GL_NO_ERROR);
 
@@ -943,14 +1016,17 @@
 
 void draw_elements_instanced_incomplete_primitive (NegativeTestContext& ctx)
 {
-	const bool					isES32	= glu::contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2));
+	const glu::RenderContext&	rc		= ctx.getRenderContext();
+	const bool					isES	= glu::isContextTypeES(rc.getType());
+	const bool					isES32	= glu::contextSupports(rc.getType(), glu::ApiType::es(3, 2));
 	GLuint						fbo		= 0;
 	GLuint						buf		= 0;
 	GLuint						tfID	= 0;
 	GLbyte						indices[1] = {0};
 	map<string, string>			args;
 	args["GLSL_VERSION_STRING"]			= isES32 ? getGLSLVersionDeclaration(glu::GLSL_VERSION_320_ES) : getGLSLVersionDeclaration(glu::GLSL_VERSION_310_ES);
-	glu::ShaderProgram			program	(ctx.getRenderContext(), glu::makeVtxFragSources(tcu::StringTemplate(vertexShaderSource).specialize(args), tcu::StringTemplate(fragmentShaderSource).specialize(args)));
+	glu::ShaderProgram			program	(rc, glu::makeVtxFragSources(tcu::StringTemplate(vertexShaderSource).specialize(args), tcu::StringTemplate(fragmentShaderSource).specialize(args)));
+	VAOHelper					vao(ctx, isES);
 
 	ctx.glUseProgram(program.getProgram());
 	ctx.glVertexAttribDivisor(0, 1);
@@ -985,7 +1061,7 @@
 	ctx.glDeleteFramebuffers(1, &fbo);
 	ctx.endSection();
 
-	if (!ctx.getContextInfo().isExtensionSupported("GL_EXT_geometry_shader")) // GL_EXT_geometry_shader removes error
+	if (isES && !ctx.getContextInfo().isExtensionSupported("GL_EXT_geometry_shader")) // GL_EXT_geometry_shader removes error
 	{
 		ctx.beginSection("GL_INVALID_OPERATION is generated if transform feedback is active and not paused.");
 		const char* tfVarying= "gl_Position";
@@ -1022,14 +1098,16 @@
 
 void draw_elements_instanced_base_vertex (NegativeTestContext& ctx)
 {
-	TCU_CHECK_AND_THROW(NotSupportedError, contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)), "This test requires a 3.2 context or higher context version.");
+	TCU_CHECK_AND_THROW(NotSupportedError, checkSupport(ctx), "This test requires a 3.2 context or higher context version.");
 
-	const bool					isES32	= glu::contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2));
+	const glu::RenderContext&	rc		= ctx.getRenderContext();
+	const bool					isES32	= glu::contextSupports(rc.getType(), glu::ApiType::es(3, 2));
 	GLuint						fbo		= 0;
 	GLbyte						indices[1] = {0};
 	map<string, string>			args;
 	args["GLSL_VERSION_STRING"]			= isES32 ? getGLSLVersionDeclaration(glu::GLSL_VERSION_320_ES) : getGLSLVersionDeclaration(glu::GLSL_VERSION_310_ES);
-	glu::ShaderProgram			program			(ctx.getRenderContext(), glu::makeVtxFragSources(tcu::StringTemplate(vertexShaderSource).specialize(args), tcu::StringTemplate(fragmentShaderSource).specialize(args)));
+	glu::ShaderProgram			program			(rc, glu::makeVtxFragSources(tcu::StringTemplate(vertexShaderSource).specialize(args), tcu::StringTemplate(fragmentShaderSource).specialize(args)));
+	VAOHelper					vao(ctx, glu::isContextTypeES(rc.getType()));
 
 	ctx.glUseProgram(program.getProgram());
 	ctx.glVertexAttribDivisor(0, 1);
@@ -1069,7 +1147,7 @@
 
 void draw_elements_instanced_base_vertex_primitive_mode_mismatch (NegativeTestContext& ctx)
 {
-	TCU_CHECK_AND_THROW(NotSupportedError, contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)), "This test requires a 3.2 context or higher context version.");
+	TCU_CHECK_AND_THROW(NotSupportedError, checkSupport(ctx), "This test requires a 3.2 context or higher context version.");
 
 	GLuint						indices[1] = {0};
 	map<string, string>			args;
@@ -1087,14 +1165,17 @@
 
 void draw_range_elements (NegativeTestContext& ctx)
 {
-	const bool					isES32	= glu::contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2));
+	const glu::RenderContext&	rc		= ctx.getRenderContext();
+	const bool					isES	= glu::isContextTypeES(rc.getType());
+	const bool					isES32	= glu::contextSupports(rc.getType(), glu::ApiType::es(3, 2));
 	GLuint						fbo		= 0;
 	GLuint						buf		= 0;
 	GLuint						tfID	= 0;
 	GLbyte						indices[1]	= {0};
 	map<string, string>			args;
 	args["GLSL_VERSION_STRING"]			= isES32 ? getGLSLVersionDeclaration(glu::GLSL_VERSION_320_ES) : getGLSLVersionDeclaration(glu::GLSL_VERSION_310_ES);
-	glu::ShaderProgram			program	(ctx.getRenderContext(), glu::makeVtxFragSources(tcu::StringTemplate(vertexShaderSource).specialize(args), tcu::StringTemplate(fragmentShaderSource).specialize(args)));
+	glu::ShaderProgram			program	(rc, glu::makeVtxFragSources(tcu::StringTemplate(vertexShaderSource).specialize(args), tcu::StringTemplate(fragmentShaderSource).specialize(args)));
+	VAOHelper					vao(ctx, isES);
 
 	ctx.glUseProgram(program.getProgram());
 	ctx.expectError(GL_NO_ERROR);
@@ -1131,7 +1212,7 @@
 	ctx.glDeleteFramebuffers(1, &fbo);
 	ctx.endSection();
 
-	if (!ctx.getContextInfo().isExtensionSupported("GL_EXT_geometry_shader")) // GL_EXT_geometry_shader removes error
+	if (isES && !ctx.getContextInfo().isExtensionSupported("GL_EXT_geometry_shader")) // GL_EXT_geometry_shader removes error
 	{
 		ctx.beginSection("GL_INVALID_OPERATION is generated if transform feedback is active and not paused.");
 		const char* tfVarying= "gl_Position";
@@ -1169,8 +1250,10 @@
 void draw_range_elements_invalid_program (NegativeTestContext& ctx)
 {
 	ctx.glUseProgram(0);
+
 	GLuint fbo = 0;
 	GLbyte indices[1] = {0};
+	VAOHelper vao(ctx, glu::isContextTypeES(ctx.getRenderContext().getType()));
 
 	ctx.beginSection("GL_INVALID_ENUM is generated if mode is not an accepted value.");
 	ctx.glDrawRangeElements(-1, 0, 1, 1, GL_UNSIGNED_BYTE, indices);
@@ -1207,7 +1290,9 @@
 
 void draw_range_elements_incomplete_primitive (NegativeTestContext& ctx)
 {
-	const bool					isES32	= glu::contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2));
+	const glu::RenderContext&	rc		= ctx.getRenderContext();
+	const bool					isES	= glu::isContextTypeES(rc.getType());
+	const bool					isES32	= glu::contextSupports(rc.getType(), glu::ApiType::es(3, 2));
 	GLuint						fbo		= 0;
 	GLuint						buf		= 0;
 	GLuint						tfID	= 0;
@@ -1215,6 +1300,7 @@
 	map<string, string>			args;
 	args["GLSL_VERSION_STRING"]			= isES32 ? getGLSLVersionDeclaration(glu::GLSL_VERSION_320_ES) : getGLSLVersionDeclaration(glu::GLSL_VERSION_310_ES);
 	glu::ShaderProgram			program	(ctx.getRenderContext(), glu::makeVtxFragSources(tcu::StringTemplate(vertexShaderSource).specialize(args), tcu::StringTemplate(fragmentShaderSource).specialize(args)));
+	VAOHelper					vao(ctx, isES);
 
 	ctx.glUseProgram(program.getProgram());
 	ctx.expectError(GL_NO_ERROR);
@@ -1251,7 +1337,7 @@
 	ctx.glDeleteFramebuffers(1, &fbo);
 	ctx.endSection();
 
-	if (!ctx.getContextInfo().isExtensionSupported("GL_EXT_geometry_shader")) // GL_EXT_geometry_shader removes error
+	if (isES && !ctx.getContextInfo().isExtensionSupported("GL_EXT_geometry_shader")) // GL_EXT_geometry_shader removes error
 	{
 		ctx.beginSection("GL_INVALID_OPERATION is generated if transform feedback is active and not paused.");
 		const char* tfVarying = "gl_Position";
@@ -1288,13 +1374,15 @@
 
 void draw_range_elements_base_vertex (NegativeTestContext& ctx)
 {
-	TCU_CHECK_AND_THROW(NotSupportedError, contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)), "This test requires a 3.2 context or higher context version.");
+	TCU_CHECK_AND_THROW(NotSupportedError, checkSupport(ctx), "This test requires a 3.2 context or higher context version.");
 
 	GLuint						fbo		= 0;
 	GLbyte						indices[1] = {0};
 	map<string, string>			args;
 	args["GLSL_VERSION_STRING"]			= getGLSLVersionDeclaration(glu::GLSL_VERSION_320_ES);
-	glu::ShaderProgram			program	(ctx.getRenderContext(), glu::makeVtxFragSources(tcu::StringTemplate(vertexShaderSource).specialize(args), tcu::StringTemplate(fragmentShaderSource).specialize(args)));
+	const glu::RenderContext&	rc		= ctx.getRenderContext();
+	glu::ShaderProgram			program	(rc, glu::makeVtxFragSources(tcu::StringTemplate(vertexShaderSource).specialize(args), tcu::StringTemplate(fragmentShaderSource).specialize(args)));
+	VAOHelper					vao(ctx, glu::isContextTypeES(rc.getType()));
 
 	ctx.glUseProgram(program.getProgram());
 	ctx.expectError(GL_NO_ERROR);
@@ -1336,7 +1424,7 @@
 
 void draw_range_elements_base_vertex_primitive_mode_mismatch (NegativeTestContext& ctx)
 {
-	TCU_CHECK_AND_THROW(NotSupportedError, contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)), "This test requires a 3.2 context or higher context version.");
+	TCU_CHECK_AND_THROW(NotSupportedError, checkSupport(ctx), "This test requires a 3.2 context or higher context version.");
 
 	GLuint						indices[1] = {0};
 	map<string, string>			args;
diff --git a/modules/gles31/functional/es31fOpaqueTypeIndexingTests.cpp b/modules/gles31/functional/es31fOpaqueTypeIndexingTests.cpp
index de867e5..074117b 100644
--- a/modules/gles31/functional/es31fOpaqueTypeIndexingTests.cpp
+++ b/modules/gles31/functional/es31fOpaqueTypeIndexingTests.cpp
@@ -363,7 +363,10 @@
 
 void SamplerIndexingCase::init (void)
 {
-	if (!contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2)))
+	const bool			supportsES32	= contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2)) ||
+											hasExtension(m_context.getRenderContext().getFunctions(), glu::ApiType::core(4, 5), "GL_ARB_ES3_2_compatibility");
+
+	if (!supportsES32)
 	{
 		if (m_shaderType == SHADERTYPE_GEOMETRY)
 			TCU_CHECK_AND_THROW(NotSupportedError,
@@ -400,7 +403,8 @@
 	const char*			resultPrefix	= "result";
 	const DataType		coordType		= getSamplerCoordType(m_samplerType);
 	const DataType		outType			= getSamplerOutputType(m_samplerType);
-	const bool			supportsES32	= contextSupports(renderContext.getType(), glu::ApiType::es(3, 2));
+	const bool			supportsES32	= contextSupports(renderContext.getType(), glu::ApiType::es(3, 2)) ||
+											hasExtension(renderContext.getFunctions(), glu::ApiType::core(4, 5), "GL_ARB_ES3_2_compatibility");
 	std::ostringstream	global;
 	std::ostringstream	code;
 
@@ -736,7 +740,10 @@
 
 void BlockArrayIndexingCase::init (void)
 {
-	if (!contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2)))
+	const bool			supportsES32	= contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2)) ||
+											hasExtension(m_context.getRenderContext().getFunctions(), glu::ApiType::core(4, 5), "GL_ARB_ES3_2_compatibility");
+
+	if (!supportsES32)
 	{
 		if (m_shaderType == SHADERTYPE_GEOMETRY)
 			TCU_CHECK_AND_THROW(NotSupportedError,
@@ -786,7 +793,8 @@
 	const char*			resultPrefix	= "result";
 	const char*			interfaceName	= m_blockType == BLOCKTYPE_UNIFORM ? "uniform" : "buffer";
 	const char*			layout			= m_blockType == BLOCKTYPE_UNIFORM ? "std140" : "std430";
-	const bool			supportsES32	= contextSupports(renderContext.getType(), glu::ApiType::es(3, 2));
+	const bool			supportsES32	= contextSupports(renderContext.getType(), glu::ApiType::es(3, 2)) ||
+							hasExtension(renderContext.getFunctions(), glu::ApiType::core(4, 5), "GL_ARB_ES3_2_compatibility");
 	std::ostringstream	global;
 	std::ostringstream	code;
 
@@ -982,7 +990,10 @@
 
 void AtomicCounterIndexingCase::init (void)
 {
-	if (!contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2)))
+	const bool			supportsES32	= contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2)) ||
+											hasExtension(m_context.getRenderContext().getFunctions(), glu::ApiType::core(4, 5), "GL_ARB_ES3_2_compatibility");
+
+	if (!supportsES32)
 	{
 		if (m_shaderType == SHADERTYPE_GEOMETRY)
 			TCU_CHECK_AND_THROW(NotSupportedError,
@@ -1016,7 +1027,8 @@
 {
 	const char*			indicesPrefix	= "index";
 	const char*			resultPrefix	= "result";
-	const bool			supportsES32	= contextSupports(renderContext.getType(), glu::ApiType::es(3, 2));
+	const bool			supportsES32	= contextSupports(renderContext.getType(), glu::ApiType::es(3, 2)) ||
+											hasExtension(renderContext.getFunctions(), glu::ApiType::core(4, 5), "GL_ARB_ES3_2_compatibility");
 	std::ostringstream	global;
 	std::ostringstream	code;
 
diff --git a/modules/gles31/functional/es31fProgramInterfaceDefinitionUtil.cpp b/modules/gles31/functional/es31fProgramInterfaceDefinitionUtil.cpp
index fc1e28d..ec1bc46 100644
--- a/modules/gles31/functional/es31fProgramInterfaceDefinitionUtil.cpp
+++ b/modules/gles31/functional/es31fProgramInterfaceDefinitionUtil.cpp
@@ -218,6 +218,9 @@
 
 static std::string getShaderExtensionDeclarations (const ProgramInterfaceDefinition::Shader* shader)
 {
+	if (shader->getVersion() > glu::GLSL_VERSION_440)
+		return "";
+
 	std::vector<std::string>	extensions;
 	std::ostringstream			buf;
 
@@ -239,11 +242,16 @@
 	return buf.str();
 }
 
-static std::string getShaderTypeDeclarations (const ProgramInterfaceDefinition::Program* program, glu::ShaderType type)
+static std::string getShaderTypeDeclarations (const ProgramInterfaceDefinition::Program* program, const ProgramInterfaceDefinition::Shader* shader)
 {
+	glu::ShaderType type = shader->getType();
+	auto isCoreGL = (shader->getVersion() > glu::GLSL_VERSION_440);
+
 	switch (type)
 	{
 		case glu::SHADERTYPE_VERTEX:
+			if (isCoreGL)
+				return "out gl_PerVertex { vec4 gl_Position; };\n";
 			return "";
 
 		case glu::SHADERTYPE_FRAGMENT:
@@ -254,6 +262,11 @@
 			std::ostringstream buf;
 			buf <<	"layout(points) in;\n"
 					"layout(points, max_vertices=" << program->getGeometryNumOutputVertices() << ") out;\n";
+			if (isCoreGL)
+			{
+				buf << "in gl_PerVertex { vec4 gl_Position; } gl_in[];\n"
+					   "out gl_PerVertex { vec4 gl_Position; };\n";
+			}
 			return buf.str();
 		}
 
@@ -261,11 +274,25 @@
 		{
 			std::ostringstream buf;
 			buf << "layout(vertices=" << program->getTessellationNumOutputPatchVertices() << ") out;\n";
+			if (isCoreGL)
+			{
+				buf << "in gl_PerVertex { vec4 gl_Position; } gl_in[];\n"
+					   "out gl_PerVertex { vec4 gl_Position; } gl_out[];\n";
+			}
 			return buf.str();
 		}
 
 		case glu::SHADERTYPE_TESSELLATION_EVALUATION:
-			return "layout(triangles, point_mode) in;\n";
+		{
+			std::ostringstream buf;
+			if (isCoreGL)
+			{
+				buf << "in gl_PerVertex { vec4 gl_Position; } gl_in[];\n"
+					   "out gl_PerVertex { vec4 gl_Position; };\n";
+			}
+			buf << "layout(triangles, point_mode) in;\n";
+			return buf.str();
+		}
 
 		case glu::SHADERTYPE_COMPUTE:
 			return "layout(local_size_x=1) in;\n";
@@ -1506,7 +1533,7 @@
 
 		sourceBuf	<< glu::getGLSLVersionDeclaration(shader->getVersion()) << "\n"
 					<< getShaderExtensionDeclarations(shader)
-					<< getShaderTypeDeclarations(program, shader->getType())
+					<< getShaderTypeDeclarations(program, shader)
 					<< "\n";
 
 		// Struct definitions
diff --git a/modules/gles31/functional/es31fProgramInterfaceQueryTestCase.cpp b/modules/gles31/functional/es31fProgramInterfaceQueryTestCase.cpp
index a474cc8..6233269 100644
--- a/modules/gles31/functional/es31fProgramInterfaceQueryTestCase.cpp
+++ b/modules/gles31/functional/es31fProgramInterfaceQueryTestCase.cpp
@@ -203,7 +203,8 @@
 
 bool PropValidator::isSupported (void) const
 {
-	if(glu::contextSupports(m_renderContext.getType(), glu::ApiType::es(3, 2)))
+	if(glu::contextSupports(m_renderContext.getType(), glu::ApiType::es(3, 2)) ||
+	   glu::contextSupports(m_renderContext.getType(), glu::ApiType::core(4, 5)))
 		return true;
 	return m_extension == DE_NULL || m_contextInfo.isExtensionSupported(m_extension);
 }
@@ -2086,12 +2087,17 @@
 	const ProgramInterfaceDefinition::Program* programDefinition = getProgramDefinition();
 	DE_ASSERT(programDefinition->isValid());
 
-	const bool supportsES32 = glu::contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2));
+	auto type = m_context.getRenderContext().getType();
+	if (glu::contextSupports(type, glu::ApiType::es(3, 2)) ||
+		glu::contextSupports(type, glu::ApiType::core(4, 5)))
+	{
+		return programDefinition;
+	}
 
 	if (programDefinition->hasStage(glu::SHADERTYPE_TESSELLATION_CONTROL) ||
 		programDefinition->hasStage(glu::SHADERTYPE_TESSELLATION_EVALUATION))
 	{
-		if (!supportsES32 && !m_context.getContextInfo().isExtensionSupported("GL_EXT_tessellation_shader"))
+		if (!m_context.getContextInfo().isExtensionSupported("GL_EXT_tessellation_shader"))
 			throw tcu::NotSupportedError("Test requires GL_EXT_tessellation_shader extension");
 	}
 
@@ -2099,19 +2105,19 @@
 	// before query. However, we don't want IS_PER_PATCH-specific tests to become noop and pass.
 	if (m_queryTarget.propFlags == PROGRAMRESOURCEPROP_IS_PER_PATCH)
 	{
-		if (!supportsES32 && !m_context.getContextInfo().isExtensionSupported("GL_EXT_tessellation_shader"))
+		if (!m_context.getContextInfo().isExtensionSupported("GL_EXT_tessellation_shader"))
 			throw tcu::NotSupportedError("Test requires GL_EXT_tessellation_shader extension");
 	}
 
 	if (programDefinition->hasStage(glu::SHADERTYPE_GEOMETRY))
 	{
-		if (!supportsES32 && !m_context.getContextInfo().isExtensionSupported("GL_EXT_geometry_shader"))
+		if (!m_context.getContextInfo().isExtensionSupported("GL_EXT_geometry_shader"))
 			throw tcu::NotSupportedError("Test requires GL_EXT_geometry_shader extension");
 	}
 
 	if (programContainsIOBlocks(programDefinition))
 	{
-		if (!supportsES32 && !m_context.getContextInfo().isExtensionSupported("GL_EXT_shader_io_blocks"))
+		if (!m_context.getContextInfo().isExtensionSupported("GL_EXT_shader_io_blocks"))
 			throw tcu::NotSupportedError("Test requires GL_EXT_shader_io_blocks extension");
 	}
 
diff --git a/modules/gles31/functional/es31fProgramInterfaceQueryTests.cpp b/modules/gles31/functional/es31fProgramInterfaceQueryTests.cpp
index 0c8e336..1280382 100644
--- a/modules/gles31/functional/es31fProgramInterfaceQueryTests.cpp
+++ b/modules/gles31/functional/es31fProgramInterfaceQueryTests.cpp
@@ -209,6 +209,13 @@
 	return glu::SHADERTYPE_LAST;
 }
 
+static bool checkSupport(Context& ctx)
+{
+	auto ctxType = ctx.getRenderContext().getType();
+	return contextSupports(ctxType, glu::ApiType::es(3, 2)) ||
+		   contextSupports(ctxType, glu::ApiType::core(4, 5));
+}
+
 static std::string specializeShader(Context& context, const char* code)
 {
 	const glu::GLSLVersion				glslVersion			= glu::getContextTypeGLSLVersion(context.getRenderContext().getType());
@@ -922,20 +929,20 @@
 void ResourceListTestCase::init (void)
 {
 	m_programDefinition	= generateProgramDefinitionFromResource(m_targetResource.get()).release();
-	const bool supportsES32 = glu::contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2));
+	const bool supportsES32orGL45 = checkSupport(m_context);
 
 	if ((m_programDefinition->hasStage(glu::SHADERTYPE_TESSELLATION_CONTROL) || m_programDefinition->hasStage(glu::SHADERTYPE_TESSELLATION_EVALUATION)) &&
-		!supportsES32 && !m_context.getContextInfo().isExtensionSupported("GL_EXT_tessellation_shader"))
+		!supportsES32orGL45 && !m_context.getContextInfo().isExtensionSupported("GL_EXT_tessellation_shader"))
 	{
 		throw tcu::NotSupportedError("Test requires GL_EXT_tessellation_shader extension");
 	}
 	if (m_programDefinition->hasStage(glu::SHADERTYPE_GEOMETRY) &&
-		!supportsES32 && !m_context.getContextInfo().isExtensionSupported("GL_EXT_geometry_shader"))
+		!supportsES32orGL45 && !m_context.getContextInfo().isExtensionSupported("GL_EXT_geometry_shader"))
 	{
 		throw tcu::NotSupportedError("Test requires GL_EXT_geometry_shader extension");
 	}
 	if (programContainsIOBlocks(m_programDefinition) &&
-		!supportsES32 && !m_context.getContextInfo().isExtensionSupported("GL_EXT_shader_io_blocks"))
+		!supportsES32orGL45 && !m_context.getContextInfo().isExtensionSupported("GL_EXT_shader_io_blocks"))
 	{
 		throw tcu::NotSupportedError("Test requires GL_EXT_shader_io_blocks extension");
 	}
@@ -2715,11 +2722,11 @@
 	const deUint32				tessellationMask	= (1 << glu::SHADERTYPE_TESSELLATION_CONTROL) | (1 << glu::SHADERTYPE_TESSELLATION_EVALUATION);
 	glu::VariableDeclaration	atomicVar			(glu::VarType(glu::TYPE_UINT_ATOMIC_COUNTER, glu::PRECISION_LAST), "targetCounter", glu::STORAGE_UNIFORM);
 	const glu::GLSLVersion		glslVersion			= glu::getContextTypeGLSLVersion(m_context.getRenderContext().getType());
-	const bool					supportsES32		= glu::contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2));
+	const bool					supportsES32orGL45	= checkSupport(m_context);
 
-	if ((m_presentStagesMask & tessellationMask) != 0 && !supportsES32 && !m_context.getContextInfo().isExtensionSupported("GL_EXT_tessellation_shader"))
+	if ((m_presentStagesMask & tessellationMask) != 0 && !supportsES32orGL45 && !m_context.getContextInfo().isExtensionSupported("GL_EXT_tessellation_shader"))
 		throw tcu::NotSupportedError("Test requires GL_EXT_tessellation_shader extension");
-	if ((m_presentStagesMask & geometryMask) != 0 && !supportsES32 && !m_context.getContextInfo().isExtensionSupported("GL_EXT_geometry_shader"))
+	if ((m_presentStagesMask & geometryMask) != 0 && !supportsES32orGL45 && !m_context.getContextInfo().isExtensionSupported("GL_EXT_geometry_shader"))
 		throw tcu::NotSupportedError("Test requires GL_EXT_geometry_shader extension");
 
 	atomicVar.layout.binding = 1;
@@ -2751,7 +2758,9 @@
 
 AtomicCounterReferencedByCase::IterateResult AtomicCounterReferencedByCase::iterate (void)
 {
-	const bool supportsES32 = glu::contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2));
+	const glu::RenderContext& rc = m_context.getRenderContext();
+	const bool isES32orGL45 = glu::contextSupports(rc.getType(), glu::ApiType::es(3, 2)) ||
+							  glu::contextSupports(rc.getType(), glu::ApiType::core(4, 5));
 
 	const struct
 	{
@@ -2763,16 +2772,16 @@
 		{ GL_REFERENCED_BY_VERTEX_SHADER,			glu::SHADERTYPE_VERTEX,						DE_NULL												},
 		{ GL_REFERENCED_BY_FRAGMENT_SHADER,			glu::SHADERTYPE_FRAGMENT,					DE_NULL												},
 		{ GL_REFERENCED_BY_COMPUTE_SHADER,			glu::SHADERTYPE_COMPUTE,					DE_NULL												},
-		{ GL_REFERENCED_BY_TESS_CONTROL_SHADER,		glu::SHADERTYPE_TESSELLATION_CONTROL,		(supportsES32 ? DE_NULL : "GL_EXT_tessellation_shader")	},
-		{ GL_REFERENCED_BY_TESS_EVALUATION_SHADER,	glu::SHADERTYPE_TESSELLATION_EVALUATION,	(supportsES32 ? DE_NULL : "GL_EXT_tessellation_shader")	},
-		{ GL_REFERENCED_BY_GEOMETRY_SHADER,			glu::SHADERTYPE_GEOMETRY,					(supportsES32 ? DE_NULL : "GL_EXT_geometry_shader")		},
+		{ GL_REFERENCED_BY_TESS_CONTROL_SHADER,		glu::SHADERTYPE_TESSELLATION_CONTROL,		(isES32orGL45 ? DE_NULL : "GL_EXT_tessellation_shader")	},
+		{ GL_REFERENCED_BY_TESS_EVALUATION_SHADER,	glu::SHADERTYPE_TESSELLATION_EVALUATION,	(isES32orGL45 ? DE_NULL : "GL_EXT_tessellation_shader")	},
+		{ GL_REFERENCED_BY_GEOMETRY_SHADER,			glu::SHADERTYPE_GEOMETRY,					(isES32orGL45 ? DE_NULL : "GL_EXT_geometry_shader")		},
 	};
 
-	const glw::Functions&		gl			= m_context.getRenderContext().getFunctions();
-	const glu::ShaderProgram	program		(m_context.getRenderContext(), generateProgramInterfaceProgramSources(m_program));
+	const glw::Functions&		gl			= rc.getFunctions();
+	const glu::ShaderProgram	program		(rc, generateProgramInterfaceProgramSources(m_program));
 
 	m_testCtx.setTestResult(QP_TEST_RESULT_PASS, "Pass");
-	checkAndLogProgram(program, m_program, m_context.getRenderContext().getFunctions(), m_testCtx.getLog());
+	checkAndLogProgram(program, m_program, rc.getFunctions(), m_testCtx.getLog());
 
 	// check props
 	for (int propNdx = 0; propNdx < DE_LENGTH_OF_ARRAY(targetProps); ++propNdx)
@@ -2864,11 +2873,11 @@
 	const bool hasGeometryShader =		(m_caseType == CASE_VERTEX_GEO_FRAGMENT)		||
 										(m_caseType == CASE_VERTEX_TESS_GEO_FRAGMENT)	||
 										(m_caseType == CASE_SEPARABLE_GEOMETRY);
-	const bool supportsES32 =			glu::contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2));
+	const bool supportsES32orGL45 =		checkSupport(m_context);
 
-	if (hasTessellationShader && !supportsES32 && !m_context.getContextInfo().isExtensionSupported("GL_EXT_tessellation_shader"))
+	if (hasTessellationShader && !supportsES32orGL45 && !m_context.getContextInfo().isExtensionSupported("GL_EXT_tessellation_shader"))
 		throw tcu::NotSupportedError("Test requires GL_EXT_tessellation_shader extension");
-	if (hasGeometryShader && !supportsES32 && !m_context.getContextInfo().isExtensionSupported("GL_EXT_geometry_shader"))
+	if (hasGeometryShader && !supportsES32orGL45 && !m_context.getContextInfo().isExtensionSupported("GL_EXT_geometry_shader"))
 		throw tcu::NotSupportedError("Test requires GL_EXT_geometry_shader extension");
 
 	glu::GLSLVersion glslVersion = glu::getContextTypeGLSLVersion(m_context.getRenderContext().getType());
@@ -5036,7 +5045,7 @@
 	}
 }
 
-static void generateProgramInputOutputShaderCaseBlocks (Context& context, tcu::TestCaseGroup* targetGroup, glu::GLSLVersion glslVersion, bool withCompute, bool inputCase, void (*blockContentGenerator)(Context&, const ResourceDefinition::Node::SharedPtr&, tcu::TestCaseGroup*, deUint32))
+static void generateProgramInputOutputShaderCaseBlocks (Context& context, tcu::TestCaseGroup* targetGroup, glu::GLSLVersion glslVersion, bool withCompute, bool inputCase, bool isGL45, void (*blockContentGenerator)(Context&, const ResourceDefinition::Node::SharedPtr&, tcu::TestCaseGroup*, deUint32, bool))
 {
 	static const struct
 	{
@@ -5064,7 +5073,7 @@
 
 		targetGroup->addChild(blockGroup);
 
-		blockContentGenerator(context, defaultBlock, blockGroup, (1 << glu::SHADERTYPE_VERTEX) | (1 << glu::SHADERTYPE_FRAGMENT));
+		blockContentGenerator(context, defaultBlock, blockGroup, (1 << glu::SHADERTYPE_VERTEX) | (1 << glu::SHADERTYPE_FRAGMENT), isGL45);
 	}
 
 	// .separable_*
@@ -5076,7 +5085,7 @@
 		const ResourceDefinition::Node::SharedPtr	defaultBlock		(new ResourceDefinition::DefaultBlock(shader));
 
 		targetGroup->addChild(blockGroup);
-		blockContentGenerator(context, defaultBlock, blockGroup, (1 << singleStageCases[ndx].stage));
+		blockContentGenerator(context, defaultBlock, blockGroup, (1 << singleStageCases[ndx].stage), isGL45);
 	}
 
 	// .compute
@@ -5089,7 +5098,7 @@
 
 		targetGroup->addChild(blockGroup);
 
-		blockContentGenerator(context, defaultBlock, blockGroup, (1 << glu::SHADERTYPE_COMPUTE));
+		blockContentGenerator(context, defaultBlock, blockGroup, (1 << glu::SHADERTYPE_COMPUTE), isGL45);
 	}
 
 	// .interface_blocks
@@ -5148,7 +5157,7 @@
 
 				ioBlockGroup->addChild(blockGroup);
 
-				blockContentGenerator(context, block, blockGroup, (1 << shaderType));
+				blockContentGenerator(context, block, blockGroup, (1 << shaderType), isGL45);
 			}
 
 			// .named_block_explicit_location
@@ -5159,17 +5168,18 @@
 
 				ioBlockGroup->addChild(blockGroup);
 
-				blockContentGenerator(context, block, blockGroup, (1 << shaderType));
+				blockContentGenerator(context, block, blockGroup, (1 << shaderType), isGL45);
 			}
 
 			// .unnamed_block
+			if (!isGL45)
 			{
 				const ResourceDefinition::Node::SharedPtr	block		(new ResourceDefinition::InterfaceBlock(storage, false));
 				tcu::TestCaseGroup* const					blockGroup	= new TestCaseGroup(context, "unnamed_block", "Unnamed block");
 
 				ioBlockGroup->addChild(blockGroup);
 
-				blockContentGenerator(context, block, blockGroup, (1 << shaderType));
+				blockContentGenerator(context, block, blockGroup, (1 << shaderType), isGL45);
 			}
 
 			// .block_array
@@ -5180,7 +5190,7 @@
 
 				ioBlockGroup->addChild(blockGroup);
 
-				blockContentGenerator(context, block, blockGroup, (1 << shaderType));
+				blockContentGenerator(context, block, blockGroup, (1 << shaderType), isGL45);
 			}
 		}
 	}
@@ -5394,13 +5404,15 @@
 	targetGroup->addChild(resourceListCase);
 }
 
-static void generateProgramInputResourceListBlockContents (Context& context, const ResourceDefinition::Node::SharedPtr& parentStructure, tcu::TestCaseGroup* targetGroup, deUint32 presentShadersMask)
+static void generateProgramInputResourceListBlockContents (Context& context, const ResourceDefinition::Node::SharedPtr& parentStructure, tcu::TestCaseGroup* targetGroup, deUint32 presentShadersMask, bool isGL45)
 {
+	DE_UNREF(isGL45);
 	generateProgramInputBlockContents(context, parentStructure, targetGroup, presentShadersMask, true, addProgramInputOutputResourceListCase);
 }
 
-static void generateProgramOutputResourceListBlockContents (Context& context, const ResourceDefinition::Node::SharedPtr& parentStructure, tcu::TestCaseGroup* targetGroup, deUint32 presentShadersMask)
+static void generateProgramOutputResourceListBlockContents (Context& context, const ResourceDefinition::Node::SharedPtr& parentStructure, tcu::TestCaseGroup* targetGroup, deUint32 presentShadersMask, bool isGL45)
 {
+	DE_UNREF(isGL45);
 	generateProgramOutputBlockContents(context, parentStructure, targetGroup, presentShadersMask, true, addProgramInputOutputResourceListCase);
 }
 
@@ -5412,19 +5424,22 @@
 }
 
 template <ProgramResourcePropFlags TargetProp>
-static void generateProgramInputBasicBlockContents (Context& context, const ResourceDefinition::Node::SharedPtr& parentStructure, tcu::TestCaseGroup* targetGroup, deUint32 presentShadersMask)
+static void generateProgramInputBasicBlockContents (Context& context, const ResourceDefinition::Node::SharedPtr& parentStructure, tcu::TestCaseGroup* targetGroup, deUint32 presentShadersMask, bool isGL45)
 {
+	DE_UNREF(isGL45);
 	generateProgramInputBlockContents(context, parentStructure, targetGroup, presentShadersMask, false, addProgramInputOutputResourceTestCase<TargetProp>);
 }
 
 template <ProgramResourcePropFlags TargetProp>
-static void generateProgramOutputBasicBlockContents (Context& context, const ResourceDefinition::Node::SharedPtr& parentStructure, tcu::TestCaseGroup* targetGroup, deUint32 presentShadersMask)
+static void generateProgramOutputBasicBlockContents (Context& context, const ResourceDefinition::Node::SharedPtr& parentStructure, tcu::TestCaseGroup* targetGroup, deUint32 presentShadersMask, bool isGL45)
 {
+	DE_UNREF(isGL45);
 	generateProgramOutputBlockContents(context, parentStructure, targetGroup, presentShadersMask, false, addProgramInputOutputResourceTestCase<TargetProp>);
 }
 
-static void generateProgramInputLocationBlockContents (Context& context, const ResourceDefinition::Node::SharedPtr& parentStructure, tcu::TestCaseGroup* targetGroup, deUint32 presentShadersMask)
+static void generateProgramInputLocationBlockContents (Context& context, const ResourceDefinition::Node::SharedPtr& parentStructure, tcu::TestCaseGroup* targetGroup, deUint32 presentShadersMask, bool isGL45)
 {
+	DE_UNREF(isGL45);
 	const bool									inDefaultBlock	= parentStructure->getType() == ResourceDefinition::Node::TYPE_DEFAULT_BLOCK;
 	const ResourceDefinition::Node::SharedPtr	input			= (inDefaultBlock)
 																	? (ResourceDefinition::Node::SharedPtr(new ResourceDefinition::StorageQualifier(parentStructure, glu::STORAGE_IN)))
@@ -5573,7 +5588,7 @@
 		DE_ASSERT(false);
 }
 
-static void generateProgramOutputLocationBlockContents (Context& context, const ResourceDefinition::Node::SharedPtr& parentStructure, tcu::TestCaseGroup* targetGroup, deUint32 presentShadersMask)
+static void generateProgramOutputLocationBlockContents (Context& context, const ResourceDefinition::Node::SharedPtr& parentStructure, tcu::TestCaseGroup* targetGroup, deUint32 presentShadersMask, bool isGL45)
 {
 	const bool									inDefaultBlock	= parentStructure->getType() == ResourceDefinition::Node::TYPE_DEFAULT_BLOCK;
 	const ResourceDefinition::Node::SharedPtr	output			= (inDefaultBlock)
@@ -5581,6 +5596,8 @@
 																	: (parentStructure);
 	const glu::ShaderType						lastStage		= getShaderMaskLastStage(presentShadersMask);
 
+	const bool									inBlockArray	= 0 == deStringEqual("block_array", targetGroup->getName());
+
 	if (lastStage == glu::SHADERTYPE_VERTEX						||
 		lastStage == glu::SHADERTYPE_GEOMETRY					||
 		lastStage == glu::SHADERTYPE_TESSELLATION_EVALUATION	||
@@ -5592,6 +5609,7 @@
 			targetGroup->addChild(new ResourceTestCase(context, variable, ProgramResourceQueryTestTarget(PROGRAMINTERFACE_PROGRAM_OUTPUT, PROGRAMRESOURCEPROP_LOCATION), "var"));
 		}
 		// .var_explicit_location
+		if (!(isGL45 && inBlockArray))
 		{
 			const ResourceDefinition::Node::SharedPtr layout	(new ResourceDefinition::LayoutQualifier(output, glu::Layout(2)));
 			const ResourceDefinition::Node::SharedPtr variable	(new ResourceDefinition::Variable(layout, glu::TYPE_FLOAT_VEC4));
@@ -5604,6 +5622,7 @@
 			targetGroup->addChild(new ResourceTestCase(context, variable, ProgramResourceQueryTestTarget(PROGRAMINTERFACE_PROGRAM_OUTPUT, PROGRAMRESOURCEPROP_LOCATION), "var_struct"));
 		}
 		// .var_struct_explicit_location
+		if (!(isGL45 && inBlockArray))
 		{
 			const ResourceDefinition::Node::SharedPtr layout	(new ResourceDefinition::LayoutQualifier(output, glu::Layout(2)));
 			const ResourceDefinition::Node::SharedPtr structMbr	(new ResourceDefinition::StructMember(layout));
@@ -5617,6 +5636,7 @@
 			targetGroup->addChild(new ResourceTestCase(context, variable, ProgramResourceQueryTestTarget(PROGRAMINTERFACE_PROGRAM_OUTPUT, PROGRAMRESOURCEPROP_LOCATION), "var_array"));
 		}
 		// .var_array_explicit_location
+		if (!(isGL45 && inBlockArray))
 		{
 			const ResourceDefinition::Node::SharedPtr layout	(new ResourceDefinition::LayoutQualifier(output, glu::Layout(2)));
 			const ResourceDefinition::Node::SharedPtr arrayElem	(new ResourceDefinition::ArrayElement(layout));
@@ -5632,6 +5652,7 @@
 			targetGroup->addChild(new ResourceTestCase(context, variable, ProgramResourceQueryTestTarget(PROGRAMINTERFACE_PROGRAM_OUTPUT, PROGRAMRESOURCEPROP_LOCATION), "var"));
 		}
 		// .var_explicit_location
+		if (!(isGL45 && inBlockArray))
 		{
 			const ResourceDefinition::Node::SharedPtr layout	(new ResourceDefinition::LayoutQualifier(output, glu::Layout(2)));
 			const ResourceDefinition::Node::SharedPtr variable	(new ResourceDefinition::Variable(layout, glu::TYPE_FLOAT_VEC4));
@@ -5644,6 +5665,7 @@
 			targetGroup->addChild(new ResourceTestCase(context, variable, ProgramResourceQueryTestTarget(PROGRAMINTERFACE_PROGRAM_OUTPUT, PROGRAMRESOURCEPROP_LOCATION), "var_array"));
 		}
 		// .var_array_explicit_location
+		if (!(isGL45 && inBlockArray))
 		{
 			const ResourceDefinition::Node::SharedPtr layout	(new ResourceDefinition::LayoutQualifier(output, glu::Layout(1)));
 			const ResourceDefinition::Node::SharedPtr arrayElem	(new ResourceDefinition::ArrayElement(layout));
@@ -5788,8 +5810,9 @@
 	}
 }
 
-static void generateProgramInputTypeBlockContents (Context& context, const ResourceDefinition::Node::SharedPtr& parentStructure, tcu::TestCaseGroup* targetGroup, deUint32 presentShadersMask)
+static void generateProgramInputTypeBlockContents (Context& context, const ResourceDefinition::Node::SharedPtr& parentStructure, tcu::TestCaseGroup* targetGroup, deUint32 presentShadersMask, bool isGL45)
 {
+	DE_UNREF(isGL45);
 	const bool									inDefaultBlock						= parentStructure->getType() == ResourceDefinition::Node::TYPE_DEFAULT_BLOCK;
 	const ResourceDefinition::Node::SharedPtr	input								= (inDefaultBlock)
 																						? (ResourceDefinition::Node::SharedPtr(new ResourceDefinition::StorageQualifier(parentStructure, glu::STORAGE_IN)))
@@ -5884,8 +5907,9 @@
 		DE_ASSERT(false);
 }
 
-static void generateProgramOutputTypeBlockContents (Context& context, const ResourceDefinition::Node::SharedPtr& parentStructure, tcu::TestCaseGroup* targetGroup, deUint32 presentShadersMask)
+static void generateProgramOutputTypeBlockContents (Context& context, const ResourceDefinition::Node::SharedPtr& parentStructure, tcu::TestCaseGroup* targetGroup, deUint32 presentShadersMask, bool isGL45)
 {
+	DE_UNREF(isGL45);
 	const bool									inDefaultBlock						= parentStructure->getType() == ResourceDefinition::Node::TYPE_DEFAULT_BLOCK;
 	const ResourceDefinition::Node::SharedPtr	output								= (inDefaultBlock)
 																						? (ResourceDefinition::Node::SharedPtr(new ResourceDefinition::StorageQualifier(parentStructure, glu::STORAGE_OUT)))
@@ -5992,12 +6016,16 @@
 class ProgramInputTestGroup : public TestCaseGroup
 {
 public:
-			ProgramInputTestGroup	(Context& context);
+			ProgramInputTestGroup	(Context& context, bool is_GL45);
 	void	init					(void);
+
+private:
+	bool m_isGL45;
 };
 
-ProgramInputTestGroup::ProgramInputTestGroup (Context& context)
+ProgramInputTestGroup::ProgramInputTestGroup (Context& context, bool is_GL45)
 	: TestCaseGroup(context, "program_input", "Program input")
+	, m_isGL45(is_GL45)
 {
 }
 
@@ -6009,28 +6037,28 @@
 	{
 		tcu::TestCaseGroup* const blockGroup = new tcu::TestCaseGroup(m_testCtx, "resource_list", "Resource list");
 		addChild(blockGroup);
-		generateProgramInputOutputShaderCaseBlocks(m_context, blockGroup, glslVersion, true, true, generateProgramInputResourceListBlockContents);
+		generateProgramInputOutputShaderCaseBlocks(m_context, blockGroup, glslVersion, true, true, m_isGL45, generateProgramInputResourceListBlockContents);
 	}
 
 	// .array_size
 	{
 		tcu::TestCaseGroup* const blockGroup = new tcu::TestCaseGroup(m_testCtx, "array_size", "Array size");
 		addChild(blockGroup);
-		generateProgramInputOutputShaderCaseBlocks(m_context, blockGroup, glslVersion, false, true, generateProgramInputBasicBlockContents<PROGRAMRESOURCEPROP_ARRAY_SIZE>);
+		generateProgramInputOutputShaderCaseBlocks(m_context, blockGroup, glslVersion, false, true, m_isGL45, generateProgramInputBasicBlockContents<PROGRAMRESOURCEPROP_ARRAY_SIZE>);
 	}
 
 	// .location
 	{
 		tcu::TestCaseGroup* const blockGroup = new tcu::TestCaseGroup(m_testCtx, "location", "Location");
 		addChild(blockGroup);
-		generateProgramInputOutputShaderCaseBlocks(m_context, blockGroup, glslVersion, false, true, generateProgramInputLocationBlockContents);
+		generateProgramInputOutputShaderCaseBlocks(m_context, blockGroup, glslVersion, false, true, m_isGL45, generateProgramInputLocationBlockContents);
 	}
 
 	// .name_length
 	{
 		tcu::TestCaseGroup* const blockGroup = new tcu::TestCaseGroup(m_testCtx, "name_length", "Name length");
 		addChild(blockGroup);
-		generateProgramInputOutputShaderCaseBlocks(m_context, blockGroup, glslVersion, false, true, generateProgramInputBasicBlockContents<PROGRAMRESOURCEPROP_NAME_LENGTH>);
+		generateProgramInputOutputShaderCaseBlocks(m_context, blockGroup, glslVersion, false, true, m_isGL45, generateProgramInputBasicBlockContents<PROGRAMRESOURCEPROP_NAME_LENGTH>);
 	}
 
 	// .referenced_by
@@ -6044,26 +6072,30 @@
 	{
 		tcu::TestCaseGroup* const blockGroup = new tcu::TestCaseGroup(m_testCtx, "type", "Type");
 		addChild(blockGroup);
-		generateProgramInputOutputShaderCaseBlocks(m_context, blockGroup, glslVersion, false, true, generateProgramInputTypeBlockContents);
+		generateProgramInputOutputShaderCaseBlocks(m_context, blockGroup, glslVersion, false, true, m_isGL45, generateProgramInputTypeBlockContents);
 	}
 
 	// .is_per_patch
 	{
 		tcu::TestCaseGroup* const blockGroup = new tcu::TestCaseGroup(m_testCtx, "is_per_patch", "Is per patch");
 		addChild(blockGroup);
-		generateProgramInputOutputShaderCaseBlocks(m_context, blockGroup, glslVersion, false, true, generateProgramInputBasicBlockContents<PROGRAMRESOURCEPROP_IS_PER_PATCH>);
+		generateProgramInputOutputShaderCaseBlocks(m_context, blockGroup, glslVersion, false, true, m_isGL45, generateProgramInputBasicBlockContents<PROGRAMRESOURCEPROP_IS_PER_PATCH>);
 	}
 }
 
 class ProgramOutputTestGroup : public TestCaseGroup
 {
 public:
-			ProgramOutputTestGroup	(Context& context);
+			ProgramOutputTestGroup	(Context& context, bool is_GL45);
 	void	init					(void);
+
+private:
+	bool m_isGL45;
 };
 
-ProgramOutputTestGroup::ProgramOutputTestGroup (Context& context)
+ProgramOutputTestGroup::ProgramOutputTestGroup (Context& context, bool is_GL45)
 	: TestCaseGroup(context, "program_output", "Program output")
+	, m_isGL45(is_GL45)
 {
 }
 
@@ -6075,28 +6107,28 @@
 	{
 		tcu::TestCaseGroup* const blockGroup = new tcu::TestCaseGroup(m_testCtx, "resource_list", "Resource list");
 		addChild(blockGroup);
-		generateProgramInputOutputShaderCaseBlocks(m_context, blockGroup, glslVersion, true, false, generateProgramOutputResourceListBlockContents);
+		generateProgramInputOutputShaderCaseBlocks(m_context, blockGroup, glslVersion, true, false, m_isGL45, generateProgramOutputResourceListBlockContents);
 	}
 
 	// .array_size
 	{
 		tcu::TestCaseGroup* const blockGroup = new tcu::TestCaseGroup(m_testCtx, "array_size", "Array size");
 		addChild(blockGroup);
-		generateProgramInputOutputShaderCaseBlocks(m_context, blockGroup, glslVersion, false, false, generateProgramOutputBasicBlockContents<PROGRAMRESOURCEPROP_ARRAY_SIZE>);
+		generateProgramInputOutputShaderCaseBlocks(m_context, blockGroup, glslVersion, false, false, m_isGL45, generateProgramOutputBasicBlockContents<PROGRAMRESOURCEPROP_ARRAY_SIZE>);
 	}
 
 	// .location
 	{
 		tcu::TestCaseGroup* const blockGroup = new tcu::TestCaseGroup(m_testCtx, "location", "Location");
 		addChild(blockGroup);
-		generateProgramInputOutputShaderCaseBlocks(m_context, blockGroup, glslVersion, false, false, generateProgramOutputLocationBlockContents);
+		generateProgramInputOutputShaderCaseBlocks(m_context, blockGroup, glslVersion, false, false, m_isGL45, generateProgramOutputLocationBlockContents);
 	}
 
 	// .name_length
 	{
 		tcu::TestCaseGroup* const blockGroup = new tcu::TestCaseGroup(m_testCtx, "name_length", "Name length");
 		addChild(blockGroup);
-		generateProgramInputOutputShaderCaseBlocks(m_context, blockGroup, glslVersion, false, false, generateProgramOutputBasicBlockContents<PROGRAMRESOURCEPROP_NAME_LENGTH>);
+		generateProgramInputOutputShaderCaseBlocks(m_context, blockGroup, glslVersion, false, false, m_isGL45, generateProgramOutputBasicBlockContents<PROGRAMRESOURCEPROP_NAME_LENGTH>);
 	}
 
 	// .referenced_by
@@ -6110,14 +6142,14 @@
 	{
 		tcu::TestCaseGroup* const blockGroup = new tcu::TestCaseGroup(m_testCtx, "type", "Type");
 		addChild(blockGroup);
-		generateProgramInputOutputShaderCaseBlocks(m_context, blockGroup, glslVersion, false, false, generateProgramOutputTypeBlockContents);
+		generateProgramInputOutputShaderCaseBlocks(m_context, blockGroup, glslVersion, false, false, m_isGL45, generateProgramOutputTypeBlockContents);
 	}
 
 	// .is_per_patch
 	{
 		tcu::TestCaseGroup* const blockGroup = new tcu::TestCaseGroup(m_testCtx, "is_per_patch", "Is per patch");
 		addChild(blockGroup);
-		generateProgramInputOutputShaderCaseBlocks(m_context, blockGroup, glslVersion, false, false, generateProgramOutputBasicBlockContents<PROGRAMRESOURCEPROP_IS_PER_PATCH>);
+		generateProgramInputOutputShaderCaseBlocks(m_context, blockGroup, glslVersion, false, false, m_isGL45, generateProgramOutputBasicBlockContents<PROGRAMRESOURCEPROP_IS_PER_PATCH>);
 	}
 }
 
@@ -7021,8 +7053,9 @@
 
 } // anonymous
 
-ProgramInterfaceQueryTests::ProgramInterfaceQueryTests (Context& context)
+ProgramInterfaceQueryTests::ProgramInterfaceQueryTests (Context& context, bool is_GL45)
 	: TestCaseGroup(context, "program_interface_query", "Program interface query tests")
+	, m_isGL45 (is_GL45)
 {
 }
 
@@ -7056,10 +7089,10 @@
 	addChild(new AtomicCounterTestGroup(m_context));
 
 	// .program_input
-	addChild(new ProgramInputTestGroup(m_context));
+	addChild(new ProgramInputTestGroup(m_context, m_isGL45));
 
 	// .program_output
-	addChild(new ProgramOutputTestGroup(m_context));
+	addChild(new ProgramOutputTestGroup(m_context, m_isGL45));
 
 	// .transform_feedback_varying
 	addChild(new TransformFeedbackVaryingTestGroup(m_context));
diff --git a/modules/gles31/functional/es31fProgramInterfaceQueryTests.hpp b/modules/gles31/functional/es31fProgramInterfaceQueryTests.hpp
index 29621ed..ce38cc4 100644
--- a/modules/gles31/functional/es31fProgramInterfaceQueryTests.hpp
+++ b/modules/gles31/functional/es31fProgramInterfaceQueryTests.hpp
@@ -36,7 +36,7 @@
 class ProgramInterfaceQueryTests : public TestCaseGroup
 {
 public:
-								ProgramInterfaceQueryTests	(Context& context);
+								ProgramInterfaceQueryTests	(Context& context, bool is_GL45);
 								~ProgramInterfaceQueryTests	(void);
 
 	void						init						(void);
@@ -44,6 +44,8 @@
 private:
 								ProgramInterfaceQueryTests	(const ProgramInterfaceQueryTests& other);
 	ProgramInterfaceQueryTests&	operator=					(const ProgramInterfaceQueryTests& other);
+
+	bool m_isGL45;
 };
 
 } // Functional
diff --git a/modules/gles31/functional/es31fSRGBDecodeTests.cpp b/modules/gles31/functional/es31fSRGBDecodeTests.cpp
index 9a6cdf4..6eb22a4 100644
--- a/modules/gles31/functional/es31fSRGBDecodeTests.cpp
+++ b/modules/gles31/functional/es31fSRGBDecodeTests.cpp
@@ -618,7 +618,8 @@
 	const int				totalShaderStages	= 2;
 
 	// default vertex shader used in all tests
-	m_shaderVertex =	"#version 310 es \n"
+	std::string ver(glu::isContextTypeGLCore(m_context.getRenderContext().getType()) ? "#version 450\n" : "#version 310 es\n");
+	m_shaderVertex =	ver +
 						"layout (location = 0) in mediump vec3 aPosition; \n"
 						"layout (location = 1) in mediump vec2 aTexCoord; \n"
 						"out mediump vec2 vs_aTexCoord; \n"
@@ -789,7 +790,7 @@
 	// fragment shader cannot contain more outputs than the number of texture uniforms
 	DE_ASSERT( !(static_cast<int>(m_shaderFragmentParameters.outputTotal) > static_cast<int>(m_shaderFragmentParameters.uniformTotal)) ) ;
 
-	source << "#version 310 es \n"
+	source << (glu::isContextTypeGLCore(m_context.getRenderContext().getType()) ? "#version 450\n" : "#version 310 es\n")
 		<< "in mediump vec2 vs_aTexCoord; \n";
 
 	for (int output = 0; output < m_shaderFragmentParameters.outputTotal; output++)
@@ -945,6 +946,8 @@
 
 void SRGBTestCase::init (void)
 {
+	const glw::Functions& gl = m_context.getRenderContext().getFunctions();
+
 	// extension requirements for test
 	if ( (glu::getInternalFormat(m_internalFormat) == GL_SRGB8_ALPHA8) && !m_context.getContextInfo().isExtensionSupported("GL_EXT_texture_sRGB_decode") )
 	{
@@ -957,6 +960,11 @@
 	}
 
 	m_framebuffer = de::MovePtr<glu::Framebuffer>(new glu::Framebuffer(m_context.getRenderContext()));
+
+	if (glu::isContextTypeGLCore(m_context.getRenderContext().getType()))
+	{
+		gl.enable(GL_FRAMEBUFFER_SRGB);
+	}
 }
 
 void SRGBTestCase::deinit (void)
@@ -971,6 +979,11 @@
 	}
 	m_renderBufferList.clear();
 
+	if (glu::isContextTypeGLCore(m_context.getRenderContext().getType()))
+	{
+		gl.disable(GL_FRAMEBUFFER_SRGB);
+	}
+
 	for (std::size_t textureSourceIdx = 0; textureSourceIdx < m_textureSourceList.size(); textureSourceIdx++)
 	{
 		delete m_textureSourceList[textureSourceIdx];
diff --git a/modules/gles31/functional/es31fSampleShadingTests.cpp b/modules/gles31/functional/es31fSampleShadingTests.cpp
index 4a89947..313d1bb 100644
--- a/modules/gles31/functional/es31fSampleShadingTests.cpp
+++ b/modules/gles31/functional/es31fSampleShadingTests.cpp
@@ -47,6 +47,14 @@
 namespace
 {
 
+static bool checkSupport(Context& ctx)
+{
+	auto contextType = ctx.getRenderContext().getType();
+	return contextSupports(contextType, glu::ApiType::es(3, 2)) ||
+		   contextSupports(contextType, glu::ApiType::core(4, 5)) ||
+		   ctx.getContextInfo().isExtensionSupported("GL_OES_sample_shading");
+}
+
 using namespace gls::StateQueryUtil;
 
 class SampleShadingStateCase : public TestCase
@@ -69,7 +77,7 @@
 
 void SampleShadingStateCase::init (void)
 {
-	if (!contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2)) && !m_context.getContextInfo().isExtensionSupported("GL_OES_sample_shading"))
+	if (!checkSupport(m_context))
 		throw tcu::NotSupportedError("Test requires GL_OES_sample_shading extension or a context version 3.2 or higher.");
 }
 
@@ -120,7 +128,7 @@
 
 void MinSampleShadingValueCase::init (void)
 {
-	if (!contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2)) && !m_context.getContextInfo().isExtensionSupported("GL_OES_sample_shading"))
+	if (!checkSupport(m_context))
 		throw tcu::NotSupportedError("Test requires GL_OES_sample_shading extension or a context version 3.2 or higher.");
 }
 
@@ -187,7 +195,7 @@
 
 void MinSampleShadingValueClampingCase::init (void)
 {
-	if (!contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2)) && !m_context.getContextInfo().isExtensionSupported("GL_OES_sample_shading"))
+	if (!checkSupport(m_context))
 		throw tcu::NotSupportedError("Test requires GL_OES_sample_shading extension or a context version 3.2 or higher.");
 }
 
@@ -274,8 +282,7 @@
 void SampleShadingRenderingCase::init (void)
 {
 	// requirements
-
-	if (!contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2)) && !m_context.getContextInfo().isExtensionSupported("GL_OES_sample_shading"))
+	if (!checkSupport(m_context))
 		throw tcu::NotSupportedError("Test requires GL_OES_sample_shading extension or a context version 3.2 or higher.");
 	if (m_renderTarget == TARGET_DEFAULT && m_context.getRenderTarget().getNumSamples() <= 1)
 		throw tcu::NotSupportedError("Multisampled default framebuffer required");
diff --git a/modules/gles31/functional/es31fSampleVariableTests.cpp b/modules/gles31/functional/es31fSampleVariableTests.cpp
index 4bca9ef..c6dc33a 100644
--- a/modules/gles31/functional/es31fSampleVariableTests.cpp
+++ b/modules/gles31/functional/es31fSampleVariableTests.cpp
@@ -276,8 +276,9 @@
 
 void MultisampleRenderCase::init (void)
 {
-	const bool	supportsES32 = glu::contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2));
-	if (!supportsES32 && !m_context.getContextInfo().isExtensionSupported("GL_OES_sample_variables"))
+	const bool supportsES32orGL45 = glu::contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2)) ||
+		contextSupports(m_context.getRenderContext().getType(), glu::ApiType::core(4, 5));
+	if (!supportsES32orGL45 && !m_context.getContextInfo().isExtensionSupported("GL_OES_sample_variables"))
 		TCU_THROW(NotSupportedError, "Test requires GL_OES_sample_variables extension or a context version 3.2 or higher.");
 
 	MultisampleShaderRenderUtil::MultisampleRenderCase::init();
@@ -920,9 +921,12 @@
 
 void SamplePosCorrectnessCase::init (void)
 {
-	const bool supportsES32 = glu::contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2));
+	auto		ctxType			= m_context.getRenderContext().getType();
+	const bool	isES32orGL45	= glu::contextSupports(ctxType, glu::ApiType::es(3, 2)) ||
+								  glu::contextSupports(ctxType, glu::ApiType::core(4, 5));
+
 	// requirements: per-invocation interpolation required
-	if (!supportsES32 && !m_context.getContextInfo().isExtensionSupported("GL_OES_shader_multisample_interpolation") &&
+	if (!isES32orGL45 && !m_context.getContextInfo().isExtensionSupported("GL_OES_shader_multisample_interpolation") &&
 		!m_context.getContextInfo().isExtensionSupported("GL_OES_sample_shading"))
 		TCU_THROW(NotSupportedError, "Test requires GL_OES_shader_multisample_interpolation or GL_OES_sample_shading extension or a context version 3.2 or higher.");
 
@@ -971,11 +975,14 @@
 {
 	DE_UNREF(numTargetSamples);
 
+	auto		ctxType	= m_context.getRenderContext().getType();
+	const bool	isES32	= glu::contextSupports(ctxType, glu::ApiType::es(3, 2));
+	const bool	isGL45	= glu::contextSupports(ctxType, glu::ApiType::core(4, 5));
+
 	std::ostringstream	buf;
-	const bool			supportsES32	= glu::contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2));
 	map<string, string>	args;
-	args["GLSL_VERSION_DECL"]	= supportsES32 ? getGLSLVersionDeclaration(glu::GLSL_VERSION_320_ES) : getGLSLVersionDeclaration(glu::GLSL_VERSION_310_ES);
-	args["GLSL_EXTENSION"]		= supportsES32 ? "" : m_useSampleQualifier ? "#extension GL_OES_shader_multisample_interpolation : require" : "";
+	args["GLSL_VERSION_DECL"]	= isES32 ? getGLSLVersionDeclaration(glu::GLSL_VERSION_320_ES) : getGLSLVersionDeclaration(glu::GLSL_VERSION_310_ES);
+	args["GLSL_EXTENSION"]		= (isES32 || isGL45) ? "" : m_useSampleQualifier ? "#extension GL_OES_shader_multisample_interpolation : require" : "";
 
 	buf <<	"${GLSL_VERSION_DECL}\n"
 			"${GLSL_EXTENSION}\n"
@@ -1078,9 +1085,10 @@
 
 void SampleMaskBaseCase::init (void)
 {
-	const bool supportsES32 = glu::contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2));
+	const bool supportsES32orGL45 = glu::contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2)) ||
+		contextSupports(m_context.getRenderContext().getType(), glu::ApiType::core(4, 5));
 	// required extra extension
-	if (m_runMode == RUN_PER_TWO_SAMPLES && !supportsES32 && !m_context.getContextInfo().isExtensionSupported("GL_OES_sample_shading"))
+	if (m_runMode == RUN_PER_TWO_SAMPLES && !supportsES32orGL45 && !m_context.getContextInfo().isExtensionSupported("GL_OES_sample_shading"))
 			TCU_THROW(NotSupportedError, "Test requires GL_OES_sample_shading extension or a context version 3.2 or higher.");
 
 	MultisampleRenderCase::init();
@@ -1208,10 +1216,11 @@
 
 	const bool			multisampleTarget	= (m_numRequestedSamples > 0) || (m_renderTarget == TARGET_DEFAULT && m_context.getRenderTarget().getNumSamples() > 1);
 	std::ostringstream	buf;
-	const bool			supportsES32		= glu::contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2));
+	const bool			supportsES32orGL45	= glu::contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2)) ||
+							contextSupports(m_context.getRenderContext().getType(), glu::ApiType::core(4, 5));
 	map<string, string>	args;
-	args["GLSL_VERSION_DECL"]				= supportsES32 ? getGLSLVersionDeclaration(glu::GLSL_VERSION_320_ES) : getGLSLVersionDeclaration(glu::GLSL_VERSION_310_ES);
-	args["GLSL_EXTENSION"]					= supportsES32 ? "" : "#extension GL_OES_sample_variables : require";
+	args["GLSL_VERSION_DECL"]				= supportsES32orGL45 ? getGLSLVersionDeclaration(glu::GLSL_VERSION_320_ES) : getGLSLVersionDeclaration(glu::GLSL_VERSION_310_ES);
+	args["GLSL_EXTENSION"]					= supportsES32orGL45 ? "" : "#extension GL_OES_sample_variables : require";
 
 	// test supports only one sample mask word
 	if (numTargetSamples > 32)
@@ -1367,10 +1376,11 @@
 	DE_ASSERT(numTargetSamples != 0);
 
 	std::ostringstream	buf;
-	const bool			supportsES32	= glu::contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2));
+	const bool			supportsES32orGL45	= glu::contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2)) ||
+							contextSupports(m_context.getRenderContext().getType(), glu::ApiType::core(4, 5));
 	map<string, string>	args;
-	args["GLSL_VERSION_DECL"]	= supportsES32 ? getGLSLVersionDeclaration(glu::GLSL_VERSION_320_ES) : getGLSLVersionDeclaration(glu::GLSL_VERSION_310_ES);
-	args["GLSL_EXTENSION"]		= supportsES32 ? "" : "#extension GL_OES_sample_variables : require";
+	args["GLSL_VERSION_DECL"]	= supportsES32orGL45 ? getGLSLVersionDeclaration(glu::GLSL_VERSION_320_ES) : getGLSLVersionDeclaration(glu::GLSL_VERSION_310_ES);
+	args["GLSL_EXTENSION"]		= supportsES32orGL45 ? "" : "#extension GL_OES_sample_variables : require";
 
 	// test supports only one sample mask word
 	if (numTargetSamples > 32)
@@ -1468,10 +1478,11 @@
 	DE_ASSERT(numTargetSamples != 0);
 
 	std::ostringstream	buf;
-	const bool			supportsES32	= glu::contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2));
+	const bool			supportsES32orGL45	= glu::contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2)) ||
+							contextSupports(m_context.getRenderContext().getType(), glu::ApiType::core(4, 5));
 	map<string, string>	args;
-	args["GLSL_VERSION_DECL"]	= supportsES32 ? getGLSLVersionDeclaration(glu::GLSL_VERSION_320_ES) : getGLSLVersionDeclaration(glu::GLSL_VERSION_310_ES);
-	args["GLSL_EXTENSION"]		= supportsES32 ? "" : "#extension GL_OES_sample_variables : require";
+	args["GLSL_VERSION_DECL"]	= supportsES32orGL45 ? getGLSLVersionDeclaration(glu::GLSL_VERSION_320_ES) : getGLSLVersionDeclaration(glu::GLSL_VERSION_310_ES);
+	args["GLSL_EXTENSION"]		= supportsES32orGL45 ? "" : "#extension GL_OES_sample_variables : require";
 
 	// test supports only one sample mask word
 	if (numTargetSamples > 32)
@@ -1711,10 +1722,11 @@
 	DE_ASSERT(numTargetSamples != 0);
 
 	std::ostringstream	buf;
-	const bool			supportsES32	= glu::contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2));
+	const bool			supportsES32orGL45	= glu::contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2)) ||
+							contextSupports(m_context.getRenderContext().getType(), glu::ApiType::core(4, 5));
 	map<string, string>	args;
-	args["GLSL_VERSION_DECL"]	= supportsES32 ? getGLSLVersionDeclaration(glu::GLSL_VERSION_320_ES) : getGLSLVersionDeclaration(glu::GLSL_VERSION_310_ES);
-	args["GLSL_EXTENSION"]		= supportsES32 ? "" : "#extension GL_OES_sample_variables : require";
+	args["GLSL_VERSION_DECL"]	= supportsES32orGL45 ? getGLSLVersionDeclaration(glu::GLSL_VERSION_320_ES) : getGLSLVersionDeclaration(glu::GLSL_VERSION_310_ES);
+	args["GLSL_EXTENSION"]		= supportsES32orGL45 ? "" : "#extension GL_OES_sample_variables : require";
 
 	// test supports only one sample mask word
 	if (numTargetSamples > 32)
@@ -2081,10 +2093,11 @@
 	DE_UNREF(numTargetSamples);
 
 	std::ostringstream	buf;
-	const bool			supportsES32	= glu::contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2));
+	const bool			supportsES32orGL45	= glu::contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2)) ||
+							contextSupports(m_context.getRenderContext().getType(), glu::ApiType::core(4, 5));
 	map<string, string>	args;
-	args["GLSL_VERSION_DECL"]	= supportsES32 ? getGLSLVersionDeclaration(glu::GLSL_VERSION_320_ES) : getGLSLVersionDeclaration(glu::GLSL_VERSION_310_ES);
-	args["GLSL_EXTENSION"]		= supportsES32 ? "" : "#extension GL_OES_sample_variables : require";
+	args["GLSL_VERSION_DECL"]	= supportsES32orGL45 ? getGLSLVersionDeclaration(glu::GLSL_VERSION_320_ES) : getGLSLVersionDeclaration(glu::GLSL_VERSION_310_ES);
+	args["GLSL_EXTENSION"]		= supportsES32orGL45 ? "" : "#extension GL_OES_sample_variables : require";
 
 	if (m_testMode == TEST_DISCARD)
 	{
diff --git a/modules/gles31/functional/es31fSeparateShaderTests.cpp b/modules/gles31/functional/es31fSeparateShaderTests.cpp
index dea33ce..87379f7 100644
--- a/modules/gles31/functional/es31fSeparateShaderTests.cpp
+++ b/modules/gles31/functional/es31fSeparateShaderTests.cpp
@@ -1316,12 +1316,23 @@
 	Random					rnd			(seed > 0 ? seed : m_rnd.getUint32());
 	Rectangle				viewport	= randomViewport(renderCtx, rnd,
 														 VIEWPORT_SIZE, VIEWPORT_SIZE);
+	deUint32				vao			= 0;
+
+	if (!glu::isContextTypeES(renderCtx.getType()))
+	{
+		glGenVertexArrays(1, &vao);
+		glBindVertexArray(vao);
+	}
+
 	glClearColor(0.125f, 0.25f, 0.5f, 1.f);
 	setViewport(renderCtx, viewport);
 	glClear(GL_COLOR_BUFFER_BIT);
 	GLU_CHECK_CALL(glDrawArrays(GL_TRIANGLES, 0, 3));
 	readRectangle(renderCtx, viewport, dst);
 	log().writeMessage("// Drew a triangle");
+
+	if (vao)
+		glDeleteVertexArrays(1, &vao);
 }
 
 void SeparateShaderTest::testPipelineRendering (MovePtr<Pipeline>& pipeOut)
@@ -1622,7 +1633,7 @@
 
 } // anonymous
 
-TestCaseGroup* createSeparateShaderTests (Context& ctx)
+TestCaseGroup* createCommonSeparateShaderTests (Context& ctx)
 {
 	TestParams		defaultParams;
 	int				numIterations	= 4;
@@ -1831,10 +1842,18 @@
 								 1, params, &SeparateShaderTest::testPipelineQueryActive));
 	}
 
+	return group;
+}
+
+TestCaseGroup* createGLESSeparateShaderTests (Context& ctx)
+{
+	TestCaseGroup*	group = createCommonSeparateShaderTests(ctx);
+
 	TestCaseGroup* interfaceMismatchGroup =
 		new TestCaseGroup(ctx, "validation", "Negative program pipeline interface matching");
 	group->addChild(interfaceMismatchGroup);
 
+
 	{
 		TestCaseGroup*						es31Group		= new TestCaseGroup(ctx, "es31", "GLSL ES 3.1 pipeline interface matching");
 		gls::ShaderLibrary					shaderLibrary	(ctx.getTestContext(), ctx.getRenderContext(), ctx.getContextInfo());
@@ -1858,8 +1877,8 @@
 	}
 
 	return group;
-}
 
+}
 } // Functional
 } // gles31
 } // deqp
diff --git a/modules/gles31/functional/es31fSeparateShaderTests.hpp b/modules/gles31/functional/es31fSeparateShaderTests.hpp
index 4dde4cc..89ff470 100644
--- a/modules/gles31/functional/es31fSeparateShaderTests.hpp
+++ b/modules/gles31/functional/es31fSeparateShaderTests.hpp
@@ -32,7 +32,8 @@
 namespace Functional
 {
 
-TestCaseGroup*		createSeparateShaderTests	(Context& context);
+TestCaseGroup*		createGLESSeparateShaderTests	(Context& context);
+TestCaseGroup*		createCommonSeparateShaderTests	(Context& context);
 
 } // Functional
 } // gles31
diff --git a/modules/gles31/functional/es31fShaderBuiltinConstantTests.cpp b/modules/gles31/functional/es31fShaderBuiltinConstantTests.cpp
index fb54439..d1151b2 100644
--- a/modules/gles31/functional/es31fShaderBuiltinConstantTests.cpp
+++ b/modules/gles31/functional/es31fShaderBuiltinConstantTests.cpp
@@ -158,27 +158,37 @@
 template<typename DataType>
 void ShaderBuiltinConstantCase<DataType>::init (void)
 {
-	const bool supportsES32 = contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2));
+	const bool supportsES32orGL45 = contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2)) ||
+									contextSupports(m_context.getRenderContext().getType(), glu::ApiType::core(4, 5));
+
+	if(!glu::isContextTypeES(m_context.getRenderContext().getType()))
+	{
+		if(m_varName == "gl_MaxVertexOutputVectors" || m_varName == "gl_MaxFragmentInputVectors")
+		{
+			std::string message = "The test requires a GLES context. The constant '" + m_varName + "' is not supported.";
+			TCU_THROW(NotSupportedError, message.c_str());
+		}
+	}
 
 	if (m_requiredExt == "GL_OES_sample_variables" || m_requiredExt == "GL_EXT_geometry_shader" || m_requiredExt == "GL_EXT_tessellation_shader")
 	{
-		if(!supportsES32)
+		if(!supportsES32orGL45)
 		{
-			const std::string message = "The test requires a 3.2 context or support for the extension " + m_requiredExt + ".";
+			const std::string message = "The test requires a GLES 3.2 or GL 4.5 context or support for the extension " + m_requiredExt + ".";
 			TCU_CHECK_AND_THROW(NotSupportedError, m_context.getContextInfo().isExtensionSupported(m_requiredExt.c_str()), message.c_str());
 		}
 	}
 	else if (!m_requiredExt.empty() && !m_context.getContextInfo().isExtensionSupported(m_requiredExt.c_str()))
 			throw tcu::NotSupportedError(m_requiredExt + " not supported");
 
-	if (!supportsES32 && (m_varName == "gl_MaxTessControlImageUniforms"	||
+	if (!supportsES32orGL45 && (m_varName == "gl_MaxTessControlImageUniforms"	||
 		m_varName == "gl_MaxTessEvaluationImageUniforms"			||
 		m_varName == "gl_MaxTessControlAtomicCounters"				||
 		m_varName == "gl_MaxTessEvaluationAtomicCounters"			||
 		m_varName == "gl_MaxTessControlAtomicCounterBuffers"		||
 		m_varName == "gl_MaxTessEvaluationAtomicCounterBuffers"))
 	{
-		std::string message = "The test requires a 3.2 context. The constant '" + m_varName + "' is not supported.";
+		std::string message = "The test requires a GLES 3.2 or GL 4.5 context. The constant '" + m_varName + "' is not supported.";
 		TCU_THROW(NotSupportedError, message.c_str());
 	}
 }
@@ -191,15 +201,16 @@
 {
 	using namespace gls::ShaderExecUtil;
 
-	const bool	supportsES32	= contextSupports(renderCtx.getType(), glu::ApiType::es(3, 2));
+	const bool	supportsES32orGL45	= contextSupports(renderCtx.getType(), glu::ApiType::es(3, 2)) ||
+									  contextSupports(renderCtx.getType(), glu::ApiType::core(4, 5));
 	ShaderSpec	shaderSpec;
 
-	shaderSpec.version	= supportsES32 ? glu::GLSL_VERSION_320_ES : glu::GLSL_VERSION_310_ES;
+	shaderSpec.version	= glu::getContextTypeGLSLVersion(renderCtx.getType());
 	shaderSpec.source	= string("result = ") + varName + ";\n";
 
 	shaderSpec.outputs.push_back(Symbol("result", glu::VarType(dataType, glu::PRECISION_HIGHP)));
 
-	if (!extName.empty() && !(supportsES32 && (extName == "GL_OES_sample_variables" || extName == "GL_EXT_geometry_shader" || extName == "GL_EXT_tessellation_shader")))
+	if (!extName.empty() && !(supportsES32orGL45 && (extName == "GL_OES_sample_variables" || extName == "GL_EXT_geometry_shader" || extName == "GL_EXT_tessellation_shader")))
 		shaderSpec.globalDeclarations = "#extension " + extName + " : require\n";
 
 	return createExecutor(renderCtx, shaderType, shaderSpec);
diff --git a/modules/gles31/functional/es31fShaderCommonFunctionTests.cpp b/modules/gles31/functional/es31fShaderCommonFunctionTests.cpp
index bae3ea3..4ac3021 100644
--- a/modules/gles31/functional/es31fShaderCommonFunctionTests.cpp
+++ b/modules/gles31/functional/es31fShaderCommonFunctionTests.cpp
@@ -265,7 +265,8 @@
 {
 	DE_ASSERT(!m_executor);
 
-	m_spec.version = contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2)) ? glu::GLSL_VERSION_320_ES : glu::GLSL_VERSION_310_ES;
+	glu::ContextType contextType = m_context.getRenderContext().getType();
+	m_spec.version = glu::getContextTypeGLSLVersion(contextType);
 
 	m_executor = createExecutor(m_context.getRenderContext(), m_shaderType, m_spec);
 	m_testCtx.getLog() << m_executor;
@@ -1939,8 +1940,9 @@
 	void init (void)
 	{
 		if (!glu::contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2))
-				&& !m_context.getContextInfo().isExtensionSupported("GL_EXT_gpu_shader5"))
-			throw tcu::NotSupportedError("GL_EXT_gpu_shader5 not supported");
+				&& !m_context.getContextInfo().isExtensionSupported("GL_EXT_gpu_shader5")
+				&& !glu::contextSupports(m_context.getRenderContext().getType(), glu::ApiType::core(4, 5)))
+			throw tcu::NotSupportedError("OpenGL ES 3.2, GL_EXT_gpu_shader5 not supported and OpenGL 4.5");
 
 		CommonFunctionCase::init();
 	}
diff --git a/modules/gles31/functional/es31fShaderFramebufferFetchTests.cpp b/modules/gles31/functional/es31fShaderFramebufferFetchTests.cpp
index 226b05a..0beeeec 100644
--- a/modules/gles31/functional/es31fShaderFramebufferFetchTests.cpp
+++ b/modules/gles31/functional/es31fShaderFramebufferFetchTests.cpp
@@ -542,6 +542,10 @@
 		0, 1, 2, 2, 3, 0,
 	};
 
+	GLuint vaoID;
+	m_gl.genVertexArrays(1, &vaoID);
+	m_gl.bindVertexArray(vaoID);
+
 	const GLuint	coordLocation	= m_gl.getAttribLocation(m_program->getProgram(), "a_position");
 
 	m_gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
@@ -559,6 +563,8 @@
 
 	m_gl.drawElements(GL_TRIANGLES, 6, GL_UNSIGNED_SHORT, DE_NULL);
 	GLU_EXPECT_NO_ERROR(m_gl.getError(), "render()");
+
+	m_gl.deleteVertexArrays(1, &vaoID);
 }
 
 // Test description:
diff --git a/modules/gles31/functional/es31fShaderHelperInvocationTests.cpp b/modules/gles31/functional/es31fShaderHelperInvocationTests.cpp
index a173d51..b51ca39 100644
--- a/modules/gles31/functional/es31fShaderHelperInvocationTests.cpp
+++ b/modules/gles31/functional/es31fShaderHelperInvocationTests.cpp
@@ -178,7 +178,7 @@
 	// Special state for certain primitives
 	if (primType == PRIMITIVETYPE_POINT || primType == PRIMITIVETYPE_WIDE_POINT)
 	{
-		const Vec2		range			= getRange(gl, GL_ALIASED_POINT_SIZE_RANGE);
+		const Vec2		range			= getRange(gl, glu::isContextTypeES(renderCtx.getType()) ? GL_ALIASED_POINT_SIZE_RANGE : GL_SMOOTH_POINT_SIZE_RANGE);
 		const bool		isWidePoint		= primType == PRIMITIVETYPE_WIDE_POINT;
 		const float		pointSize		= isWidePoint ? de::min(rnd->getFloat(minPointSize, maxPointSize), range.y()) : 1.0f;
 		const int		pointSizeLoc	= gl.getUniformLocation(program, "u_pointSize");
diff --git a/modules/gles31/functional/es31fShaderImageLoadStoreTests.cpp b/modules/gles31/functional/es31fShaderImageLoadStoreTests.cpp
index d27ed76..406709e 100644
--- a/modules/gles31/functional/es31fShaderImageLoadStoreTests.cpp
+++ b/modules/gles31/functional/es31fShaderImageLoadStoreTests.cpp
@@ -351,15 +351,22 @@
 
 static const char* const s_texBufExtString = "GL_EXT_texture_buffer";
 
+static bool supportsES32orGL45(const RenderContext& renderContext)
+{
+	glu::ContextType contextType = renderContext.getType();
+	return glu::contextSupports(contextType, glu::ApiType::es(3, 2)) ||
+		   glu::contextSupports(contextType, glu::ApiType::core(4, 5));
+}
+
 static inline void checkTextureTypeExtensions (const glu::ContextInfo& contextInfo, TextureType type, const RenderContext& renderContext)
 {
-	if (type == TEXTURETYPE_BUFFER && !contextInfo.isExtensionSupported(s_texBufExtString) && !glu::contextSupports(renderContext.getType(), glu::ApiType::es(3, 2)))
+	if (type == TEXTURETYPE_BUFFER && !contextInfo.isExtensionSupported(s_texBufExtString) && !supportsES32orGL45(renderContext))
 		throw tcu::NotSupportedError("Test requires " + string(s_texBufExtString) + " extension");
 }
 
 static inline string textureTypeExtensionShaderRequires (TextureType type, const RenderContext& renderContext)
 {
-	if (!glu::contextSupports(renderContext.getType(), glu::ApiType::es(3, 2)) && (type == TEXTURETYPE_BUFFER))
+	if (!supportsES32orGL45(renderContext) && (type == TEXTURETYPE_BUFFER))
 		return "#extension " + string(s_texBufExtString) + " : require\n";
 	else
 		return "";
@@ -369,7 +376,7 @@
 
 static inline string imageAtomicExtensionShaderRequires (const RenderContext& renderContext)
 {
-	if (!glu::contextSupports(renderContext.getType(), glu::ApiType::es(3, 2)))
+	if (!supportsES32orGL45(renderContext))
 		return "#extension " + string(s_imageAtomicExtString) + " : require\n";
 	else
 		return "";
@@ -1917,10 +1924,11 @@
 
 void BinaryAtomicOperationCase::init (void)
 {
-	if (!m_context.getContextInfo().isExtensionSupported("GL_OES_shader_image_atomic") && !glu::contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2)))
+	const glu::RenderContext& renderContext = m_context.getRenderContext();
+	if (!m_context.getContextInfo().isExtensionSupported("GL_OES_shader_image_atomic") && !supportsES32orGL45(renderContext))
 		throw tcu::NotSupportedError("Test requires OES_shader_image_atomic extension");
 
-	checkTextureTypeExtensions(m_context.getContextInfo(), m_imageType, m_context.getRenderContext());
+	checkTextureTypeExtensions(m_context.getContextInfo(), m_imageType, renderContext);
 }
 
 BinaryAtomicOperationCase::IterateResult BinaryAtomicOperationCase::iterate (void)
@@ -2162,10 +2170,11 @@
 
 void AtomicCompSwapCase::init (void)
 {
-	if (!m_context.getContextInfo().isExtensionSupported("GL_OES_shader_image_atomic") && !glu::contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2)))
+	const glu::RenderContext& renderContext = m_context.getRenderContext();
+	if (!m_context.getContextInfo().isExtensionSupported("GL_OES_shader_image_atomic") && !supportsES32orGL45(renderContext))
 		throw tcu::NotSupportedError("Test requires OES_shader_image_atomic extension");
 
-	checkTextureTypeExtensions(m_context.getContextInfo(), m_imageType, m_context.getRenderContext());
+	checkTextureTypeExtensions(m_context.getContextInfo(), m_imageType, renderContext);
 }
 
 class AtomicCompSwapCase::EndResultVerifier : public ImageLayerVerifier
@@ -2911,7 +2920,7 @@
 		if (m_context.getContextInfo().getInt(GL_MAX_FRAGMENT_IMAGE_UNIFORMS) == 0)
 			throw tcu::NotSupportedError("GL_MAX_FRAGMENT_IMAGE_UNIFORMS is zero");
 
-		if (!m_context.getContextInfo().isExtensionSupported("GL_OES_shader_image_atomic") && !glu::contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2)))
+		if (!m_context.getContextInfo().isExtensionSupported("GL_OES_shader_image_atomic") && !supportsES32orGL45(m_context.getRenderContext()))
 			throw tcu::NotSupportedError("Test requires OES_shader_image_atomic extension");
 
 		if (m_type == TESTTYPE_DEPTH				&&
diff --git a/modules/gles31/functional/es31fShaderMultisampleInterpolationStateQueryTests.cpp b/modules/gles31/functional/es31fShaderMultisampleInterpolationStateQueryTests.cpp
index 4b8ca80..8303795 100644
--- a/modules/gles31/functional/es31fShaderMultisampleInterpolationStateQueryTests.cpp
+++ b/modules/gles31/functional/es31fShaderMultisampleInterpolationStateQueryTests.cpp
@@ -78,9 +78,11 @@
 
 void InterpolationOffsetCase::init (void)
 {
-	const bool supportsES32 = glu::contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2));
+	auto		ctxType			= m_context.getRenderContext().getType();
+	const bool	isES32orGL45	= glu::contextSupports(ctxType, glu::ApiType::es(3, 2)) ||
+								  glu::contextSupports(ctxType, glu::ApiType::core(4, 5));
 
-	if (!supportsES32 && !m_context.getContextInfo().isExtensionSupported("GL_OES_shader_multisample_interpolation"))
+	if (!isES32orGL45 && !m_context.getContextInfo().isExtensionSupported("GL_OES_shader_multisample_interpolation"))
 		throw tcu::NotSupportedError("Test requires GL_OES_shader_multisample_interpolation extension");
 }
 
@@ -126,9 +128,11 @@
 
 void FragmentInterpolationOffsetBitsCase::init (void)
 {
-	const bool supportsES32 = glu::contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2));
+	auto		ctxType			= m_context.getRenderContext().getType();
+	const bool	isES32orGL45	= glu::contextSupports(ctxType, glu::ApiType::es(3, 2)) ||
+								  glu::contextSupports(ctxType, glu::ApiType::core(4, 5));
 
-	if (!supportsES32 && !m_context.getContextInfo().isExtensionSupported("GL_OES_shader_multisample_interpolation"))
+	if (!isES32orGL45 && !m_context.getContextInfo().isExtensionSupported("GL_OES_shader_multisample_interpolation"))
 		throw tcu::NotSupportedError("Test requires GL_OES_shader_multisample_interpolation extension");
 }
 
diff --git a/modules/gles31/functional/es31fShaderMultisampleInterpolationTests.cpp b/modules/gles31/functional/es31fShaderMultisampleInterpolationTests.cpp
index 8875d12..15f21e1 100644
--- a/modules/gles31/functional/es31fShaderMultisampleInterpolationTests.cpp
+++ b/modules/gles31/functional/es31fShaderMultisampleInterpolationTests.cpp
@@ -50,16 +50,24 @@
 
 static std::string specializeShader(const std::string& shaderSource, const glu::ContextType& contextType)
 {
-	const bool supportsES32 = glu::contextSupports(contextType, glu::ApiType::es(3, 2));
+	const bool	isES32orGL45	= glu::contextSupports(contextType, glu::ApiType::es(3, 2)) ||
+								  glu::contextSupports(contextType, glu::ApiType::core(4, 5));
 
 	std::map<std::string, std::string> args;
 	args["GLSL_VERSION_DECL"]							= glu::getGLSLVersionDeclaration(glu::getContextTypeGLSLVersion(contextType));
-	args["GLSL_EXT_SHADER_MULTISAMPLE_INTERPOLATION"]	= supportsES32 ? "" : "#extension GL_OES_shader_multisample_interpolation : require\n";
-	args["GLSL_EXT_SAMPLE_VARIABLES"]					= supportsES32 ? "" : "#extension GL_OES_sample_variables : require\n";
+	args["GLSL_EXT_SHADER_MULTISAMPLE_INTERPOLATION"]	= isES32orGL45 ? "" : "#extension GL_OES_shader_multisample_interpolation : require\n";
+	args["GLSL_EXT_SAMPLE_VARIABLES"]					= isES32orGL45 ? "" : "#extension GL_OES_sample_variables : require\n";
 
 	return tcu::StringTemplate(shaderSource).specialize(args);
 }
 
+static bool checkSupport(Context& ctx)
+{
+	auto ctxType = ctx.getRenderContext().getType();
+	return glu::contextSupports(ctxType, glu::ApiType::es(3, 2)) ||
+		   glu::contextSupports(ctxType, glu::ApiType::core(4, 5));
+}
+
 static bool verifyGreenImage (const tcu::Surface& image, tcu::TestLog& log)
 {
 	bool error = false;
@@ -123,7 +131,7 @@
 void MultisampleShadeCountRenderCase::init (void)
 {
 	// requirements
-	if (!m_context.getContextInfo().isExtensionSupported("GL_OES_shader_multisample_interpolation") && !glu::contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2)))
+	if (!checkSupport(m_context) && !m_context.getContextInfo().isExtensionSupported("GL_OES_shader_multisample_interpolation"))
 		TCU_THROW(NotSupportedError, "Test requires GL_OES_shader_multisample_interpolation extension");
 
 	MultisampleShaderRenderUtil::MultisampleRenderCase::init();
@@ -664,7 +672,7 @@
 void SingleSampleInterpolateAtSampleCase::init (void)
 {
 	// requirements
-	if (!m_context.getContextInfo().isExtensionSupported("GL_OES_shader_multisample_interpolation") && !glu::contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2)))
+	if (!checkSupport(m_context) && !m_context.getContextInfo().isExtensionSupported("GL_OES_shader_multisample_interpolation"))
 		TCU_THROW(NotSupportedError, "Test requires GL_OES_shader_multisample_interpolation extension");
 	if (m_renderTarget == TARGET_DEFAULT && m_context.getRenderTarget().getNumSamples() > 1)
 		TCU_THROW(NotSupportedError, "Non-multisample framebuffer required");
@@ -775,7 +783,7 @@
 void CentroidRenderCase::init (void)
 {
 	// requirements
-	if (!m_context.getContextInfo().isExtensionSupported("GL_OES_shader_multisample_interpolation") && !glu::contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2)))
+	if (!checkSupport(m_context) && !m_context.getContextInfo().isExtensionSupported("GL_OES_shader_multisample_interpolation"))
 		TCU_THROW(NotSupportedError, "Test requires GL_OES_shader_multisample_interpolation extension");
 
 	MultisampleShaderRenderUtil::MultisampleRenderCase::init();
@@ -954,9 +962,9 @@
 void InterpolateAtSampleIDCase::init (void)
 {
 	// requirements
-	if (!m_context.getContextInfo().isExtensionSupported("GL_OES_shader_multisample_interpolation") && !glu::contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2)))
+	if (!checkSupport(m_context) && !m_context.getContextInfo().isExtensionSupported("GL_OES_shader_multisample_interpolation"))
 		TCU_THROW(NotSupportedError, "Test requires GL_OES_shader_multisample_interpolation extension");
-	if (!m_context.getContextInfo().isExtensionSupported("GL_OES_sample_variables") && !glu::contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2)))
+	if (!checkSupport(m_context) && !m_context.getContextInfo().isExtensionSupported("GL_OES_sample_variables"))
 		TCU_THROW(NotSupportedError, "Test requires GL_OES_sample_variables extension");
 
 	// test purpose and expectations
@@ -1227,7 +1235,7 @@
 void InterpolateAtOffsetCase::init (void)
 {
 	// requirements
-	if (!m_context.getContextInfo().isExtensionSupported("GL_OES_shader_multisample_interpolation") && !glu::contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2)))
+	if (!checkSupport(m_context) && !m_context.getContextInfo().isExtensionSupported("GL_OES_shader_multisample_interpolation"))
 		TCU_THROW(NotSupportedError, "Test requires GL_OES_shader_multisample_interpolation extension");
 
 	// test purpose and expectations
@@ -1358,9 +1366,9 @@
 void InterpolateAtSamplePositionCase::init (void)
 {
 	// requirements
-	if (!m_context.getContextInfo().isExtensionSupported("GL_OES_shader_multisample_interpolation") && !glu::contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2)))
+	if (!checkSupport(m_context) && !m_context.getContextInfo().isExtensionSupported("GL_OES_shader_multisample_interpolation"))
 		TCU_THROW(NotSupportedError, "Test requires GL_OES_shader_multisample_interpolation extension");
-	if (!m_context.getContextInfo().isExtensionSupported("GL_OES_sample_variables") && !glu::contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2)))
+	if (!checkSupport(m_context) && !m_context.getContextInfo().isExtensionSupported("GL_OES_sample_variables"))
 		TCU_THROW(NotSupportedError, "Test requires GL_OES_sample_variables extension");
 
 	// test purpose and expectations
@@ -1478,9 +1486,20 @@
 
 void NegativeCompileInterpolationCase::init (void)
 {
-	if (!m_context.getContextInfo().isExtensionSupported("GL_OES_shader_multisample_interpolation") && !glu::contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2)))
+	if (!checkSupport(m_context) && !m_context.getContextInfo().isExtensionSupported("GL_OES_shader_multisample_interpolation"))
 		TCU_THROW(NotSupportedError, "Test requires GL_OES_shader_multisample_interpolation extension");
 
+	if(!glu::isContextTypeES(m_context.getRenderContext().getType()))
+	{
+		if(m_caseType == CASE_VEC4_IDENTITY_SWIZZLE
+		   || m_caseType == CASE_VEC4_CROP_SWIZZLE
+		   || m_caseType == CASE_VEC4_MIXED_SWIZZLE
+		   || m_caseType == CASE_INTERPOLATE_IVEC4
+		   || m_caseType == CASE_INTERPOLATE_UVEC4
+		   || m_caseType == CASE_INTERPOLATE_STRUCT_MEMBER)
+			TCU_THROW(NotSupportedError, "Test requires a GLES context");
+	}
+
 	m_testCtx.getLog() << tcu::TestLog::Message << "Trying to compile illegal shader, expecting compile to fail." << tcu::TestLog::EndMessage;
 }
 
diff --git a/modules/gles31/functional/es31fShaderStateQueryTests.cpp b/modules/gles31/functional/es31fShaderStateQueryTests.cpp
index a60724f..283637e 100644
--- a/modules/gles31/functional/es31fShaderStateQueryTests.cpp
+++ b/modules/gles31/functional/es31fShaderStateQueryTests.cpp
@@ -97,9 +97,11 @@
 
 	tcu::ResultCollector		result			(m_testCtx.getLog());
 	std::vector<TestTypeInfo>	samplerTypes	= getInfos();
-	const bool					supportsES32	= glu::contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2));
+	auto						ctxType			= m_context.getRenderContext().getType();
+	const bool					isES32orGL45	= glu::contextSupports(ctxType, glu::ApiType::es(3, 2)) ||
+												  glu::contextSupports(ctxType, glu::ApiType::core(4, 5));
 
-	if (m_extension && !m_context.getContextInfo().isExtensionSupported(m_extension) && !supportsES32)
+	if (m_extension && !isES32orGL45 && !m_context.getContextInfo().isExtensionSupported(m_extension))
 		throw tcu::NotSupportedError("Test requires " + std::string(m_extension));
 	checkRequirements();
 
@@ -112,8 +114,8 @@
 		std::map<std::string, std::string>	shaderArgs;
 		shaderArgs["DECLARATIONSTR"]		= samplerTypes[typeNdx].declarationStr;
 		shaderArgs["ACCESSSTR"]				= samplerTypes[typeNdx].accessStr;
-		shaderArgs["EXTENSIONSTATEMENT"]	= (m_extension && !supportsES32) ? (std::string() + "#extension " + m_extension + " : require\n") : ("");
-		shaderArgs["VERSIONDECL"]			= glu::getGLSLVersionDeclaration(glu::getContextTypeGLSLVersion(m_context.getRenderContext().getType()));
+		shaderArgs["EXTENSIONSTATEMENT"]	= (m_extension && !isES32orGL45) ? (std::string() + "#extension " + m_extension + " : require\n") : ("");
+		shaderArgs["VERSIONDECL"]			= glu::getGLSLVersionDeclaration(glu::getContextTypeGLSLVersion(ctxType));
 
 		const std::string					fragmentSource	= tcu::StringTemplate(fragmentSourceTemplate).specialize(shaderArgs);
 		const std::string					vertexSource	= tcu::StringTemplate(vertexSourceTemplate).specialize(shaderArgs);
@@ -379,7 +381,9 @@
 
 void ShaderLogCase::init (void)
 {
-	const bool supportsES32 = glu::contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2));
+	auto		ctxType			= m_context.getRenderContext().getType();
+	const bool	isES32orGL45	= glu::contextSupports(ctxType, glu::ApiType::es(3, 2)) ||
+								  glu::contextSupports(ctxType, glu::ApiType::core(4, 5));
 
 	switch (m_shaderType)
 	{
@@ -389,13 +393,13 @@
 			break;
 
 		case glu::SHADERTYPE_GEOMETRY:
-			if (!m_context.getContextInfo().isExtensionSupported("GL_EXT_geometry_shader") && !supportsES32)
+			if (!m_context.getContextInfo().isExtensionSupported("GL_EXT_geometry_shader") && !isES32orGL45)
 				throw tcu::NotSupportedError("Test requires GL_EXT_geometry_shader extension or an OpenGL ES 3.2 or higher context.");
 			break;
 
 		case glu::SHADERTYPE_TESSELLATION_CONTROL:
 		case glu::SHADERTYPE_TESSELLATION_EVALUATION:
-			if (!m_context.getContextInfo().isExtensionSupported("GL_EXT_tessellation_shader") && !supportsES32)
+			if (!m_context.getContextInfo().isExtensionSupported("GL_EXT_tessellation_shader") && !isES32orGL45)
 				throw tcu::NotSupportedError("Test requires GL_EXT_tessellation_shader extension or an OpenGL ES 3.2 or higher context.");
 			break;
 
diff --git a/modules/gles31/functional/es31fShaderTextureSizeTests.cpp b/modules/gles31/functional/es31fShaderTextureSizeTests.cpp
index 29786de..c76e10e 100644
--- a/modules/gles31/functional/es31fShaderTextureSizeTests.cpp
+++ b/modules/gles31/functional/es31fShaderTextureSizeTests.cpp
@@ -100,6 +100,7 @@
 
 	glw::GLuint				m_texture;
 	glw::GLuint				m_vbo;
+	glw::GLuint				m_vao;
 	glu::ShaderProgram*		m_shader;
 	std::vector<tcu::IVec3>	m_iterations;
 	int						m_iteration;
@@ -115,6 +116,7 @@
 	, m_isArrayType			(m_type == TEXTURE_FLOAT_2D_ARRAY || m_type == TEXTURE_INT_2D_ARRAY || m_type == TEXTURE_UINT_2D_ARRAY)
 	, m_texture				(0)
 	, m_vbo					(0)
+	, m_vao					(0)
 	, m_shader				(DE_NULL)
 	, m_iteration			(0)
 	, m_allIterationsPassed	(true)
@@ -159,11 +161,13 @@
 		tcu::Vec4( 1.0f, -1.0f, 0.0f, 1.0f)
 	};
 
-	const glw::Functions&	gl					= m_context.getRenderContext().getFunctions();
-	const bool				supportsES32		= glu::contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2));
+	glu::RenderContext&		rc					= m_context.getRenderContext();
+	const glw::Functions&	gl					= rc.getFunctions();
+	const bool				supportsES32orGL45	= glu::contextSupports(rc.getType(), glu::ApiType::es(3, 2)) ||
+												  glu::contextSupports(rc.getType(), glu::ApiType::core(4, 5));
 
 	// requirements
-	if (m_isArrayType && !supportsES32 && !m_context.getContextInfo().isExtensionSupported("GL_OES_texture_storage_multisample_2d_array"))
+	if (m_isArrayType && !supportsES32orGL45 && !m_context.getContextInfo().isExtensionSupported("GL_OES_texture_storage_multisample_2d_array"))
 		TCU_THROW(NotSupportedError, "Test requires OES_texture_storage_multisample_2d_array extension");
 
 	if (m_context.getRenderTarget().getWidth() < 1 || m_context.getRenderTarget().getHeight() < 1)
@@ -193,6 +197,9 @@
 	gl.bindBuffer(GL_ARRAY_BUFFER, m_vbo);
 	gl.bufferData(GL_ARRAY_BUFFER, sizeof(fullscreenQuad), fullscreenQuad, GL_STATIC_DRAW);
 
+	if (!glu::isContextTypeES(m_context.getRenderContext().getType()))
+		gl.genVertexArrays(1, &m_vao);
+
 	// gen iterations
 
 	m_testCtx.getLog()
@@ -244,6 +251,12 @@
 		m_vbo = 0;
 	}
 
+	if (m_vao)
+	{
+		m_context.getRenderContext().getFunctions().deleteVertexArrays(1, &m_vao);
+		m_vao = 0;
+	}
+
 	if (m_shader)
 	{
 		delete m_shader;
@@ -346,10 +359,11 @@
 	else
 		args["SIZETYPE"] = "ivec3";
 
-	const glu::ContextType	contextType	= m_context.getRenderContext().getType();
-	const bool				supportsES32	= glu::contextSupports(contextType, glu::ApiType::es(3, 2));
+	const glu::ContextType	contextType			= m_context.getRenderContext().getType();
+	const bool				supportsES32orGL45	= glu::contextSupports(contextType, glu::ApiType::es(3, 2)) ||
+												  glu::contextSupports(contextType, glu::ApiType::core(4, 5));
 
-	if (m_isArrayType && !supportsES32)
+	if (m_isArrayType && !supportsES32orGL45)
 		args["EXTENSION_STATEMENT"] = "#extension GL_OES_texture_storage_multisample_2d_array : require\n";
 	else
 		args["EXTENSION_STATEMENT"] = "";
@@ -439,6 +453,9 @@
 	gl.clear(GL_COLOR_BUFFER_BIT);
 	GLU_EXPECT_NO_ERROR(gl.getError(), "clear");
 
+	if (m_vao)
+		gl.bindVertexArray(m_vao);
+
 	gl.bindBuffer(GL_ARRAY_BUFFER, m_vbo);
 	gl.vertexAttribPointer(positionLoc, 4, GL_FLOAT, GL_FALSE, 0, DE_NULL);
 	gl.enableVertexAttribArray(positionLoc);
@@ -460,6 +477,8 @@
 
 	gl.disableVertexAttribArray(positionLoc);
 	gl.useProgram(0);
+	if (m_vao)
+		gl.bindVertexArray(0);
 	GLU_EXPECT_NO_ERROR(gl.getError(), "cleanup");
 
 	gl.finish();
diff --git a/modules/gles31/functional/es31fStencilTexturingTests.cpp b/modules/gles31/functional/es31fStencilTexturingTests.cpp
index c7c8646..c0a311f 100644
--- a/modules/gles31/functional/es31fStencilTexturingTests.cpp
+++ b/modules/gles31/functional/es31fStencilTexturingTests.cpp
@@ -491,8 +491,11 @@
 {
 	if (format == GL_STENCIL_INDEX8)
 	{
-		const char* reqExt = "GL_OES_texture_stencil8";
-		if ((context.getRenderContext().getType().getAPI() != glu::ApiType::core(3,2)) && !context.getContextInfo().isExtensionSupported(reqExt))
+		const char*			reqExt		= "GL_OES_texture_stencil8";
+		glu::ContextType	contextType	= context.getRenderContext().getType();
+		if (!glu::contextSupports(contextType, glu::ApiType::es(3, 2)) &&
+			!glu::contextSupports(contextType, glu::ApiType::core(4, 5)) &&
+			!context.getContextInfo().isExtensionSupported(reqExt))
 			throw tcu::NotSupportedError(glu::getTextureFormatStr(format).toString() + " requires " + reqExt);
 	}
 	else
diff --git a/modules/gles31/functional/es31fSynchronizationTests.cpp b/modules/gles31/functional/es31fSynchronizationTests.cpp
index 006dbd0..bf5d6d4 100644
--- a/modules/gles31/functional/es31fSynchronizationTests.cpp
+++ b/modules/gles31/functional/es31fSynchronizationTests.cpp
@@ -49,6 +49,14 @@
 namespace
 {
 
+static bool checkSupport(Context& ctx)
+{
+	auto ctxType = ctx.getRenderContext().getType();
+	return contextSupports(ctxType, glu::ApiType::es(3, 2)) ||
+		   contextSupports(ctxType, glu::ApiType::core(4, 5)) ||
+		   ctx.getContextInfo().isExtensionSupported("GL_OES_shader_image_atomic");
+}
+
 static bool validateSortedAtomicRampAdditionValueChain (const std::vector<deUint32>& valueChain, deUint32 sumValue, int& invalidOperationNdx, deUint32& errorDelta, deUint32& errorExpected)
 {
 	std::vector<deUint32> chainDelta(valueChain.size());
@@ -114,15 +122,14 @@
 
 static std::string specializeShader(Context& context, const char* code)
 {
-	const glu::GLSLVersion				glslVersion			= glu::getContextTypeGLSLVersion(context.getRenderContext().getType());
-	std::map<std::string, std::string>	specializationMap;
+	auto					ctxType			= context.getRenderContext().getType();
+	const bool				isES32orGL45	= glu::contextSupports(ctxType, glu::ApiType::es(3, 2)) ||
+											  glu::contextSupports(ctxType, glu::ApiType::core(4, 5));
+	const glu::GLSLVersion	glslVersion		= glu::getContextTypeGLSLVersion(ctxType);
 
-	specializationMap["GLSL_VERSION_DECL"] = glu::getGLSLVersionDeclaration(glslVersion);
-
-	if (glu::contextSupports(context.getRenderContext().getType(), glu::ApiType::es(3, 2)))
-		specializationMap["SHADER_IMAGE_ATOMIC_REQUIRE"] = "";
-	else
-		specializationMap["SHADER_IMAGE_ATOMIC_REQUIRE"] = "#extension GL_OES_shader_image_atomic : require";
+	std::map<std::string, std::string> specializationMap;
+	specializationMap["GLSL_VERSION_DECL"]				= glu::getGLSLVersionDeclaration(glslVersion);
+	specializationMap["SHADER_IMAGE_ATOMIC_REQUIRE"]	= isES32orGL45 ? "" : "#extension GL_OES_shader_image_atomic : require";
 
 	return tcu::StringTemplate(code).specialize(specializationMap);
 }
@@ -204,11 +211,10 @@
 void InterInvocationTestCase::init (void)
 {
 	const glw::Functions&	gl				= m_context.getRenderContext().getFunctions();
-	const bool				supportsES32	= glu::contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2));
 
 	// requirements
 
-	if (m_useAtomic && m_storage == STORAGE_IMAGE && !supportsES32 && !m_context.getContextInfo().isExtensionSupported("GL_OES_shader_image_atomic"))
+	if (m_useAtomic && m_storage == STORAGE_IMAGE && !checkSupport(m_context))
 		throw tcu::NotSupportedError("Test requires GL_OES_shader_image_atomic extension");
 
 	// program
@@ -382,6 +388,7 @@
 	bool					error				= false;
 
 	gl.bindBuffer(GL_SHADER_STORAGE_BUFFER, m_resultBuf);
+	gl.memoryBarrier(GL_BUFFER_UPDATE_BARRIER_BIT);
 	mapped = gl.mapBufferRange(GL_SHADER_STORAGE_BUFFER, 0, m_workWidth * m_workHeight * sizeof(deInt32), GL_MAP_READ_BIT);
 	GLU_EXPECT_NO_ERROR(gl.getError(), "map buffer");
 
@@ -1154,11 +1161,10 @@
 void InterCallTestCase::init (void)
 {
 	int			programFriendlyName = 0;
-	const bool	supportsES32		= glu::contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2));
 
 	// requirements
 
-	if (m_useAtomic && m_storage == STORAGE_IMAGE && !supportsES32 && !m_context.getContextInfo().isExtensionSupported("GL_OES_shader_image_atomic"))
+	if (m_useAtomic && m_storage == STORAGE_IMAGE && !checkSupport(m_context))
 		throw tcu::NotSupportedError("Test requires GL_OES_shader_image_atomic extension");
 
 	// generate resources and validate command list
@@ -2637,9 +2643,8 @@
 {
 	const glw::Functions&	gl					= m_context.getRenderContext().getFunctions();
 	std::vector<deUint32>	zeroData			(m_workSize * m_workSize, 0);
-	const bool				supportsES32		= glu::contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2));
 
-	if (!supportsES32 && !m_context.getContextInfo().isExtensionSupported("GL_OES_shader_image_atomic"))
+	if (!checkSupport(m_context))
 		throw tcu::NotSupportedError("Test requires GL_OES_shader_image_atomic");
 
 	// gen image
diff --git a/modules/gles31/functional/es31fTextureBufferTests.cpp b/modules/gles31/functional/es31fTextureBufferTests.cpp
index 1a88627..782781b 100644
--- a/modules/gles31/functional/es31fTextureBufferTests.cpp
+++ b/modules/gles31/functional/es31fTextureBufferTests.cpp
@@ -126,6 +126,15 @@
 namespace
 {
 
+static void checkSupport(Context& ctx)
+{
+	auto	ctxType	 = ctx.getRenderContext().getType();
+	if (!glu::contextSupports(ctxType, glu::ApiType::es(3, 2)) &&
+		!glu::contextSupports(ctxType, glu::ApiType::core(4, 5)) &&
+		!ctx.getContextInfo().isExtensionSupported("GL_EXT_texture_buffer"))
+		TCU_THROW(NotSupportedError, "GL_EXT_texture_buffer is not supported");
+}
+
 using namespace gls::StateQueryUtil;
 
 class LimitQueryCase : public TestCase
@@ -151,8 +160,7 @@
 
 LimitQueryCase::IterateResult LimitQueryCase::iterate (void)
 {
-	const bool supportsES32 = glu::contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2));
-	TCU_CHECK_AND_THROW(NotSupportedError, supportsES32 || m_context.getContextInfo().isExtensionSupported("GL_EXT_texture_buffer"), "GL_EXT_texture_buffer is not supported");
+	checkSupport(m_context);
 
 	glu::CallLogWrapper		gl		(m_context.getRenderContext().getFunctions(), m_testCtx.getLog());
 	tcu::ResultCollector	result	(m_testCtx.getLog(), " // ERROR: ");
@@ -187,8 +195,7 @@
 
 AlignmentQueryCase::IterateResult AlignmentQueryCase::iterate (void)
 {
-	const bool supportsES32 = glu::contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2));
-	TCU_CHECK_AND_THROW(NotSupportedError, supportsES32 || m_context.getContextInfo().isExtensionSupported("GL_EXT_texture_buffer"), "GL_EXT_texture_buffer is not supported");
+	checkSupport(m_context);
 
 	glu::CallLogWrapper		gl		(m_context.getRenderContext().getFunctions(), m_testCtx.getLog());
 	tcu::ResultCollector	result	(m_testCtx.getLog(), " // ERROR: ");
@@ -219,8 +226,7 @@
 
 TextureBufferBindingQueryCase::IterateResult TextureBufferBindingQueryCase::iterate (void)
 {
-	const bool supportsES32 = glu::contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2));
-	TCU_CHECK_AND_THROW(NotSupportedError, supportsES32 || m_context.getContextInfo().isExtensionSupported("GL_EXT_texture_buffer"), "GL_EXT_texture_buffer is not supported");
+	checkSupport(m_context);
 
 	glu::CallLogWrapper		gl		(m_context.getRenderContext().getFunctions(), m_testCtx.getLog());
 	tcu::ResultCollector	result	(m_testCtx.getLog(), " // ERROR: ");
@@ -279,8 +285,7 @@
 
 TextureBindingBufferQueryCase::IterateResult TextureBindingBufferQueryCase::iterate (void)
 {
-	const bool supportsES32 = glu::contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2));
-	TCU_CHECK_AND_THROW(NotSupportedError, supportsES32 || m_context.getContextInfo().isExtensionSupported("GL_EXT_texture_buffer"), "GL_EXT_texture_buffer is not supported");
+	checkSupport(m_context);
 
 	glu::CallLogWrapper		gl		(m_context.getRenderContext().getFunctions(), m_testCtx.getLog());
 	tcu::ResultCollector	result	(m_testCtx.getLog(), " // ERROR: ");
@@ -339,8 +344,7 @@
 
 TextureBufferDataStoreQueryCase::IterateResult TextureBufferDataStoreQueryCase::iterate (void)
 {
-	const bool supportsES32 = glu::contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2));
-	TCU_CHECK_AND_THROW(NotSupportedError, supportsES32 || m_context.getContextInfo().isExtensionSupported("GL_EXT_texture_buffer"), "GL_EXT_texture_buffer is not supported");
+	checkSupport(m_context);
 
 	glu::CallLogWrapper		gl		(m_context.getRenderContext().getFunctions(), m_testCtx.getLog());
 	tcu::ResultCollector	result	(m_testCtx.getLog(), " // ERROR: ");
@@ -411,8 +415,7 @@
 
 TextureBufferOffsetQueryCase::IterateResult TextureBufferOffsetQueryCase::iterate (void)
 {
-	const bool supportsES32 = glu::contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2));
-	TCU_CHECK_AND_THROW(NotSupportedError, supportsES32 || m_context.getContextInfo().isExtensionSupported("GL_EXT_texture_buffer"), "GL_EXT_texture_buffer is not supported");
+	checkSupport(m_context);
 
 	glu::CallLogWrapper		gl		(m_context.getRenderContext().getFunctions(), m_testCtx.getLog());
 	tcu::ResultCollector	result	(m_testCtx.getLog(), " // ERROR: ");
@@ -493,8 +496,7 @@
 
 TextureBufferSizeQueryCase::IterateResult TextureBufferSizeQueryCase::iterate (void)
 {
-	const bool supportsES32 = glu::contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2));
-	TCU_CHECK_AND_THROW(NotSupportedError, supportsES32 || m_context.getContextInfo().isExtensionSupported("GL_EXT_texture_buffer"), "GL_EXT_texture_buffer is not supported");
+	checkSupport(m_context);
 
 	glu::CallLogWrapper		gl		(m_context.getRenderContext().getFunctions(), m_testCtx.getLog());
 	tcu::ResultCollector	result	(m_testCtx.getLog(), " // ERROR: ");
diff --git a/modules/gles31/functional/es31fTextureFilteringTests.cpp b/modules/gles31/functional/es31fTextureFilteringTests.cpp
index 4717508..45b4e63 100644
--- a/modules/gles31/functional/es31fTextureFilteringTests.cpp
+++ b/modules/gles31/functional/es31fTextureFilteringTests.cpp
@@ -197,9 +197,11 @@
 
 void TextureCubeArrayFilteringCase::init (void)
 {
-	const bool supportsES32 = glu::contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2));
+	auto		ctxType			= m_context.getRenderContext().getType();
+	const bool	isES32orGL45	= glu::contextSupports(ctxType, glu::ApiType::es(3, 2)) ||
+								  glu::contextSupports(ctxType, glu::ApiType::core(4, 5));
 
-	if (!supportsES32 && !m_context.getContextInfo().isExtensionSupported("GL_EXT_texture_cube_map_array"))
+	if (!isES32orGL45 && !m_context.getContextInfo().isExtensionSupported("GL_EXT_texture_cube_map_array"))
 		throw tcu::NotSupportedError("GL_EXT_texture_cube_map_array not supported");
 
 	if (m_internalFormat == GL_SR8_EXT && !(m_context.getContextInfo().isExtensionSupported("GL_EXT_texture_sRGB_R8")))
@@ -207,6 +209,7 @@
 
 	try
 	{
+		const glw::Functions&			gl			= m_context.getRenderContext().getFunctions();
 		const tcu::TextureFormat		texFmt		= glu::mapGLInternalFormat(m_internalFormat);
 		const tcu::TextureFormatInfo	fmtInfo		= tcu::getTextureFormatInfo(texFmt);
 		const tcu::Vec4					cScale		= fmtInfo.valueMax-fmtInfo.valueMin;
@@ -214,6 +217,9 @@
 		const int						numLevels	= deLog2Floor32(m_size) + 1;
 		const int						numLayers	= m_depth / 6;
 
+		if (!isContextTypeES(ctxType))
+			gl.enable(GL_TEXTURE_CUBE_MAP_SEAMLESS);
+
 		// Create textures.
 		m_gradientTex	= new glu::TextureCubeArray(m_context.getRenderContext(), m_internalFormat, m_size, m_depth);
 		m_gridTex		= new glu::TextureCubeArray(m_context.getRenderContext(), m_internalFormat, m_size, m_depth);
@@ -319,6 +325,9 @@
 
 	m_renderer.clear();
 	m_cases.clear();
+
+	if (!isContextTypeES(m_context.getRenderContext().getType()))
+		m_context.getRenderContext().getFunctions().disable(GL_TEXTURE_CUBE_MAP_SEAMLESS);
 }
 
 TextureCubeArrayFilteringCase::IterateResult TextureCubeArrayFilteringCase::iterate (void)
diff --git a/modules/gles31/functional/es31fTextureGatherTests.cpp b/modules/gles31/functional/es31fTextureGatherTests.cpp
index d096d4d..a202ce0 100644
--- a/modules/gles31/functional/es31fTextureGatherTests.cpp
+++ b/modules/gles31/functional/es31fTextureGatherTests.cpp
@@ -85,7 +85,8 @@
 
 	specializationMap["GLSL_VERSION_DECL"] = glu::getGLSLVersionDeclaration(glslVersion);
 
-	if (glu::contextSupports(context.getRenderContext().getType(), glu::ApiType::es(3, 2)))
+	if (glu::contextSupports(context.getRenderContext().getType(), glu::ApiType::es(3, 2)) ||
+		glu::contextSupports(context.getRenderContext().getType(), glu::ApiType::core(4, 5)))
 		specializationMap["GPU_SHADER5_REQUIRE"] = "";
 	else
 		specializationMap["GPU_SHADER5_REQUIRE"] = "#extension GL_EXT_gpu_shader5 : require";
@@ -1249,14 +1250,15 @@
 
 void TextureGatherCase::init (void)
 {
-	TestLog&					log				= m_testCtx.getLog();
-	const glu::RenderContext&	renderCtx		= m_context.getRenderContext();
-	const glw::Functions&		gl				= renderCtx.getFunctions();
-	const deUint32				texTypeGL		= getGLTextureType(m_textureType);
-	const bool					supportsES32	= glu::contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2));
+	TestLog&					log					= m_testCtx.getLog();
+	const glu::RenderContext&	renderCtx			= m_context.getRenderContext();
+	const glw::Functions&		gl					= renderCtx.getFunctions();
+	const deUint32				texTypeGL			= getGLTextureType(m_textureType);
+	const bool					supportsES32orGL45	= glu::contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2)) ||
+													  glu::contextSupports(m_context.getRenderContext().getType(), glu::ApiType::core(4, 5));
 
 	// Check prerequisites.
-	if (requireGpuShader5(m_gatherType) && !supportsES32 && !m_context.getContextInfo().isExtensionSupported("GL_EXT_gpu_shader5"))
+	if (requireGpuShader5(m_gatherType) && !supportsES32orGL45 && !m_context.getContextInfo().isExtensionSupported("GL_EXT_gpu_shader5"))
 		throw tcu::NotSupportedError("GL_EXT_gpu_shader5 required");
 
 	// Log and check implementation offset limits, if appropriate.
@@ -1269,6 +1271,9 @@
 		TCU_CHECK_MSG(offsetRange[1] >= SPEC_MIN_MAX_OFFSET, ("GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET must be at least " + de::toString((int)SPEC_MIN_MAX_OFFSET)).c_str());
 	}
 
+	if (!isContextTypeES(m_context.getRenderContext().getType()))
+		gl.enable(GL_TEXTURE_CUBE_MAP_SEAMLESS);
+
 	// Create rbo and fbo.
 
 	m_colorBuffer = MovePtr<glu::Renderbuffer>(new glu::Renderbuffer(renderCtx));
@@ -1345,6 +1350,9 @@
 
 void TextureGatherCase::deinit (void)
 {
+	if (!isContextTypeES(m_context.getRenderContext().getType()))
+		m_context.getRenderContext().getFunctions().disable(GL_TEXTURE_CUBE_MAP_SEAMLESS);
+
 	m_program		= MovePtr<ShaderProgram>(DE_NULL);
 	m_fbo			= MovePtr<glu::Framebuffer>(DE_NULL);
 	m_colorBuffer	= MovePtr<glu::Renderbuffer>(DE_NULL);
diff --git a/modules/gles31/functional/es31fTextureLevelStateQueryTests.cpp b/modules/gles31/functional/es31fTextureLevelStateQueryTests.cpp
index b7d9fcf..8ab46a8 100644
--- a/modules/gles31/functional/es31fTextureLevelStateQueryTests.cpp
+++ b/modules/gles31/functional/es31fTextureLevelStateQueryTests.cpp
@@ -111,7 +111,8 @@
 		case GL_TEXTURE_2D_MULTISAMPLE_ARRAY:
 		case GL_TEXTURE_BUFFER:
 		case GL_TEXTURE_CUBE_MAP_ARRAY:
-			return glu::contextSupports(contextType, glu::ApiType::es(3, 2));
+			return glu::contextSupports(contextType, glu::ApiType::es(3, 2)) ||
+				   glu::contextSupports(contextType, glu::ApiType::core(4, 5));
 
 		default:
 			return false;
@@ -1491,6 +1492,14 @@
 	}
 };
 
+static bool checkSupport(Context& ctx)
+{
+	auto ctxType = ctx.getRenderContext().getType();
+	return contextSupports(ctxType, glu::ApiType::es(3, 2)) ||
+		   contextSupports(ctxType, glu::ApiType::core(4, 5)) ||
+		   ctx.getContextInfo().isExtensionSupported("GL_EXT_texture_buffer");
+}
+
 class TextureLevelBufferDataStoreCase : public TextureLevelCase
 {
 public:
@@ -1502,8 +1511,7 @@
 private:
 	void init (void)
 	{
-		if (!m_context.getContextInfo().isExtensionSupported("GL_EXT_texture_buffer") &&
-			!glu::contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2)))
+		if (!checkSupport(m_context))
 			throw tcu::NotSupportedError("Test requires GL_EXT_texture_buffer extension");
 		TextureLevelCase::init();
 	}
@@ -1541,8 +1549,7 @@
 private:
 	void init (void)
 	{
-		if (!m_context.getContextInfo().isExtensionSupported("GL_EXT_texture_buffer") &&
-			!glu::contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2)))
+		if (!checkSupport(m_context))
 			throw tcu::NotSupportedError("Test requires GL_EXT_texture_buffer extension");
 		TextureLevelCase::init();
 	}
@@ -1582,8 +1589,7 @@
 private:
 	void init (void)
 	{
-		if (!m_context.getContextInfo().isExtensionSupported("GL_EXT_texture_buffer") &&
-			!glu::contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2)))
+		if (!checkSupport(m_context))
 			throw tcu::NotSupportedError("Test requires GL_EXT_texture_buffer extension");
 		TextureLevelCase::init();
 	}
diff --git a/modules/gles31/functional/es31fTextureSpecificationTests.cpp b/modules/gles31/functional/es31fTextureSpecificationTests.cpp
index f67b019..4b368cd 100644
--- a/modules/gles31/functional/es31fTextureSpecificationTests.cpp
+++ b/modules/gles31/functional/es31fTextureSpecificationTests.cpp
@@ -236,8 +236,10 @@
 
 bool TextureCubeArraySpecCase::checkExtensionSupport (void)
 {
-	const bool supportsES32 = glu::contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2));
-	return supportsES32 || m_context.getContextInfo().isExtensionSupported("GL_EXT_texture_cube_map_array");
+	glu::ContextType		contextType			= m_context.getRenderContext().getType();
+	const bool				supportsES32orGL45	= glu::contextSupports(contextType, glu::ApiType::es(3, 2)) ||
+												  glu::contextSupports(contextType, glu::ApiType::core(4, 5));
+	return supportsES32orGL45 || m_context.getContextInfo().isExtensionSupported("GL_EXT_texture_cube_map_array");
 }
 
 void TextureCubeArraySpecCase::verifyTexture (sglr::GLContext& gles3Context, sglr::ReferenceContext& refContext)
diff --git a/modules/gles31/functional/es31fVertexAttributeBindingStateQueryTests.cpp b/modules/gles31/functional/es31fVertexAttributeBindingStateQueryTests.cpp
index e06f5c1..b2b4a2c 100644
--- a/modules/gles31/functional/es31fVertexAttributeBindingStateQueryTests.cpp
+++ b/modules/gles31/functional/es31fVertexAttributeBindingStateQueryTests.cpp
@@ -601,15 +601,26 @@
 
 void MixedVertexBindingOffsetCase::test (tcu::ResultCollector& result)
 {
-	glu::CallLogWrapper gl					(m_context.getRenderContext().getFunctions(), m_testCtx.getLog());
-	glu::Buffer			buffer				(m_context.getRenderContext());
+	glu::RenderContext&	renderContext		= m_context.getRenderContext();
+	glu::CallLogWrapper gl					(renderContext.getFunctions(), m_testCtx.getLog());
+	glu::Buffer			buffer				(renderContext);
+	deUint32			vao					= 0;
 
 	gl.enableLogging(true);
 
+	if (!glu::isContextTypeES(renderContext.getType()))
+	{
+		gl.glGenVertexArrays(1, &vao);
+		gl.glBindVertexArray(vao);
+	}
+
 	gl.glBindBuffer(GL_ARRAY_BUFFER, *buffer);
 	gl.glVertexAttribPointer(1, 4, GL_FLOAT, GL_FALSE, 0, glu::BufferOffsetAsPointer(12));
 
 	verifyStateIndexedInteger(result, gl, GL_VERTEX_BINDING_OFFSET, 1, 12, m_verifier);
+
+	if (vao)
+		gl.glDeleteVertexArrays(1, &vao);
 }
 
 class MixedVertexBindingStrideCase : public IndexedCase
@@ -626,11 +637,19 @@
 
 void MixedVertexBindingStrideCase::test (tcu::ResultCollector& result)
 {
-	glu::CallLogWrapper gl					(m_context.getRenderContext().getFunctions(), m_testCtx.getLog());
-	glu::Buffer			buffer				(m_context.getRenderContext());
+	glu::RenderContext&	renderContext		= m_context.getRenderContext();
+	glu::CallLogWrapper gl					(renderContext.getFunctions(), m_testCtx.getLog());
+	glu::Buffer			buffer				(renderContext);
+	deUint32			vao					= 0;
 
 	gl.enableLogging(true);
 
+	if (!glu::isContextTypeES(renderContext.getType()))
+	{
+		gl.glGenVertexArrays(1, &vao);
+		gl.glBindVertexArray(vao);
+	}
+
 	gl.glBindBuffer(GL_ARRAY_BUFFER, *buffer);
 	gl.glVertexAttribPointer(1, 4, GL_FLOAT, GL_FALSE, 12, 0);
 	verifyStateIndexedInteger(result, gl, GL_VERTEX_BINDING_STRIDE, 1, 12, m_verifier);
@@ -638,6 +657,9 @@
 	// test effectiveStride
 	gl.glVertexAttribPointer(1, 4, GL_FLOAT, GL_FALSE, 0, 0);
 	verifyStateIndexedInteger(result, gl, GL_VERTEX_BINDING_STRIDE, 1, 16, m_verifier);
+
+	if (vao)
+		gl.glDeleteVertexArrays(1, &vao);
 }
 
 class MixedVertexBindingBufferCase : public IndexedCase
@@ -654,14 +676,25 @@
 
 void MixedVertexBindingBufferCase::test (tcu::ResultCollector& result)
 {
-	glu::CallLogWrapper gl					(m_context.getRenderContext().getFunctions(), m_testCtx.getLog());
-	glu::Buffer			buffer				(m_context.getRenderContext());
+	glu::RenderContext&	renderContext		= m_context.getRenderContext();
+	glu::CallLogWrapper gl					(renderContext.getFunctions(), m_testCtx.getLog());
+	glu::Buffer			buffer				(renderContext);
+	deUint32			vao					= 0;
 
 	gl.enableLogging(true);
 
+	if (!glu::isContextTypeES(renderContext.getType()))
+	{
+		gl.glGenVertexArrays(1, &vao);
+		gl.glBindVertexArray(vao);
+	}
+
 	gl.glBindBuffer(GL_ARRAY_BUFFER, *buffer);
 	gl.glVertexAttribPointer(1, 4, GL_FLOAT, GL_FALSE, 0, 0);
 	verifyStateIndexedInteger(result, gl, GL_VERTEX_BINDING_BUFFER, 1, *buffer, m_verifier);
+
+	if (vao)
+		gl.glDeleteVertexArrays(1, &vao);
 }
 
 } // anonymous
diff --git a/modules/gles31/tes31Context.cpp b/modules/gles31/tes31Context.cpp
index 81f0bbd..4c2b203 100644
--- a/modules/gles31/tes31Context.cpp
+++ b/modules/gles31/tes31Context.cpp
@@ -22,7 +22,6 @@
  *//*--------------------------------------------------------------------*/
 
 #include "tes31Context.hpp"
-#include "gluRenderContext.hpp"
 #include "gluRenderConfig.hpp"
 #include "gluFboRenderContext.hpp"
 #include "gluContextInfo.hpp"
@@ -34,10 +33,11 @@
 namespace gles31
 {
 
-Context::Context (tcu::TestContext& testCtx)
+Context::Context (tcu::TestContext& testCtx, glu::ApiType apiType)
 	: m_testCtx		(testCtx)
 	, m_renderCtx	(DE_NULL)
 	, m_contextInfo	(DE_NULL)
+	, m_apiType		(apiType)
 {
 	if (m_testCtx.getCommandLine().getRunMode() == tcu::RUNMODE_EXECUTE)
 		createRenderContext();
@@ -61,14 +61,7 @@
 
 	try
 	{
-		try
-		{
-			m_renderCtx		= glu::createDefaultRenderContext(m_testCtx.getPlatform(), m_testCtx.getCommandLine(), glu::ApiType::es(3, 2));
-		}
-		catch (...)
-		{
-			m_renderCtx		= glu::createDefaultRenderContext(m_testCtx.getPlatform(), m_testCtx.getCommandLine(), glu::ApiType::es(3, 1));
-		}
+		m_renderCtx		= glu::createDefaultRenderContext(m_testCtx.getPlatform(), m_testCtx.getCommandLine(), m_apiType);
 		m_contextInfo	= glu::ContextInfo::create(*m_renderCtx);
 	}
 	catch (...)
diff --git a/modules/gles31/tes31Context.hpp b/modules/gles31/tes31Context.hpp
index e09f9c5..1a91595 100644
--- a/modules/gles31/tes31Context.hpp
+++ b/modules/gles31/tes31Context.hpp
@@ -25,6 +25,7 @@
 
 #include "tcuDefs.hpp"
 #include "tcuTestContext.hpp"
+#include "gluRenderContext.hpp"
 
 namespace glu
 {
@@ -45,7 +46,7 @@
 class Context
 {
 public:
-									Context					(tcu::TestContext& testCtx);
+									Context					(tcu::TestContext& testCtx, glu::ApiType apiType = glu::ApiType::es(3,2));
 									~Context				(void);
 
 	tcu::TestContext&				getTestContext			(void)			{ return m_testCtx;			}
@@ -63,6 +64,7 @@
 	tcu::TestContext&				m_testCtx;
 	glu::RenderContext*				m_renderCtx;
 	glu::ContextInfo*				m_contextInfo;
+	glu::ApiType					m_apiType;
 };
 
 } // gles31
diff --git a/modules/gles31/tes31TestCaseWrapper.hpp b/modules/gles31/tes31TestCaseWrapper.hpp
new file mode 100644
index 0000000..03bbe44
--- /dev/null
+++ b/modules/gles31/tes31TestCaseWrapper.hpp
@@ -0,0 +1,112 @@
+#ifndef _TES31TESTCASEWRAPPER_HPP
+#define _TES31TESTCASEWRAPPER_HPP
+/*-------------------------------------------------------------------------
+ * OpenGL Conformance Test Suite
+ * -----------------------------
+ *
+ * Copyright (c) 2019 The Khronos Group Inc.
+ *
+ * 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 OpenGL ES 3.1 Test Package that runs on GL4.5 context
+ *//*--------------------------------------------------------------------*/
+
+#include "tcuTestLog.hpp"
+#include "tes31Context.hpp"
+#include "tcuWaiverUtil.hpp"
+#include "gluStateReset.hpp"
+
+namespace deqp
+{
+namespace gles31
+{
+
+template <typename TEST_PACKAGE>
+class TestCaseWrapper : public tcu::TestCaseExecutor
+{
+public:
+									TestCaseWrapper		(TEST_PACKAGE& package, de::SharedPtr<tcu::WaiverUtil> waiverMechanism);
+									~TestCaseWrapper	(void);
+
+	void							init				(tcu::TestCase* testCase, const std::string& path);
+	void							deinit				(tcu::TestCase* testCase);
+	tcu::TestNode::IterateResult	iterate				(tcu::TestCase* testCase);
+
+private:
+	TEST_PACKAGE&					m_testPackage;
+	de::SharedPtr<tcu::WaiverUtil>	m_waiverMechanism;
+};
+
+template <typename TEST_PACKAGE>
+TestCaseWrapper<TEST_PACKAGE>::TestCaseWrapper (TEST_PACKAGE& package, de::SharedPtr<tcu::WaiverUtil> waiverMechanism)
+	: m_testPackage(package)
+	, m_waiverMechanism (waiverMechanism)
+{
+}
+
+template <typename TEST_PACKAGE>
+TestCaseWrapper<TEST_PACKAGE>::~TestCaseWrapper (void)
+{
+}
+
+template <typename TEST_PACKAGE>
+void TestCaseWrapper<TEST_PACKAGE>::init (tcu::TestCase* testCase, const std::string& path)
+{
+	if (m_waiverMechanism->isOnWaiverList(path))
+		throw tcu::TestException("Waived test", QP_TEST_RESULT_WAIVER);
+
+	testCase->init();
+}
+
+template <typename TEST_PACKAGE>
+void TestCaseWrapper<TEST_PACKAGE>::deinit (tcu::TestCase* testCase)
+{
+	testCase->deinit();
+
+	DE_ASSERT(m_testPackage.getContext());
+	glu::resetState(m_testPackage.getContext()->getRenderContext(), m_testPackage.getContext()->getContextInfo());
+}
+
+template <typename TEST_PACKAGE>
+tcu::TestNode::IterateResult TestCaseWrapper<TEST_PACKAGE>::iterate (tcu::TestCase* testCase)
+{
+	tcu::TestContext&					testCtx	= m_testPackage.getContext()->getTestContext();
+	const tcu::TestCase::IterateResult	result	= testCase->iterate();
+
+	// Call implementation specific post-iterate routine (usually handles native events and swaps buffers)
+	try
+	{
+		m_testPackage.getContext()->getRenderContext().postIterate();
+		return result;
+	}
+	catch (const tcu::ResourceError& e)
+	{
+		testCtx.getLog() << e;
+		testCtx.setTestResult(QP_TEST_RESULT_RESOURCE_ERROR, "Resource error in context post-iteration routine");
+		testCtx.setTerminateAfter(true);
+		return tcu::TestNode::STOP;
+	}
+	catch (const std::exception& e)
+	{
+		testCtx.getLog() << e;
+		testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Error in context post-iteration routine");
+		return tcu::TestNode::STOP;
+	}
+}
+
+} // gles31
+} // deqp
+
+#endif // _TES31TESTCASEWRAPPER_HPP
diff --git a/modules/gles31/tes31TestPackage.cpp b/modules/gles31/tes31TestPackage.cpp
index 40aa24e..d8c30fc 100644
--- a/modules/gles31/tes31TestPackage.cpp
+++ b/modules/gles31/tes31TestPackage.cpp
@@ -22,6 +22,7 @@
  *//*--------------------------------------------------------------------*/
 
 #include "tes31TestPackage.hpp"
+#include "tes31TestCaseWrapper.hpp"
 #include "tes31InfoTests.hpp"
 #include "es31fFunctionalTests.hpp"
 #include "es31sStressTests.hpp"
@@ -38,73 +39,6 @@
 namespace gles31
 {
 
-class TestCaseWrapper : public tcu::TestCaseExecutor
-{
-public:
-									TestCaseWrapper		(TestPackage& package, de::SharedPtr<tcu::WaiverUtil> waiverMechanism);
-									~TestCaseWrapper	(void);
-
-	void							init				(tcu::TestCase* testCase, const std::string& path);
-	void							deinit				(tcu::TestCase* testCase);
-	tcu::TestNode::IterateResult	iterate				(tcu::TestCase* testCase);
-
-private:
-	TestPackage&					m_testPackage;
-	de::SharedPtr<tcu::WaiverUtil>	m_waiverMechanism;
-};
-
-TestCaseWrapper::TestCaseWrapper (TestPackage& package, de::SharedPtr<tcu::WaiverUtil> waiverMechanism)
-	: m_testPackage		(package)
-	, m_waiverMechanism	(waiverMechanism)
-{
-}
-
-TestCaseWrapper::~TestCaseWrapper (void)
-{
-}
-
-void TestCaseWrapper::init (tcu::TestCase* testCase, const std::string& path)
-{
-	if (m_waiverMechanism->isOnWaiverList(path))
-		throw tcu::TestException("Waived test", QP_TEST_RESULT_WAIVER);
-
-	testCase->init();
-}
-
-void TestCaseWrapper::deinit (tcu::TestCase* testCase)
-{
-	testCase->deinit();
-
-	DE_ASSERT(m_testPackage.getContext());
-	glu::resetState(m_testPackage.getContext()->getRenderContext(), m_testPackage.getContext()->getContextInfo());
-}
-
-tcu::TestNode::IterateResult TestCaseWrapper::iterate (tcu::TestCase* testCase)
-{
-	tcu::TestContext&					testCtx	= m_testPackage.getContext()->getTestContext();
-	const tcu::TestCase::IterateResult	result	= testCase->iterate();
-
-	// Call implementation specific post-iterate routine (usually handles native events and swaps buffers)
-	try
-	{
-		m_testPackage.getContext()->getRenderContext().postIterate();
-		return result;
-	}
-	catch (const tcu::ResourceError& e)
-	{
-		testCtx.getLog() << e;
-		testCtx.setTestResult(QP_TEST_RESULT_RESOURCE_ERROR, "Resource error in context post-iteration routine");
-		testCtx.setTerminateAfter(true);
-		return tcu::TestNode::STOP;
-	}
-	catch (const std::exception& e)
-	{
-		testCtx.getLog() << e;
-		testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Error in context post-iteration routine");
-		return tcu::TestNode::STOP;
-	}
-}
-
 TestPackage::TestPackage (tcu::TestContext& testCtx)
 	: tcu::TestPackage	(testCtx, "dEQP-GLES31", "dEQP OpenGL ES 3.1 Tests")
 	, m_archive			(testCtx.getRootArchive(), "gles31/")
@@ -125,7 +59,16 @@
 	try
 	{
 		// Create context
-		m_context = new Context(m_testCtx);
+		// Some of the tests will test ES3.2 functionality if supported so try to create a 3.2 context
+		// first. If that doesn't work then create an ES3.1 context.
+		try
+		{
+			m_context = new Context(m_testCtx, glu::ApiType::es(3, 2));
+		}
+		catch (...)
+		{
+			m_context = new Context(m_testCtx, glu::ApiType::es(3, 1));
+		}
 
 		// Setup waiver mechanism
 		if (m_testCtx.getCommandLine().getRunMode() == tcu::RUNMODE_EXECUTE)
@@ -140,9 +83,9 @@
 		}
 
 		// Add main test groups
-		addChild(new InfoTests						(*m_context));
-		addChild(new Functional::FunctionalTests	(*m_context));
-		addChild(new Stress::StressTests			(*m_context));
+		addChild(new InfoTests							(*m_context));
+		addChild(new Functional::GLES31FunctionalTests	(*m_context));
+		addChild(new Stress::StressTests				(*m_context));
 	}
 	catch (...)
 	{
@@ -162,7 +105,7 @@
 
 tcu::TestCaseExecutor* TestPackage::createExecutor (void) const
 {
-	return new TestCaseWrapper(const_cast<TestPackage&>(*this), m_waiverMechanism);
+	return new TestCaseWrapper<TestPackage>(const_cast<TestPackage&>(*this), m_waiverMechanism);
 }
 
 } // gles31
diff --git a/modules/gles31/tgl45TestPackage.cpp b/modules/gles31/tgl45TestPackage.cpp
new file mode 100644
index 0000000..72c0838
--- /dev/null
+++ b/modules/gles31/tgl45TestPackage.cpp
@@ -0,0 +1,102 @@
+/*-------------------------------------------------------------------------
+ * drawElements Quality Program OpenGL ES 3.1 Module
+ * -------------------------------------------------
+ *
+ * Copyright 2019 The Android Open Source Project
+ *
+ * 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 OpenGL ES 3.1 Test Package that runs on GL4.5 context
+ *//*--------------------------------------------------------------------*/
+
+#include "tgl45TestPackage.hpp"
+#include "tes31TestCaseWrapper.hpp"
+#include "tes31InfoTests.hpp"
+#include "es31fFunctionalTests.hpp"
+#include "es31sStressTests.hpp"
+#include "gluStateReset.hpp"
+#include "gluRenderContext.hpp"
+#include "gluContextInfo.hpp"
+#include "tcuTestLog.hpp"
+#include "tcuCommandLine.hpp"
+#include "tcuWaiverUtil.hpp"
+#include "glwEnums.hpp"
+
+namespace deqp
+{
+namespace gles31
+{
+
+TestPackageGL45::TestPackageGL45 (tcu::TestContext& testCtx)
+	: tcu::TestPackage	(testCtx, "dEQP-GL45", "dEQP OpenGL ES 3.1 Tests On GL4.5 Context")
+	, m_archive			(testCtx.getRootArchive(), "gles31/")
+	, m_context			(DE_NULL)
+	, m_waiverMechanism (new tcu::WaiverUtil)
+{
+}
+
+TestPackageGL45::~TestPackageGL45 (void)
+{
+	// Destroy children first since destructors may access context.
+	TestNode::deinit();
+	delete m_context;
+}
+
+void TestPackageGL45::init (void)
+{
+	try
+	{
+		// Create context
+		m_context = new Context(m_testCtx, glu::ApiType::core(4, 5));
+
+		// Setup waiver mechanism
+		if (m_testCtx.getCommandLine().getRunMode() == tcu::RUNMODE_EXECUTE)
+		{
+			const glu::ContextInfo&	contextInfo = m_context->getContextInfo();
+			std::string				vendor		= contextInfo.getString(GL_VENDOR);
+			std::string				renderer	= contextInfo.getString(GL_RENDERER);
+			const tcu::CommandLine&	commandLine	= m_context->getTestContext().getCommandLine();
+			tcu::SessionInfo		sessionInfo	(vendor, renderer, commandLine.getInitialCmdLine());
+			m_waiverMechanism->setup(commandLine.getWaiverFileName(), m_name, vendor, renderer, sessionInfo);
+			m_context->getTestContext().getLog().writeSessionInfo(sessionInfo.get());
+		}
+
+		// Add main test groups
+		addChild(new InfoTests							(*m_context));
+		addChild(new Functional::GL45FunctionalTests	(*m_context));
+	}
+	catch (...)
+	{
+		delete m_context;
+		m_context = DE_NULL;
+
+		throw;
+	}
+}
+
+void TestPackageGL45::deinit (void)
+{
+	TestNode::deinit();
+	delete m_context;
+	m_context = DE_NULL;
+}
+
+tcu::TestCaseExecutor* TestPackageGL45::createExecutor (void) const
+{
+	return new TestCaseWrapper<TestPackageGL45>(const_cast<TestPackageGL45&>(*this), m_waiverMechanism);
+}
+
+} // gles31
+} // deqp
diff --git a/modules/gles31/tgl45TestPackage.hpp b/modules/gles31/tgl45TestPackage.hpp
new file mode 100644
index 0000000..2641396
--- /dev/null
+++ b/modules/gles31/tgl45TestPackage.hpp
@@ -0,0 +1,65 @@
+#ifndef _TGL45TESTPACKAGE_HPP
+#define _TGL45TESTPACKAGE_HPP
+/*-------------------------------------------------------------------------
+ * OpenGL Conformance Test Suite
+ * -----------------------------
+ *
+ * Copyright (c) 2019 The Khronos Group Inc.
+ *
+ * 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 OpenGL ES 3.1 Test Package that runs on GL4.5 context
+ *//*--------------------------------------------------------------------*/
+
+#include "tcuDefs.hpp"
+#include "tcuTestPackage.hpp"
+#include "tes31Context.hpp"
+#include "tcuResource.hpp"
+#include "deSharedPtr.hpp"
+
+namespace tcu
+{
+    class WaiverUtil;
+};
+
+namespace deqp
+{
+namespace gles31
+{
+
+class TestPackageGL45 : public tcu::TestPackage
+{
+public:
+									TestPackageGL45			(tcu::TestContext& testCtx);
+	virtual							~TestPackageGL45		(void);
+
+	virtual void					init					(void);
+	virtual void					deinit					(void);
+
+	tcu::TestCaseExecutor*			createExecutor			(void) const;
+
+	tcu::Archive*					getArchive				(void) { return &m_archive; }
+	Context*						getContext				(void) { return m_context; }
+
+private:
+	tcu::ResourcePrefix				m_archive;
+	Context*						m_context;
+    de::SharedPtr<tcu::WaiverUtil>	m_waiverMechanism;
+};
+
+} // gles31
+} // deqp
+
+#endif // _TGL45TESTPACKAGE_HPP
diff --git a/modules/glshared/glsBuiltinPrecisionTests.cpp b/modules/glshared/glsBuiltinPrecisionTests.cpp
index 6fa16f1..80c5520 100644
--- a/modules/glshared/glsBuiltinPrecisionTests.cpp
+++ b/modules/glshared/glsBuiltinPrecisionTests.cpp
@@ -5064,7 +5064,8 @@
 {
 	MovePtr<ContextInfo>	info	(ContextInfo::create(getRenderContext()));
 
-	if (!m_extension.empty() && !info->isExtensionSupported(m_extension.c_str()))
+	if (!m_extension.empty() && !info->isExtensionSupported(m_extension.c_str()) &&
+		!glu::contextSupports(getRenderContext().getType(), glu::ApiType::core(4, 5)))
 		throw NotSupportedError("Unsupported extension: " + m_extension);
 
 	runTest();
diff --git a/modules/glshared/glsDrawTest.cpp b/modules/glshared/glsDrawTest.cpp
index 69ad616..c78e1e3 100644
--- a/modules/glshared/glsDrawTest.cpp
+++ b/modules/glshared/glsDrawTest.cpp
@@ -3164,8 +3164,9 @@
 		spec.drawMethod == DrawTestSpec::DRAWMETHOD_DRAWELEMENTS_INSTANCED_BASEVERTEX ||
 		spec.drawMethod == DrawTestSpec::DRAWMETHOD_DRAWELEMENTS_RANGED_BASEVERTEX)
 	{
-		const bool supportsES32 = contextSupports(m_renderCtx.getType(), glu::ApiType::es(3, 2));
-		TCU_CHECK_AND_THROW(NotSupportedError, supportsES32 || m_contextInfo->isExtensionSupported("GL_EXT_draw_elements_base_vertex"), "GL_EXT_draw_elements_base_vertex is not supported.");
+		const bool supportsES32orGL45 = contextSupports(m_renderCtx.getType(), glu::ApiType::es(3, 2)) ||
+										contextSupports(m_renderCtx.getType(), glu::ApiType::core(4, 5));
+		TCU_CHECK_AND_THROW(NotSupportedError, supportsES32orGL45 || m_contextInfo->isExtensionSupported("GL_EXT_draw_elements_base_vertex"), "GL_EXT_draw_elements_base_vertex is not supported.");
 	}
 
 	const bool					drawStep		= (m_iteration % 2) == 0;
diff --git a/modules/glshared/glsFboCompletenessTests.cpp b/modules/glshared/glsFboCompletenessTests.cpp
index fea80a6..856b991 100644
--- a/modules/glshared/glsFboCompletenessTests.cpp
+++ b/modules/glshared/glsFboCompletenessTests.cpp
@@ -267,7 +267,7 @@
 	},
 	{
 		"GL_EXT_texture_rg",
-		(deUint32)(REQUIRED_RENDERABLE | COLOR_RENDERABLE | RENDERBUFFER_VALID),
+		(deUint32)(REQUIRED_RENDERABLE | COLOR_RENDERABLE | RENDERBUFFER_VALID | TEXTURE_VALID),
 		GLS_ARRAY_RANGE(s_extTextureRgRboFormats)
 	},
 	// These are not specified to be color-renderable, but the wording is
diff --git a/modules/glshared/glsShaderExecUtil.cpp b/modules/glshared/glsShaderExecUtil.cpp
index deda481..5c8401f 100644
--- a/modules/glshared/glsShaderExecUtil.cpp
+++ b/modules/glshared/glsShaderExecUtil.cpp
@@ -746,7 +746,8 @@
 
 GeometryShaderExecutor* GeometryShaderExecutor::create (const glu::RenderContext& renderCtx, const ShaderSpec& shaderSpec)
 {
-	if (glu::glslVersionIsES(shaderSpec.version) && shaderSpec.version <= glu::GLSL_VERSION_310_ES)
+	if (glu::glslVersionIsES(shaderSpec.version) && shaderSpec.version <= glu::GLSL_VERSION_310_ES
+		&& !contextSupports(renderCtx.getType(), glu::ApiType::core(4, 5)))
 		checkExtension(renderCtx, "GL_EXT_geometry_shader");
 
 	return new GeometryShaderExecutor(renderCtx, shaderSpec);
@@ -1257,7 +1258,8 @@
 {
 	const int numBlockRequired = 2; // highest binding is always 1 (output) i.e. count == 2
 
-	if (glu::glslVersionIsES(shaderSpec.version) && shaderSpec.version <= glu::GLSL_VERSION_310_ES)
+	if (glu::glslVersionIsES(shaderSpec.version) && shaderSpec.version <= glu::GLSL_VERSION_310_ES
+		&& !contextSupports(renderCtx.getType(), glu::ApiType::core(4, 5)))
 		checkExtension(renderCtx, "GL_EXT_tessellation_shader");
 
 	if (stage == glu::SHADERTYPE_TESSELLATION_CONTROL)
diff --git a/modules/glshared/glsTextureStateQueryTests.cpp b/modules/glshared/glsTextureStateQueryTests.cpp
index d4b166b..6ac62ad 100644
--- a/modules/glshared/glsTextureStateQueryTests.cpp
+++ b/modules/glshared/glsTextureStateQueryTests.cpp
@@ -547,9 +547,60 @@
 
 } // es32
 
+namespace gl45
+{
+
+static bool isCoreTextureTarget (glw::GLenum target)
+{
+	return es31::isCoreTextureTarget(target);
+}
+
+static RequiredExtensions getTextureTargetExtension (glw::GLenum target)
+{
+	DE_UNREF(target);
+	return RequiredExtensions();
+}
+
+static bool isCoreTextureParam (glw::GLenum pname)
+{
+	return es31::isCoreTextureParam(pname);
+}
+
+static RequiredExtensions getTextureParamExtension (glw::GLenum pname)
+{
+	DE_UNREF(pname);
+	return RequiredExtensions();
+}
+
+static bool isCoreQuery (QueryType query)
+{
+	return es31::isCoreQuery(query);
+}
+
+static RequiredExtensions getQueryExtension (QueryType query)
+{
+	DE_UNREF(query);
+	return RequiredExtensions();
+}
+
+static bool isCoreTester (TesterType tester)
+{
+	return es31::isCoreTester(tester);
+}
+
+static RequiredExtensions getTesterExtension (TesterType tester)
+{
+	DE_UNREF(tester);
+	return RequiredExtensions();
+}
+
+} // gl45
+
 static bool isCoreTextureTarget (const glu::ContextType& contextType, glw::GLenum target)
 {
-	if (contextSupports(contextType, glu::ApiType::es(3,2)))
+	if (contextSupports(contextType, glu::ApiType::core(4,5)))
+		return gl45::isCoreTextureTarget(target);
+	else if (contextSupports(contextType, glu::ApiType::es(3,2)))
 		return es32::isCoreTextureTarget(target);
 	else if (contextSupports(contextType, glu::ApiType::es(3,1)))
 		return es31::isCoreTextureTarget(target);
@@ -564,7 +615,9 @@
 
 static bool isCoreTextureParam (const glu::ContextType& contextType, glw::GLenum pname)
 {
-	if (contextSupports(contextType, glu::ApiType::es(3,2)))
+	if (contextSupports(contextType, glu::ApiType::core(4,5)))
+		return gl45::isCoreTextureParam(pname);
+	else if (contextSupports(contextType, glu::ApiType::es(3,2)))
 		return es32::isCoreTextureParam(pname);
 	else if (contextSupports(contextType, glu::ApiType::es(3,1)))
 		return es31::isCoreTextureParam(pname);
@@ -579,7 +632,9 @@
 
 static bool isCoreQuery (const glu::ContextType& contextType, QueryType query)
 {
-	if (contextSupports(contextType, glu::ApiType::es(3,2)))
+	if (contextSupports(contextType, glu::ApiType::core(4,5)))
+		return gl45::isCoreQuery(query);
+	else if (contextSupports(contextType, glu::ApiType::es(3,2)))
 		return es32::isCoreQuery(query);
 	else if (contextSupports(contextType, glu::ApiType::es(3,1)))
 		return es31::isCoreQuery(query);
@@ -594,7 +649,9 @@
 
 static bool isCoreTester (const glu::ContextType& contextType, TesterType tester)
 {
-	if (contextSupports(contextType, glu::ApiType::es(3,2)))
+	if (contextSupports(contextType, glu::ApiType::core(4,5)))
+		return gl45::isCoreTester(tester);
+	else if (contextSupports(contextType, glu::ApiType::es(3,2)))
 		return es32::isCoreTester(tester);
 	else if (contextSupports(contextType, glu::ApiType::es(3,1)))
 		return es31::isCoreTester(tester);
@@ -611,9 +668,11 @@
 {
 	DE_ASSERT(!isCoreTextureTarget(contextType, target));
 
-	if (contextSupports(contextType, glu::ApiType::es(3,2)))
+	if (contextSupports(contextType, glu::ApiType::core(4,5)))
+		return gl45::getTextureTargetExtension(target);
+	else if (contextSupports(contextType, glu::ApiType::es(3,2)))
 		return es32::getTextureTargetExtension(target);
-	if (contextSupports(contextType, glu::ApiType::es(3,1)))
+	else if (contextSupports(contextType, glu::ApiType::es(3,1)))
 		return es31::getTextureTargetExtension(target);
 	else if (contextSupports(contextType, glu::ApiType::es(3,0)))
 		return es30::getTextureTargetExtension(target);
@@ -628,7 +687,9 @@
 {
 	DE_ASSERT(!isCoreTextureParam(contextType, pname));
 
-	if (contextSupports(contextType, glu::ApiType::es(3,2)))
+	if (contextSupports(contextType, glu::ApiType::core(4,5)))
+		return gl45::getTextureParamExtension(pname);
+	else if (contextSupports(contextType, glu::ApiType::es(3,2)))
 		return es32::getTextureParamExtension(pname);
 	else if (contextSupports(contextType, glu::ApiType::es(3,1)))
 		return es31::getTextureParamExtension(pname);
@@ -645,7 +706,9 @@
 {
 	DE_ASSERT(!isCoreQuery(contextType, query));
 
-	if (contextSupports(contextType, glu::ApiType::es(3,2)))
+	if (contextSupports(contextType, glu::ApiType::core(4,5)))
+		return gl45::getQueryExtension(query);
+	else if (contextSupports(contextType, glu::ApiType::es(3,2)))
 		return es32::getQueryExtension(query);
 	else if (contextSupports(contextType, glu::ApiType::es(3,1)))
 		return es31::getQueryExtension(query);
@@ -662,7 +725,9 @@
 {
 	DE_ASSERT(!isCoreTester(contextType, tester));
 
-	if (contextSupports(contextType, glu::ApiType::es(3,2)))
+	if (contextSupports(contextType, glu::ApiType::core(4,5)))
+		return gl45::getTesterExtension(tester);
+	else if (contextSupports(contextType, glu::ApiType::es(3,2)))
 		return es32::getTesterExtension(tester);
 	else if (contextSupports(contextType, glu::ApiType::es(3,1)))
 		return es31::getTesterExtension(tester);
diff --git a/modules/glshared/glsTextureTestUtil.cpp b/modules/glshared/glsTextureTestUtil.cpp
index 06a337f..50b3d57 100644
--- a/modules/glshared/glsTextureTestUtil.cpp
+++ b/modules/glshared/glsTextureTestUtil.cpp
@@ -142,7 +142,7 @@
 		params["FRAG_IN"]		= "varying";
 		params["FRAG_COLOR"]	= "gl_FragColor";
 	}
-	else if (m_glslVersion == glu::GLSL_VERSION_300_ES || m_glslVersion == glu::GLSL_VERSION_310_ES || m_glslVersion == glu::GLSL_VERSION_320_ES || m_glslVersion == glu::GLSL_VERSION_330)
+	else if (m_glslVersion == glu::GLSL_VERSION_300_ES || m_glslVersion == glu::GLSL_VERSION_310_ES || m_glslVersion == glu::GLSL_VERSION_320_ES || m_glslVersion > glu::GLSL_VERSION_330)
 	{
 		const string	version	= glu::getGLSLVersionDeclaration(m_glslVersion);
 		const char*		ext		= DE_NULL;
@@ -180,7 +180,7 @@
 	const char*	sampler	= DE_NULL;
 	const char*	lookup	= DE_NULL;
 
-	if (m_glslVersion == glu::GLSL_VERSION_300_ES || m_glslVersion == glu::GLSL_VERSION_310_ES || m_glslVersion == glu::GLSL_VERSION_320_ES || m_glslVersion == glu::GLSL_VERSION_330)
+	if (m_glslVersion == glu::GLSL_VERSION_300_ES || m_glslVersion == glu::GLSL_VERSION_310_ES || m_glslVersion == glu::GLSL_VERSION_320_ES || m_glslVersion > glu::GLSL_VERSION_330)
 	{
 		switch (program)
 		{
diff --git a/modules/glshared/glsUniformBlockCase.cpp b/modules/glshared/glsUniformBlockCase.cpp
index 6623215..1b48890 100644
--- a/modules/glshared/glsUniformBlockCase.cpp
+++ b/modules/glshared/glsUniformBlockCase.cpp
@@ -141,9 +141,9 @@
 	m_data.array.elementType	= new VarType(elementType);
 }
 
-VarType::VarType (const StructType* structPtr)
+VarType::VarType (const StructType* structPtr, deUint32 flags)
 	: m_type	(TYPE_STRUCT)
-	, m_flags	(0)
+	, m_flags	(flags)
 {
 	m_data.structPtr = structPtr;
 }
@@ -479,7 +479,8 @@
 		if (glu::isDataTypeMatrix(basicType))
 		{
 			// Array of vectors as specified in rules 5 & 7.
-			bool	isRowMajor	= !!(layoutFlags & LAYOUT_ROW_MAJOR);
+			bool	isRowMajor	= !!(((type.getFlags() & (LAYOUT_ROW_MAJOR | LAYOUT_COLUMN_MAJOR) ? type.getFlags() : layoutFlags) & LAYOUT_ROW_MAJOR));
+
 			int		vecSize		= isRowMajor ? glu::getDataTypeMatrixNumColumns(basicType)
 											 : glu::getDataTypeMatrixNumRows(basicType);
 			int		numVecs		= isRowMajor ? glu::getDataTypeMatrixNumRows(basicType)
@@ -529,7 +530,7 @@
 		{
 			// Array of matrices.
 			glu::DataType		elemBasicType	= elemType.getBasicType();
-			bool				isRowMajor		= !!(layoutFlags & LAYOUT_ROW_MAJOR);
+			bool				isRowMajor		= !!(((elemType.getFlags() & (LAYOUT_ROW_MAJOR | LAYOUT_COLUMN_MAJOR) ? elemType.getFlags() : layoutFlags) & LAYOUT_ROW_MAJOR));
 			int					vecSize			= isRowMajor ? glu::getDataTypeMatrixNumColumns(elemBasicType)
 															 : glu::getDataTypeMatrixNumRows(elemBasicType);
 			int					numVecs			= isRowMajor ? glu::getDataTypeMatrixNumRows(elemBasicType)
@@ -562,6 +563,11 @@
 	{
 		DE_ASSERT(type.isStructType());
 
+		// Override matrix packing layout flags in case the structure has them defined.
+		const deUint32 matrixLayoutMask = LAYOUT_ROW_MAJOR  | LAYOUT_COLUMN_MAJOR;
+		if (type.getFlags() & matrixLayoutMask)
+			layoutFlags = (layoutFlags & (~matrixLayoutMask)) | (type.getFlags() & matrixLayoutMask);
+
 		for (StructType::ConstIterator memberIter = type.getStruct().begin(); memberIter != type.getStruct().end(); memberIter++)
 			computeStd140Layout(layout, curOffset, curBlockNdx, curPrefix + "." + memberIter->getName(), memberIter->getType(), layoutFlags);
 
@@ -866,6 +872,8 @@
 
 		if (curType->isBasicType())
 		{
+			if ((curType->getFlags() & LAYOUT_MASK) != 0)
+				src << "layout(" << LayoutFlagsFmt(curType->getFlags() & LAYOUT_MASK) << ") ";
 			if ((curType->getFlags() & PRECISION_MASK) != 0)
 				src << PrecisionFlagsFmt(curType->getFlags() & PRECISION_MASK) << " ";
 			src << glu::getDataTypeName(curType->getBasicType());
diff --git a/modules/glshared/glsUniformBlockCase.hpp b/modules/glshared/glsUniformBlockCase.hpp
index db47d79..1e3f685 100644
--- a/modules/glshared/glsUniformBlockCase.hpp
+++ b/modules/glshared/glsUniformBlockCase.hpp
@@ -75,7 +75,7 @@
 						VarType			(const VarType& other);
 						VarType			(glu::DataType basicType, deUint32 flags);
 						VarType			(const VarType& elementType, int arraySize);
-	explicit			VarType			(const StructType* structPtr);
+	explicit			VarType			(const StructType* structPtr, deUint32 flags = 0u);
 						~VarType		(void);
 
 	bool				isBasicType		(void) const	{ return m_type == TYPE_BASIC;	}
diff --git a/scripts/build_android_mustpass.py b/scripts/build_android_mustpass.py
index 9b72b3e..39115d8 100644
--- a/scripts/build_android_mustpass.py
+++ b/scripts/build_android_mustpass.py
@@ -119,6 +119,7 @@
 		exclude("gles3-test-issues.txt"),
 		exclude("gles3-spec-issues.txt"),
 		exclude("gles3-temp-excluded.txt"),
+		exclude("gles3-waivers.txt"),
 	]
 MASTER_GLES3_PKG				= Package(module = GLES3_MODULE, configurations = [
 		# Master
@@ -129,7 +130,7 @@
 					  required		= True,
 					  filters		= MASTER_GLES3_COMMON_FILTERS,
 					  runtime		= "1h50m",
-					  runByDefault		= False),
+					  runByDefault	= False),
 		Configuration(name			= "master-2020-03-01",
 					  glconfig		= "rgba8888d24s8ms0",
 					  rotation		= "unspecified",
@@ -187,6 +188,11 @@
 					  filters		= MASTER_GLES3_COMMON_FILTERS + [include("gles3-pixelformat.txt"),
 																	 exclude("gles3-pixelformat-issues.txt")],
 					  runtime		= "1m"),
+		# Incremental dEQP
+		Configuration(name			= "incremental-deqp",
+					  filters		= [include("gles3-incremental-deqp.txt")],
+					  runtime		= "5m",
+					  runByDefault	= False),
 	])
 
 MASTER_GLES31_COMMON_FILTERS	= [
@@ -196,6 +202,7 @@
 		exclude("gles31-test-issues.txt"),
 		exclude("gles31-spec-issues.txt"),
 		exclude("gles31-temp-excluded.txt"),
+		exclude("gles31-waivers.txt"),
 	]
 MASTER_GLES31_PKG				= Package(module = GLES31_MODULE, configurations = [
 		# Master
@@ -277,7 +284,7 @@
 		Configuration(name			= "master",
 					  filters		= MASTER_VULKAN_FILTERS,
 					  runtime		= "2h39m",
-					  runByDefault		= False),
+					  runByDefault	= False),
 		Configuration(name			= "master-2019-03-01",
 					  filters		= [include("vk-master-2019-03-01.txt")],
 					  runtime		= "2h29m"),
@@ -287,6 +294,10 @@
 		Configuration(name			= "master-2021-03-01",
 					  filters		= MASTER_VULKAN_FILTERS + [exclude("vk-master-2019-03-01.txt"), exclude("vk-master-2020-03-01.txt")],
 					  runtime		= "10m"),
+		Configuration(name			= "incremental-deqp",
+					  filters		= [include("vk-incremental-deqp.txt")],
+					  runtime		= "5m",
+					  runByDefault	= False),
 	])
 
 MUSTPASS_LISTS				= [
diff --git a/scripts/log/log_parser.py b/scripts/log/log_parser.py
index b77af3f..c25c235 100644
--- a/scripts/log/log_parser.py
+++ b/scripts/log/log_parser.py
@@ -21,6 +21,7 @@
 #-------------------------------------------------------------------------
 
 import shlex
+import sys
 import xml.dom.minidom
 
 class StatusCode:
@@ -73,7 +74,12 @@
 		return "%s:%d: %s" % (self.filename, self.line, self.message)
 
 def splitContainerLine (line):
-	return shlex.split(line)
+	if sys.version_info > (3, 0):
+		# In Python 3, shlex works better with unicode.
+		return shlex.split(line)
+	else:
+		# In Python 2, shlex works better with bytes, so encode and decode again upon return.
+		return [w.decode('utf-8') for w in shlex.split(line.encode('utf-8'))]
 
 def getNodeText (node):
 	rc = []
@@ -131,7 +137,8 @@
 		self.filename			= filename
 
 	def parseLine (self, line):
-		text = line.decode('utf-8')
+		# Some test shaders contain invalid characters.
+		text = line.decode('utf-8', 'ignore')
 		if len(text) > 0 and text[0] == '#':
 			return self.parseContainerLine(line)
 		elif self.curResultText != None:
@@ -141,7 +148,8 @@
 
 	def parseContainerLine (self, line):
 		isTestCaseResult = False
-		text = line.decode('utf-8')
+		# Some test shaders contain invalid characters.
+		text = line.decode('utf-8', 'ignore')
 		args = splitContainerLine(text)
 		if args[0] == "#sessionInfo":
 			if len(args) < 3:
diff --git a/targets/vulkan_headless/vulkan_headless.cmake b/targets/vulkan_headless/vulkan_headless.cmake
new file mode 100644
index 0000000..7b362a3
--- /dev/null
+++ b/targets/vulkan_headless/vulkan_headless.cmake
@@ -0,0 +1,5 @@
+message("*** Using Vulkan Headless target")
+
+set(DEQP_TARGET_NAME "Vulkan Headless")
+
+set(DEQP_USE_HEADLESS ON)